Skip to content

fix(flow-chat): stabilize streamed layout transitions - #1861

Merged
wsp1911 merged 2 commits into
GCWing:mainfrom
wsp1911:dev2
Jul 29, 2026
Merged

fix(flow-chat): stabilize streamed layout transitions#1861
wsp1911 merged 2 commits into
GCWing:mainfrom
wsp1911:dev2

Conversation

@wsp1911

@wsp1911 wsp1911 commented Jul 29, 2026

Copy link
Copy Markdown
Collaborator

Summary

  • Retain semantic collapse anchors while tool cards animate and Virtuoso publishes delayed height measurements.
  • Reconcile sticky-pin, tail-follow, and collapse reservations without exposing transient scroll-range loss.
  • Move runtime wait indicators out of modelRounds.items into fixed-height, session-scoped UI slots.
  • Reuse the existing main Footer space and align BTW/Subagent status slots with their local content.
  • Expand regression coverage and document the resulting scroll-stability model.

Fixes #

Type and Areas

Type:

Regression fix / UI/UX / refactor / test / docs

Areas:

Web UI, FlowChat virtualization, viewport coordination, runtime status

Motivation / Impact

Streaming tool-card collapses and delayed Virtuoso compensation could cause
visible flashes, downward jumps, lost pinned positions, or excess tail space.

Runtime status was also represented as a pseudo FlowItem, so showing or
removing it changed the virtualized list structure and triggered additional
measurement and compensation work.

This change preserves semantic anchors through delayed layout settlement,
bounds pin-owned tail space, and renders runtime status in fixed slots whose
visibility does not affect list height.

Verification

  • pnpm run type-check:web — passed
  • pnpm run lint:web — passed
  • Focused Vitest run covering runtime status, VirtualMessageList, BTW,
    Subagent projection, persistence, dispatch, text chunks, and FlowTextBlock
    — 9 files and 108 tests passed
  • Follow-up BTW and runtime slot Vitest run — 2 files and 33 tests passed
  • git diff --check — passed
  • Interactive validation was not run as part of this final packaging step.

Reviewer Notes

  • RuntimeStatusSlot occupies the first 24px of the existing main Footer;
    it does not increase the Footer's total height.
  • Runtime status is transient Zustand state keyed by session, turn, and round.
    It is no longer persisted, exported, or included in assistant output.
  • Sticky-pin reservation is capped at one viewport. Collapse compensation is
    intentionally not capped because large or cumulative collapses may require
    more range to preserve a semantic anchor.
  • Temporary tail reservation during delayed Virtuoso settlement is expected
    and drains through measured growth, navigation, or quiet settlement.

Checklist

  • This PR is focused and does not include secrets, temporary prompts, generated scratch files, or unrelated artifacts.
  • Relevant verification is recorded above, or skipped checks are explained.
  • User-facing strings, docs, and locales are updated where applicable.

wsp1911 added 2 commits July 29, 2026 22:00
- Retain semantic collapse anchors through delayed virtualizer measurements.
- Reconcile sticky-pin, tail-follow, and footer reservations atomically.
- Move runtime wait indicators out of FlowItems into fixed session slots.
- Expand scroll stability tests and documentation.
- Constrain explore groups to the centered 900px assistant content width.
- Align main footer runtime status with model rounds and tool cards.
- Apply the same runtime status width constraint in BTW sessions.
- Reuse responsive FlowChat padding tokens across auxiliary content.
@wsp1911
wsp1911 merged commit 5ad8f4f into GCWing:main Jul 29, 2026
7 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.

1 participant