Skip to content

ci: gate skill cross-references and Standard document-version pins - #30

Merged
UnbreakableMJ merged 1 commit into
mainfrom
ci-skill-ref-checker
Aug 5, 2026
Merged

ci: gate skill cross-references and Standard document-version pins#30
UnbreakableMJ merged 1 commit into
mainfrom
ci-skill-ref-checker

Conversation

@UnbreakableMJ

Copy link
Copy Markdown
Contributor

Why

Three of yesterday's four audit findings were cross-reference drift — a skill name, a §13 claim, a version pin — not rule drift. The description cap and reuse lint verify a skill in isolation; nothing verified that a skill still agrees with the catalogue and the Standard around it. That entire class was invisible to CI by construction.

The checks

.github/check-skill-refs.py:

1. Skill references resolve. A skill id named in prose (`spacecraft-foo` in Markdown, @code{spacecraft-foo} in Texinfo) must exist as a skill directory. The Standard shipped for months naming spacecraft-accessibility when the skill had always been spacecraft-accessibility-support — silently, because a missing skill never loads, so work directed at it just proceeds without it. Offenders get a did you mean hint computed from the catalogue.

2. No document-version pins. The Steelbore Standard v1.42 (§11, §12) is stale the moment any unrelated section changes, and ambiguous besides — a reader cannot tell whether the version means the document or the clause. Clause pins are recognised and allowed (last amended in v1.39, introduced at, retired at, …), because those only move when the section moves.

Scoping decisions worth review

  • Only spacecraft-/microsoft-/gnu- count as skill namespaces — steelbore-* is the palette and theme slug namespace (steelbore-mono, steelbore-high-contrast), which are values, not directories.
  • Three-component versions are exempt, so the Dual-Mode CLI Standard (v1.0.0) — a different document, legitimately versioned — is not caught by a rule about The Steelbore Standard.
  • Changelogs are exempt from both checks: a history legitimately names things that were later renamed.
  • skill-refs: allow suppresses a single line where neither rule fits.

Cross-repo wiring

Wired into the lint job here, and into the Standard's CI in Spacecraft-Software/Standard#24 — that job checks out Construct read-only (both repos public, no token) and runs this same script against the .texi.

The dependency direction is deliberate: the Standard cites the catalogue, so the Standard validates against it. That is the job that would have caught the original bug at its source, and one implementation serves both repos.

Running it found four more drifts, all fixed here

Where Was Actually
steelbore-color-palette/assets/steelbore.toml "Six palettes", §11 pinned v1.35 nine palettes, 17 themes, §11 last amended v1.39
README.md catalogue row same "six palettes … 13 themes", v1.35 same correction
spacecraft-agentic-cli §11 pinned v1.34 pin removed
maintainer-local CLAUDE.md (gitignored, not in diff) v1.25 — nineteen releases behind stopped pinning entirely

The palette asset header had been stale since Tokyo Night and the two Solarized fidelity palettes landed at v1.39.

Regression-tested against the real defects

Case Expected Result
The exact Standard bug (spacecraft-accessibility in Texinfo) fail ✅ fails, with the correct suggestion
The exact brand-guidelines pin (Standard v1.42 (§11 …)) fail ✅ fails
Clause pin (§11 — last amended in v1.39) pass ✅ passes
CLI Standard v1.0.0 pass ✅ passes
Valid skill reference pass ✅ passes

Verification

Description cap, reuse lint, config validation (309 files), the new checker, and the full bundle drift sweep all pass. Two skills' bundles rebuilt.

🤖 Generated with Claude Code

Three of yesterday's four audit findings were cross-reference drift — a skill
name, a §13 claim, a version pin — not rule drift. The description cap and
reuse lint verify a skill in isolation; nothing verified that a skill still
agrees with the catalogue and the Standard around it, so that class was
invisible to CI by construction.

.github/check-skill-refs.py adds two checks:

1. Skill references resolve. A skill id named in prose (`spacecraft-foo` in
   Markdown, @code{spacecraft-foo} in Texinfo) must exist as a skill directory.
   The Standard shipped for months naming spacecraft-accessibility when the
   skill had always been spacecraft-accessibility-support, and nothing
   complained because the failure is silent: a missing skill never loads, so
   work directed at it just proceeds without it. Offenders get a "did you mean"
   hint computed from the catalogue.

2. No document-version pins. "The Steelbore Standard v1.42 (§11, §12)" is stale
   the moment any unrelated section changes, and ambiguous besides — a reader
   cannot tell whether the version means the document or the clause. Clause
   pins are recognised and allowed ("last amended in v1.39", "introduced at",
   "retired at", …), because those only move when the section moves.

Scoping decisions worth review: only spacecraft-/microsoft-/gnu- are treated as
skill namespaces, since steelbore-* is the palette and theme slug namespace;
three-component versions are exempt so the Dual-Mode CLI Standard (v1.0.0) is
not caught by a rule about The Steelbore Standard; changelogs are exempt from
both checks because a history legitimately names things that were later renamed;
and `skill-refs: allow` suppresses a single line where neither rule fits.

Wired into the lint job here, and into the Standard's CI in a companion PR —
that job checks out Construct read-only (both repos are public, no token) and
runs this same script against the .texi. The dependency direction is deliberate:
the Standard cites the catalogue, so the Standard validates against it. That is
the job that would have caught the original bug at its source.

Running it turned up four more genuine drifts, all fixed here:

- steelbore-color-palette/assets/steelbore.toml said "Six palettes" and pinned
  §11 at v1.35. There are nine palettes and 17 themes, and §11 was last amended
  at v1.39 — the header comment had been stale since Tokyo Night and the two
  Solarized fidelity palettes landed.
- README.md's catalogue row repeated the same "six palettes ... 13 themes" and
  the v1.35 pin.
- spacecraft-agentic-cli pinned §11 at v1.34.
- The maintainer-local CLAUDE.md (gitignored, not in this diff) pinned v1.25 —
  nineteen releases behind. Rephrased to stop pinning at all, since the
  constitution skill carries the current version in its own masthead.

Regression-tested against the two real defects: the exact Standard bug and the
exact brand-guidelines pin both fail; a clause pin, a three-component CLI
Standard version, and a valid skill reference all pass.

Description cap, reuse lint, config validation, the new checker, and the full
bundle drift sweep all pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
@chatgpt-codex-connector

Copy link
Copy Markdown

You have reached your Codex usage limits for code reviews. You can see your limits in the Codex usage dashboard.
To continue using code reviews, you can upgrade your account or add credits to your account and enable them for code reviews in your settings.

@UnbreakableMJ
UnbreakableMJ merged commit 763d07e into main Aug 5, 2026
3 checks passed
@UnbreakableMJ
UnbreakableMJ deleted the ci-skill-ref-checker branch August 5, 2026 09:50
UnbreakableMJ added a commit to Spacecraft-Software/Standard that referenced this pull request Aug 5, 2026
This document cites skills by id, but the catalogue lives in Construct, so
nothing here could tell whether a cited skill exists. It shipped for months
naming `spacecraft-accessibility` when the skill had always been
`spacecraft-accessibility-support` (fixed in v1.44, #23) — silently, because a
missing skill does not announce itself; it simply never loads, and §18 work
directed at it proceeds without it.

The new `skill-refs` job checks out Construct read-only — both repos are
public, so no token and `persist-credentials: false` — and runs Construct's
`.github/check-skill-refs.py` against the .texi and its .md companion.

The dependency direction is deliberate: this document cites the catalogue, so
this document validates against it. One implementation serves both repos rather
than a copy drifting on each side, which is the same failure this job exists to
prevent.

`--no-version-check` is passed: the checker's second rule bans Standard
document-version pins in skills, but this document's own masthead version is
the one legitimate pin in the ecosystem.

Companion to Spacecraft-Software/Construct#30, which adds the script and wires
the same checks over the catalogue itself. That PR is merged, so the script is
on Construct's main and this job can find it.

Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant