Skip to content

UI: harden chat scroll interrupts#72957

Open
enis-uys wants to merge 5 commits into
openclaw:mainfrom
enis-uys:main
Open

UI: harden chat scroll interrupts#72957
enis-uys wants to merge 5 commits into
openclaw:mainfrom
enis-uys:main

Conversation

@enis-uys

@enis-uys enis-uys commented Apr 27, 2026

Copy link
Copy Markdown

Summary

Describe the problem and fix in 2-5 bullets:

If this PR fixes a plugin beta-release blocker, title it fix(<plugin-id>): beta blocker - <summary> and link the matching Beta blocker: <plugin-name> - <summary> issue labeled beta-blocker. Contributors cannot label PRs, so the title is the PR-side signal for maintainers and automation.

  • Problem: Chat auto-follow in the Control UI could re-engage too aggressively when the user manually scrolled slightly upward during streaming, because the logic only used a broad "near bottom" threshold.
  • Why it matters: Users trying to read slightly older messages could get pulled back to the bottom, which makes streaming chats feel jumpy and hard to control.
  • What changed: Added an explicit manual-scroll release lock, only reacquire follow when the user is truly back at the bottom, ignore upward wheel intent from nested scrollables, and cover the smooth auto-scroll edge cases in ui/src/ui/app-scroll.test.ts.
  • Rebase note: Rechecked against latest main after feat(ui): add WebChat auto-scroll mode selector #81629 landed the separate persisted WebChat chatAutoScroll mode selector. This PR remains the manual-scroll follow-lock / sticky-bottom bug-fix lane, not a duplicate of the setting work.
  • What did NOT change (scope boundary): No session-management refactors, no tool-call visibility changes, no settings/auth/token behavior changes, and no unrelated UI restructuring.

Change Type (select all)

  • Bug fix
  • Feature
  • Refactor required for the fix
  • Docs
  • Security hardening
  • Chore/infra

Scope (select all touched areas)

  • Gateway / orchestration
  • Skills / tool execution
  • Auth / tokens
  • Memory / storage
  • Integrations
  • API / contracts
  • UI / DX
  • CI/CD / infra

Linked Issue/PR

Root Cause (if applicable)

For bug fixes or regressions, explain why this happened, not just what changed. Otherwise write N/A. If the cause is unclear, write Unknown.

  • Root cause: The chat scroll state treated "near bottom" as equivalent to "should still auto-follow", so a small upward manual scroll could still satisfy follow conditions and snap the user back down on subsequent updates.
  • Missing detection / guardrail: There was no explicit "user took over scrolling" lock and no test coverage for slight upward manual scrolling during streaming.
  • Contributing context (if known): Smooth auto-scroll progress and user-driven upward scroll were both funneled through the same scroll-state path, which made intent ambiguous.

Regression Test Plan (if applicable)

For bug fixes or regressions, name the smallest reliable test coverage that should catch this. Otherwise write N/A.

  • Coverage level that should have caught this:
    • Unit test
    • Seam / integration test
    • End-to-end test
    • Existing coverage already sufficient
  • Target test or file: ui/src/ui/app-scroll.test.ts
  • Scenario the test should lock in: When the user wheels or scrolls slightly upward from the bottom during chat streaming, auto-follow disengages immediately and does not re-enable until the user actually returns to the bottom.
  • Why this is the smallest reliable guardrail: The behavior is contained in the chat scroll state machine and can be deterministically exercised with direct scroll/wheel events.
  • Existing test that already covers this (if any): Existing tests covered broad near-bottom behavior, but not manual release/reacquire intent or the smooth auto-scroll edge cases.
  • If no new test is added, why not: N/A

User-visible / Behavior Changes

List user-visible changes (including defaults/config).
If none, write None.

  • Chat no longer snaps back to the bottom as easily when the user manually scrolls slightly upward during streaming.
  • Auto-follow resumes only when the user truly returns to the bottom.
  • Wheel events coming from nested scrollable content inside the chat do not incorrectly disable or fight chat scroll state.
  • The persisted chatAutoScroll setting from feat(ui): add WebChat auto-scroll mode selector #81629 is preserved and respected; the follow-lock only tightens the default/manual sticky-bottom state machine around that setting.

Diagram (if applicable)

For UI changes or non-trivial logic flows, include a small ASCII diagram reviewers can scan quickly. Otherwise write N/A.

Before:
[user scrolls slightly up] -> [still "near bottom"] -> [next stream update] -> [auto-follow re-engages]

After:
[user scrolls slightly up] -> [follow locked off] -> [next stream update] -> [stays in place]
[user returns to bottom] -> [follow unlocked] -> [next stream update] -> [auto-follow resumes]

Security Impact (required)

  • New permissions/capabilities? (Yes/No) No
  • Secrets/tokens handling changed? (Yes/No) No
  • New/changed network calls? (Yes/No) No
  • Command/tool execution surface changed? (Yes/No) No
  • Data access scope changed? (Yes/No) No
  • If any Yes, explain risk + mitigation: N/A

Repro + Verification

Environment

  • OS: macOS
  • Runtime/container: local Node/Vite dev setup
  • Model/provider: N/A
  • Integration/channel (if any): Control UI chat
  • Relevant config (redacted): local gateway on ws://127.0.0.1:18789

Steps

  1. Open the Control UI chat while a response is streaming.
  2. Scroll slightly upward from the bottom or wheel upward during streaming.
  3. Continue streaming, then return fully to the bottom.

Expected

  • Slight upward manual scrolling disengages auto-follow.
  • Streaming updates do not snap the view back down.
  • Auto-follow resumes only after returning to the bottom.

Actual

  • Before fix: chat could snap back down while the user was still trying to read upward.
  • After fix: chat stays released until the bottom is reached again.

Evidence

Attach at least one:

  • Failing test/log before + passing after
  • Trace/log snippets
  • Screenshot/recording
  • Perf numbers (if relevant)

Real behavior proof

  • Behavior or issue addressed: Control UI WebChat streaming should not snap back to the bottom after the user manually scrolls slightly upward; follow-lock should release on manual upward intent and reacquire only when the user returns to the bottom.
  • Real environment tested: macOS local OpenClaw checkout, Node 24.14.0, rebased on current main with feat(ui): add WebChat auto-scroll mode selector #81629's persisted chatAutoScroll setting present. The proof command imports the actual ui/src/ui/app-scroll.ts implementation and exercises the WebChat scroll state used by the Control UI.
  • Exact steps or command run after this patch: Ran a local pnpm exec tsx proof command against ui/src/ui/app-scroll.ts with chatAutoScroll: "near-bottom", simulating a user scroll from bottom to scrollTop=1540, a streaming scheduleChatScroll() tick, then returning to bottom at scrollTop=1576.
  • Evidence after fix: Copied terminal output from the local proof command:
{
  "proof": "Control UI WebChat manual-scroll follow-lock after patch",
  "afterManual": {
    "scrollTop": 1540,
    "chatUserNearBottom": false,
    "chatFollowLocked": true,
    "chatNewMessagesBelow": false,
    "chatAutoScroll": "near-bottom"
  },
  "afterStreamTick": {
    "scrollTop": 1540,
    "chatUserNearBottom": false,
    "chatFollowLocked": true,
    "chatNewMessagesBelow": true
  },
  "afterReturnBottom": {
    "scrollTop": 1576,
    "chatUserNearBottom": true,
    "chatFollowLocked": false,
    "chatNewMessagesBelow": false
  }
}
  • Observed result after fix: After manual upward scroll, chatFollowLocked is true and the streaming tick leaves scrollTop at 1540 instead of snapping to 2000; chatNewMessagesBelow becomes true. After returning to bottom, chatFollowLocked clears and chatNewMessagesBelow clears. The persisted chatAutoScroll mode remains near-bottom.
  • What was not tested: Full end-to-end multi-browser matrix, authenticated live gateway streaming, and non-chat surfaces.

Human Verification (required)

What you personally verified (not just CI), and how:

  • Verified scenarios: Rebasing against current main kept feat(ui): add WebChat auto-scroll mode selector #81629's chatAutoScroll selector/settings path intact, then ran pnpm test ui/src/ui/app-scroll.test.ts ui/src/ui/app-chat.test.ts.
  • Edge cases checked: Slight upward scroll near bottom, re-enable only at the bottom, nested scrollable wheel intent, post-wheel near-bottom lock behavior, and smooth auto-scroll transition handling.
  • What you did not verify: Full end-to-end multi-browser matrix, full UI suite, and non-chat surfaces.

Review Conversations

  • I replied to or resolved every bot review conversation I addressed in this PR.
  • I left unresolved only the conversations that still need reviewer or maintainer judgment.

If a bot review conversation is addressed by this PR, resolve that conversation yourself. Do not leave bot review conversation cleanup for maintainers.

Compatibility / Migration

  • Backward compatible? (Yes/No) Yes
  • Config/env changes? (Yes/No) No
  • Migration needed? (Yes/No) No
  • If yes, exact upgrade steps: N/A

