SpecFerret 0.1.4
Highlights
- Agent mode — \erret init\ now scaffolds canonical agent rules for Claude, Copilot, and Gemini via --agent-targets. Writes .github/specferret/canonical-agent-rules.md\ and .github/instructions/specferret-agent.instructions.md. Use --no-agent-rules\ to skip.
- Default tree-sitter TypeScript extraction — no @ferret-contract\ annotations required. Deterministic TS-to-contract mapping, collision detection, and golden fixture coverage.
- Context schema versioning — \contextSchemaVersion\ in .ferret/context.json\ with automatic baseline migration.
- *\erret diagnostics* — new import graph diagnostics command.
- Perf budget flag — --perf-budget-ms\ on both \erret lint\ and \erret extract.
- CI/review JSON hardening — both \erret lint --ci\ and \erret review --json\ emit \diagnosticsSchemaVersion.
ecommendedAction\ alignment, scan/lint fail-fast, Copilot adapter format.
Bumped package versions
- @specferret/core\ → 0.1.4
- @specferret/cli\ → 0.1.4
Verification
Unit tests
- Local tests: 157/157 passing
Performance gates
- \erret lint --perf-budget-ms 500: 30ms ✓
- CI JSON contract: valid ✓
- Review JSON contract: valid ✓
External validation matrix (12 scenarios × 2 repos)
All 12 scenarios green in both canonical validation repositories.
spec-kit repo — run 24218834579: 12/12 ✓
bmad repo — run 24218835475: 12/12 ✓
Scenarios cover:
- \main\ — clean baseline
- \�reaking-required-field\ — required field removed (breaking, trigger: auth.jwt ✓)
- \�reaking-type-change\ — field type changed (breaking, trigger: auth.jwt ✓)
- \�reaking-required-field-added\ — required field added (breaking, trigger: auth.jwt ✓)
- \ ransitive-impact-depth\ — depth-2 transitive cascade (direct ≥2, transitive ≥1, trigger: auth.jwt ✓)
- \depth-3-chain\ — depth-3 BFS chain proven (maxDepth ≥3, trigger: auth.jwt ✓)
onbreaking-optional-add\ — optional field added (non-breaking)
oop-no-drift\ — property reorder only (clean — hash stable ✓)
eview-resolution-flow\ — post-review clean state- \code-first-extract\ — tree-sitter extract determinism ✓
- \specferret-opinionated-layout\ — canonical layout clean
- \�gent-mode-init\ — agent scaffolding init clean
Breaking scenario assertions verify \lagged[].triggeredByContractId\ — proves WHICH contract triggered drift, not just counts.