feat: [ENG-2894] WebUI updates panel with Switch toggle#695
Conversation
|
Claude finished @ncnthien's task in 6m 12s —— View job Claude PR Review
SummaryOverall: 4.5 / 5 — Clean, well-scoped follow-up to ENG-2893. The WebUI side now mirrors the TUI fix correctly: boolean toggles with Correctness
SecurityNo issues. No new transport surface, no new user input sinks, no auth changes. The Switch dispatches through the existing Code quality
Inline comments5 inline comments posted: 1 nitpick on panel description copy, 2 non-blocking suggestions (discriminator typing, file split), 2 praise notes (store identity preservation + ordering test). |
|
Claude finished @ncnthien's task in 1m 4s —— View job Claude PR Re-Review (after sync)
SummaryOverall: 5 / 5 — The only change in this push is - description="Background update checks for the brv CLI."
+ description="Update checks performed when brv starts."This now matches the setting descriptor at Correctness
SecurityNo changes to transport, validation, or auth surface. Unchanged from prior review. Code quality
· branch |
Summary
<Switch>bound toupdate.checkForUpdatesvia the existingsettings:*transport.SettingsRowinto an outer dispatcher +IntegerSettingsRow; boolean rows now delegate to a newBooleanSettingsRow.RestartBannerso it no longer fires on boolean toggles whose descriptor hasrestartRequired: false(mirrors the TUI fix from ENG-2893).Linear: ENG-2894
Changes
restart-banner-store.ts—markDirty(key, restartRequired); no-ops (and preserves Set identity) whenfalse.settings-row.tsx— branchesbooleanrows toBooleanSettingsRow; integer flow now threadsrow.restartRequiredinto bothmarkDirtycalls.boolean-settings-row.tsx(new) —<Switch>with toast on success/error viaformatError.updates-panel.tsx(new) — mirrorstask-history-panel.tsx; filters rows bycategory === 'updates'.general.tsx— mounts<UpdatesPanel />after<TaskHistoryPanel />(matchesCATEGORY_ORDER).labels.ts— adds'update.checkForUpdates': 'Check for updates at startup'.restart-banner-store.test.ts— updates 6 existing cases for the new signature; adds 4 new cases for filter behavior and Set-identity preservation.Test plan
npm run typechecknpm run lint(clean on all 7 changed files)npm test— 8177 passingnpm run build— server + WebUI bundles build cleansettings:setdispatched, cache invalidates, Switch reflects new state, no RestartBanner appearsagentPool.maxSize(integer,restartRequired: true) → RestartBanner still appears