mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-28 20:21:50 +01:00
fix(ui): stabilize task loading and live feeds (#13095)
Coordinate initial conversation reveal, preserve message identity and reading anchors during live updates, and bound transcript reads with recoverable retries. Cover desktop/mobile navigation and rich task loading with actual-route browser tests. Verified all Linux CI gates, 5,575 local UI tests, eight layout browser scenarios, and recorded native Codex walkthroughs. Greptile: 5/5; all review findings resolved. Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
1 parent
35fdc0c66b
commit
cd4c4ed205
32 files changed
+1286
-179
No files matched your search
@@ -134,12 +134,10 @@ function renderItem(
|
||||
return (
|
||||
<TaskChatBubble
|
||||
item={item}
|
||||
// Human messages are inserted optimistically and later replaced by
|
||||
// their canonical server IDs. Animating either mount makes the same
|
||||
// text visibly fade twice during that handoff; user sends should
|
||||
// paint immediately and remain visually stable.
|
||||
// Hydration and live-to-durable reconciliation may move a logical
|
||||
// message between parents. Mounting must never replay a fade.
|
||||
animateEntry={
|
||||
item.author !== "human" && !item.attachedTurn?.standaloneHeader
|
||||
false
|
||||
}
|
||||
actions={
|
||||
item.attachedTurn?.standaloneHeader
|
||||
@@ -372,7 +370,9 @@ export function TaskChatThreadView({
|
||||
{streamlined
|
||||
? renderedItems.map(({ item, content }, index) => (
|
||||
<div
|
||||
key={item.id}
|
||||
key={item.kind === "message" ? item.renderKey ?? item.id : item.id}
|
||||
data-thread-anchor={item.kind === "message" ? item.renderKey ?? item.id : item.id}
|
||||
id={item.kind === "message" ? `comment-${item.id}` : undefined}
|
||||
className={taskChatItemSpacingClass(item, renderedItems[index - 1]?.item ?? null)}
|
||||
data-thread-item-kind={item.kind === "message" ? item.author : item.kind}
|
||||
>
|
||||
@@ -381,7 +381,9 @@ export function TaskChatThreadView({
|
||||
))
|
||||
: items.map((item, index) => (
|
||||
<div
|
||||
key={item.id}
|
||||
key={item.kind === "message" ? item.renderKey ?? item.id : item.id}
|
||||
data-thread-anchor={item.kind === "message" ? item.renderKey ?? item.id : item.id}
|
||||
id={item.kind === "message" ? `comment-${item.id}` : undefined}
|
||||
className={cn(
|
||||
index > 0 &&
|
||||
item.kind === "interaction" &&
|
||||
|
||||
Reference in new issue
Block a user