Skip to content

Fit wide diagrams, date builds from their finish, follow renames, and place Planner questions - #662

Merged
lavaman131 merged 4 commits into
mainfrom
e2e4-ui-fixes
Oct 16, 2026
Merged

lavaman131 merged 4 commits into
mainfrom
e2e4-ui-fixes

Conversation

@lavaman131

Copy link
Copy Markdown
Collaborator

Four fixes from a real Planner and Build run on the hosted instance.

Wide Mermaid diagrams (#658). A diagram too wide to read at the frame's width kept its drawn size and scrolled, and the only cue was a 32px fade at the cut edge. Where scrollbars hide at rest (headless Chromium, macOS), nothing else showed there was more, and a mouse without a sideways wheel could not reach the end. Off a phone it now shows Fit diagram to width under its scroll lane: the whole shape scales to the frame (its height follows its width) until Actual size returns it to scrolling from its start. Phones keep Expand diagram. DESIGN.md says so.

Build card age (#659). The card dated a finished build from createdAt, when Build plan was pressed, so an hour-long build read "built 1h ago" the moment it finished. Builds now record finishedAt when they stop or fail, including a landed rebuild, and the card dates a finished build from it. A build stored before this shows no time rather than a wrong one.

Renamed document's address on its machine (#660). The Planner poll names documents by id and Chopin answered only when the set of ids changed, and the connector kept the URL it first got. Chopin now answers the poll once more when a document's address changed since it last told that connection (a rename also wakes the poll), and the connector takes the new address for a running backend without restarting it: chopin status, its output and the next start use it. The connector changed, so this needs a chopin CLI release to reach machines; the poll answer keeps its existing shape, so there's no protocol bump, and an older connector just ignores the extra answer.

Placing a Planner's blocking questions (#661). The agent connection's input-request gets an optional block (index and digest from the Planner's latest read), and the in-process host input takes the same block in its options. Cards go right after that block, linked to it. If the block has changed, repeats, or is itself a decision card, they go at the end unlinked, as before. The agent connection changed (additive; same connection version); documented in docs/agent-connection.md.

Tests: each fix failed before it was applied. The new unit tests failed, and the new browser tests for #658 (1280, 1920) and #659 failed against a client built without the fix ("built 1h ago"; no control under the frame). Afterwards: bun test apps/server packages apps/web apps/connector (6031 pass), bun run types, bun run ci, and the browser files wide-content, code, implementation-launcher, responsive-content, machine-choice, machines, planner-attachment, connector, visual-handoff, harness-decisions-deck and document-title all passed.

Fixes #658
Fixes #659
Fixes #660
Fixes #661

lavaman131 and others added 4 commits October 16, 2026 14:38
… for

The Build card's footer counted a finished build's age from createdAt, the
moment Build plan was pressed, so a build that ran for an hour read "built 1h
ago" as soon as it finished. A build now records finishedAt when it stops or
fails, including a landed rebuild, and the card dates a finished build from
it. A running build is still dated from its start; a finished build stored
before finishedAt was recorded shows no time rather than a wrong one.

Fixes #659

Assistant-model: Claude Opus 5.5 (fast)
Assistant-workflow: inline (fast subagents)
Assistant-verification: red-before-fix: builds.test.ts "a build records when it finished" failed (finishedAt undefined); plan-graphs.test.ts landed-rebuild assertion failed; build-model.test.ts buildAgo missing
Assistant-verification: red-before-fix: e2e implementation-launcher "a build that ran for an hour ..." failed on the unfixed client with "built 1h ago" (expected "built 2m ago")
Assistant-verification: after fix: those unit tests, implementation-launcher.e2e.ts (all) and the full bun test run passed
Co-authored-by: Alex Lavaee <alexlavaee@microsoft.com>
…Planner

The Planner poll names documents by id, and Chopin answered it only when the
set of ids changed, so a rename never reached the connector; the connector
also kept the URL of a backend it already ran. Chopin now remembers the address
it last told each connection for each document and answers the poll again,
once, when a document's address has changed, and a document rename wakes the
poll. The connector takes the new address for a running backend: chopin
status, its output and the backend's next start use it, without restarting
the backend. The answer is the existing planners shape, so no protocol bump.
The connector change needs a chopin CLI release to reach machines.

Fixes #660

Assistant-model: Claude Opus 5.5 (fast)
Assistant-workflow: inline (fast subagents)
Assistant-verification: red-before-fix: planner-dispatch.test.ts "tells the machine a renamed document's current address, once" got { waiting: true }; connector planner.test.ts rename test recorded the old address
Assistant-verification: after fix: both pass; planner-dispatch.test.ts and planner.test.ts in full, machine-choice, machines, planner-attachment and connector e2e passed
Co-authored-by: Alex Lavaee <alexlavaee@microsoft.com>
Decisions a Planner asked through blocking human input always went to the end
of the document, not linked to any passage. An agent connection input-request
may now carry an optional block, the index and digest of the block it
concerns from the Planner's latest read, and the in-process host input takes
the same block in its options. Its cards go directly after that block and are
linked to it. A block that changed, repeats or is itself a decision card
leaves the cards unlinked at the end, as before. The field is optional, so the
connection version is unchanged.

Fixes #661

Assistant-model: Claude Opus 5.5 (fast)
Assistant-workflow: inline (fast subagents)
Assistant-verification: red-before-fix: human-input.test.ts "a question that names its block ..." placed the card after the last section; link.test.ts block test never got a card; protocol.test.ts refused the block field
Assistant-verification: after fix: agent-link, human-input and link tests pass, including the unlinked fallback; full bun test run passed
Co-authored-by: Alex Lavaee <alexlavaee@microsoft.com>
…ontrol

A Mermaid diagram too wide to read at the frame's width keeps its drawn size
and scrolls, and its only cue was a 32px fade at the cut edge. Where
scrollbars hide at rest, as in headless Chromium and on macOS, nothing else
showed there was more, and a mouse without a sideways wheel could not reach
the end. Off a phone, such a diagram now shows Fit diagram to width under its
scroll lane: the whole shape scales to the frame, with its height following
its width, until Actual size returns it to scrolling from its start. Phones
keep Expand diagram.

Fixes #658

Assistant-model: Claude Opus 5.5 (fast)
Assistant-workflow: inline (fast subagents)
Assistant-verification: red-before-fix: wide-content.e2e.ts wide LR flowchart tests at 1280 and 1920 failed on the unfixed client (no control; the frame showed only its first steps, with no lane painted: offsetHeight equal to clientHeight); the 390 touch test passed as coverage
Assistant-verification: after fix: wide-content, code, responsive-content and visual-handoff e2e passed; bun run ci and bun run types passed
Co-authored-by: Alex Lavaee <alexlavaee@microsoft.com>
@lavaman131 lavaman131 self-assigned this Oct 16, 2026
@lavaman131
lavaman131 merged commit 3ee6887 into main Oct 16, 2026
24 checks passed
@lavaman131
lavaman131 deleted the e2e4-ui-fixes branch October 16, 2026 21:49
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

1 participant