You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
decision(plugin-auth): sys_audit_log rows the admin identity endpoints wrote before #21174's fix still carry user-field values in free metadata. Scrub them with a one-time migration, or leave the append-only ledger untouched? #21198
Director seat, summon #32, session_016tKoy8NJa35Yih1FdzrVmn. Written as objectstack-fleet[bot] through the relay. ⛔ Classes and positions only.
How it was ruled. Batch 🔗 Broken links detected in documentation #264 was presented in the live director chat. This card was item 3, director recommendation 甲, fallback 乙. The seat's own corrected recommendation (5935199195) was also 甲. The maintainer answered the batch as presented: 「同意264」.
Freshness gate: no comment after 5935199195.
The ruling
甲: the sys_audit_log rows written before #21174's fix stay as they are. ⛔ No one-time migration rewrites them. Closed not_planned: the migration is not done.
Governing text.
ADR-0052 (accepted): sys_audit_log is 「immutable, append-only, retained, security-gated」 and 「immutable, compliance-grade」 (docs/adr/0052-audit-is-not-the-activity-feed.md:36, :80). An accepted ADR binds until a superseding one says otherwise (AGENTS.md Prime Directive [WIP] Add Chinese version of the documentation #13). Option 乙 would have needed a dated note under that decision.
Claim: PM loop round 1 (ruling execution on a closed card) · 2026-10-02T02:26Z
Session: session_01DiCSbmJrkzNhuEAier4VoJ
Account: os-bill (the seat's linked user)
Branch: claude/issue-21198-changeset-note
Worktree: objectstack-issue-21198
Domain: domain:services
Seat: domain:services#2 (seat post #21118)
File surface: .changeset/21174-admin-audit-metadata.md only. One sentence is added, saying that rows written before this release keep their metadata, as ruling 甲 decides (5942375063, maintainer 「同意264」). Nothing else. Stop on breach; explain in the report.
Container & model: S, mode:subagent, model: sonnet (one sentence in a pending changeset; no code).
Clause-②: no
Thread-read: 5942375063
Serial constraints cleared, read in this act against origin/main at 748b24072: the changeset is still pending on main (not consumed by a release), and no open PR touches it.
The foreign-changeset gate (#17712), declared before the build. This PR edits a pending changeset it did not add, so Check Changeset goes red on the PR by design. Ruling 5942375063 is the maintainer's confirmation of that edit ("This record is the maintainer's word for that edit of a pending changeset"). The by-design-red exception needs three conditions, all checked at landing: (1) the gate's own source says the red is by design on a pushed branch (.github/workflows/pr-automation.yml:728: "The red is the point … 'Check Changeset' is not one of the required contexts"); (2) the check does not run on merge_group; (3) a PR comment names the gate and the cause. If the changeset has shipped by the time this lands, the ruling record itself is the note and this PR closes unmerged.
The card stays closed not_planned (the migration is not done). The PR body reads Refs #21198, never a closing keyword.
{
"issue": 21198,
"status": "done",
"branch": "claude/issue-21198-changeset-note",
"pr": "https://github.com/objectstack-ai/objectstack/pull/21300",
"session": "session_01DiCSbmJrkzNhuEAier4VoJ",
"premise_still_valid": true,
"summary": "Ruling 甲 execution note, no code. Draft PR #21300 appends ONE sentence to the last paragraph of .changeset/21174-admin-audit-metadata.md, right after 'Rows written before this release are stored data and are not rewritten.': 'They keep the values their `metadata` already holds: the ledger is append-only (ADR-0052), so they stay as written by decision (#21198).' (the PM's suggested wording, unchanged; 1 file, +1/-1; no other edit). Premise held: the changeset is still on origin/main at 4e6dc2338 (so no release consumed it), plugin-auth CHANGELOG.md has no 21174 hit, PR #21195 merged as 55012df30, and none of the 16 open PRs (Version Packages #20639 included) lists the file. `Check Changeset` is red by design (#17712): locally `node scripts/check-empty-changeset.mjs --base origin/main` exits 1 with 'This PR changes a changeset it did not add'; it is not a required context (scripts/check-required-contexts.mjs REQUIRED_CONTEXTS, line 368, pins seven: Lint & Repo Gates, TypeScript Type Check, Test Core, Dogfood Regression Gate, Build Core, Temporal Conformance (live PG + MySQL), Governed Surface Queue Guard; AGENTS.md:518-522 lists the same seven) and does not run on merge_group (.github/workflows/pr-automation.yml:41-43 triggers on pull_request only, zero merge_group occurrences in the file; the job's own text at :728-730 says 'The red is the point ... not one of the required contexts'). No label and no changeset of this PR's own was added (skip-changeset is refused for this class, ruling D on #18375). PR #21300 is draft, assignee os-bill, no labels; body stored byte-identical (4176 bytes, diff against the sent file empty), first lines 'Refs #21198' and 'Clause-②: no', no closing keyword; the single PR comment (5944572645) names the gate, the cause and the confirmation (ruling 5942375063). CI on the PR had no check-runs yet at my one read (not polled); convergence is the PM's. Two deviations: (1) the commit trailer pair is model-free (Claude-Session + Co-authored-by: Claude) per os-dev.md, not the harness reminder's model-named Co-Authored-By, because the pre-push hook refuses a model identifier; (2) the PR body footer is the dispatch order's session-URL form, not the harness reminder's alternative form. One observation worth the PM's eyes: ADR-0052's own status line (docs/adr/0052-audit-is-not-the-activity-feed.md:3) reads 'Proposed (2026-06-16) - partially implemented', while ruling 5942375063 calls it 'accepted' and leans on Prime Directive #13 for it; the sentence I added cites the ADR only for the property it declares (append-only, :36 and :80; the code agrees: packages/plugins/plugin-audit/src/objects/sys-audit-log.object.ts:22 managedBy 'append-only'), not for its status, so it is true either way, and the ruling stands on the maintainer's word 「同意264」 regardless.",
"tests": "No code, no build, no test run (os-verify-lock not used). Gates derived at the final head 98cd8b924 (git rev-parse --short HEAD) with `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` (no paths; 1 path, +1/-1, 98cd8b924 vs merge base 4e6dc2338): 19 commands, each run with output redirected before the exit code was read. exit 0: check-adr-0087-registration.mjs --base origin/main ('this PR adds no declared-breaking changeset'); check-adr-0087-registration.mjs --self-test; check-changeset-no-major.mjs --base origin/main ('This diff introduces no `major` bump.'); check-changeset-no-major.mjs --self-test; check-closing-keyword-parity.mjs and its --self-test; check-comment-mask-corpus.mjs; check-empty-changeset.mjs --self-test; scripts/pm/release-rehearsal-clone.mjs --self-test; pnpm check:changeset-gate-self-tests; check:driver-memory-census; check:gitlink-declared; check:nul-bytes ('OK (scanned 9939 text file(s) ... no raw ASCII control bytes)'); check:objectui-changeset; check:pm-changeset-deadline-census; check:published-files; check:refd-timer-probe; check:watch-hint-literal. exit 1 (the by-design red, the only red): node scripts/check-empty-changeset.mjs --base origin/main, printing 'This PR changes a changeset it did not add: .changeset/21174-admin-audit-metadata.md present on the merge base and CHANGED by this PR'. Reconciliation (`--ran`, exit codes recorded as 'cmd :: exit N'): 'Run reconciliation - 19 derived, 19 run, 0 NOT-MEASURED, 0 UNRUN.' Outside the derivation, also run: node scripts/check-changeset-fixed.mjs exit 0 (roster under .changeset, flagged by the derivation) and pnpm check:required-contexts exit 0 ('7 required context(s) pinned'). Byte hygiene: control-byte scan over the changeset, the PR body and the comment texts empty. NOT MEASURED: repo-wide lint/typecheck lanes and the 59 artifact-roster families (CI-owned; diff touches no TypeScript); CI on PR #21300 (no check-runs existed on 98cd8b924 at my single read, no polling; convergence is the PM's). Shallow checkout (git rev-parse --is-shallow-repository true): no ancestry or history claim is made; 'not consumed by a release' rests on the file's presence on origin/main plus the absent CHANGELOG hit, not on an is-ancestor read. Hygiene: no managed block appeared in AGENTS.md (git status clean at the end); worktree node_modules removed and the worktree removed without --force.",
"mcp_calls": "0 - no MCP calls of any kind; all reads were gh api GETs and local commands",
"api_writes": "4 REST writes, all through the scripts/pm fleet-write relay as objectstack-fleet[bot] (each is one repository_dispatch to objectstack-ai/objectstack, executed by the relay run, each read back): (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls (draft), request fw-20261002T023613Z-03f35e, run 36956395960, read-back 4176 bytes sent / 4176 stored identical, PR #21300; (2) label-write.mjs --issue 21300 --assign os-bill, POST /repos/objectstack-ai/objectstack/issues/21300/assignees, run 36956437364, read-back matches (assignee os-bill, 0 labels); (3) the one PR comment, POST /repos/objectstack-ai/objectstack/issues/21300/comments, run 36956486696, comment 5944572645, 1141 bytes sent / stored identical; (4) this os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/21198/comments. Not REST: two git pushes of claude/issue-21198-changeset-note (the empty-branch probe at 4e6dc2338, then 98cd8b924). No second Claim comment, no PATCH, no label write beyond the assignee, no write to the card's assignee. Reads (not writes): gh api GETs of issue 21198 and its comments, the open-PR list and per-PR file lists, PR 21195, PR 21300 and its comments, and one check-runs listing.",
"open_questions": [],
"out_of_scope_findings": [
"carrier: 承接者:无 · noted, not filed (an observation, not a class a/b/c) · ADR-0052's status line (docs/adr/0052-audit-is-not-the-activity-feed.md:3) reads 'Proposed (2026-06-16) - partially implemented' while ruling 5942375063 cites it as 'accepted' and applies Prime Directive #13 ('an accepted ADR binds') to it; the ruling's outcome does not depend on it (maintainer word 「同意264」, and the append-only property is also declared in code at sys-audit-log.object.ts:22), but a later reader following the ruling's chain will hit the mismatch. docs/adr/** is a governed surface, so no edit was made. Dedupe words: ADR-0052 status Proposed accepted audit ledger append-only"
]
}
Basis: the dev report 5944586903, the execution claim 5944467576, ruling 甲 5942375063 (maintainer 「同意264」), and the diff.
Shape: draft, base main. Line 1 is Refs #21198 (no closing keyword: the card stays closed not_planned), line 2 Clause-②: no. The footer carries the session URL.
The gate's source says the red is by design and that the check is not required (.github/workflows/pr-automation.yml:728-730). The seven required contexts are pinned in scripts/check-required-contexts.mjs (REQUIRED_CONTEXTS), and Check Changeset is not among them.
pr-automation.yml triggers on pull_request only, so it does not run on merge_group.
The PR comment 5944572645 names the gate, the cause and the confirmation.
Gates: 19 derived, 19 run. The only red is check-empty-changeset.mjs --base origin/main ("This PR changes a changeset it did not add"), the by-design one.
Noted for the director's ledger (no card): ruling 5942375063 cites ADR-0052 as "accepted" and applies Prime Directive #13 to it. The ADR's own status line (:3) reads "Proposed (2026-06-16) - partially implemented". The ruling's outcome does not depend on that status: it stands on the maintainer's 「同意264」, and the append-only property is declared in code too. A later reader following the ruling's chain will still meet the mismatch. docs/adr/** is governed, so nothing is edited here.
Landing: once every check except Check Changeset is green on this head.
Execution record: the note is this ruling record (the changeset shipped first) · domain:services seat 2 (#21118) · session_01DiCSbmJrkzNhuEAier4VoJ · 2026-10-02T02:48Z
Lesson for the seat (no card): an "edit a pending changeset" note races the six-hourly Version Packages PR. The claim's serial read ("still pending on main") was true when read, but chore: version packages #20639 was open and merged minutes later. Next time, the claim reads whether the open Version Packages PR already lists the changeset.
Noted for the director's ledger: the ruling cites ADR-0052 as "accepted"; the ADR's status line (:3) reads "Proposed (2026-06-16) - partially implemented" (see the ACCEPT 5944619258).
Activity
objectstack-fleet commentedon Oct 1, 2026
更正:本卡的推荐由乙改为甲 ·
domain:servicesseat 2 (#21118) ·session_01DiCSbmJrkzNhuEAier4VoJ· 2026-10-01T15:55Z立卡时本席漏读了一条直接适用的维护者先例。现在补上,推荐随之改变。
先例(Governing text): #20790 的 Q1 = B(
5909514730,维护者「20790 同意」):那张卡问的是同一个问题:一项敏感值在修复前已经落进审计快照,要不要改写审计表把它擦掉。维护者裁的是不改写。
和本卡的差别(如实呈现): #20790 的密钥可以轮换,旧值轮换后就作废了。本卡存量行里的值是用户字段值(标识、电话、角色标量、强制改密标志),没有"轮换"这个动作:换了号码,旧号码依然是一条真实信息。所以对本卡来说,选甲意味着已测到的泄露对存量行永久存在,而不只是"存在到轮换为止"。
修订后的推荐:甲(不改写),与先例一致。
你要做的(一个动作)不变: 回复 甲 / 乙。
Generated by Claude Code
objectstack-fleet commentedon Oct 1, 2026
Ruling: batch #264 item 3 · letter 甲 · maintainer 「同意264」 2026-10-01T23:02Z
Director seat, summon #32,
session_016tKoy8NJa35Yih1FdzrVmn. Written asobjectstack-fleet[bot]through the relay. ⛔ Classes and positions only.The ruling
甲: the
sys_audit_logrows written before #21174's fix stay as they are. ⛔ No one-time migration rewrites them. Closednot_planned: the migration is not done.Governing text.
sys_audit_logis 「immutable, append-only, retained, security-gated」 and 「immutable, compliance-grade」 (docs/adr/0052-audit-is-not-the-activity-feed.md:36,:80). An accepted ADR binds until a superseding one says otherwise (AGENTS.md Prime Directive [WIP] Add Chinese version of the documentation #13). Option 乙 would have needed a dated note under that decision.Why it holds.
四棱(本裁决新记录)
Execution
domain:servicesseat adds one sentence to it saying that rows written before this release keep their metadata (ruling 甲 here). This record is the maintainer's word for that edit of a pending changeset. If it has shipped, this record is the note.Generated by Claude Code
objectstack-fleet commentedon Oct 2, 2026
Claim: PM loop round 1 (ruling execution on a closed card) · 2026-10-02T02:26Z
Session:
session_01DiCSbmJrkzNhuEAier4VoJAccount:
os-bill(the seat's linked user)Branch:
claude/issue-21198-changeset-noteWorktree:
objectstack-issue-21198Domain:
domain:servicesSeat:
domain:services#2(seat post #21118)File surface:
.changeset/21174-admin-audit-metadata.mdonly. One sentence is added, saying that rows written before this release keep theirmetadata, as ruling 甲 decides (5942375063, maintainer 「同意264」). Nothing else. Stop on breach; explain in the report.Container & model:
S,mode:subagent,model: sonnet(one sentence in a pending changeset; no code).Clause-②: no
Thread-read: 5942375063
Serial constraints cleared, read in this act against
origin/mainat748b24072: the changeset is still pending onmain(not consumed by a release), and no open PR touches it.The foreign-changeset gate (#17712), declared before the build. This PR edits a pending changeset it did not add, so
Check Changesetgoes red on the PR by design. Ruling5942375063is the maintainer's confirmation of that edit ("This record is the maintainer's word for that edit of a pending changeset"). The by-design-red exception needs three conditions, all checked at landing: (1) the gate's own source says the red is by design on a pushed branch (.github/workflows/pr-automation.yml:728: "The red is the point … 'Check Changeset' is not one of the required contexts"); (2) the check does not run onmerge_group; (3) a PR comment names the gate and the cause. If the changeset has shipped by the time this lands, the ruling record itself is the note and this PR closes unmerged.The card stays closed
not_planned(the migration is not done). The PR body readsRefs #21198, never a closing keyword.Generated by Claude Code · https://claude.ai/code/session_01DiCSbmJrkzNhuEAier4VoJ
docs(changeset): the admin-audit changeset says rows written before t…
objectstack-fleet commentedon Oct 2, 2026
os-dev-report
{ "issue": 21198, "status": "done", "branch": "claude/issue-21198-changeset-note", "pr": "https://github.com/objectstack-ai/objectstack/pull/21300", "session": "session_01DiCSbmJrkzNhuEAier4VoJ", "premise_still_valid": true, "summary": "Ruling 甲 execution note, no code. Draft PR #21300 appends ONE sentence to the last paragraph of .changeset/21174-admin-audit-metadata.md, right after 'Rows written before this release are stored data and are not rewritten.': 'They keep the values their `metadata` already holds: the ledger is append-only (ADR-0052), so they stay as written by decision (#21198).' (the PM's suggested wording, unchanged; 1 file, +1/-1; no other edit). Premise held: the changeset is still on origin/main at 4e6dc2338 (so no release consumed it), plugin-auth CHANGELOG.md has no 21174 hit, PR #21195 merged as 55012df30, and none of the 16 open PRs (Version Packages #20639 included) lists the file. `Check Changeset` is red by design (#17712): locally `node scripts/check-empty-changeset.mjs --base origin/main` exits 1 with 'This PR changes a changeset it did not add'; it is not a required context (scripts/check-required-contexts.mjs REQUIRED_CONTEXTS, line 368, pins seven: Lint & Repo Gates, TypeScript Type Check, Test Core, Dogfood Regression Gate, Build Core, Temporal Conformance (live PG + MySQL), Governed Surface Queue Guard; AGENTS.md:518-522 lists the same seven) and does not run on merge_group (.github/workflows/pr-automation.yml:41-43 triggers on pull_request only, zero merge_group occurrences in the file; the job's own text at :728-730 says 'The red is the point ... not one of the required contexts'). No label and no changeset of this PR's own was added (skip-changeset is refused for this class, ruling D on #18375). PR #21300 is draft, assignee os-bill, no labels; body stored byte-identical (4176 bytes, diff against the sent file empty), first lines 'Refs #21198' and 'Clause-②: no', no closing keyword; the single PR comment (5944572645) names the gate, the cause and the confirmation (ruling 5942375063). CI on the PR had no check-runs yet at my one read (not polled); convergence is the PM's. Two deviations: (1) the commit trailer pair is model-free (Claude-Session + Co-authored-by: Claude) per os-dev.md, not the harness reminder's model-named Co-Authored-By, because the pre-push hook refuses a model identifier; (2) the PR body footer is the dispatch order's session-URL form, not the harness reminder's alternative form. One observation worth the PM's eyes: ADR-0052's own status line (docs/adr/0052-audit-is-not-the-activity-feed.md:3) reads 'Proposed (2026-06-16) - partially implemented', while ruling 5942375063 calls it 'accepted' and leans on Prime Directive #13 for it; the sentence I added cites the ADR only for the property it declares (append-only, :36 and :80; the code agrees: packages/plugins/plugin-audit/src/objects/sys-audit-log.object.ts:22 managedBy 'append-only'), not for its status, so it is true either way, and the ruling stands on the maintainer's word 「同意264」 regardless.", "tests": "No code, no build, no test run (os-verify-lock not used). Gates derived at the final head 98cd8b924 (git rev-parse --short HEAD) with `node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commands` (no paths; 1 path, +1/-1, 98cd8b924 vs merge base 4e6dc2338): 19 commands, each run with output redirected before the exit code was read. exit 0: check-adr-0087-registration.mjs --base origin/main ('this PR adds no declared-breaking changeset'); check-adr-0087-registration.mjs --self-test; check-changeset-no-major.mjs --base origin/main ('This diff introduces no `major` bump.'); check-changeset-no-major.mjs --self-test; check-closing-keyword-parity.mjs and its --self-test; check-comment-mask-corpus.mjs; check-empty-changeset.mjs --self-test; scripts/pm/release-rehearsal-clone.mjs --self-test; pnpm check:changeset-gate-self-tests; check:driver-memory-census; check:gitlink-declared; check:nul-bytes ('OK (scanned 9939 text file(s) ... no raw ASCII control bytes)'); check:objectui-changeset; check:pm-changeset-deadline-census; check:published-files; check:refd-timer-probe; check:watch-hint-literal. exit 1 (the by-design red, the only red): node scripts/check-empty-changeset.mjs --base origin/main, printing 'This PR changes a changeset it did not add: .changeset/21174-admin-audit-metadata.md present on the merge base and CHANGED by this PR'. Reconciliation (`--ran`, exit codes recorded as 'cmd :: exit N'): 'Run reconciliation - 19 derived, 19 run, 0 NOT-MEASURED, 0 UNRUN.' Outside the derivation, also run: node scripts/check-changeset-fixed.mjs exit 0 (roster under .changeset, flagged by the derivation) and pnpm check:required-contexts exit 0 ('7 required context(s) pinned'). Byte hygiene: control-byte scan over the changeset, the PR body and the comment texts empty. NOT MEASURED: repo-wide lint/typecheck lanes and the 59 artifact-roster families (CI-owned; diff touches no TypeScript); CI on PR #21300 (no check-runs existed on 98cd8b924 at my single read, no polling; convergence is the PM's). Shallow checkout (git rev-parse --is-shallow-repository true): no ancestry or history claim is made; 'not consumed by a release' rests on the file's presence on origin/main plus the absent CHANGELOG hit, not on an is-ancestor read. Hygiene: no managed block appeared in AGENTS.md (git status clean at the end); worktree node_modules removed and the worktree removed without --force.", "mcp_calls": "0 - no MCP calls of any kind; all reads were gh api GETs and local commands", "api_writes": "4 REST writes, all through the scripts/pm fleet-write relay as objectstack-fleet[bot] (each is one repository_dispatch to objectstack-ai/objectstack, executed by the relay run, each read back): (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls (draft), request fw-20261002T023613Z-03f35e, run 36956395960, read-back 4176 bytes sent / 4176 stored identical, PR #21300; (2) label-write.mjs --issue 21300 --assign os-bill, POST /repos/objectstack-ai/objectstack/issues/21300/assignees, run 36956437364, read-back matches (assignee os-bill, 0 labels); (3) the one PR comment, POST /repos/objectstack-ai/objectstack/issues/21300/comments, run 36956486696, comment 5944572645, 1141 bytes sent / stored identical; (4) this os-dev-report comment, POST /repos/objectstack-ai/objectstack/issues/21198/comments. Not REST: two git pushes of claude/issue-21198-changeset-note (the empty-branch probe at 4e6dc2338, then 98cd8b924). No second Claim comment, no PATCH, no label write beyond the assignee, no write to the card's assignee. Reads (not writes): gh api GETs of issue 21198 and its comments, the open-PR list and per-PR file lists, PR 21195, PR 21300 and its comments, and one check-runs listing.", "open_questions": [], "out_of_scope_findings": [ "carrier: 承接者:无 · noted, not filed (an observation, not a class a/b/c) · ADR-0052's status line (docs/adr/0052-audit-is-not-the-activity-feed.md:3) reads 'Proposed (2026-06-16) - partially implemented' while ruling 5942375063 cites it as 'accepted' and applies Prime Directive #13 ('an accepted ADR binds') to it; the ruling's outcome does not depend on it (maintainer word 「同意264」, and the append-only property is also declared in code at sys-audit-log.object.ts:22), but a later reader following the ruling's chain will hit the mismatch. docs/adr/** is a governed surface, so no edit was made. Dedupe words: ADR-0052 status Proposed accepted audit ledger append-only" ] }Generated by Claude Code
objectstack-fleet commentedon Oct 2, 2026
ACCEPT (seat review; lands under the by-design-red exception) · PR #21300 @
98cd8b924·domain:servicesseat 2 (#21118) ·session_01DiCSbmJrkzNhuEAier4VoJ· 2026-10-02T02:42ZBasis: the dev report
5944586903, the execution claim5944467576, ruling 甲5942375063(maintainer 「同意264」), and the diff.main. Line 1 isRefs #21198(no closing keyword: the card stays closednot_planned), line 2Clause-②: no. The footer carries the session URL..changeset/21174-admin-audit-metadata.mdonly, inside the claim. The premise holds: the changeset is still pending onmain, andplugin-auth's CHANGELOG has no security(plugin-auth): the compliance-ledger row an admin create-user writes carries a withheld user field's value in its decision metadata, which a ledger reader withheld that field is served #21174 entry.metadataalready holds: the ledger is append-only (ADR-0052), so they stay as written by decision (decision(plugin-auth): sys_audit_log rows the admin identity endpoints wrote before #21174's fix still carry user-field values in free metadata. Scrub them with a one-time migration, or leave the append-only ledger untouched? #21198)." It is true on both counts. ADR-0052 declares the ledger append-only (docs/adr/0052-audit-is-not-the-activity-feed.md:36,:80), and so does the code (sys-audit-log.object.ts:22,managedBy: 'append-only'). "By decision" is ruling 甲. The sentence makes no claim about who is served those rows. It follows "Rows written before this release are stored data and are not rewritten." and adds only what the ruling owed.minorchangeset and every gate stayed green #17712), all three conditions:.github/workflows/pr-automation.yml:728-730). The seven required contexts are pinned inscripts/check-required-contexts.mjs(REQUIRED_CONTEXTS), andCheck Changesetis not among them.pr-automation.ymltriggers onpull_requestonly, so it does not run onmerge_group.5944572645names the gate, the cause and the confirmation.check-empty-changeset.mjs --base origin/main("This PR changes a changeset it did not add"), the by-design one.Noted for the director's ledger (no card): ruling
5942375063cites ADR-0052 as "accepted" and applies Prime Directive #13 to it. The ADR's own status line (:3) reads "Proposed (2026-06-16) - partially implemented". The ruling's outcome does not depend on that status: it stands on the maintainer's 「同意264」, and the append-only property is declared in code too. A later reader following the ruling's chain will still meet the mismatch.docs/adr/**is governed, so nothing is edited here.Landing: once every check except
Check Changesetis green on this head.Generated by Claude Code · https://claude.ai/code/session_01DiCSbmJrkzNhuEAier4VoJ
objectstack-fleet commentedon Oct 2, 2026
Execution record: the note is this ruling record (the changeset shipped first) ·
domain:servicesseat 2 (#21118) ·session_01DiCSbmJrkzNhuEAier4VoJ· 2026-10-02T02:48Z.changeset/21174-admin-audit-metadata.mdwas consumed by the version commit617f25f8a(chore: version packages #20639) before PR docs(changeset): the admin-audit changeset notes that rows written before the release keep their metadata (#21198) #21300 could land. Its entry is inpackages/plugins/plugin-auth/CHANGELOG.md:81, and it ends "Rows written before this release are stored data and are not rewritten.", a true statement.5944662173), as ruling5942375063provides: "If it has shipped, this record is the note." The card stays closednot_planned. Release notes are release-owned; the seat does not edit them.main") was true when read, but chore: version packages #20639 was open and merged minutes later. Next time, the claim reads whether the open Version Packages PR already lists the changeset.:3) reads "Proposed (2026-06-16) - partially implemented" (see the ACCEPT5944619258).Generated by Claude Code · https://claude.ai/code/session_01DiCSbmJrkzNhuEAier4VoJ