The Halt Modal Shows the Whole Diagnosis
A stop screen that grows to its content, scrolls, and reads the report inline
0 milestones 3 sprints 8 agents
2 plan 3 execute 3 review
144k peak context
88k median execute
28m 40s total 8m 37s per sprint
1m 45s plan 15m 2s execute 6m 21s review
32 edits 182 commands
codex harness
When a Gantry run halts, the terminal should contain enough context to act without leaving the TUI. This job rebuilt the stop surface around that expectation: the modal now sizes from its own text, scrolls when the body exceeds the visible area, and pulls diagnosis report content into the same view instead of leaving only a path.
The run split that work by dependency. Geometry came first, overflow handling followed, and report rendering landed last because it needed the first two behaviours to be useful. Today's tree has since folded the stop overlay into the shared modal component used by other TUI dialogs, but the halt behaviour described by the job is still present.
How this walkthrough is structured
Feature
What did the run build and ship?
The TUI now renders halted runs through a content-sized, scrollable stop modal that can show a diagnosis report body inline and expose that same visible text for copying.
Build
How did Gantry structure the work?
The cut kept one TUI surface manageable by landing modal geometry, then overflow handling, then report content, with sprint boundaries staying green and the only recorded stress appearing at final merge.
Adaptive Modal Sizing
2 agents 8m 37s wall time 85k peak context
The original stop-specific sizing code is no longer isolated as a standalone patch. At current head, the stop modal is built through `GantryModal` with a content body, max width, minimum size, full-area sizing, and shared chrome. The live tests now verify oversized stop bodies through the shared modal family rather than only through the original stop overlay implementation, so the feature remains but its home has moved.
This first sprint carried the shared layout premise for the rest of the job. Its brief limited the agent to modal geometry: replace the fixed halt presentation with content-driven sizing, keep prose readable, apply the same treatment to passive recovery, and cover small terminals and height clamping. That was a holdable cut for a fresh worker because no scroll state or report loading had to be reasoned about yet. The sprint stayed green at its own boundary.
Scrollable Stop Overlay
2 agents 8m 55s wall time 144k peak context
Stop scrolling still exists, but it now routes through the shared modal dispatch path. The TUI keeps `stop_scroll` synchronized from the modal's measured position and maximum, maps familiar reading keys onto modal scrolling, and only lets those keys affect the stop body while the stop overlay is frontmost. Tests cover reset on a new stop, page movement, top and bottom jumps, frontmost routing, mouse wheel routing, clamped overflow, and visible up or down markers.
The second sprint was sequenced after sizing because scrolling only has a meaningful bound once the modal can grow and then hit a ceiling. Its brief asked for stop-local offset state, reset behaviour, keyboard and mouse affordances, render-time clamping, and visible overflow cues while preserving existing stop actions. That made the boundary mostly input routing and state synchronization, not report parsing or file access. Its checks remained green, including an extra gate pass recorded for this sprint.
Inline Diagnosis Report
2 agents 5m 38s wall time 88k peak context
The stop renderer still reads a report path into labelled modal text and keeps the path visible above the body. Empty, missing, or unreadable reports produce an inline fallback instead of disrupting the stop surface, and authored line breaks are converted to plain modal rows. The selectable overlay block is registered from the same visible stop content, and tests assert that copied stop text includes report details rather than only the halt message.
The last sprint took the widest user-facing content after the display mechanics were already in place. Its brief asked the agent to resolve report paths on demand, render the path and body inside the modal, preserve plain text line breaks, degrade cleanly on read failure, and include the rendered report in the copyable overlay block. That scope crossed file I/O, rendering, and selection, but the earlier sprints had already removed the modal-size and scroll questions from the unit. It completed without a retry or re-plan.