You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
fix(proof): explicit UNVERIFIABLE state for gates without runners (#728) (#801)
* fix(proof): explicit UNVERIFIABLE state for gates without runners (#728)
The 6 PROOF9 gates with no automated runner (e2e, visual, a11y, perf,
demo, manual) previously collapsed to hard FAIL, so most captured
glitches could never be SATISFIED and every run failed perpetually.
- core: new GateOutcome enum (passed/failed/unverifiable); _run_gate
returns the tri-state and its stale docstring is corrected; run_proof
maps obligations three-way, keeps requirements OPEN (waivable) on
unverifiable, and excludes unverifiable from overall_passed
- evidence/ledger: Evidence.status persists the outcome; nullable
status column added with a PRAGMA-guarded ALTER TABLE migration so
legacy DBs keep working (old rows read back status=None)
- api: run results carry {gate, satisfied, status}; EvidenceResponse
gains optional status; passed aggregation mirrors the runner rule
- cli: yellow UNVERIFIABLE cell, waive hint, exit 0 when nothing failed
- tui: distinct ❓ icon for unverifiable obligations
- web-ui: 'unverifiable' GateRunStatus + amber badge/banner/pills on
/proof and /proof/[req_id] (incl. evidence history filter + sort);
gate.run.failed notifications no longer fire for unverifiable gates
* fix(web-ui): tidy Gate Results help copy on /proof
* fix(proof): harden evidence-status migration + review polish
- ledger: try/finally around the migration connection, tolerate the
concurrent-first-run duplicate-column race, and memoize per workspace
so the PRAGMA doesn't run on every DB access (CodeRabbit + claude-review)
- web-ui: compute evidenceResult once per row; give the unverifiable
badge distinct styling from in-progress so live runs visibly flip
0 commit comments