Repository navigation
Fixes from the final end-to-end check after the redesign merge - #395
Merged
Merged
Conversation
…ion glyph its card draws The preview tab glyph (iconForArtifact) returned ChartColumn for every ui:// resource, so an Agent Drafter app drew lucide-chart-column on its tab and lucide-app-window on its transcript card. The tab now asks the card's own classifier (artifactCardKind) and draws ENTITY_ICONS.application for an app; Auto Visualiser figures and reports keep ChartColumn. The ui:// address lookup is shared with ArtifactKindMeta so the bar's kind word and the tab glyph read the same uri.
…ody and one warning glyph The Arguments preview was the backend's pretty JSON in a whitespace-pre box, so a string argument was one escaped line. platform__report_bug's body (the text that becomes a public issue) measured 68,874px wide in a 724px box, about 90 characters visible with literal \n, under a card saying "Read the body below". A parseable arguments object now renders as named fields, each string value the exact text with real line breaks, wrapped by an authored rule (.br-tool-preview-text: pre-wrap, overflow-wrap anywhere) in tool-call.css. Non-string values stay JSON; a clipped blob is never parsed and is shown as wrapped raw text beside the Truncated note. Collapse is decided on the wrapped line estimate, so a single long line still folds behind Show more. Never rendered as Markdown: the person is checking what will be published. The private card drew its AlertTriangle and then the prompt's own leading "⚠ " (bug_report::private_warning). The card now drops a leading warning glyph (with or without VS16) and keeps the rest exactly; a glyph inside the sentence stays, and a glyph-only prompt is kept rather than blanked. Done in the card, not the producer: the CLI and TUI print the prompt as bare text, where that glyph is the only warning sign, and persisted cards are fixed too. Tests: ToolCallConfirmation.test.tsx (5 failing before, 1 guard), and a real-Chromium geometry test in toolCardsGeometry.browser.test.tsx (scrollWidth 68,874 > 724 before; wraps at 760 and 580px after).
…s no wider than what is still past the edge A table 475px wide in a 465px box had 10px out of view and a fixed 40px mask, which dimmed a right-aligned last column (Value, ls -la, 2, 0) almost to nothing at rest. useOverflowsSideways now measures what remains (scrollWidth - clientWidth - scrollLeft), rounds it to whole pixels and caps it at 40, and scrollRegionProps writes it as --br-overflow-fade beside data-overflow. The shared .br-md-code-body / .br-md-table-scroll mask reads it, so the fade covers no more of the view than is hidden and narrows away as the box scrolls to its end instead of vanishing at once. Applies to chat and document markdown tables and fenced code alike. Measured in the artifact harness at the final check's geometry (475 in 465): fade 10px at rest, 6px after 4px of scroll, none at the end; a 327px box keeps the full 40px until 40px remain. Tests: MarkdownContent (10px, 6px, cleared at end; 40px cap; code block) and the stylesheet pins in transcriptMarkdown.test.ts and artifactPaper.test.ts, which asserted the old fixed 40px.
…column instead of covering the transcript Stepped 16px left of the docked Chat summary card, the sticky extension-load report stood over the person's own message for minutes (final app check, 'Toasts do not cover transcript content'): beside the rail is the conversation. toastClearance gains a third side, 'column', for the rail card: the stack takes the card's width (--toast-clear-width, read by App.tsx's container min/max width), lines its right edge up with the card's, and sits 8px under it when it fits above the window's 16px bottom inset; over a card that fills the rail it stays at its corner height, still in the column. The summary popover keeps its 'beside' step. Unit, source and Chromium tests cover the short card, the full card, find open beside the rail, and the rail folding away.
…tarts; no New chat hint in a browser A running chat stayed in place in the sidebar until its turn finished. The list re-read only on a finished turn, a new chat, a meta change, focus and visibility, and the running set only drew the spinner. R-30 stopped opening a chat from moving it, so this delay could now be seen. useSidebarSessions now takes turnSessionIds (sessionsInTurn: running, not finished, not an agent restart). When a turn starts, the hook raises that row's updated_at to the start time with no request, the way a saved rename does. applyTurnRaises keeps that raise on every page read during the turn, and drops it when the turn ends. A running chat the list has not read yet is brought in by a head read. The move still waits while the pointer is over the list (applyHeldArrangement). On the browser surface (biorouter serve) the New chat row no longer shows a Ctrl+T / Cmd+T hint. That shortcut is the Electron menu accelerator, which a browser page never receives, and in a Windows or Linux browser Ctrl+T opens a browser tab (SD-8). The desktop app keeps the hint. Tests: useSidebarSessions.turnActivity.test.tsx (new) and AppSidebar.test.tsx (browser surface draws no hint; desktop still does). Each failed before the fix.
…dits, not diff-shaped text The Code row scanned every string in the transcript for +N -M, N insertions(+), a diff --git or a fenced block. A chat whose Code Execution script wrote final-check-notes.md read +0 -0, and a /bug investigation that changed nothing read +0 -9. It now counts successful text_editor edits only: write/create, str_replace (old/new as a line LCS, or a unified diff's hunk lines), insert, and undo_edit reversing the same file's last counted edit. A direct call is measured from its arguments; a script carries biorouter/code-delta, which the daemon measures from each sub-call's FULL arguments (agents/code_delta.rs), because a record's args are cut at 2 KB and records past the budget are dropped. Scripts recorded before that fall back to records whose args parse. Shell-written files are not counted. Tests: summary/codeDelta.test.ts (23; 22 red on the old function, incl. the script write +0 instead of +10 and noise +8 -20 instead of 0), codeDeltaCases.json run by both the vitest table and agents::code_delta (5), code_execution_integration case31 against a real truncated write (red with the meta withheld: left None). Replaying session 20261012_6 from the final-a sandbox: +0 -0 before, +10 -0 after (the file is 10 lines). Doc: chat-summary-rail.md.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes from the final end-to-end check of
mainafter #391, #392, #393 and #394 merged. The check ran four sandboxed dev app instances and the CLI on the integrated tree (the same tree asmainat2a795b502), with real model turns on Versa Azure GPT-5.5 (private) and Claude Code (public). 52 checks passed; these six commits fix what failed. None is a merge loss: several existed onmainbefore the redesign and only became visible under real use.What changed
5e3e5453b, sidebar). The daemon stampsupdated_atwhen a message is sent, but the sidebar only re-read the list when the turn finished, so a chat with a long turn sat in place for minutes. The row now moves when the turn starts, and still waits while the pointer is over the list. The same commit hides the New chat shortcut hint on the browser surface (biorouter serve), where the shortcut does not exist.dfb15d29a, summary rail pluscrates/biorouter/src/agents/code_delta.rs). It used to guess added and removed lines from diff-shaped text in the transcript, so it showed+0 −0after a real file write and−9after an investigation that changed nothing. It now counts the edits the file tools and Code Execution actually made.d073e7035, markdown tables). A table that overflowed by 10px hid its right-aligned last column under a fixed 40px fade./bugapproval card shows a readable report body and one warning glyph (414ac9cb9, tool cards). The body rendered as one escaped JSON line 33,000 to 61,000px wide, while the card asked the person to read it before approving.aa0b2c674, toasts) instead of covering the conversation.94e62909b, preview panel).How it was verified
Each fix has a test that fails without it (vitest, Chromium browser tests where layout is involved, and Rust unit and integration tests for the Code count). Targeted suites,
tsc, ESLint and Prettier pass on every changed file;cargo clippy -D warnings, rustfmt andcode_execution_integrationpass for the Rust change. CI on this PR is the full gate.🤖 Generated with Claude Code