You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
The hourly reconcile sweep's died-sidekick detector (💀, added in #963) is unreachable for the issues it was written for. An earlier "no state:* label" branch in dor_reconcile.shcontinues past it, and every issue in the build/feedback phase has no state:* label by design — so a dead build is reported as "the agent likely never ran" instead of "its sidekick died, re-dispatch it".
Steps to reproduce
Take an issue through the DoR build side until it is at functional acceptance (build-done, board Status Awaiting functional acceptance).
Comment feedback on it. dor_feedback_flow.sh:32 sets board Status → Building.
The sweep flags it with the 💀 rule at dor_reconcile.sh:170-175:
💀 #370 says Building but no DoR workflow run is alive for it (Nm since its last update) — its sidekick almost certainly died mid-flight. It will not move on its own; re-dispatch it.
…and adds it to stalled, which drives the direct comment on the issue at :215.
❌ What actually happened?
The sweep saw Status: Building and still emitted the un-routed message. From the DoR pipeline health issue #886, sweep of 2026-08-06 09:09 UTC:
🕳️ #370 is on the board (Status: Building) with no state:* label after 1151h — the agent likely never ran.
Nothing was flagged as dead, no comment landed on #370, and no sidekick was re-dispatched. The work sat dead for ~18 hours (5 Aug 15:02 → 6 Aug 09:27) across roughly 18 sweeps, until @WimvandenHeijkant noticed by hand and re-posted both rounds of requestor feedback himself.
Root cause
.github/scripts/dor_reconcile.sh:143-150:
if [ -z"$state_label" ];then
age_h=$(( (now - created_epoch) /3600))if [ "$age_h"-ge"$UNROUTED_HOURS" ];then
add_ex "🕳️ #${num} ... with no \`state:*\` label after ${age_h}h — the agent likely never ran."ficontinue# <-- skips the rest of the loop bodyfi
That continue skips everything below it, including the "Building") liveness case at :170 and the zombie-sidekick check at :183.
An issue on the build side has no state:* label by design — the build phase is tracked with build-done / ready-to-build, and dor_build_flow.sh removes state:awaiting-approval when the build starts. #370's labels are enhancement, build-done, sk:sk3. So the whole build/feedback population takes the un-routed branch, which is precisely the population the 💀 rule exists for.
The wrong branch also produces the wrong instruction. "The agent likely never ran" invites no action; "re-dispatch it" is what was actually needed.
Suggested direction
Don't let un-routed short-circuit liveness. Either run the Building liveness check before the state_label test, or drop the continue and make the un-routed flag skip only the drift/stale checks that genuinely need a label. Worth also measuring the un-routed age from updated_epoch, or suppressing it entirely while Status is an active phase — an issue mid-build is not un-routed.
Does it reproduce on the demo data?
Not applicable — this is CI/pipeline automation, not product code. It reproduces against the repo's own Actions history (see the two run IDs above and health issue #886).
Where does it happen? (optional)
.github/scripts/dor_reconcile.sh (dor-reconcile.yml, hourly at :17).
Did it work before? (optional)
No — the 💀 rule has been shadowed since it was introduced in #963. Its own comment says "Three builds died this way in a single day and every one of them was found by a human watching, not by this sweep"; that is still true, and this is why.
What's wrong? (one or two sentences)
The hourly reconcile sweep's died-sidekick detector (💀, added in #963) is unreachable for the issues it was written for. An earlier "no
state:*label" branch indor_reconcile.shcontinues past it, and every issue in the build/feedback phase has nostate:*label by design — so a dead build is reported as "the agent likely never ran" instead of "its sidekick died, re-dispatch it".Steps to reproduce
build-done, board Status Awaiting functional acceptance).dor_feedback_flow.sh:32sets board Status → Building.:17.Real occurrence: #370 / PR #933, runs
31016109943(5 Aug,feedback (sk3)failed 15:02:30Z) and31076341084(6 Aug,feedback (sk3)failed 08:41:28Z).✅ What did you expect to happen?
The sweep flags it with the 💀 rule at
dor_reconcile.sh:170-175:…and adds it to
stalled, which drives the direct comment on the issue at:215.❌ What actually happened?
The sweep saw
Status: Buildingand still emitted the un-routed message. From the DoR pipeline health issue #886, sweep of 2026-08-06 09:09 UTC:Nothing was flagged as dead, no comment landed on #370, and no sidekick was re-dispatched. The work sat dead for ~18 hours (5 Aug 15:02 → 6 Aug 09:27) across roughly 18 sweeps, until @WimvandenHeijkant noticed by hand and re-posted both rounds of requestor feedback himself.
Root cause
.github/scripts/dor_reconcile.sh:143-150:That
continueskips everything below it, including the"Building")liveness case at:170and the zombie-sidekick check at:183.An issue on the build side has no
state:*label by design — the build phase is tracked withbuild-done/ready-to-build, anddor_build_flow.shremovesstate:awaiting-approvalwhen the build starts. #370's labels areenhancement, build-done, sk:sk3. So the whole build/feedback population takes the un-routed branch, which is precisely the population the 💀 rule exists for.Two aggravating details:
created_epoch), so a build that died 18 hours ago is reported as "after 1151h" ([Feature] Collapse managed resources under business roles in the matrix #370 was opened 19 Jun). It reads as ancient backlog noise, not as something that just broke.Suggested direction
Don't let un-routed short-circuit liveness. Either run the
Buildingliveness check before thestate_labeltest, or drop thecontinueand make the un-routed flag skip only the drift/stale checks that genuinely need a label. Worth also measuring the un-routed age fromupdated_epoch, or suppressing it entirely while Status is an active phase — an issue mid-build is not un-routed.Does it reproduce on the demo data?
Not applicable — this is CI/pipeline automation, not product code. It reproduces against the repo's own Actions history (see the two run IDs above and health issue #886).
Where does it happen? (optional)
.github/scripts/dor_reconcile.sh(dor-reconcile.yml, hourly at:17).Did it work before? (optional)
No — the 💀 rule has been shadowed since it was introduced in #963. Its own comment says "Three builds died this way in a single day and every one of them was found by a human watching, not by this sweep"; that is still true, and this is why.