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
{{ message }}
Repository navigation
fix(workflow): a sibling Failed run is only in Runs — header/timeline never say it failed #1493
LIVE re-confirm (Asia/Shanghai 2026-10-28) — Failed rows still have no reason
Same inspection pass on prod tip ~55e1c27a (issue→合入 / PR→合入 via cookie proxy). Expanding the “Runs rows lack … failure reason” note already in this issue:
Actual: Failed runs (examples seen: #1453, #1422, #1395) show no failure reason in the Runs list or the timeline — only a Failed badge / status. Operator cannot tell why it failed without digging elsewhere.
Expected: When a run fails, surface a short reason (error / outcome / last node message) on the Runs row and on a timeline failure line.
This issue’s expected already asks for “Runs rows show time + reason when Failed” and timeline failure + reason — keeping that here instead of a duplicate “no failure reason” issue. Sibling-header visibility remains the other half of this ticket.
Not filing separately (dedupe). Owner: 「这些问题也要提issue去改」 (t640u).
agent-ready — reproduced against main at 176d33d034e741b68041c0676da1707001cb6e88 (2026-10-28), not only in the screenshot.
Why a sibling failure never reaches the room. The client half of this shipped in #1494 (liveStageRuns accepts status === 'failed', the strip paints a Failed chip), but the host never sends a failed run, so that path is dead whenever another run is still live:
plugins/workflow/src/service.js:184 — runs: runningOf(lane), and runningOf keeps only live === true && status === 'running' (:203). A run that fails leaves lane.active and lives in lane.last and lane.history only.
Repro with the deliverable template: two concurrent runs (maxConcurrent: 2), then end one the way the stop / reap paths do (reset { runId } → endRun). Snapshot: runs = [#1445 running], activeCount = 1, run = #1445 — #1460 appears only as history: [{task, status: 'failed', at}], with no run id and no reason. The header has one strip, exactly as the screenshot.
plugins/workflow/client.js:551 — runHistoryRows hardcodes status: 'running' for every row it takes from runs, so a failed run routed through it would read "Running"; Runs (:725) renders neither at nor a reason, which is the second half of this issue.
service.js — a failed run that is still live and whose task differs from every running run's task stays in the workflow's runs, with what ended it (failure: { code, nodeName?, text?, at }); record that reason wherever a run becomes failed (step failure, stop, hand-off failure, reap/dispose); history rows carry the run id and that reason.
client.js — the strip for a failed run names the reason instead of Waiting for a task; Runs rows show the run's own status (not a hardcoded "Running"), its time, and its reason.
One tone: 'bad' timeline line for an ending that logs none today (hand-off failure, reap).
Tests that fail on the current tree: a service test for the snapshot and the reason record, and a client test for the failed sibling strip plus the Runs row (status, time, reason).
No blocking conflict.#1507 (a retry leaves duplicate rows for one task) stays open and undecided: this change surfaces a failed run only when its task differs from every running run's task, so a same-task retry still collapses to the running row and #1507 keeps its own question. #1494 merged; no open PR names #1493; no hold; unassigned.
Claimed #1493 — branch fix/1493-failed-sibling-surface, pull request #1562 (Fixes #1493). First step was the reproduction above; the change keeps the failed sibling in workflow/stateruns with a failure record, shows it on the strip and its Runs row with time and reason, and writes the timeline line the reap never wrote. Awaiting CI at the tip and a Reviewer PASS.
Reconcile at 2026-10-28T10:35:25Z: PR #1562 already exists for this issue (claimed 2026-10-28T06:45Z, branch fix/1493-failed-sibling-surface, head 4a0ed7fcb330616b758c0f7bec8863cf7bb59fb7, body Fixes #1493, labelled agent-pr), so agent-ready is removed and this round adds no implementation.
The work item is the pull request: green CI at the tip, then a Reviewer PASS at that same tip.
The in-flight label is left for its owner; the claim comment above already names the branch and the pull request.
Label repair at 2026-10-28T10:50:26Z: agent-pr added — this issue's open pull request is #1562 (this repository), head 4a0ed7fcb330616b758c0f7bec8863cf7bb59fb7. Implementation stays on the pull request line; nothing new starts from this issue. agent-working removed as well: the work is on the PR line, not on the issue line.
Activity
fix(workflow,settings): UI polish pass 5+6 - Progress button, Notific…
fix(workflow,settings): UI polish pass 5+6 - Progress button, Notific…
fix(workflow,settings): UI polish passes 4-6 - composer, locale, head…
Birfy commentedon Oct 28, 2026
LIVE re-confirm (Asia/Shanghai 2026-10-28) — Failed rows still have no reason
Same inspection pass on prod tip ~55e1c27a (issue→合入 / PR→合入 via cookie proxy). Expanding the “Runs rows lack … failure reason” note already in this issue:
Actual: Failed runs (examples seen: #1453, #1422, #1395) show no failure reason in the Runs list or the timeline — only a Failed badge / status. Operator cannot tell why it failed without digging elsewhere.
Expected: When a run fails, surface a short reason (error / outcome / last node message) on the Runs row and on a timeline failure line.
This issue’s expected already asks for “Runs rows show time + reason when Failed” and timeline failure + reason — keeping that here instead of a duplicate “no failure reason” issue. Sibling-header visibility remains the other half of this ticket.
Not filing separately (dedupe). Owner: 「这些问题也要提issue去改」 (t640u).
Birfy commentedon Oct 28, 2026
Written-by: Triage
agent-ready— reproduced againstmainat176d33d034e741b68041c0676da1707001cb6e88(2026-10-28), not only in the screenshot.Why a sibling failure never reaches the room. The client half of this shipped in #1494 (
liveStageRunsacceptsstatus === 'failed', the strip paints aFailedchip), but the host never sends a failed run, so that path is dead whenever another run is still live:plugins/workflow/src/service.js:184—runs: runningOf(lane), andrunningOfkeeps onlylive === true && status === 'running'(:203). A run that fails leaveslane.activeand lives inlane.lastandlane.historyonly.maxConcurrent: 2), then end one the way the stop / reap paths do (reset { runId }→endRun). Snapshot:runs = [#1445 running],activeCount = 1,run = #1445—#1460appears only ashistory: [{task, status: 'failed', at}], with no run id and no reason. The header has one strip, exactly as the screenshot.plugins/workflow/client.js:551—runHistoryRowshardcodesstatus: 'running'for every row it takes fromruns, so a failed run routed through it would read "Running";Runs(:725) renders neitheratnor a reason, which is the second half of this issue.narrate.js) andresetlogs■ 已停止, but the hand-off catch (service.js:555,endRun→releaseRun) andreap(:1062) /dispose(:1085) archive a run asfailedwith no log line at all — the开始then nothing shape of fix(workflow): every stage chat line is clipped at 240 characters with no way to read the rest (introduced by #1456) #1460.Scope going forward (one PR):
service.js— a failed run that is stillliveand whose task differs from every running run's task stays in the workflow'sruns, with what ended it (failure: { code, nodeName?, text?, at }); record that reason wherever a run becomesfailed(step failure, stop, hand-off failure, reap/dispose); history rows carry the run id and that reason.client.js— the strip for a failed run names the reason instead ofWaiting for a task;Runsrows show the run's own status (not a hardcoded "Running"), its time, and its reason.tone: 'bad'timeline line for an ending that logs none today (hand-off failure, reap).No blocking conflict. #1507 (a retry leaves duplicate rows for one task) stays open and undecided: this change surfaces a failed run only when its task differs from every running run's task, so a same-task retry still collapses to the running row and #1507 keeps its own question. #1494 merged; no open PR names #1493; no
hold; unassigned.Birfy commentedon Oct 28, 2026
Written-by: Triage
Claimed #1493 — branch
fix/1493-failed-sibling-surface, pull request #1562 (Fixes #1493). First step was the reproduction above; the change keeps the failed sibling inworkflow/staterunswith afailurerecord, shows it on the strip and its Runs row with time and reason, and writes the timeline line the reap never wrote. Awaiting CI at the tip and a Reviewer PASS.Birfy commentedon Oct 28, 2026
Written-by: Triage
Reconcile at 2026-10-28T10:35:25Z: PR #1562 already exists for this issue (claimed 2026-10-28T06:45Z, branch
fix/1493-failed-sibling-surface, head4a0ed7fcb330616b758c0f7bec8863cf7bb59fb7, bodyFixes #1493, labelledagent-pr), soagent-readyis removed and this round adds no implementation.Birfy commentedon Oct 28, 2026
Written-by: Triage
Label repair at 2026-10-28T10:50:26Z:
agent-pradded — this issue's open pull request is #1562 (this repository), head4a0ed7fcb330616b758c0f7bec8863cf7bb59fb7. Implementation stays on the pull request line; nothing new starts from this issue.agent-workingremoved as well: the work is on the PR line, not on the issue line.fix(workflow): show a failed sibling run on the stage with its reason (…
fix(workflow): end a run whose running node the graph edit drops (Thi…