v0.11.0
What's New
Fixes the long-standing "Acceptance rejected: Structured acceptance report not found" failure for pi-subagents delegation through the proxy. Local models (Qwen3.5-9B) were emitting the acceptance report as bare JSON; Pi's runtime only accepts fenced code blocks, so every delegated run was rejected — even when the work was correct.
- New
proxy/acceptance.py—wrap_bare_acceptance_report()detects bare acceptance-report JSON in the model's text response and wraps it in the fencedacceptance-reportblock Pi parses. Mirrors Pi's own field set and balanced-JSON extraction, so it only fences objects Pi will accept. Wired into both text-return paths inhandler.py. - Acceptance prefill id-seeding —
SafeLlamafileClient._resolve_acceptance_prefill()now parses the contract's real criterion id from the finalization nudge and seeds it in the prefill, so the model'scriteriaSatisfiedid matches the contract (was copying the example's genericcriterion-1→ "Required criterion X was not reported"). - Verified end-to-end: delegation through the proxy now returns a clean ACCEPT.
Tests: 436 unit tests (+15 new: test_acceptance_wrap.py ×12, test_acceptance_prefill.py ×3).