Add UserPromptSubmit hook codex-findings-surface.py to surface unread Codex WARN findings + daily summary inter-turn, closing the silent-partner gap where non-BLOCK verdicts sat unread until Stop hook

Decision

Add UserPromptSubmit hook codex-findings-surface.py to surface unread Codex WARN findings + daily summary inter-turn, closing the silent-partner gap where non-BLOCK verdicts sat unread until Stop hook

Rationale

Three alternatives evaluated. (1) Inter-turn UserPromptSubmit surface — CHOSEN. Natural lifecycle point, no fight with async completion timing, idempotent via .surfaced markers, freshness-gated to 24h, fail-safe (exits 0 on any error). (2) Modify codex-post-write-trigger.py to push findings inline post-completion — rejected: PostWrite fires before background review completes, has nothing to surface; would require synchronous polling or async coordinator, fighting the lifecycle. (3) Lower advisory threshold ≥3 → ≥2 files — rejected: burns budget across docs/config tweaks without proportional signal gain at current activity cadence. Framing-bias check (ST detected use of “only” twice): both rejections survive scrutiny — (2) is architecturally wrong-shape regardless of phrasing; (3) is a tunable that can revisit if activity grows. Premortem-identified risks: (a) marker write fails → spam every turn (mitigation: markers in same dir/owner as findings = same perms, verified writable in smoke test); (b) hook timeout on large findings (mitigation: 3500-char cap + 5s hook timeout + last-block parsing skips multi-run bloat); (c) stale findings after holiday (mitigation: 24h freshness window discards >24h); (d) header-only daily summaries surface as noise (mitigation: regex gate requires CRITICAL|WARNING|BLOCK keyword presence). Verified live: 7-point sweep green, today’s 2 Salesforce-MCP WARN findings successfully surfaced as 3532-char additionalContext, idempotency confirmed.

Alternatives Rejected

Outcome

Pending