Repository navigation
feat(scripts): skills link/anchor gate and three liveness-exhaustive sections - #31432
objectstack-fleet[bot] wants to merge 8 commits into
Conversation
… in the published skills A new gate in the check:skill-* family, wired as one more step in the lint lane that already runs the family. Fragments are judged under GitHub's own slug rule (em-dashes and punctuation deleted, spaces to hyphens with no collapsing, -N for repeats), so the catalog's many double-hyphen anchors read as the links they are. Ships with a battery-floored --self-test that reproduces the three moved-verbatim links the 2026-11-02 review found by hand. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jU4PLtyyimMz72z285
…os generate row and the filter operator table exhaustive Three new Leg 2 bindings, each against its source symbol: the platform skill's requires: token table against PLATFORM_CAPABILITY_TOKENS intersected with CAPABILITY_PROVIDERS, the operations reference's os generate row against GENERATORS minus RETIRED_GENERATORS (a retired kind listed there is its own red), and the query skill's operator reference against FILTER_OPERATORS. The gate now reads string arrays and object-literal keys by name, and a binding can scope to one table row. The os generate row now lists every kind the CLI scaffolds; two restating clauses in the same file's port table pay for the bytes. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jU4PLtyyimMz72z285
…l body names Pure functions and self-test rows only: extractBodyVersions finds the install-shape pins and the prose versions in every skill markdown body, judgeBodyVersions holds each to its package's workspace version unless its sentence reads as history, and deriveBodyVersions is the --fix derivation that rewrites the non-history ones. Kept apart from deriveFrontmatter, which the token ratchet asks for the one stamp line. Not yet called from the gate's run or its --fix leg. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jU4PLtyyimMz72z285
Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jU4PLtyyimMz72z285
…unknown command Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jU4PLtyyimMz72z285
…n prose, not as path anchors Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jU4PLtyyimMz72z285
… its own PR Reverts f6a7e61. The body-version functions are not yet called from the gate's run or its --fix leg, and where their --fix writes land is still being decided, so this PR ships without uncalled code. The patch is kept for the follow-up. Co-Authored-By: Claude <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QsR2jU4PLtyyimMz72z285
|
Contract-review-claim: session_01QsR2jV5sBSzCYNEDgpYLJw · head 11be773 · 2026-11-08T07:58:25Z Generated by Claude Code |
|
director#1 · zhuangjianguo · session_01QsR2jV5sBSzCYNEDgpYLJw Contract reviewServed-tier: ① Contract against the card and ruling
② Governed surfaces (Tier H)
③ Semantics
④ Findings
Implemented-by: VERDICT: PASS Generated by Claude Code |
|
domain:skills#2 · zhuangjianguo · session_01QsR2jT34CXs5fCn3BDirZw 维护者速读
席位核对Head-sha:
|
Requested by Steedos · project thread
Part of #31115 (items 1 and 2). Item 3 follows in a separate PR.
Clause-②: no
Metadata-protocol: none
维护者速读
check:skill-links(按 GitHub 的标题锚点规则核对skills/**里每个相对链接),并让现有的标识符存活检查多守三张表:requires:能力表、os generate那一行、过滤运算符表;os generate行顺手补全为 10 种类型。scripts/check-skill-links.mjs(锚点规则githubSlug,误报风险所在);scripts/check-skill-identifier-liveness.mjs(新的literalMembersOf读取器与三条绑定);.github/workflows/lint.yml(新增的一个步骤)。pnpm check:skill-links,应看到自测 22 条全过,以及「248 relative link(s) … resolve」。skills/**与.github/workflows/**),需要一位受管审批人批准(APPROVED review)。What changes
scripts/check-skill-links.mjs(new) +check:skill-links. Walks every*.mdunderskills/**and resolves each relative link: the file must exist, and a#fragmenton a markdown target must match a heading slug under GitHub's own rule (rendered text, lower-case, punctuation and em-dashes deleted, spaces to hyphens with no collapsing,-Nfor repeats) or an HTMLid/name. Fenced code, inline code spans, HTML comments, absolute URLs and fragments on non-markdown targets are not judged. Exit 0 / 1 (dead link) / 2 (prerequisite, including a lit control on the live link count). Battery-floored--self-testwith the verdict handshake, copied fromcheck-skill-top-level-keys.mjs; it reproduces the three moved-verbatim links from the review and pins each slug case (em-dash, code span, emoji, intra-word underscore, duplicates).package.jsoncheck:skill-links(--self-test && scan); one step inlint.ymltypecheck-source-gates, besidecheck:skill-top-level-keys,continue-on-errorwith anid:so the lane verdict carries it. No new job.scripts/check-skill-identifier-liveness.mjs: three Leg 2 bindings.requires-capability-tokens: platform SKILL.md### requires:section againstPLATFORM_CAPABILITY_TOKENS∩CAPABILITY_PROVIDERS.generate-kinds: operations.md## Build & runtime, rowos generate <kind>, againstGENERATORSminusRETIRED_GENERATORS; a retired kind listed in the row is its own red ([leg2-retired-row]).filter-operators: filters.md## Operator ReferenceagainstFILTER_OPERATORS($emptyis a member, confirmed on main).literalMembersOf(a string array or an object literal's top-level keys, read by name with a character scanner that refuses spreads and computed keys),intersect/minusset algebra and an optionalrowscope on a binding.extractSymbolsis unchanged, so--suggestis unchanged.skills/objectstack-platform/references/operations.md. Theos generate <kind>row listed four kinds in prose; it now lists all ten. Two restating clauses in the same file's port table pay for the bytes (line count 180 → 180; tokens 3375 → 3370)..changeset/31115-skills-link-and-liveness-gates.md:@objectstack/skillspatch.Why
All the mechanical skill gates were green while the 2026-11-02 review found these defects by hand. The maintainer approved the new gate (ruling 6708443569, 「同意」 to letter A). Items 2 and 3 widen existing gates onto their measured blind spots.
Tests
Self-tests and scans at the final head
pnpm check:skill-links: self-test 22 cases pass; scan "248 relative link(s) in 71 published skill file(s) resolve; 119 fragment(s) name a real heading".pnpm check:skill-identifier-liveness: self-test OK (new battery "LEG 2: string arrays, object keys, set algebra and row scope", 15 cases; roster floor 10 → 11); scan OK, "Leg 2: 11 registered exhaustive section(s), 0 ledgered gap(s)".git diff HEADempty afterwards):agentadded to the generate row reds[leg2-retired-row]; themailboxrow deleted from the requires table reds[leg2-missing-row].node scripts/check-skills-token-ratchet.mjs: exit 0 (operations.md 3370 / 3375).pnpm exec eslint --no-inline-configon the touched scripts: exit 0.Acceptance notes
package-registryandmailboxare already in the requires table,$emptyalready in the operator table, and the generate row no longer namesagent; but the row listed only four of the ten kinds, so it was red as an exhaustive row and is fixed here.--fixwrites land (the release post-version guard readsstampedSkillPaths(), and the token ratchet prices body pins) is open with the maintainer; it follows in its own PR.skills/reaches a file that also ships in the published package.skills/**readings: operations.md 180 → 180 lines; the bundle (all SKILL.md) 4524 → 4524 lines.Verification
11be7732(merge basecd6618e88). Full workspacepnpm build: 119 of 119 tasks.node scripts/pm/dispatch-gates.mjs --ran: 89 derived, 89 run, 0 NOT-MEASURED, 0 UNRUN. All 89 exit 0, rerun at this head after the item-3 revert, includingcheck:doc-formula-expressions,check:dts-closure,check:dual-build-cjs-loads,check:lean-entry-closureandcheck:sourcemap-no-sources-contenton the built tree.dispatch-gates --tiernames claude-fable-5-1 forskills/**(clause 1); this was built on the default tier. The two port-table clauses in operations.md were deleted to pay the token ratchet for the longer generate row. Item 3 was committed and then reverted on this branch withgit revert(no history rewrite), soscripts/check-skill-compatibility-version.mjsis byte-identical to main.Generated by Claude Code