Skip to content

feat(spec)!: remove SkillSchema.permissions — it never gated anything (#3686) - #3704

Merged
os-zhuang merged 3 commits into
mainfrom
feat/prune-skill-permissions
Jul 27, 2026
Merged

feat(spec)!: remove SkillSchema.permissions — it never gated anything (#3686)#3704
os-zhuang merged 3 commits into
mainfrom
feat/prune-skill-permissions

Conversation

@os-zhuang

Copy link
Copy Markdown
Contributor

Owner decision on the enforce-or-prune call filed in #3686: prune. Companion objectui PR: objectstack-ai/objectui#chore/drop-skill-permissions-preview.

Why prune rather than enforce

skill.permissions was declared in the spec, surfaced in the Studio authoring form under a section labelled "Access — Required permissions to use this skill", and echoed by the objectui preview as a "N required perms" pill — while no runtime read it. The cloud SkillRegistry selects skills by active / triggerConditions / tools only.

That combination is the worst case for this platform's audience: an author (or an AI writing metadata) sees a security-shaped field with a security-shaped label and reasonably concludes the skill is gated. It is not. Same disposition as agent visibility (#1901) and the PolicySchema tree (#2387) — a security-shaped field that lies is dropped, not carried marked.

Skill-level gating was a documented intent (cloud has a comment "Layer permissions via Skill.permissions independent of the agent's permissions"), never an implementation. If it is wanted later it returns as a designed, enforced feature — the schema shape is trivial to re-add.

Removed

Surface What
spec the permissions property on SkillSchema
spec form the entire Access section (it existed only for this field)
i18n the generated access section + permissions field keys, removed surgically — a full extract rerun regenerates every existing block against the current schema and drags in unrelated drift
liveness the ledger entry + the count-table row (skill 9/–/19/–/–)
skills doc the prop-table row (replaced by a migration note) and the permissions line inside the os:check TypeScript block — that block compiles against the spec, so leaving it would fail check:skill-examples
objectui the preview's "Required Permissions" panel + header pill (companion PR)

Migration — gate where it is actually enforced

SkillSchema is non-strict, so an existing permissions: key is silently stripped on parse — no boot break. A new regression test pins that behaviour.

Verification

6688 spec tests · check:liveness / check:docs / check:api-surface / check:skill-docs / check:skill-examples all green.

Not in this PR

agent.knowledge (the other half of #3686) is paused — not a priority this phase. It keeps the honest dead + authorWarn state set in #3685, so authors get a warning rather than a false promise.

Refs #3686, #1878, #3685.

🤖 Generated with Claude Code

…#3686)

Owner decision on the enforce-or-prune call: prune.

skill.permissions was declared, surfaced in the Studio form under an "Access —
Required permissions to use this skill" section, and echoed by the objectui
preview — but no runtime read it. The cloud SkillRegistry selects skills by
active/triggerConditions/tools only. A security-shaped field that enforces
nothing invites an author (or an AI) to believe a skill is gated when it is
not — same disposition as agent `visibility` (#1901) and PolicySchema (#2387).

Removed: the schema property; the form's whole Access section (it existed only
for this field); its generated i18n keys (surgically, not via a full extract
rerun, which would drag in unrelated drift); the liveness-ledger entry + count
table row; and the `permissions` line from the objectstack-ai skill doc — both
its prop table (replaced by a migration note) and its os:check TS block, which
compiles against the spec and would otherwise fail check:skill-examples.

Added a regression test pinning that an authored `permissions` key is stripped
(SkillSchema is non-strict, so it degrades silently rather than breaking boot).

Verified: 6688 spec tests; check:liveness / check:docs / check:api-surface /
check:skill-docs / check:skill-examples all green.

Refs #3686, #1878.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Jul 27, 2026

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

1 Skipped Deployment
Project Deployment Actions Updated (UTC)
objectstack Ignored Ignored Jul 27, 2026 3:22pm

Request Review

@github-actions github-actions Bot added documentation Improvements or additions to documentation tests protocol:ai tooling size/s labels Jul 27, 2026
@github-actions

Copy link
Copy Markdown
Contributor

📓 Docs Drift Check

This PR changes 2 package(s): @objectstack/platform-objects, @objectstack/spec.

104 hand-written doc(s) reference the affected code and may need an implementation-accuracy re-verification:

  • content/docs/ai/agents.mdx (via @objectstack/spec)
  • content/docs/ai/skills-reference.mdx (via @objectstack/spec)
  • content/docs/ai/skills.mdx (via @objectstack/spec)
  • content/docs/api/client-sdk.mdx (via @objectstack/spec)
  • content/docs/api/environment-routing.mdx (via @objectstack/spec)
  • content/docs/api/error-catalog.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-client.mdx (via @objectstack/spec)
  • content/docs/api/error-handling-server.mdx (via @objectstack/spec)
  • content/docs/api/index.mdx (via @objectstack/spec)
  • content/docs/automation/approvals.mdx (via packages/spec)
  • content/docs/automation/flows.mdx (via @objectstack/spec)
  • content/docs/automation/hook-bodies.mdx (via packages/spec)
  • content/docs/automation/hooks.mdx (via @objectstack/spec)
  • content/docs/automation/index.mdx (via @objectstack/spec)
  • content/docs/automation/webhooks.mdx (via @objectstack/spec)
  • content/docs/automation/workflows.mdx (via @objectstack/spec)
  • content/docs/concepts/architecture.mdx (via @objectstack/spec)
  • content/docs/concepts/design-principles.mdx (via packages/spec)
  • content/docs/concepts/index.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-driven.mdx (via @objectstack/spec)
  • content/docs/concepts/metadata-lifecycle.mdx (via packages/spec)
  • content/docs/concepts/north-star.mdx (via packages/spec)
  • content/docs/data-modeling/analytics.mdx (via @objectstack/spec)
  • content/docs/data-modeling/drivers.mdx (via @objectstack/spec)
  • content/docs/data-modeling/external-datasources.mdx (via @objectstack/spec)
  • content/docs/data-modeling/field-types.mdx (via @objectstack/spec)
  • content/docs/data-modeling/fields.mdx (via @objectstack/spec)
  • content/docs/data-modeling/formulas.mdx (via @objectstack/spec)
  • content/docs/data-modeling/index.mdx (via @objectstack/spec)
  • content/docs/data-modeling/objects.mdx (via @objectstack/spec)
  • content/docs/data-modeling/queries.mdx (via @objectstack/spec)
  • content/docs/data-modeling/schema-design.mdx (via @objectstack/spec)
  • content/docs/data-modeling/seed-data.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation-rules.mdx (via @objectstack/spec)
  • content/docs/data-modeling/validation.mdx (via @objectstack/spec)
  • content/docs/deployment/cli.mdx (via @objectstack/spec)
  • content/docs/deployment/troubleshooting.mdx (via @objectstack/spec)
  • content/docs/deployment/validating-metadata.mdx (via @objectstack/spec)
  • content/docs/getting-started/build-with-claude-code.mdx (via @objectstack/spec)
  • content/docs/getting-started/common-patterns.mdx (via @objectstack/spec)
  • content/docs/getting-started/examples.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-reference.mdx (via @objectstack/spec)
  • content/docs/getting-started/quick-start.mdx (via @objectstack/spec)
  • content/docs/getting-started/your-first-project.mdx (via @objectstack/spec)
  • content/docs/kernel/cluster.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/auth-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/cache-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/data-engine.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/index.mdx (via @objectstack/spec)
  • content/docs/kernel/contracts/metadata-service.mdx (via packages/spec)
  • content/docs/kernel/contracts/storage-service.mdx (via packages/spec)
  • content/docs/kernel/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/email-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/index.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/queue-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sharing-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/sms-service.mdx (via packages/spec)
  • content/docs/kernel/runtime-services/storage-service.mdx (via packages/spec)
  • content/docs/kernel/services-checklist.mdx (via @objectstack/spec)
  • content/docs/permissions/authorization.mdx (via @objectstack/spec)
  • content/docs/permissions/permission-sets.mdx (via @objectstack/spec)
  • content/docs/permissions/permissions-matrix.mdx (via @objectstack/spec)
  • content/docs/permissions/positions.mdx (via @objectstack/spec)
  • content/docs/permissions/rls.mdx (via @objectstack/spec)
  • content/docs/permissions/sharing-rules.mdx (via @objectstack/spec)
  • content/docs/plugins/adding-a-metadata-type.mdx (via @objectstack/spec)
  • content/docs/plugins/development.mdx (via @objectstack/spec)
  • content/docs/plugins/index.mdx (via @objectstack/spec)
  • content/docs/plugins/packages.mdx (via @objectstack/platform-objects, @objectstack/spec)
  • content/docs/protocol/backward-compatibility.mdx (via @objectstack/spec)
  • content/docs/protocol/diagram.mdx (via packages/spec)
  • content/docs/protocol/kernel/config-resolution.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/i18n-standard.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/index.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/lifecycle.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/plugin-spec.mdx (via @objectstack/spec)
  • content/docs/protocol/kernel/runtime-capabilities.mdx (via @objectstack/spec)
  • content/docs/protocol/knowledge.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/query-syntax.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/schema.mdx (via @objectstack/spec)
  • content/docs/protocol/objectql/security.mdx (via packages/spec)
  • content/docs/protocol/objectql/state-machine.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/actions.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/concept.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/index.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/layout-dsl.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/record-alert.mdx (via @objectstack/spec)
  • content/docs/protocol/objectui/widget-contract.mdx (via @objectstack/spec)
  • content/docs/releases/implementation-status.mdx (via @objectstack/spec)
  • content/docs/releases/index.mdx (via @objectstack/spec)
  • content/docs/releases/v12.mdx (via @objectstack/spec)
  • content/docs/releases/v13.mdx (via @objectstack/spec)
  • content/docs/releases/v16.mdx (via @objectstack/spec)
  • content/docs/releases/v9.mdx (via @objectstack/spec)
  • content/docs/ui/actions.mdx (via @objectstack/spec)
  • content/docs/ui/create-vs-edit-form.mdx (via @objectstack/spec)
  • content/docs/ui/dashboards.mdx (via @objectstack/spec)
  • content/docs/ui/forms.mdx (via @objectstack/spec)
  • content/docs/ui/index.mdx (via @objectstack/spec)
  • content/docs/ui/public-data-collection.mdx (via @objectstack/spec)
  • content/docs/ui/setup-app.mdx (via @objectstack/platform-objects, @objectstack/spec)
  • content/docs/ui/translations.mdx (via @objectstack/spec)
  • content/docs/ui/views.mdx (via @objectstack/spec)

Advisory only. To re-verify, run the docs-accuracy-audit workflow scoped to these files:
node scripts/docs-audit/affected-docs.mjs origin/main → pass the list as args.docs.

os-zhuang and others added 2 commits July 27, 2026 23:14
…ssions line

Removing the `permissions` row from the objectstack-ai skill doc dropped its
role-word count 6 -> 5; the ratchet requires the baseline to follow. Only that
one entry changed (verified: no other file was whitewashed by --update).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…ess section removal

I removed the en keys by hand but left the other three locales stale; the
translation-bundle drift gate caught it. Regeneration touched ONLY the skill
access/permissions keys in the three locales (24 deletions, verified line by
line — no unrelated blocks were rewritten).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@github-actions github-actions Bot added size/m and removed size/s labels Jul 27, 2026
@os-zhuang
os-zhuang merged commit c2f1002 into main Jul 27, 2026
17 checks passed
@os-zhuang
os-zhuang deleted the feat/prune-skill-permissions branch July 27, 2026 15:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

documentation Improvements or additions to documentation protocol:ai size/m tests tooling

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant