T-UDY1-retire-invariants-yaml-sidecars
Status: closed/done · Impact: medium · Complexity: small
The contract now supersedes the sidecars, so remove the 14 per-skill
invariants.yaml files and migrate the test surface that fed the old
matcher onto the new path: the prose-fixtures/ cases and the
check_skill_prose.test.ts assertions. The migration must preserve
coverage — a regression the old linter caught must still fail on the
contract path.
| Location | Role today |
|---|---|
plugin/skills/*/invariants.yaml | The 14 sidecars the contract now supersedes; once removed, the per-skill constraint source is the contract alone |
.claude/skills/project-check/tests/prose-fixtures/ | Fixture skills (clean, forbidden-phrase, missing-h2, missing-phrase, missing-tool-ref, no-invariants) that fed the old matcher |
.claude/skills/project-check/tests/check_skill_prose.test.ts | Assertions over the fixtures; must run against the contract path after migration |
Approach
Section titled “Approach”The contract is the constraint source now, so retire the data files and the fixtures that fed the old matcher.
- Delete the 14
plugin/skills/*/invariants.yaml— the op already ignores them after T-6OS7. - The fixture set
.claude/skills/project-check/tests/prose-fixtures/is orphaned: no.tsreferences it (the activecheck_skill_prose.test.tsbuilds inline/tmpfixtures). Delete it; coverage now lives in the contract unit test (T-FQFJ). - Repoint the wrapper
check_skill_prose.ts: its coverage summary partitions skills by “has siblinginvariants.yaml”, which is now always-false. Reframe it as “covered by the contract” or reduce it to a plain count; keep the<path>:<line>and exit-code passthrough. - Grep to confirm no code or live doc still references
invariants.yamlas an active mechanism (historical task files are fine; the standards / notes are T-DNGZ).
Files to touch
Section titled “Files to touch”| Location | Kind | Change |
|---|---|---|
plugin/skills/*/invariants.yaml | delete | Remove the 14 per-skill sidecars; constraints live in the contract |
.claude/skills/project-check/tests/prose-fixtures/ | delete | Orphaned fixture tree (no .ts references it); the contract unit test is the coverage home |
.claude/skills/project-check/check_skill_prose.ts | modify | Repoint the coverage summary off the removed sibling-invariants.yaml partition; keep path / exit passthrough |
Acceptance criteria
Section titled “Acceptance criteria”- AC-1: All 14
invariants.yamlfiles are removed; no code or live doc references them as an active mechanism. - AC-2: The orphaned
prose-fixtures/tree is removed (or folded into the contract unit test); the wrapper’s coverage summary no longer keys on siblinginvariants.yaml. - AC-3: Coverage is preserved, not just relocated — the contract unit test (T-FQFJ) still fails on a known regression (a forbidden phrase or a removed required phrase).
- AC-4: The lefthook skill-prose gate runs green after the sidecars are removed.
Out of scope
Section titled “Out of scope”- Updating standards, the skills
CLAUDE.mdnote, or backlogB-DHKB— the final task. - Any change to the contract authoring or the gate op.
Dependencies
Section titled “Dependencies”- T-LNHL-delete-skill-prose-custom-matcher — the matcher that read the sidecars must be gone before the sidecars are removed.
Depends on
Section titled “Depends on”T-LNHL-delete-skill-prose-custom-matcher