Uh oh!
There was an error while loading. Please reload this page.
docs(skills): drop the dead target key from the objectstack-api object_operation example - #11748
Merged
Merged
Conversation
…ect_operation example (#11291) `ApiEndpoint.target` became optional in #10338 (landed as #11290): it is required at publish only for `type: 'flow'` and is UNREAD for `type: 'object_operation'`, which is addressed by `objectParams.object` / `.operation`. Nothing checks a `target` written beside them against `objectParams.object`, so the `leadFeed` example was teaching a dead string — the exact AI-authoring trap #10338 removed. The in-tree examples and the protocol/getting-started docs were swept in #11290; the published skill was out of that card's file surface. The example now omits the key. No explanatory note was added: the published skills token ratchet had zero headroom on this file (ceiling 6348, file 6348), and the card made that note conditional on budget. The gate-description lines (~212-214) already state the per-type rule ("an `object_operation` needs both `objectParams` halves; a `flow` needs a `target`") and stay unchanged. Lower the file's ratchet ceiling 6348 -> 6342 to lock in the saving, per the ratchet's own documented discipline ("a ceiling may be LOWERED by any PR that shrinks its file ... always legitimate and encouraged"). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_5213b871-5164-5bc3-8874-28b336bbcd40
hotlong
marked this pull request as ready for review
August 24, 2026 15:11
Uh oh!
There was an error while loading. Please reload this page.
This was referenced Aug 24, 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.
Fixes#11291
The published
objectstack-apiskill still taughttargeton anobject_operationendpoint — a key that has been dead since #10338 (landed as #11290, commitd2619fd0).Premise re-verified on current
origin/mainThe card's premise holds.
packages/spec/src/api/endpoint.zod.ts:171now reads:#11290 swept the in-tree examples (
examples/app-showcase) and the protocol / getting-started docs.skills/**was outside that card's file surface and is a governed surface, so the dead spelling survived only here.Not generated.
skills/objectstack-api/SKILL.mdcarries no GENERATED header and no generator writes it —build-skill-docs.tswritesskills/README.mdandcontent/docs/ai/skills-reference.mdxfrom frontmatter, andbuild-skill-references.tswritesskills/*/references/_index.md. Neither owns the body, so this is a hand edit of a hand-written file, and both gates stay green (frontmatter untouched).What changed
skills/objectstack-api/SKILL.md— theleadFeedexample dropstarget: 'acme_lead'. The example is inside an<!-- os:check -->fence, so it is type-checked: it compiles with the key absent, which is itself the proof that the vocabulary really made it optional.scripts/check-skills-token-ratchet.mjs— lowers this file's ceiling6348 → 6342to lock in the saving, per the ratchet's own documented discipline: "A ceiling may be LOWERED by any PR that shrinks its file. Lowering is always legitimate and encouraged."No explanatory note was added, deliberately. The card made the one-line "omit
targetonobject_operation" note conditional on budget, and the budget is spent: the token ratchet had zero headroom on this file (ceiling 6348, file 6348). A first attempt that replaced the key with a one-line comment measured +16 tokens and drove the ratchet red — the gate refusing to let a small correction pay for prose. The per-type rule is already stated in the file's gate description (~lines 212-214, unchanged): "anobject_operationneeds bothobjectParams.objectand.operation; aflowneeds atarget". So the corpus still teaches the contract; it just stops demonstrating the dead spelling.Only the
leadFeedexample spelled the dead key. The othertargetoccurrences in the package are unrelated English or theinputMappingdot-path sense, and no other skill inskills/teachestargeton anobject_operation.Size discipline (maintainer ruling 2026-08-21)
Both readings, lines and tokens (ratchet convention
ceil(utf8 bytes / 4)):skills/objectstack-api/SKILL.md(whole file) — linesskills/objectstack-api/SKILL.md(whole file) — tokensSKILL.md) — linesSKILL.md) — tokensNet growth is negative in every reading — nothing was expanded to fix a small thing.
Changeset: none,
skip-changesetappliedJudged from the diff. Nothing published moves:
skills/has nopackage.jsonof its own, no published workspace package'sfiles[]coversskills/orscripts/, and the repo root isprivate: true. Both touched paths are repo-internal — a published-catalog source file and a CI gate script — so no npm artifact changes.Gates — all run locally at
0e5ea8cb, each quoting its own verdict lineDerived with
node scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack(no path args) against the real change set, re-derived afterscripts/check-skills-token-ratchet.mjsjoined the diff (8 families → 13). Exit codes captured before any pipe.check:agent-test-spelling✓ 0 violations — 351 file(s)check:cross-package-test-inputscheck:doc-authoring✓ doc authoring guard: 389 files cleancheck:doc-formula-expressionscheck:entry-guardcheck:parse-guardcheck:pm-governed-mergescheck:pnpm-filter-targetscheck:role-wordcheck-role-word: OK, no new occurrencescheck:skill-compatibility✓ 11 SKILL.md file(s) reconciled against 78 workspace packagescheck:skill-frame-sync✓ 4 copies of the decision frame are structurally isomorphiccheck-cross-package-test-inputs.mjscheck-skills-token-ratchet.mjs✓ 11 published SKILL.md within their ceilings.Plus the families AGENTS.md names for a
SKILL.mdedit, which the path derivation did not list — run because the derivation is a clue, not a spec:check:skill-docscheck:skill-refscheck:skill-examples✅ 257 prose examples type-check across 3 surface(s)check:nul-bytescheck-nul-bytes: OK (scanned 6553 text file(s) … no raw ASCII control bytes)pnpm lint(repo-wideeslint . --no-inline-config)Two gates initially refused rather than measured, both for missing builds, and neither was a finding:
check:doc-formula-expressionscould not resolve@objectstack/formula/distandcheck:skill-examplesrefused on an unbuiltpackages/client-react/dist(it fails loudly rather than returning a false green). Both were re-run to a real verdict after building the dependency closures; the greens above are the post-build runs.Landing
⛔ Governed surface (
skills/**, Prime Directive #14) — this PR stays draft, is never queued, never armed for auto-merge, and never flipped ready. Human merge only.Generated by Claude Code