Skip to content

v0.7.4 — run-train actionable roadmap-format diagnostics (agent-harness#60)

Choose a tag to compare

@ViperJuice ViperJuice released this 13 Jul 03:49
· 974 commits to main since this release
v0.7.4
363cc14

[0.7.4] - 2026-07-13

run-train — actionable roadmap-format diagnostics (agent-harness#60)

  • Named, coded parse diagnostics for train roadmaps. parse_train_roadmap
    now surfaces the offending node/heading on malformed input instead of failing
    opaquely: a malformed **Channel:** descriptor is prefixed with its node_id;
    a duplicate ### Node: block is caught by a new coded (T-F) check before
    the topo pass (previously mis-reported as a spurious (T-D) cycle with an empty
    node list); and an empty <repo>/<plan-path> component is rejected at parse,
    naming the heading. Both parse-time raises are caught at the CLI boundary with a
    clean message and zero PRs opened; the duplicate fix is bound to INV-3. The
    child-launch/dispatch half was already correct (dispatch locks are keyed per
    (repo, roadmap)) and is unchanged; all train invariants (INV-1..6, merge-SHA
    false-green killer) remain intact.

Advisor board — heartbeat-aware liveness for the claude/Fable PTY leg (agent-harness#188)

  • Reviewer-progress heartbeat, not cosmetic animation. The self-PTY Claude TUI
    leg (_run_claude_tui_session) now resets its stall clock only on GENUINE reviewer
    progress — novel de-animated terminal text, review-file growth, or transcript
    growth. The TUI's animated "thinking" status line (rotating verb + per-second
    elapsed counter) and a Node CLI's incidental libuv/GC CPU no longer count as
    liveness. This closes a regression where a genuinely-wedged Fable leg (blocked in
    ep_poll, ~2s CPU, no output) animated forever and hung ~17 min with no reclaim.
  • Typed stalled leg. A reclaimed wedge is surfaced as DEGRADED
    (claude_tui_stalled), so the board names the liveness reclaim while the completed
    seats are preserved. No fixed model-response timeout is injected when the caller did
    not request one — the hard deadline stays the generous _MAX backstop and the real
    kill is heartbeat extinction.
  • Regression coverage. New PTY-subprocess tests prove a silent-but-animating,
    CPU-trickling leg is reclaimed within the stall window; a slow-but-progressing leg
    is not killed; and no fixed short timeout is injected on the default path.