FN-7727: persist failed workflow step history across self-healing retries
Preserves prior failed pre-merge review attempts instead of overwriting them when self-healing re-runs a failed workflow step.
- Add optional bounded `priorAttempts?: WorkflowStepResult[]` field to `WorkflowStepResult` (capped at `MAX_WORKFLOW_STEP_PRIOR_ATTEMPTS`)
- Add shared pure `upsertWorkflowStepResult(existing, incoming, opts?)` helper in `@fusion/core` (packages/core/src/workflow-step-results.ts)
- Route the executor graph adapter's `recordWorkflowStepResult` and triage's `recordPlanReviewWorkflowResult` through the new helper so a self-healing recovery re-run snapshots the prior failed/advisory_failure attempt into `priorAttempts` instead of dropping it
- Selection logic (self-healing, merge-blocker, progress/timing) is unchanged and still reads only the current entry
- Surface prior failed attempts in the TaskDetailModal Summary tab's Workflow results list as a collapsed "previous failed attempts" disclosure
- Add core/engine/dashboard tests covering the upsert helper, self-healing recovery snapshotting, and the UI disclosure
- Document the behavior in docs/workflow-steps.md
- Add changeset for @runfusion/fusion (patch)
Files changed:
.changeset/fn-7727-persist-failed-step-history.md | 7 ++
docs/workflow-steps.md | 15 +++
.../src/__tests__/workflow-step-results.test.ts | 138 +++++++++++++++++++++
packages/core/src/index.gate.ts | 4 +
packages/core/src/index.ts | 4 +
packages/core/src/types.ts | 19 +++
packages/core/src/workflow-step-results.ts | 99 +++++++++++++++
.../dashboard/app/components/TaskDetailModal.css | 55 ++++++++
.../dashboard/app/components/TaskSummaryTab.tsx | 42 ++++++-
.../TaskSummaryTab.prior-attempts.test.tsx | 89 +++++++++++++
.../clear-terminal-workflow-step-failures.test.ts | 27 ++++
packages/engine/src/__tests__/self-healing.test.ts | 50 ++++++++
...flow-step-results-self-healing-recovery.test.ts | 115 +++++++++++++++++
packages/engine/src/executor.ts | 29 +++--
packages/engine/src/triage.ts | 14 ++-
15 files changed, 688 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-7727
Fusion-Task-Lineage: 7316fb18-bc92-426d-91f4-b1a4ad41c9b1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>