Spec Consult
PROACTIVE TRIGGER: Invoke this skill automatically whenever you are about to:
- Modify or add interfaces between layers/modules
- Add new components to an existing domain
- Change behavior documented in a spec
- Modify architectural boundaries or import rules
- Add a new extension point, plugin, or provider
- Change configuration schema or defaults
- Modify event contracts, protocols, or data flow
Do NOT skip this step even if you think you know the system well. Specs may contain invariants or constraints not obvious from code alone.
Procedure
Step 1 — Locate the spec system
Find the project's specification root. Look for:
specs/directory at the repository rootspecs/INDEX.md— the navigation filespecs/META.md— format and rules reference
If no specs/ directory exists, inform the user that no specification system was found and proceed without spec consultation.
Step 2 — Identify relevant specs via INDEX.md
Read specs/INDEX.md. It contains a task-to-spec mapping table. Match your current task against the table entries.
Rules for matching:
- Match broadly — if your task touches a domain, read that domain's specs even if you're only changing one function.
- If your task crosses layer boundaries, also read the relevant contract spec.
- If unsure, read the domain README first — it provides an overview and points to detail files.
Step 3 — Read specs in order
Follow this reading order for maximum understanding:
1. Domain README (overview, invariants, extension points)
↓
2. Detail file for the specific component you're changing
↓
3. Contract spec (if your change crosses a boundary)
↓
4. Architecture spec (if touching layers, security, or data flow)
Step 4 — Extract constraints
From the specs you read, extract and keep in working memory:
- Invariants — rules that must ALWAYS hold (stated affirmatively in specs)
- Extension points — the documented way to add new behavior
- Anti-patterns — what explicitly NOT to do
- Breaking change checklists — from contract specs, "if you change X, also update Y"
Step 5 — Proceed with implementation
Only after extracting constraints, proceed with the implementation. Keep invariants visible — if any planned change would violate an invariant, stop and discuss with the user.
After Implementation
After completing your changes, determine whether any spec needs updating:
- Did you change documented behavior? → Update the domain spec
- Did you add/remove/rename an interface? → Update the contract spec
- Did you add a new component? → Update the domain README's catalog/table
- Did you make an architectural decision? → Consider creating an ADR
If specs need updating, invoke the vibespec-update or vibespec-create skill as appropriate.
Edge Cases
- No INDEX.md found: Look for any navigation file or README in
specs/. If nothing exists, report to the user. - Spec seems outdated: Note the discrepancy but do NOT silently fix it during a code change task. Mention it to the user — they may want to invoke
vibespec-check. - Task doesn't match any INDEX entry: Read the most closely related domain README. If truly no spec covers your area, mention this to the user — a new spec may be needed.