Skip to content

SpecFerret 0.1.4

Choose a tag to compare

@BenGardiner123 BenGardiner123 released this 09 Apr 11:20

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 reporun 24218834579: 12/12 ✓
bmad reporun 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.