Risks and Mitigations

List only real risks for this PR. Add/remove entries as needed. If none, write None.

  • Risk: The new release/reacquire thresholds could feel slightly different than before for some users near the bottom of the thread.
    • Mitigation: Thresholds are small and targeted, and focused unit tests lock in the intended behavior.
  • Risk: Wheel-based intent handling could interfere with nested scrollable UI inside messages.
    • Mitigation: Nested scrollable ancestors are explicitly ignored and covered by tests.

@greptile-apps

greptile-apps Bot commented Apr 27, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR hardens chat scroll auto-follow in the Control UI by adding an explicit chatFollowLocked state, a chatSmoothAutoScrolling flag, and chatLastScrollTop tracking to distinguish intentional user scroll-up from auto-scroll progress. A new handleChatWheelIntent handler pre-emptively cancels pending auto-scroll when an upward wheel is detected, and the existing handleChatScroll logic now gates follow re-acquisition on a tight FOLLOW_REACQUIRE_THRESHOLD rather than the broader NEAR_BOTTOM_THRESHOLD. Test coverage is comprehensive.

Confidence Score: 4/5

Safe to merge — well-scoped UI-only change with comprehensive test coverage and no regressions to existing behavior.

No P0 or P1 issues found. Logic is correctly implemented: chatFollowLocked, chatSmoothAutoScrolling, and chatLastScrollTop form a sound state machine, all key transitions are covered by deterministic unit tests, and the nested-scrollable ancestor walk correctly guards against false releases. Score reflects P2-only quality with no blocking concerns.

No files require special attention.

Reviews (1): Last reviewed commit: "UI: refine chat wheel follow handling" | Re-trigger Greptile

@clawsweeper

clawsweeper Bot commented Apr 28, 2026

Copy link
Copy Markdown
Contributor

Codex review: needs changes before merge. Reviewed June 3, 2026, 10:44 AM ET / 14:44 UTC.

Summary
This PR adds Control UI WebChat manual-scroll follow-lock state and wheel-intent handling, wires it through the chat view/app state, expands scroll tests, and adds a changelog entry.

PR surface: Source +121, Tests +141, Docs +1. Total +263 across 9 files.

Reproducibility: yes. from source inspection: current scheduleChatScroll can re-stick when a slight manual upward scroll remains inside the 450px near-bottom threshold. I did not run the UI locally because this review is read-only.

Review metrics: 1 noteworthy metric.

  • Release-owned changelog edits: 1 added entry. OpenClaw release generation owns CHANGELOG.md, so this line should be removed before merge while keeping release-note context outside the changelog.

Merge readiness
Overall: 🐚 platinum hermit
Proof: 🦞 diamond lobster
Patch quality: 🐚 platinum hermit
Result: ready for maintainer review.

Overall follows the weaker of proof and patch quality, so missing proof can cap an otherwise strong patch.

Rank-up moves:

  • Remove the CHANGELOG.md entry and keep the release-note context in the PR body or squash message.

Risk before merge

  • [P1] CHANGELOG.md still contains one PR-authored release note entry; OpenClaw release generation owns that file, so merging as-is adds avoidable release-changelog churn.

Maintainer options:

  1. Decide the mitigation before merge
    Keep the scroll follow-lock implementation and tests, remove the direct CHANGELOG.md entry, and carry release-note context in the PR body or squash message.
  2. Pause or close
    Do not merge this PR until maintainers decide whether the risk is worth taking.

Next step before merge

  • [P2] A repair lane can safely remove the single release-owned changelog entry without changing the functional UI fix.

Security
Cleared: The diff touches Control UI scroll state, tests, and one changelog line only; it does not change dependencies, workflows, network calls, permissions, credentials, or secret handling.

Review findings

  • [P3] Drop the direct changelog entry — CHANGELOG.md:123
Review details

Best possible solution:

Keep the scroll follow-lock implementation and tests, remove the direct CHANGELOG.md entry, and carry release-note context in the PR body or squash message.

Do we have a high-confidence way to reproduce the issue?

Yes, from source inspection: current scheduleChatScroll can re-stick when a slight manual upward scroll remains inside the 450px near-bottom threshold. I did not run the UI locally because this review is read-only.

Is this the best way to solve the issue?

Yes for the functional fix: the PR changes the existing Control UI scroll owner and adds focused tests while preserving the persisted chatAutoScroll mode. The direct changelog edit is not the best merge shape and should be removed.

