Skip to content

skills: skills/objectstack-data/rules/security.md states what isDefault: true means but not the marketplace requirement that every published package declares one anchor-safe default set (ruling 6341690661 on #25083, consequence ii) #25773

Closed

Description

@objectstack-fleet

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: true set」 — a governed-text change to skills/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 = the everyone baseline (ADR-0090 D5). It may carry app capabilities declared under capabilities: (defineCapability) and granted via systemPermissions; 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

  1. skills/objectstack-data/rules/security.md: the requirement, written as a rule an author can check — every published package declares exactly one permission set with isDefault: true that is anchor-safe (bindable to the everyone anchor). 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.
  2. 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.
  3. skills/** token ratchet: the file's ceiling is read at dispatch; new text is paid by deletion in the same file.

Boundary

Session: session_01TsiNYHjuek413vNgFHqcAm

Activity

  1. added
    documentationImprovements or additions to documentation
    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iterate
    domain:skillsDomain lane — seat card indexed by label:pm:seat
    pm:queueReady for the PM dispatch loop
    on Oct 25, 2026
  2. objectstack-fleet commented on Oct 25, 2026

    @objectstack-fleet
    ContributorAuthor

    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.

    • One sentence in skills/objectstack-data/rules/security.md, plus the marketplace TSDoc source (regenerated, ⛔ never hand-edited). skills/** is Tier H.

    Generated by Claude Code

  3. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    Claim: PM loop round 5 (batch 3) · 2026-10-26T03:42Z
    Session: session_014FZ3TJucS1L7BdMe5DAzXC (seat); implementation in card thread session_014LdiGPrydHj5PHTzYQUvoW
    Account: 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 to claude/issue-<n>-<slug>)
    Worktree: the card thread's clone
    Domain: domain:skills
    Seat: domain:skills#1 (seat post #7623)
    File surface: skills/objectstack-data/rules/security.md (the isDefault: true bullet, token-ratchet paid in-file) plus the TSDoc / .describe() source the marketplace page is generated from, regenerated (⛔ never a hand-edited content/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/main cb0a2fcf security.md L30 still states only the isDefault → everyone semantics; no file under skills/** states that a published package must declare one
    Thread-read: 6397310741
    Serial constraints cleared: no other in-flight card names skills/objectstack-data/** or the marketplace spec source

  4. added
    pm:dispatchedDispatched to a dev agent by /pm-dispatch
    and removed
    pm:queueReady for the PM dispatch loop
    on Oct 26, 2026
  5. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    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

  6. objectstack-fleet commented on Oct 26, 2026

    @objectstack-fleet
    ContributorAuthor

    席位 domain:skills#1 · 2026-10-26T05:33Z — landed: PR #25930 merged as d65cbb61 (contract review PASS 6408676717; os-zhuang approval on f1340f32). Card closed by the PR. Open after landing: whether a publish-time gate should refuse a package with zero or several anchor-safe isDefault sets — maintainer-only, carried in the PR body Acceptance notes.

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    area:devpathThe road — create, dev, verify, publish/install, connect an agent, iteratedocumentationImprovements or additions to documentationdomain:skillsDomain lane — seat card indexed by label:pm:seatpriority:p3

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions