Fusion Agent
38ed1d25e5
FN-209: add external block status and safe recovery
Add durable external-block state and safe resume handling across storage, engine, dashboard, and tests.
- Persist external-block metadata and migration support for frozen tasks.
- Freeze execution, scheduling, and self-healing resources while preserving exact resume state.
- Add dashboard notices/actions, resume routes, localized copy, and regression coverage.
- Preserve lifecycle containment and attributable automatic-move logging during the merge.
Files changed:
.changeset/fn-209-external-block-status.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 6 +
docs/dashboard-guide.md | 4 +
docs/run-audit.md | 4 +
...xternal-block-and-remaining-lifecycle-drifts.md | 29 +++
docs/storage.md | 4 +
docs/task-management.md | 6 +
.../core/src/__tests__/live-agent-count.test.ts | 19 ++
.../postgres/queued-episode-transition.pg.test.ts | 2 +-
.../src/__tests__/postgres/schema-applier.test.ts | 6 +-
.../core/src/__tests__/task-external-block.test.ts | 81 +++++++
packages/core/src/agents/live-agent-count.ts | 15 +-
packages/core/src/index.gate.ts | 10 +
packages/core/src/index.ts | 10 +
.../migrations/0069_fn_209_task_external_block.sql | 3 +
packages/core/src/postgres/schema-applier.ts | 27 ++-
packages/core/src/postgres/schema/project.ts | 2 +
packages/core/src/store.ts | 2 +-
.../core/src/task-store/branch-and-pr-entities.ts | 2 +-
packages/core/src/task-store/persistence.ts | 4 +-
packages/core/src/task-store/reset-lifecycle.ts | 3 +-
packages/core/src/task-store/serialization.ts | 1 +
packages/core/src/task-store/task-mutation-ops.ts | 2 +-
packages/core/src/task-store/task-row-mappers.ts | 2 +-
packages/core/src/task-store/task-update.ts | 5 +
packages/core/src/tasks/task-external-block.ts | 64 ++++++
packages/core/src/types.ts | 10 +
packages/core/src/types/task/task-core.ts | 8 +
packages/dashboard/app/App.tsx | 2 +-
packages/dashboard/app/components/AppModals.tsx | 1 +
packages/dashboard/app/components/Board.tsx | 6 +-
packages/dashboard/app/components/Column.tsx | 5 +-
packages/dashboard/app/components/DockTaskList.tsx | 3 +
packages/dashboard/app/components/ListView.tsx | 7 +
packages/dashboard/app/components/TaskCard.css | 76 +++++++
packages/dashboard/app/components/TaskCard.tsx | 86 +++++++-
.../dashboard/app/components/TaskDetailModal.tsx | 4 +
.../dashboard/app/components/WorktreeGroup.tsx | 4 +
.../__tests__/ListView.external-block.test.tsx | 41 ++++
...TaskCard.external-block-host-inventory.test.tsx | 37 ++++
.../__tests__/TaskCard.external-block.test.tsx | 90 ++++++++
.../TaskDetailModal.external-block.test.tsx | 39 ++++
.../app/components/dashboard/MainContent.tsx | 5 +
.../app/components/overflowViewRegistry.tsx | 2 +
.../app/components/useRightDockController.tsx | 4 +
.../utils/__tests__/taskStatusBadgeLabel.test.ts | 6 +
.../dashboard/app/utils/taskStatusBadgeLabel.ts | 4 +
.../routes-task-external-block-resume.test.ts | 213 +++++++++++++++++++
.../src/__tests__/task-retry-stage-route.test.ts | 3 +-
.../src/routes/register-task-workflow-routes.ts | 9 +
.../src/routes/task-external-block-resume.ts | 112 ++++++++++
...executor-external-block-session-failure.test.ts | 77 +++++++
.../__tests__/executor-task-done-blocked.test.ts | 54 +++++
.../external-block-freeze-contract.test.ts | 51 +++++
.../__tests__/pipeline-smoke/_pipeline-drivers.ts | 21 +-
.../__tests__/pipeline-smoke/_pipeline-harness.ts | 126 ++++++++++-
.../pipeline-smoke/_pipeline-scenarios.ts | 22 +-
.../pipeline-smoke/_pipeline-terminal-state.ts | 3 +
.../pipeline-nominal-and-review.pipeline.test.ts | 2 +-
.../pipeline-resilience.pipeline.test.ts | 2 +-
.../pipeline-terminal-state.pipeline.test.ts | 10 +
.../scheduler-external-block-resources.test.ts | 57 +++++
.../__tests__/scheduler-overlap-starvation.test.ts | 8 +-
.../self-healing-external-block-immunity.test.ts | 236 +++++++++++++++++++++
.../self-healing-leaked-slot-reaper.test.ts | 21 ++
packages/engine/src/execution-block-classifier.ts | 39 ++++
.../src/executor/clear-phantom-executor-binding.ts | 7 +-
.../engine/src/executor/create-task-done-tool.ts | 69 +++++-
packages/engine/src/executor/execution-prompt.ts | 1 +
.../route-graph-failure-to-execution-resume.ts | 6 +-
packages/engine/src/executor/run-implementation.ts | 93 ++++++--
.../src/executor/task-executor-session-facades.ts | 2 +-
packages/engine/src/runtimes/in-process-runtime.ts | 2 +-
packages/engine/src/scheduler.ts | 16 +-
packages/engine/src/self-healing.ts | 22 +-
packages/engine/src/util/run-audit.ts | 3 +
packages/i18n/locales/en/app.json | 11 +-
packages/i18n/locales/es/app.json | 11 +-
packages/i18n/locales/fr/app.json | 11 +-
packages/i18n/locales/ko/app.json | 11 +-
packages/i18n/locales/pt-BR/app.json | 11 +-
packages/i18n/locales/zh-CN/app.json | 11 +-
packages/i18n/locales/zh-TW/app.json | 11 +-
packages/i18n/src/resources.d.ts | 11 +-
85 files changed, 2067 insertions(+), 69 deletions(-)
Fusion-Task-Id: FN-209
Fusion-Task-Lineage: cf7811bb-94f8-4f7a-8a2f-468f19074b9b
Co-authored-by: Fusion <noreply@runfusion.ai>
2026-08-28 05:54:10 +00:00
..
2026-08-28 05:54:10 +00:00
2026-08-12 21:24:53 -07:00
2026-07-30 00:07:06 -07:00
2026-06-21 03:10:21 -07:00
2026-08-19 18:50:27 -07:00
2026-08-18 08:08:24 -07:00
2026-08-24 01:20:23 +00:00
2026-08-23 01:36:12 +00:00
2026-08-18 22:11:47 -07:00
2026-08-23 01:36:12 +00:00
2026-08-27 21:35:29 +00:00
2026-08-20 03:57:23 +00:00
2026-08-23 01:36:12 +00:00
2026-08-18 00:10:46 -07:00