Skip to content

docs(skills): cite PLATFORM_CAPABILITY_TOKENS instead of restating its count in objectstack-platform - #18839

Merged
os-zhuang merged 1 commit into
mainfrom
claude/issue-18705-platform-skill-cites-the-registry
Sep 18, 2026
Merged

os-zhuang merged 1 commit into
mainfrom
claude/issue-18705-platform-skill-cites-the-registry

Conversation

@os-justin

Copy link
Copy Markdown
Collaborator

Fixes #18705
Clause-②: no

The requires: section of the published skills/objectstack-platform/SKILL.md copied two numbers out of the platform capability vocabulary into prose — 「The other eight tokens in the vocabulary …」 and 「The authoritative list of all 28 is PLATFORM_CAPABILITY_TOKENS」 — and no gate reads either number against packages/spec/src/kernel/platform-capabilities.ts. PR #18694 (#18053) took the vocabulary 28 → 29 when it landed at 2026-09-17T16:10Z, so on origin/main both sentences were already false when this branch was cut. This PR is the card's option A in the shape of the #16853 precedent (a256f18962, PR #17259 「cite the platform-tool registry instead of restating it」): the two counts become citations, and nothing is left in those two sentences that a registry change can falsify. No other sentence in the file moves. The package-registry runtime half is #17676's and is not addressed here; #16767 (the example block's TypeScript range, same file) remains open and is not folded.

维护者速读(草稿)

改了什么 — 发布给客户项目的 skills/objectstack-platform/SKILL.md 里,requires: 一节原来写死了两个数字(「the other eight tokens」「the authoritative list of all 28」)。本 PR 把这两句改成引用常量 PLATFORM_CAPABILITY_TOKENS,不再写数字;其余 1221 行一字未动(diff 是 3 行增 / 3 行删)。

为什么改 — 这两个数字是从 packages/spec 的能力词汇表抄来的,没有任何门禁核对它们。#18694 落地后词汇表已是 29 个 token(新增 package-registry),这两句在 main 上已经是假话,而客户项目里的 AI 每次加载这份 skill 都会读到。同一类缺陷在 skills/objectstack-ai/SKILL.md 上已由 #16853 / PR #17259 用同样的办法修过一次:引用注册表,不复述它。