Full review comments:

  • [P3] Drop the direct changelog entry — CHANGELOG.md:123
    CHANGELOG.md is release-owned in this repo, so normal PRs should carry release-note context in the PR body or squash/commit message instead. This PR already has that context in the body; remove this added line to avoid release-generation churn.
    Confidence: 0.93

Overall correctness: patch is correct
Overall confidence: 0.88

AGENTS.md: found and applied where relevant.

Codex review notes: model gpt-5.5, reasoning high; reviewed against 8f6f2617ec06.

Label changes

Label changes:

  • add proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal output from a local proof command that imports the actual app-scroll.ts implementation, plus a manual Control UI smoke description for the streaming scroll behavior.

Label justifications:

  • P2: This is a normal-priority Control UI bug fix with limited blast radius and no data-loss, security, or availability impact.
  • rating: 🐚 platinum hermit: Overall readiness is 🐚 platinum hermit; proof is 🦞 diamond lobster and patch quality is 🐚 platinum hermit.
  • status: 👀 ready for maintainer look: ClawSweeper has no concrete contributor-facing blocker left for this PR. Sufficient (terminal): The PR body includes after-fix terminal output from a local proof command that imports the actual app-scroll.ts implementation, plus a manual Control UI smoke description for the streaming scroll behavior.
  • proof: sufficient: Contributor real behavior proof is sufficient. The PR body includes after-fix terminal output from a local proof command that imports the actual app-scroll.ts implementation, plus a manual Control UI smoke description for the streaming scroll behavior.
Evidence reviewed

PR surface:

Source +121, Tests +141, Docs +1. Total +263 across 9 files.

View PR surface stats
Area Files Added Removed Net
Source 6 145 24 +121
Tests 2 142 1 +141
Docs 1 1 0 +1
Config 0 0 0 0
Generated 0 0 0 0
Other 0 0 0 0
Total 9 288 25 +263

Acceptance criteria:

  • [P1] git diff --check.
  • [P1] node scripts/run-vitest.mjs ui/src/ui/app-scroll.test.ts ui/src/ui/app-chat.test.ts.

What I checked:

  • Repository policy: The root review policy was read fully, and the changelog section says CHANGELOG.md is release-only while normal PR release-note context belongs in the PR body or squash/commit message. (AGENTS.md:230, 8f6f2617ec06)
  • Current main behavior: Current main still lets scheduleChatScroll stick when host.chatUserNearBottom is true or the distance from bottom is under the broad 450px threshold, which matches the reported snap-back path. (ui/src/ui/app-scroll.ts:82, 8f6f2617ec06)
  • PR scroll fix: The PR adds chatFollowLocked, release/reacquire thresholds, and a wheel-intent path so near-bottom streaming scrolls do not re-stick while manual follow is locked. (ui/src/ui/app-scroll.ts:125, cf25d824345a)
  • PR wheel wiring: The chat view exposes onChatWheelIntent and binds it to the chat thread wheel event, while OpenClawApp delegates to the new scroll helper. (ui/src/ui/views/chat.ts:1622, cf25d824345a)
  • PR regression coverage: The PR adds tests for manual upward release, post-wheel near-bottom locking, bottom reacquire, smooth auto-scroll handling, and the no-snap streaming case inside the old threshold. (ui/src/ui/app-scroll.test.ts:138, cf25d824345a)
  • Remaining changelog defect: The PR head still adds one direct CHANGELOG.md entry for this fix, which conflicts with the release-owned changelog policy. (CHANGELOG.md:123, cf25d824345a)

Likely related people:

  • BunsDev: Authored the merged WebChat chatAutoScroll selector work referenced by maintainers as adjacent but distinct from this follow-lock PR. (role: recent adjacent feature owner; confidence: high; commits: 256377c029f6; files: ui/src/ui/app-scroll.ts, ui/src/ui/storage.ts, ui/src/ui/views/chat.ts)
  • Vincent Koc: Current local blame for the checked-out app-scroll.ts path points at a grafted current-main commit, but the grafted history makes this a coarse routing signal. (role: recent area contributor; confidence: low; commits: 5a0d9d6326f7; files: ui/src/ui/app-scroll.ts)
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

@enis-uys enis-uys force-pushed the main branch 2 times, most recently from a21f3a5 to 88360ac Compare May 4, 2026 01:11
@enis-uys

enis-uys commented May 4, 2026

Copy link
Copy Markdown
Author

Thanks for the review. I addressed the missing changelog item in CHANGELOG.md and manually tested the Control UI chat scroll behavior.

Local validation is green for pnpm check:changed.

I also tried to run the requested Testbox changed gate, but Blacksmith auth reports: "You don't have any GitHub organizations with Blacksmith installed. Install the Blacksmith GitHub App first." My GitHub account therefore cannot start an OpenClaw Testbox from here.

Since the remaining required gate is specifically pnpm check:changed in Testbox, a maintainer with OpenClaw Blacksmith/Testbox access will need to run that before merge, or grant/setup the required access for me.

One note: because this PR now touches CHANGELOG.md, there may be a small conflict risk if new changelog entries land before merge. I can rebase/fix that if needed.

@BunsDev

BunsDev commented May 14, 2026

Copy link
Copy Markdown
Member

Related maintainer note: #81629 has now landed a separate persisted WebChat auto-scroll mode selector on main.

This PR is still a distinct bug-fix lane for manual-scroll follow-lock / sticky-bottom behavior, not a duplicate of the setting work. Before any further review or merge attempt, please rebase against latest main and recheck the scroll state changes with the new chatAutoScroll setting now present in the same Control UI files.

Thanks for the work on the follow-lock edge cases; this remains useful, just separate from the preference that shipped today.

@openclaw-barnacle openclaw-barnacle Bot added proof: supplied External PR includes structured after-fix real behavior proof. and removed triage: needs-real-behavior-proof Candidate: external PR needs after-fix proof from a real setup. labels May 14, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 14, 2026
@openclaw-barnacle openclaw-barnacle Bot added size: M and removed size: L proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 14, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 14, 2026
@enis-uys

Copy link
Copy Markdown
Author

Thanks, done.

I rebased this PR onto latest main after #81629 landed and rechecked the scroll-state changes with the persisted chatAutoScroll setting present.

This PR now keeps #81629's auto-scroll mode selector/settings path intact and only carries the separate manual-scroll follow-lock / sticky-bottom fix:

  • manual upward scroll releases auto-follow immediately
  • streaming updates no longer snap back while follow is locked
  • follow reacquires only once the user returns to the bottom
  • chatAutoScroll: "off" and manual scroll-to-bottom behavior remain respected

Verification:

  • pnpm test ui/src/ui/app-scroll.test.ts ui/src/ui/app-chat.test.ts
  • pnpm exec oxfmt --check --threads=1 CHANGELOG.md ui/src/ui/app-chat.test.ts ui/src/ui/app-chat.ts ui/src/ui/app-render.ts ui/src/ui/app-scroll.test.ts ui/src/ui/app-scroll.ts ui/src/ui/app-view-state.ts ui/src/ui/app.ts ui/src/ui/views/chat.ts
  • manual Control UI smoke with Near bottom: started a long streaming response, scrolled slightly upward during generation, confirmed the view stayed released instead of snapping back down, then returned to bottom and confirmed follow resumed

I also updated the PR body with a Real behavior proof section covering the rebased behavior.

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 14, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 14, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 17, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. P2 Normal backlog priority with limited blast radius. and removed proof: sufficient ClawSweeper judged the real behavior proof convincing. labels May 17, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 27, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 27, 2026
@enis-uys

Copy link
Copy Markdown
Author

@clawsweeper hatch

@clawsweeper

clawsweeper Bot commented May 27, 2026

Copy link
Copy Markdown
Contributor

🦞👀
ClawSweeper PR egg hatch requested.

I queued a comment sync for this PR. If the egg is hatchable, ClawSweeper will generate the image once and update the existing review comment.
Action: PR egg hatch queued (workflow sweep.yml, event repository_dispatch).
The ASCII egg stays as the fallback.

@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 27, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 27, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label May 31, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 2, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. and removed rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. labels Jun 2, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 2, 2026
@clawsweeper clawsweeper Bot added proof: sufficient ClawSweeper judged the real behavior proof convincing. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR. and removed rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: ⏳ waiting on author ClawSweeper has contributor-facing work open and is waiting for author action. labels Jun 2, 2026
@openclaw-barnacle openclaw-barnacle Bot removed the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 3, 2026
@clawsweeper clawsweeper Bot added the proof: sufficient ClawSweeper judged the real behavior proof convincing. label Jun 3, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

app: web-ui App: web-ui P2 Normal backlog priority with limited blast radius. proof: sufficient ClawSweeper judged the real behavior proof convincing. proof: supplied External PR includes structured after-fix real behavior proof. rating: 🐚 platinum hermit Good normal PR readiness with ordinary maintainer review expected. size: M status: 👀 ready for maintainer look ClawSweeper has no concrete contributor-facing blocker left for this PR.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

[Control UI] Chat auto-scroll overrides user scroll during streaming

2 participants