docs(adr): ADR-0090 D5 offending bits are platform system permissions, not any systemPermissions - #17814
Draft
os-bill wants to merge 1 commit into
Draft
docs(adr): ADR-0090 D5 offending bits are platform system permissions, not any systemPermissions#17814os-bill wants to merge 1 commit into
os-bill wants to merge 1 commit into
Conversation
…, not any systemPermissions D5's last bullet made any non-empty `systemPermissions` an offending bit for an `everyone` anchor binding, and the shared predicate implemented it literally. That list conflates two unlike tokens: the platform's own powers, and a capability a package declared for itself under ADR-0066 D1. The bullet is narrowed to a `systemPermissions` entry naming a PLATFORM system permission, with a dated revision note recording the two token kinds, the three fail-closed boundaries (the absolute platform floor, provenance rather than spelling, and omission refusing), that the D9 `guest` tier is untouched, and that the consuming callers keep the pre-revision behaviour until they supply the declared list. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01MkQhmuuJAVDjmeWNixwDDH
This was referenced Sep 12, 2026
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 #17189 — the protocol half of phase ①. ⛔ This PR does not discharge the card, and ⛔ carries no closing keyword: #17189 still owes step ②.
Sibling: #17811 carries the
packages/specpredicate, its test, the changeset and the two regenerated surface snapshots. The two were one PR until the seat review of heada21ad008; they are split here on the ruling's own instruction.Why this is its own PR
The ruling (#17189 comment
5615806616, director seat, batch #110) says it twice, verbatim:The triage seat had already ruled the same shape: 「那部分必须是独立的受管 PR,⛔ 不得与代码同 diff」.
Measured consequence, not style.
scripts/pm/check-governed-merges.mjs --teston this PR's one-file list exits 3 = GOVERNED; on the sibling's five-file list it exits 0 = NOT governed. Bundled, one governed path made the predicate change human-merge-only too. Split, this half waits for its human and the code half takes ordinary landing.Why the revision is required
Both halves are phase ①, per the ordering note (#17189 comment
5617614086) carrying the maintainer verbatim:D5's last bullet said any
systemPermissionswas an offending bit, anddescribeHighPrivilegeBitsimplemented that literally — so the protocol, not the implementation, was the half that was wrong. A predicate change without this revision would leave the ADR describing a rule the code no longer applies.What changed
D5's last bullet now reads "a
systemPermissionsentry naming a platform system permission", and names an app-declared capability token — one a package declared for itself under ADR-0066 D1, enteringsys_capabilitywithmanaged_by: 'package'+package_idprovenance — as not an offending bit.A dated revision note records:
manage_userscannot be laundered by declaring it); the discriminator is provenance, never spelling (⛔ the dotted-name rule was considered and rejected:setup.accessis a dotted platform capability today); omission refuses (a caller that cannot enumerate the declarations gets the pre-revision verdict);guesttier is untouched — D5 speaks for authenticated members;The revision text is byte-identical to what stood on
a21ad008before the split — verified by diffing this branch's file against that branch's. Removing the code hunks made no sentence of it false: nothing in the note claims the predicate ships in this PR.Clause ②
Recorded, not re-declared here: the card's declaration is
Clause-②: yes(放宽接受集)per the ruling's 执行 line, and theneeds:contract-reviewcarrier is already hung by the seat on card #17189 and on the code PR #17811. This half is prose only — it puts no key on any published payload and moves no accept set by itself. Whether the carrier is also owed on this PR is the seat's call; ⛔ this round writes no labels.Verification
a21ad008and is ⛔ not re-litigated here.check-governed-merges.mjs --test docs/adr/0090-permission-model-v2-concept-convergence.md→ exit 3 (GOVERNED). Control, the sibling's five-file list → exit 0 (NOT governed), so the 3 is a verdict about this file rather than an instrument that only ever says 3.check-adr-links,check-adr-symbol-anchors,check:adr-anchors,check-adr-0087-registration --base origin/main,check:nul-bytes,check:pm-governed-prose,check:doc-authoring— exit codes captured before any pipe, reported in the round's report.docs/adr/**is in no package'sfiles[], and a phrase unique to this revision note occurs in 0 built files underpackages/spec/dist— the negative control measured in the sibling PR's changeset decision.docs/adr/**. Draft only, and it stays draft: ⛔ not flipped ready, ⛔ not enqueued, ⛔ no auto-merge, ⛔ no approving review. A human merge is the review record.Generated by Claude Code