fn-2.6 Update ralph-guard.py for codex patterns
Description
Update ralph-guard.py hooks to validate codex calls same as rp calls.
Changes needed
Block direct codex calls (prevent drift):
BLOCKED_CODEX_PATTERNS = [ r'codex\s+exec\s+(?!.*--sandbox)', # exec without sandbox r'codex\s+review', # direct review (should use flowctl) r'codex\s+exec\s+.*--last', # --last flag (use explicit session_id) ]Allow flowctl wrappers:
ALLOWED_PATTERNS = [ r'flowctl\s+codex\s+', # All flowctl codex commands OK r'flowctl\s+rp\s+', # All flowctl rp commands OK ]Track codex mode - Similar state tracking as rp mode
Session enforcement (optional, warn-only):
- If receipt exists with
session_idand codex exec starts new session → warn - Block
--lastflag entirely (must use explicit session_id)
- If receipt exists with
Files to modify
plugins/flow-next/scripts/hooks/ralph-guard.py
Acceptance
- Direct
codex execwithout sandbox blocked - Direct
codex reviewblocked (must use flowctl wrapper) -
codex exec --lastblocked (must use explicit session_id) -
flowctl codex *commands allowed - Existing
flowctl rp *validation unchanged - State tracking works for codex mode
Done summary
Updated ralph-guard.py to support codex backend: tracks codex review state, validates receipt writes for both backends, detects verdict from codex output.
Evidence
- Commits: a0c302a
- Tests: smoke_test.sh
- PRs: