Contract Validate Skill
Validate a skill chain before running it — check that every requires: input is satisfied by an upstream ensures: output or declared as an external input.
Triggers
- "validate the contract chain for [skill1] → [skill2]"
- "check if this workflow is wired correctly"
- "will [skill] have everything it needs?"
- "pre-flight check the skill chain"
- "validate workflow contracts"
Parameters
Skills list (positional)
Ordered list of skill names to validate as a chain:
/contract-validate issue-planner address-issues
/contract-validate prose-detect prose-run
--workflow <file> (optional)
Path to a YAML workflow definition listing the skill chain.
--external input1,input2 (optional)
Comma-separated names of inputs that will be provided by the calling workflow or user. Any requires: that matches an external input is treated as satisfied.
/contract-validate issue-planner address-issues --external objective,tracker
--strict (optional)
Treat semantic matches as failures (require exact name matches). Default: semantic matches pass with warnings.
Behavior
Step 1: Resolve and Extract Contracts
Same as contract-manifest Step 1–2: resolve each skill, extract contract fields.
Step 2: Validate Each Requires:
For each skill's requires: entry:
- Satisfied by external input (
--externallist) → ✓ SATISFIED (external) - Satisfied by exact match (upstream
ensures:same name) → ✓ SATISFIED - Satisfied by semantic match (upstream
ensures:same meaning, different name) → ⚠️ WARN (semantic) - Not satisfied (nothing provides it) → ❌ UNRESOLVED
Step 3: Determine Verdict
| Condition | Verdict |
|---|---|
All requires: satisfied (exact or external) |
VALID |
All requires: satisfied but some are semantic matches |
VALID WITH WARNINGS |
Any requires: unresolved |
INVALID |
| No contract fields found on any skill | NO CONTRACTS (cannot validate) |
Step 4: Output Report
## Contract Validation Report
**Workflow**: issue-planner → address-issues
**Verdict**: VALID WITH WARNINGS
### Skill: issue-planner
| Requires | Source | Status |
|----------|--------|--------|
| objective | external | ✓ satisfied (external) |
| tracker | external | ✓ satisfied (external) |
### Skill: address-issues
| Requires | Source | Status |
|----------|--------|--------|
| issues | issue-planner.issues-filed | ⚠️ semantic match (name differs — verify intent) |
| tracker | issue-planner.tracker | ✓ satisfied (exact match) |
### Warnings (1)
- `address-issues.requires.issues` satisfied by `issue-planner.ensures.issues-filed` via semantic match.
If these are not equivalent, rename one to match or add an explicit mapping.
### Errors (0)
None
### Recommendation
Workflow is likely correct. Confirm that `issue-planner.issues-filed` and `address-issues.issues` refer to the same thing. If so, rename one for an exact match to eliminate the warning.
Using in CI / Pre-Flight
Before running a multi-skill orchestration, validate the chain:
/contract-validate issue-planner address-issues --external objective tracker
# → VALID — safe to proceed
# → INVALID — check report before running
Relationship to contract-manifest
contract-manifest— generates a full manifest for human inspectioncontract-validate— gives a pass/fail verdict for pre-flight checks
Use contract-manifest to understand a workflow; use contract-validate to gate its execution.
Model
Runs on Sonnet — contract matching is structural analysis, not complex reasoning.
References
- @$AIWG_ROOT/agentic/code/frameworks/sdlc-complete/README.md — SDLC framework context and skill catalog
- @$AIWG_ROOT/agentic/code/addons/aiwg-utils/rules/vague-discretion.md — Measurable validation verdicts and criteria
- @$AIWG_ROOT/agentic/code/addons/aiwg-utils/rules/research-before-decision.md — Research-first for contract dependency resolution
- @$AIWG_ROOT/docs/extensions/overview.md — Extension system and skill architecture
- @$AIWG_ROOT/docs/cli-reference.md — CLI reference