Expand description
Agent completion detection — parses DEVFLOW_RESULT markers and evaluates exit codes to determine whether a coding agent succeeded or failed.
Four-layer decision engine: 0. Run operator-authored external post-condition probes (authoritative failure)
- Parse DEVFLOW_RESULT from agent stdout (authoritative for ordinary plans)
- Exit code + commit count gate (reliable fallback)
- Process gone + commits exist (last resort warning)
Structs§
- Agent
Result - Parsed agent completion result.
- Idle
Timeout Commit - One commit the agent made before its stream went silent (D-07, 31-02).
- Idle
Timeout Record - The pipe-owning monitor’s authoritative idle-timeout verdict, as written to
idle_timeout_pathBEFORE the child is terminated (D-05, 31-02).
Enums§
- Agent
Status - Agent completion status determined by DevFlow.
- Result
Error - Errors produced by agent result evaluation.
- Verdict
- The Validate stage’s self-reported verdict (13b verdict-vs-ran split).
Functions§
- agent_
pid_ path - Path to the file where the monitor records the launched agent’s PID.
- archive_
phase_ files - Archive the prior stage’s stdout/exit captures into bounded per-phase
history instead of wiping them outright, so a false-positive self-report
can be diagnosed after the fact (16b). Replaces the old
cleanup_phase_files, which deleted these files unconditionally. - blocking_
human_ checkpoint_ reported - Confirm whether captured stdout reports a human-blocking checkpoint, by
searching for a
**Gate:**-labeled line whose VALUE is exactly [HUMAN_GATE_VALUE] — see that constant’s doc comment for the live observation (2026-07-31) the matched rendering is built from. - capture_
shows_ rate_ limit_ denial - Read the monitor’s own idle-timeout verdict, if it wrote one.
- checkpoint_
reported_ in_ capture - Thin file-reading wrapper over
blocking_human_checkpoint_reported: reads the phase’s captured stdout file (viastdout_path) and delegates.falsefor a missing capture file, never an error. - claude_
session_ id - Read the top-level
session_idstring from a Claude JSON result envelope (--output-format json). ReturnsNonefor plain-text stdout, a non-JSON-object envelope, an envelope with nosession_idkey, or asession_idof a non-string JSON type — never panics. - claude_
stream_ session_ id - Read the CLI-emitted
session_idfrom a Claude--output-format stream-jsonJSONL capture: the top-levelsession_idof the LASTsystem/initevent.Nonefor any other capture shape. - detect_
rate_ limit - Detect agent-specific rate-limit output and return the retry description.
- evaluate_
agent_ result - Full four-layer evaluation: returns the best available AgentResult.
- evaluate_
layer1 - Layer 1: Try to detect agent result from the native per-adapter envelope or the DEVFLOW_RESULT marker in stdout.
- evaluate_
layer2 - Layer 2: Use exit code + commit count to determine result.
- evaluate_
layer3 - Layer 3: Last resort — agent process is gone.
- exit_
code_ path - Path to the exit code file for a given phase.
- history_
dir - Path to the archived-capture-history directory for a phase (16b).
- idle_
timeout_ path - Path to the pipe-owning monitor’s idle-timeout verdict for a phase (D-05/D-06, 31-02).
- monitor_
log_ path - Path to the pipe-owning monitor’s own log for a phase (Phase 31).
- parse_
devflow_ result - Search stdout for a DEVFLOW_RESULT marker.
- phase_
commit_ count - Commits on the phase’s feature branch that are not on
develop. - phase_
verification_ exists - Whether
/gsd-verify-workhas produced a{phase:02}-VERIFICATION.mdartifact forphaseyet. - phase_
verification_ fingerprint - A content fingerprint of the phase’s
{phase:02}-VERIFICATION.md, orNonewhen no such artifact exists underevidence_root(999.79, 35-05). - phase_
verification_ mtime_ nanos - The mtime of the same
{phase:02}-VERIFICATION.mdphase_verification_fingerprinthashes, in nanoseconds since the Unix epoch, orNonewhen no such artifact exists underevidence_root. - prompt_
path - Path to the file holding the stage prompt handed to the pipe-owning monitor (Phase 31).
- session_
id_ from_ capture - Thin file-reading wrapper over the two session-id readers: reads the phase’s
captured stdout file (via
stdout_path) and delegates.Nonefor a missing capture file, never anErr— mirrorsevaluate_layer1’s lossy-read convention (CR-01: one invalid UTF-8 byte from rawshredirection must not silently disable this reader). - stderr_
path - Path where the agent’s stderr is captured for a given phase.
Lives alongside
stdout_pathunder.devflow/. - stdout_
path - Path to the stdout file for a given phase.
- token_
reported_ in_ capture - Whether a declared canary
tokencame back inside a TOP-LEVELresultevent of this capture (D-13).