Repository navigation
Commit 46064df
Fixes #22485
Clause-②: no
The committed `packages/spec/spec-changes.json` and its `merge=os-regen`
route are deleted, and both ADR-0087 D4 projections are gitignored
inside `@objectstack/spec`. This finishes ruling `6078203801` on #22449
(B′): "The committed copies and their two `merge=os-regen` routes are
deleted; `check:spec-changes` and `check:upgrade-guide` stop comparing a
committed copy." The checks stopped comparing in #22533 (#22482). The
guide's copy and route went in #22556 (#22483). This PR removes what was
left: the `spec-changes.json` copy, its route, and every reader of it.
What ships does not change. The publish lane still writes both
projections into the package right before the tarball is packed,
`files[]` still lists them, and `--verify` still refuses a tarball that
is missing one. Proof is in the dry run below.
## What changed
- **The copy is gone.** `packages/spec/spec-changes.json` is deleted
from git. `.gitignore` now lists it and
`packages/spec/protocol-upgrade-guide.md`, which is #22482's note.
- **The route is gone.** `.gitattributes` no longer routes either
projection. `scripts/regen-artifacts.mjs` drops the row and records
`gen:spec-changes` in `NOT_DRIVER_MANAGED` as untracked output. The
merge-driver self-test holds that entry against git.
`check:merge-driver` now reads 16 routed paths and 5 untracked
dispositions. The comment counts in `scripts/git-merge-regen.mjs` now
read 16 paths and 16 rows, 14 of them defaulted.
- **The generator writes no committed copy.** `build-spec-changes.ts`
with no flag writes `packages/spec/spec-changes.json`, which is now
untracked and gitignored. It is the same file `release-spec-changes.sh
--prepare` / `--generate` write for `files[]` to ship, and the one
`gen:spec-changes` writes locally. `--check` and `--out` are unchanged.
In `lib/projection-cli.ts`, `committedPath` becomes `defaultPath`.
`build()` is byte-for-byte untouched, so the generated bytes are
unchanged.
- *Why not make a bare run a usage error, as #22483 did for the guide?*
Three callers run the no-flag mode and read its output.
`release-spec-changes.sh` calls it at `--generate`, at the first-ever
`--prepare`, and at `--prepare --previous-package`. Cloud's
changed-spec-surface guard runs `pnpm run gen:spec-changes` in its
pinned framework checkout and reads only that output (cloud#2750,
comment `6083243420` on #22482). A usage error there would turn cloud's
only required check red on its next pin move, and would also need an
edit to the release script, which is outside this card's file surface.
The guide's no-flag mode moved to a different target. This one keeps its
target, and the target is no longer tracked.
- **H2: the ADR-0087 gate's parser-rot witness is generated.** See
below.
- **H3: an unrouted pending marker now prints a remedy that works.** See
below.
- `check-generated.ts`'s row now names the gitignored copy.
`os-regen-merge.sh` gains a note that its 2026-09-17 readings were taken
over a path that has since left the route list. That script reads the
routed list from `.gitattributes` at run time and hard-codes none.
- **Rider declared by the seat (pointer `6094908270`, carried from the
#22605 dev):** `packages/spec/src/migrations/entries/README.md`, under
"What this does not fix", told authors that both projections "still have
to be regenerated and committed when an entry lands". It now says what
is true after the deletion. An entry regenerates `registry.ts` alone,
with `gen:migration-registry` (gate: `check:migration-registry`). The
two projections are generated at publish, and in memory on the pull
request. ⛔ Neither is regenerated for an entry. The #8344 merge-queue
measurement stays, marked as history kept for its `registry.ts`
conclusion.
- **Forced, outside the claim's file list:**
- `scripts/check-future-spec-major.mjs` deletes its
`QUOTATION_EXEMPTIONS` row for the deleted copy. Measured: HEAD's
version of the gate, run on this tree, exits 1 with
`QUOTATION_EXEMPTIONS entry 5 (packages/spec/spec-changes.json, major
4997) matched NOTHING`. After the deletion the gate exits 0 with `6
witnessed ledger entr(y|ies), every witness still matching`.
- `scripts/objectui-changeset-digest.mjs`: its `fw-gate` sandbox runs a
copy of the real ADR-0087 gate, so it now stages the stand-in witness
generator instead of a fixture `spec-changes.json`. Without that change,
its round-trip cases die at the input assertions.
## H1: every reader of the committed copy, and what it reads now
| Reader | After this PR |
|---|---|
| `scripts/check-adr-0087-registration.mjs` (`assertInputs`, formerly
`:2184`) | Generates the projection at the rev it judges (H2). It no
longer reads any copy. |
| `packages/spec/scripts/build-spec-changes.ts` no-flag mode | Writes
the untracked, gitignored package copy (above). |
| `packages/spec/scripts/check-generated.ts` | Runs `check:spec-changes`
in memory. That check never goes stale, so `--fix` never regenerates.
The row text names the gitignored copy. |
| `scripts/regen-artifacts.mjs`, `.gitattributes`,
`scripts/git-merge-regen.mjs`, `.githooks/pre-commit` →
`check-regen-pending.mjs` | No row and no route. The driver never sees
the path, and an old marker naming it gets the UNROUTED refusal (H3). |
| `scripts/pm/os-regen-merge.sh` | Reads routes at run time (16). It has
no hard-coded list. Only the prose note changed. |
| `scripts/release-spec-changes.sh` (`--prepare` / `--generate` /
`--verify` / `--attach`) | Unchanged. It writes into the package and
verifies the packed copy (dry run below). |
| `packages/spec/package.json` `files[]` | Unchanged. It ships what the
lane wrote. |
| `scripts/check-release-spec-changes.mjs` | Unchanged. It reads the
packed tarball and a fresh generation, never the tree copy. |
| `scripts/release-verify-npm.mjs` (`MANIFEST` at `:2063`) | A path
inside its stubbed workflow fixture. Unchanged, and its self-test is
green. |
| `packages/spec/scripts/render-projection-diff.ts` (`legacyPath`) |
Generates both sides with `--out`. The legacy path is read only inside a
throwaway archive of a base that predates `--out`, never from this
checkout. Unchanged. |
| `packages/cli/src/utils/spec-release-changes.ts` | Reads the installed
package's `release` section. The committed copy never had one, so it
answered `null` in the workspace before this PR, and an absent file
answers `null` too. Unchanged. |
| `packages/spec/src/**/*-retirement.test.ts` (`EXCLUDED_PREFIXES`) |
Walk the disk and still exclude the path, which is still right: a local
`gen:spec-changes` output sits there, gitignored. Unchanged. |
| `scripts/check-future-spec-major.mjs` | Scans tracked files. Its row
for the copy is removed (forced, above). |
| `scripts/check-regen-pending.mjs` self-test fixture | Used the path as
"a real REGEN_ARTIFACTS entry". It now derives its row from the table,
and uses the path as the retired-route scenario. |
| `scripts/objectui-changeset-digest.mjs` self-test sandbox | Staged a
fixture copy for the gate. It now stages the stand-in generator (forced,
above). |
| cloud `scripts/audit-spec-changes.mjs` | Reads `gen:spec-changes`
output in its pinned checkout since cloud#2750. That output path is
unchanged here. |
## H2: the witness is generated at the judged rev
Before this PR, `assertInputs` read
`HEAD:packages/spec/spec-changes.json` as its independent witness that
`extractIds()` still sees every id the build sees. Since #22533 that
copy has been aging. A withdrawn migration id stays in an aged copy and
false-reds the gate, and deleting the copy reds it outright.
`generatedWitness()` now lays out the judged rev's
`packages/spec/{src,scripts,package.json}` with `git archive`. It
borrows the checkout's `node_modules` and runs `build-spec-changes.ts
--out` under the installed `tsx`. So the witness describes exactly the
rev being judged, never the working tree. A missing runner, a missing
generator, a generator that exits non-zero, or one that writes nothing
is each a red input, never a skip. On this tree the real run generates
414 ids, all of them seen by the parser. The gate run is about 2 s.
- **Pins.** Battery `W1-W6`, with 9 cases, drives the real
`generatedWitness` over a stand-in generator. The stand-in evaluates the
fixture registry under tsx, as the real one does.
- W1: a withdrawn id with a stale committed copy at HEAD is green, and
the witness the gate used holds only the kept id.
- W2: an uncommitted edit stays green, and the same edit committed is
parser drift that names the id.
- W3 to W6: a missing generator, a failing generator, a silent
generator, and no tsx are each red.
- I1 (parser rot) and the I2 entry-point run now go through the real
path too. The self-test reports 450 assertions, up from 441.
- **Ablation**, via `scripts/ablation-replace.mjs` at `538bec7e1d`. The
witness read was put back to the committed-copy read.
- The self-test exits 1 with 14 failures, including `W1: a withdrawn
migration id must NOT red the gate -- got: ledger parser drift … -
withdrawn-one`.
- Restored: blob `7e383d48ea90` == HEAD, and `git diff HEAD` is empty.
## H3: a pending path whose route was retired
The premise holds for the class, but not for this card's own path. The
deletion does not reach the stuck marker: git runs no merge driver on a
modify/delete, so a branch carrying `spec-changes.json` writes no marker
for it (H4). The stuck marker comes from the guide's route, retired by
#22483, and from any marker an earlier merge left.
Measured with the real driver and hooks, in a detached scratch worktree:
- The scratch worktree starts at `874a38d8d9`, which is `514bf3c101^1`,
before #22483. A commit there edits `docs/protocol-upgrade-guide.md`. It
then merges this branch (`cec190b908`).
- The merge auto-completes with exit 0. The marker holds
`docs/protocol-upgrade-guide.md`, and the tree holds the branch's
generated guide: the stub was dropped.
- The next commit exits 1:
```text
✗ docs/protocol-upgrade-guide.md — UNROUTED: pending, but
scripts/regen-artifacts.mjs has no row for it any more, so no gate
can verify it and nothing clears it by itself. The merge kept THIS side
of it whole and dropped
the side it merged in: compare them (`git diff HEAD^2 --
docs/protocol-upgrade-guide.md`), keep or restore the
right bytes, then release it:
node scripts/check-regen-pending.mjs --release
docs/protocol-upgrade-guide.md
```
- Following it:
- `git diff HEAD^2` shows +1590 −9.
- `git checkout HEAD^2 -- docs/protocol-upgrade-guide.md` restores the
15-line stub.
- `--release` exits 0 with "nothing left pending, marker cleared".
- The commit exits 0, and `--pre-push` exits 0.
- The guide is byte-identical to this branch's.
- **Control:** `18d999031b`'s `check-regen-pending.mjs`, run on the same
marker, exits 1 with `recorded as pending but absent from
scripts/regen-artifacts.mjs (cannot verify)` and `This check clears
itself the moment they are current — nothing to reset by hand.`. It has
no `--release`, and its run leaves the marker in place.
The path stays BLOCKED, never passed. Passing it would land exactly the
drop the driver made, and #22556 recorded the refusal as the one thing
that keeps that drop loud. `--release PATH` refuses a path that still
has a row, because its gate discharges it, never a hand. It also refuses
a path the marker does not hold, and keeps every other line and the
deferral record.
- **Pins** (`fixtureSelfTest`, in the script's own self-test harness):
- The scenario's premise is asserted: the path has no row.
- The refusal is exit 1 and no longer claims "nothing to reset by hand".
- The printed command is parsed and run as printed, with no fallback
spelling. It clears the marker, and the next push is accepted.
- `--release` refuses a routed path and an absent path, and leaves a
routed path's debt and its `stale` refusal intact.
- The fixture's pending row is now derived from `REGEN_ARTIFACTS`, so
retiring a row cannot break the fixture again.
- **Ablation**, via `scripts/ablation-replace.mjs` at `538bec7e1d`. The
printed `--release` line was dropped.
- The self-test exits 1: "printing a release command", "the push is
refused with the same remedy", "THE PRINTED REMEDY WORKS" and "the next
push is accepted" go red, both directly and in the ambient-git-env inner
run.
- Restored: blob `ca127a866a97` == HEAD, and `git diff HEAD` is empty.
## H4: a branch that still carries a regenerated copy
What the author does:
```bash
git rm packages/spec/spec-changes.json && git commit --no-edit
```
The conflict is modify/delete, so git runs no merge driver and leaves no
marker. The deletion is the resolution, and nothing regenerates the copy
in git any more. Measured on a scratch commit at `18d999031b` that
edited the copy, merging `cec190b908`:
- the merge exits 1 with `CONFLICT (modify/delete):
packages/spec/spec-changes.json deleted in cec190b… and modified in
HEAD`, and no marker is written;
- the command above exits 0, and the resulting tree equals this branch.
PR #22421 (#11509, seat 2) is such a branch today. The same line is in
`.gitattributes` and in `NOT_DRIVER_MANAGED`'s reason, which is where a
merging author meets the route list.
## Publish lane dry run (no release act)
At `928bee8573`, with `RELEASE_VERSION=17.7.0`:
- `--generate` exits 0 and writes both files into `packages/spec/`. `git
status --short` stays empty: `--ignored` shows both as `!!`.
- `--verify` exits 0 with `✓ registry projections verified against a
fresh generation: spec-changes.json (2 per-major record(s), 121
converted / 414 migrated) and protocol-upgrade-guide.md (1617979 bytes)
match the artifact.` and `✓ no per-release section is owed: this lane
(--generate) publishes none.`.
- The packed `objectstack-spec-17.7.0.tgz` lists
`package/spec-changes.json` and `package/protocol-upgrade-guide.md`. Its
`spec-changes.json` is byte-identical to the generated one (`cmp`).
- **Control:** with the generated `spec-changes.json` removed,
`--verify` exits 1 with `the artifact about to publish ships no
spec-changes.json`. A consumer's `node_modules` cannot be handed a
tarball without it.
## Changeset: none, `skip-changeset`
No published byte changes:
- `build()` is untouched, so the lane generates the same bytes;
- `packages/spec/scripts/**` is not in `files[]`;
- the deleted copy never shipped as-is, because the lane overwrites it
before packing (#22533).
So no package warrants a bump, and this PR takes `skip-changeset`. The
dispatch asked for H4's line to go in a changeset. With no changeset,
that line is in H4 above and in the two in-repo places named there.
## Governed lines that name the copies or their routes (not edited here;
the skills lane carries them)
- `docs/adr/0087-metadata-protocol-upgrade-contract.md:263`–`:266`: "the
deletion of the committed copies (the per-major projection in
`packages/spec/spec-changes.json`, the guide body at
`docs/protocol-upgrade-guide.md`) and of their two `merge=os-regen`
routes in `.gitattributes` — #22485, which lands last." It is written as
not yet landed.
- `docs/adr/0087-metadata-protocol-upgrade-contract.md:268`–`:270`:
"Until #22485 lands the committed copies stay in the tree, and the
generators' no-flag mode (`gen:spec-changes`, `gen:upgrade-guide`) still
writes them, but `check:spec-changes` and `check:upgrade-guide` no
longer compare them". The guide half was already stale since #22556.
- `docs/adr/0087-metadata-protocol-upgrade-contract.md:283`–`:284`: "The
2026-08-06 note above ("deliberately unsharded") is about that committed
copy, which #22485 removes."
- `docs/adr/0087-metadata-protocol-upgrade-contract.md:207`–`:208`:
"`spec-changes.json` is deliberately unsharded — it is keyed by version,
which has never been a conflict surface." This is about the committed
copy, which no longer exists.
- `docs/adr/0087-metadata-protocol-upgrade-contract.md:438`–`:440`:
"Those copies stay in the tree until #22485 deletes them, and
`check:spec-changes` / `check:upgrade-guide` no longer compare them."
- `docs/adr/0087-metadata-protocol-upgrade-contract.md:219`–`:220`: the
ruling's own words, quoted. They are listed only because they name the
routes, and they are not to be edited.
- `AGENTS.md:717`: "| An ADR-0087 conversion / migration registry |
`check:spec-changes`, `check:upgrade-guide` | `gen:spec-changes`,
`gen:upgrade-guide` |". Neither check can go stale any more, and both
generators write only untracked files. The row that holds for an entry
is `check:migration-registry` / `gen:migration-registry`.
- `AGENTS.md:706`: "`packages/spec` has **eight** checked-in generated
artifacts, each with its own CI gate." The two projections are no longer
checked in, so the count needs a re-measure.
- `.claude/skills/spec-property-retirement/SKILL.md:260`: "然后
`gen:spec-changes`、`gen:upgrade-guide`、`gen:api-surface`、`gen:docs`。"
- `.claude/skills/spec-property-retirement/SKILL.md:336`–`:337`:
"所以纯散文改动也要 `gen:spec-changes` + `gen:upgrade-guide`,和任何别的改动一样。"
-
`docs/adr/0120-unique-scope-vocabulary-and-null-safe-tenant-uniqueness.md:459`–`:460`:
"regenerate with the conversion entry (`gen:spec-changes`,
`gen:upgrade-guide`)." This is a record of what that PR did, likely left
as history.
Measured and **not** stale: `.claude/skills/pm-dispatch/SKILL.md:296`,
the hot-file row for `os-regen-merge.sh`, which names no path, and
`references/landing-operations.md:38`, which reads `.gitattributes`
live.
## Verification
Gate union read at `cb1ac74e76`, the final head. It is the 87 commands
the dispatch named, plus what `node scripts/pm/dispatch-gates.mjs
--commands` derives on this diff (105 today), 110 commands in all. Each
ran with its exit code captured before any pipe, and all 110 exited 0.
`--ran` reports `Run reconciliation — 105 derived, 105 run, 0
NOT-MEASURED, 0 UNRUN.` That includes:
- `check:merge-driver`: 16 routed paths, and `5 untracked disposition(s)
still hold — git tracks none of those paths`;
- `check:changeset-gate-self-tests` and the ADR-0087 gate itself
(`--base origin/main`: green, with a generated witness);
- `check:generated`: `✓ All 15 generated artifacts are up to date`, with
`check:spec-changes spec-changes.json (gitignored; written into the
package at publish)`;
- `check:objectui-changeset`, `check:pm-dispatch-gates`,
`check:type-check-debt` and `check:nul-bytes`.
Under `scripts/pm/os-verify-lock.sh` (VERDICT command-exit 0, at
`928bee8573`; the README rider after it touched no test input):
- `@objectstack/spec`: `build` exit 0; `typecheck` exit 0, and `tsc -p
tsconfig.scripts.json --listFiles` lists all four touched script and
test files;
- `vitest --project local`: 642 files, 19146 passed, 1 todo;
- `--project repo`: 54 files, 915 passed;
- `release-verify-npm.mjs --self-test`: 115 cases across 13 batteries;
- `check-release-spec-changes.mjs --self-test`: 31 batteries.
## Acceptance notes (not filed)
- **Size.** About 8,000 changed lines, 7,272 of them the deleted
generated JSON. That is over the 3,000-line threshold, so this lands the
Tier H way: an authorized approval or a human merge.
- **Landing rule A relaxation.** The maintainer's temporary relaxation
for D3-entry PRs (`6091886885`, corrected by `6091996837`) ends when
this lands.
- `.github/workflows/lint.yml:4728` lists `spec-changes.json` among the
artifacts `merge=os-regen` protects. Comment only. carrier: none.
- `.github/workflows/pr-automation.yml:959`–`:961`: "the two scripts
import only node builtins and repo-local modules, so a failed install
cannot change their verdict". The import half is still true. The
ADR-0087 gate now needs the installed `tsx` for its witness, so a failed
install also reds that step, in the enforcing direction. Comment only.
carrier: none.
- `scripts/check-published-files.mjs:291`: the `spec-changes.json`
registration reason could say "generated at publish (it is not in the
tree)", as the guide's does. carrier: none.
- `docs/spec-generated-artifact-sharding.md:42` describes the committed
file's merge shape as current. Design history. carrier: none.
- **Cost.** `check-adr-0087-registration --self-test` costs about 7 s
more on this shared box (20.7 s → 27.5 s): 8 real generator spawns.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01VZqqwTj2wsihZEbfT6yyYN)_
---------
Co-authored-by: Claude <noreply@anthropic.com>
1 parent 5fb1746 commit 46064df
15 files changed
Lines changed: 591 additions & 7447 deletions
File tree
- packages/spec
- scripts
- lib
- src/migrations/entries
- scripts
- pm
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
21 | | - | |
22 | | - | |
23 | | - | |
24 | | - | |
25 | | - | |
26 | | - | |
27 | | - | |
28 | | - | |
29 | | - | |
30 | | - | |
31 | | - | |
32 | | - | |
33 | | - | |
34 | | - | |
35 | | - | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
| 23 | + | |
| 24 | + | |
| 25 | + | |
| 26 | + | |
| 27 | + | |
36 | 28 | | |
37 | 29 | | |
38 | 30 | | |
| |||
46 | 38 | | |
47 | 39 | | |
48 | 40 | | |
49 | | - | |
| 41 | + | |
| 42 | + | |
| 43 | + | |
50 | 44 | | |
51 | 45 | | |
52 | 46 | | |
| |||
177 | 171 | | |
178 | 172 | | |
179 | 173 | | |
180 | | - | |
181 | 174 | | |
182 | 175 | | |
183 | 176 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
136 | 136 | | |
137 | 137 | | |
138 | 138 | | |
| 139 | + | |
| 140 | + | |
| 141 | + | |
| 142 | + | |
| 143 | + | |
| 144 | + | |
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
13 | 13 | | |
14 | 14 | | |
15 | 15 | | |
16 | | - | |
17 | | - | |
18 | | - | |
19 | | - | |
20 | | - | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
| 22 | + | |
21 | 23 | | |
22 | | - | |
| 24 | + | |
23 | 25 | | |
24 | 26 | | |
25 | 27 | | |
| |||
61 | 63 | | |
62 | 64 | | |
63 | 65 | | |
64 | | - | |
65 | | - | |
66 | | - | |
67 | | - | |
68 | | - | |
69 | | - | |
70 | | - | |
71 | | - | |
72 | | - | |
73 | | - | |
74 | | - | |
| 66 | + | |
| 67 | + | |
| 68 | + | |
| 69 | + | |
75 | 70 | | |
76 | 71 | | |
77 | 72 | | |
| |||
95 | 90 | | |
96 | 91 | | |
97 | 92 | | |
98 | | - | |
| 93 | + | |
| 94 | + | |
99 | 95 | | |
100 | 96 | | |
101 | 97 | | |
| |||
268 | 264 | | |
269 | 265 | | |
270 | 266 | | |
271 | | - | |
| 267 | + | |
272 | 268 | | |
273 | 269 | | |
274 | 270 | | |
| |||
329 | 325 | | |
330 | 326 | | |
331 | 327 | | |
332 | | - | |
| 328 | + | |
333 | 329 | | |
334 | 330 | | |
335 | 331 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
86 | 86 | | |
87 | 87 | | |
88 | 88 | | |
89 | | - | |
| 89 | + | |
| 90 | + | |
| 91 | + | |
| 92 | + | |
| 93 | + | |
| 94 | + | |
| 95 | + | |
| 96 | + | |
90 | 97 | | |
91 | 98 | | |
92 | 99 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
11 | | - | |
| 11 | + | |
| 12 | + | |
12 | 13 | | |
13 | | - | |
14 | | - | |
15 | | - | |
16 | | - | |
17 | | - | |
| 14 | + | |
| 15 | + | |
| 16 | + | |
| 17 | + | |
| 18 | + | |
| 19 | + | |
| 20 | + | |
| 21 | + | |
18 | 22 | | |
19 | | - | |
20 | | - | |
| 23 | + | |
| 24 | + | |
21 | 25 | | |
22 | 26 | | |
23 | 27 | | |
| |||
39 | 43 | | |
40 | 44 | | |
41 | 45 | | |
42 | | - | |
43 | | - | |
44 | | - | |
| 46 | + | |
| 47 | + | |
| 48 | + | |
| 49 | + | |
45 | 50 | | |
46 | | - | |
| 51 | + | |
47 | 52 | | |
48 | 53 | | |
49 | 54 | | |
| |||
79 | 84 | | |
80 | 85 | | |
81 | 86 | | |
82 | | - | |
83 | | - | |
| 87 | + | |
| 88 | + | |
84 | 89 | | |
85 | 90 | | |
86 | 91 | | |
| |||
110 | 115 | | |
111 | 116 | | |
112 | 117 | | |
113 | | - | |
| 118 | + | |
114 | 119 | | |
115 | 120 | | |
116 | 121 | | |
117 | 122 | | |
118 | 123 | | |
119 | 124 | | |
120 | | - | |
121 | | - | |
| 125 | + | |
| 126 | + | |
122 | 127 | | |
123 | 128 | | |
124 | 129 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
7 | | - | |
| 7 | + | |
8 | 8 | | |
9 | 9 | | |
10 | 10 | | |
| |||
40 | 40 | | |
41 | 41 | | |
42 | 42 | | |
43 | | - | |
| 43 | + | |
44 | 44 | | |
45 | 45 | | |
46 | 46 | | |
| |||
119 | 119 | | |
120 | 120 | | |
121 | 121 | | |
122 | | - | |
| 122 | + | |
123 | 123 | | |
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
127 | 127 | | |
128 | 128 | | |
129 | | - | |
| 129 | + | |
130 | 130 | | |
131 | 131 | | |
132 | 132 | | |
| |||
138 | 138 | | |
139 | 139 | | |
140 | 140 | | |
141 | | - | |
| 141 | + | |
142 | 142 | | |
143 | 143 | | |
144 | 144 | | |
| |||
0 commit comments