Repository navigation
Commit 0b15730
<!-- claude-projects-attribution: {"github_login":"os-tesla"} -->
_Requested by **Tesla** · [project
thread](https://claude.ai/code/project/chan_01AXsQkLFKRdQCqQ3RTr6Jao?thread=cmsg_01AXsQkLFKRdQCqQ3RTr6Jao34NZC1kp9tY4B2eRFVJz1w)_
Fixes #26553
Clause-②: no
Metadata-protocol: none
## 维护者速读
- 改了什么:ADR-0050(表单布局 vs 呈现)的状态行从 Proposed 改为 Accepted,写明你在 #27032 的 A′
裁决、裁决记录号 6464210455 和两张切换卡(#27155 spec、#27159 renderer),2026-10-20
的修订文字原样保留在裁决句之后;`docs/adr/README.md` 由 `pnpm adr:index` 重新生成(Proposed 5
→ 4,Accepted 130 → 131)。
- 为什么改:你 2026-10-28 已裁 ADR-0050 接受,两张切换卡都已完成关闭,但记录和索引仍写着
Proposed;读索引的人和从这份 ADR 切卡的人读到的都是过期状态。这是 #26553 十九份记录里最后一份未收尾的。
- 风险与回滚:只改一行状态文字加生成的索引,不动任何 schema、代码或 ADR 正文;回滚即 revert 本 PR。
- 先看:`docs/adr/0050-form-layout-vs-presentation.md` 第 3
行(裁决原句在前,原修订文字在后);`docs/adr/README.md` 第 20–21 行的计数与第 123 行 ADR-0050
那一行。
- 两分钟验证:`node scripts/adr-index.mjs --check`,预期打印 `adr-index: OK —
docs/adr/README.md is current and every record parsed`,退出码 0。
- 需要你做的:本 PR 触及 `docs/adr/**`(Tier H),席位复审后由你批准合并。
## What changes
**`docs/adr/0050-form-layout-vs-presentation.md`, line 3 only.** The
status line read:
> `**Status**: Proposed (2026-06-15) · **Amended** (2026-10-20, letter
B′ on #24692, ruling record 6281834942, maintainer 「同意」) — the list
add-record open mode is no longer declared on `addRecord`; see the note
under Decision 2.`
It now opens with the ruled sentence, verbatim from the pointer on the
card (issue 26553, comment 6464456446), and keeps the amendment text
after it:
> `**Status**: Accepted (2026-10-28, letter A′ on #27032, ruling record
6464210455) — cutover card #27155 (spec) + #27159 (renderer); the
2026-10-20 amendment stands · **Amended** (2026-10-20, letter B′ on
#24692, ruling record 6281834942, maintainer 「同意」) — the list add-record
open mode is no longer declared on `addRecord`; see the note under
Decision 2.`
The amendment's links (#24692 and its ruling record) are kept, not
dropped: the ruled sentence says the amendment stands, and the links are
the only place the record names where that amendment was decided.
Dropping them would leave a standing amendment nobody can trace (Prime
Directive 13). No other line of the record asserts a Proposed state: a
case-insensitive grep for `proposed` over the file hits line 3 alone
before the edit and nothing after it.
**`docs/adr/README.md`** is regenerated by `node scripts/adr-index.mjs`
(`pnpm adr:index`), never hand-edited: the ADR-0050 row moves from
Proposed to Accepted, its date column reads the first ISO date of the
new status value (2026-10-28), and the summary counts move to Accepted
131 / Proposed 4. The generator reads `Accepted` as the keyword because
it is the earliest vocabulary entry in the value; the bold `Amended`
sits well past the 80-character keyword window and would lose on
position anyway.
**No changeset.** `docs/adr/**` ships in no released package (no
`files[]` under `packages/` names `docs/adr`), so the PR publishes
nothing and carries `skip-changeset`, declared on the create.
## Tests
All readings on head `ac204886` in a fresh worktree off `origin/main`
`1aeeafd9`.
- `node scripts/adr-index.mjs` wrote `docs/adr/README.md` (237 lines);
`node scripts/adr-index.mjs --check` exit 0: `adr-index: OK —
docs/adr/README.md is current and every record parsed`.
- `pnpm check:adr-index` exit 0 (part of the derived gates below).
- `git diff --shortstat origin/main...HEAD`: 2 files changed, 4
insertions, 4 deletions.
- The edit was applied by a script asserting exactly one hit of the old
line at line 3 and exactly one hit of the new line afterwards (old hits
0, new hits 1).
## Acceptance notes
- **Neighbours.** Four open PRs touch `docs/adr/` records on their heads
against their merge-base with `origin/main` `1aeeafd9`: #30828
(ADR-0142), #30862 (ADR-0125), #30899 (ADR-0146) and #30940 (ADR-0055).
None of them touches `docs/adr/README.md`. Whichever of them and this PR
lands later merges `main` and re-runs `pnpm adr:index` if a status line
moved.
- **Claim surface held.** The record's body (Decision, Migration,
Consequences) is untouched: the claim names the status line alone, and
the cutover's completion is recorded by the two closed cards the line
names, not by rewriting the record.
- `scripts/adr-index.mjs --check` is the gate's spelling; CI's lint ADR
step calls `--report`, which warns on a stale index and never reds. The
local `--check` reading above is the one that would.
## Verification
<details><summary>Derived gates: 21 derived, 21 run, 0 NOT MEASURED, 0
UNRUN (head ac20488)</summary>
`node scripts/pm/dispatch-gates.mjs --commands --repo
objectstack-ai/objectstack` derived 21 commands from the committed
change set (2 paths vs merge-base `1aeeafd9`; changed lines 8, under the
3000 human-merge threshold). Each ran in the foreground with stdin
closed, its exit code landed on disk before any pipe; every one exited
0:
- `node scripts/check-adr-links.mjs` and its `--self-test`
- `node scripts/check-closing-keyword-parity.mjs` and its `--self-test`
- `node scripts/check-comment-mask-corpus.mjs`
- `node scripts/ci/plan-test-core-shards.mjs --self-test`
- `pnpm --filter @objectstack/lint run check:doc-formula-expressions`
(the lint closure was built first under `scripts/pm/os-verify-lock.sh`:
VERDICT command-exit 0, 96 s held)
- `pnpm check:adr-anchors`, `pnpm check:adr-index`, `pnpm
check:adr-symbol-anchors`
- `pnpm check:ci-filter-parity`, `pnpm check:closed-ceremony-text`,
`pnpm check:cross-package-test-inputs`
- `pnpm check:doc-authoring`, `pnpm check:driver-memory-census`, `pnpm
check:gitlink-declared`
- `pnpm check:nul-bytes`, `pnpm check:pm-governed-merges`, `pnpm
check:pm-prior-rulings`
- `pnpm check:refd-timer-probe`, `pnpm check:watch-hint-literal`
Reconciliation: `dispatch-gates.mjs --repo objectstack-ai/objectstack
--ran` printed `21 derived famil(ies) accounted for — 21 run, 0
NOT-MEASURED`. Tier: `dispatch-gates --tier` names CONTRACT_REVIEW_TIER
as mandatory from `docs/adr/**`; `check-governed-merges.mjs --test`
lists both paths as governed.
</details>
Tier H by path (`docs/adr/**`). It stays a draft: the spec seat runs the
contract-tier review, then hands the PR to the approver; no seat
readies, queues or arms it.
---
_Generated by [Claude
Code](https://claude.ai/code/session_01L9qibw3DoQ7bgioFtvcrw7)_
Co-authored-by: Claude <noreply@anthropic.com>
1 parent ddcdc80 commit 0b15730
2 files changed
Lines changed: 4 additions & 4 deletions
| 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 | |
|---|---|---|---|
| |||
17 | 17 | | |
18 | 18 | | |
19 | 19 | | |
20 | | - | |
21 | | - | |
| 20 | + | |
| 21 | + | |
22 | 22 | | |
23 | 23 | | |
24 | 24 | | |
| |||
120 | 120 | | |
121 | 121 | | |
122 | 122 | | |
123 | | - | |
| 123 | + | |
124 | 124 | | |
125 | 125 | | |
126 | 126 | | |
| |||
0 commit comments