风险与代价(含回滚) — 纯文档改动,不发布代码,不改任何运行时行为;skill 的 token 计数 12980 → 12975,上限 12984 不动。回滚就是 revert 这一个提交。留下一处未动:同一节 :440 的「all 20 of its entries」仍是一个抄写的计数(今天为真,#17676 引擎侧落地时会变假),按派发令本卡不动其它句子——要不要顺手折进来由席位定,见下方 Acceptance notes。

席位意见

你要做的 — 这是受管面(skills/**),按 Prime Directive #14 需要你亲自确认并合并;PR 保持 draft。读一眼 diff 里那两句(6 行),没有别的。

Re-derived readings

All on origin/main 5941246b70 (the branch point); none copied from the card.

reading value how
PLATFORM_CAPABILITY_TOKENS size 29 parsed the frozen array literal in packages/spec/src/kernel/platform-capabilities.ts; PLATFORM_CAPABILITY_PROVIDERS has the same 29 keys
Serve.CAPABILITY_PROVIDERS size (the map the section describes) 20 top-level keys of the static at packages/cli/src/commands/serve.ts :1863–:2009; the skill's :442 table names the same 20 as a set
vocabulary tokens NOT in that map 9 ai ai-studio i18n ui auth hierarchy-security ai-seat governance — the eight the section lists — plus package-registry
「all 28」 on the tip false (29)
「the other eight」 on the tip false (nine)
「all 20 of its entries」 at :440 (same section; not named by the card) true today (20 = 20)

Gate reading — which gate surfaces read the constant name — with controls (git grep -l at 5941246b70):

The two sentences, before / after

:452–:453 before:

The other eight tokens in the vocabulary are **not** in that map and do not
resolve through it:

after:

The tokens in `PLATFORM_CAPABILITY_TOKENS` not in that map do not resolve
through it:

:463 before:

The authoritative list of all 28 is `PLATFORM_CAPABILITY_TOKENS`

after:

The authoritative list is `PLATFORM_CAPABILITY_TOKENS`

The diff is 3 insertions / 3 deletions in one file.

The enumeration under :452, re-read against the constant at the tip

Every name the two bullets carry — tier-gated ai, ai-studio, i18n, ui, auth (= the five keys of Serve.CAPABILITY_TO_TIER at :1577–:1585, verbatim); enterprise / cloud hierarchy-security, ai-seat, governance — is in PLATFORM_CAPABILITY_TOKENS at the tip, and none of the eight is a Serve.CAPABILITY_PROVIDERS key. So the list is kept as the list it is: no name dropped, no name added. The ninth not-in-map token, package-registry, is in the vocabulary and in PLATFORM_CAPABILITY_PROVIDERS (@objectstack/service-package, open edition) but has no Serve.CAPABILITY_PROVIDERS row yet — the constant's own comment says it is inert under objectstack serve until #17676's runtime half lands. Per the card this PR documents no new token; the Acceptance notes say who holds that.

The marketplace provider line (:444, @objectstack/service-package) was read against Serve.CAPABILITY_PROVIDERS.marketplace.pkg at :1958 (@objectstack/service-package): it matches the tip and is not touched — repointing it is #17676's engine lane.

Token ratchet

node scripts/check-skills-token-ratchet.mjs, convention ceil(utf8 bytes / 4):

bytes tokens ceiling headroom exit
before (5941246b70) 51918 12980 12984 4 0
after (bef0dc6dfa) 51898 12975 12984 9 0

No ceiling moves. The published-skill readings the os-dev definition asks for: this file 1223 → 1223 lines and 12980 → 12975 tokens; the package (all ten skills/*/SKILL.md) 6145 → 6145 lines and 70695 → 70690 tokens; the whole priced bundle 139987 → 139982 tokens. Lowering this file's ceiling to 12975 is the script's stated option, but it edits scripts/check-skills-token-ratchet.mjs, outside this card's one-file surface — left to the seat.

Gates

Derived with node scripts/pm/dispatch-gates.mjs --commands --repo objectstack-ai/objectstack from the worktree (no hand-fed paths; change set read from the merge base 5941246b70); every exit code captured redirect-then-$?; all runs at bef0dc6dfa.

23 derived commands, every one exit 0:

node scripts/check-ci-filter-parity.mjs · node scripts/check-closing-keyword-parity.mjs · node scripts/check-closing-keyword-parity.mjs --self-test · node scripts/check-comment-mask-corpus.mjs · node scripts/check-doc-route-spelling.mjs --advisory · node scripts/check-doc-route-spelling.mjs --self-test · node scripts/check-skills-token-ratchet.mjs · node scripts/check-skills-token-ratchet.mjs --self-test · pnpm --filter @objectstack/spec run check:skill-docs · pnpm check:agent-test-spelling · pnpm check:corpus-claim-drift · pnpm check:cross-package-test-inputs · pnpm check:doc-authoring · pnpm check:driver-memory-census · pnpm check:nul-bytes · pnpm check:pm-governed-merges · pnpm check:refd-timer-probe · pnpm check:role-word · pnpm check:skill-compatibility · pnpm check:skill-frame-sync · pnpm check:skill-identifier-liveness · pnpm check:watch-hint-literal · pnpm --filter @objectstack/lint run check:doc-formula-expressions

  • check:doc-formula-expressions answered exit 3 (PREREQUISITE NOT MET) on its first run, before any build; then pnpm --workspace-concurrency=2 --filter '@objectstack/lint...' build under scripts/pm/os-verify-lock.sh (VERDICT command-exit 0, held 169s, waited 0s); the second run answered exit 0 — the 0 above is the second run.
  • Reconciliation: node scripts/pm/dispatch-gates.mjs --ran ran.list✓ dispatch-gates --ran: 23 derived famil(ies) accounted for — 23 run, 0 NOT-MEASURED (a DERIVED zero — all 23 recorded an exit code and none of them is 3), exit 0.
  • Named by the dispatch and run in addition (not in the derivation): pnpm check:pm-skill-id-lint exit 0.
  • Repo-wide pnpm lint (eslint . --no-inline-config) under the verify lock: VERDICT command-exit 0 (held 88s, waited 65s — shared-box seconds), at bef0dc6dfa.
  • Control-byte self-scan of the edited file (grep -naP over the C0/DEL range): 0 hits.

Not owed locally, because the diff touches no package: no dependency-closure build, no package test / typecheck. What stays CI's, as the derivation's stderr names it: 51 artifact-roster families, 11 wide-population families, 14 pending-changeset families, and the path-scheduled Test Core job.

Acceptance notes


Generated by Claude Code

…its count

The `requires:` section of `skills/objectstack-platform/SKILL.md` copied two
numbers out of the platform capability vocabulary into prose — "the other
eight tokens" and "the authoritative list of all 28" — and no gate reads
either against `packages/spec/src/kernel/platform-capabilities.ts`. The
vocabulary is 29 on `main` since `package-registry` landed, so both
sentences are already false.

Cite the constant instead. The tokens outside the CLI's `CAPABILITY_PROVIDERS`
map are named as "the tokens in `PLATFORM_CAPABILITY_TOKENS` not in that map",
and the authority sentence keeps the constant and drops the count. The
enumeration under it is unchanged: every name it lists is still in the
constant. Nothing in the tree read the removed numbers, so no gate or
generator follows.

Claude-Session: https://claude.ai/code/session_01Gqi43smmqjJ5sUrhfoPeKu

Co-authored-by: Claude <noreply@anthropic.com>

Copy link
Copy Markdown
Collaborator Author

维护者速读(终稿)

改了什么:发布给客户项目的 skills/objectstack-platform/SKILL.mdrequires: 一节,原来写死两个数字(「the other eight tokens」「the authoritative list of all 28」)。本 PR 把这两句改成引用常量 PLATFORM_CAPABILITY_TOKENS、不再写数字;其余 1221 行一字未动(3 行增 / 3 行删)。token 计数 12980 → 12975,上限 12984 不动。

为什么改:这两个数字是从 packages/spec 的能力词汇表抄来的,没有任何门禁核对(引到常量的门禁面 0 个文件,亮控全树 18 个)。PR #18694 今天 16:10Z 落地后词汇表已是 29 个 token(席位在 head 上自数 29),这两句在 main 上已经是假话,而客户项目里的 AI 每次加载这份 skill 都会读到。同一类缺陷在 skills/objectstack-ai/SKILL.md 上由 #16853 / PR #17259 用同一办法修过:引用注册表,不复述它。列举的八个名字逐个对过常量,一个没丢、一个没加;#18694 新增的 package-registry 本 PR 不补写 —— 那是 #17676 引擎侧加 CLI 行时的事。

风险与代价(含回滚):纯文档、不发布代码、不改运行时;23 个派生门禁全 0,全仓 lint 0。回滚 = revert 这一个 commit。⚠️ 同一节 :440 的「all 20 of its entries」仍是一个抄写计数,今天为真、#17676 落地时会变假;按派发令本卡不动其它句子,席位决定不为一个词再开一轮 MANDATORY 档,留给必然要改那张表的 #17676 PR。

席位意见:通过,按 dev 交付的原样。

你要做的:批准本 PR(skills/**GOVERNED_SURFACES 内,等您的字)。diff 只有那两句,6 行。合并后无后续动作。


Generated by Claude Code

@os-zhuang
os-zhuang marked this pull request as ready for review September 18, 2026 01:17
@os-zhuang
os-zhuang enabled auto-merge September 18, 2026 01:17
@os-zhuang
os-zhuang added this pull request to the merge queue Sep 18, 2026
Merged via the queue into main with commit 96fdac2 Sep 18, 2026
44 checks passed
@os-zhuang
os-zhuang deleted the claude/issue-18705-platform-skill-cites-the-registry branch September 18, 2026 02:19
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 size/xs skip-changeset PR has no user-facing published change; bypasses the changeset gate

Projects

None yet

2 participants