Skip to content

#1197 Report the retired harnesses: frontmatter key from validate - #1204

Merged
williamthorsen merged 3 commits into
mainfrom
1197
Aug 5, 2026
Merged

#1197 Report the retired harnesses: frontmatter key from validate#1204
williamthorsen merged 3 commits into
mainfrom
1197

Conversation

@williamthorsen

@williamthorsen williamthorsen commented Aug 5, 2026

Copy link
Copy Markdown
Owner

What

codeassembly validate now reports every skill whose frontmatter still declares the retired harnesses: key instead of supported-harnesses:, and exits non-zero.

This is a safeguard for the recent retirement of the old key. Use of the old key in a skill's declaration would have silently deployed to every harness.

Why

The rename to supported-harnesses: left the bare harnesses: key as valid YAML that nothing reads. A skill still carrying it loses its harness narrowing and ships the dead key into every harness's installed copy, and neither failure raises anything anywhere — the author's only signal is noticing the skill somewhere it should not be. codeassembly.yaml uses harnesses: as a real key of its own, so the confusable write is easy to reach for.

Details

🎉 Features

  • validateContentRoot gains a harness-independent pass over every skill the content root owns, carried by a new frontmatter defect kind. The report names the offending file and the key to rename to, and rides the command's existing non-zero exit.
  • The check is value-blind: a bare harnesses:, a scalar, and a list all report, since the key's presence is what survives into deployed output regardless of what it holds.
  • Skills resolved from the built-in library are skipped. Their content-root-relative path would name a file the root does not carry, and renaming a library skill is not its consumer's to do.
  • The pass reads frontmatter through the same parseFrontmatterparseYaml composition the deploy path uses, so validate sees exactly the frontmatter readTargetHarnesses sees.

🧪 Tests

  • Four cases over the pass: a root skill declaring the retired key reports; a skill declaring both keys still reports, so a half-finished rename is not masked; a skill on the current key alone stays clean; and a library skill declaring the retired key, reached through a real dependencies: edge, stays silent. The last fails if the ownership filter is removed.
  • The writeSkill fixture helper gains a retiredHarnesses option that emits the retired key.

📚 Documentation

  • validate was described as checking for defects that would fail at a consumer. That was true of every pass it had; this one reports a defect that fails nowhere. Four sites now say "defects that reach a consumer" — the CLI tables in AGENTS.md and the package README, plus the CLI's own --help text.
  • The package README and the validateContentRoot doc comment each account for the pass that has no sync counterpart, naming what it catches and why nothing else would.

Closes #1197

`codeassembly validate` reports a skill whose frontmatter still declares `harnesses:`, naming the file and the key to rename it to.

Left undetected the retired key fails in two silent ways at once: the skill stops narrowing and deploys to every harness, and the key survives into the deployed `SKILL.md`.
`validate` leaves a library skill's retired harness-narrowing key alone, since only the content root under validation can rename it. Nothing covered that until now: the default library carries no such key, so dropping the ownership check changed no test outcome.
`codeassembly validate` was documented as catching defects that would fail at a consumer. It also catches one that fails nowhere: a skill declaring the retired `harnesses:` key deploys to every harness and carries the key into the deployed file, and the command's documented reach now says so.
@williamthorsen williamthorsen added feature Added or improved external functionality scope:agents labels Aug 5, 2026
@github-actions

github-actions Bot commented Aug 5, 2026

Copy link
Copy Markdown

Dependency audit

Production dependency audit passed.

@williamthorsen williamthorsen self-assigned this Aug 5, 2026
@williamthorsen
williamthorsen marked this pull request as ready for review August 5, 2026 16:37
@williamthorsen
williamthorsen merged commit 187302b into main Aug 5, 2026
3 checks passed
@williamthorsen
williamthorsen deleted the 1197 branch August 5, 2026 16:57
williamthorsen added a commit that referenced this pull request Aug 7, 2026
…ssembly-mcp-v0.2.4 codeassembly-v0.6.0

codeassembly-v0.6.0
- #794 feat: Guide kb-add note placement with the store's declared taxonomy (#1223)
- #1111 feat: Declare which harnesses sync targets (#1221)
- #1214 feat: Allow an artifact to belong to more than one collection (#1219)
- #1186 drop!: Dissolve `common-mistakes` into its consumers' guidance (#1217)
- deps: Upgrade all deps to latest version
- #1203 fix: Bar acceptance-criteria revision prompts to genuine conflicts (#1212)
- #1196 feat: Add the .kb/taxonomy.yaml format with drift reporting and back-fill (#1210)
- #1165 feat: Make a vetted subset of the library declarable (#1207)
- #1197 feat: Report the retired `harnesses:` frontmatter key from `validate` (#1204)
- #963 feat!: Rename the harness id to rovo and qualify the frontmatter key (#1199)
- #1188 drop!: Retire the bundled Bitbucket inline-comment script (#1198)
- #1187 feat: Gate the boolean prefix on a test and add the tail rule it rests on (#1195)

factory-v0.2.4
- deps: Upgrade all deps to latest version
- deps: Upgrade all deps to latest version
- #1209 refactor: Clear factory's remaining lint violations and retire both deferral lists (#1216)
- #1208 refactor: Clear the visualizations lint violations and retire six rule deferrals (#1213)

kb-v0.4.0
- #794 feat: Guide kb-add note placement with the store's declared taxonomy (#1223)
- #1196 feat: Add the .kb/taxonomy.yaml format with drift reporting and back-fill (#1210)

codeassembly-lifecycle-v0.3.0
- #963 feat!: Rename the harness id to rovo and qualify the frontmatter key (#1199)

codeassembly-mcp-v0.2.4
- #1206 refactor: Retire fleet's lint deferrals (#1211)
- #1200 tooling: Retire mcp's lint deferrals and prune the dead root entries (#1205)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

feature Added or improved external functionality scope:agents

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Report the retired harnesses: frontmatter key from validate

1 participant