feat(skills): skill-flow connectivity gate + closed consumes vocabulary#597
Merged
Conversation
…ulary Answers "do all skills flow together?" with an enforceable gate. Skill dependencies were declared across three overlapping frontmatter fields (consumes / context_rel / metadata.dependencies) that drifted apart and were never reconciled — and the generated context-map ignored metadata.dependencies entirely. Nothing checked connectivity or constrained the consumes vocabulary. - scripts/validate-skill-flow.sh: new gate. Closes the consumes vocabulary (every token must resolve to a skill slug, a whitelisted external input, or a produced artifact), checks metadata.dependencies resolution, and detects orphans across all three edge layers. Reports (non-fatal) consumes vs metadata.dependencies disagreement and dead-end artifacts. - scripts/skill-flow-standalone.txt: allowlist of 14 intentionally-standalone leaf skills (boundary adapters, orchestration/install, explainers) with rationale per entry. - Wire 6 previously-disconnected skills via context_rel: deps/red-team -> vibe, provenance <-> trace, scenario -> validation, release -> ship-loop. Regenerated docs/contracts/context-map.md. - docs/contracts/skill-flow.md: contract doc; linked in documentation-index. - validate.yml: new validate-skill-flow CI job, registered in summary needs. - tests/scripts/validate-skill-flow.bats: 11 acceptance tests.
…nectivity-09HmV # Conflicts: # .github/workflows/validate.yml
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.
Do all skills flow together?
No — not until this PR. Investigating the question surfaced a structural gap: skill dependencies are declared across three overlapping frontmatter fields that drifted apart and were never reconciled, and nothing enforced connectivity or constrained the
consumesvocabulary.consumescontext_relmetadata.dependenciesFindings (76 skills):
consumes(skills) ≠metadata.dependencies— the two skill-slug fields disagree.context-map.mdignoredmetadata.dependenciesentirely (34 skills, the richest layer).push,session-bootstrap) with zero skill-to-skill edges — silently.consumeswas an open free-text field: no check that a token resolves to anything.scripts/audit-skill-metadata.shalready flagged theconsumes-vocabulary and connectivity checks as "discovered follow-ups, not enforced." This is that follow-up.What this PR does
1. Connectivity gate —
scripts/validate-skill-flow.sh(+validate-skill-flowCI job):consumesvocabulary: every token must resolve to a skill slug, a whitelisted external input (repo-context,external-api,bd,github-pr,onboard), or an artifact some skill produces. Catches typos/undeclared deps.metadata.dependenciesresolution: every entry must name a real skill.2. Wire the genuine-gap edges — added
context_relfor 6 disconnected skills and regeneratedcontext-map.md:deps→vibe,red-team→vibe(mirrorssecurity/security-suite)provenance↔tracescenario→validationrelease→ship-loop3. Close the vocabulary — the closed
consumesnamespace is enforced by the gate and documented indocs/contracts/skill-flow.md(linked indocumentation-index.md). 14 intentionally-standalone leaves are allowlisted inscripts/skill-flow-standalone.txtwith a rationale per entry.Verification
validate-skill-flow.sh: exit 0 ✅validate-context-map-drift.sh: exit 0 ✅check-contracts-structural-floor.sh: PASS (contract cataloged) ✅tests/scripts/validate-skill-flow.bats(bats not installed locally; exercised via manual smoke + will run in CIbats-tests).Bounded-context: BC1-Corpus
Evidence: OK: skill flow is connected and the consumes vocabulary is closed.
Generated by Claude Code