Structural INCONCLUSIVE detection, Stop-hook integration, 1.8.0 - #9
Merged
Conversation
Follow-up to #8's phantom-pass detection, fixing the integration gaps found in review: The detector is now structural instead of prose matching, and deliberately minimal: INCONCLUSIVE fires only when the review's event stream shows no successful execution activity at all -- no command_execution item that exited 0 and no code-mode dynamic_tool_call item. That is the one empirically observed failure shape (a nested sandbox that refuses to initialize, so the review runs nothing) and the only fact the stream states reliably. Verifying that activity actually READ the repository is explicitly not attempted: shell output under-determines it (compounds, pipelines, || fallbacks, quoting, error-like content), and a far stricter seven-layer version of this check minted a new counterexample per layer before being retired. Partial sandboxes that permit some execution while denying repo reads are a documented accepted residual. The prose regex the detector replaces matched reviews that merely DISCUSS sandbox failures -- which every review of this repo does. Legacy text-parser mode is exempt (no event stream). The Stop hook clears INCONCLUSIVE state like ERROR/TIMEOUT, and the GC recognizes it as a known verdict and sweeps aged entries -- previously it fell into the unknown-verdict bucket, which is preserved indefinitely as corruption evidence, so abandoned INCONCLUSIVE state was immortal. The guidance message is remote-aware like the fix loop: an unpushed commit pairs /codex-review-sandbox-mode danger-full-access with a repo-anchored git commit --amend --no-edit (new sha, fresh review under the new mode; a same-sha re-run is dedup-skipped); a pushed commit is never amended and gets a one-off elevated review command carrying the configured CODEX_BIN and shell-quoted repo path. Stub modes emit realistic command_execution events; no_inspection, failed_inspection, unrelated_command_pass (documented residual), and dynamic_tool_pass cover the detector from all directions. README documents the verdict. Version 1.8.0 covering #8 plus this hardening. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Merged
This was referenced Jul 28, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Follow-up to #8, closing the three integration gaps from its review and reworking the phantom-pass detector.
Detector. #8's prose regex misfired on reviews that merely discuss sandbox failures — which every review of this repo does. Detection is now structural and deliberately minimal: INCONCLUSIVE fires only when the review's event stream shows no successful execution activity at all — no
command_executionthat exited 0, no completedmcp_tool_call. Those are the activity types codex's exec JSONL serializer actually emits (verified againstcodex-rs/exec/src/event_processor_with_jsonl_output.rs; code-mode nested tool calls are dropped by that serializer, so a code-mode-only review reads INCONCLUSIVE — a documented, safe-direction residual until codex serializes those events). Verifying that activity actually read the repository is explicitly out of scope: shell output under-determines it, and a seven-layer forensic version of this check built during review minted a new counterexample per layer before being retired in favor of this one.Integration. The Stop hook clears INCONCLUSIVE like ERROR/TIMEOUT and the state GC sweeps aged entries (previously the unknown-verdict bucket preserved them forever). The guidance is remote-aware like the fix loop: unpushed commits pair
/codex-review-sandbox-mode danger-full-accesswith a repo-anchoredgit commit --amend --no-edit(new sha → fresh review under the new mode); pushed commits are never amended and get a one-off elevated review command carrying the configuredCODEX_BINand a shell-quoted repo path.Tests: 112/112 (stub events now structurally realistic, with fixtures for zero-activity, all-failed, declined, MCP-only, and incidental-command cases), shellcheck clean,
claude plugin validatepassing. Version 1.8.0 covering #8 plus this.The dogfooding story for the curious: this commit survived twelve of its own post-commit reviews across two sagas — the first capped out at #2's round limit (working as designed), and the loop's findings drove the detector from prose regex → git-command forensics → the minimal activity check, including one round where the reviewer cited codex's own serializer internals, which we verified against upstream source before acting.
🤖 Generated with Claude Code