Repository navigation
Commit 79cd9ef
docs(adr): generated README index, one status-line spelling, shared numbers cited by stem (#26503)
Fixes #26076
Clause-②: no
Metadata-protocol: none
## 维护者速读
- **改了什么**:新增脚本生成的 `docs/adr/README.md` 索引(状态、编号、标题、日期、取代/被取代),143
条记录统一为一种状态行写法(`**Status**: `,改了 17 个文件的那一行,内容不动);四个重号(0006
三个版本,0010/0019/0057
各两条无关决策)在各自文件头互相标注、在索引里并列,不改号不挪文件;`check-adr-anchors.mjs` 支持
`ADR-0057-system-data-lifecycle-and-retention`
这种按文件名引用,只指向一条记录;`ui/docs/adr` 以 `ui-` 前缀登记进根索引,文件不动;退役的
`PRIORITIZATION.md` 删除,其"落地即翻状态"规则并入索引约定。
- **为什么改**:143 条决策没有目录,四个编号各有两份文件,状态行四种写法让两种统计口径对同一批文件给出不同数字;裁决 A(评论
6417460375):做索引、并列重号、门禁不加。
- **风险与回滚**:只动文档与仓库脚本,不动运行时与发布面;lint 多一个独立步骤 `pnpm check:adr-index`(=
生成脚本自身的 `--self-test`,只跑 fixture、不断言任何记录的内容,再接永远 exit 0 的
`--report`);记录写错状态行只出 warning,索引过期不判红,不新增必过门禁;回滚 = revert。
- **先看**(按风险):1) `scripts/check-adr-anchors.mjs` 新增的 `resolveQualified`
/ `auditQualifiedCitations`(裸号语义不变,带 stem 的引用必须指到一条真记录,否则红);2)
`.github/workflows/lint.yml` 新增的 `ADR index is current (report-only)`
步骤与 `scripts/adr-index.mjs` 的 Live tree battery(只证明脚本能读真目录,不断言记录);3)
`docs/adr/README.md` 的 Shared numbers 节。
- **两分钟验证**:`pnpm adr:index && git diff --quiet docs/adr/README.md &&
pnpm check:adr-index && pnpm check:adr-anchors` —— 预期 README 无
diff,index 打印 "--report: OK",anchors 打印 OK 且含 "37 of them stem-qualified
to one record"。
- **需要你做的**:`docs/adr/**` 与 `.github/workflows/**` 是受管面(Tier H),需
governed approver 审阅后合并;PR 保持 draft,席位不 ready、不排队。
## What changes
**The index** — `docs/adr/README.md` is new and generated (`node
scripts/adr-index.mjs`, `pnpm adr:index`). It carries a visible
generated banner, a Conventions block (the one status spelling, the
keyword vocabulary, the status-hygiene rule that `PRIORITIZATION.md`
used to hold, how shared numbers and the ObjectUI registry are cited), a
summary count per status, a **Shared numbers** section listing each of
the four numbers side by side with the id to cite, the records table
(number, title, status, date, supersedes, superseded by), and the
ObjectUI registry table under the `ui-` prefix.
**One status-line spelling** — the generator reads exactly one line
shape, `**Status**: <keyword> …`, and lists a record whose line is
missing or names no keyword as **Unparsed** rather than guessing from a
heading or a bullet. Today 143/143 root records and 11/11 ui records
parse. The 12 files the card's grep found matching none of the four
spellings, before normalization:
| File | What it had instead |
|---|---|
| `0009-execution-pinned-metadata.md` | no status line at all — status
stated nowhere in the header |
| `0010-metadata-protection-model.md` | no status line at all — status
stated nowhere in the header |
| `0014-record-form-field-type.md` | no status line at all — status
stated nowhere in the header |
| `0091-grant-lifecycle-and-recertification.md` | no status line at all
— status stated nowhere in the header |
| `0092-sys-user-profile-field-delegation.md` | no status line at all —
status stated nowhere in the header |
| `0093-tenancy-mode-and-membership-lifecycle.md` | no status line at
all — status stated nowhere in the header |
| `0098-pinyin-search-companion-column.md` | `- **Status:**` (bullet,
colon inside the bold) |
| `0100-credential-field-channels.md` | `- **Status:**` (bullet, colon
inside the bold) |
| `0103-managedby-write-policy-and-engine-write-guard.md` | `-
**Status:**` (bullet, colon inside the bold) |
| `0104-field-runtime-value-shape-contract.md` | `- **Status:**`
(bullet, colon inside the bold) |
| `0132-multi-organization-runtime-is-open-core.md` | `- **Status:**`
(bullet, colon inside the bold) |
| `0133-org-management-open-basics.md` | `- **Status:**` (bullet, colon
inside the bold) |
Five more records had a spelling the card's grep accepted but the
one-instrument rule does not (`## Status` heading in 0071; `- **状态**:`
in 0117, 0118, 0121; `- **Status**:` in 0079). All 17 normalized files,
with the spelling each had:
| File | Previous spelling |
|---|---|
| `0009-execution-pinned-metadata.md` | no status line at all |
| `0010-metadata-protection-model.md` | no status line at all |
| `0014-record-form-field-type.md` | no status line at all |
| `0071-dataset-semantic-layer-depth.md` | `## Status` heading with the
value on the next paragraph |
| `0079-record-display-name.md` | `- **Status:**` (bullet, colon inside
the bold) |
| `0091-grant-lifecycle-and-recertification.md` | no status line at all
|
| `0092-sys-user-profile-field-delegation.md` | no status line at all |
| `0093-tenancy-mode-and-membership-lifecycle.md` | no status line at
all |
| `0098-pinyin-search-companion-column.md` | `- **Status:**` (bullet,
colon inside the bold) |
| `0100-credential-field-channels.md` | `- **Status:**` (bullet, colon
inside the bold) |
| `0103-managedby-write-policy-and-engine-write-guard.md` | `-
**Status:**` (bullet, colon inside the bold) |
| `0104-field-runtime-value-shape-contract.md` | `- **Status:**`
(bullet, colon inside the bold) |
| `0117-owning-business-unit-record-stamp.md` | `- **状态**:` / Chinese
key |
| `0118-non-user-actor-contract.md` | `- **状态**:` / Chinese key |
| `0121-declarative-endpoint-routing-namespace-and-channel-split.md` |
`- **状态**:` / Chinese key |
| `0132-multi-organization-runtime-is-open-core.md` | `- **Status:**`
(bullet, colon inside the bold) |
| `0133-org-management-open-basics.md` | `- **Status:**` (bullet, colon
inside the bold) |
Only the status line changed in those files; the value after it is
byte-identical.
**Shared numbers, cross-referenced and never renumbered** (Prime
Directive 13) — each of the nine files under 0006/0010/0019/0057 gains
one header line directly under its status line. The 0010/0019/0057 pairs
get `**Shares its number with**: [sibling](./sibling.md) (title) — an
unrelated decision under the same number … cite this record
unambiguously as ADR-<stem>`; the three 0006 files get `**Versions of
this number**: v2 · v3 · v4 (current) — one decision revised twice`. The
index lists all four side by side.
**`check-adr-anchors.mjs` is unambiguous on those four** — a citation
may now be stem-qualified, `ADR-NNNN-<slug>[.vN]`
(`ADR-0057-system-data-lifecycle-and-retention`,
`ADR-0006-project-environment-split.v4`), and such a citation resolves
to exactly one record; a stem that names no record is an error (so a
typo cannot pass as a bare number), and a bare `ADR-NNNN` keeps its
existing meaning (resolves against the number; the 4 bare `ADR-0057`
anchors stay on the existing ambiguity note, unchanged). Decision-letter
citations on a stem-qualified id are checked against that one record's
decisions. The grammar is the ADR filename grammar, so nothing new is
invented. A new battery, *Stem-qualified citations name ONE record
(#26076)*, pins 21 cases; the battery floor moves from 6 to 7. 36
stem-qualified citations exist in the tree after this PR (the nine new
header lines, the README, and the scripts' own literals) and all
resolve.
**Report-only in CI** — a new lint step, *ADR index is current
(report-only — warnings, never a red on a record)*, runs the root alias
`pnpm check:adr-index` (= `node scripts/adr-index.mjs --self-test &&
node scripts/adr-index.mjs --report`), in the alias form the GATE
INVOCATION IDIOM note (c91544a) asks of a new gate step; the anchors
step is unchanged. The self-test runs with the flag because
`check-self-test-wired` reds a self-test no workflow executes, and it
exercises **fixtures only**: its live-tree battery proves the generator
reads and renders the real registry and never asserts on what a record
says (the respin moved the two assertions that did — one spelling
everywhere, ui records parse — out; they were already `--report`
warnings). `--report` checks the committed index against a fresh
rendering and every record's status line, prints `::warning file=…::`
annotations (and a `$GITHUB_STEP_SUMMARY` block) for anything off, and
**exits 0 whatever it finds** — so the only red this step can show is a
broken generator, never a record or a stale index. `--check` is the
gate's spelling (exit 1 on drift or an unparsed record) for the day a
maintainer names one; nothing calls it in CI. No new required check, no
branch-protection change.
**ObjectUI registry (#26080, ruling 6417494426)** — the 11 records under
`ui/docs/adr/` are listed in the root index under `ui-NNNN` with their
files untouched. Their numbers overlap the root sequence (ui 0053, 0057
…) and mean different decisions, so an index row never reads `ADR-NNNN`
for them, and a citation keeps the `ObjectUI ADR-NNNN` spelling the
anchor checker already recognises as another registry's. Rows link to
`../../ui/docs/adr/…`, which `check-adr-links` resolves.
**`docs/adr/PRIORITIZATION.md` removed** — it declared itself retired;
the one live rule it still carried (a PR landing an ADR's implementation
flips the status line to `Accepted — implemented` with one line of
evidence) is now the *Status hygiene* bullet in the README conventions,
and ADR-0110's pointer to it names the README. Non-ADR notes stay out of
the index by construction: a filename that is not `NNNN-slug[.vN].md` is
reported as foreign, never listed.
**Respin after the contract review (record 6434963378)** — (1) the
self-test no longer asserts on live records (above); (2) merged
`origin/main` as a merge commit to clear the `package.json` conflict
with c91544a and took its alias form; (3) README: a versions group now
says the bare `ADR-0006` names the decision whose current text is v4 and
cites the superseded unversioned file by its stem; a `**Decided**:` line
is a date line, so ADR-0079 dates to 2026-06-28; ADR-0071's status
paragraph is folded onto its one line.
**Stale Proposed — listed, not relabelled.** 18 records carry `Proposed`
with a status date before 2026-07-26 (the card counted 19; ADR-0025 is
the 19th, see row 19). Each has an implementation reading from the tree
(anchor files that the gate pins to it; files under `packages/` naming
the number). None of these status lines changed; the reading is for the
records' authors and the maintainer, not a verdict.
<details><summary>19 stale Proposed records with an implementation
reading each</summary>
| # | Record | Status line as written | Anchored source files | Files
under packages/ naming the bare number | Implementation reading |
|---|---|---|---|---|---|
| 1 | ADR-0010 `docs/adr/0010-metadata-protection-model.md` | Proposed |
0 | 138 src / 77 test (bare number — counts cover both ADR-0010 records)
| **partly realized, undeclared** — 138 non-test source files name it,
no anchor pins any. Author to decide: accept with evidence, or narrow
the record to what landed. |
| 2 | ADR-0019 `docs/adr/0019-app-as-consumer-unit.md` | Proposed (v3 —
narrowed to the consumer-surface decision) | 0 | 90 src / 32 test (bare
number — counts cover both ADR-0019 records) | **partly realized,
undeclared** — 90 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 3 | ADR-0022 `docs/adr/0022-connectors-vs-messaging-channels.md` |
Proposed (2026-05-31) — routing decision recorded; both substrates now
exist independently (`co… | 0 | 21 src / 2 test | **partly realized,
undeclared** — 21 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 4 | ADR-0026 `docs/adr/0026-client-ui-plugin-distribution.md` |
Proposed | 0 | 0 src / 0 test | **not started** — nothing under
packages/ cites it. Still a proposal; Withdrawn is a one-line edit if it
is no longer wanted. |
| 5 | ADR-0027 `docs/adr/0027-metadata-authoring-lifecycle.md` |
Proposed (2026-06-01) | 0 | 6 src / 2 test | **partly realized,
undeclared** — 6 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 6 | ADR-0038 `docs/adr/0038-build-verification-loop.md` | Proposed
(2026-06-11) — cloud-owned; framework slice partially implemented
(2026-07-16 audit): … | 0 | 7 src / 4 test | **partly realized,
undeclared** — 7 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 7 | ADR-0046 `docs/adr/0046-package-docs-as-metadata.md` | Proposed
(2026-06-12, revised — simplified from the original directory/docSet
design) | 2 | 52 src / 29 test | **implemented, status never followed**
— the anchor gate pins 2 source file(s) to it
(`packages/rest/src/meta-item-read-gate.ts`,
`packages/rest/src/meta-item-read-routes.ts`). Candidate for `Accepted —
implemented` + one line of evidence, by its author. |
| 8 | ADR-0050 `docs/adr/0050-form-layout-vs-presentation.md` | Proposed
(2026-06-15) · **Amended** (2026-10-20, letter B′ on
[#24692](https://github.com/objec… | 0 | 0 src / 0 test | **not
started** — nothing under packages/ cites it. Still a proposal;
Withdrawn is a one-line edit if it is no longer wanted. |
| 9 | ADR-0051 `docs/adr/0051-inline-metadata-views-in-docs.md` |
Proposed (2026-06-16) — P1 authoring surface implemented (2026-07-16
audit): `ElementMetadataVi… | 0 | 3 src / 1 test | **partly realized,
undeclared** — 3 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 10 | ADR-0052 `docs/adr/0052-audit-is-not-the-activity-feed.md` |
Proposed (2026-06-16) — partially implemented (2026-07-16 audit): §5b
declarative activity (`tr… | 0 | 47 src / 16 test | **partly realized,
undeclared** — 47 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 11 | ADR-0063
`docs/adr/0063-two-kernel-agents-skills-are-the-extension-primitive.md`
| Proposed (2026-06-22) — cloud-owned (2026-07-16 audit): the framework
spec dependencies shipped… | 1 | 33 src / 11 test | **implemented,
status never followed** — the anchor gate pins 1 source file(s) to it
(`packages/cli/src/commands/generate.ts`). Candidate for `Accepted —
implemented` + one line of evidence, by its author. |
| 12 | ADR-0064 `docs/adr/0064-tool-scoping-to-agent.md` | Proposed
(2026-06-22) — cloud-owned (2026-07-16 audit): the only framework
dependency (`skill.s… | 0 | 16 src / 5 test | **partly realized,
undeclared** — 16 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 13 | ADR-0071 `docs/adr/0071-dataset-semantic-layer-depth.md` |
Proposed. (Refocused — see **Correction** below. The first merged draft
also | 0 | 12 src / 5 test | **partly realized, undeclared** — 12
non-test source files name it, no anchor pins any. Author to decide:
accept with evidence, or narrow the record to what landed. |
| 14 | ADR-0072 `docs/adr/0072-reference-scope-and-resolvability.md` |
Proposed (2026-06-25) | 0 | 31 src / 12 test | **partly realized,
undeclared** — 31 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 15 | ADR-0073 `docs/adr/0073-automation-execution-identity.md` |
Proposed (2026-06-25) | 0 | 23 src / 5 test | **partly realized,
undeclared** — 23 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 16 | ADR-0077
`docs/adr/0077-authoring-surface-boundary-hook-flow-validation.md` |
Proposed (2026-06-28) | 0 | 2 src / 1 test | **touched, not landed** — 2
source file(s) and 1 test(s) mention it; the decision is still open. |
| 17 | ADR-0080 `docs/adr/0080-ai-authored-ui-jsx-source.md` | Proposed
(2026-06-29) — partially implemented (2026-07-16 audit): `sdui-parser`
package (parse≠… | 1 | 38 src / 7 test | **implemented, status never
followed** — the anchor gate pins 1 source file(s) to it
(`packages/sdui-parser/src/parse.ts`). Candidate for `Accepted —
implemented` + one line of evidence, by its author. |
| 18 | ADR-0096 `docs/adr/0096-execution-surface-identity-admission.md`
| Proposed (2026-07-15) | 0 | 58 src / 40 test | **partly realized,
undeclared** — 58 non-test source files name it, no anchor pins any.
Author to decide: accept with evidence, or narrow the record to what
landed. |
| 19 | ADR-0025 `docs/adr/0025-plugin-package-distribution.md` |
Proposed — partially implemented (2026-09-12 audit, superseding
2026-07-16): the `.osplugin` ar… | 0 | 51 src / 11 test | the card's
19th: its status line carries a 2026-09-12 audit stamp, so the generated
index dates it after the cut; by first proposal date it is stale.
**partly realized, undeclared** — 51 non-test source files name it, no
anchor pins any. Author to decide: accept with evidence, or narrow the
record to what landed. |
Counts read from `git grep -l '\bADR-NNNN\b' -- packages` (non-test vs
`__tests__`/`*.test.*`) and from `scripts/adr-anchors/*.json` at this
PR's head.
</details>
**One row in `scripts/pm/dispatch-gates.data.mjs`** —
`COMPOUND_ANCHOR_LEDGER` classifies every compound self-test name the
dispatch-gates anchor matches; the generator's `runSelfTest` is a new
one, so `check:pm-dispatch-gates` reddened until it was classified
(genuine battery, fixtures masked as hints) and the docblock's pinned
counts moved 34→35 / 23→24. The ledger forbids dodging the anchor by
renaming, so the row is the fix.
**Out of scope, on purpose**: no record is relabelled, renumbered or
moved; no citation in the tree is rewritten to the stem form (bare
citations keep working); no new required gate.
## Tests
- `node scripts/adr-index.mjs --self-test` — 46 assertions over 7 pinned
batteries (record parsing incl. `**Decided**:` as a date line; the one
spelling with every other spelling Unparsed; supersession refs extracted
not invented; shared-number grouping and the versions cite-as;
deterministic rendering of both registries; `--check` reds / `--report`
never does; live tree: the generator reads and renders the real registry
— no assertion on a record's content). Self-test shape copied from a
landed one (battery roster, pinned floors, verdict handshake).
- `node scripts/check-adr-anchors.mjs --self-test` — 133 assertions (was
112), new battery of 21 for stem-qualified citations: resolves to one
record, malformed stem is red, versioned stem checks the `.vN` file,
bare number unchanged, collision pair cited by stem is unambiguous,
decision letters on a qualified id check that record only. The live run
on the merged head: 37 stem-qualified citations resolve (the README's
versions note is the 37th).
- `pnpm adr:index` then `git diff --quiet docs/adr/README.md` — the
committed index is byte-equal to a fresh rendering.
- `node scripts/check-self-test-wired.mjs` and `node
scripts/check-self-test-workflow-commands.mjs` — exit 0 with the
self-test wired through the `check:adr-index` alias (the first pass of
the gates caught the generator's self-test as unrun; fixed by wiring,
not by an allowlist row).
- `pnpm check:adr-index` — exit 0 (self-test, then `--report: OK`);
`--check` — exit 0.
## Acceptance notes
- Ruling A (comment 6417460375, batch #398 item 3): index generated from
the records, read from one normalized spelling ✔; four duplicated
numbers cross-referenced in each header and listed side by side, never
renumbered ✔; `check-adr-anchors.mjs` unambiguous on those four ✔; index
script with `--self-test`, called report-only from the existing lint ADR
step, no new required gate ✔ (门禁不加); 19 stale Proposed listed with a
reading, not relabelled ✔; 12 no-match files listed before normalizing
✔; non-ADR notes out of the index ✔; `PRIORITIZATION.md` removed ✔.
- Ruling 6417494426 (#26080): `ui/docs/adr` registered in the root index
under the `ui-` prefix, files not renamed ✔.
- Tier H: `docs/adr/**` and `.github/workflows/**` are governed
surfaces; this PR stays draft and lands on a governed approver's review.
- `skip-changeset`: the diff touches `docs/adr/**`, root `scripts/`,
root `package.json` and a workflow — nothing any package ships in its
`files[]`.
## Verification
Head: `9e254cb3` (merge of origin/main 00874b9 + the respin commit).
Commands below were run from the repository root on that head; exit
codes captured before any pipe.
<details><summary>Scripts and index</summary>
```
node scripts/adr-index.mjs --self-test → exit 0 · ✓ 46 assertions over the real parseRecord() / renderIndex() / verdict() paths
node scripts/adr-index.mjs → exit 0 · unchanged docs/adr/README.md (231 lines)
node scripts/adr-index.mjs --check → exit 0 · OK — docs/adr/README.md is current and every record parsed
pnpm check:adr-index → exit 0 · self-test green, then --report: OK — current, every record parsed. Report-only
node scripts/check-adr-anchors.mjs --self-test → exit 0 · ✓ 133 assertions
node scripts/check-adr-anchors.mjs → exit 0 · OK (91 anchored file(s) … 138 decision number(s) … 59770 citation(s) across 8329 file(s) resolve, 37 of them stem-qualified to one record; …)
pnpm exec eslint --no-inline-config scripts/adr-index.mjs scripts/check-adr-anchors.mjs scripts/pm/dispatch-gates.data.mjs → exit 0
pnpm check:adr-links → exit 0 (README links incl. ../../ui/docs/adr/… resolve)
```
</details>
<details><summary>Dispatch gates — every command from `node
scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack`, reconciled with `--ran`</summary>
Pass 3 on the pre-merge head `d1a0cfe5` ran all 76 derived commands
green (`--ran`: 76 derived / 76 run / 0 unrun). On this head `9e254cb3`
(merge of origin/main + the respin) the full pass 4 (73 derived
commands) was still running when this body was written; the quick checks
named above plus `pnpm check:pm-dispatch-gates` (1935 cases) are exit 0
on it, and the complete `--ran` record of pass 4 is posted as the
os-dev-report comment on #26076 when it completes. Changed lines 1542 vs
the human-merge threshold 3000: under.
</details>
---
_Generated by [Claude
Code](https://claude.ai/code/session_01WGufzgAZv5vcb4H6qvqBAM)_
---------
Co-authored-by: objectstack-fleet[bot] <noreply@anthropic.com>1 parent c7d6ca8 commit 79cd9ef
33 files changed
Lines changed: 1457 additions & 85 deletions
File tree
- .github/workflows
- docs/adr
- scripts
- pm
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
601 | 601 | | |
602 | 602 | | |
603 | 603 | | |
| 604 | + | |
| 605 | + | |
| 606 | + | |
| 607 | + | |
| 608 | + | |
| 609 | + | |
| 610 | + | |
| 611 | + | |
| 612 | + | |
| 613 | + | |
| 614 | + | |
| 615 | + | |
| 616 | + | |
| 617 | + | |
| 618 | + | |
604 | 619 | | |
605 | 620 | | |
606 | 621 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
2 | 2 | | |
3 | 3 | | |
4 | 4 | | |
5 | | - | |
| 5 | + | |
| 6 | + | |
6 | 7 | | |
7 | 8 | | |
8 | 9 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | | - | |
| 3 | + | |
4 | 4 | | |
5 | 5 | | |
6 | 6 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
| Original file line number | Diff line number | Diff line change | |
|---|---|---|---|
| |||
1 | 1 | | |
2 | 2 | | |
3 | 3 | | |
| 4 | + | |
4 | 5 | | |
5 | 6 | | |
6 | 7 | | |
| |||
0 commit comments