Repository navigation
stewards: derive blocked from hold, stuck and needs-you only (BB-109) - #139
Conversation
An effort whose steward reported a blockedOn was painted red, phrased "blocked on ...", and moved to the Blocked section, though the field is the ordinary pipeline wait. Blocked is now a hold, an open stuck escalation or a needs item only; the wait is a plain muted "Waiting on ..." line. Rename the report field to waitingOn across the status record, the RPC shapes, the wake and bb stewards list, keeping blockedOn as an accepted alias. Stored blockedOn records still parse and surface as waitingOn.
|
Independent review running in bb thread @thread:thr_nmg5ihdsv5. — from bb thread thr_hdv5x3fmb2 |
Review round 1 (GLM 5.3, at b9d35e2)Owner review required: yes — it changes existing behaviour people notice (an effort with a wait is no longer Blocked/red, the phrase drops Checked
Suggestions
— from bb thread thr_nmg5ihdsv5 |
Keep the pre-rename test schema honest (omit waitingOn, require blockedOn) and store null for an empty waitingOn rather than a bare "Waiting on ".
|
Round 1 response (pushed 8e13711):
— from bb thread thr_hdv5x3fmb2 |
Review round 2 (GLM 5.3, at 8e13711)Owner review required: yes — unchanged from round 1: it changes existing behaviour people notice and touches Resolved since round 1
Checked
— from bb thread thr_nmg5ihdsv5 |
|
Approved 8e13711 from the Stewards page |
|
Merged: owner-reviewed, approved by trotterdylan on 8e13711 (unsigned comment 2026-10-28T20:00:23Z, "Approved 8e13711 from the Stewards page"); reviewer round 2 approved 8e13711, checks green. merge commit 305950e. Merging to — from bb thread thr_hdv5x3fmb2 |
Implements BB-109. A steward's free-text wait (
blockedOn) painted the effort red, phrased itblocked on …and moved it to Blocked, even when the wait was the ordinary pipeline (checks, a review, a deploy, a worker). Blocked is now what the plugin derives itself: a hold, an openstuckescalation or a needs item. The wait is a plain muted Waiting on … line on the card.The report field is renamed
blockedOn→waitingOnacross the tool, the status record, the sidebar/overview/board RPC shapes, the wake andbb stewards list.blockedOnstays accepted as an alias at the tool boundary (waitingOnwins when both are given), and storedblockedOnrecords still parse and surface aswaitingOn. ThenamesUserAsBlockerrefusal and the "waits on the project steward/user with no open escalation" check readwaitingOn.Classification
owner-reviewed: it changes existing behaviour people notice — an effort with a wait is no longer Blocked/red, the phrase drops
blocked on …, and the report field is renamed. It also touchesplugins/stewards/store.ts,server.tsandreconcile.ts, the decide list's self-widening paths, sodecideForPullmakes it the owner's (decide: user).What changes
sidebar.ts:effortState/effortSectionblocked only from a hold, an openstuckescalation or needs-you;effortPhrasedrops theblocked on …prefix (running worker reads the count, otherwisenextActionverbatim).waitingOnis renamed through the shapes (the sidebar's derived effort carries it; the card's plain line renders the Steward/BoardSteward record).server.ts:steward_reporttakeswaitingOn(description: the party or artifact the next action waits on; never marks the effort blocked) and acceptsblockedOnas a deprecated alias,waitingOnwinning; the sidebar/overview/board outputs andbb stewards listrenderwaiting on ….store.ts:statusRecordSchemastoreswaitingOn; astoredStatusRecordSchemareads pre-BB-109 records withblockedOnand surfaces them aswaitingOn.app.tsx: bothBlocked onlines become a mutedWaiting on …; the red glyph/phrase follow the derived state, not the wait.reconcile.ts:namesUserAsBlockerandunheardWaitreadwaitingOn.wake.ts: the bindings status line readswaiting on ….DESIGN.md§21,README.md,skills/stewards/SKILL.mdand the tests updated.Testing
npm testinplugins/stewards: pass (807 tests; thepluginsCI matrix does cover stewards).npm run typecheckinplugins/stewards: pass.sidebar.test.ts(wait never blocks; phrase precedence; ops wait stays a monitor),sidebar-app.test.tsx(waiting effort stays in In flight, grey),app.test.tsx(mutedWaiting on …, notext-destructive),server.test.ts(alias mapping andwaitingOnwinning,waitingOnrefusal),reconcile.test.ts,wake.test.ts,store.test.ts(a pre-BB-109blockedOnrecord reads back aswaitingOn).