---
summary: "fuzzTool Phase 1 pre-parse, ZodArray minLength, fast-check → optional peer dep, packaging cleanup"
breaking: false
security: false
---

# 0.9.9 — 2026-05-24

## Fixed

- **fuzzTool/fuzzResource/fuzzPrompt Phase 1** now pre-parses generated inputs through `def.input.safeParse()` before passing to handlers, matching production semantics where the framework parses at the call boundary. Resolves false-positive crashes from unresolved `.default()` values and unmet `.min()` constraints (#83).
- **`zodNodeToArbitrary` ZodArray** reads `minLength` from the schema and passes it to `fc.array()`. Arrays declared with `.min(N)` no longer generate empty arrays during fuzz Phase 1 (#83).
- **fuzzTool Phase 4** (aborted signal) pre-parses the generated sample before passing to the handler.

## Changed

- **`fast-check`** moved from `devDependencies` to optional `peerDependencies`. Consumers importing `@cyanheads/mcp-ts-core/testing/fuzz` now get an install-time hint instead of a runtime `Cannot find package` crash. Top-level value import converted to lazy `import('fast-check')` via exported `loadFc()` helper (#83).
- **`scripts/split-changelog.ts`** removed from `package.json` `files:` — one-shot migration script with no consumer value (#118).
- **`scripts/check-framework-antipatterns.ts`** file header clarified to document consumer-side rationale (#118).
- **Core rule: "Close the loop on issues"** added to `CLAUDE.md`, `AGENTS.md`, and `templates/CLAUDE.md`.
