Conversation
…ord's own landing PR and commit Both records landed on `main` on 2026-09-07 (0132 via #16215, squash `c677cda816`; 0133 via #16267, squash `13c08356ab`, both merged by the authorized approver), while their `**Status**` lines still read `Proposed — awaiting the maintainer's hand-merge, which is (itself) the acceptance act`. Read by their own rule the acceptance act occurred; only the line was never updated. Anyone judging citability from the Status field got the wrong answer, and no gate reds on it. Each line now takes the form the positive controls 0130 :3 / 0131 :3 already use — `Accepted (date) — accepted by the merge that landed it on `main` ([#PR](url), commit `sha`), which is (itself) the acceptance act for a governed surface (Prime Directive #14).` — with that record's own landing facts, keeping each file's local form (0132 wraps under a list dash, 0133 is one unwrapped list line). 0132's trailing `Nothing below is settled until this record merges` sentence is dropped, which is what 0130 and 0131 did with theirs; 0133's trailing sentence says something else entirely (this file records no new decision) and is kept byte-for-byte. Nothing else moves: no decision text, no heading, no other line, and ADR-0134 is untouched — its `Proposed` mirrors cloud ADR-0071's own state and is self-explanatory. Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu Co-authored-by: Claude <[email protected]>
Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu Co-authored-by: Claude <[email protected]>
维护者速读(终稿)skills 席 改了什么 — 两份已落在 为什么改 — 记录按它自己的规则读是「已接受」(合并即接受行为,而且确实发生了),Status 字段却说「未接受」。引用这两份当既定法的地方有 110 处、51 个文件( 风险与代价(含回滚) — 治理记录的状态字段,四行文字,不动任何决定文本;门禁 18 族全绿,ADR 链接/锚点检查过。回滚 = revert 一个提交。顺带一个给你看的(未改):ADR-0133 :85–:97 还留着一段合并前的「A note for the hand-merge … a merge-time call」框架,是否要折进 0132 当年就没裁;想收就是同文件一行的后续。 席位意见 — 荐合。把两份已落地的法的状态行改成它们自己规则下的真值,是最小改动。 你要做的(一个动作) — Approve 本 PR(或直接人工合并);席位随后按裁定 C 落地。 Generated by Claude Code |
Fixes #18532
Clause-②: no
The defect
ADR-0132 and ADR-0133 both landed on
mainon 2026-09-07, and both still carried a**Status**line readingProposed (2026-09-06) — awaiting the maintainer's hand-merge, which is (itself) the acceptance act for a governed surface (Prime Directive #14). Read by the record's own rule, the acceptance act it names had occurred; only the line was never updated — and the Status field is the one machine-readable statement of a governance record's force, so anyone judging "can I cite this as settled law?" from it got the wrong answer while the body below it told them nothing here is settled. The failure direction is silent: both files are onmain, every gate is green, and nothing reds. The positive controls are in the same convention and one number apart — ADR-0130 and ADR-0131 each moved their line toAcceptedon landing and pointed back at the PR and commit that landed them. This PR does the same for 0132 and 0133, with each record's own landing facts, and changes nothing else.The four Status lines, before and after
Measured on this branch's base,
origin/mainatf8eaf6704(the card's own readings were taken earlier, on1e496f979). The two controls are quoted to show the target form; ⛔ neither is touched by this PR.ADR-0130 :3 — positive control, unchanged
ADR-0131 :3 — positive control, unchanged
ADR-0132 :3 — BEFORE (three physical lines, wrapped under a list dash)
ADR-0132 :3 — AFTER
ADR-0133 :3 — BEFORE (one unwrapped physical line)
ADR-0133 :3 — AFTER
Three shape decisions, each read off the controls rather than invented:
which is itself the acceptance act; 0133 keepswhich is the acceptance act. That word differs between the two files today, and the controls do not settle it — 0130 and 0131 both sayitself. Each file keeps the wording it already had.Landing facts, and how each was verified
c677cda816f70c3e46fa1e3ad451a6d43f50dd0713c08356abc61f13acd5db0932f99d482c134588Verification, per record, all four legs:
git log -1 --format='%P'returns exactly one parent for each (acabd24879…for 0132,8976ea1120…for 0133).…(ADR-0132) (#16215)and…mirroring cloud ADR-0081 D1/D3/D4 with Provenance (#16267).git show --stat SHA -- docs/adr/0132-…md→1 file changed, 225 insertions(+); the same for 0133 →273 insertions(+). Both are file creations, so each sha is the landing of its own record and not a later edit.main—git merge-base --is-ancestor SHA origin/main, exit 0 for both.5de93728a, 2026-09-09T21:18Z)--is-ancestoranswered exit 1 — "not an ancestor" for both shas, which are dated 2026-09-07 and therefore outside the window: a confident false negative, because the missing objects withhold the ancestry path without fabricating one. Aftergit fetch --shallow-since=2026-08-25 origin main(694 → 2867 commits) both test legs answer exit 0, and two control commits at least as deep as the tested pair —682d03ba7(ADR-0130's own landing, 2026-09-01) and0ed271574(ADR-0131's, 2026-09-04) — also answer exit 0, so the negative is retired rather than merely re-rolled. All four exit codes are recorded.The
merged_at/merged_byvalues come from one REST read each of/repos/objectstack-ai/objectstack/pulls/16215and/pulls/16267; both reportmerged: true,base.ref: main, and amerge_commit_shabyte-equal to the sha in the table. This also answers the card's explicitly unmeasured worry about ADR-0133 — whether its landing constituted the hand-merge its own line named. It did:merged_byis os-zhuang, the authorized approver. So both records are "the text went stale", ⛔ not "an unaccepted governance record is being cited as law", and one line each is the whole repair.The date in
Accepted (…)is the landing date, as 0130 and 0131 do — 2026-09-07 for both, which is the date on both the squash commit and the merge event.Consumers — a reading, no edit
git grep -n 'ADR-0132\|ADR-0133\|0132-multi-organization\|0133-org-management'ata937609f6c: 110 hits across 51 files. ⛔ None is edited by this PR. By area:packages/plugins/**(organizations, plugin-auth, plugin-dev, plugin-security)packages/qa/dogfood/**packages/cli/**packages/verify/**packages/spec/**docs/adr/**(0105, 0132, 0133 themselves)skills/objectstack-data/**packages/services/service-cluster/**.changeset/**content/docs,docs/qa,packages/types,scripts/The card names the census on #17379 as one reader built on ADR-0132; the grep shows the reliance is much wider than one card —
packages/plugins/organizationsalone cites it in its plugin, its README and nine tests, including pin tests that name the record as the authority for the wall they hold.Verification
Derived — ⛔ no hand-fed path list — with
node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackfrom the worktree; the tool took the change set itself (three-dot vs the merge base) and printed the two ADR paths. 18 families derived, 18 run, all exit 0, at heada937609f6c:Reconciled:
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --ran RANFILE→ exit 0,18 derived famil(ies) accounted for — 18 run, 0 NOT-MEASURED (a DERIVED zero — all 18 recorded an exit code and none of them is 3).Beyond the derived set:
Exit 3 on the governed predicate is the verdict, ⛔ not a failure:
GOVERNED — a human merge is the review record for this PR (#9495 regime),docs/adr/** ×2. This PR is draft and stays draft; ⛔ no seat flips it ready, enqueues it or arms auto-merge.Exit codes were captured with redirect-then-
$?, ⛔ never across a pipe.pnpm --filter @objectstack/lint run check:doc-formula-expressionsexited 3 —PREREQUISITE NOT MET — the workspace package @objectstack/formula is not built, the script's own wording beingNothing was measured: this gate exited before running a single check. That is NOT MEASURED, neither green nor red. Afterpnpm exec turbo run build --filter=@objectstack/formula --filter=@objectstack/lint(throughscripts/pm/os-verify-lock.sh,VERDICT command-exit 0) it exits 0. Only the exit-0 run is reported above.silentverdict is a fact about a tracked list, ⛔ not a clearance), 11 families whose declared population is too wide to place, 2 families whose argv takes a value only CI supplies, 1 CI job scheduled by these paths whose 5 steps have no local invocation, and 14 families that apply only once a changeset exists — ⛔ not applicable here, see below. Those are CI's to answer on this PR.Tree state.
origin/mainmoved three commits (72dd95fa5a) while this ran, and the derivation flagged the tree stale for one file it reads (scripts/pm/post-stamped.mjs).origin/mainwas merged in (5 files, all disjoint from this diff, noos-regendeferral),@objectstack/formulaand@objectstack/lintwere force-rebuilt because the merge movedpackages/formula/src/validate.ts, and the whole sweep above was re-derived and re-run at the merged heada937609f6c. The re-derivation produced a byte-identical 18-command list and no staleness warning. Every number quoted here is from that head.Changeset
skip-changeset.docs/adr/**is on the no-publish fast track: no package'sfiles[]ships an ADR, and the diff is four lines of prose in two governance records.Clause-②: no— ⛔ nothing an author can write moves.Diff
Two files, one logical Status line each. 0132 counts as three physical lines because its line is a wrapped bullet, before and after.
Acceptance notes
⛔ None of the following is filed as a card; each is recorded here for the reviewing seat.
⚠️ **A note for the hand-merge, stated rather than decided.**and ends**If the maintainer prefers one combined record, that is still a merge-time call** — the two files are disjoint, so folding them is a move, not a rewrite.It addresses a reader who has not merged the file yet. Quoted here because the dispatch required any such sentence be quoted before touching it: ⛔ it is not touched, because it asserts nothing about this record's acceptance state — it offers a structural option about folding 0133 into 0132 — and scope excludes every other line in both files. The same block already readsThat obstacle is gone — the record has landed, about ADR-0132.acceptance actphrase occurs in the bodies of 0132 (twice) and 0133 (once), to be left untouched. Measured:grep -cgives 1 in each file, and in both cases that single occurrence is the Status line this PR edits — there is no body occurrence in either file to leave alone. The 2× / 1× counts belong to 0130 / 0131, which is what the card itself says. (b) The dispatch described 0133's Status line as carrying theNothing … is settled until this record mergessentence. It does not; its trailing ⛔ sentence is the unrelatedNothing in this file is a new decisionone, which is preserved. The card's own table quoted 0133 correctly.git rev-parse --shortemitted at their time. On this tree, after deepening, the default abbreviation is 10 — and 10 is also the spelling the card body and the claim comment both recorded (c677cda816,13c08356ab). This PR uses 10 so that the file, the card and the claim agree; the full 40-hex shas are in the landing table above. The sentence form is the controls' form exactly.Proposedrecords are untouched, per the card. 0134'sProposedmirrors cloud ADR-0071's own state and is self-explanatory; the other 17 were never measured by the card and a batch edit would treat an unmeasured population as a measured one.维护者速读(草稿)
改了什么 —— 两份治理记录(ADR-0132、ADR-0133)的
**Status**行,各改一行:从「Proposed —— 等待维护者手工合并,而那次合并本身就是接受行为」改成「Accepted (2026-09-07) —— 由把它落到main上的那次合并接受」,并各自回指自己的落地 PR 与提交(0132 → #16215 /c677cda816;0133 → #16267 /13c08356ab)。两份文件的其余内容、另外 17 份Proposed的 ADR、以及看着同形但必须排除的 0134,全部未动。整个 diff 是 2 个文件、4 行增、4 行删。为什么改 —— 这两份 ADR 早在 2026-09-07 就已经合并进⚠️ 这个失效是沉默的:两份都在
main,而且都是由授权批准人 os-zhuang 合的 —— 也就是说,它们自己那行字所说的「接受行为」确实已经发生了,只是没有人回去改那一行。ADR 的 Status 字段是这份记录唯一一处机器可读的效力声明:今天任何人(或任何工具)按它判断「这条能不能当既定法引用」,得到的都是错的答案,而正文还在要求读者「在这份记录合并之前,下面的一切都未定」。实测有 51 个文件、110 处引用这两份 ADR,其中packages/plugins/organizations的插件、README 和九个测试都把它当权威引用。main上,CI 全绿,没有任何门禁会因此变红 —— 所以它只能靠人读出来。同一套约定的 ADR-0130 / 0131 落地后都改成了Accepted并回指落地 PR,本 PR 照抄它们的拼法,⛔ 没有发明第三种。风险与代价(含回滚) —— 风险极低:改的是四行散文,不改任何决策文本、任何标题、任何代码,不发布任何 npm 包内容(故⚠️ 唯一需要您知道的判断:这两份记录被判定为「文字过时」,而不是「未被接受却已被当法引用」 —— 依据是两份的合并人都是 os-zhuang(授权批准人),卡片里原本存疑的正是 ADR-0133 这一条,现已查实。若您认为 ADR-0133 那次合并不构成它所说的接受行为,那么正确的修法与本 PR 相反(要补一次接受行为,而不是改一行字),此时请直接关掉本 PR —— 回滚成本就是关掉它,没有任何其他产物需要撤。
skip-changeset)。本地推导出的 18 个门禁族全部 exit 0,仓库级pnpm lint也 exit 0。席位意见 ——
你要做的 —— ① 确认上面那条判断:ADR-0133 由 os-zhuang 合并,是否算作它那行字所说的「维护者手工合并 = 接受行为」。② 若认可,本 PR 是受管面(
docs/adr/**),按 Prime Directive #14 需要您本人的手工合并或一次授权批准 —— ⛔ 本 PR 恒为 draft,任何 AI 席位都不会把它翻成 ready、不会入队、不会开 auto-merge。③ 若您希望连带把另外 17 份Proposed的 ADR 一起盘一遍,那是另一张卡 —— 本卡刻意没量它们。Generated by Claude Code