Skip to content

v0.17.8 — MCP metadata forward fix + 12-item clarity patch

Choose a tag to compare

@yha9806 yha9806 released this 23 Apr 20:16

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"]}}}
```