Repository navigation
docs(spec): the runAs description names a system run's refused identity-assignment writes, with its ADR-0087 D3 entry - #25564
Conversation
…tity-assignment writes, with its ADR-0087 D3 entry The flow runAs describe and its source comment say that a system run's governed writes to sys_user_position, sys_user_permission_set, sys_invitation and sys_member are refused with PERMISSION_DENIED, and name the remedies. A protocol-18 semantic entry records the change of meaning. Derived reference pages regenerated. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_013yig39ZouqWBxABRfM5FN4
📓 Docs Drift CheckThis PR changes 1 package(s): 2 hand-written doc(s) NAME something this change touched and may need an implementation-accuracy re-verification:
⛔ 3 release-owned page(s) also name something this change touched. These are read-only:
What this run could not see
Coarse fallback — 144 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): Which tree this was computed onThis run read A worktree cut from an older # while this PR is open — GitHub drops the merge commit once it closes
git fetch origin 74bc6aa80f1c163ab83ef1fedc75dc67e730d643 && git checkout 74bc6aa80f1c163ab83ef1fedc75dc67e730d643
# afterwards, rebuild it from the two parents, which stay fetchable
git fetch origin 041a120b6189e9b174a3f4b8cf6202f22ace2bbd 5a9bf414cf27e307083bde55bd0f66884398d2a8 && git checkout -B drift-repro 041a120b6189e9b174a3f4b8cf6202f22ace2bbd && git merge --no-ff 5a9bf414cf27e307083bde55bd0f66884398d2a8
node scripts/docs-audit/affected-docs.mjs --json 041a120b6189e9b174a3f4b8cf6202f22ace2bbd
|
Contract reviewServed-tier: Record rendered at 2026-10-24T01:00Z against card #25554 (body and both comments), PR #25564 (body, five files, net diff against ① Derived judgmentsJ1 — the describe sentence states what #25483 enforces, no more and no less: RIGHT. Compared clause by clause against the merged code on
J2 — the ADR-0087 D3 semantic entry: RIGHT. Shape per J3 — regenerated projections: RIGHT. The two J4 — the changeset marker. The changeset is not declared breaking (no BREAKING banner, no ② Semver level
③ Boundary flagsDev deviations (three) and
Escalations, none of which blocks this head:
Check-runs on the head, read at 2026-10-24T00:58Z: 40 runs, 24 success, 6 skipped (opt-in and matrix placeholders), 10 in_progress. Success includes every gate this face owes: Implemented-by: VERDICT: PASS |
席位核对 · ACCEPT ·
|
Requested by Tesla · project thread
Closes #25554
Part of #25251
Clause-②: no (describe text and ADR registration only; no accept-set change)
Metadata-protocol: semantic (records the change of meaning #25483 landed)
This is PR2 of ruling 6354966423 (letter B) on #25251, the spec-lane half. PR1, #25483, made the data middleware refuse a
runAs: 'system'flow's governed writes to the four identity-assignment objects. The publishedFlowSchema.runAsdescription still told authors that a system flow keeps system privileges without exception. Under ADR-0087 this PR has to ship in the same release as #25483.What changed
packages/spec/src/automation/flow.zod.ts, therunAsdescribe. One new sentence: elevation does not reach identity assignment. A system run's governed writes (insert, update, delete, transfer, restore, purge) tosys_user_position,sys_user_permission_set,sys_invitationandsys_memberare refused withPERMISSION_DENIED. Declareuserfor position holdings and permission-set grants, so the ADR-0090 D12 delegated-administration gate judges the user the run acts for. Change invitations and memberships through the organization endpoints.runAs. The same rule stated exactly as feat(plugin-security)!: a flow that runs as system writes no identity assignment #25483 enforces it: refused ahead of theisSystembypass for a context carryingisSystemAND aflowRunId,403, nothing written. Reads of the four objects and writes to every other object are unchanged, and so is a platform writer whose system context carries no flow run.flow-run-as-system-identity-assignment-write-refused(entries/semantic/18.…), the entry feat(plugin-security)!: a flow that runs as system writes no identity assignment #25483's changeset left to this PR. It has no D2 conversion: changingrunAschanges what every other node of the flow may do, and an endpoint call is not a rewrite of a node.gen:docs(content/docs/references/automation/flow.mdx,content/docs/references/api/automation-api.mdx).gen:skill-refsandgen:skill-docsproduced no change.registry.ts,spec-changes.jsonand the upgrade guide are generated and git-ignored, so nothing is committed for them.25554-runas-identity-assignment-wording.md,@objectstack/specminor, with the registered ADR-0087 disposition marker.Acceptance notes
check-governed-merges --testanswers GOVERNED (Tier H) fordocs/adr/0073-automation-execution-identity.md, so per the card it goes as a separate maintainer-merged PR. The draft text is in the os-dev-report on spec: the runAs describe still says a system flow keeps system privileges, but its writes to the four identity-assignment objects are now refused (#25251 PR2) #25554.minor, notpatch. Ruling A (2026-10-21, on changeset levels: minor only when the metadata protocol changes (added / narrowed / semantic), patch otherwise; release notes grouped by what the reader must do (maintainer ruling A, 2026-10-21) #25105), ascheck-changeset-no-major.mjsenforces it, requires at least one moved package atminorforMetadata-protocol: semantic. The dispatch order saidpatch; the gate wins.service-automation/src/engine.tsstill quotes the earlier ruling text ("system flows keep system privileges") as a citation of that ruling. It is left alone.Verification
At head
5a9bf414cf:node scripts/pm/dispatch-gates.mjs --commandsderived 109 families for this diff. 108 exit 0.pnpm check:dual-build-cjs-loadsis NOT MEASURED locally (exit 3: it needs every workspace package built), and CI measures it.pnpm --filter @objectstack/spec buildgreen.vitest run src/migrations src/automation/flowin@objectstack/specpassed 25 files and 1122 tests.check:spec-changes,check:upgrade-guide,check:docs,check:skill-refs,check-adr-0087-registration --base origin/mainandcheck-changeset-no-major --base origin/mainare green.🤖 Generated with Claude Code
https://claude.ai/code/session_013yig39ZouqWBxABRfM5FN4
Generated by Claude Code