docs(adr): ADR-0131 Status is Accepted — the merge that landed it on main is the acceptance act - #16590
Merged
Merged
Conversation
…main is the acceptance act Ruling A on the finding card, recorded 2026-09-05 (maintainer decision batch #40, verbatim 「同意」): the record's Status line said its own acceptance act was still owed, while the only reason a reader can see the line at all is that the hand-merge already happened. Rewritten in ADR-0125's spelling, dated by the landing commit 0ed2715 / PR #14976, whose merged_by is a human approver (os-zhuang). The ruled clause is carried verbatim so nobody reads the accepted status as the end of the execution pause: that pause is #15193's, and #15193 is open. The whole soft-wrapped field is replaced, not only its first source line: its trailing sentence ("Nothing below is settled until this record merges") is false once the record is on main, and it is the sentence the ruled clause replaces in function. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_018dxq7YqsLDMeZDZ5AzsgJX
Collaborator
Author
This was referenced Sep 7, 2026
os-zhuang
approved these changes
Sep 7, 2026
os-zhuang
marked this pull request as ready for review
September 7, 2026 12:07
os-zhuang
enabled auto-merge
September 7, 2026 12:07
os-musk
pushed a commit
that referenced
this pull request
Sep 7, 2026
…26-09-07 is the acceptance act Ruling A on this card's last outstanding record, recorded by the director seat 2026-09-07 (comment 5572010837, decision batch #1 of summon #17, maintainer's verbatim reply 「同意」): the Status line becomes Accepted (2026-09-07) — accepted by the maintainer's reply of 2026-09-07 (objectstack#15453, decision batch #1 of director summon #17) Dated to the ruling, not to the 2026-08-28 landing: that landing PR (#12839, commit bbf88be) was merged by the seat account os-sales, and the earlier ruling A of 2026-09-05 (5548576472) explicitly does not cover a seat merge — so "the merge that landed it on main" is NOT the acceptance clause here, and the sibling records' (ADR-0130, ADR-0131) merge clause is deliberately absent. The whole Status field is replaced, not only its state sentence, following the ADR-0130 (#15704) and ADR-0131 (#16590) flights: the field carries the state and the act and nothing else. The tail this drops is flagged in the PR body as a judgment call a reviewer can reject. Claude-Session: https://claude.ai/code/session_018dxq7YqsLDMeZDZ5AzsgJX Co-authored-by: Claude <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #15453
Ruling A on that card (maintainer decision batch #40, verbatim reply 「同意」, recorded by the director seat in comment 5548576472) — the second of the three records it covers. ADR-0130 landed in #15704. ADR-0128 stays with the maintainer: its landing PR #12839 was merged by the seat account
os-sales, so "merge = acceptance" does not hold for that record and the ruling says in as many words that it is not covered (速读 5552091322, A/B/C unanswered).What changed
One field, one file —
docs/adr/0131-total-organization-ownership-no-null-organization-id.md. 1 insertion, 3 deletions.Before (source lines 3–5, a single soft-wrapped field):
After (one source line):
The spelling is read, not recalled: the first sentence is copied from ADR-0125 line 3 and from the ADR-0130 line this flight's predecessor landed, PR link and short commit sha included. The second sentence is the ruling's own clause, carried byte-verbatim.
The ruling's precondition, verified in this run rather than inherited
The ruling requires
merged_byon the landing PR to be a human approver before any edit, and orders a stop-and-report otherwise.GET /repos/objectstack-ai/objectstack/pulls/14976→merged_by: os-zhuang,merged: true,merged_at: 2026-09-04T05:37:45Z. A human approver ⇒ this record is covered.git log origin/main --diff-filter=Anames0ed27157468d2463b48f58c2c7be634036b18c4d, author and committer date2026-09-04T04:50:16+00:00, subjectdocs(adr): ADR-0131 … (#14976)— the commit that added the file, not a later migration. API: the same commit reports the same timestamp. ⇒ 2026-09-04, which is also the date the supersededProposedline already carried.0ed271574is a real prefix of that sha (0ed27157+4), so the short sha the ruling names resolves.Two reference facts checked for the reviewers rather than assumed:
d1c86a74(docs(adr): qualify the pre-repo ADR-0081 citations as cloud ADR-0081, letter-checked per site #15612, merged today), which qualified the pre-repo ADR-0081 citations ascloud ADR-0081and did not touch the Status field. That PR was this file's serial holder; it is merged, and no open PR touchesdocs/adr/0131-*.Two judgment calls, named because a reviewer should be able to reject them
1. The whole soft-wrapped field was replaced, not only its first source line
The ruling says "the Status line". In this record the Status field wraps over three source lines, and its tail — "⛔ Nothing below is settled until this record merges; the implementation cards are cut from the merged ADR, never ahead of it" — is the sentence that made the old field self-refuting: the record has merged, so the sentence is false on its face, and it is exactly the reading the ruled
#15193clause replaces. Leaving it would have produced a status that saysAcceptedand, one line later, that nothing is settled until it merges. The same call was made and accepted on ADR-0130 (#15704).Along the four axes: ① long-term — one field that states the state and the act and nothing else is the shape ADR-0125 established and 84+ records follow; a status carrying leftover narrative is how this card's defect got written in the first place. ② real pull — the pull is measured and already happened: a
domain:servicesseat reads this exact line as its standing pause condition. ③ AI-error prevention — the tail is the half that induces the "wait forever" failure; keeping it under anAcceptedheader would leave a contradiction that invites the other failure, a seat "correcting" a governed surface unasked. ④ startup focus — zero new concepts; strictly fewer words.2. The ruled clause keeps a bare
#15193, not a markdown linkThe clause is the ruling's own text and the ruling calls it verbatim, so it is reproduced byte-for-byte. Bare
#NNNNis in-corpus style for this file (dozens of sites; 16 linked ones also exist), so this costs nothing in consistency. The PR reference in the first sentence is linked, because that half is ADR-0125's template rather than ruling text.Gates
Derived from the real change set, never a hand list —
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackat563ba6df(stderr: "change set derived from git — 1 path(s) vs merge base ffca0df", three-dot) ⇒ 17 commands, all 17 run, reconciled:✓ dispatch-gates --ran: 17 derived famil(ies) accounted for — 17 run, 0 NOT-MEASURED.Exit codes captured by redirect-then-capture, before any pipe.The three the ruling names, quoted from the gates themselves:
✅ check-adr-links: 679 relative link destination(s) under docs/adr/ resolvecheck-adr-anchors: OK (53 anchored file(s), every governing ADR still referenced; 133 decision number(s) …; 33725 citation(s) across 4272 file(s) resolve …)✅ check-adr-symbol-anchors: 2056 anchors across 139 records resolve — 270 symbol, 1761 file-level, 25 cross-repo, 6 exempt, 3 continuation. 0 line anchors survive.Others, also quoted from their own output:
check-nul-bytes: OK (scanned 8166 text file(s) … no raw ASCII control bytes).,✓ doc authoring guard: 15062 customer-facing string(s) across 865 spec sources clean,check:cross-package-test-inputs,check:driver-memory-census,check:refd-timer-probe,check:watch-hint-literal,check:pm-governed-merges,check-closing-keyword-parity,check-comment-mask-corpus,check-ci-filter-parity,check:doc-formula-expressions.One NOT MEASURED, stated as such rather than hidden:
pnpm --filter @objectstack/lint run check:doc-formula-expressionsfirst answered exit 3 — PREREQUISITE NOT MET (@objectstack/formulaand@objectstack/lintunbuilt). Afterpnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lintunderscripts/pm/os-verify-lock.sh(VERDICT command-exit 0 · held the lock 180s · waited 0s) it was re-run and exited 0. The table above reports the re-run, not the prerequisite failure.Governed predicate, as the ruling requires:
node scripts/pm/check-governed-merges.mjs --test docs/adr/0131-…md→ exit 3,⛔ GOVERNED — a human merge is the review record for this PR (#9495 regime).pnpm lintdoes not apply to this diff — and that is a measurement, not a skip. Three readings, all taken at the final commit: (a) the checked population read from eslint's own configuration —eslint.config.mjscarries zero.md/markdownentries; (b)eslint --no-inline-config --format jsonon the one changed file returns 1 result,errorCount: 0, its single warning being "File ignored because no matching configuration was supplied."; (c) invariance — this repo's config never enables type-aware linting for any file (eslint.config.mjs, its own comment: "noparserOptions.project, no typed@typescript-eslintrules"), so nothing in this diff can move the verdict on a file it does not touch. No ablation: a one-field docs edit has no behaviour to mutate.Serial probe before opening:
git merge-tree --write-tree --name-only origin/main HEADatorigin/main=ffca0df9printed a tree oid and no conflicted path (exit 0).git ls-remote --heads originshows no other branch on this file.Landing
⛔ Governed surface (
docs/adr/**, Prime Directive #14) — draft, and it stays draft: no seat readies it, enqueues it, arms auto-merge, or submits a review on it.skip-changesetapplied at open: this diff publishes nothing from any released package.content/docs/releases/**untouched. ADR-0126's**Original status**:history line untouched. ADR-0128 untouched.Part of #15453, deliberately not a closing keyword: ADR-0128 is the card's third record and is still on the maintainer's A/B/C answer, so this PR must not close it.验收备注
noted, not filed— the ruling's execution note asks foros-zhuang+hotlongas requested reviewers. This seat opened the PR without requesting reviews, because on a governed surface a review request from a seat is the step the PM's ACCEPT stroke owns (the 速读 comment goes with it). Successor: the PM seat on this card's ACCEPT.noted, not filed— PR docs(adr): ADR-0131 — organization ownership is total: no NULL organization_id; declared metadata stays in code; rows only when an organization authored them (Refs #13564) #14976 reportsmerged_at 2026-09-04T05:37:45Zwhile its squash commit0ed271574carries2026-09-04T04:50:16Zon both author and committer. Same calendar date, so the ruled date is unaffected either way; the ~47-minute gap is an observation about that one PR's landing, not a defect with a reproduction. Successor: none — nothing reads these two timestamps against each other.维护者速读(草稿)
改了什么:ADR-0131 的状态行,从「Proposed —— 还等着你手工合并」改成「Accepted(2026-09-04)—— 落到 main 的那次合并就是受理动作」,并按裁决原话补一句:执行暂停由 #15193 和你的当面指令承载,不由这条状态行承载。整份记录只动这一个字段,别的一个字没动。
为什么改:这行说的是一件自我否证的事 —— 它把「你手工合并」称作待办,而读者能看到这行的唯一原因就是那次合并已经发生。它永远不会自己翻转,所以它不是状态,是噪声。你在 batch #40 回的「同意」就是对这三份记录的受理;本轮执行的是其中第二份(ADR-0130 已随 #15704 落地)。落地合并者实测是
os-zhuang(人),裁决要求的前提成立。风险与代价(含回滚):主要风险是有人把「Accepted」读成「暂停解除了」—— 裁决为此专门加的那句话就写在同一行,而且 #15193 本轮实测仍是 open。回滚成本接近零:一个文件、一个字段、1 加 3 删,
git revert即可复原;这份 ADR 的状态行没有任何代码或门禁在读(scripts/adr-anchors/里没有指向 0131 的 anchor 文件,check-adr-symbol-anchors本轮实测全仓「0 line anchors survive」)。第三份 ADR-0128 不在本 PR 里,它仍等你的 A/B/C。席位意见:
你要做的:确认这个改法(尤其是「整个软换行字段一起换掉、连带删掉那句『在本记录合并前下面都不作数』」这个判断),然后手工合并 —— 受管面不进合并队列。ADR-0128 那张速读 5552091322 还在等你一个字母。
Generated by Claude Code