Unify the log across mobile and tablet #34
Labels
No labels
needs-info
needs-triage
ready-for-agent
ready-for-human
v2
wayfinder:grilling
wayfinder:map
wayfinder:prototype
wayfinder:research
wayfinder:task
wayfinder:ticket
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
aiko/denpa#34
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
The same log renders two different ways depending on viewport, because two issues built it independently.
The B2 integration merged
#12(mobile chrome) and#16(tablet landscape) into one viewport-dispatched component, and kept both sides' behaviour deliberately — except here. Today:ChatHistoryPanel— real messages, pre-Denpa styling.LogRail, the 受信記録 design with relay rows.So rotating a tablet across the breakpoint changes what the log looks like, not just where it sits.
Why it was left
Unifying needs
LogRail's hard-coded320pxwidth parameterised, and the overlay presentation is § 4a/5c work rather than integration work. The integrating agent recorded it in.denpa-work/QUESTIONS.mdrather than resolving it by fiat, which was the right call — picking a side would have silently dropped one design.What is needed
One log presentation, driven by the chrome plan the way every other band already is.
LogRailbecomes width-parameterised so the overlay can host it at mobile widths, and the upstreamChatHistoryPanelstops being the mobile log.#17(受信記録) has since landed and owns the relay-row design — build on it rather than beside it.Acceptance
ChatHistoryPanelis no longer the log on any surface; if it becomes unreferenced, delete it.Rescoped — most of this is already built, and this issue's description is stale.
Established while resolving #46. This issue says mobile reaches the log through an overlay rendering the upstream chatscope
ChatHistoryPanel, and that the unification needsLogRail's hard-coded320pxparameterised. Both have since happened:src/renderer/src/components/receiver/receiver-chrome.tsx:259-263rendersLogOverlaywithLogRailatwidth: '100%'— the overlay already hosts the rail.src/renderer/src/components/receiver/log-rail.tsx:326takeswidth = LOG_RAIL_WIDTHas a prop accepting a number or a string, so320pxis a default rather than a hard-code.log-rail.tsx:34records the intent: "The 1c rail is a 320px column; the 1a overlay is the same log filling the stage. One component."ChatHistoryPanelis no longer the log on any surface. It is reachable only fromcomponents/sidebar/sidebar.tsx, which nothing renders —chrome-is-mounted.test.ts:24assertsAppdoes not mount<Sidebar>.The design question is also now answered.
#46rendered the realLogRailat 484, 800 and 320 px and the human verdict was that all three read correctly. The relay row's density is intentional at every width — no wide-variant row, no width-specific treatment. The overlay's extra header and close key are accepted as a legitimate difference from the rail, which needs no dismissal.What is actually left
ChatHistoryPanel, andsidebar.tsxwith it if nothing else survives there. This issue's own acceptance already asks for it: "if it becomes unreferenced, delete it."chrome-plan, not observed.Note that reaching the log on a device is currently blocked by onboarding — see #49, which renders as a fixed 292x600 card and has to be got past first.
The deletion is done in
3b5e507, merged as257904d. The two device checks are not, so this stays open.Item 1 of the rescope, complete. Deleted:
components/sidebar/chat-history-panel.tsx— the upstream chatscope logcomponents/sidebar/sidebar.tsx— its only parent, which nothing renderedhooks/sidebar/use-sidebar.tsandhooks/sidebar/use-chat-history-panel.ts@chatscope/chat-ui-kit-reactand@chatscope/chat-ui-kit-stylesdependencies, withApp.tsx's stylesheet import andmain.tsx'sconsole.errorsuppression that existed only to silence that library's warningsuse-sidebar.tswas also#50's thirdcreate-new-historycaller, which is why the two went in one pass.cut-surfaces.test.tsgained a block that fails if any of the four files or the namesChatHistoryPanel,useSidebar,useChatHistoryPanelor@chatscopereappear anywhere in the renderer. One existing assertion had to change:keeps name and avatar on AI messagespinnedmsg.avatarin the deleted panel. It now pins the field on the wire and in the context only, with a comment saying why there is no render site left —LogRaildoes not draw an avatar.Not deleted, deliberately.
bottom-tab.tsx,history-drawer.tsx,screen-panel.tsx,sidebar-styles.tsxanduse-history-drawer.tsare now unreferenced too, sinceSidebarwas their last parent.cut-surfaces.test.ts:114-123pinsscreen-panel.tsxandbottom-tab.tsxon purpose — 画面共有 stays in v1 per#45— so removing them is a separate decision about where the screen grant lives, not part of this one.chat-bubble.tsxwas already orphaned before this change.Gate: 769 vitest across 50 files, 18 Rust, all passing.
What is left, and why I could not do it
Items 2 and 3 of the rescope both need hardware:
chrome-plan, still not observed.#49(the 292x600 onboarding card) had to be got past first and has since landed, so the path to the log on a device should now be open. Leaving this issue open for those two.Moved back to
ready-for-human. Item 1 of the rescope — deleting the deadChatHistoryPanelpath — merged as257904d. Both items that remain are device checks: rotation across the 900px breakpoint changing only placement and width, and silence versus not-yet-loaded staying visually distinct at both sizes. Neither is a test an agent can write, so the label was overstating what was takeable.