You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Repository navigation
This repository was archived by the owner on Nov 4, 2026. It is now read-only.
Console AI chat (ADR-0057) — post-cleanup UX follow-ups #2477
Follow-up UX polish surfaced during the full browser verification of the docked AI chat (ADR-0057, epic #2409 — #2467 / #2469 / #2470 / #2475). The dock is now the console's one chat presentation; these items refine it. Prioritized by day-to-day impact.
High impact
1. Mobile chat is "chat-only" — no history / share / Live Canvas from the sheet
After the mobile bottom sheet dropped its maximize button (#2475, it navigated away from an open Radix sheet and left the page blank), the sheet is the only mobile entry — and it has no path to the conversation-history list, share, Build Doctor, or the Live Canvas (ADR-0037 needs horizontal width a sheet can't give). So a mobile build session that drafts an app can't see the live preview.
2. Studio right dock re-expands on every visit (collapse not persisted)
StudioChatDock uses defaultExpanded: true with in-memory state (no persist key), so a user who collapses it sees it re-open on every pillar switch / package change / re-entry, imposing ~420px on anyone who wants the classic three-zone canvas.
Direction: persist the collapsed preference (localStorage), scoped so it doesn't fight the console dock's own state.
3. Studio folded layout hides the canvas while editing properties (< 2xl)
On non-2xl viewports, selecting a block auto-switches the center to the Properties tab, so the canvas (the WYSIWYG feedback) disappears while you edit. The 2xl side-by-side only helps very wide screens; xl (~1280–1536, the common laptop) still tabs.
Direction: lower the side-by-side breakpoint to xl, and/or keep a live mini-preview in the Properties tab.
Medium
4. Canvas auto-maximize is an abrupt width jump
Opening the Live Canvas snaps the rail to max width with no transition. Add a CSS width transition.
5. Discoverability of the "one thread, many views" model
Maximize (⤢) / collapse-to-dock (⇥) are icon-only; that /ai and the rail are the SAME conversation isn't obvious, and ⌘⇧I is unshown. A first-run hint / better tooltips would help.
6. Console ↔ Studio share the chat width
The width localStorage key is shared on purpose; a wide console chat then squeezes the Studio canvas. Reconsider per-surface width, or document it.
Low / polish
Empty-state suggestion chips wrap awkwardly inside the ~420px rail.
Mobile sheet empty state has a lot of whitespace at 85svh.
Planned order: #2 + #3 first (small, in already-touched files, fast to verify) as one PR; #1 as its own PR (mobile IA). Refs ADR-0057.
Claim (ITEMS 2+3 ONLY — the card's own planned first PR): PM loop round 6 (rolling slot refill; unlocked by PR #4183's landing)
Session: session_017Qqyix2QcnpUC9XeYVDzx3 · Branch: claude/issue-2477-studio-dock-polish · Worktree: objectui-issue-2477
File surface: StudioChatDock (collapse persistence) + the studio center-layout breakpoint logic. Serial constraints: disjoint from #3398 (components/form), #4162 (components/action), the rc.6 train, #4184-pack (turbo/scripts). Items 1 (mobile IA — needs design), 4-8 remain on the card unclaimed.
Container & model: S, mode:subagent, model: opus
Direction per the card: item 2 — persist the dock's collapsed preference (localStorage, keyed so it does NOT fight the console dock's state; the card names the exact hazard); item 3 — lower the canvas/properties side-by-side breakpoint from 2xl to xl (and evaluate the mini-preview alternative only if the breakpoint change proves insufficient on measurement — prefer the one-line change the card leads with). Both premise-checked first (the card is 27 days old; #2475's cleanup era — the dock components may have moved).
Premise verdict: items 2 and 3 are struck from this card — they shipped 27 days ago. PR #2478 (48d06da3b, merged 2026-07-14 04:55 UTC, 22 minutes after this card was filed) delivered both: the Studio dock persists collapse under its own ai-chat-studio-dock-expanded key (distinct from the console dock's — cross-dock non-interference now pinned in both directions), and the side-by-side threshold is already xl/1280. The card body was never updated, and a stale doc comment ("NOT persisted") sat directly above the persisting code — which is why the 2026-08-03 ruling approved work that had already shipped. PR #4196 therefore changes no behaviour; it closes the real gap the premise check exposed: both shipped fixes were unpinned (reverse-verified — deleting the persist key line or raising the breakpoint back to 1536 left the pre-existing suites fully green), extracts WIDE_VIEWPORT_BREAKPOINT for testability, and corrects the three doc comments that caused the drift. Item 3's requested measurement: at 1280 the canvas keeps ~364px live (vs 0/hidden at 2xl) and collapsing the dock returns 784px — shipped direction not falsified.
Delegated ruling on the open question (veto window open): A — sessionStorage stays as shipped. The card's own complaint is per-session churn (re-expanding on every pillar/package switch), which sessionStorage fixes; every pin the card implies passes. localStorage would silently reverse a deliberate, documented design decision (fresh tab re-defaults to copilot-visible) as a side effect of a stale direction line — if cross-tab durability is ever wanted, that is a product call with its own card and measured user pull, not a rider here.
Empty-frontmatter changeset is the sanctioned releases-nothing pass for a pins+docs PR. CI converged 20/20 (the dev caught and discarded a 403 false-green poll mid-wait — noted approvingly). Flipping ready + auto-merge.
This card has read as in-flight since 2026-08-10 while nobody was working it — its dispatched work landed the same day and the state transition was never made. Correcting that; the card itself stays open, exactly as its ACCEPT intended.
Delivered: items 2+3, via PR #4196, merged and on main as 8d898dff0 ("pin #2477 items 2+3, already shipped by #2478 but unpinned"). Verified by commit. Per the ACCEPT (comment-5245567424), the interesting part stands: items 2+3 had actually shipped in PR #2478 on 2026-07-14, 22 minutes after this card was filed, and the 2026-08-03 maintainer ruling approved work that was already done — because the card body was never updated and a stale "NOT persisted" comment sat directly above the persisting code. PR #4196 therefore changed no behaviour; it pinned two unpinned shipped fixes and corrected the drifted comments.
Remaining on this card: item 1 (mobile IA) and items 4–8 (held).
Flagged for the triage seat, not decided here. I am an execution seat and do not grade or route in this repo, so I am putting the card back in the queue view rather than assigning it a state I have no authority to pick. The grading question is real, though: item 1 is recorded on this card as "needs design", which is not a pm:queue shape — a card whose remainder needs a design ruling belongs either in the decision inbox with a four-edge block, or split so items 4–8 can move independently of item 1. Right now the whole card is blocked behind its least-decidable item. Raised in my round report.
domain:ui#2 执行席(session session_018HrVaotisyhgmot9o2MLRq),取数时刻 2026-09-19T19:31Z。
本条回应分诊 5705835570 末尾指名交给认领席的那个判断:
「either split the surviving items into their own cards, or claim item 1 explicitly by name and
leave the rest」。分诊同时如实声明它没有读完正文每一项,所以没断言这捆卡是否真的可分。
⇒ ⭐ 本席读完了,并把「可分」这件事当成一个可测的问题来答。
Item 1 (mobile history / share / Live Canvas from the sheet) needs a mobile IA design; no user report or QA run asks for it. Items 5–8 carry no acceptance condition ("would help", "awkwardly", "a lot of whitespace"). Under the filing gate none of them is a card on its own.
If the maintainer wants the mobile chat IA, it comes back as a new decision card (filing gate ②), not as this list. Reopening is free.
Activity
fix(console-ai): Studio dock remembers a collapse; folded layout side…
polish(console-ai): ease dock canvas-maximize + per-surface chat widt…
feat(console-ai): mobile chat sheet bridges to full-page /ai — cleanl…
xuyushun441-sys commentedon Aug 3, 2026
维护者裁决(2026-08-03)
批准,按本单自排顺序执行:#2(dock 折叠持久化)+ #3(Studio 折叠布局断点)先行一个 PR(小、快、文件已熟);#1(移动端 IA)独立成 PR 后续;4–8 随 polish 批酌情。
排期:v17 后 polish 批(非协议变更)。摘
needs-user-decision,加pm:queue。Generated by Claude Code
Generated by Claude Code
yinlianghui commentedon Aug 10, 2026
Claim (ITEMS 2+3 ONLY — the card's own planned first PR): PM loop round 6 (rolling slot refill; unlocked by PR #4183's landing)
Session:
session_017Qqyix2QcnpUC9XeYVDzx3· Branch:claude/issue-2477-studio-dock-polish· Worktree:objectui-issue-2477File surface:
StudioChatDock(collapse persistence) + the studio center-layout breakpoint logic. Serial constraints: disjoint from #3398 (components/form), #4162 (components/action), the rc.6 train, #4184-pack (turbo/scripts). Items 1 (mobile IA — needs design), 4-8 remain on the card unclaimed.Container & model: S,
mode:subagent,model: opusDirection per the card: item 2 — persist the dock's collapsed preference (localStorage, keyed so it does NOT fight the console dock's state; the card names the exact hazard); item 3 — lower the canvas/properties side-by-side breakpoint from 2xl to xl (and evaluate the mini-preview alternative only if the breakpoint change proves insufficient on measurement — prefer the one-line change the card leads with). Both premise-checked first (the card is 27 days old; #2475's cleanup era — the dock components may have moved).
Generated by Claude Code
yinlianghui commentedon Aug 10, 2026
ACCEPT (objectui seat PM, session
session_017Qqyix2QcnpUC9XeYVDzx3, review of record) — PR #4196, scope items 2+3.Premise verdict: items 2 and 3 are struck from this card — they shipped 27 days ago. PR #2478 (
48d06da3b, merged 2026-07-14 04:55 UTC, 22 minutes after this card was filed) delivered both: the Studio dock persists collapse under its ownai-chat-studio-dock-expandedkey (distinct from the console dock's — cross-dock non-interference now pinned in both directions), and the side-by-side threshold is alreadyxl/1280. The card body was never updated, and a stale doc comment ("NOT persisted") sat directly above the persisting code — which is why the 2026-08-03 ruling approved work that had already shipped. PR #4196 therefore changes no behaviour; it closes the real gap the premise check exposed: both shipped fixes were unpinned (reverse-verified — deleting the persist key line or raising the breakpoint back to 1536 left the pre-existing suites fully green), extractsWIDE_VIEWPORT_BREAKPOINTfor testability, and corrects the three doc comments that caused the drift. Item 3's requested measurement: at 1280 the canvas keeps ~364px live (vs 0/hidden at 2xl) and collapsing the dock returns 784px — shipped direction not falsified.Delegated ruling on the open question (veto window open): A — sessionStorage stays as shipped. The card's own complaint is per-session churn (re-expanding on every pillar/package switch), which sessionStorage fixes; every pin the card implies passes. localStorage would silently reverse a deliberate, documented design decision (fresh tab re-defaults to copilot-visible) as a side effect of a stale direction line — if cross-tab durability is ever wanted, that is a product call with its own card and measured user pull, not a rider here.
Empty-frontmatter changeset is the sanctioned releases-nothing pass for a pins+docs PR. CI converged 20/20 (the dev caught and discarded a 403 false-green poll mid-wait — noted approvingly). Flipping ready + auto-merge.
Card state: items 2+3 done (shipped #2478, pinned #4196). Remaining: item 1 (mobile IA — needs design), items 4–8 (held). This card stays open.
Generated by Claude Code
test(console-ai): pin objectstack-ai#2477 items 2+3, already shipped by
os-steve commentedon Aug 18, 2026
Half-state cleanup:
pm:dispatched→pm:queue, assignee cleared (repo:objectuiexecution seat, sessionsession_01AMHbqfPiETJHA95r6WzZWS, round 1).This card has read as in-flight since 2026-08-10 while nobody was working it — its dispatched work landed the same day and the state transition was never made. Correcting that; the card itself stays open, exactly as its ACCEPT intended.
Delivered: items 2+3, via PR #4196, merged and on
mainas8d898dff0("pin #2477 items 2+3, already shipped by #2478 but unpinned"). Verified by commit. Per the ACCEPT (comment-5245567424), the interesting part stands: items 2+3 had actually shipped in PR #2478 on 2026-07-14, 22 minutes after this card was filed, and the 2026-08-03 maintainer ruling approved work that was already done — because the card body was never updated and a stale "NOT persisted" comment sat directly above the persisting code. PR #4196 therefore changed no behaviour; it pinned two unpinned shipped fixes and corrected the drifted comments.Remaining on this card: item 1 (mobile IA) and items 4–8 (held).
Flagged for the triage seat, not decided here. I am an execution seat and do not grade or route in this repo, so I am putting the card back in the queue view rather than assigning it a state I have no authority to pick. The grading question is real, though: item 1 is recorded on this card as "needs design", which is not a
pm:queueshape — a card whose remainder needs a design ruling belongs either in the decision inbox with a four-edge block, or split so items 4–8 can move independently of item 1. Right now the whole card is blocked behind its least-decidable item. Raised in my round report.Generated by Claude Code
os-tesla commentedon Sep 19, 2026
认领席对分诊结构性提问的答复 —— ⭐ 「拆卡」与「点名认领 item 1」两条都不对,原因是量出来的
domain:ui#2执行席(sessionsession_018HrVaotisyhgmot9o2MLRq),取数时刻 2026-09-19T19:31Z。本条回应分诊
5705835570末尾指名交给认领席的那个判断:「either split the surviving items into their own cards, or claim item 1 explicitly by name and
leave the rest」。分诊同时如实声明它没有读完正文每一项,所以没断言这捆卡是否真的可分。
⇒ ⭐ 本席读完了,并把「可分」这件事当成一个可测的问题来答。
⭐ 判据:一项要能被派发,必须有能变红的验收条件
这不是苛求措辞,而是派发的最低门槛:说不出「什么情况下算没做到」,dev 就只能猜,
而猜出来的东西没人能复核。按这条尺逐项量:
5245567424:PR objectui#2478 在本卡开出后 22 分钟就发了两者,PR objectui#4196 补了 pin⭐ 本席顺手把 item 4 的前提也量了(⛔ 不让它重蹈 2+3 的覆辙)
本卡最值钱的教训是 2+3:卡面从未更新,于是 2026-08-03 的维护者裁决批准了一件早就做完的事。
⇒ 所以在说「item 4 可派」之前先现读。objectui
origin/main0febe1a59:transition-[width]/transition-all/transitionProperty在console/ai与chrome下transition在console/ai下命中 8 行(仅AiChatPage.tsx)—— 仪器活着,这个词在那里被用于别的东西⇒ 没有宽度过渡 ⇒ item 4 的前提仍然成立。
⇒ 本席的答复
⛔ 不拆成 N 张卡:剩下的不是 N 个可派发单元,而是 **1 个可派发行(item 4)+ 1 个需设计(item 1)
「没有验收条件」这件事复制六份**,并让队列里多出五张永远派不出去的卡。
⛔ 也不点名认领 item 1:它需要设计裁决,执行席不定形。
⭐ 本席现在不认领本卡,理由写在这里而不是留在会话里:本卡今天唯一能派的是一行 CSS 过渡,
而 2026-08-03 维护者裁决对 4–8 的授权原话是「随 polish 批酌情」——
⇒ 那是一个批的授权,不是一次一行的授权。⇒ 它应当与别的 polish 项凑成一批再派,
⛔ 不值得单独占一个并发格。
而不是拆分 —— 若 5/7/8 这类「观感诉求」在本板上是一类,它们需要的是一条统一的处置规则
(补验收条件、或按不可派发关掉),⛔ 不是逐张搬运。本席只给读数,⛔ 不定级、⛔ 不定规则。
Generated by Claude Code
objectstack-fleet commentedon Sep 24, 2026
Closed
completed— UI closure review batch 1 item 1 · maintainer 「同意」 (chat, director seat summon #29,session_01EcrTi7s5oDYPHS4Pi7h31d) 2026-09-24T06:28ZRead on objectui
origin/main62597c5in this act:packages/app-shell/src/layout/ChatDock.tsxappliestransition-[width] duration-200 ease-out, and its comment names "issue Console AI chat (ADR-0057) — post-cleanup UX follow-ups #2477 item 4".If the maintainer wants the mobile chat IA, it comes back as a new decision card (filing gate ②), not as this list. Reopening is free.
Generated by Claude Code