Uh oh!
There was an error while loading. Please reload this page.
docs(skills): stop printing a refusal string the sharing gate no longer emits - #12987
Merged
Merged
Conversation
…er emits `data-hooks.md` quoted the by-id write gate's message verbatim, as the literal a hook author would match on. The consumer half of #12493 converts that refusal onto the Operation Message Catalog, so the sentence becomes end-user copy rendered in the caller's locale — the printed string is never emitted again, and matching on it would be matching on prose that varies by locale. The fence names the shape and points at the stable channel (the error's code) instead. Token-neutral by construction: check-skills-token-ratchet reads 12611 against a ceiling of 12611 (+0), and the bundle-wide authored total is unchanged. An earlier draft carrying an explanatory paragraph measured +113 over that ceiling; the ratchet marks raising a ceiling MAINTAINER-ONLY, so the prose was dropped rather than the ceiling moved. Split out of the code PR because `skills/**` is a governed surface: Prime Directive #14 judges a PR on its file list, and one path hit forks the whole PR and reserves the landing for a human. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0194kbQJxUvv2yvsGRtuXpP5
os-zhuang
marked this pull request as ready for review
August 28, 2026 12:58
os-zhuang
enabled auto-merge
August 28, 2026 12:58
os-zhuang
self-requested a review
August 28, 2026 13:05
os-zhuang
approved these changes
Aug 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for freeto join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Part of #12260
⛔ Governed-surface PR — awaiting a human merge. The only file here is under
skills/**, which is on theGOVERNED_SURFACESregister inscripts/pm/check-governed-merges.mjs(printed today:docs/adr/** · .claude/** · skills/** · AGENTS.md · CLAUDE.md). Prime Directive #14 reserves the landing on any such PR: ⛔ do not merge it, ⛔ do not add it to the merge queue, ⛔ do not arm auto-merge, ⛔ do not flip it out of draft. It is left visibly awaiting a human merge on purpose, which PD#14 defines as the finished state for this class. Reviewed + approved + fully green does not override this.The doc half of #12976
This is one of a pair, split for exactly the reason above.
Fixes #12260and is the one that closes the card.skills/objectstack-data/references/data-hooks.mdprinted the by-id write gate's message verbatim, as the literal a hook author would match on:(the two trailing tokens are angle-bracketed placeholders in the file; spelled as words here so this body survives the GitHub sanitizer.)
Once #12976 lands, that string is never emitted again — the sentence becomes end-user copy rendered in the caller's locale. Matching on it would then be matching on prose that varies per user. The fence now names the shape and points at the stable channel instead: match on the error's
code(FORBIDDEN) and status (403), not on the prose. That is better advice than the literal it replaces, independent of this card.data-hooks.mddocuments a string the platform no longer emits. Neither order is harmful — the doc is simply briefly stale in one direction, and briefly early in the other — but the gap should be short.Token cost: zero, by construction
The published catalog is loaded whole into every customer agent context window, so length is a per-token cost paid again in every customer session. This correction spends none of it.
data-hooks.md, whole file (lines)data-hooks.md, whole file (tokens, the ratchet's own count)objectstack-data, whole published dir (lines)An earlier draft of this correction carried an explanatory paragraph and measured +113 tokens over the ceiling. The ratchet marks that direction ⛔ MAINTAINER-ONLY and these ceilings are shrink-only, so the paragraph was dropped rather than the ceiling raised. Recorded because the terse wording is a constraint, not a style choice.
Verification
Gate families derived on the actual changed set with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack, then each run. All green:check-skills-token-ratchet·check:doc-authoring·check:role-word·check:skill-compatibility·check:skill-frame-sync·check:pm-governed-merges·check:skill-refs·check:doc-formula-expressions·check:agent-test-spelling·check:changeset-gate-self-tests·check:objectui-changeset·check:cross-package-test-inputs·check:nul-bytes·check-empty-changeset·check-changeset-no-major·check-adr-0087-registration·check-ci-filter-parity·check-cross-package-test-inputs·release-rehearsal-clone --self-testcheck:doc-formula-expressionsfirst reportedPREREQUISITE NOT METtwice in a row — it imports compiled output, and needed@objectstack/formulaand then@objectstack/lintbuilt. Both were built and it then exited 0. Recording it because a prerequisite refusal is NOT MEASURED, never a pass and never a finding.node scripts/pm/check-half-states.mjsexits 3 = PREREQUISITE NOT MET in this container ("the token in the environment is not a valid GitHub credential"). It swept nothing, so it is neither a clean board nor a dirty one — a backlog sweep unrelated to this diff, which CI runs with a real credential.No changeset, deliberately
This PR releases nothing:
skills/is not in any package'sfilesarray, so no npm package's contents or version move. That is the textbookskip-changesetcase, and the label is applied for it rather than a changeset being invented —changeset-checkinpr-automation.ymlhas no docs-only exemption, so without the label it would be red on a PR that ships no package change.Generated by Claude Code