docs(adr): mark ADR-0135's Until then passage as history and state its grep recipe's scope - #18399
Conversation
…s grep recipe Two stale artefacts in the identity mirror record, neither of which survives on its own: the Consequences bullet still describes a transition that ended, and the Provenance grep recipe reads like a per-site population filter it never was. The Until then sentence is kept byte-identical and marked as history. Rewriting a mirror record's Consequences prose is a governance judgment for the approver, not a dev edit, so the two original sentences stand as the record of the state this decision was taken in, with the marking above them and the reading below. The reading: #14361's re-pointing landed 2026-09-14 in #18228, and on 8b81ab6 all 14 ADR-0024 occurrences left in packages/plugins/plugin-auth/src and packages/platform-objects/src/identity carry the cloud ADR-0024 qualifier - firing control ADR-0135 62 occurrences in the same two trees, dark control zero. The recipe itself is unchanged - it is true in its own sentence - and gains one sentence of scope: it counts LINES on the one historical commit that introduced this record, and a line can carry two citations while a citation can wrap across two lines, so the shape mis-sorts in both directions the moment it is reused as a census of citation sites. That reuse already happened twice. No other citation in the file is touched. Claude-Session: https://claude.ai/code/session_01Bz6hxDBqK62NP2W1LATvnt Co-authored-by: Claude <noreply@anthropic.com>
Contract reviewServed-tier: ① Derived judgments
② Semver level
③ Boundary flags
Implemented-by: VERDICT: PASS 维护者速读(终稿)改了什么 — 一个文件、两段话(+11 / −1)。① Consequences 里那条描述过渡期的 bullet:原来四行一个字节没动,上面加一行「Historical — 过渡已结束」的标记,下面加一句实测读数(两棵树里 14 处 为什么改 — 这两处都是 #14361 完工后留下的过期物:①让读者读到一个今天已不存在的过渡态;②那条配方已被两个席位、三份文档当成总体筛复用过,而它在这个文件上数不准。 风险与代价(含回滚) — 极低:纯散文,不进任何发布产物;18 个门禁族全绿,ADR 三个门禁本席复跑全绿。回滚 = revert 一个 commit。 席位意见 — 席位达档复核 PASS。dev 纠正了本席派发令里的一个日期:重指工作是 2026-09-14 由 PR #18228 落地的,#14361 这张卡 2026-09-16 才被 PR #18344 收掉;PR 正文写的是落地日,正确。①选「标注为历史」而非改写现在时,是本席的定级方向,留给你裁:若你更想直接改写成现在时,批准时说一句,本席补一轮。建议批准。 你要做的 — 在本 PR 上给一次 APPROVED(os-zhuang 或 hotlong 任一);之后由本席按裁决 C 落地(清标、ready、auto-merge SQUASH);⛔ 席位不自行批。 Generated by Claude Code |
Fixes #18345
ADR-0135 carried two stale artefacts, and neither would have survived on its own: both were
tied to work tracked by card #14361, which PR #18344 retired on 2026-09-16. This card exists
to outlive that retirement, and this PR is the whole of it — two passages, nothing else in the
file touched.
1. The
Until thenbullet is MARKED as history, not rewrittenThe Consequences bullet described a transition that has ended. Following the seat's direction,
the four original lines are kept byte-identical — rewriting a mirror record's Consequences
prose is the governance judgment the approver makes, not a dev edit. The bullet gains a history
marker above them and the reading below them, so a reader cannot reach the stale sentences
without first being told they are historical.
One correction to the dispatch's suggested wording, measured rather than assumed. The
re-pointing did NOT land together with card #14361's retirement on 2026-09-16. It landed on
2026-09-14 in PR #18228 (merge commit
0f95f434, merged 2026-09-14T23:02:43Z). Card #14361itself then stayed open two more days and was retired by PR #18344 at 2026-09-16T06:27:30Z. The
text I added names the landing, not the card's retirement, because the landing is what made
the
Until thenstate end.Reading, taken on
objectstack-ai/objectstackat8b81ab60(the branch point):ADR-0024occurrences inpackages/plugins/plugin-auth/src+packages/platform-objects/src/identitycloud ADR-0024qualifierADR-0135occurrences in the same two treesThe card's own reading was
ADR-0024 ②= 0 withADR-0135 D6= 12 files as the firing control;both reproduce here. The occurrence-level measurement above is stronger than the marker count:
it shows there is no bare citation left at all, not merely that one spelling is gone. Every one
of the 14 was checked with its left context, so the count does not rest on a line filter — which
is exactly the instrument error item 2 is about.
2. The grep recipe is UNCHANGED and gains one sentence of scope
The recipe in Provenance point 3 is true in its own sentence and is not edited. What it lacked
was its range, so it read like a per-site population filter and was reused as one twice. One
sentence now states what it counts (LINES, on the one historical commit that introduced this
record) and why the shape cannot be reused as a census of citation sites: a line can carry two
citations and a citation can wrap across two lines, so sorting lines by the
cloud ADR-0024spelling mis-sorts in both directions.
Acceptance notes
checked whether a THIRD stale conditional sits elsewhere in this file. Swept on
e29b3af7for transition-shaped prose —
Until then,for now,not yet,once #,pending,in the meantime,temporarily,soon— with a dark control. The only hits are the bulletthis PR already marks. There is no third occurrence in this file.
readings OUTSIDE
docs/adr/— is still unmeasured, and this PR does not touch it.turbo ls --affectedwas run and is NOT cited as evidence anywhere here: it printed all 81packages rather than narrowing, so it carries no information about this diff.
Verification
All 18 gate families derived for this diff, green, run with the exit code captured before any
pipe. Derivation is mechanical, not copied from the dispatch:
dispatch-gates.mjs --commandsagainst this tree at
e29b3af7, reconciled afterwards with--ran.check-adr-links · check-adr-links --self-test · check-adr-symbol-anchors ·
check-adr-symbol-anchors --self-test · check-ci-filter-parity · check-closing-keyword-parity ·
check-closing-keyword-parity --self-test · check-comment-mask-corpus · check:doc-formula-expressions ·
check:adr-anchors · check:cross-package-test-inputs · check:doc-authoring · check:driver-memory-census ·
check:nul-bytes · check:pm-governed-merges · check:pm-prior-rulings · check:refd-timer-probe ·
check:watch-hint-literal — all exit 0.
check:doc-formula-expressionsfirst answered exit 3, PREREQUISITE NOT MET, which its own textdeclares measures nothing. It was re-run to exit 0 after building
@objectstack/formulaand@objectstack/lint, and only the re-run is recorded as a result.Governed-surface assertion:
check-governed-merges.mjs --teston the file answers exit 3,GOVERNED —
docs/adr/**, rules layer.Repo-wide lint is not owed here, and that is a measurement rather than a skip. Three pieces:
files:block ineslint.config.mjsdeclares only
{ts,tsx,mts,cts,js,jsx,mjs,cjs}, and the config mentions markdown zero times.--format json: run against the one changed file, eslintanswers
File ignored because no matching configuration was supplied— 0 of 1 changed filesare inside its population.
parserOptions.projectand noprojectService, sotype-aware linting is not enabled and this diff cannot move any untouched file's verdict.
No package is affected: the workspace globs are
packages/*,apps/*,examples/*andfriends, and
docs/is under none of them — so no build, no package test and no typecheck isowed, and this PR declares none.
skip-changesetis measured, not assumed: of 77 package manifests, 0 shipdocs/oradrin
files[], against a positive control of 70 that shipdist. Nothing published moves.维护者速读(草稿)
改了什么 — 一个文件、两段话、11 行加 1 行减。① Consequences 里那条描述"过渡期"的
bullet:原来的四行一个字节都没动,只在它上面加了一行历史标记、下面加了一句实测读数。
② Provenance 里那条 grep 配方:配方本身一个字符都没改,只在它后面补了一句说明它数的是什么。
文件里其它任何引用都没碰。
为什么改 — 这两处都是 #14361 完工之后留下的过期物,而且留不住:它们原本挂在
#14361 上,那张卡已经被 PR #18344 收掉了,不单独接出来就会一起消失。①的问题是读者会读到一个
今天已经不存在的过渡状态,并信以为真;②的问题更实:那条配方读起来像一个通用的"逐站点筛选器",
已经被两个席位、三份文档当成筛选器复用过,而它在这个文件上两个方向都会数错。
风险与代价(含回滚) — 风险极低。这是纯散文改动,不含任何代码、schema、行为或已发布内容;
77 个包里没有一个把
docs/或adr放进files[],所以对 npm 消费者零影响。18 个门禁族全绿。回滚就是 revert 这一个 commit,没有任何下游产物需要一起回退、也没有迁移要撤。唯一的判断题在①:
本 PR 选择"标注为历史"而不是"改写成现在时" —— 因为改写一份镜像记录的 Consequences 属于治理判断,
应当由批准人来做,不该由 dev 塞进来。若您认为应当直接改写成现在时,那是您的判断,不是本 PR 的缺口。
席位意见 — (留空,待席位定稿)
你要做的 — 读①的那条 bullet 和②的那句量程说明,确认措辞。特别请确认一处事实修正:
派发建议的措辞写的是"#14361 于 2026-09-16 落地",实测是不对的 —— 真正的重指工作是
2026-09-14 由 PR #18228 落的地,#14361 这张卡本身多开了两天、2026-09-16 才由 PR #18344 收掉。
本 PR 的正文写的是落地日。确认无误后,这是治理面(
docs/adr/**),需要您本人批准并由您合入;⛔ 本席不翻 ready、不入队、不武装 auto-merge。
Generated by Claude Code