Skip to content

feat(components): loading states and a cached conversation in its first frame - #942

Merged
zxch3n merged 32 commits into
mainfrom
claude/conv-scroll-3-loading-states
Sep 26, 2026
Merged

zxch3n merged 32 commits into
mainfrom
claude/conv-scroll-3-loading-states

Conversation

@zxch3n

@zxch3n zxch3n commented Sep 24, 2026 •

Copy link
Copy Markdown
Contributor

Related issue

Problem / pressure

Opening a conversation showed a blank pane, a cached conversation flashed a skeleton, and switching between conversations already in memory painted three blank frames (~125ms).

Summary

  • Skeleton only when nothing is cached locally, decided after the IndexedDB read; "Updating" in the info bar while a cached copy catches up (after 400ms, at least 500ms).
  • ManagedStoreCache.peek / peekSessionStore let useSessionDoc render an open store in its first commit; useTurnRange is ready in render once hydrated.
  • The reveal writes visibility directly, and own scroll writes dispatch scroll so Virtua renders the new range in the same frame.

Visual explanation

sequenceDiagram
  participant K as Click
  participant R as React commit
  participant P as Paint
  Note over K,P: Before — 3 blank frames
  K->>R: mount; await acquire(store)
  R->>P: empty pane
  R->>P: hidden (tail ready after a promise tick)
  R->>P: hidden (reveal deferred)
  R->>P: conversation
  Note over K,P: After
  K->>R: mount with peeked store; range hydrated ⇒ ready
  R->>P: conversation (first painted frame)
Loading

Before / after

Before After
In-memory switch: 3 blank frames Conversation in the first painted frame
Cached conversation flashes a skeleton Skeleton only when nothing is cached

Test plan

  • packages/components: tsgo clean; vitest 4060 passed on this layer; docs check clean.

🤖 Generated with Claude Code

zxch3n and others added 3 commits September 24, 2026 12:07
…app restyle on portals

Replace use-stick-to-bottom with three explicit modes (follow, anchored, free):
only reader input releases following, only reaching the real bottom, a jump
or a send re-arms it, and a send anchors its message with room for the reply.
Remove Konsta's unanchored :last-child rule and keep #root off <body>'s tail,
so a portal no longer restyles the whole app.

Model: claude-opus-5-5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…markdown

Memoize sidebar rows with content-visibility, share recursive GitHub tree and
PR reads, batch doc-meta updates, reuse the doc-meta projection at startup and
tokenize markdown code blocks in a worker.

Model: claude-opus-5-5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…st frame

Show a skeleton only when nothing is cached (decided after the local read) and
"Updating" while a cached copy catches up; render an open store synchronously
and reveal the conversation in the frame after the click.

Model: claude-opus-5-5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@zxch3n
zxch3n added this pull request to stack #946 September 24, 2026 04:12
@github-actions

Copy link
Copy Markdown
Contributor

Desktop PR regression failed on commit 5cac4c47ff98896d17fb64e8bc94fb3fddb1fdb4.

Recordings not attached

  • Run evidence: failure-index.json is missing

The Actions artifact retains the complete trace, screenshots, logs, and runtime evidence.

zxch3n and others added 4 commits September 24, 2026 13:13
"chore: acp" moved acp-extension-claude and acp-extension-codex to their main
commits (Claude Agent SDK 0.3.274, @openai/codex ^0.154.0) without updating
pnpm-lock.yaml, so `pnpm install --frozen-lockfile` fails on main and on every
branch based on it. Regenerate the lockfile for those manifests.

Model: claude-opus-5-5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown
Contributor

Desktop PR smoke regression failed on commit 357660045cb83d520d742e2d51481d6bddd5dd7e.

Recordings not attached

  • Run evidence: failure-index.json is missing

The Actions artifact retains the complete trace, screenshots, logs, and runtime evidence.

zxch3n and others added 18 commits September 24, 2026 13:25
7ea5568 moved acp-extension-claude, codex, grok, kimi and pi back to
ancestors of the commits #906 pinned (1 to 17 commits behind, none ahead),
leaving pnpm-lock.yaml (Claude Agent SDK 0.3.280, @openai/codex ^0.156.0) and
apps/cli's runtime manifests (Codex 0.156.0) ahead of the manifests. Frozen
installs and apps/cli tests fail on main. Restore #906's pointers.

Model: claude-opus-5-5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Submodule pointer conflicts take main's values: this branch's only submodule
change was the #948 restore, which main already contains, and main has moved
the ACP submodules forward since (#936, "chore: pi", #952).

Model: claude-opus-5-5

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…oll-2-switch-perf

Brings in origin/main, including `@lody/ui` (#913). The extracted
`SessionGroupRow` takes main's context-menu migration
(`ContextMenu.Root/Trigger/Content/Item onClick/Separator`).

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ll-3-loading-states

Brings in origin/main, including `@lody/ui` (#913). The conversation
skeleton moves to `@lody/ui/skeleton`, whose size is its `width`/`height`
props rather than classes.

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tch-perf

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ing-states

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tch-perf

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ing-states

Brings in origin/main. The info bar shows when there is a related-sessions
tree (#959) or this layer's ambient sync status.

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base UI's dialog (#913) moves focus into its input a frame after it
renders. The shortcut journey pressed Escape as soon as the palette was
visible, so on a slow first launch the key still reached the composer and
the palette stayed open. Wait for the focus a person would see first.

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
(cherry picked from commit 64875fd)
…tch-perf

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ing-states

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
zxch3n and others added 2 commits September 25, 2026 22:13
…tch-perf

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ing-states

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@zxch3n
zxch3n marked this pull request as ready for review September 26, 2026 01:19
zxch3n and others added 3 commits September 26, 2026 09:39
Brings in #973; both sides' imports are kept.

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tch-perf

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude/conv-scroll-1-follow-modes was squash-merged into main. Where this layer edited that layer's
lines the squashed copy conflicts; this layer's side is kept.

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Base automatically changed from claude/conv-scroll-2-switch-perf to main September 26, 2026 02:04
zxch3n and others added 2 commits September 26, 2026 10:04
…ing-states

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
claude/conv-scroll-2-switch-perf was squash-merged into main. Where this layer edited that layer's
lines the squashed copy conflicts; this layer's side is kept.

Model: claude-opus-5-5
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@zxch3n
zxch3n merged commit 6826209 into main Sep 26, 2026
6 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant