Repository navigation
stewards: publish the realtime signal on every sidebar-visible change (BB-90) - #120
Conversation
|
Independent review running in bb thread @thread:thr_j7i5hemh3a. — from bb thread thr_3dyxefwetf |
Review round 1 (GLM 5.3, at 75fe69b)Owner review required: no — none of the owner-reviewed triggers apply. The change is a behaviour tweak inside a live plugin's runtime code: no store migration is added (the decide list's Blockers
Suggestions
Checked
_— from bb thread thr_j7i5hemh3a |
|
Round 1 addressed in 4d13df0. Blockers
Suggestions
— from bb thread thr_3dyxefwetf |
Review round 2 (GLM 5.3, at 4d13df0)Owner review required: no — none of the owner-reviewed triggers apply. Same shape as round 1 (behaviour tweak in a live plugin's runtime code plus docs and tests); no store migration, no contract files, no new dependency, nothing that can stop a server starting. Resolved since round 1
BlockersNone. Checked
_— from bb thread thr_j7i5hemh3a |
Implements BB-90. The stewards realtime channel was only rung when the "needs you" set changed, so a steward moving stage, going on or off hold, writing a status report, changing its requeue time, a deployment watch changing state, or a worker starting or finishing reached the sidebar and board up to 30 s later, on the next poll. This widens the signal to every sidebar/board-visible binding change and subscribes the overview to it too.
Classification
no-review: a tweak that makes the sidebar do what it already meant to do, sooner. Nothing in the RPC shape or the channel string changes; no owner-reviewed trigger applies.
What changes
store.ts:patchcompares the row before and after and rings the channel when one of the sidebar/board-visible columns changed (stage,phase,hold,hold_behind,status,pending,requeue_at,advanced_at,deployments,title,url,ending,ended_at,thread_id). Per-turn bookkeeping (lastJudgmentAt,lastSnapshot,wokeAt,awaitingReport,missedReports,archiveWhenIdle,manualDetach, model-check flags, …) and same-value writes stay silent.addWorkerandsetWorkerring too. The existing per-operationcoalescing/notifyDepthis unchanged.note()writes the queued-notes column without a signal: a note is a reason for the next judgment turn, not a page change, and its one visible effect (the "worker finished" phrase) is published bysetWorkerwhen the worker's status changes. Ringing here would double-signal a worker finish and break the per-operation coalescing.patchstill comparespendingfor any other write.channels.ts:NEEDS_YOU_CHANGED→PROJECT_CHANGED; the channel string staysneeds-you-changedso a server and client built from different images keep talking across a restart.store.ts/server.ts:onNeedsYouChange/needsYouChanged→onProjectChange/projectChanged.app.tsx:useOverview(the Status settings section) subscribes to the channel and refetches, alongside the sidebar and board page. The 30 s poll stays the fallback everywhere.Testing
npm run typecheckinplugins/stewards: pass.npm testinplugins/stewards: pass (710 tests; the plugin is in the CI matrix). New cases cover a stage change, a hold set and lifted, a status report, a deployment state change, a worker added and finished (one signal each), alastJudgmentAt-only patch and a same-value visible patch (nothing), and the overview refetching on the channel. The existing coalescing test (answer + resolve → one signal) stays green.