v0.17.8 — MCP metadata forward fix + 12-item clarity patch
Summary
Bug fix + clarity-gap backlog closure release. Two coupled changes:
1. MCP generate_image metadata forwarding (BUG FIX)
v0.17.6 landed mock-provider echo of `seed/steps/cfg_scale/negative_prompt` into `ImageResult.metadata`, but the MCP wrapper at `src/vulca/mcp_server.py:1216-1221` only extracted `cost_usd` and dropped everything else. Meaning: agents calling MCP could never actually observe the 4 new kwargs round-trip — the v0.17.6 feature was half-shipped.
Surfaced by /visual-plan Layer C v2 live ship-gate on 2026-04-23. Fix is a 1-line addition: `"metadata": dict(result.metadata) if result.metadata else {}` in the return dict. Backward-compat: additive; existing 4-key callers unaffected.
2. /visual-plan SKILL.md clarity patch (12 items)
All 13 clarity-gap candidates from v0.17.7 Layer C v2 (8 items) + v0.17.5 Layer B simulated (5 items) folded in. One item absorbed into `_version.py` fix. Notable:
- §Handoff 8 → 9 variants: Err #16 content-guard abort split from user-interrupt for downstream grep.
- `evaluate_artwork` dimensions shape pinned: mock flat-float vs live nested-dict contract with unwrap recipe.
- MCP metadata agent-hint: Phase 3 pseudocode now notes mock provider echoes MCP kwargs for round-trip verification.
- Phase 1 tightenings: slug path convention (reject `/` and absolute), traceback guard on Err #1, FIRST-violation precedence on Err #4 (tradition wins over domain), Err #3 + fresh-lockfile rule, stale-lock K=0 semantic.
- Phase 2 tightenings: Err #8 Write suppression bold, "compact form" definition (`[unchanged sections: …]` 1-liner), redundant-Write symmetry note.
- Phase 4: overage_pct negative formatting (`"under budget (-%)"` vs raw `-0.9988`).
- Iter `` semantic paragraph: aborted variants 7-9 use K = iter_idx that WOULD have run.
3. Stale _version.py drift fix
`src/vulca/_version.py` had been stuck at `"0.15.1"` since v0.15.1; `pyproject.toml` was authoritative. `python -c "import vulca; print(vulca.version)"` now correctly reports `0.17.8`.
Test coverage delta
- New: `test_mcp_wrapper_passes_metadata_through` + `test_mcp_wrapper_metadata_backward_compat_empty_dict` — covering the wrapper-level contract that direct-provider tests missed.
- 1917 passed full-repo (+2 from v0.17.7 baseline) + 12 pre-existing baseline failures (unchanged).
Backlog status
Clarity-gap backlog from v0.17.5 + v0.17.7 ship-gates: CLOSED. All 13 items folded.
Install
```bash
pip install vulca[mcp]==0.17.8
```
Or via uvx in Claude Code MCP config:
```json
{"mcpServers": {"vulca": {"command": "uvx", "args": ["--from", "vulca[mcp]==0.17.8", "vulca-mcp"]}}}
```