docs(skills): document the action and component nav item types - #14138
Merged
Conversation
The objectstack-ui Navigation Item Types table listed 7 of the 9 live
discriminated-union members; `action` and `component` had no row, so an
author reading the published skill could not discover either target.
Funded within the file's token ceiling (headroom was 0) by deleting two
Common Pitfalls entries that carry no fact the file does not state better
elsewhere:
- pitfall 1 restated the Data Source best-practice block verbatim (and that
block is the richer of the two -- it also names automatic CRUD);
- pitfall 4 ("always add a quick filter") is superseded by the ADR-0047
userFilters section, which prescribes the opposite default: omit
`userFilters` when unsure, most views need no filter elements at all.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
The recorded NavItemVariant gap of 2 (action, component) is closed by the table rows in the previous commit; the gate refuses an improvement that leaves budget behind for a later edit to spend silently. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01Msg17tAHJ3jVTYFgHydCm2
os-zhuang
approved these changes
Sep 1, 2026
os-zhuang
marked this pull request as ready for review
September 1, 2026 07:19
os-zhuang
enabled auto-merge
September 1, 2026 07:19
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 free
to 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 #13890
The published
skills/objectstack-ui"Navigation Item Types" table listed 7 of the 9 liveNavItemVariantmembers:actionandcomponenthad no row, in a section whose headingnames the catalog and whose other seven rows are present — so an AI author reading it
could not reach either variant.
Part of #13658. The objectstack twin of the fix the objectui sweep landed in that repo's
skills/objectui/guides/app-composition.md; the rows here are written in this table's ownType | Properties | Purposeidiom rather than copied.Member set, verified against the schema
The live set is read out of the schema at runtime — hand the discriminated union a bogus
typeand print the options it names, rather than trusting the card's "9" or theNavItemVarianttype alias:Nine members; the two absent from the table are exactly
actionandcomponent.packages/spec/src/ui/app.zod.tsbacks each row:ActionNavItemSchemarequiresactionDef, itself a strict object ofactionNameplus an optional openparams;ComponentNavItemSchemarequirescomponentRef(aComponentRegistrykey such asmetadata:resource) with an optional openparamspassed to the component as props.Neither variant accepts
children—NAV_VARIANTS_ACCEPTING_CHILDRENisobjectandgrouponly — so neither row lists it.pnpm --filter @objectstack/spec exec vitest run --maxWorkers=2 src/ui/app.test.ts—102 passed (1 file), including the pin that parses all nine variants with their full
declared payloads.
Rows added
Token budget — funded by deletion in the same file, no ceiling raise
The file sat at its ceiling with headroom 0, so the two rows are paid for by removing text,
not by moving a ceiling. Verdict lines from
node scripts/check-skills-token-ratchet.mjs:Funding source — two
Common Pitfallsentries deleted, neither of which carries a fact thefile does not state better elsewhere (a real deletion, not a re-wrap; the ceiling constant
is untouched):
provider: 'api'whenprovider: 'object'is available" — a strict subset ofthe Data Source best-practice block a thousand lines above, which is the richer of the two
(it also names automatic CRUD).
ADR-0047
userFilterssection in the same file, which prescribes the opposite default:"Omit
userFilterswhen unsure … most views need no filter elements at all." Keepingboth left the skill teaching two contradictory defaults.
Required
skills/**readings, lines and tokens (token unit is the ratchet's ownceil(utf8 bytes / 4)):skills/objectstack-ui/SKILL.md, whole file — linesskills/objectstack-ui/SKILL.md, whole file — tokensSKILL.md— linesSKILL.md— tokensBoth readings are net negative: the catalog gets two missing rows and gets shorter.
Ledger
scripts/check-skill-identifier-liveness.mjsrecords this gap inscripts/skill-identifier-liveness-ledger.jsonunderleg2Gaps.navigation-item-types, andrefuses an improvement that does not ratchet it down. Second commit does exactly that; the
gate now reports
Leg 2: 9 registered exhaustive section(s), 0 ledgered gap(s).Gates
Full derived union at HEAD
c587bd7ff, fromnode scripts/pm/dispatch-gates.mjs --repo objectstack-ai/objectstack --commandsrunagainst that same commit (21 commands over the 2 changed paths), plus
check:nul-bytes.Exit codes captured before any pipe. 21 green; one NOT MEASURED:
node scripts/check-test-completeness.mjsexits 3 with no argument by design — it parsesa saved
turbo run testlog, which a local family run has none of. Its own text says thisis not a red and there is nothing here to fix.
pnpm --filter @objectstack/lint run check:doc-formula-expressionsfirst exited 3(PREREQUISITE NOT MET) because
@objectstack/formulaand@objectstack/lintwere notbuilt in this fresh worktree; after building both it exits 0 at the same HEAD.
No changeset: the diff publishes nothing from any package, so the PR carries
skip-changeset.Landing
skills/**is a governed surface — this PR stays a draft and is merged by themaintainer, by hand. No auto-merge, no queue.
Session:
session_01Msg17tAHJ3jVTYFgHydCm2.Generated by Claude Code
Generated by Claude Code