fix(control-ui): disable refresh during active runs#74690
Conversation
|
Codex review: needs maintainer review before merge. What this changes: This PR adds a Maintainer follow-up before merge: The PR is already a narrow implementation candidate, but MEMBER authorship and the protected Security review: Security review cleared: The diff is limited to a Lit disabled binding and focused browser tests; it does not touch dependencies, workflows, permissions, secrets, network calls, package metadata, or command execution paths. Review detailsBest possible solution: Land the narrow UI guard if maintainers accept the touched-surface proof, let it close #65522 after merge, and keep #73836 as the separate thread for broader gateway/channel/media responsiveness work. Do we have a high-confidence way to reproduce the issue? Yes. A focused render of Is this the best way to solve the issue? Yes. A native disabled-state guard in Acceptance criteria:
What I checked:
Likely related people:
Remaining risk / open question:
Codex review notes: model gpt-5.5, reasoning high; reviewed against e9d4cb2bb6dc. |
|
CI triage for exact head
Local and Testbox proof for the touched surface remains green:
|
|
This PR was opened after #66395, which closed the same issue with an equivalent fix plus browser render test coverage.
|
|
Thanks for the follow-up. This looks like it is mixing up the related PRs. Current #74690 is the canonical path for #65522:
#66395 and #74819 are the superseded contributor branches. Their latest shared head only changes |
Summary
Refresh chat datastayed clickable while Control UI chat turns were sending, running, or streaming.renderChatControlsnow uses one native disabled-state guard for disconnected, loading, sending, activechatRunId, and non-nullchatStreamstates.Change Type (select all)
Scope (select all touched areas)
Linked Issue/PR
Root Cause (if applicable)
chatLoadingand connection state, so active turn states were not reflected in native button disabling.session.messagereloads are already deferred whilechatRunIdis active because history reloads can race live streaming state.Regression Test Plan (if applicable)
ui/src/ui/app-render.helpers.browser.test.tschatLoading,chatSending, activechatRunId, non-nullchatStream, and disconnected state.User-visible / Behavior Changes
The Control UI refresh button is disabled during active chat turn lifecycle states and re-enabled when idle.
Diagram (if applicable)
Security Impact (required)
Yes/No) NoYes/No) NoYes/No) NoYes/No) NoYes/No) NoYes, explain risk + mitigation: N/ARepro + Verification
Environment
Steps
chatLoading,chatSending, activechatRunId, non-nullchatStream, and disconnected state.disabledstate.Expected
Actual
Evidence
Human Verification (required)
chatSending,chatRunId, andchatStream; after the guard, the focused browser helper test passed.Review Conversations
#66395 has a maintainer request-changes review because it mixes this valid UI fix with unrelated Slack lifecycle edits that have a blocking regression. BingqingLyu#2487 mirrors that same mixed-scope branch.
Compatibility / Migration
Yes/No) YesYes/No) NoYes/No) NoRisks and Mitigations
Validation
pnpm test ui/src/ui/app-render.helpers.browser.test.tspassed: 9 tests.pnpm exec oxfmt --check --threads=1 ui/src/ui/app-render.helpers.ts ui/src/ui/app-render.helpers.browser.test.tspassed.git diff --check origin/main...HEADpassed.pnpm check:changedontbx_01kqdv9hf4mbc1aqgwh2m738d6selected expected lanes (core,coreTests) and passed conflict markers, changelog attributions, wildcard export checks, duplicate coverage, core typecheck, and core test typecheck, then failed in unrelatedpackages/sdk/src/index.test.tsontypescript-eslint(no-redundant-type-constituents). That file is unchanged by this PR and the same offending lines are present onorigin/main.AI-assisted: yes.