Repository navigation
Commit e115841
ci(test): check out Test Core and Test UI at depth 1 and fetch only the history they read (#31429)
<!-- claude-projects-attribution: {"github_login":"os-project-manager"}
-->
_Requested by **Leehom** · [project
thread](https://claude.ai/code/project/chan_01TenzsRopZj4jMbvjX8uz1X?thread=cmsg_01TenzsRopZj4jMbvjX8uz1XL3LLnsMifPUBTUagK6HWvv)_
domain:devx#3 · os-project-manager · session_01FEkQ5ocKVSrMoP2SVG2dfL
Refs #22034
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:根 `ci.yml` 里 Test Core 规划(`test-plan`)、Test Core 分片(`test`)、Test
UI 分片(`test-ui`)三个 job 不再用 `fetch-depth: 0`,改为深度 1 检出,再加一步只取"当前提交的完整祖先 +
main(PR 目标分支不是 main 时再加它)",不取 tag、不取其它分支;`select-shard-packages.sh`
遇到浅克隆先自己补历史,补不到就报错退出;正文附全部 job 读 git 历史的清单。
- 为什么改:`fetch-depth: 0` 每次拉约 1.5k 个分支和 1.7 万个 tag,慢的是这批 ref 而不是 main
的深度;11-03 那次平台变慢时 19 个 Test UI 分片还没跑测试就在 30 分钟墙上被取消。按 #22034 的裁决,第一个 PR
只动这两条分片车道,读约 100 次运行后再动其它 job。
- 风险与回滚:风险是选包结果变化;已在三类事件(PR、merge
queue、push)上用真实提交对比全历史克隆,包集合与规划摘要逐字节一致。新步骤三次拉取都失败会让该 job
变红而不是静默跑全量。回滚即还原本 PR。
- 先看:`.github/workflows/ci.yml` 的 `test` job 新步骤 "Fetch this commit's
history and the base
branch"(注释说明每个读者);`scripts/ci/select-shard-packages.sh` 新的浅克隆守卫段;正文的
Inventory 表。
- 两分钟验证:打开本 PR 的 CI,看 "Plan Test Core shards" 的新步骤日志打印 `shallow=false,
no tags`,以及 "Plan this run's Test Core shards" 的 `Affected-set diff
base:` 是本 PR 的 merge base。
- 需要你做的:合并本 PR(受管 `.github/workflows/**`,Tier H,须维护者手合)。
## What changes
Three jobs in the root `.github/workflows/ci.yml`, and nothing else in
any workflow:
1. **`test-plan` ("Plan Test Core shards"), `test` ("Test Core (N/8)")
and `test-ui` ("Test UI (N/16)") check out at depth 1.** Their
`fetch-depth: 0` lines (L653, L882, L3825 on `main` `405a78eae`) are
gone; `actions/checkout@v7` is left at its default.
2. **One new step in each, right after the checkout, byte-identical in
all three: "Fetch this commit's history and the base branch".** It runs
`git fetch --no-tags --unshallow origin HEAD_SHA
+refs/heads/main:refs/remotes/origin/main`, adding
`+refs/heads/BASE:refs/remotes/origin/BASE` when a pull request targets
a branch other than `main`. That is HEAD's whole ancestry (the PR's
merge base, the queue's `base_sha` and the push's `before` sha are all
in it) and the base branch, with no tags and no other heads. Three
attempts, then a red step with an `::error::`; it prints the commit
count, `shallow=false` and the remote refs it holds. The `test` job's
copy carries the comment naming each reader.
3. **`scripts/ci/select-shard-packages.sh` deepens a shallow checkout
itself, or exits 1.** On `pull_request`, `merge_group` and `push`, a
shallow checkout is deepened by HEAD's sha before any diff base is
chosen; a deepen that fails prints an `::error::` and exits 1 before
`turbo` runs. `schedule` and `workflow_dispatch` read no history and are
left alone. This is the guard for a caller without the step above,
because on a shallow clone this reader does not fail, it answers wrong
(Inventory row 1). The three comments that said "`fetch-depth: 0`
already makes this resolve" now name the fetch step.
4. **Pins moved:** `ui/scripts/__tests__/select-affected-tests.test.ts`
asserted `fetch-depth: 0` on the `test-ui` checkout. It now asserts the
fetch step sits between the checkout and the select step, deepens a
shallow clone, and fetches `main` and the PR's base branch.
`select-shard-packages.selftest.sh` gains four cases (below) and its
floor moves 32/158 to 36/193.
⛔ Not in this PR, as the order rules: `type-check-ui` (still
`fetch-depth: 0`, L3529) and every other job, any `run:` body beyond the
fetch, the job graph, any timeout, any other workflow file,
`ui/.github/**`.
## Why
Card #22034, step 2, first PR, released to `domain:devx` by the
maintainer's 「以上都同意」 (recorded on the card as 6718334937). `fetch-depth:
0` uses the refspec `+refs/heads/*` plus `+refs/tags/*`. The card
measured that ref set, not main's depth, as the cost (473 s locally
against 29-32 s for main alone; CI p99 553 s). `domain:devx#2`'s pointer
6674639434 measured the 2026-11-03 slowdown at 5.6-6.5x on the full-ref
fetch against about 3x on shallow fetches, with 19 `Test UI (N/16)`
shards cancelled at their 30-minute wall behind 1063-1799 s checkouts.
After this lands the seat reads about 100 runs of these three jobs: the
checkout cost is now the "Checkout repository" step plus the new fetch
step.
## Inventory: every step in the root `ci.yml` that reads git history
On `main` `405a78eae`. "Shallow today" is what the reader does on a
depth-1 clone with nothing else fetched. Found by reading every `run:`
step of all 18 jobs, then every script and package build they call
(`scripts/**`, `ui/scripts/**`, `packages/*/scripts/**`), then every
test file that runs `git` against the real checkout rather than a
fixture repo.
| # | Job · step | Reads | Needs | Shallow today | This PR |
|---|---|---|---|---|---|
| 1 | `test-plan` · Plan this run's Test Core shards; `test` · Compute
this shard's package set → `scripts/ci/select-shard-packages.sh` | PR:
`refs/remotes/origin/BASE` (fetched by ref if absent),
`merge-base(origin/BASE, HEAD)`, `rev-list --count PINNED..MERGE_BASE`
(log line only). Queue: `base_sha` (fetched by sha if absent). Push:
`before` sha (same). Then `git diff --name-only BASE HEAD` and `turbo ls
--affected` with `TURBO_SCM_BASE`. `schedule`/`workflow_dispatch`:
nothing. | HEAD's ancestry down to the base, and the base branch tip |
PR: base branch fetched, `merge-base` finds no path through the graft,
`::warning::` and the FULL list (selects everything, loudly). Queue and
push: base fetched by sha, `git diff` answers, and turbo prints `WARNING
unable to detect git range, assuming all files have changed` and selects
every package, exit 0, no annotation (measured below: 131 packages).
**Silent.** | Fetch step deepens first; the script now deepens a shallow
clone itself or exits 1 (`::error::`). |
| 2 | `test` · Build this shard's dependency closure / Build the sliced
package's dependency closure; `test-ui` · Build the @objectstack
packages objectui consumes → spec's `build` → `gen:schema`
(`packages/spec/scripts/build-schemas.ts`) | `merge-base HEAD
origin/main` (fetches `origin/main` at `--depth=1` if absent); when that
cannot answer, the committed `authorable-surface.base.json` anchor (its
rev fetched at `--depth=1`); the release tag it dates tombstones by
(fetched at `--depth=1`); trees at those revs. Only when turbo does not
replay spec's build from cache. | HEAD's ancestry and `origin/main` for
the merge-base path | Takes the committed-anchor path and prints `ℹ️
shallow history — merge-base HEAD origin/main cannot answer here` (a
documented, deliberate fallback, already what every depth-1 job runs). |
Fetch step keeps the merge-base path these jobs took under `fetch-depth:
0`. |
| 3 | `test-ui` · Select the tests this change affects (inline) →
`ui/scripts/select-affected-tests.mjs` | PR: `merge-base
refs/remotes/origin/BASE HEAD` (no fetch). Queue: `base_sha`. Then `git
diff --name-only --relative BASE...HEAD` (three-dot) and `git ls-files`.
Other events: full suite, no history. | HEAD's ancestry and the base
branch | PR: no `origin/BASE`, `::warning::` and the full suite. Queue:
base absent, `git diff` exits 128, `::warning::` and the full suite.
Loud, selects everything. | Fetch step deepens first. No guard added in
the inline step: `select-affected-tests-wiring.test.ts` runs that step
against the real checkout, and a shallow guard there would red it in
every depth-1 checkout. |
| 4 | `test` · Run this shard's tests; `test-ui` · Run the ui tests |
Suites read the working tree (`git grep`, `git ls-files`) or build
fixture repositories; `select-affected-tests-wiring.test.ts` stands in
for `merge-base`; `check-lockfile-integrity.test.ts` uses `--base-ref
HEAD`. None reads the real repository's history, tags or other branches.
| nothing | unaffected | none |
| 5 | `type-check-ui` · check:lockfile-integrity (PR only) →
`ui/scripts/check-lockfile-integrity.mjs --base-ref origin/BASE` | `git
merge-base origin/BASE HEAD`, `git show REV:pnpm-lock.yaml` | HEAD's
ancestry and the base branch | Throws "could not find a merge base"; the
step is `continue-on-error`, so the alarm reads nothing and the job
stays green. **Silent in effect.** | PR 2 (`type-check-ui` keeps
`fetch-depth: 0` here). |
| 6 | `type-check-ui` · Verify changed en strings were followed by the
nine translations → `ui/scripts/check-i18n-en-drift.mjs` | `merge-base
HEAD origin/$GITHUB_BASE_REF`, then `origin/main`, then `main`; `git
show`/`cat-file` at the base | HEAD's ancestry and `origin/main` (and
the PR base) | Exits 1 naming the shallow clone. Loud. | PR 2 |
| 7 | `type-check-ui` · Run type-check over the ui packages | `turbo run
type-check --filter=...[BASE]`, BASE = the PR's payload `base.sha` or
the queue's `base_sha` | HEAD's ancestry down to BASE | Not measured for
the `--filter=[...]` form; the same SCM code measured silent-all for `ls
--affected` (row 1), so expect every ui package type-checked. | PR 2 |
| 8 | `type-check-ui` · Build the @objectstack packages objectui
consumes | spec's build, as row 2 | as row 2 | as row 2 | PR 2 |
| 9 | `filter` · `dorny/paths-filter` v4.0.3 (already depth 1) | PR: the
GitHub API's file list. Push: `before` vs `after`. Queue: `base_sha` vs
`head_sha`, base fetched at depth 1, two trees diffed. | two trees, no
ancestry | Works; built for depth 1. | none |
| 10 | `build-e2e-ui` · check:eager-closure — resolve the base-branch
ceiling constants (PR only, already depth 1) | fetches the payload
`base.sha` and `origin/BASE` tip at `--depth=1`, `git cat-file -p` the
checker at each | two commits, no ancestry | Works; built for depth 1.
Failure is `continue-on-error` and the checker exits 2 (loud). | none |
| 11 | Every other job that builds spec (`build-core`, `dogfood`,
`dogfood-verify`, `temporal-conformance`, `ui-deps`, `lint-ui`,
`build-e2e-ui`, `live-e2e-ui`, `ui-published-artifacts`; all already
depth 1) | spec's build, as row 2 | as row 2 | Committed-anchor path, as
row 2. | none |
| 12 | `build-e2e-ui` · The committed SDUI manifest is the one this tree
generates | `git diff` of the working tree, `rev-parse HEAD` | nothing |
unaffected | none |
No step reads tags or another branch outside the ones above. No other
script a `ci.yml` step calls reads history: `plan-test-core-shards.mjs`,
`partition-test-shards.mjs`, `check-shard-attestation.mjs`,
`check-test-completeness.mjs`, `report-test-leftovers.mjs` (`ls-files
--others`), `report-test-timings.mjs`, `check-test-suite-ceilings.mjs`,
`run-with-stall-guard.mjs`, `assert-turbo-remote-cache.mjs`,
`prune-turbo-cache.mjs`, `check-dts-*`, `check-lean-entry-closure.mjs`,
`check-sourcemap-no-sources-content.mjs`, `gen-sdui-manifest-node.mjs`,
and every `pnpm --dir ui run` script in `lint-ui`/`type-check-ui` other
than rows 5-6 (grep for `merge-base`, `log`, `rev-list`, `show REV:`,
`cat-file`, `fetch` in each).
## Tests
- `bash scripts/ci/select-shard-packages.selftest.sh`: `all 36 cases
passed (193 checks)`. New and changed cases:
- push and merge_group on a shallow clone: the run prints the deepen
line, the clone ends `shallow=false`, and `merge-base(C0, HEAD)` answers
(it did not before: a by-sha fetch of the base leaves HEAD grafted);
- pull_request, merge_group and push on a shallow clone whose remote is
unreachable: exit 1, the `::error::` line, `turbo` never called, no
`turbo-ls.json`, no `::warning::`;
- schedule on a shallow clone: no deepen, still shallow, the FULL list.
- **Ablation** of the guard on the committed head (`node
scripts/ablation-replace.mjs --file scripts/ci/select-shard-packages.sh
--anchor 'pull_request | merge_group | push)' --replacement
'pull_request-ABLATED)'`): mutation landed (anchor 1 → 0), selftest
`SELFTEST FAILED (36 cases, 193 checks)` with 24 FAIL lines; restored,
blob equals HEAD, `git diff HEAD` empty.
- `pnpm exec vitest run` (from `ui/`) on
`select-affected-tests.test.ts`, `select-affected-tests-wiring.test.ts`,
`test-file-timings.test.ts`, `check-lockfile-integrity.test.ts`,
`check-changeset-presence.test.ts`: 128 passed. Before the pin moved,
`select-affected-tests.test.ts` failed on exactly that `fetch-depth: 0`
assertion.
## Acceptance notes
**The selection does not change: measured on real commits, the new fetch
against a full-history clone.**
The control is a clone that ran the exact `fetch-depth: 0` refspec
(`+refs/heads/*` and `+refs/tags/*`, 10300 refs). The candidate is a
fresh depth-1 fetch of the same sha, as `actions/checkout` makes it,
then this PR's fetch step extracted from `ci.yml` and run as written.
Each runs the tree's own `select-shard-packages.sh` and
`plan-test-core-shards.mjs` with the event's variables:
| Commit | Event | Diff base | Packages | `turbo-ls.json` md5 | Plan
digest | Shards |
|---|---|---|---|---|---|---|
| #31404's merge ref `71a88bc1b5` (8 files, `packages/rest`) |
pull_request | `405a78eae` (merge-base) | 63 / 63 | `2e750807a6b6` both
| `3c5802f6…` both | 1-8 both |
| same | merge_group, base `405a78eae` | `405a78eae` | 63 / 63 |
`2e750807a6b6` both | `3c5802f6…` both | 1-8 both |
| `main` `383c35303` | push, before `405a78eae` | `405a78eae` | 122 /
122 | `aab238703101` both | `d97c92ae…` both | 1-8 both |
| #31329's merge ref `1a6f01112` (`lint.yml` only) | pull_request and
merge_group | `604a2b3b9` | 0 / 0 | `be1dac8b3858` both | `f4a1345e…`
both | none |
Test UI, same method: `select-affected-tests.mjs` on #31404's merge ref
selects `691 of 6653` in both, filter files identical (md5
`062425c4fc43`). On #31329's merge ref it selects `691 of 6651` with
diff base `604a2b3b9`, which is what CI's own full-history `Test UI
(1/16)` printed on run 42437703944 (job 128600274602).
This PR's own CI run is the second reading: its `Plan Test Core shards`
and `Test UI` logs come from the new step, and the os-dev report on
#22034 compares them with the same full-history control.
**Without the fetch, Test Core's reader is silent.** On #31329's merge
ref checked out at depth 1, a merge_group run of the old script fetched
`base_sha` by sha and then `turbo ls --affected` printed `WARNING unable
to detect git range, assuming all files have changed: Git error: fatal:
no merge base found` and selected all 131 packages, exit 0 (turbo
2.11.10). That is why the script guard exists.
**Fetch cost here.** Local readings on this container, not CI's: the
depth-1 fetch took 8-24 s, the new step 63-71 s (index-pack of about
20.6k commits dominates), and the full refspec on top of main 47 s. This
container's network is not CI's, so these are no forecast; the ~100-run
reading after merge is the measurement.
**Readers left for PR 2,** from the table: rows 5 and 7 are silent on a
shallow clone, so PR 2 owes them the same fetch step before
`type-check-ui` drops `fetch-depth: 0`. Row 7 also diffs from the PR
payload's frozen `base.sha`, which `test`'s comment calls the base this
selection must never use (#6195): an over-selection on long-open PRs,
never a skip. Noted, not filed.
**Comments not changed:** `test`'s "WHERE THE AFFECTED DIFF STARTS"
block keeps its measurement "in a CI-shaped clone: `fetch-depth: 0`
populates `refs/remotes/origin/*`" (a dated reading of why turbo's
default base is unsafe, still true of the new clone). `type-check-ui`'s
comment at L3587 belongs to PR 2.
**Governed surface.** `node scripts/pm/check-governed-merges.mjs
--branch HEAD` exit 3: "GOVERNED — a human merge is the review record …
landing tier: H(人合)", `.github/workflows/** ×1`, 252 changed lines,
under the 3000 threshold. `node scripts/pm/dispatch-gates.mjs --tier`:
"no path-derived mandate".
## Verification
Gate union derived by `node scripts/pm/dispatch-gates.mjs --commands
--repo objectstack-ai/objectstack` (70 families for this diff), run on
head `65cf47ab`, each exit code captured before any pipe; `--ran`: "70
derived famil(ies) accounted for — 69 run, 1 NOT-MEASURED (1 DERIVED
from a recorded exit 3)".
- **67 exit 0**, among them `pnpm check:select-shard-packages` (the
selftest above), `pnpm check:stall-guard-budget`, `pnpm
check:stall-guard-headroom`, `pnpm check:shard-attestation`, `pnpm
check:ci-filter-parity`, `node
scripts/check-self-test-workflow-commands.mjs`, `node
scripts/check-step-collectors.mjs`, `node
scripts/ci/plan-test-core-shards.mjs --self-test`, `pnpm
check:pm-dispatch-gates` ("2205 cases pass", fast tier) and `pnpm
check:type-check-debt` (under `os-verify-lock.sh`, VERDICT command-exit
0).
- **NOT MEASURED, no full build in this worktree** (Build Core runs them
on this PR): `pnpm check:dual-build-cjs-loads` exit 3 ("Run `pnpm build`
first"); `pnpm check:dts-closure` exit 1, its whole list is `missing
packages/*/dist/index.d.ts` (the worktree built spec with
`OS_SKIP_DTS=1` only).
- `pnpm --dir ui exec vitest run scripts/` exit 1: 166 files pass; 4
fail on unbuilt dists (`Failed to resolve entry for package
"@objectstack/formula"`, ui package builds, spec declarations). After
building the six consumer packages under the lock, 2 of the 4 pass; the
other 2 (`check-doc-snippet-types.test.ts`,
`spec-symbol-ledger-plugin-detail-7265.test.ts`) read spec's `.d.ts`,
which this worktree did not emit. None of the 4 reads `ci.yml` or a
changed file; Test UI runs them on this PR.
- Outside the derivation: `check-governed-merges --branch HEAD` exit 3
(GOVERNED, Tier H) and `dispatch-gates --tier` (no mandate), both above.
- `pnpm lint`: the diff touches no package, so there is no scoped
package lint.
- `main` moved 12 commits after the branch point (to `0647dabb0`); none
touches a file this PR changes, so no merge was taken.
`skip-changeset`: `.github/**`, `scripts/ci/**` and
`ui/scripts/__tests__/**` ship in no package.
## Human Minimum
- [x] 1. Schemas start as Zod; `packages/spec` holds no runtime logic.
(not touched)
- [x] 2. Every name I added uses the casing for its kind. (one step
name, one shell variable)
- [x] 3. No formatter ran; `pnpm lint` passes. (no package touched)
- [x] 4. One issue, one branch off an up-to-date `main`, one pull
request.
- [x] 5. A change that publishes carries a changeset, and both
declaration lines are filled in here and in the changeset. (publishes
nothing: `skip-changeset`)
- [x] 6. `packages/spec` touched: its generated artifacts are
regenerated and committed. (not touched)
- [x] 7. No hand edits to `content/docs/references/`,
`packages/*/CHANGELOG.md` or `content/docs/releases/`.
- [x] 8. Title, body and comments are in English. (the 维护者速读 block is
the lane's required Chinese summary)
- [x] The *Before Submitting* list in CONTRIBUTING.md is done.
🤖 Generated with [Claude Code](https://claude.com/claude-code)
https://claude.ai/code/session_01FEkQ5ocKVSrMoP2SVG2dfL
---
_Generated by [Claude
Code](https://claude.ai/code/session_01FEkQ5ocKVSrMoP2SVG2dfL)_
---------
Co-authored-by: Claude <noreply@anthropic.com>1 parent 5ee59f5 commit e115841
4 files changed
Lines changed: 226 additions & 26 deletions
File tree
- .github/workflows
- scripts/ci
- ui/scripts/__tests__
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
645 | 645 | | |
646 | 646 | | |
647 | 647 | | |
| 648 | + | |
| 649 | + | |
| 650 | + | |
648 | 651 | | |
649 | 652 | | |
650 | | - | |
651 | | - | |
652 | | - | |
653 | | - | |
| 653 | + | |
| 654 | + | |
| 655 | + | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
| 659 | + | |
| 660 | + | |
| 661 | + | |
| 662 | + | |
| 663 | + | |
| 664 | + | |
| 665 | + | |
| 666 | + | |
| 667 | + | |
| 668 | + | |
| 669 | + | |
| 670 | + | |
| 671 | + | |
| 672 | + | |
| 673 | + | |
| 674 | + | |
654 | 675 | | |
655 | 676 | | |
656 | 677 | | |
| |||
875 | 896 | | |
876 | 897 | | |
877 | 898 | | |
| 899 | + | |
| 900 | + | |
878 | 901 | | |
879 | 902 | | |
880 | | - | |
881 | | - | |
882 | | - | |
| 903 | + | |
| 904 | + | |
| 905 | + | |
| 906 | + | |
| 907 | + | |
| 908 | + | |
| 909 | + | |
| 910 | + | |
| 911 | + | |
| 912 | + | |
| 913 | + | |
| 914 | + | |
| 915 | + | |
| 916 | + | |
| 917 | + | |
| 918 | + | |
| 919 | + | |
| 920 | + | |
| 921 | + | |
| 922 | + | |
| 923 | + | |
| 924 | + | |
| 925 | + | |
| 926 | + | |
| 927 | + | |
| 928 | + | |
| 929 | + | |
| 930 | + | |
| 931 | + | |
| 932 | + | |
| 933 | + | |
| 934 | + | |
| 935 | + | |
| 936 | + | |
| 937 | + | |
| 938 | + | |
| 939 | + | |
| 940 | + | |
| 941 | + | |
| 942 | + | |
| 943 | + | |
| 944 | + | |
| 945 | + | |
| 946 | + | |
| 947 | + | |
| 948 | + | |
| 949 | + | |
| 950 | + | |
| 951 | + | |
883 | 952 | | |
884 | 953 | | |
885 | 954 | | |
| |||
3817 | 3886 | | |
3818 | 3887 | | |
3819 | 3888 | | |
| 3889 | + | |
| 3890 | + | |
| 3891 | + | |
3820 | 3892 | | |
3821 | 3893 | | |
3822 | | - | |
3823 | | - | |
3824 | | - | |
3825 | | - | |
| 3894 | + | |
| 3895 | + | |
| 3896 | + | |
| 3897 | + | |
| 3898 | + | |
| 3899 | + | |
| 3900 | + | |
| 3901 | + | |
| 3902 | + | |
| 3903 | + | |
| 3904 | + | |
| 3905 | + | |
| 3906 | + | |
| 3907 | + | |
| 3908 | + | |
| 3909 | + | |
| 3910 | + | |
| 3911 | + | |
| 3912 | + | |
| 3913 | + | |
| 3914 | + | |
| 3915 | + | |
| 3916 | + | |
| 3917 | + | |
| 3918 | + | |
| 3919 | + | |
| 3920 | + | |
3826 | 3921 | | |
3827 | 3922 | | |
3828 | 3923 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
12 | 12 | | |
13 | 13 | | |
14 | 14 | | |
15 | | - | |
| 15 | + | |
16 | 16 | | |
17 | 17 | | |
18 | 18 | | |
| |||
172 | 172 | | |
173 | 173 | | |
174 | 174 | | |
| 175 | + | |
| 176 | + | |
| 177 | + | |
| 178 | + | |
| 179 | + | |
| 180 | + | |
| 181 | + | |
175 | 182 | | |
176 | 183 | | |
177 | 184 | | |
| |||
262 | 269 | | |
263 | 270 | | |
264 | 271 | | |
| 272 | + | |
| 273 | + | |
| 274 | + | |
| 275 | + | |
| 276 | + | |
| 277 | + | |
265 | 278 | | |
| 279 | + | |
266 | 280 | | |
267 | 281 | | |
268 | 282 | | |
| |||
349 | 363 | | |
350 | 364 | | |
351 | 365 | | |
352 | | - | |
| 366 | + | |
| 367 | + | |
| 368 | + | |
| 369 | + | |
| 370 | + | |
| 371 | + | |
353 | 372 | | |
354 | 373 | | |
| 374 | + | |
| 375 | + | |
355 | 376 | | |
356 | 377 | | |
357 | 378 | | |
358 | 379 | | |
359 | 380 | | |
| 381 | + | |
| 382 | + | |
| 383 | + | |
| 384 | + | |
| 385 | + | |
360 | 386 | | |
361 | 387 | | |
362 | 388 | | |
| |||
538 | 564 | | |
539 | 565 | | |
540 | 566 | | |
541 | | - | |
| 567 | + | |
542 | 568 | | |
543 | 569 | | |
| 570 | + | |
| 571 | + | |
544 | 572 | | |
545 | 573 | | |
546 | 574 | | |
| |||
586 | 614 | | |
587 | 615 | | |
588 | 616 | | |
| 617 | + | |
| 618 | + | |
| 619 | + | |
| 620 | + | |
| 621 | + | |
| 622 | + | |
| 623 | + | |
| 624 | + | |
| 625 | + | |
| 626 | + | |
| 627 | + | |
| 628 | + | |
| 629 | + | |
| 630 | + | |
| 631 | + | |
| 632 | + | |
| 633 | + | |
| 634 | + | |
| 635 | + | |
| 636 | + | |
| 637 | + | |
| 638 | + | |
| 639 | + | |
| 640 | + | |
| 641 | + | |
| 642 | + | |
| 643 | + | |
| 644 | + | |
| 645 | + | |
| 646 | + | |
| 647 | + | |
| 648 | + | |
| 649 | + | |
589 | 650 | | |
590 | 651 | | |
591 | 652 | | |
592 | 653 | | |
593 | 654 | | |
594 | 655 | | |
595 | | - | |
596 | | - | |
| 656 | + | |
| 657 | + | |
| 658 | + | |
597 | 659 | | |
598 | 660 | | |
599 | 661 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
17 | | - | |
18 | | - | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
19 | 20 | | |
20 | 21 | | |
21 | 22 | | |
| |||
99 | 100 | | |
100 | 101 | | |
101 | 102 | | |
| 103 | + | |
| 104 | + | |
| 105 | + | |
| 106 | + | |
| 107 | + | |
| 108 | + | |
| 109 | + | |
| 110 | + | |
| 111 | + | |
| 112 | + | |
| 113 | + | |
| 114 | + | |
| 115 | + | |
| 116 | + | |
| 117 | + | |
| 118 | + | |
| 119 | + | |
| 120 | + | |
| 121 | + | |
| 122 | + | |
| 123 | + | |
| 124 | + | |
| 125 | + | |
| 126 | + | |
| 127 | + | |
| 128 | + | |
| 129 | + | |
102 | 130 | | |
103 | 131 | | |
104 | 132 | | |
105 | 133 | | |
106 | 134 | | |
107 | | - | |
108 | | - | |
| 135 | + | |
| 136 | + | |
109 | 137 | | |
110 | 138 | | |
111 | 139 | | |
| |||
151 | 179 | | |
152 | 180 | | |
153 | 181 | | |
154 | | - | |
155 | | - | |
| 182 | + | |
| 183 | + | |
| 184 | + | |
156 | 185 | | |
157 | 186 | | |
158 | 187 | | |
| |||
184 | 213 | | |
185 | 214 | | |
186 | 215 | | |
187 | | - | |
| 216 | + | |
188 | 217 | | |
189 | 218 | | |
190 | 219 | | |
| |||
0 commit comments