Skip to content

Project heads get rows of their own; removing a worktree says so at the click - #89

Merged
andrin-n-dream merged 2 commits into
masterfrom
files
Oct 1, 2026
Merged

andrin-n-dream merged 2 commits into
masterfrom
files

Conversation

@andrin-n-dream

Copy link
Copy Markdown
Contributor

Two changes, one commit each.

Collapsed project heads that still do not fit get rows of their own (caa35d3)

At rung 4 every project is one head, and a row of heads that still did
not fit scrolled: on a phone with six projects, three were off the
edge, and what was off the edge was whatever might be blocked on you.

Rung 5 now gives the bar a second row. The heads get the whole of it,
and wrap onto further rows of the bar's height when even that is not
enough; the first row keeps the controls, and the usage readout gets
its bars back there, since it was only squeezed for sharing a row with
the strip. Rung 6 takes those bars again and rung 7 is the percentages
with the click-to-open panel, which used to be rung 5.

A grid, not a wrapping flex row, because a too-wide wrapping row wraps
instead of overflowing and overflow is the sweep's only signal. The
heads' row wraps rather than overflows on purpose: nothing the sweep
could still take away is on it, and before it wrapped the sweep walked
straight to 7 and shrank the usage readout for nothing -- measured, 540
down to 280 all at rung 7 with heads still off screen. Every item is
placed explicitly, since the machine button and sign-out share a class.

Measured with six projects: rung 0 at 1600, 4 at 900, 5 from 700 to
360 with the full readout (77px tall, 121 once the heads take two
rows), 6 at 300, 7 at 240. Every head on screen and under
elementFromPoint at every width; sweeping back up gave the same rungs;
the panel at rung 7 still opens on screen and closes.

Removing a worktree says so at the click, not when it is done (bd28616)

Nothing on screen changed until DELETE /api/worktrees/:id came back --
killing every session in the worktree and a git worktree remove, which
takes seconds with real agents in it -- and the remove dialog sat there
meanwhile with its button disabled. A click that had worked looked like
one that had not.

Now both ways in (the dialog, and the straight-through delete when
there is nothing to ask) go through removeWorktree in App, which marks
the worktree departing before the request goes: its window greys out
under 'Shutting down...' and is inert, the dialog closes, and the
keyboard moves to its neighbour at once rather than at the answer.
Success drops the window with the refresh; a refusal brings it back
with git's words in it (TileFailure), which is where a failed action
is said here -- the dialog no longer waits to show it.

A departing window is also out of the Cmd+arrow walk's stops. Measured
before that: the hint under it read 'to switch to this Claude', and a
step into an inert window lands nowhere, which makes it a wall.

Measured on a scratch instance with the DELETE held 2s: 100ms after
the click the window was greyed, inert and saying Shutting down, the
dialog gone and the keyboard in the neighbour; it left when the answer
came. With a 409 instead it came back un-greyed with the message in it.
Alt+Right from the window before it stepped over it. Sleep was already
immediate -- the window starts leaving at 0ms with its request held --
and is unchanged.

🤖 Generated with Claude Code

andrin-n-dream and others added 2 commits October 1, 2026 06:43
At rung 4 every project is one head, and a row of heads that still did
not fit scrolled: on a phone with six projects, three were off the
edge, and what was off the edge was whatever might be blocked on you.

Rung 5 now gives the bar a second row. The heads get the whole of it,
and wrap onto further rows of the bar's height when even that is not
enough; the first row keeps the controls, and the usage readout gets
its bars back there, since it was only squeezed for sharing a row with
the strip. Rung 6 takes those bars again and rung 7 is the percentages
with the click-to-open panel, which used to be rung 5.

A grid, not a wrapping flex row, because a too-wide wrapping row wraps
instead of overflowing and overflow is the sweep's only signal. The
heads' row wraps rather than overflows on purpose: nothing the sweep
could still take away is on it, and before it wrapped the sweep walked
straight to 7 and shrank the usage readout for nothing -- measured, 540
down to 280 all at rung 7 with heads still off screen. Every item is
placed explicitly, since the machine button and sign-out share a class.

Measured with six projects: rung 0 at 1600, 4 at 900, 5 from 700 to
360 with the full readout (77px tall, 121 once the heads take two
rows), 6 at 300, 7 at 240. Every head on screen and under
elementFromPoint at every width; sweeping back up gave the same rungs;
the panel at rung 7 still opens on screen and closes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Nothing on screen changed until DELETE /api/worktrees/:id came back --
killing every session in the worktree and a git worktree remove, which
takes seconds with real agents in it -- and the remove dialog sat there
meanwhile with its button disabled. A click that had worked looked like
one that had not.

Now both ways in (the dialog, and the straight-through delete when
there is nothing to ask) go through removeWorktree in App, which marks
the worktree departing before the request goes: its window greys out
under 'Shutting down...' and is inert, the dialog closes, and the
keyboard moves to its neighbour at once rather than at the answer.
Success drops the window with the refresh; a refusal brings it back
with git's words in it (TileFailure), which is where a failed action
is said here -- the dialog no longer waits to show it.

A departing window is also out of the Cmd+arrow walk's stops. Measured
before that: the hint under it read 'to switch to this Claude', and a
step into an inert window lands nowhere, which makes it a wall.

Measured on a scratch instance with the DELETE held 2s: 100ms after
the click the window was greyed, inert and saying Shutting down, the
dialog gone and the keyboard in the neighbour; it left when the answer
came. With a 409 instead it came back un-greyed with the message in it.
Alt+Right from the window before it stepped over it. Sleep was already
immediate -- the window starts leaving at 0ms with its request held --
and is unchanged.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@andrin-n-dream
andrin-n-dream merged commit 5bb98b3 into master Oct 1, 2026
1 check passed
@andrin-n-dream
andrin-n-dream deleted the files branch October 1, 2026 08:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant