Skip to content

fix(chat): place loading status after response - #27

Merged
chryzxc merged 1 commit into
mainfrom
fix/issue-22-loading-indicator-order
Aug 4, 2026
Merged

fix(chat): place loading status after response#27
chryzxc merged 1 commit into
mainfrom
fix/issue-22-loading-indicator-order

Conversation

@chryzxc

@chryzxc chryzxc commented Aug 4, 2026

Copy link
Copy Markdown
Owner

Summary

  • render the live AI status ticker after response and inline subagent content
  • retain its existing live-card ownership and accessibility behavior
  • add an ordering regression test

Verification

  • TAP version 13

Subtest: renderable stream text paints immediately and centralized transcript takes over after completion

ok 1 - renderable stream text paints immediately and centralized transcript takes over after completion

duration_ms: 2.478375
...

Subtest: active compaction owns the live-response surface without stopping stream processing

ok 2 - active compaction owns the live-response surface without stopping stream processing

duration_ms: 1.140875
...

Subtest: transcript ownership is declared after its deferred source and before handoff reads it

ok 3 - transcript ownership is declared after its deferred source and before handoff reads it

duration_ms: 1.598708
...

Subtest: conversation transcript receives transcript ownership as an explicit prop

ok 4 - conversation transcript receives transcript ownership as an explicit prop

duration_ms: 0.364333
...

Subtest: retry status uses a compact accessible inline status treatment

ok 5 - retry status uses a compact accessible inline status treatment

duration_ms: 0.594209
...

Subtest: dismissed live status notifications stay dismissed across retry heartbeats

ok 6 - dismissed live status notifications stay dismissed across retry heartbeats

duration_ms: 0.301791
...

Subtest: compaction divider exposes a clear toggle affordance

ok 7 - compaction divider exposes a clear toggle affordance

duration_ms: 0.570417
...

Subtest: raw text delta envelopes update the live response before final hydration

ok 8 - raw text delta envelopes update the live response before final hydration

duration_ms: 1.3165
...

Subtest: a text-labeled delta stays in reasoning when its SDK part was already typed as reasoning

ok 9 - a text-labeled delta stays in reasoning when its SDK part was already typed as reasoning

duration_ms: 1.1505
...

Subtest: assistant phase changes retain activity but reset response-card ownership

ok 10 - assistant phase changes retain activity but reset response-card ownership

duration_ms: 0.760709
...

Subtest: wrapped SDK stream events pass the visible-turn admission condition

ok 11 - wrapped SDK stream events pass the visible-turn admission condition

duration_ms: 0.273
...

Subtest: sync-wrapped assistant parts can bootstrap the live response

ok 12 - sync-wrapped assistant parts can bootstrap the live response

duration_ms: 0.283166
...

Subtest: stable live SDK events use the same activity projection source as hydration

ok 13 - stable live SDK events use the same activity projection source as hydration

duration_ms: 0.415041
...

Subtest: continuous stream batches remain urgent enough to paint

ok 14 - continuous stream batches remain urgent enough to paint

duration_ms: 2.133
...

Subtest: the shell does not leak loading text into the composer

ok 15 - the shell does not leak loading text into the composer

duration_ms: 1.329834
...

Subtest: the live response card owns the AI loading text until its response finishes

ok 16 - the live response card owns the AI loading text until its response finishes

duration_ms: 1.443834
...

Subtest: the live loading text follows the response card

ok 17 - the live loading text follows the response card

duration_ms: 0.262209
...

Subtest: active assistant cards do not use intrinsic virtualization height

ok 18 - active assistant cards do not use intrinsic virtualization height

duration_ms: 0.277791
...

Subtest: an active transcript placeholder does not suppress live event rendering

ok 19 - an active transcript placeholder does not suppress live event rendering

duration_ms: 0.118583
...

Subtest: ChatShell passes transcript ownership to the live-card handoff

ok 20 - ChatShell passes transcript ownership to the live-card handoff

duration_ms: 0.298167
...

Subtest: reasoning-only transcript phases do not replace the live activity timeline

ok 21 - reasoning-only transcript phases do not replace the live activity timeline

duration_ms: 0.222125
...

Subtest: persisted assistant cards cannot read the session-global live stream

ok 22 - persisted assistant cards cannot read the session-global live stream

duration_ms: 0.23675
...

Subtest: a terminal assistant block stays locked despite late streaming events

ok 23 - a terminal assistant block stays locked despite late streaming events

duration_ms: 0.294291
...

Subtest: stream admission reconstructs the terminal lock from hydrated assistant history

ok 24 - stream admission reconstructs the terminal lock from hydrated assistant history

duration_ms: 1.020542
...

Subtest: the message-less streaming card rerenders for each active SSE update

ok 25 - the message-less streaming card rerenders for each active SSE update

duration_ms: 3.026083
...
1..25

tests 25

suites 0

pass 25

fail 0

cancelled 0

skipped 0

todo 0

duration_ms 119.245167

opencode-vscode-chryzxc@0.3.8 guard:streaming
node scripts/streaming-contract-check.mjs

opencode-vscode-chryzxc@0.3.8 webview:build
npm --prefix webview/shared run build

opencode-webview@0.0.1 build
vite build && node ../../scripts/merge-css.mjs

vite v5.4.21 building for production...
transforming...
✓ 1534 modules transformed.
rendering chunks...
computing gzip size...
dist/ThemeFileIcon.css 2.18 kB │ gzip: 0.80 kB
dist/chat.css 271.00 kB │ gzip: 45.69 kB
dist/walkthrough.js 2.39 kB │ gzip: 0.88 kB
dist/textarea.js 12.55 kB │ gzip: 3.53 kB
dist/plan.js 36.02 kB │ gzip: 7.69 kB
dist/chat.js 1,613.87 kB │ gzip: 290.97 kB
dist/ThemeFileIcon.js 1,866.17 kB │ gzip: 476.06 kB
✓ built in 3.30s
Merged 2 CSS files into chat.css

opencode-vscode-chryzxc@0.3.8 typecheck
tsc --noEmit

Closes #22

@coderabbitai

coderabbitai Bot commented Aug 4, 2026

Copy link
Copy Markdown

Warning

Review limit reached

@chryzxc, you've reached your PR review limit, so we couldn't start this review.

Next review available in: 57 minutes

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

How can I continue?

After more reviews become available, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

To avoid repeated limits, reduce automatic review volume by pausing incremental auto-reviews earlier, using label-based review opt-in, excluding WIP or generated PR titles, or requesting reviews manually when the PR is ready. If your team needs uninterrupted high-volume reviews, an organization admin can enable usage-based reviews.

How do review limits work?

CodeRabbit enforces per-developer PR review limits for each organization. Most developers receive the normal plan review availability.

For paid Pro and Pro+ PR reviews, CodeRabbit uses adaptive limits for sustained high-volume activity. When a developer's recent PR review activity reaches the 95th percentile or higher among CodeRabbit users, additional reviews become available more gradually as earlier reviews age out of the rolling window.

Please refer docs for additional details.

Review details
⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: e7935f8a-fb44-4f44-b316-0a1eb0b93927

📥 Commits

Reviewing files that changed from the base of the PR and between cccdecd and 6e36d12.

📒 Files selected for processing (2)
  • tests/webview/live-stream-response-rendering.test.mjs
  • webview/shared/src/chat/MessageComponents.tsx

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@chryzxc
chryzxc merged commit fef26f3 into main Aug 4, 2026
2 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Bug: AI loading text appears above the AI response card

1 participant