skills-integrity lint: retired namespaces, dead skill paths, frontmatter drift - #1046
Merged
Merged
Conversation
…ter drift (#1045) Zero-dep CLI at packages/extension/scripts/lint-skills.mjs: - amico-plugin: retired namespace refs (F09) — error - companion: dead companion files, resolved conservatively inside the skill's own dir (markdown-link .md targets + backticked paths with a directory component; placeholders, escapes, URLs skipped) — error - frontmatter: name != dir, surface outside {public,internal,entitled} — error; unknown agents: values — warning only (ontology sweep is a later slice) - refuses a --dir containing workspaceStorage (spec O1: the deployed copy is a build artifact, never a source) --known escape hatch (scripts/lint-skills-known.txt) carries the exact current occurrences (14 companion refs across 4 skills — cross-tree project paths the lint cannot mechanically resolve), so today's tree exits 0 while new occurrences fail. lint:skills package script added. No CI wiring (spec O3); no mode-card edits (spec O4); no SKILL.md content changes. Closes #1045
|
Important
This repository does not receive automatic reviews because it has fewer than 10 stars. ⚙️ Run configurationConfiguration used: defaults Review profile: CHILL Plan: Advanced Run ID: Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
jeonghun-jj-lee
force-pushed
the
main
branch
from
September 13, 2026 14:20
88fb5da to
ea68825
Compare
aarontrowbridge
marked this pull request as ready for review
September 13, 2026 21:02
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1045.
What
Standing teeth for the skill-integrity loop (spec
spec-20260913-skill-integrity-loop): a zero-dep CLI lint atpackages/extension/scripts/lint-skills.mjsplus a vitest suite (test/skills_integrity.test.ts) and alint:skillspackage script.Rules
amico-pluginamico-plugin:*namespace refs (F09)companion.mdtargets + backticked paths carrying a directory component; placeholders (<...>,{...},*),..escapes, absolute and URL refs are not resolved (conservative by design)name/surfacename:≠ directory;surface:outside {public, internal, entitled}agentsExit codes follow the
skill_drift_lintcontract: 0 ok (warnings/known allowed), 1 errors, 2 usage/pre-flight.Decisions recorded (per the issue's acceptance note)
--dircontainingworkspaceStorageis refused outright (exit 2) — the deployed copy is a build artifact, never a source.--knownescape hatch (scripts/lint-skills-known.txt) carries the exact current occurrences: 14 unique companion refs across 4 skills (develop,migrate-research-project,paper-writer,research) — backticked cross-references to other trees (project scaffolding likedocs/*.md,ledger/*, the opencode agent card) that cannot be mechanically resolved. Format ispath:rulewith an optional:refthird segment (small extension over the issue'spath:rule) so exemptions pin the exact referenced path and a new dead ref in the same file still fails. Unknown rule names in the file exempt nothing (typo-safe).amico-plugin:refs (the onlyamico-pluginstrings are backticked repo names in provenance notes — no colon, not the namespace). F09's offenders (code-review,finishing-branch,parallel-agents) live in the deployed workspaceStorage copy, which the lint refuses to scan by design. The rule is still the standing teeth: any newamico-plugin:ref fails.--dir(e.g.armonissima/skillsvia dream — cadence-based per spec O2);--jsonoutput feeds the findings ledger.Out of scope (per the issue)
No SKILL.md content changes; no CI wiring (spec O3 — local bash gate until the fleet-boundary wave lands); no
packages/extension/modes/edits (spec O4).Tests
pnpm --filter amicode exec vitest run test/skills_integrity.test.ts— 6/6 green: fixture RED (plantedamico-plugin:ref, dead companions, name/surface drift, unknown agent warning), known-exemption pass/fail matrix, workspaceStorage refusal, and green over the real tree with the checked-in known list.Full suite
pnpm --filter amicode test: 3394 passed; the 6 failures (chat_bridge ×2, service_runner, cli_gate, skill_drift_lint fleet-regressions ×2) reproduce identically on pristine origin/main in this worktree — pre-existing environment dependencies (staged bins, vendored engine binary, fleet packages), not this change.