Skip to content

V2: Scroll the chat rail as one panel and pop workflow alerts from the bell - #1643

Merged
Paul Lizer (paullizer) merged 3 commits into
microsoft:paullizer-react-v2-uifrom
paullizer:paullizer-v2-sidebar-chat-scroll
Oct 5, 2026
Merged

Paul Lizer (paullizer) merged 3 commits into
microsoft:paullizer-react-v2-uifrom
paullizer:paullizer-v2-sidebar-chat-scroll

Conversation

@paullizer

Copy link
Copy Markdown
Contributor

Summary

On the V2 chat page the rail kept its full height for the navigation and the admin's link groups, and the conversation list scrolled in what was left: two rows in a 720px window with two external links. Classic has scrolled its whole sidebar as one panel since 0.250.002 (#1098).

  • Chat rail scrolls as one panel. With the rail expanded on the chat page, everything between New chat and the theme/account footer is now one scroll region. Reading down the list carries the navigation and External Links / Custom Pages out of view, and Search chats (plus the bulk-selection bar) is held right under New chat. The list goes from 2 visible rows to 12 at 1280x720. The collapsed strip and other pages are unchanged.
  • Details in ConversationRail:
    • The list no longer has its own scroller. The held header gets a solid backing and an edge only while it is held, and a data-stuck attribute written straight to the DOM, so no re-render.
    • Paging and the held-header observer now use the rail region as their root, so the 120px look-ahead works again.
    • The section keeps the region's height while a search narrows the list, so the search box doesn't jump.
    • Keyboard focus on a row under the held search is moved clear of it (WCAG 2.4.11). This is a small :focus-visible handler, because Chromium ignored scroll-margin here and scroll-padding threw the list 516px whenever the search box took focus.
  • Workflow alerts pop from the bell instead of My Workspace, which the rail can now scroll away:
    • Expanded rail: the notice drops below the bell like the bell's panel does, hanging past the rail edge.
    • Collapsed rail or phone: it flies out beside the bell.
    • It follows the bell in the tab order.
  • Merged with V2 workflow alerts: require acknowledgment, repeating sound, size options and team delivery (0.261.235) #1636 (must-acknowledge alerts). V2 workflow alerts: require acknowledgment, repeating sound, size options and team delivery (0.261.235) #1636 gave those alerts their own room below My Workspace so they never cover anything. That room is now WorkflowAlertRowSlot, a row under the rail header. Its notch is measured to point at the bell, it pushes New chat and the nav down, and it sits outside the scroll region. The flyout keeps V2 workflow alerts: require acknowledgment, repeating sound, size options and team delivery (0.261.235) #1636's step-aside. This PR is renumbered to 0.261.236, since V2 workflow alerts: require acknowledgment, repeating sound, size options and team delivery (0.261.235) #1636 took 0.261.235.
Before: at rest (list squeezed to 2 rows) After: list scrolled, search held under New chat
V2 rail before: navigation and external links fill the rail, two conversation rows visible V2 rail after scrolling: navigation scrolled away, search held under New chat, twelve rows visible
Ordinary alert: drops from the bell Needs acknowledgment: its own row under the bell
Workflow alert notice dropping from the bell over the page Must-acknowledge notice in a row under the rail header, pointing at the bell, New chat pushed down

Linked issue

Fixes #1642

Refs #1636 (must-acknowledge alerts, reconciled in the merge commit), #1553

Release Notes & Latest Features

  • New Feature
  • Bug Fix
  • UI Enhancement
  • Breaking Change
  • Internal only

Is this visible to end users?

  • Yes
  • No

Is this admin-facing (Admin Settings, governance, deployment, config)?

  • Yes
  • No

Should this become a Latest Feature card?

  • Yes
  • No
  • Already added

Screenshot needed for the card?

  • Yes
  • No
  • Attached

Version bump

  • application/single_app/config.py VERSION third segment bumped, or not needed because this is docs-only (0.261.235 -> 0.261.236)
  • deployers/version.txt bumped, or not needed because deployers/ was not changed

Testing / validation

