Severity: high | Category: unfinished | Phase: P1.1
Problem
Verified: _GATE_TO_CORE = {UNIT: pytest, CONTRACT: pytest, SEC: ruff}; every other gate returns (False, "no automated runner — cannot verify"). Since OBLIGATION_MAP assigns E2E/VISUAL/A11Y/PERF/DEMO to 5 of 7 glitch types, most captured glitches can never be SATISFIED. CONTRACT is indistinguishable from UNIT; SEC is a linter. The flagship "9-gate evidence-based" PROVE step is really pytest+ruff.
Evidence
codeframe/core/proof/runner.py:68, :83
Acceptance criteria
- Remaining gates are wired to real runners (playwright for E2E, etc.), OR unrunnable gates return an explicit
UNVERIFIABLE/waivable state distinct from "ran and failed".
- The
/proof UI and run results distinguish "cannot verify" from "failed"; the stale runner docstring is corrected.
Dependencies
None
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).
Severity: high | Category: unfinished | Phase: P1.1
Problem
Verified:
_GATE_TO_CORE = {UNIT: pytest, CONTRACT: pytest, SEC: ruff}; every other gate returns(False, "no automated runner — cannot verify"). SinceOBLIGATION_MAPassigns E2E/VISUAL/A11Y/PERF/DEMO to 5 of 7 glitch types, most captured glitches can never be SATISFIED. CONTRACT is indistinguishable from UNIT; SEC is a linter. The flagship "9-gate evidence-based" PROVE step is really pytest+ruff.Evidence
codeframe/core/proof/runner.py:68,:83Acceptance criteria
UNVERIFIABLE/waivable state distinct from "ran and failed"./proofUI and run results distinguish "cannot verify" from "failed"; the stale runner docstring is corrected.Dependencies
None
Filed from the SaaS launch-readiness audit. Atomic: one developer, one session. Work order: strictly P0.1 → P3.12 (no forward dependencies).