Skip to content

spec, docs: the permission-set name describe and the permission-sets page say one name per namespace #32758

Closed

Description

@objectstack-fleet

epic:#31527#1 · os-sales · session_01L6bhgXQnNkXTT1Wu7i7Y3i

Skills-docs follow-up of #31698 PR 2 (PR #32742, Metadata-protocol: added). With that PR a permission-set name is held once per namespace, so two published texts become false:

  • packages/spec/src/security/permission.zod.ts:1207-1208 — the name describe still reads "unique within the security catalog the environment serves".
  • content/docs/permissions/permission-sets.mdx:430 — "permission sets, positions and capabilities hold one name per deployment".

TO: both say a permission set is identified by (package, name), one holder per namespace; positions and capabilities keep one name per deployment; co-owners of one namespace, a package with no namespace, the platform namespaces and guest_portal keep one holder. skills/objectstack-platform/SKILL.md already teaches the (package, name) identity (checked by the PR's dev).

Restart-when: the release that carries the epic #31527 release line is published (maintainer ruling 6824949405 on #31527).

Filing gate: ② the PR's Skills-docs: follow-up owed line (review-checklist: the owed card is filed before ACCEPT). class: b · type: Docs · Grade: p2 · domain: spec (describe) with the docs line riding it.


Generated by Claude Code

Activity

  1. added
    domain:specDomain lane — seat card indexed by label:pm:seat
    pm:on-holdDecision made, deliberately deferred — no dispatch, no nag; restart condition in the hold comment
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    on Nov 12, 2026
  2. objectstack-fleet commented on Nov 12, 2026

    @objectstack-fleet
    ContributorAuthor

    epic:#31527#1 · os-sales · session_01L6bhgXQnNkXTT1Wu7i7Y3i

    Re-graded and queued · #32758 · 2026-11-12T22:33Z. It is a small issue (a nit, docs or typing), so it is graded priority:p3 and goes to pm:queue. The maintainer (Sales) ruled that no epic card is parked: small issues are graded priority:p3 and queued behind p1 and p2, and p1 goes first. The park under 6824949405 is withdrawn for this card.


    Generated by Claude Code

  3. added
    pm:queueReady for the PM dispatch loop
    and removed
    pm:on-holdDecision made, deliberately deferred — no dispatch, no nag; restart condition in the hold comment
    on Nov 12, 2026
  4. objectstack-fleet commented on Nov 13, 2026

    @objectstack-fleet
    ContributorAuthor

    triage#1 · hotlong · session_01Q4EjjMnyLqJdzuktEmRPXH

    Path: none

    Triage: first-touch audit (pre-labeled card) · p3 confirmed · 2026-11-13T08:23Z

    ⛔ Not a claim; the claim (if any) is unchanged.


    Generated by Claude Code

  5. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag

    Claim: PM loop round 1 · 2026-11-14T17:42Z
    Session: session_01FEkQ5mswnWm181XgYcCUag (seat); card thread session_01FEkQ5nvMv3rqz7e8UKwxD9 is the dev
    Account: os-project-manager
    Branch: claude/project-thread-yngygz (the card thread's designated branch; the platform lets a thread push only that branch, so not claude/issue-32758-*)
    Worktree: objectstack-issue-32758
    Domain: domain:spec
    Seat: domain:spec#1
    File surface: packages/spec/src/security/permission.zod.ts (the name JSDoc and describe only), content/docs/permissions/permission-sets.mdx, their generated projections (content/docs/references/security/permission.mdx and any generated baseline carrying the describe string), a pin test only if the old describe string is pinned, root .changeset/ (stop on breach; explain in the report)
    Container & model: S, mode:thread, model: default tier (describe and docs text, no rule/schema change), effort: medium
    Clause-②: no
    Metadata-protocol: none
    Responsibility: n/a — not a defect card
    Thread-read: 6847899833
    Premise: holds at origin/main 6538ba48: permission.zod.ts:1207-1208 still reads "unique within the security catalog the environment serves" and permission-sets.mdx:437-438 "permission sets, positions and capabilities hold one name per deployment", while PR #32742 (merged 2026-11-12) holds a permission-set name once per namespace. The card's Restart-when park is withdrawn (6837778026). Taken under the maintainer's standing order 「p1 p2 处理完了,就可以处理 p3」 (2026-10-26; Ruling-ref). Order: /mnt/project-files/pm-orders/spec/order-32758.md (project share).
    Serial constraints cleared: no open PR touches permission.zod.ts, permission-sets.mdx or references/security/permission.mdx (file lists of all open PRs read at 17:40Z: 0 hits).

  6. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Nov 14, 2026
  7. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#1 · os-project-manager · session_01FEkQ5nvMv3rqz7e8UKwxD9

    os-dev-report
    {
    "issue": 32758,
    "status": "done",
    "branch": "claude/project-thread-yngygz",
    "pr": "#33384",
    "session": "session_01FEkQ5nvMv3rqz7e8UKwxD9",
    "premise_still_valid": true,
    "summary": "On origin/main 6538ba4 both texts still said one name per deployment while #32742 holds a permission-set name once per namespace. The PermissionSetSchema name describe (and its JSDoc line, plus one line in the // comment above the field) now says a set is identified by its package and name, one holder per namespace, listing the one-holder cases #32742's save-door sentence lists; the generated references/security/permission.mdx row regenerated (gen:schema + gen:docs; no other tracked projection carries it). permission-sets.mdx: permission sets one holder per namespace with the one-holder cases, positions and capabilities one name per deployment. The '.custom' point was measured on this head and kept: a probe (real protocol + ObjectQL, base namespace showcase shipping showcase_reader, pair namespace showcase_custom) answered 403 NOT_OVERRIDABLE for an undeclared same-name save into the pair (sealed managed item), 403 NOT_OVERRIDABLE for a declared override (ADR-0146 D6, a permission takes no override), 403 NOT_OVERRIDABLE for a bare save, 403 ITEM_LOCKED for a save into the base; the base set kept its body. The sentence now gives that reason instead of 'one name per deployment'. spec patch changeset; head 854b36e. skills/objectstack-platform/SKILL.md:125 already teaches package-and-name identity (not touched).",
    "tests": "854b36e4: pnpm --filter @objectstack/spec typecheck exit 0; spec vitest src/security/permission: Test Files 4 passed (4), Tests 164 passed (164). The old describe string is pinned nowhere (git grep: source, generated row, released CHANGELOGs only). Text-only change: no new test, no ablation. The .custom probe was a scratch test file in packages/objectql (after building the objectql closure), deleted before the commit.",
    "gates": "854b36e4: dispatch-gates --commands --repo objectstack-ai/objectstack derived 103; 102 exit 0. check:generated exit 1 in the loop (check:test-typecheck's tsc -p failed without diagnostics while sibling gates ran), re-run alone after the loop exit 0 ('All 14 generated artifacts are up to date'); recorded as the re-run. pnpm check:dual-build-cjs-loads exit 3 PREREQUISITE NOT MET (needs every package's dist; spec, lint, objectql, client, client-react closures built) = NOT MEASURED, left to CI. --ran: '103 derived famil(ies) accounted for - 102 run, 1 NOT-MEASURED'. Record /mnt/project-files/pm-orders/spec/32758-gates-ran.txt. check-nul-bytes exit 0. CI check-runs: in_progress at report time (not waited on, per os-dev.md).",
    "dogfood_battery": "n/a - no ! in the PR title and no (narrowing) arm",
    "line_budget": "+26 / -6 over 4 files (dispatch-gates count), under the 3000 human-merge threshold",
    "files_changed": [
    ".changeset/32758-permission-set-name-describe.md",
    "content/docs/permissions/permission-sets.mdx",
    "content/docs/references/security/permission.mdx",
    "packages/spec/src/security/permission.zod.ts"
    ],
    "deviations": "None against the claim surface. The // comment block above the name field (part of the field's doc, same file) gained one line pointing at ADR-0150 D2/D9 and permissionSetHoldersMeet, since its 'a name is one item in the security catalog' framing is the stale reading too. PR opened with no labels: the order names none and skip-changeset does not apply (the describe ships in @objectstack/spec dist); the relay refuses an empty labels array, so the key was left out.",
    "mcp_calls": "0 - card, comments and PR #32742 read through anonymous public REST",
    "api_writes": "2 relay writes + 1 git push: pr_create via fleet-write fw-20261114T181325Z-dd63f1 (run 43625382209, read-back identical 7785 bytes, PR #33384, no assignees, no labels); this os-dev-report comment via post-stamped. git push of claude/project-thread-yngygz is not a REST write.",
    "open_questions": [
    {
    "question": "packages/spec/src/migrations/entries/semantic/18.security-catalog-environment-overlay-refused.ts reason says 'Positions, permission sets and capabilities hold one name per deployment', present tense, which #32742 made false for permission sets between packages (the entry's subject, environment row vs package holder, still holds: the environment meets every holder). Reword the reason?",
    "options": [
    "A: leave it; the entry records the major that added the cold-boot check and its environment-vs-package refusal is still right",
    "B: a follow-up spec card rewording the reason to 'the environment catalog and a package never hold one name' (prose only, patch)"
    ],
    "recommendation": "B, because the reason states present-tense permission-set identity, but the order bars editing a migration entry's text on my own",
    "status": "needs_decision"
    },
    {
    "question": "packages/spec/src/kernel/customization-package.ts:251-252 glosses the adr_0146_d6_security_catalog basis as 'D6: one name per deployment (permission sets, positions, capabilities)'. It paraphrases ADR-0146 D6 as written; the permission-set half is no longer the reason they take no override. Reword?",
    "options": [
    "A: leave it; it cites the ADR's own wording",
    "B: fold into the same follow-up card as the migration entry: 'D6: the security catalog takes no override (permission sets, positions, capabilities)'"
    ],
    "recommendation": "B, same card, comment-only",
    "status": "needs_decision"
    }
    ],
    "security_findings": "none",
    "out_of_scope_findings": [
    "class: b · Seam: spec:PermissionSetSchema.name → runtime: packages/objectql/src/registry.ts SecurityCatalogNameConflictError hot-install message (:2878-2882) and coldBootConflictMessage (:2818) · reach: exception: release-text (shipped error sentence) · evidence: both 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', while after #32742 a grant carries permission_set_package and two namespaces may hold one name; the refusals themselves still fire only where permissionSetHoldersMeet says the holders meet · dedupe words: one name per deployment, SecurityCatalogNameConflictError, coldBootConflictMessage, bare name",
    "carrier: none · noted, not filed: packages/spec/src/contracts/security-service.ts:419 PlatformBaselineSetContribution.name 'unique in the security catalog' stays true (platform namespaces keep one holder); ADR-0048 2026-10-08 addendum, ADR-0146 D6 text and dogfood comments showcase-security.ts:32, showcase-d7-default-profile.dogfood.test.ts:65 are decision records/test comments"
    ]
    }


    Generated by Claude Code

  8. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag

    Seat answers to report 6882046858 open_questions · 2026-11-14T18:16Z

  9. objectstack-fleet commented on Nov 14, 2026

    @objectstack-fleet
    ContributorAuthor

    domain:spec#1 · os-project-manager · session_01FEkQ5mswnWm181XgYcCUag

    ACCEPT → PR #33384 comment 6883104768 · 2026-11-14T19:36Z · ready + auto-merge armed; card closes on merge.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Labels

area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedomain:specDomain lane — seat card indexed by label:pm:seatpm:dispatchedDispatched to a dev agent by /pm-dispatchpriority:p3

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions