Repository navigation
fix(dogfood): the authz conformance matrix rows state each decision in words instead of a tracker number (stage 5b) - #21265
Merged
objectstack-fleet[bot] merged 3 commits intoOct 2, 2026
Conversation
…rds instead of a tracker number (stage 5b) The matrix's summary, enforcement and note strings sent the reader to a tracker number for the reason behind a row. In form D, as stages 1 to 5a applied it, the number goes: where the sentence already said what was decided, only the citation goes; where it leaned on the number, it now says the decision in words. 76 ledgered occurrences of 46 cards at 43 string sites. Text only: no row id, state, covers key, proof file or enforcement site moves, and code comments are untouched. Claude-Session: https://claude.ai/code/session_01VvcEokUG1tvVxkceYfR5XB Co-authored-by: Claude <noreply@anthropic.com>
…ter stage 5b The authz conformance matrix row leaves the ledger: 76 occurrences of 46 cards. No other row moves. The ledger reads 283 occurrences, 205 (file, id) pairs, 86 files. Claude-Session: https://claude.ai/code/session_01VvcEokUG1tvVxkceYfR5XB Co-authored-by: Claude <noreply@anthropic.com>
…age5b-authz-matrix-strings
Contributor
📓 Docs Drift CheckNothing in this diff resolved to a documentable surface (no symbol, route or SDK anchor derived from 0 changed package(s)), so this run has no opinion about the docs. What this run could not see
Coarse fallback — 0 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
objectstack-fleet
Bot
deleted the
claude/issue-20752-stage5b-authz-matrix-strings
branch
October 2, 2026 00:42
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.
Fixes #20752
Clause-②: no
Stage 5b, the last stage of the
domain:clilane under the maintainer's A / A ruling (5902360492): the authz conformance matrix. Stages 1 to 5a (PR #21172, PR #21188, PR #21219, PR #21231, PR #21250) emptied every other row of this lane; this PR empties the last one, so the lane's share of the ledger burn-down is zero once it lands. Text only: no row id,state,coverskey,prooffile or enforcement site moves, and the file's code comments are untouched.What this does
The
summary,enforcementandnotestrings ofpackages/qa/dogfood/test/authz-conformance.matrix.tssent the reader to a tracker number for the reason behind a row. In form D, as the earlier stages applied it, the number goes. Where the sentence already said what was decided, only the citation goes. Where it leaned on the number, it now says the decision in words.All 76 ledgered occurrences of 46 cards, at 43 string sites (claim
5942403129, ledger read ata23be7498e): 16summary, 10enforcement, 17notestrings. 22 sites now say something in words; 21 already stated the decision and only lose the citation.Every cited card was read first. Six answer 404 and were read through the commit that decided them: 10243 (
266436a7f), 12176 (7986d973f), 11757 (4d25d22d4), 8710 (04d03c3a0), 8711 (2ce1eb41b) and 8811 (d6e793507). The 10145 and 10243 phrases on the automation row reuse stage 3'sroute-ledger.tswording for the same decisions, and the 5519 floor is named the way stage 3 named it (the domain-wide anonymous floor, refused before dispatch).Two notes cite
describetitles in other packages that carry a bracketed tag. Those titles are quoted without the tag, so each quote stays a literal substring of the real title and is still findable by search.The 43 sites (line numbers are the same at base and head)
:161rls-by-id-writesummary:162rls-by-id-writeenforcement:164rls-by-id-writenote:174controlled-by-parentnoteenforcedon its OWN evidence ... when the select-derived write-scope derivation its master depends on is ablated.:177multi-tenant-write-postimagesummary:179multi-tenant-write-postimagenote:181multi-tenant-exemption-postureenforcement:182multi-tenant-exemption-posturenote:195org-write-validationnote:213anonymous-deny-metasummary:228anonymous-deny-metanote:236anonymous-deny-actionssummary/dataand/metaare):244anonymous-deny-actionsnotePOST /actions/showcase_task/showcase_mark_done/:idwas measured answering 200 with the update applied.:245anonymous-deny-automationsummary/dataand/metaare):246anonymous-deny-automationenforcement, the definition writes on the metadata plane, plus enablementPOST /:name/togglesince the 2026-08-23 ruling that enablement is an authoring write, ... the run-state reads (thesys_automation_runread grant) andresume` (keyed on the node the run is suspended on, fail-closed for a node that declares no resumeAuthority) carry their own:253anonymous-deny-automationnote:263anonymous-deny-packagessummary:300realtime-delivery-authzsummary:302realtime-delivery-authznote:310mcp-http-identityenforcement:320mcp-http-identitynote:332readonly-static-writesummary:333readonly-static-writeenforcement:335readonly-static-writenote:340declarative-rbac-seedingsummary:355ownership-anchor-guardsummary:358bulk-write-owner-scopingsummary:361public-form-managed-anchorssummary:362public-form-managed-anchorsenforcement:378hierarchy-wideningenforcement:381rls-compiler-fail-closedenforcement:385secure-by-default-postureenforcement:387flow-run-assummary:390flow-run-asnote:420permission-set-activesummary:422permission-set-activenoteactiveflag on the grant catalogues (ADR-0049)":423position-activesummary:443grant-validity-windowenforcement:445grant-validity-windownotecovers... Per the 2026-08-15 maintainer ruling ... by the 2026-08-15 ruling that access-conferring paths filter and addressing paths do not, because approval ROUTING ...sys_member... last-admin-guard.ts's ... the role projection as window-filtered now; ... is now cited: ... the mutual-attribution contract (a cited proof file names the rows it proves) is satisfied.:452agent-visibilitysummary:453agent-visibilitynotevisibilitydeleted) ... at the chat route;:462requireAuth-removednoterequireAuth: falseopt-out is RETIRED ... Theshowcase-anonymous-deny.dogfood.test.tsCITATION WAS DROPPED:466allow-transfer-restore-purgenoteThe ledger
scripts/doc-authoring-prose-id.baseline.json, recomputed withnode scripts/check-doc-authoring.mjs --census-ledger(refuses any growth):434c6c7caborigin/main(8dea55d314): byte-identical.pnpm check:doc-authoring: exit 0 before and after. Its cross-package line reads 300 pinned sites across 87 files at base and 257 across 86 at head, "no growth, no burn-down unrecorded".Text only
A scratch TypeScript-AST comparison of the file at base
434c6c7caband head: 1695 skeleton nodes on both sides, identical; 280 string literals on both sides, 43 values changed, owned bysummary16,enforcement10,note17 and nothing else; 255 comment trivia blocks on both sides, byte-identical. Its three controls each behave: a renamed property key reads "skeleton DIFFERS", a changedstatevalue is reported as owned bystate, and an edited comment reads "not identical".Pins
None. Nothing mechanical reads these three fields: the companion test imports the rows for
id,state,proof,coversandenforcementpresence, and the census and blind-spot test read only the header docblock and thecoversarrays. A whole-repo fixed-string search for the text around each of the 76 removed ids (224 fragments,docs/qa/**included) found 12 fragments with hits, every one a code comment, a release-owned CHANGELOG entry, adescribetitle or a liveness note, none asserting this file's text. So no pin moved and no ablation is owed.Verification
pnpm turbo run build --filter='@objectstack/dogfood^...' --concurrency=2: 63/63 tasks.pnpm --filter @objectstack/dogfood exec vitest run --maxWorkers=2 test/authz-conformance.test.ts test/authz-probe-blind-spot.test.ts: 2 files, 90 tests passed. These are the only consumers of the module and of its text.pnpm --filter @objectstack/dogfood typecheckexit 0;--listFilesOnlylists the matrix file and the companion test.node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsat3005a8b6d1derives 54 commands; all 54 run, exit 0.check:dual-build-cjs-loadsfirst answered exit 3 (PREREQUISITE NOT MET: 8 unrelated packages withoutdist/); after a full workspace build (72/72) it exits 0 and that rerun is the recorded result.--ranreconciliation: 54 derived, 54 run, 0 NOT-MEASURED, 0 UNRUN.pnpm lintat3005a8b6d1: exit 0, no findings.0dbdbd759b; the merge after it brought onedocs/adrfile and no package input.Changeset
None, with
skip-changeset:@objectstack/dogfoodisprivate: true, and the ledger is a repository script file. No.changeset/*.mdis touched.Acceptance notes
describetitles the notes quote carry a bracketed tag:plugin-security/src/authz-matrix-gate.test.ts(the Layer 0 insert, update and exemption suites) andcore/src/security/resolve-authz-context.test.ts(theactive-flag suite). Test bodies are outside the gate's reading and belong to those packages, not to this lane. Noted, not filed.Generated by Claude Code