v0.17.12 — bugfix rollup + parallel-review hardening
Bugfix rollup release from the 2026-04-24 γ Scottish showcase Part 1 session (dogfood of Vulca's brainstorm → spec → plan triad on a real Scottish street → Song-dynasty gongbi additive overlay), validated against parallel superpowers:code-reviewer + Codex review of PR #17.
Fixed
- openai_provider: gate
input_fidelity/quality/output_formatby per-model capability (#12) —gpt-image-2GA rejectedinput_fidelityunconditionally before this fix. - openai_provider: capture actual
cost_usdfromresponse.usage(#12); log at INFO when a model has no pricing entry instead of silently returning None. - openai_provider: normalize
qualityvocabulary across model families — DALL-E-3 receives `"standard"/"hd"` while gpt-image-* keeps `"high"/"auto"/"medium"/"low"` (post-review hardening). - prompting: `compose_prompt_from_design` now handles `tradition: null` (a valid resolved-design state) and reads frozen `C.tradition_tokens` from the artifact when present rather than re-deriving from the live registry (post-review hardening — the artifact is the source of truth for a resolved spec).
- mcp_server: `compose_prompt_from_design` MCP wrapper raises an actionable error when given a relative path that does not resolve against the server CWD (post-review).
- [sam] extra: pulls `segment-anything` + `timm>=1.0` so the orchestrated decompose pipeline imports cleanly; see `docs/INSTALL-RECIPE.md`. Critical: do NOT install `[sam,sam3]` together — `transformers==4.49` vs `>=4.50` hard pin conflict; pick one extra per environment until v0.18.
Added
- MCP tool `compose_prompt_from_design` (#13) — expose Vulca's structured prompt-composition value standalone for non-MCP consumers. Also re-exported as `from vulca import compose_prompt_from_design` for SDK usage.
- `evaluate_artwork` `mode="rubric_only"` (#14) — agent-native scoring without VLM backend dependency (consumer agents already have vision).
- `evaluate_artwork` `vlm_model` runtime kwarg (#15) — bypass `VULCA_VLM_MODEL` env + MCP restart for runtime provider switching.
Provenance
- 4 issue fixes implemented by Codex (task-modjrdmx-br2641, 9m 34s background dispatch).
- Foundation commit `6e5c38bc` (segment-anything + timm dep gap) closed orchestrated-pipeline import gap surfaced in showcase Part 1 sanity-check.
- 2 post-review fix commits added regression tests (`design_null_tradition.md` + `design_with_artifact_tokens.md`) so the P1 paths can not silently re-regress.
A/B evidence
The session captured the data point that motivates #13: same `gpt-image-2` API, same source photo, same target intent — Vulca-mediated structured prompt produces additive gongbi overlay (photo preservation honored); bare-curl with naive prompt produces unified-wash filter. That is the buyable differentiator.
Install
```bash
pip install vulca==0.17.12
```
For the full orchestrated decompose pipeline:
```bash
pip install "vulca[sam,mcp,layers]==0.17.12"
```
(See `docs/INSTALL-RECIPE.md` for SAM checkpoint + MCP-Python setup.)