skip to content
Replays

Sentence Case Across the Live Monitor

Making the terminal UI read consistently without disturbing a single machine string

Gantry milestones

0 milestones 4 sprints 13 agents

2 plan 5 execute 5 review 3 fix

128k peak context

125k median execute

Consistent casing across the TUI's cards, states, and metrics.

49m 56s total 10m 18s per sprint

1m 27s plan 14m 7s execute 7m 16s review

14 edits 301 commands

codex harness

Gantry's live monitor has to serve readers without changing the strings that the engine, ledgers, parsers, and headless stream treat as data. This job made that boundary explicit: the card chrome, live status surfaces, secondary state views, metrics panes, and generated dashboard copy were brought into sentence case while raw stage labels, harness ids, config keys, and serialized records stayed machine-facing.

The useful fact about the build is not that a presentation cleanup touched many labels. It is that the work was divided by display surface, so each fresh agent could update one cluster of exact-render expectations and prove that the readable text changed without dragging the underlying tokens with it.

How this walkthrough is structured

Feature

What did the run build and ship?

The current tree still separates machine labels from display labels, centralizes harness display names, applies them through the live monitor, and asks generated dashboard copy to start as proper sentence-case prose.

Build

How did Gantry structure the work?

The run was cut by TUI surface, with shared card casing first, broader live labels next, diagnostic panes after that, and prompt wording last, while red gates concentrated on the render paths that had exact text assertions.

Card Display Casing

5 agents 11m 59s wall time 83k peak context 1 fix

The current tree still has separate human-facing stage labels and raw machine labels in the domain model. Harness ids render through a shared display-name path, including the non-naive OpenCode spelling, and the card footer uses that path beside sentence-cased status words. Tests still pin both sides of the contract: display labels are capitalized for readers, while the underlying labels remain the lowercase values other consumers use.

This piece carried the shared vocabulary the rest of the cleanup needed: display labels for stages, display names for harness ids, and the card header and footer sites that make those values visible. That was a bounded assignment for a fresh agent because it stayed inside the agent card chrome and its focused helper tests while leaving serialized labels out of scope. The run record shows this boundary under stress: the sprint was started again, hit a red gate on the rerun, and needed a fix before the card expectations held.

Status State Casing

4 agents 8m 36s wall time 125k peak context 1 fix

The monitor now presents status phases as Planning, Running, Stopped, and Complete in the status line, status view, and theme mapping. Follow and empty-state labels read as user-facing text rather than lowercase fragments, including the no-run state and file pager follow indicator. The current tests still exercise those rendered strings, so later TUI work has to preserve the sentence-case surface intentionally.

After the card vocabulary existed, this sprint could focus on the always-visible live monitor text that was not part of metrics tables: phase labels, follow indicators, pager hints, and empty roster placeholders. The cut was narrow enough for one agent because it was mostly render wording plus snapshots around the visible status surfaces. Its gate went red and a fix ran, and the run record also attributes an errored investigation to this sprint, putting the stress around exact text recovery rather than a change in the remaining plan.

Metrics Harness Casing

3 agents 12m 11s wall time 128k peak context 1 fix

The standing code routes stage timing rows, retry rows, recent-stage menu entries, and environment harness rows through display labels or display harness names. Environment output shows harness names such as Codex and OpenCode while tests assert that raw ids do not leak into that view. Some original TUI files have been reorganized since, but the behavior is still present in render and state code rather than preserved only as old test text.

This sprint moved the same policy into the secondary panes: session history, environment details, timing breakdowns, retry rows, and token or metrics harness lists. It depended on the earlier display helpers, so the agent did not have to rediscover how a stage or harness should be written; it only had to route each diagnostic view through that policy. The gate failed once and was repaired, which matches the brief's risk: aligned tables and exact expectations had to change without losing the raw values behind them.

Prompt Sentence Case

2 agents 2m 42s wall time 60k peak context

The original prompt files have since moved under the shared agent-prompt directory, but the sentence-case requirement survived the move. The prompts that title plans, write about cards, and summarize gate, review, and re-plan output now ask for proper sentence-case prose that starts with a capital letter and rejects all-lowercase responses. There is no render-time capitalization fallback standing in for that instruction, so generated copy is handled at the source the sprint targeted.

The final sprint left the render layer alone and changed the source instructions for generated blurbs, descriptions, and summaries. That made it an independent cleanup: a fresh agent could edit prompt wording without touching the TUI functions that consume the generated text. Unlike the render sprints, this one stayed green in the run facts, which fits a low-risk prompt change with no recorded re-plan.