All run on the merged branch (after #1636), with the V2 bundle rebuilt:

  • npm --prefix application/v2_ui run typecheck: passed
  • python functional_tests/test_v2_sidebar_conversation_scroll.py: 8/8 passed
  • python -m pytest ui_tests/test_v2_workflow_alert_notices.py: 60 passed (includes V2 workflow alerts: require acknowledgment, repeating sound, size options and team delivery (0.261.235) #1636's must-acknowledge tests and the new bell/row geometry checks)
  • python -m pytest ui_tests/test_v2_sidebar_conversation_scroll.py ui_tests/test_v2_notifications_bell.py ui_tests/test_v2_new_chat_reset.py ui_tests/test_v2_workflow_alerts.py: 90 passed
  • python -m pytest <file>, one file at a time: all passed for test_v2_new_chat_scoping (6), test_v2_sidebar_account_menu (8), test_v2_conversation_multiselect (17), test_v2_notifications_bell (10), test_v2_brand_mark_home_link (4), test_v2_conversation_drawer (8), test_v2_conversation_export (15), test_v2_shared_conversations (14), test_v2_inline_image_proposal_resume (10), test_v2_settings_and_workspace_tags (9), test_v2_api_payload_shapes (6), test_v2_public_workspace_labels_pin (2), test_docs_site_quality (6), test_docs_app_surface_coverage (7), test_v2_alert_lab_excluded_from_build (4), test_workflow_alert_acknowledgment (53), test_workflow_alert_client_parity (100), test_workflow_alert_bounded_query (48), test_workflow_alert_error_redaction (25), test_workflow_alert_sounds_setting (6), test_workflow_alert_sound_parity (3), test_workflow_alert_sound_assets (2)
  • Visual pass: the screenshots above come from the real AppShell with production CSS (stubbed HTTP). The notch-to-bell offset measures under 1px in every placement.
Pre-existing failures, identical on the base tip 5be1d84 (not touched by this PR)

This PR's only backend change is the VERSION string. Each of these gives the same result when run against an extract of the base tip in this environment:

  • test_v2_conversation_deep_link::test_incoming_link_is_captured_before_any_effect_runs and test_v2_stats_parity::test_charts_use_the_shared_vendored_runtime: the asserted code isn't in the base's ChatPage.tsx / InlineChart.tsx, neither of which this PR changes.
  • test_workflow_alert_notifications_import_cycle: the 2 scheduler-runner-first cold-import variants fail.
  • test_workflow_priority_alerts: 2 fail.
  • test_workflow_alert_since_hours_policy: 1 failure plus setup errors.
  • test_workflow_alert_acknowledge_policy and test_group_workflow_file_sync_client_parity: fixture setup errors.

Documentation

  • Release notes updated, or not needed (new v0.261.236 section)
  • Feature documentation updated, or not needed (REACT_V2_UI.md, V2_WORKFLOW_ALERT_NOTICES.md, WORKFLOW_ALERT_ACKNOWLEDGMENT.md, guides/manage-notifications.md, reference/chat-controls.md)
  • Fix documentation updated, or not needed (new fixes/V2_SIDEBAR_CONVERSATION_SCROLL_FIX.md)

Security checklist

  • New Flask routes include @swagger_route(security=get_auth_security()) (no routes added)
  • Settings sent to non-admin frontends use sanitize_settings_for_user() (no settings payloads changed)
  • Browser JavaScript is served from local SimpleChat static assets only; no CDN-hosted JS
  • No secrets, keys, connection strings, or local-only artifacts are included

Paul Lizer (paullizer) and others added 3 commits October 5, 2026 15:53
…e bell

On the chat page the rail kept its full height for the navigation and the
link groups, and the conversation list scrolled in what was left: two rows
in a 720px window with two external links. Everything between New chat and
the footer now scrolls as one panel, as the classic sidebar does. Reading
down the list carries the navigation out of view and holds Search chats
(and the bulk bar) right under New chat. The collapsed strip and other
pages are unchanged.

- ConversationRail has no scroller of its own; its header is sticky and
  marked data-stuck while held (solid backing and edge only then).
- Paging and the stuck marker observe the rail's region, so the 120px
  look-ahead now applies.
- The section keeps the region's height while searching, so narrowing
  results cannot drag the search box out from under the cursor.
- Keyboard focus on a row under the held search is moved clear of it
  (WCAG 2.4.11); mouse clicks are left alone.
- The workflow alert notice now hangs from the bell instead of My
  Workspace, which the rail can scroll away: below the bell like its
  panel when expanded, beside it when collapsed or on a phone.

Version 0.261.235. Fixes microsoft#1642.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Refs microsoft#1642.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Brings in microsoft#1636 (must-acknowledge workflow alerts, sounds, sizes and team
delivery), which also used 0.261.235 and changed the alert notice this
branch moves from My Workspace to the bell.

- WorkflowAlertNotice.tsx: kept the bell anchor. microsoft#1636 gave an alert that
  needs acknowledgment room of its own below My Workspace in the full
  rail; that room is now WorkflowAlertRowSlot, a row under the rail's
  header whose notch is measured to point at the bell. It pushes New chat
  and the navigation down and sits outside the chat scroll region. The
  bell's overlay slot stands aside while it is in use; the flyout keeps
  microsoft#1636's step-aside behaviour.
- Feature docs and the notifications guide describe the row instead of
  My Workspace; both sides' text is kept.
- Renumbered this PR to 0.261.236: config.py, this PR's tests and docs,
  and its release-notes section, now above microsoft#1636's 0.261.235 entry.
- Tests: the in-flow test also checks the row hangs from the bell, comes
  after the header controls and survives collapse/expand; the scrolled
  chat rail test covers a must-acknowledge alert; the functional test
  guards the row.

Refs microsoft#1642.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
@paullizer
Paul Lizer (paullizer) merged commit 25470e7 into microsoft:paullizer-react-v2-ui Oct 5, 2026
9 of 10 checks passed
Paul Lizer (paullizer) added a commit that referenced this pull request Oct 5, 2026
paullizer-react-v2-ui merged #1643 (V2 sidebar conversation scroll) and
published v0.261.236, which this branch used for Phase 1.

The integration branch's sections are kept exactly as published. This
branch's ten sections shift up one, to v0.261.237 through v0.261.246,
and config.py becomes 0.261.246. Every file only this branch changed is
checked to equal its previous content with those versions shifted, every
file only the integration branch changed is byte-identical to it, and
the release notes are the integration branch's file plus this branch's
ten sections. None of the integration branch's own text in this branch's
files used the shifted versions.

Only config.py and the release notes changed on both sides, and both
conflicted on versions only.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer) added a commit that referenced this pull request Oct 5, 2026
V2 moved to 25470e7 (VERSION 0.261.236) when #1643 merged: the V2 chat
rail scrolls as one panel, and workflow alerts pop up from the bell.

