Repository navigation
Description
Filing gate: ③ a consequence the maintainer's ruling ordered, quoted verbatim below. Carried to this lane by hand-off 6349675664 on seat post #19287 (domain:services seat 1, 2026-10-22T19:40Z): the ruling asks the claiming seat to file a skills-lane child card, and that project holds no skills lane.
Reader: domain:skills seat, next PR on skills/objectstack-data/rules/security.md (the isDefault: true bullet under the permission-set section, L30–L32 on origin/main 5874d253) plus the marketplace page that states what a published package must declare. content/docs/references/marketplace/*.mdx is AUTO-GEN from spec TSDoc (AGENTS.md Documentation Guardrails), so a change there lands in the .describe() / TSDoc source and is regenerated, ⛔ never hand-edited; the dev names the exact source sentence in the PR.
Dedupe (open AND closed), MCP semantic search 2026-10-25T09:45Z, "every published package declares one anchor-safe isDefault true permission set skills objectstack-data rules security.md marketplace requirement" → 27 hits, none asks for the requirement. Nearest: #17359 (closed — whether the published guidance must teach the isDefault → everyone binding rule; it now does, which is what L30 states today), #22658 / #22659 / #22668 (the skills package channel), #24974 / #24929 (the install line), #18202 (cross-package permission references).
The ruling
Director seat, ruling record 6341690661 on #25083 (batch #385 item 1, 2026-10-22T13:15Z). The maintainer's words recorded there, verbatim and untranslated: 「Q1 B,四题一起录入卡片,并立 hotcrm 卡声明默认权限集」 · 「其他同意」. The consequence this card carries, quoted from that record:
(ii) the marketplace rule 「every published package declares one anchor-safe
isDefault: trueset」 — a governed-text change toskills/objectstack-data/rules/security.md(today it states the semantics, not the requirement) and the marketplace docs, filed by the claiming seat to the skills lane as a child card.
The sibling consequence (i) is objectstack-ai/hotcrm#2231 (HotCRM declares one anchor-safe default set). The ruling's reason, same record: default access reaches the people an organisation invites through ONE mechanism (ADR-0090 D5, a permission set with isDefault: true bound to the everyone anchor); a package that declares no such set reaches no invited member until an admin assigns per person.
What the text says today (read at origin/main 5874d253)
skills/objectstack-data/rules/security.md L30–L32:
isDefault: true= theeveryonebaseline (ADR-0090 D5). It may carry app capabilities declared undercapabilities:(defineCapability) and granted viasystemPermissions; lint and boot refuse a platform capability or undeclared name there.
That is the semantics (what the flag binds to). Nothing in skills/** says a published package must declare one such set.
What to change
skills/objectstack-data/rules/security.md: the requirement, written as a rule an author can check — every published package declares exactly one permission set withisDefault: truethat is anchor-safe (bindable to theeveryoneanchor). The dev reads the anchor-safe predicate from the lint and boot refusal it cites (the rule names the symbol, not a paraphrase). The published skill ships verbatim (npx skills add), so this sentence is the contract an author reads.- The marketplace docs: the same requirement where a publisher reads what a package must declare — at the TSDoc /
.describe()source the generated page comes from, or a hand-written page if one exists; the PR says which and shows the regenerated page. skills/**token ratchet: the file's ceiling is read at dispatch; new text is paid by deletion in the same file.
Boundary
skills/**is Tier H (the maintainer's hand or an authorized approval) andCONTRACT_REVIEW_TIERis mandatory for it (dispatch-gates --tier skills/objectstack-data/rules/security.mdanswers MANDATORY).- Whether a gate should ENFORCE the requirement at publish time (lint or
os package publishrefusing a package with no anchor-safe default set) is not this card: the ruling orders the text; a new gate needs the maintainer's own word. If the dev finds such a refusal already exists, the text cites it. - Not in scope: HotCRM's own default set (hotcrm#2231); the ruling's other consequences on plugin-auth, setup users: a managed (SSO-only) hosted environment keeps only authorization + view in Setup → Users, turns its local sign-up off, and gives a JIT user the declared default permission set (cloud#3132 ruling A) #25083.
Session: session_01TsiNYHjuek413vNgFHqcAm
Activity
objectstack-fleet commentedon Oct 25, 2026
Triage: first grade —
documentation·priority:p3·domain:skills·area:devpath·pm:queue· triage seat ·session_01AavokzJ5DndAwitDXvKy4U· 2026-10-25T11:54Z⛔ Not a claim, ⛔ not a dispatch.
skills/objectstack-data/rules/security.md, plus the marketplace TSDoc source (regenerated, ⛔ never hand-edited).skills/**is Tier H.Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
Claim: PM loop round 5 (batch 3) · 2026-10-26T03:42Z
Session:
session_014FZ3TJucS1L7BdMe5DAzXC(seat); implementation in card threadsession_014LdiGPrydHj5PHTzYQUvoWAccount:
os-project-manager(the seat's linked user; the card's assignee)Branch:
claude/project-thread-2drwet(the card thread's harness push branch — the measured platform exception toclaude/issue-<n>-<slug>)Worktree: the card thread's clone
Domain:
domain:skillsSeat:
domain:skills#1(seat post #7623)File surface:
skills/objectstack-data/rules/security.md(theisDefault: truebullet, token-ratchet paid in-file) plus the TSDoc /.describe()source the marketplace page is generated from, regenerated (⛔ never a hand-editedcontent/docs/references/**page). (stop on breach; explain in the report)Container & model:
S,mode:thread,model: claude-fable-5-1(dispatch-gates --tier: MANDATORY,skills/**carries no one-line exit; the thread runs at its own model and effort, set only on the maintainer's word). Tier H (skills/**): stays draft after an at-tier contract review PASS, for an authorised human approval.Clause-②: no
Metadata-protocol: none
Responsibility: n/a — not a defect card (consequence (ii) of a maintainer ruling, quoted in the body)
Premise: holds — on
origin/maincb0a2fcfsecurity.mdL30 still states only theisDefault→everyonesemantics; no file underskills/**states that a published package must declare oneThread-read: 6397310741
Serial constraints cleared: no other in-flight card names
skills/objectstack-data/**or the marketplace spec sourceobjectstack-fleet commentedon Oct 26, 2026
os-dev-report
{ "issue": 25773, "status": "done", "branch": "claude/project-thread-2drwet", "pr": "https://github.com/objectstack-ai/objectstack/pull/25930", "session": "session_014LdiGPrydHj5PHTzYQUvoW", "premise_still_valid": true, "summary": "skills/objectstack-data/rules/security.md: the isDefault bullet now states that a published package declares exactly one anchor-safe isDefault: true set, checkable as describeAnchorForbiddenBits(set, 'everyone') from @objectstack/spec/security returning null, names the existing refusals (lint security-anchor-high-privilege, the binding), says what happens with none, and says no gate counts the sets. Paid by deletions in the same file: 2563 -> 2561 tokens, ceiling 2563 not raised. Marketplace docs: a new 'What a published package declares' section in the Marketplace Protocol module doc block of packages/spec/src/marketplace/marketplace.zod.ts, regenerated into content/docs/references/marketplace/marketplace.mdx with gen:docs. No gate added: presence and count are unenforced today (appDefaultPermissionSetName takes the first isDefault set, or none, silently).", "tests": "No test files changed and no tested behaviour changed (text and doc block only), so no ablation. pnpm --filter @objectstack/spec build :: VERDICT command-exit 0; pnpm --filter @objectstack/spec typecheck :: VERDICT command-exit 0; pnpm --filter @objectstack/spec gen:docs exit 0 then check:generated exit 0. Head f1340f32.", "gates": "dispatch-gates --commands --repo objectstack-ai/objectstack at f1340f32: 113 commands, all run, exit captured before any pipe: 113 exit 0. Six first answered exit 3 PREREQUISITE NOT MET (check:doc-formula-expressions, check:doc-security-posture, check:skill-examples, check:docs-transcript-drift, check:dual-build-cjs-loads, check:lean-entry-closure) and exit 0 after a full pnpm turbo run build under the lock (VERDICT command-exit 0). dispatch-gates --ran: 113 derived families accounted for, 113 run, 0 NOT-MEASURED. check-skills-token-ratchet: 54 authored files within ceilings, security.md 2561/2563. CI: PR check-runs in_progress at report time (No other open PR may claim the same issue: success); not re-run locally.", "dogfood_battery": "n/a — no `!` in the PR title and no (narrowing) arm", "mcp_calls": "3 — mcp__github__issue_read (get, get_comments), mcp__github__pull_request_read (get_check_runs); all reads, no write tool", "api_writes": "2 — fleet-write relay repository_dispatch: pr_create (#25930, assignee os-project-manager, body read back identical 7310 bytes) and this os-dev-report comment on #25773. Plus git push x2 (not REST).", "open_questions": [], "out_of_scope_findings": ["carrier: maintainer — no gate refuses a package that declares no isDefault set or more than one (appDefaultPermissionSetName silently takes the first); whether a publish-time gate should enforce the requirement needs the maintainer's word per the card's boundary. Noted in PR Acceptance notes, not filed."], "deviations": "PR body attribution link points at this card thread (the harness's required attribution block) rather than the seat thread named in the order. Worktree kept (not removed) so a review rework round does not pay the 18-minute full build again; it lives in this card thread's own container." }Generated by Claude Code
objectstack-fleet commentedon Oct 26, 2026
席位
domain:skills#1· 2026-10-26T05:33Z — landed: PR #25930 merged asd65cbb61(contract review PASS 6408676717; os-zhuang approval onf1340f32). Card closed by the PR. Open after landing: whether a publish-time gate should refuse a package with zero or several anchor-safeisDefaultsets — maintainer-only, carried in the PR body Acceptance notes.