Repository navigation
docs(spec): the security-catalog migration entry and the D6 gloss stop saying a permission set holds one name per deployment - #33445
Conversation
…saying a permission set holds one name per deployment The semantic migration entry's reason now opens with its own subject (the environment catalog and a package never hold one name), the D6 basis gloss says the security catalog takes no override, and the permission sets guide lists the environment among the one-holder cases and says a grant names its set by its package and name. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01FEkQ5prrsuzKUWCmEzwMEb
📓 Docs Drift Check
What this run could not see
Coarse fallback — 172 page(s) merely mention a changed package (the pre-#9192 predicate, kept for the deliberately-wide backstop): |
|
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag Contract reviewServed-tier: Inputs read: card #33388 (body and comments 6882204943, 6884033142, 6884395326), PR #33445 (body, 4-file list, net diff against Check-runs on this head when read (2026-11-14): 24 success, 10 skipped, 31 still in progress, 0 failed. Concluded green include ① Derived judgments
② Semver level
③ Boundary flags
④ Design judgment
Findings: F1 nit. No must-fix, no should-fix. The round ends on nits. Implemented-by: VERDICT: PASS Seat note: the escalated |
|
domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag ACCEPT · PR #33445 (#33388) · head
|
Requested by Leehom · project thread
Fixes #33388
Clause-②: no
Metadata-protocol: none
维护者速读
security-catalog-environment-overlay-refused)的reason开头不再说「岗位、权限集、能力每个部署一个名字」,改为该条目真正的主题「环境目录和包从不共持一个名字」;ADR-0146 D6 分类依据的注释改为「安全目录不接受覆盖」;权限集指南的单持有者清单补上「环境」,「授予按名字指向权限集」改为「按包和名字」。packages/spec/src/migrations/entries/semantic/18.security-catalog-environment-overlay-refused.ts的reason开头两行;其次content/docs/permissions/permission-sets.mdx的两处改动。git grep -n "hold one name per deployment" -- packages/spec/src,预期零命中。What changes
packages/spec/src/migrations/entries/semantic/18.security-catalog-environment-overlay-refused.ts,reasononly. FROM "Positions, permission sets and capabilities hold one name per deployment, and a package registering a name the environment catalog already holds was already refused on a hot install." TO "The environment catalog and a package never hold one name: a package registering a name the environment catalog already holds was already refused on a hot install." The rest ofreasonand every other field (id,surface,replacement,acceptanceCriteria) are byte-identical.packages/spec/src/kernel/customization-package.ts, theadr_0146_d6_security_catalogline of theOverrideClassificationBasisdoc comment. FROM "D6: one name per deployment (permission sets, positions, capabilities)" TO "D6: the security catalog takes no override (permission sets, positions, capabilities)". Comment only.content/docs/permissions/permission-sets.mdx(review N4/N5 of docs(spec): the permission set name describe and the permission sets page say one holder per namespace #33384, added to the card by the seat):base,system,sys), the environment and the platform-requestedguest_portalkeep one holder", the same list and order as thePermissionSetSchema.namedescribe;sys_user_permission_set.permission_set)" TO "a grant names its set by its package and name (sys_user_permission_set.permission_set_packageandpermission_set)", matching "each granted by its own package and name" below it and the grant object's (package, name) key..changeset/33388-security-catalog-entry-reason.md:@objectstack/specpatch, since the entry'sreasonships in specdist(dist/migrations/index.{js,mjs}) and in the generated upgrade guide.Why
Since PR #32742 a permission-set name has one holder per namespace, so "permission sets hold one name per deployment" is false in present tense. The migration entry's subject (an environment-wide row and a package never share a name) still holds, so the reason now opens with that. ADR-0146 D6's reason a permission set takes no override is unchanged, so the gloss names it instead of the old name rule.
Tests
origin/main,git grep "one name per deployment"hitspackages/spec/srconly at the two edited lines and atpermission.zod.ts:1209(positions and capabilities, still true), and no test asserts either edited text (the test hits are refusal sentences of other types, comments and one test title; see Acceptance notes).turbo run build --filter=@objectstack/spec…, the regeneratedpackages/spec/src/migrations/registry.tsandpackages/spec/dist/migrations/index.{js,mjs}carry the new sentence and no longer carry the old one. Nothing to commit.ab082955:pnpm --filter @objectstack/spec typecheckexit 0;pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 src/migrations src/kernel/customization-package: Test Files 6 passed (6), Tests 263 passed (263) (lock VERDICT command-exit 0).Acceptance notes
Left as they are, outside this card's surface:
packages/objectql/src/registry.ts:2818and:2880(the cold-boot and hot-install refusal sentences ofSecurityCatalogNameConflictError) still say "Positions, permission sets and capabilities each hold one name per deployment: an assignment names a position or a permission set by its bare name". The refusals stay right where they fire for a permission set (an environment item, co-owners of one namespace, a platform holder), but the stated reason no longer is, since a grant carriespermission_set_package. Runtime text in@objectstack/objectql; reported to the seat.:263,:472), and test comments (showcase-security.ts:32,showcase-d7-default-profile.dogfood.test.ts:65,protocol-boot-hydration-scoped.test.ts:217) and theserved-override.test.ts:70test title: decision records and comments, not touched.packages/spec/CHANGELOG.mdentries carry the old sentence: release-owned, not touched.Verification
On
ab082955:node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstackderived 103 commands, run one by one withtimeout 900, each exit code captured before any pipe.pnpm --filter @objectstack/spec run check:skill-examplesexited 3 in the loop (PREREQUISITE NOT MET:packages/client-react/distheld no declarations). After building the client and client-react closures it exited 0 ("344 prose examples type-check across 3 surface(s)").pnpm check:dual-build-cjs-loadsexited 3 (PREREQUISITE NOT MET: it needs every package'sdist; only the spec, lint, objectql, client and client-react closures were built), so it is NOT MEASURED here and left to CI.--ranreconciliation: "103 derived famil(ies) accounted for — 102 run, 1 NOT-MEASURED (1 DERIVED from a recorded exit 3)".pnpm --filter @objectstack/spec check:generatedexited 1 only becausecheck:test-typecheck'stsc -pdied "without diagnostics" under load;check:test-typecheckalone then exited 0 (52 files / 240 errors / 131 pinned signatures held). The other 13 artifacts read up to date, so nothing checked in moves.node scripts/check-nul-bytes.mjsexit 0.Human Minimum
packages/specholds no runtime logic.pnpm lintpasses. (No formatter ran;pnpm lintis CI's run, not run locally.)main, one pull request.packages/spectouched: its generated artifacts are regenerated and committed (none checked in moves; see Verification).content/docs/references/,packages/*/CHANGELOG.mdorcontent/docs/releases/.🤖 Generated with Claude Code
https://claude.ai/code/session_01FEkQ5prrsuzKUWCmEzwMEb