Bug
When a workflow node fails, the run's status is set to completed instead of failed, even though node_counts correctly shows a failed node. This prevents the user from resuming the run via the web UI because the Resume button only renders for status === 'failed'.
Root Cause
The status derivation logic does not account for failed nodes when determining the final run status. A run with node_counts: {completed: 3, failed: 1, skipped: 4, total: 8} is marked status: "completed" because at least one path through the DAG reached a terminal node.
The Resume button in packages/web/src/components/dashboard/WorkflowRunCard.tsx (around line 342) conditionally renders only when run.status === 'failed'. Since the run is marked completed, there is no UI affordance to retry.
Reproduction
- Start any DAG workflow that has multiple nodes
- Cause a mid-workflow node to fail (e.g.,
implement-setup fails due to missing plan file — see related plan-path bug)
- Query the run status via
GET /api/workflows/runs?limit=20
- Observe
status: "completed" despite node_counts.failed: 1
- In the web UI dashboard, note the missing Resume button
Workaround
Abandon the run from the dashboard and fire a fresh workflow run pointing at the same input/plan file.
Proposed Fix
The status derivation should be: if any non-skipped node has failed status, the run status should be failed, not completed. This ensures the Resume button renders and the user can retry.
Environment
- Archon v0.3.6
- macOS (web UI, local dev server)
- Observed on
archon-piv-loop workflow run, 2026-04-22
Claude-discovered, human-verified. Identified by Claude during an interactive piv-loop session; reproduction steps and workaround confirmed by a human operator.
Bug
When a workflow node fails, the run's
statusis set tocompletedinstead offailed, even thoughnode_countscorrectly shows a failed node. This prevents the user from resuming the run via the web UI because the Resume button only renders forstatus === 'failed'.Root Cause
The status derivation logic does not account for failed nodes when determining the final run status. A run with
node_counts: {completed: 3, failed: 1, skipped: 4, total: 8}is markedstatus: "completed"because at least one path through the DAG reached a terminal node.The Resume button in
packages/web/src/components/dashboard/WorkflowRunCard.tsx(around line 342) conditionally renders only whenrun.status === 'failed'. Since the run is markedcompleted, there is no UI affordance to retry.Reproduction
implement-setupfails due to missing plan file — see related plan-path bug)GET /api/workflows/runs?limit=20status: "completed"despitenode_counts.failed: 1Workaround
Abandon the run from the dashboard and fire a fresh workflow run pointing at the same input/plan file.
Proposed Fix
The status derivation should be: if any non-skipped node has
failedstatus, the run status should befailed, notcompleted. This ensures the Resume button renders and the user can retry.Environment
archon-piv-loopworkflow run, 2026-04-22Claude-discovered, human-verified. Identified by Claude during an interactive piv-loop session; reproduction steps and workaround confirmed by a human operator.