You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
ci(spec): gate generated reference docs, and un-dormant the sibling generated gates
content/docs/references/** is generated from packages/spec and committed, but no CI
job ever regenerated and diffed it — `grep -rlE "gen:docs|gen:schema" .github/workflows/`
returned nothing. So the public reference docs drifted silently while main stayed
green: #3076 added RowCrudActionOverride to the spec and the docs never learned the
type existed. The parent commit regenerates; this one stops it recurring.
build-docs.ts --check
Follows the sibling convention (check:skill-docs / check:api-surface / …). Every
write now goes through emit() and every wiped folder through manageDir(), so both
modes run identical generation logic and differ only in the final disposition —
write, or compare. That shared path is what makes the gate trustworthy: it cannot
pass on output a real run would not produce. Verified output-identical to the
previous generator (byte-for-byte across all 258 files).
Catches all three drift classes, each proven to fail before being trusted:
stale content (the #3076 case), a missing page, and a page left behind by a type
removed from spec. The last two are why this is not `git diff --exit-code`: that
misses untracked files. json-schema/ is gitignored, so `check:docs` runs gen:schema
first and a run that finds no schemas errors rather than passing vacuously.
Placement
In lint.yml's "TypeScript Type Check", not ci.yml's "Build Docs". Build Docs is
gated on a `docs` paths-filter that excludes packages/spec/**, so it skips exactly
the spec-only PRs that cause this drift — #3076 was one. The typecheck job has no
paths filter and is a required status check, so the gate cannot go dormant. It reads
src/ + json-schema/ via tsx and needs no build, so it runs before the workspace
build and fails in ~2s.
Same hole found in the sibling job (fixed here, both currently in sync but unguarded):
- check:spec-changes / check:upgrade-guide read the ADR-0087 registries and the
protocol version, but ran under a filter listing only skills/** — a protocol bump
or new migration could not trigger the job that verifies them.
- the filter watched content/docs/guides/skills.mdx, a path #2584 moved; hand-edits
to the real generated block in content/docs/ai/skills-reference.mdx went unchecked.
Job renamed check-skill-docs → check-generated: it has guarded the protocol
artifacts for a while, and a name that hid them is part of why their paths went
missing from the filter.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
0 commit comments