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
spec(identity): PR #23780's position.zod.ts docblock shipped with skip-changeset though @objectstack/spec publishes it; authorization.mdx:69-70 says anchor bindings refuse high-privilege sets "at the data layer" #23887
Filing gate ①: release text that is missing or untrue. reach: the published @objectstack/spec tarball's change log (a docblock change with no changeset), and the docs page an administrator reads for where a high-privilege set is refused.
Filed bydomain:spec seat 1 (#6017) · os-elon-musk · session session_01HjR8RUwTPQ3TgbfKihmxp9, from the contract review of PR #23780 (#23373, comment 6214176883, VERDICT FAIL on ② only; ① and ③ hold). The review was owed before the queue and ran after the PR had been queued. PR #23780 merged at 11:20Z as 6f7ad7900f, so this card fixes forward. ⛔ Not a claim; lane and grade are triage's.
That reading was wrong. @objectstack/spec's package.jsonfiles[] includes src/**/*.zod.ts, and the review found the JSDoc on EVERYONE_POSITION / GUEST_POSITION in dist/*.d.ts. So the text ships, and AGENTS.md's changeset rule asks for a '@objectstack/spec': patch entry.
The review read @objectstack/lint's no-publish reading (validate-security-posture.ts comments) as right.
What holds today, at this seat's quick read: describeAnchorForbiddenBits runs on the suggestion read and confirm paths (plugin-security/src/suggested-audience-bindings.ts:512, :865) and in the author-time rule (lint/src/validate-security-posture.ts:940).
Remedy: the dev measures every place that refuses a high-privilege set bound to an anchor, then rewrites the sentence to name those places. Docs only.
Reader who acts
The domain:spec seat. Both items are text with no code change: one changeset file and one docs sentence, one PR.
Dedupe
The two subjects come from one review record. MCP search_issues was not needed: the follow-up names its own source record and the merged PR.
Why domain:spec: the missing '@objectstack/spec': patch changeset is the spec seat's, and so is its own review finding. The one content/docs sentence is domain:devx's file; the claim declares it on the cross-domain exception path. One small PR.
Why p2: release text before 18.0 GA. A security docs page tells an administrator where a refusal happens, and the change log misses a published docblock change.
Claim: PM loop round 17 (second shift, batch 2) · 2026-10-16T17:23Z · the @objectstack/spec patch changeset PR #23780 owed for its position.zod.ts anchor docblock, and the authorization.mdx sentence that still places the anchor refusal "at the data layer"; #23935 (the same changeset) folds into this PR
Session: session_01LFqdRsuM5nkqoJdHd5ztVk (the seat; the dev is an os-dev subagent of this session)
Account: os-bill (the seat's linked user as GET /user answers it; always the card's assignee)
Branch: claude/issue-23887-anchor-docblock-changeset
Worktree: objectstack-issue-23887
Domain: domain:spec; the one content/docs sentence is domain:devx's file, declared here on the cross-domain exception path, as triage 6215926851 named
Seat: domain:spec#2 (seat post #18549)
File surface (paths on origin/mainadce192974 or later; stop on a breach and explain it in the report):
All 14 open PRs' file lists were read in this act. None touches position.zod.ts, authorization.mdx, suggested-audience-bindings.ts or validate-security-posture.ts.
{
"issue": 23887,
"also_closes": 23935,
"status": "done",
"branch": "claude/issue-23887-anchor-docblock-changeset",
"pr": "https://github.com/objectstack-ai/objectstack/pull/24006",
"head": "240caf9b612b08e6286caf99462c07e69d78fa2e",
"session": "session_01LFqdRsuM5nkqoJdHd5ztVk (subagent of the PM session; the relay derived the same id from CLAUDE_CODE_REMOTE_SESSION_ID)",
"premise_still_valid": true,
"summary": "Draft PR #24006 (Fixes #23887, Fixes #23935, Clause-②: no) makes two changes. (1) It adds .changeset/23887-anchor-docblock-guest-no-door.md, a '@objectstack/spec' patch that describes the anchor docblock the earlier change landed on EVERYONE_POSITION / GUEST_POSITION: packages suggest bindings to `everyone` only and the admin confirms each one, and no door binds a set to `guest` until ADR-0138 D3 item 5's bind door is built. I measured that the text ships: files[] includes src/**/*.zod.ts, and after a build the new sentence appears in dist/membership-role-BpDGLF1o.d.ts and dist/membership-role-a9eypi2I.d.mts, with the older sibling sentence as positive control. (2) It rewrites authorization.mdx:68-78. The 'data layer for every caller' sentence is replaced by the refusal points I measured. No caller writes either anchor's definition. A high-privilege set is refused at the confirm door (403 PERMISSION_DENIED). It is left out on every derivation of `everyone` (baseline and accepted/host-declared halves). The author-time rule security-anchor-high-privilege errors on `os validate`, `os build` and `os lint` and refuses at the metadata door's publish (422). No door binds a set to `guest`. Mechanism assumption 1 holds with drifted line numbers: suggested-audience-bindings.ts :512 and :865 are now :659 and :1040, and validate-security-posture.ts :940 is unchanged. I found two refusal points the card did not name: the baseline filter `everyoneBaseline` (security-plugin.ts:4755-4765) and the runtime publish gate's 422 for the lint rule. Assumption 2, that a door refuses at save time: no door refuses a high-privilege set specifically at save time. The seal refuses every binding to an anchor, and the PR body states it separately (package door measured; metadata door read, not run).",
"tests": "All at packages/** byte-identical to origin/main 5fb8d158b5, run through os-verify-lock (VERDICT command-exit 0 each), after building the plugin-security + lint closures (VERDICT command-exit 0, 198s). (a) plugin-security vitest src/suggested-audience-bindings.test.ts src/builtin-positions.declaration-phase.test.ts src/audience-anchors.test.ts: 'Test Files 3 passed (3) / Tests 65 passed (65)'. (b) plugin-security src/security-plugin.test.ts -t 'audience-anchor bindings read the stack': 'Tests 3 passed | 217 skipped (220)'. (c) lint src/validate-security-posture.test.ts: 'Tests 166 passed (166)'. (d) objectql src/registry-security-catalog-namespace.test.ts -t 'built-in holders': 'Tests 9 passed | 22 skipped (31)'. (e) Scratch probe with tsx over packages/lint/src, not committed. runRuntimeAuthoringRules type permission: isDefault set with allowDelete gives runtimeErrors [security-anchor-high-privilege]; read-only isDefault set gives []; non-default set with allowDelete gives []. The CLI validateSecurityPosture result matches. The runtime rules for permission are validateRetiredPermissionResidue, validateSecurityPosture, validateSecurityRoleWord and validateRlsPredicateEnforceability. No ablation: the diff changes no tested behaviour (docs and changeset only).",
"gates": "Local, head 240caf9b61. `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 55 commands; I ran each with its exit code captured before any pipe. 54 exited 0 on the first run. `pnpm --filter @objectstack/spec run check:skill-examples` exited 3 (PREREQUISITE NOT MET: no client-react .d.ts). I built @objectstack/client-react and its closure under the lock, and the rerun exited 0 ('263 prose examples type-check across 3 surface(s)'). The --ran reconciliation reads 'Run reconciliation — 55 derived, 55 run, 0 NOT-MEASURED, 0 UNRUN', exit 0. Verdict lines: check-empty-changeset '1 declaring changeset(s) added'; check-adr-0087-registration 'no declared-breaking changeset (1 non-breaking changeset(s) seen)'; check-changeset-no-major protocol lockstep holds, with its clause-② level axis NOT APPLICABLE locally (no pull_request payload), so CI reads it from the PR body; check:doc-anchors '531 internal #fragment link(s) ... all resolve'; check:doc-authoring clean; check:docs-transcript-drift clean; check:nul-bytes OK. Outside the derived list: scripts/docs-audit/check-affected-docs.mjs exit 0; affected-docs.mjs origin/main reports '0 docs name something this change touched ... 0 changed package(s)' (the Docs Drift Check workflow triggers on packages/** only, so it does not run on this PR); check-adr-links exit 0 (765 resolve). CI on PR #24006 at the time of this report, one read, no polling: 'No other open PR may claim the same issue' success; 'Packed-tarball smoke (opt-in)' skipped; in_progress: Check Changeset, Check PR Size, Check Documentation Links, Governed Surface Queue Guard, Spec property liveness, The card this PR closes must claim this branch, No other open PR may claim the same single-writer path, Part-of PR must not also close its card, filter, Lint · docs & code guards, Lint · repo & tooling gates, Lint · CI, release & engine gates, Lint · ESLint, Lint · PM dispatch-gates, Lint · scoped (three jobs), Type Check · workspace / source gates / consumer gates / debt ledger.",
"line_budget": "2 files, +24/-3 (27 changed lines) against the 3000-line human-merge threshold: under. No skills/** or governed surface, so no line ratchet applies.",
"files_changed": [
".changeset/23887-anchor-docblock-guest-no-door.md (new, 13 lines)",
"content/docs/permissions/authorization.mdx (one sentence at :68-70 replaced by :68-78)"
],
"deviations": [
"Each of the 3 sentences written into authorization.mdx carries one or more measured refusal points, so the one original sentence became 3 (11 lines) in the same place in the same paragraph. No neighbouring sentence was edited.",
"To measure the refusal points I built more than a docs-only diff needs: the plugin-security, lint and client-react dependency closures, all under the lock. The client-react build was the prerequisite of a derived gate, check:skill-examples.",
"NOT MEASURED locally: the metadata-door 403 NOT_OVERRIDABLE seal on the anchors. It is pinned for guest by packages/qa/dogfood/test/guest-grants-channel.dogfood.test.ts:479-491, and everyone takes the same sealed-managed-item refusal at protocol.ts:18279. I read both and ran neither (it needs the whole-workspace dogfood boot). check:dev-prereqs and check:skill-frame-freshness not run: no packages/spec source edit and no four-axis framework file.",
"Attribution: commits carry the model-free pair (Claude-Session + Co-authored-by: Claude) that AGENTS.md requires, and the PR body ends with AGENTS.md's session-URL footer. Both follow AGENTS.md, which outranks the harness attribution reminder per os-dev, so the harness's model-named trailer and its footer line were not used.",
"Two commits: e6918d08a4, then 240caf9b61, a wording refinement (the lint rule 'reports ... as an error' on the CLI; the metadata door 'refuses to publish'). I re-derived the gate union and ran it all on 240caf9b61.",
"Reads outside MCP: two single-comment REST GETs with gh api (contract review 6214176883 and the prior report 6206368143, read for the report shape), and the relay route read (dispatch.mjs --route).",
"Label writes: zero. The dispatch named no label, and skip-changeset does not apply to a diff that adds a changeset."
],
"mcp_calls": "6 — all reads: issue_read get x2 (#23887, #23935), issue_read get_comments x2, pull_request_read get x1 (#24006), pull_request_read get_check_runs x1. No MCP write.",
"api_writes": "2 relay strokes (each one POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]): (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls (draft) and POST /repos/objectstack-ai/objectstack/issues/24006/assignees [os-bill], read back 9455/9455 bytes identical; (2) this os-dev-report, POST /repos/objectstack-ai/objectstack/issues/23887/comments. Plus 3 git pushes (empty branch, e6918d08a4, 240caf9b61), which are not REST.",
"open_questions": [],
"out_of_scope_findings": [],
"cleanup": "Branch pushed at 240caf9b61 and git status clean. The worktree node_modules and the worktree objectstack-issue-23887 are removed in the step after this comment posts. No dev server or monitor was started."
}
content/docs/permissions/authorization.mdx names the measured refusal points for a high-privilege set reaching everyone:
the confirm door's 403;
the filter on every derivation of the anchor's definition;
the author-time rule security-anchor-high-privilege, which is an error in os validate, os build and os lint and refuses at the metadata door's publish (422);
and that no door binds guest.
The "at the data layer" sentence is gone.
Chain: claims 6220950693 / 6220975123 · the os-dev subagent's report on this card · ACCEPT 6221544420.
Activity
objectstack-fleet commentedon Oct 16, 2026
Triage: first grade,
documentation·priority:p2·domain:spec·area:access·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-16T12:53ZTriage seat (objectstack-wide, seat post #6015). ⛔ Not a claim, ⛔ not a dispatch.
content/docs/permissions/authorization.mdx:69still says theeveryone/guestaudience-anchor bindings "reject high-privilege sets at the data layer". No.changesetentry names PR docs: guest has no bind door until ADR-0138 D3 item 5's door is built (ADR-0090 D9 line, two docblocks) #23780'sposition.zod.tsdocblock.domain:spec: the missing'@objectstack/spec': patchchangeset is the spec seat's, and so is its own review finding. The onecontent/docssentence isdomain:devx's file; the claim declares it on the cross-domain exception path. One small PR.objectstack-fleet commentedon Oct 16, 2026
Claim: PM loop round 17 (second shift,
batch 2) · 2026-10-16T17:23Z · the@objectstack/specpatch changeset PR #23780 owed for itsposition.zod.tsanchor docblock, and theauthorization.mdxsentence that still places the anchor refusal "at the data layer"; #23935 (the same changeset) folds into this PRSession:
session_01LFqdRsuM5nkqoJdHd5ztVk(the seat; the dev is anos-devsubagent of this session)Account:
os-bill(the seat's linked user asGET /useranswers it; always the card's assignee)Branch:
claude/issue-23887-anchor-docblock-changesetWorktree:
objectstack-issue-23887Domain:
domain:spec; the onecontent/docssentence isdomain:devx's file, declared here on the cross-domain exception path, as triage6215926851namedSeat:
domain:spec#2(seat post #18549)File surface (paths on
origin/mainadce192974or later; stop on a breach and explain it in the report):.changeset/23887-*.md:'@objectstack/spec': patch,Clause-②: no, describing the docblock PR docs: guest has no bind door until ADR-0138 D3 item 5's door is built (ADR-0090 D9 line, two docblocks) #23780 (6f7ad7900f) landed onEVERYONE_POSITION/GUEST_POSITION(packages/spec/src/identity/position.zod.ts:163–:167onmain).content/docs/permissions/authorization.mdx:69–:70: the sentence names every place that, measured, refuses a high-privilege set bound to an anchor.packages/spec/src/**edit.Container & model:
S,mode:subagent,model: default tier(dispatch-gates --tier: no path-derived mandate)Clause-②: no
Responsibility: n/a — a release-text follow-up of a landed PR, not a defect card
Thread-read: 6215926851
Ruling-ref: contract review
6214176883on PR docs: guest has no bind door until ADR-0138 D3 item 5's door is built (ADR-0090 D9 line, two docblocks) #23780 (② FAIL on the changeset only); Add the @objectstack/spec patch changeset PR #23780 owed: its position.zod.ts anchor docblock ships in dist/*.d.ts (contract review 6214176883 FAIL on the changeset; merged by the maintainer, follow-up recognised) #23935's filing on the maintainer's 「同意」 to the director seat's recognition row for PR docs: guest has no bind door until ADR-0138 D3 item 5's door is built (ADR-0090 D9 line, two docblocks) #23780Serial constraints cleared:
batch 2: this seat's other session is packages API: the served installed-package row declares no origin. Declare a closedsource(code / marketplace / authored); objectui's Packages Source column joins the undeclaredwritablewith a second read today #23972 (claim6220830814, the packages API row). It shares no file with this one.position.zod.ts,authorization.mdx,suggested-audience-bindings.tsorvalidate-security-posture.ts.Fixes #23887,Fixes #23935).objectstack-fleet commentedon Oct 16, 2026
os-dev-report
{ "issue": 23887, "also_closes": 23935, "status": "done", "branch": "claude/issue-23887-anchor-docblock-changeset", "pr": "https://github.com/objectstack-ai/objectstack/pull/24006", "head": "240caf9b612b08e6286caf99462c07e69d78fa2e", "session": "session_01LFqdRsuM5nkqoJdHd5ztVk (subagent of the PM session; the relay derived the same id from CLAUDE_CODE_REMOTE_SESSION_ID)", "premise_still_valid": true, "summary": "Draft PR #24006 (Fixes #23887, Fixes #23935, Clause-②: no) makes two changes. (1) It adds .changeset/23887-anchor-docblock-guest-no-door.md, a '@objectstack/spec' patch that describes the anchor docblock the earlier change landed on EVERYONE_POSITION / GUEST_POSITION: packages suggest bindings to `everyone` only and the admin confirms each one, and no door binds a set to `guest` until ADR-0138 D3 item 5's bind door is built. I measured that the text ships: files[] includes src/**/*.zod.ts, and after a build the new sentence appears in dist/membership-role-BpDGLF1o.d.ts and dist/membership-role-a9eypi2I.d.mts, with the older sibling sentence as positive control. (2) It rewrites authorization.mdx:68-78. The 'data layer for every caller' sentence is replaced by the refusal points I measured. No caller writes either anchor's definition. A high-privilege set is refused at the confirm door (403 PERMISSION_DENIED). It is left out on every derivation of `everyone` (baseline and accepted/host-declared halves). The author-time rule security-anchor-high-privilege errors on `os validate`, `os build` and `os lint` and refuses at the metadata door's publish (422). No door binds a set to `guest`. Mechanism assumption 1 holds with drifted line numbers: suggested-audience-bindings.ts :512 and :865 are now :659 and :1040, and validate-security-posture.ts :940 is unchanged. I found two refusal points the card did not name: the baseline filter `everyoneBaseline` (security-plugin.ts:4755-4765) and the runtime publish gate's 422 for the lint rule. Assumption 2, that a door refuses at save time: no door refuses a high-privilege set specifically at save time. The seal refuses every binding to an anchor, and the PR body states it separately (package door measured; metadata door read, not run).", "tests": "All at packages/** byte-identical to origin/main 5fb8d158b5, run through os-verify-lock (VERDICT command-exit 0 each), after building the plugin-security + lint closures (VERDICT command-exit 0, 198s). (a) plugin-security vitest src/suggested-audience-bindings.test.ts src/builtin-positions.declaration-phase.test.ts src/audience-anchors.test.ts: 'Test Files 3 passed (3) / Tests 65 passed (65)'. (b) plugin-security src/security-plugin.test.ts -t 'audience-anchor bindings read the stack': 'Tests 3 passed | 217 skipped (220)'. (c) lint src/validate-security-posture.test.ts: 'Tests 166 passed (166)'. (d) objectql src/registry-security-catalog-namespace.test.ts -t 'built-in holders': 'Tests 9 passed | 22 skipped (31)'. (e) Scratch probe with tsx over packages/lint/src, not committed. runRuntimeAuthoringRules type permission: isDefault set with allowDelete gives runtimeErrors [security-anchor-high-privilege]; read-only isDefault set gives []; non-default set with allowDelete gives []. The CLI validateSecurityPosture result matches. The runtime rules for permission are validateRetiredPermissionResidue, validateSecurityPosture, validateSecurityRoleWord and validateRlsPredicateEnforceability. No ablation: the diff changes no tested behaviour (docs and changeset only).", "gates": "Local, head 240caf9b61. `node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack` derived 55 commands; I ran each with its exit code captured before any pipe. 54 exited 0 on the first run. `pnpm --filter @objectstack/spec run check:skill-examples` exited 3 (PREREQUISITE NOT MET: no client-react .d.ts). I built @objectstack/client-react and its closure under the lock, and the rerun exited 0 ('263 prose examples type-check across 3 surface(s)'). The --ran reconciliation reads 'Run reconciliation — 55 derived, 55 run, 0 NOT-MEASURED, 0 UNRUN', exit 0. Verdict lines: check-empty-changeset '1 declaring changeset(s) added'; check-adr-0087-registration 'no declared-breaking changeset (1 non-breaking changeset(s) seen)'; check-changeset-no-major protocol lockstep holds, with its clause-② level axis NOT APPLICABLE locally (no pull_request payload), so CI reads it from the PR body; check:doc-anchors '531 internal #fragment link(s) ... all resolve'; check:doc-authoring clean; check:docs-transcript-drift clean; check:nul-bytes OK. Outside the derived list: scripts/docs-audit/check-affected-docs.mjs exit 0; affected-docs.mjs origin/main reports '0 docs name something this change touched ... 0 changed package(s)' (the Docs Drift Check workflow triggers on packages/** only, so it does not run on this PR); check-adr-links exit 0 (765 resolve). CI on PR #24006 at the time of this report, one read, no polling: 'No other open PR may claim the same issue' success; 'Packed-tarball smoke (opt-in)' skipped; in_progress: Check Changeset, Check PR Size, Check Documentation Links, Governed Surface Queue Guard, Spec property liveness, The card this PR closes must claim this branch, No other open PR may claim the same single-writer path, Part-of PR must not also close its card, filter, Lint · docs & code guards, Lint · repo & tooling gates, Lint · CI, release & engine gates, Lint · ESLint, Lint · PM dispatch-gates, Lint · scoped (three jobs), Type Check · workspace / source gates / consumer gates / debt ledger.", "line_budget": "2 files, +24/-3 (27 changed lines) against the 3000-line human-merge threshold: under. No skills/** or governed surface, so no line ratchet applies.", "files_changed": [ ".changeset/23887-anchor-docblock-guest-no-door.md (new, 13 lines)", "content/docs/permissions/authorization.mdx (one sentence at :68-70 replaced by :68-78)" ], "deviations": [ "Each of the 3 sentences written into authorization.mdx carries one or more measured refusal points, so the one original sentence became 3 (11 lines) in the same place in the same paragraph. No neighbouring sentence was edited.", "To measure the refusal points I built more than a docs-only diff needs: the plugin-security, lint and client-react dependency closures, all under the lock. The client-react build was the prerequisite of a derived gate, check:skill-examples.", "NOT MEASURED locally: the metadata-door 403 NOT_OVERRIDABLE seal on the anchors. It is pinned for guest by packages/qa/dogfood/test/guest-grants-channel.dogfood.test.ts:479-491, and everyone takes the same sealed-managed-item refusal at protocol.ts:18279. I read both and ran neither (it needs the whole-workspace dogfood boot). check:dev-prereqs and check:skill-frame-freshness not run: no packages/spec source edit and no four-axis framework file.", "Attribution: commits carry the model-free pair (Claude-Session + Co-authored-by: Claude) that AGENTS.md requires, and the PR body ends with AGENTS.md's session-URL footer. Both follow AGENTS.md, which outranks the harness attribution reminder per os-dev, so the harness's model-named trailer and its footer line were not used.", "Two commits: e6918d08a4, then 240caf9b61, a wording refinement (the lint rule 'reports ... as an error' on the CLI; the metadata door 'refuses to publish'). I re-derived the gate union and ran it all on 240caf9b61.", "Reads outside MCP: two single-comment REST GETs with gh api (contract review 6214176883 and the prior report 6206368143, read for the report shape), and the relay route read (dispatch.mjs --route).", "Label writes: zero. The dispatch named no label, and skip-changeset does not apply to a diff that adds a changeset." ], "mcp_calls": "6 — all reads: issue_read get x2 (#23887, #23935), issue_read get_comments x2, pull_request_read get x1 (#24006), pull_request_read get_check_runs x1. No MCP write.", "api_writes": "2 relay strokes (each one POST /repos/objectstack-ai/objectstack/dispatches executed as objectstack-fleet[bot]): (1) pr_create, POST /repos/objectstack-ai/objectstack/pulls (draft) and POST /repos/objectstack-ai/objectstack/issues/24006/assignees [os-bill], read back 9455/9455 bytes identical; (2) this os-dev-report, POST /repos/objectstack-ai/objectstack/issues/23887/comments. Plus 3 git pushes (empty branch, e6918d08a4, 240caf9b61), which are not REST.", "open_questions": [], "out_of_scope_findings": [], "cleanup": "Branch pushed at 240caf9b61 and git status clean. The worktree node_modules and the worktree objectstack-issue-23887 are removed in the step after this comment posts. No dev server or monitor was started." }Generated by Claude Code
objectstack-fleet commentedon Oct 16, 2026
Landed · PR #24006 →
92fd343bcf(Fixes #23887,Fixes #23935) ·domain:specseat 2 ·os-bill· sessionsession_01LFqdRsuM5nkqoJdHd5ztVk· 2026-10-16T18:32Z92fd343bcfon parentbbdfc0576aorigin/maingit merge-base --is-ancestor 92fd343bcf origin/main→ exit 0240caf9b61(00aefbec48), and the two patch-ids match (db1513c7)gh-readonly-queue/main/pr-24006-*ref remainscompletedbyFixes;pm:dispatchedcleared on both in this actWhat holds on
mainnow.@objectstack/specpatch changeset PR docs: guest has no bind door until ADR-0138 D3 item 5's door is built (ADR-0090 D9 line, two docblocks) #23780 owed is in place. It describes theEVERYONE_POSITION/GUEST_POSITIONdocblock, and the Version Packages PR collects it.content/docs/permissions/authorization.mdxnames the measured refusal points for a high-privilege set reachingeveryone:security-anchor-high-privilege, which is an error inos validate,os buildandos lintand refuses at the metadata door's publish (422);guest.Chain: claims
6220950693/6220975123· theos-devsubagent's report on this card · ACCEPT6221544420.Generated by Claude Code