skip to content
Replays

A Sensible Default for the Untouched Split

Give the never-dragged sidebar/feed divider an adaptive layout, and leave a dragged one alone

Gantry sprints

0 milestones 1 sprints

Give the never-dragged sidebar/feed divider an adaptive layout, and leave a dragged one alone

13m 42s total 7m 35s per sprint

4.3M tokens in 34.8k tokens out

$5.49 nominal cost

Gantry's terminal monitor divides its upper body into a sidebar rail, a gutter, and an activity feed. Before this job, the same proportional split drove every run, whether the user had ever touched the divider or not. A fresh wide terminal therefore stretched both sides to the edges instead of treating that geometry as a default.

This job added a distinction between an untouched layout and a user-owned one. The default view now uses capped, centered columns for the first render, while a real drag restores the older proportional fill and keeps it for the rest of the session.

How this walkthrough is structured

Feature

What did the run build and ship?

The monitor now gives an untouched split an adaptive centered layout, then preserves a dragged split as the user's proportional choice.

Build

How did Gantry structure the work?

The build kept the state latch, renderer branch, drag handoff, and tests in one sprint because the no-jump invariant crossed all of them.

Default Split Behavior

0 agents 7m 35s wall time 27.3k tokens out $3.93 nominal cost

The live tree still has the sticky `split_user_set` field, defaulting off beside the existing `split_frac` value. The renderer still branches between an untouched path that caps and centers the sidebar and feed, and a user-set path that fills edge to edge from the stored fraction. Mouse handling still passes the upper body rectangle into `begin_divider_drag`, where the fraction is seeded from the rendered gutter before dragging begins. The tests still cover the wide centered case, narrow fallback, very small terminal guard, sticky proportional mode, invisible gutter styling, and first-drag behavior; later tuning widened the caps without removing the two-mode design.

The sprint carried the whole feature because each part depended on the same piece of geometry. The new state bit only mattered if the renderer could branch on it, and the input fix only made sense against the centered layout that moved the divider away from the left edge. That kept the hardest boundary inside one fresh agent's context: grabbing the visible gutter had to seed the stored fraction before ownership flipped, or the divider would jump. The run facts show no repair, retry, or re-plan, so the cut held as a single TUI-front-end change.