Skip to content

docs(adr): ADR-0131 Status is Accepted — the merge that landed it on main is the acceptance act - #16590

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-15453-adr-0131-status-accepted
Sep 7, 2026
Merged

docs(adr): ADR-0131 Status is Accepted — the merge that landed it on main is the acceptance act#16590
os-zhuang merged 1 commit into
mainfrom
claude/issue-15453-adr-0131-status-accepted

Conversation

@os-musk

@os-musk os-musk commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator

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):

**Status**: Proposed (2026-09-04) — awaiting the maintainer's hand-merge, which is itself the
acceptance act for a governed surface (Prime Directive #14). ⛔ Nothing below is settled until
this record merges; the implementation cards are cut **from** the merged ADR, never ahead of it.

After (one source line):

**Status**: Accepted (2026-09-04) — accepted by the merge that landed it on `main` ([#14976](https://github.com/objectstack-ai/objectstack/pull/14976), commit `0ed271574`), which is itself the acceptance act for a governed surface (Prime Directive #14). Execution is paused under #15193 and the maintainer's standing instruction; that pause is carried there, not by this status 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_by on the landing PR to be a human approver before any edit, and orders a stop-and-report otherwise.

  • GET /repos/objectstack-ai/objectstack/pulls/14976merged_by: os-zhuang, merged: true, merged_at: 2026-09-04T05:37:45Z. A human approver ⇒ this record is covered.
  • The date was read on two channels and they agree. git: git log origin/main --diff-filter=A names 0ed27157468d2463b48f58c2c7be634036b18c4d, author and committer date 2026-09-04T04:50:16+00:00, subject docs(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 superseded Proposed line already carried.
  • 0ed271574 is 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:

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 #15193 clause replaces. Leaving it would have produced a status that says Accepted and, 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:services seat 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 an Accepted header would leave a contradiction that invites the other failure, a seat "correcting" a governed surface unasked. ④ startup focus — zero new concepts; strictly fewer words.

⚠️ If the reviewers read the ruling narrowly as "line 3 only", the fix is to restore the two trailing lines — the rest of this diff stands unchanged.

2. The ruled clause keeps a bare #15193, not a markdown link

The clause is the ruling's own text and the ruling calls it verbatim, so it is reproduced byte-for-byte. Bare #NNNN is 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/objectstack at 563ba6df (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/ resolve
  • check-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-expressions first answered exit 3 — PREREQUISITE NOT MET (@objectstack/formula and @objectstack/lint unbuilt). After pnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint under scripts/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-…mdexit 3, ⛔ GOVERNED — a human merge is the review record for this PR (#9495 regime).

pnpm lint does 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.mjs carries zero .md/markdown entries; (b) eslint --no-inline-config --format json on 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: "no parserOptions.project, no typed @typescript-eslint rules"), 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 HEAD at origin/main = ffca0df9 printed a tree oid and no conflicted path (exit 0). git ls-remote --heads origin shows 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-changeset applied 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 for os-zhuang + hotlong as 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 reports merged_at 2026-09-04T05:37:45Z while its squash commit 0ed271574 carries 2026-09-04T04:50:16Z on 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

…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
@os-musk os-musk added the skip-changeset PR has no user-facing published change; bypasses the changeset gate label Sep 7, 2026 — with Claude
@github-actions github-actions Bot added the documentation Improvements or additions to documentation label Sep 7, 2026
@os-musk
os-musk requested review from hotlong and os-zhuang September 7, 2026 11:37

os-musk commented Sep 7, 2026

Copy link
Copy Markdown
Collaborator Author

维护者速读(终稿 · skills 席,2026-09-07T11:4xZ)


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 7, 2026 12:07
@os-zhuang
os-zhuang enabled auto-merge September 7, 2026 12:07
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 7, 2026
Merged via the queue into main with commit a7c14cd Sep 7, 2026
40 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-15453-adr-0131-status-accepted branch September 7, 2026 12:40
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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation needs-user-decision size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants