Convergence wave: bind provenance on the real audit path; dashboard favicon + honest sub-cent cost
2026-08-28
LOCKSTEP TRACEABILITY MATRIX --- api_endpoints: ["POST /v1/chat/completions (evidence_mode:required now binds provenance on the real audit path)"] sdk_methods_updated: ["none — handler-internal + frontend/CDN"] mcp_tools_updated: ["none"] ---
What We Built
The final convergence push against the two round-6 blockers that a prior wave only partially closed.
Provenance binding on the REAL audit path (compliance). The round-6 attempt force-bound the wrong lineage row: it patched model-router.captureCompletionLineage, whose output is _discarded_ on the non-streaming allow path. The audit row that POST /v1/governance/audit/verify actually reads is written by recordCompletionAudit (non-streaming.ts) with no provenance param → an EMPTY_PROVENANCE_STAMP → a null committed lineage_digest → verify returns incomplete. Now, when the resolved requirement's evidenceMode is required/strict (read via the same getDataProtection(c)?.snapshot.requirement accessor that already drives the evidence-coverage header in prod), the handler re-captures a bound lineage row and threads it into the audit write, so verify recomputes a matching digest and returns summary: verified. Proven end-to-end through commit + verify in a new test. (Streaming remains a documented residual — it never captures completion lineage.)
Dashboard favicon via the Cloudflare Worker (dashboard). The favicon served the 506KB SPA index.html because the Worker's /dashboard/ SPA catch-all matched /dashboard/favicon.. Added a static-asset rewrite above the fallback so /dashboard/*.{svg,ico,png,css,js,woff2,…} resolve to their real S3 object. The prior vercel.json edit was inert — the Worker fronts S3, not Vercel.
Honest sub-cent cost. The dashboard's formatUsd truncated $0.000045 to $0.0000 (reads as free). Now sub-cent values show ~2 significant figures with a <$0.00000001 floor, so a real charge never renders as $0.00.
Why It Matters
evidence_mode: required now delivers what it says: an independently recomputable provenance record, not a receipt over an unbound decision. And a compliance product's dashboard can no longer render a real charge as free.
Lockstep Checklist
- [x] API Routes: no route surface change (handler internals only).
- [x] SDK / MCP: none.
- [x] Deploy: API via ECS; dashboard SPA via
deploy-site; **Worker via
wrangler deploy** (separate pipeline — required for the favicon fix).
Open Follow-ups
- Streaming completions don't capture provenance lineage (broader gap).
- Observability cross-task config persistence (writes honest-503, feature down).
- Circuit-breaker fast-fail; router 9→10 residuals;
/attestation verified:false; PyPI token.