Repository navigation
Commit 6e0597f
test(ui-merge): the ui gate-wiring pins read the root ci.yml that runs them; pins on jobs it did not port retire (#25879)
<!-- claude-projects-attribution: {"github_login":"os-tesla"} -->
_Requested by **Tesla** · [project
thread](https://claude.ai/code/project/chan_01AXsQkLFKRdQCqQ3RTr6Jao?thread=cmsg_01AXsQkLFKRdQCqQ3RTr6JaoAqVfFyhsxKuFcEP9YTBj25)_
Part of #25712 (4b PR 2d-1: the `ui/scripts/__tests__` files that read
`ui/.github/workflows/ci.yml` read the root ci.yml instead, or retire).
Part of objectstack#25677.
Clause-②: no
Metadata-protocol: none
## 维护者速读(草稿)
- **改了什么:** `ui/scripts/__tests__` 里有 28 个测试文件读的是嵌套的
`ui/.github/workflows/ci.yml`,而这个文件在 monorepo 里根本不会运行(GitHub 只运行仓库根目录的
`.github/workflows/`)。本 PR 新增一个小 helper,按路径读根目录的 `ci.yml`。17 个文件改为断言根
`ci.yml` 里真正运行的 `type-check-ui` / `test-ui` / `build-e2e-ui` 任务;另外 11
个文件里,凡是断言对象是根目录没有移植的 objectui 任务(coverage、Build Docs、shard 汇总、timings
上传、两个选择器、turbo 缓存规则)的用例,都退役,并在原处写明由 #25697 workflow 清单的哪一行承接。其中 4
个文件没有别的内容,整文件删除。
- **为什么改:** 2d-3 要删除 `ui/.github/`。删之前这 28 个文件必须先不依赖它,否则删除时会红 28
个文件。改完以后,无论 `ui/.github/` 在不在,这 28 个文件都是绿的。
- **风险与代价(含回滚):** 只动测试和一个测试 ledger,不动任何会运行的代码、workflow 或受管面。退役的 pin
不会悄悄消失:每一条都列在下面的 follow-up 表里。其中一条是真问题:根目录 `type-check-ui` 的 Turbo
缓存保存没有 objectui#6577 的上限(把那组 pin 指向根任务,6 条里 5 条红)。按 PM 的裁定不在本 PR 里改根
workflow,只列为 follow-up。回滚 = revert 本 PR。
- **席位意见:**(留空)
- **你要做的:** 无。Tier S,由席位落地。
## 席位核对
(left for the dispatch seat)
## Why
GitHub runs only the repository root's `.github/workflows/`. Since the
cutover (#25825), objectui's own `ci.yml` sits at
`ui/.github/workflows/ci.yml` and runs nowhere. Its four jobs that
matter were ported into the root `ci.yml` by #25697: `Type Check` became
`type-check-ui`, `Test` became `test-ui`, `Build & E2E` became
`build-e2e-ui`, and `lint.yml`'s `Lint` became `lint-ui`.
The 2d census (local, `main` `e167956e` plus 2c, with `ui/.github/`
deleted; per-file table below) found that deleting `ui/.github/` reds 81
`ui/scripts/__tests__` files. Thirty of them read
`ui/.github/workflows/ci.yml`. Two of those thirty,
`markdown-test-inputs.test.ts` and
`select-affected-tests-wiring.test.ts`, belong to #25851 and are not
touched here. This PR is the other 28. The 51 files that scan the
workflow directory or read other single workflows are 2d-2 and 2d-3.
The rule for each pin, per the dispatcher's ruling: retarget it to the
root workflow by path, or, when the root did not port its subject,
retire it and name the roster row (#25697, comment 6388182608) or the
root job that now carries the subject. Nothing is skipped, and nothing
is folded into a root workflow here; work worth folding is listed as
follow-up rows.
## What changes
- **New `ui/scripts/__tests__/helpers/root-ci.ts`.** It reads
`<workspaceRoot()>/.github/workflows/ci.yml` and never a copy under
`ui/`. It provides:
- `jobBlock(ci, key)`, which throws on a missing job, so a renamed job
is a red pin and never an empty block;
- `triggerBlock` and `withoutComments`;
- `uiFilterGlobs`, the `filter` job's `ui:` paths filter, which throws
on an empty list;
- `globMatches` and `repoPath`;
- `uiRun(alias)`, which returns `pnpm --dir ui run <alias>`, the root's
spelling of objectui's commands.
- **17 files retargeted** to the root jobs. The ordering pins keep their
meaning inside the root job: "after `pnpm install --frozen-lockfile`",
"before or after turbo's `type-check` task", "`fetch-depth: 0` above the
step". The three path-filter pins asserted that objectui's `push`
`paths-ignore` did not hide a surface. They now assert two things: the
root triggers carry no path filter at all, and the `filter` job's `ui:`
globs cover each surface the gate judges, which is what the job's `if:`
reads.
- **11 files retire pins on jobs the root did not port.** Each
retirement is a comment where the pin was, naming its row. Four files
had nothing else and are deleted: `coverage-shard-reporter-readability`,
`coverage-shard-width`, `docs-build-trigger` and
`turbo-cache-save-bound`. The pure-module cases in the other seven stay,
for example `check-test-shard-results`'s budget sizing, which reads only
constants.
- **`ui/scripts/markdown-test-inputs.mjs`** drops two ledger rows:
`docs-build-trigger.test.ts` (deleted) and
`check-action-forward-parity.test.ts`, whose only markdown literal
(`content/docs/guide/ci-cd-pipeline.md`, an argument to the old matcher
self-check) went with the retargeted pin. `markdown-test-inputs.test.ts`
itself is not touched. Without these two removals it reports
`stale-test`.
### Disposition table (28 files)
| # | File | What it read in `ui/.github/workflows/ci.yml` | Disposition
| Carried by now |
|---|---|---|---|---|
| 1 | `check-action-forward-parity` | step after install; `push`
`paths-ignore` | retarget | `type-check-ui`; no trigger path filter;
`ui:` globs cover every `SURFACES` file |
| 2 | `check-doc-example-shared-reader` | the step | retarget |
`type-check-ui` |
| 3 | `check-handler-key-read-sites` | the step | retarget |
`type-check-ui` |
| 4 | `check-i18n-call-site-keys` | step after install | retarget |
`type-check-ui` |
| 5 | `check-i18n-designer-table-parity` | step after install;
`paths-ignore` | retarget | `type-check-ui`; `ui:` globs cover the
designer table and the gate |
| 6 | `check-i18n-en-drift` | step after install; `fetch-depth: 0`;
`paths-ignore` | retarget | `type-check-ui` (`fetch-depth: 0`); `ui:`
globs cover the 10 packs, the ledger and the designer table |
| 7 | `check-lucide-icon-record-names` | `pnpm <alias>` anywhere |
retarget | root ci.yml `run: pnpm --dir ui run <alias>` |
| 8 | `check-object-metadata-write-doors` | the step | retarget |
`type-check-ui` |
| 9 | `check-package-self-import` | step after install, in `type-check`
| retarget | `type-check-ui` |
| 10 | `check-phantom-dependencies` | step after install, in
`type-check` | retarget | `type-check-ui` |
| 11 | `check-unreferenced-sources` | step after install, in
`type-check` | retarget | `type-check-ui` |
| 12 | `check-published-tsconfig-tooling-exclude` | the step;
`published-dist-gate.yml` | retarget; workflow half retired |
`type-check-ui`; `published-dist-gate.yml` is roster **row 23** (kept,
follow-up port) |
| 13 | `check-pending-changeset-literals` | the `Decide whether this
change needs a full run` exclude pathspecs | retarget | `test-ui` reads
the `ui` output; `ui:` globs cover `scripts/` and `packages/` test
sources |
| 14 | `scripts-type-check` | `type-check` job, step after install |
retarget | `type-check-ui` |
| 15 | `vitest-config-type-check` | after install, before `pnpm
type-check` | retarget | `type-check-ui`, before `pnpm exec turbo run
type-check` |
| 16 | `vitest-setup-type-check` | after `pnpm type-check` | retarget |
`type-check-ui`, after `pnpm exec turbo run type-check` |
| 17 | `ensure-chromium-ready` | `ci.yml` and `live-e2e.yml` use the
script, no `--with-deps` | retarget; `live-e2e` half retired |
`build-e2e-ui`; `live-e2e.yml` is roster **row 17** (kept, follow-up
port) |
| 18 | `check-doc-expression-carriage` | `node
scripts/check-doc-expression-carriage.mjs` in `docs` | 1 case retired |
roster **row 7 `Build Docs (@object-ui/site)`** (kept, follow-up port);
the page-row pin stays |
| 19 | `check-test-shard-results` | `test-aggregate` wiring; the `Test
(shard N/M)` name | 8 cases retired, budget case kept | roster **row 7
`Test (the shard aggregate)`** (dropped until cutover; port with
objectstack's shard attestation) |
| 20 | `shard-headroom` | headroom step in `test-aggregate` and
`coverage-report` | 2 cases retired | roster **row 7** aggregate and
coverage |
| 21 | `test-file-timings` | `test` job name, timing reporter, upload;
refresh `--shards` | 4 cases retired | roster **row 28**
`test-shard-timings-refresh.yml` (→ sub-issue 4; "restore Test UI's
timings reporter and upload"); `test-ui`'s comment records the wait |
| 22 | `select-affected-tests` | the `Select the tests this change
affects` wiring | 4 cases retired | roster **row 7 `Test (shard
n/16)`**: `test-ui` runs the whole suite and does not wire the selector
|
| 23 | `select-type-check-scope` | `tc-scope` step, `TURBO_FORCE`,
root-programs build | 5 cases retired | roster **row 7 `Type Check`**:
`type-check-ui` uses turbo `...[base]` and its own root-programs build
step |
| 24 | `report-turbo-cache` | `type-check` prune and save; every
workflow's turbo cache | 7 cases retired | the four root `* UI` jobs
carry objectstack's cache steps (job key, `build-core` fallback,
push-only save, no prune or report); follow-up **F2** |
| 25 | `coverage-shard-reporter-readability` (deleted, 4 cases) |
`test-coverage` reporter flags | retired | roster **row 7 coverage**
(kept, follow-up port) |
| 26 | `coverage-shard-width` (deleted, 5 cases) | `test-coverage` and
`coverage-report` width | retired | roster **row 7 coverage** (kept,
follow-up port) |
| 27 | `docs-build-trigger` (deleted, 17 cases) | `docs` job's
`docs-changes` decision step | retired | roster **row 7 `Build Docs`**
(kept, follow-up port) |
| 28 | `turbo-cache-save-bound` (deleted, 6 cases) | `type-check`'s
split, bounded cache save | retired | `type-check-ui` carries the save
but not the bound; measured below; follow-up **F1** |
### Follow-up rows (fold-worthy, not done here)
| Row | What | Why it is not in this PR |
|---|---|---|
| **F1** | Bound the root `* UI` jobs' Turbo cache saves the
objectui#6577 / #7048 way: split restore and save, `timeout-minutes`,
`continue-on-error`, the `cache-hit` guard, and a ceiling that leaves
the verdict room. Then restore `turbo-cache-save-bound`'s pins against
`type-check-ui`. | **A real finding.** Its six pins, pointed at the root
`type-check-ui` job by a scratch copy, fail 5 of 6. Only "save after the
last command" holds. The other five fail because the job keeps a
combined `actions/cache` (the pnpm store), its save has no bound,
`continue-on-error` or `cache-hit` guard, and its ceiling is 40 minutes.
Fixing it is a root `ci.yml` edit (Tier H), and the dispatcher ruled no
folds into root workflows in these PRs. |
| F2 | Decide whether the root ui jobs run `report-turbo-cache.mjs`
(prune before save, restored-key notice), or retire the script. | Root
cache design is objectstack's; a fold. |
| F3 | Test UI shard aggregate at the required set: port with
objectstack's shard attestation, or retire
`check-test-shard-results.mjs` and `shard-headroom.mjs`. | Roster row 7,
the maintainer's required-set call. |
| F4 | Coverage lane: push lane vs objectstack's `coverage-nightly.yml`,
then restore the reporter and width pins. | Roster row 7, kept,
follow-up port. |
| F5 | `Build Docs (@object-ui/site)`: port, then restore
`docs-build-trigger`'s derived closure and the carriage-census wiring
pin. | Roster row 7, kept, follow-up port. |
| F6 | Timings reporter and upload on `test-ui` with the refresh
workflow, then restore `test-file-timings`'s ci pins. | Roster row 28
(sub-issue 4). |
| F7 | Wire `select-affected-tests.mjs` into `test-ui` once its `git
diff` paths are cwd-relative, or retire it, and the same for
`select-type-check-scope.mjs`. | Roster row 7. |
| F8 | `live-e2e.yml` (row 17) and `published-dist-gate.yml` (row 23)
ports bring their workflow halves back. | Kept, follow-up port. |
## Verification
Run from `ui/` per `ui/AGENTS.md`, at this head (`main` `c475b45b` plus
this commit):
| Run | Result |
|---|---|
| The 24 modified test files plus `markdown-test-inputs.test.ts`, with
`ui/.github/` present | 25 files, all passed |
| The same 24 files with `ui/.github/` moved aside (the 2d-3 layout) |
24 passed (779 tests). `markdown-test-inputs.test.ts` fails at
collection on `ENOENT ui/.github/workflows/ci.yml`; that file is
#25851's. |
| Whole `scripts/__tests__` suite, `--shard=1/4` through `4/4`, under
`scripts/pm/os-verify-lock.sh` | 5,447 passed, 26 failed, 2 skipped |
| `pnpm type-check:scripts` | the one error is
`packages/components/src/renderers/action/resolve-icon.ts(265,69)`
TS2339, identical on unmodified `main` here; none in a touched file |
| `pnpm exec eslint` (touched files), `pnpm lint:root`, `lint:coverage`,
`check:test-path-roots`, `check:ui-root-lookups`,
`check:lint-rule-coverage`, `check:entry-guard`,
`check:vi-mock-override-shape`; root `pnpm check:test-source-alias` |
all exit 0; no lint warning in a touched file |
Of the 26 suite failures, one is the owned row from 2c
(`check-pre-install-import-graph`, `unresolved:
scripts/objectstack-pin.mjs`; it clears in 2d-3 with the nested
workflows). The other 25 are `date-only-zone-pins-10183` ×23 and
`unit-registry-absence-collision` ×2. They fail identically on a clean
`main` checkout here ("ran no case at all" on this unbuilt box), so they
are not this diff's.
Derived gates (`node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` from this diff): 18 families, all exit 0 at
this head. `--ran` reconciles 18 run, 0 NOT-MEASURED, 0 UNRUN. The
slowest were `check:query-options-erasure` (308 s),
`check:type-check-debt` (287 s) and `check-comment-mask-corpus` (208 s).
<details>
<summary>The 2d census: what deleting <code>ui/.github/</code> reds (81
files; 30 read <code>ci.yml</code>)</summary>
Local, `main` `e167956e` plus 2c, whole suite in two shards with
`ui/.github/` deleted. 83 files fail. Two of them
(`date-only-zone-pins-10183`, `unit-registry-absence-collision`) fail
identically on clean `main` on that box. The other 81 read
`ui/.github/`.
- `ui/.github/workflows/ci.yml` (30 files): rows 1–28 above, plus
#25851's `markdown-test-inputs` and `select-affected-tests-wiring`.
- The workflow directory as a population (27 files, 2d-2):
`check-doc-component-types`, `check-doc-example-ids`,
`check-doc-example-types`, `check-doc-json-fences`,
`check-doc-snippet-types`, `check-hand-rolled-comment-mask`,
`check-i18n-dead-keys`, `check-lint-rule-coverage`,
`check-lockfile-dedupe`, `check-lockfile-integrity`,
`check-pre-install-import-graph`, `check-prompt-component-keys`,
`check-published-dist-tooling`, `check-readme-exports`,
`check-shell-escape-residue`, `check-skill-eval-tokens`,
`check-skill-examples`, `check-skills-paths`, `check-vi-mock-inherit`,
`check-vi-mock-specifiers`, `ci-setup-pnpm-wiring`,
`dependabot-merge-gate`, `docs-links-workflow`, `merge-queue-reporting`,
`workflow-cache-save-bound`, `doc-version-claims`,
`labeler-package-coverage` (`.github/labeler.yml`).
- Single workflows (24 files, 2d-2/2d-3):
- `repo-gates.yml`: `check-action-ref-convention`,
`check-control-bytes`, `check-doc-fence-languages`,
`check-doc-snippet-emitted-census`, `check-docs-route-eager-closure`;
- `lint.yml`: `bash32-floor-wiring`, `check-test-path-roots`,
`check-vi-mock-override-shape`, `entry-guard-wiring`, `lint-workflow`;
- `changeset-presence.yml`: `check-changeset-claims`,
`check-changeset-presence`, `render-changeset-claims-comment`;
- `changeset-guard.yml`: `check-changeset-no-major`,
`check-changeset-overwrite`;
- `performance-budget.yml`: `check-eager-closure-budget`,
`ci-cd-pipeline-doc`, `render-budget-comment`;
- one file each: `check-governed-queue-guard`
(`governed-surface-guard.yml`), `check-links-workflow`
(`check-links.yml`), `check-merge-queue-head`
(`merge-queue-head-patrol.yml`), `check-new-cross-file-line-citations`
(`line-citation-gate.yml`), `check-required-check-set`
(`dependabot-auto-merge.yml`, `required-check-set-patrol.yml`),
`shadcn-check-report` (`shadcn-check.yml`).
</details>
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01A6SEitNngAMugGbuJHWsDS
Co-authored-by: Claude <noreply@anthropic.com>1 parent c475b45 commit 6e0597f
30 files changed
Lines changed: 447 additions & 1616 deletions
File tree
- ui/scripts
- __tests__
- helpers
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
| 28 | + | |
| 29 | + | |
| 30 | + | |
| 31 | + | |
| 32 | + | |
| 33 | + | |
| 34 | + | |
| 35 | + | |
25 | 36 | | |
26 | 37 | | |
27 | 38 | | |
| |||
723 | 734 | | |
724 | 735 | | |
725 | 736 | | |
726 | | - | |
| 737 | + | |
| 738 | + | |
| 739 | + | |
| 740 | + | |
| 741 | + | |
727 | 742 | | |
728 | 743 | | |
729 | 744 | | |
730 | 745 | | |
731 | 746 | | |
732 | 747 | | |
733 | | - | |
734 | | - | |
735 | | - | |
| 748 | + | |
| 749 | + | |
| 750 | + | |
| 751 | + | |
736 | 752 | | |
737 | 753 | | |
738 | 754 | | |
739 | 755 | | |
740 | | - | |
741 | | - | |
742 | | - | |
743 | | - | |
744 | | - | |
745 | | - | |
746 | | - | |
747 | | - | |
748 | | - | |
749 | | - | |
750 | | - | |
751 | | - | |
752 | | - | |
753 | | - | |
754 | | - | |
755 | | - | |
756 | | - | |
757 | | - | |
758 | | - | |
759 | | - | |
760 | | - | |
| 756 | + | |
| 757 | + | |
| 758 | + | |
| 759 | + | |
| 760 | + | |
| 761 | + | |
| 762 | + | |
| 763 | + | |
| 764 | + | |
| 765 | + | |
761 | 766 | | |
762 | | - | |
763 | | - | |
764 | | - | |
765 | | - | |
766 | | - | |
767 | | - | |
768 | | - | |
769 | | - | |
770 | | - | |
771 | | - | |
772 | 767 | | |
| 768 | + | |
773 | 769 | | |
774 | | - | |
775 | | - | |
776 | | - | |
777 | | - | |
778 | | - | |
779 | | - | |
| 770 | + | |
| 771 | + | |
| 772 | + | |
| 773 | + | |
| 774 | + | |
780 | 775 | | |
| 776 | + | |
| 777 | + | |
| 778 | + | |
781 | 779 | | |
782 | 780 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
15 | 15 | | |
16 | 16 | | |
17 | 17 | | |
| 18 | + | |
18 | 19 | | |
19 | 20 | | |
20 | 21 | | |
| |||
482 | 483 | | |
483 | 484 | | |
484 | 485 | | |
485 | | - | |
486 | | - | |
487 | | - | |
488 | | - | |
| 486 | + | |
| 487 | + | |
| 488 | + | |
| 489 | + | |
| 490 | + | |
| 491 | + | |
| 492 | + | |
489 | 493 | | |
490 | 494 | | |
491 | 495 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
848 | 848 | | |
849 | 849 | | |
850 | 850 | | |
851 | | - | |
852 | | - | |
853 | | - | |
854 | | - | |
| 851 | + | |
| 852 | + | |
| 853 | + | |
| 854 | + | |
| 855 | + | |
| 856 | + | |
855 | 857 | | |
856 | 858 | | |
857 | 859 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| |||
1148 | 1149 | | |
1149 | 1150 | | |
1150 | 1151 | | |
1151 | | - | |
1152 | | - | |
1153 | | - | |
1154 | | - | |
| 1152 | + | |
| 1153 | + | |
| 1154 | + | |
| 1155 | + | |
| 1156 | + | |
| 1157 | + | |
| 1158 | + | |
1155 | 1159 | | |
1156 | 1160 | | |
1157 | 1161 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
20 | 20 | | |
21 | 21 | | |
22 | 22 | | |
| 23 | + | |
23 | 24 | | |
24 | 25 | | |
25 | 26 | | |
| |||
2129 | 2130 | | |
2130 | 2131 | | |
2131 | 2132 | | |
2132 | | - | |
2133 | | - | |
2134 | | - | |
2135 | | - | |
| 2133 | + | |
| 2134 | + | |
| 2135 | + | |
| 2136 | + | |
| 2137 | + | |
| 2138 | + | |
| 2139 | + | |
| 2140 | + | |
2136 | 2141 | | |
2137 | 2142 | | |
2138 | 2143 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
| 16 | + | |
16 | 17 | | |
17 | 18 | | |
18 | 19 | | |
| |||
322 | 323 | | |
323 | 324 | | |
324 | 325 | | |
325 | | - | |
| 326 | + | |
| 327 | + | |
| 328 | + | |
| 329 | + | |
| 330 | + | |
326 | 331 | | |
327 | 332 | | |
328 | 333 | | |
| |||
333 | 338 | | |
334 | 339 | | |
335 | 340 | | |
336 | | - | |
337 | | - | |
338 | | - | |
| 341 | + | |
| 342 | + | |
| 343 | + | |
| 344 | + | |
339 | 345 | | |
340 | 346 | | |
341 | 347 | | |
342 | 348 | | |
343 | | - | |
344 | | - | |
345 | | - | |
346 | | - | |
347 | | - | |
348 | | - | |
| 349 | + | |
| 350 | + | |
| 351 | + | |
| 352 | + | |
| 353 | + | |
| 354 | + | |
| 355 | + | |
| 356 | + | |
| 357 | + | |
| 358 | + | |
| 359 | + | |
| 360 | + | |
| 361 | + | |
349 | 362 | | |
350 | 363 | | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
25 | 25 | | |
26 | 26 | | |
27 | 27 | | |
| 28 | + | |
28 | 29 | | |
29 | 30 | | |
30 | 31 | | |
| |||
964 | 965 | | |
965 | 966 | | |
966 | 967 | | |
967 | | - | |
| 968 | + | |
| 969 | + | |
| 970 | + | |
| 971 | + | |
| 972 | + | |
968 | 973 | | |
969 | 974 | | |
970 | 975 | | |
971 | 976 | | |
972 | 977 | | |
973 | 978 | | |
974 | | - | |
975 | | - | |
976 | | - | |
| 979 | + | |
| 980 | + | |
| 981 | + | |
| 982 | + | |
977 | 983 | | |
978 | 984 | | |
979 | 985 | | |
980 | 986 | | |
981 | 987 | | |
982 | 988 | | |
983 | 989 | | |
984 | | - | |
985 | | - | |
| 990 | + | |
| 991 | + | |
| 992 | + | |
986 | 993 | | |
987 | 994 | | |
988 | 995 | | |
989 | | - | |
990 | | - | |
991 | | - | |
992 | | - | |
993 | | - | |
994 | | - | |
| 996 | + | |
| 997 | + | |
| 998 | + | |
| 999 | + | |
| 1000 | + | |
| 1001 | + | |
| 1002 | + | |
| 1003 | + | |
| 1004 | + | |
995 | 1005 | | |
996 | | - | |
997 | | - | |
998 | | - | |
999 | | - | |
1000 | | - | |
1001 | | - | |
1002 | | - | |
1003 | | - | |
1004 | | - | |
1005 | | - | |
1006 | | - | |
1007 | | - | |
1008 | | - | |
1009 | | - | |
1010 | | - | |
1011 | | - | |
1012 | | - | |
1013 | | - | |
1014 | | - | |
| 1006 | + | |
| 1007 | + | |
| 1008 | + | |
| 1009 | + | |
| 1010 | + | |
| 1011 | + | |
| 1012 | + | |
| 1013 | + | |
| 1014 | + | |
| 1015 | + | |
1015 | 1016 | | |
1016 | | - | |
1017 | 1017 | | |
1018 | 1018 | | |
0 commit comments