Conflicts:
- config.py: keep this branch's 0.261.238, still above V2's 0.261.236.
- release_notes.md: keep both sections, 0.261.238 above 0.261.236.

#1643 shares no other file with this branch. Apart from config.py, the merged
tree differs from ac9e524 only in #1643's 15 files, each identical to V2's.
docs/_data/app_surface.yml is unchanged after re-running
scripts/build_docs_inventory.py.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer) added a commit that referenced this pull request Oct 5, 2026
PR #1643 took 0.261.236, so the settings fix moves to 0.261.237 and the
Microsoft 365 orchestration fix to 0.261.238. This merge resolves the
version and release notes conflicts; the next commit renumbers the rest.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer) added a commit that referenced this pull request Oct 5, 2026
PR #1643 took 0.261.236 on paullizer-react-v2-ui. The settings document
type fix is now 0.261.237, and the Microsoft 365 orchestration fix is
0.261.238, in code headers, tests and documentation.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
Paul Lizer (paullizer) added a commit to paullizer/simplechat that referenced this pull request Oct 6, 2026
Brings in V2 25470e7 (0.261.236, the V2 sidebar conversation scroll fix).

Conflicts resolved:
- config.py: keep 0.261.237.
- ConversationRail.tsx: keep the WorkflowRunningTag import and mount with
  V2's widened FocusEvent/ReactNode/RefObject type import.
- V2_WORKFLOW_ALERT_NOTICES.md: keep both since-version lines in order;
  V2's 60-test row with Open run wording; Open run provenance row.
- test_v2_workflow_alert_notices.py: Version 0.261.237 with every
  history line from both sides.
- release_notes.md: 0.261.237 section above V2's 0.261.236 section.

Co-authored-by: Copilot App <223556219+Copilot@users.noreply.github.com>
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