Skip to content

fix(verify): interactive probe stops false-negativing clean runs on natural-language expect - #11

Merged
waitdeadai merged 1 commit into
mainfrom
fix/interactive-probe-false-negative
Jun 3, 2026
Merged

fix(verify): interactive probe stops false-negativing clean runs on natural-language expect#11
waitdeadai merged 1 commit into
mainfrom
fix/interactive-probe-false-negative

Conversation

@waitdeadai

Copy link
Copy Markdown
Owner

Live finding while cmax-building Plumb v1: the rollup verdict marked rollup-tests-green and rollup-typecheck-clean NOT-met (interactive-failure) while their own evidence recorded # pass 77 / # fail 0 and tsc EXIT=0.

Root cause: runInteractiveVerify required the model's natural-language expect to be a literal substring of stdout. Prose never matches → met = exit0 && false → the authoritative probe forces the condition to FAIL.

Fix: evaluateExpect() — mechanical signal from an echoed EXIT=<n> sentinel (or the real exit code); expect becomes corroboration (literal substring / salient TAP tokens / advisory prose), never a prose veto. Short literal sentinels still hard-fail when absent; real failures still fail. +12 regression tests, full runtime suite green.

🤖 Generated with Claude Code

…rose `expect`

Live finding (cmax-building Plumb v1): the rollup verdict marked rollup-tests-green
and rollup-typecheck-clean as NOT met with failureCategory "interactive-failure",
while their own recorded evidence was `# pass 77 / # fail 0` and `tsc EXIT=0`. Root
cause: runInteractiveVerify required the model-authored natural-language `expect`
("EXIT=0 with no failing tests and at least 11 passing") to appear verbatim in
stdout (`combined.includes(expect)`). Prose never matches, so met = exit0 && false,
and the probe — authoritative in parseOneCondition — forced the condition to FAIL.

Fix: extract a tolerant evaluateExpect():
  - mechanical success = echoed `EXIT=<n>` sentinel (the `; echo EXIT=$?` idiom
    masks the real exit to 0) else the real process exit code;
  - `expect` is corroboration, not a prose veto: literal substring, or all salient
    tokens (TAP counters, ok/not-ok lines, quoted literals) must be present; a short
    single-token sentinel still hard-fails if absent; pure prose is advisory.
Genuine failures (echoed EXIT!=0, real non-zero exit, "# fail 3" vs demanded
"# fail 0", absent literal sentinel) still yield met=false. 12 new regression tests;
full runtime suite green.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants