Captures Phase 4 exit per phase4-plan.md §6 + §11. Mirrors
phase3-evidence.md shape: one section per gate, "What this proves"
roll-up, then each §11 done-criterion cited green.
Verified locally (gate outputs in the evidence doc):
* pytest profile/build/ — 51/51 green
* make catalog — byte-idempotent regen
* make validate-catalog — schema-strict OK
* make handshake — 8/8 steps
* make recipes-check — 4/4 clean
* uvx --from git+...@v0.1.0 m-dev-tools-mcp --tool route_intent
--query "parse JSON in M" → ["module:m-stdlib#STDJSON"]
(the parent-plan exit criterion, end-to-end from a fresh clone)
All nine §11 done-criteria cited green:
1. m-dev-tools-mcp repo public AGPL-3.0 + full Phase-0 contract (PR
#1)
2. server.py exposes 3 TDD-covered tools (PR #2 — 30 dedicated
cases)
3. v0.1.0 GitHub Release with 23-KB pure-Python wheel attached
(Track D2)
4. tools.json carries the entry with repo_meta_url + mcp_tools_url +
release_wheel_url (.github PR #27)
5. task_index.json has infra.agent_integration → tool:m-dev-tools-mcp
(.github PR #27)
6. examples/claude-code/ has .mcp.json + README + smoke.sh +
session.md template (PR #3)
7. This evidence file (PR — current)
8. uvx canonical round-trip green (run captured above)
9. CI green on every Phase 4 PR
Phase 5 (continuous enforcement) unblocked. PyPI publishing remains
deliberately deferred.
Two out-of-scope follow-ups noted in the evidence doc:
* validate-repo-meta.py UTF-8-decode bug on binary release-wheel
exposes URLs (use --no-resolve until fixed)
* 3 Phase-3-era orphan schema fixtures gitignored but still on
disk; auto-classifier blocks rm
Summary
Track E of phase4-plan.md §6. Phase 4 close-out — ships docs/phase4-evidence.md capturing clean runs of every gate plus the parent-plan exit criterion (canonical-query round-trip from a fresh uvx --from git+...@v0.1.0 install).
Evidence captured
All nine §11 done-criteria cited green
Out-of-scope follow-ups (noted in evidence doc)
Test plan
Phase 5 (continuous enforcement) unblocked after this merges.