gsxdsm
b6ac5f2e51
FN-6608: bound engine verification runs
...
Add durable engine-level guardrails for verification command timeouts.
- Add project-level verificationCommandTimeoutMs settings plumbing and docs.
- Enforce configured verification budgets and hard caps in executor and merger verification paths.
- Detect marathon verification commands, soft-cap them by default, and require allowFullSuite for explicit full-suite runs.
- Cover timeout defaults, marathon detection, and guidance updates with engine/core tests.
Files changed:
.changeset/fn-6608-verification-bound.md | 5 +
docs/settings-reference.md | 1 +
docs/testing.md | 2 +
.../src/__tests__/settings-consistency.test.ts | 5 +
packages/core/src/agent-prompts.ts | 6 +-
packages/core/src/settings-schema.ts | 7 +-
packages/core/src/types.ts | 6 +
.../engine/src/__tests__/executor-core.test.ts | 3 +
.../src/__tests__/run-verification-command.test.ts | 176 ++++++++++++++++++++-
packages/engine/src/executor.ts | 11 +-
packages/engine/src/merger.ts | 9 +-
packages/engine/src/run-verification-tool.ts | 142 +++++++++++++++--
packages/engine/src/verification-utils.ts | 13 +-
13 files changed, 360 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-6608
Fusion-Task-Lineage: c593a96d-eb8b-492c-82c7-8943c239f588
2026-06-18 01:27:09 -07:00
gsxdsm
d0be3e462d
FN-6610: harden engine test isolation recovery
...
Harden shared test isolation seams so engine tests survive mid-run cleanup.
- Recreate owned worker roots, HOME directories, and cwd before child-process launches.
- Add regression coverage for tmpdir redirect, HOME, cwd, SQLite, and git config recovery.
- Revalidate worktree database scratch directories before direct SQLite opens and document the rescue pattern.
Files changed:
docs/testing.md | 2 +
packages/core/src/__test-utils__/vitest-setup.ts | 92 ++++++++++++++++++----
.../__tests__/vitest-setup-tmp-redirect.test.ts | 33 ++++++++
.../src/__tests__/executor-step-session.test.ts | 6 +-
.../src/__tests__/worktree-db-hydrate.test.ts | 22 +++++-
5 files changed, 135 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-6610
Fusion-Task-Lineage: 18233ee2-1dfe-4b0d-bd12-e4f5b7f9cc29
2026-06-18 01:20:03 -07:00
gsxdsm
4315cd01c6
FN-6598: suppress stuck detection during verification
...
Treat bounded verification subprocesses as healthy activity so progressing tasks avoid false stuck-loop recovery.
- Bracket fn_run_verification commands with stuck-detector start/end signals.
- Suppress loop and no-progress churn while verification is active, with timeout-bounded cleanup.
- Add regression coverage for verification heartbeats, compact-and-resume recovery, and no-progress churn behavior.
- Document verification suppression in reliability guidance.
Files changed:
docs/architecture.md | 5 +-
docs/testing.md | 1 +
.../src/__tests__/executor-step-session.test.ts | 10 +-
.../non-progress-churn.test.ts | 55 +++++++++
.../src/__tests__/run-verification-command.test.ts | 45 ++++++-
.../src/__tests__/stuck-task-detector.test.ts | 136 +++++++++++++++++++++
packages/engine/src/executor.ts | 2 +
packages/engine/src/run-verification-tool.ts | 33 +++--
packages/engine/src/stuck-task-detector.ts | 69 +++++++++++
9 files changed, 341 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-6598
Fusion-Task-Lineage: 5449b413-c500-46aa-b46d-cf94c2d88710
2026-06-18 00:39:01 -07:00
gsxdsm
98ccf8a293
FN-6625: classify completion finalization aborts
...
Prevent completed no-commit executions that already advanced to review from being re-parked as pause-abort failures.
- Add completion-finalize pause-abort provenance and exclude it from genuine pause handling after review handoff.
- Mark paused-after-completion finalization paths with the new provenance before handing tasks to review.
- Cover the finalize-to-review abort recovery path with executor regression tests and document the lifecycle exception.
- Add a patch changeset for the published Fusion package.
Files changed:
.changeset/fn-6625-finalize-to-review-abort.md | 5 +
docs/architecture.md | 2 +-
.../engine/src/__tests__/executor-recovery.test.ts | 158 ++++++++++++++++++++-
packages/engine/src/executor.ts | 26 +++-
4 files changed, 185 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-6625
Fusion-Task-Lineage: 728f6fe5-4c27-4597-b17e-e16ff97b9277
2026-06-18 00:01:32 -07:00
gsxdsm
0453a65bf1
FN-6613: inject skills into agent session lanes
...
Ensure every agent-acting session lane requests available agent and plugin skills.\n\n- Add skill selection context to planning, mission interview, workflow design, memory insight, and cron automation sessions.\n- Thread plugin runners through dashboard session creation, retry, reconnect, and route registration paths.\n- Cover skill injection behavior with dashboard and cron runner regression tests.\n- Document which agent session lanes request skills and which utility-only lanes remain exempt.\n- Add a minor changeset for the published CLI package.\n\nFiles changed:\n .changeset/fn-6613-session-skill-lanes.md | 5 +\n docs/agents.md | 1 +\n .../src/__tests__/mission-interview.test.ts | 55 ++++++\n .../src/__tests__/planning-skill-selection.test.ts | 130 +++++++++++++\n .../src/__tests__/session-error-recovery.test.ts | 6 +\n .../session-persistence-roundtrip.test.ts | 6 +\n .../src/__tests__/session-reconnect.test.ts | 6 +\n .../src/__tests__/session-resume-history.test.ts | 6 +\n packages/dashboard/src/mission-interview.ts | 23 ++-\n packages/dashboard/src/mission-routes.ts | 4 +-\n packages/dashboard/src/planning.ts | 32 +++-\n .../register-settings-memory-worktrunk.test.ts | 203 ++++++++++++++++++++-\n .../routes/__tests__/workflow-design-route.test.ts | 56 +++++-\n .../src/routes/register-integrated-routers.ts | 2 +-\n .../src/routes/register-planning-subtask-routes.ts | 5 +\n .../src/routes/register-settings-memory-routes.ts | 33 +++-\n .../src/routes/register-workflow-routes.ts | 16 +-\n packages/dashboard/src/test/mockCoreEngine.ts | 9 +\n packages/engine/src/__tests__/cron-runner.test.ts | 17 ++\n packages/engine/src/cron-runner.ts | 7 +\n 20 files changed, 599 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-6613
Fusion-Task-Lineage: 985fa9fb-0381-4abf-930f-b547a475c4ed
2026-06-17 21:12:53 -07:00
gsxdsm
a013bc0309
FN-6607: align step tools with zero-based prompt steps
...
Align executor step tools and review bookkeeping with the 0-based Step N labels agents see in PROMPT.md.
- Treat fn_task_update and fn_review_step step parameters as 0-indexed values, including validation, logs, checkpoints, and review verdict maps.
- Update executor/reviewer/step-runner guidance and generated tool docs to describe Step 0 semantics consistently.
- Adjust affected executor and reliability tests and add coverage proving Step 0 progress, review, and revise handling work without off-by-one shifts.
- Add a patch changeset for the published Fusion CLI package.
Files changed:
.changeset/fn-6607-step-numbering.md | 5 +
.../cli/skill/fusion/references/engine-tools.md | 4 +-
.../engine/src/__tests__/executor-pause.test.ts | 2 +-
.../executor-review-step-indexing.test.ts | 18 +-
.../src/__tests__/executor-review-verdicts.test.ts | 18 +-
.../executor-step-numbering-zero-based.test.ts | 196 +++++++++++++++++++++
.../src/__tests__/executor-step-session.test.ts | 24 ++-
...executor-task-done-revise-verdict-guard.test.ts | 4 +-
.../executor-pending-review-skip-retry.test.ts | 8 +-
.../task-done-refusal-x-invariant.test.ts | 2 +-
packages/engine/src/__tests__/step-runner.test.ts | 4 +-
packages/engine/src/executor.ts | 57 +++---
packages/engine/src/reviewer.ts | 3 +
packages/engine/src/step-runner.ts | 6 +-
14 files changed, 284 insertions(+), 67 deletions(-)
Fusion-Task-Id: FN-6607
Fusion-Task-Lineage: 1b1fb1d8-07ca-4a33-84f5-1dab83388c01
2026-06-17 19:52:20 -07:00
gsxdsm
7f4f611367
FN-6611: clarify engineer backlog auto-claim routing
...
Clarifies why engineer agents see but do not auto-claim backlog tasks without opt-in.
- Surface actionable project and per-agent opt-in guidance in no-task heartbeat prompts.
- Include eligible backlog candidates in the blocked engineer guidance so routing remains visible.
- Cover disabled engineer auto-claim scenarios with prompt assertions.
- Update agent and settings docs with the visible configuration paths.
Files changed:
docs/agents.md | 2 +-
docs/settings-reference.md | 2 +-
.../engine/src/__tests__/heartbeat-executor.test.ts | 11 +++++++++--
packages/engine/src/agent-heartbeat.ts | 19 ++++++++++++++++---
4 files changed, 27 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6611
Fusion-Task-Lineage: ffcafc50-1664-4807-826c-cccf68d31012
2026-06-17 19:11:31 -07:00
gsxdsm
48da420414
FN-6593: delete unresolved flaky test quarantines
...
Delete unresolved quarantined flaky tests under the deletion ratchet while preserving newer active quarantines.
- Remove four flaky test files that were not rescued before the ratchet follow-up.
- Drop their matching Vitest excludes and quarantine ledger entries.
- Preserve later sync, work-bridge, and core quarantine records from main.
Files changed:
.../src/__tests__/github-tracking-hook.test.ts | 592 ---------------------
packages/dashboard/vitest.config.ts | 8 +-
.../src/__tests__/cli-agent-executor.test.ts | 404 --------------
packages/engine/vitest.config.ts | 5 +-
.../src/__tests__/orchestrator-flow.test.ts | 156 ------
.../src/__tests__/skill-wiring.test.ts | 101 ----
.../vitest.config.ts | 6 +-
scripts/lib/test-quarantine.json | 20 -
8 files changed, 13 insertions(+), 1279 deletions(-)
Fusion-Task-Id: FN-6593
Fusion-Task-Lineage: 1165ba24-894a-4cc9-b678-50ae1625ba6b
2026-06-17 17:37:08 -07:00
gsxdsm
01b80db603
FN-6589: add structured ask-question chat tool
...
Add a native chat-agent tool for presenting structured questions to dashboard users.
- Register `fn_ask_question` for dashboard chat sessions with prompt guidance to wait for user replies.
- Reuse the existing structured question card parser by recognizing the new tool name.
- Validate ask-question parameters in engine tooling and cover chat/parser behavior with tests.
- Document the dashboard chat question flow and add a patch changeset.
Files changed:
.changeset/fn-6589-chat-ask-question.md | 5 ++
docs/dashboard-guide.md | 3 +-
.../utils/__tests__/parseQuestionToolCall.test.ts | 19 +++++
.../dashboard/app/utils/parseQuestionToolCall.ts | 3 +-
.../dashboard/src/__tests__/chat-manager.test.ts | 10 ++-
packages/dashboard/src/chat.ts | 10 ++-
.../src/__tests__/agent-tools-ask-question.test.ts | 51 ++++++++++++
packages/engine/src/agent-tools.ts | 94 ++++++++++++++++++++++
packages/engine/src/index.ts | 2 +
9 files changed, 190 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6589
Fusion-Task-Lineage: 3f416010-ed2f-40b3-a899-7a9f4a6ed265
2026-06-17 16:53:29 -07:00
gsxdsm
e48df026c6
FN-6594: classify Codex transcript desync as non-continuable
...
Recognize Codex transcript replay desync failures so completed tasks can recover instead of wedging.
- Add Codex transcript-desync matching to non-continuable session error detection.
- Cover canonical and symmetric missing function-call-output messages while excluding auth, quota, and ordinary bad-input errors.
- Add self-healing coverage for post-done wedges with Codex envelope and log evidence.
Files changed:
.../post-done-continuation-no-wedge.test.ts | 72 ++++++++++++++++++++++
.../src/__tests__/transient-error-detector.test.ts | 24 +++++++-
packages/engine/src/transient-error-detector.ts | 7 ++-
3 files changed, 101 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6594
Fusion-Task-Lineage: 517f39c8-9bbb-47d2-a4a4-495eaf8c3fca
2026-06-17 15:11:55 -07:00
gsxdsm
403bd9d716
FN-6582: enforce workflow gate artifact verdicts
...
Enforce custom workflow terminal gates for required artifacts and malformed pre-merge verdicts.
- Add runtime validation that declared workflow artifacts exist before reporting workflow success.
- Treat malformed pre-merge gate output as a blocking failure instead of a skipped success.
- Cover required-artifact and malformed-verdict gate behavior with focused engine tests.
- Document the required-artifact gate and add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-6582-workflow-gates.md | 5 +
docs/workflow-steps.md | 5 +-
.../workflow-malformed-verdict-gate.test.ts | 114 +++++++++++++++++++
.../workflow-required-artifact-gate.test.ts | 123 +++++++++++++++++++++
packages/engine/src/executor.ts | 63 +++++++----
packages/engine/src/workflow-task-runtime.ts | 41 ++++++-
6 files changed, 326 insertions(+), 25 deletions(-)
Fusion-Task-Id: FN-6582
Fusion-Task-Lineage: 6f59fc33-dd35-4e28-bf6b-85b709c77453
2026-06-17 14:52:56 -07:00
gsxdsm
0cc557121c
FN-6590: inject task-detail chat into active step sessions
...
Ensure task-detail comments are delivered to live executor threads and preserved for the next step prompt when no step session is active.
- Forward steering comments through legacy, step-session, and workflow-step executor targets with delivery status logging.
- Keep step-session task details updated and include pending steering comments in full and reduced step prompts.
- Track delivered steering comment IDs so comments are injected or queued exactly once across active and subsequent step sessions.
- Update step-session executor tests for live steering, queued prompt fallback, and reduced prompt behavior.
Files changed:
.../src/__tests__/executor-step-session.test.ts | 467 ++++++---------------
.../src/__tests__/step-session-executor.test.ts | 63 ++-
packages/engine/src/executor.ts | 34 +-
packages/engine/src/step-session-executor.ts | 69 ++-
4 files changed, 283 insertions(+), 350 deletions(-)
Fusion-Task-Id: FN-6590
Fusion-Task-Lineage: 18fffd41-7632-4f29-8721-daaf3c239a74
2026-06-17 14:52:56 -07:00
gsxdsm
593ebac85c
FN-6573: guard task-list formatter resolution
...
Make fn_task_list surfaces tolerate stale core runtimes without crashing.
- Resolve formatTaskListText from the runtime @fusion/core namespace with a typeof guard.
- Add bounded inline fallback formatting for CLI, dashboard planning-board, and engine triage task-list tools.
- Cover missing formatter exports with regression tests and add a published package changeset.
Files changed:
.changeset/fn-6573-task-list-format-resolve-fix.md | 5 +++
packages/cli/src/__tests__/extension.test.ts | 25 +++++++++------
packages/cli/src/extension.ts | 36 ++++++++++++++++++++--
.../src/__tests__/planning-board-tools.test.ts | 27 +++++++++++++++-
packages/dashboard/src/planning-board-tools.ts | 36 ++++++++++++++++++++--
packages/engine/src/__tests__/triage.test.ts | 25 +++++++++++++++
packages/engine/src/triage.ts | 36 ++++++++++++++++++++--
7 files changed, 174 insertions(+), 16 deletions(-)
Fusion-Task-Id: FN-6573
Fusion-Task-Lineage: 64577f09-5ca5-426e-a453-a91e6c2c3aee
2026-06-17 14:52:55 -07:00
gsxdsm
8037ef15a3
Merge main into feature/factory-view: reconcile lazy-view inventory to 23
...
Resolves conflicts in the lazy-loaded heavy-views inventory. main independently
grew the curated list to 22 (adding AppModals lazy modals); this branch added the
Command Center view. Combined count is 23 — updated the AGENTS.md prose/inventory
and the lazy-loaded-views-docs test contract (count + length assertions) to 23,
keeping main's richer "App-level and AppModals" wording.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-17 11:46:31 -07:00
gsxdsm
a84a8e1793
FN-6570: guard task list formatting fallback
...
Prevent fn_task_list surfaces from crashing when the runtime core namespace lacks the clamp export.
- Add a shared defensive task-list formatter with a bounded fallback clamp.
- Route CLI, dashboard planning-board, and engine triage fn_task_list output through the formatter.
- Cover missing, throwing, and non-string clamp behavior in core and CLI tests.
- Document the resilient task-list formatting behavior and add a patch changeset.
Files changed:
.changeset/fn-6570-task-list-resolve-fix.md | 5 ++
docs/cli-reference.md | 2 +-
packages/cli/src/__tests__/extension.test.ts | 57 +++++++++++++++++++++-
packages/cli/src/extension.ts | 8 ++-
.../core/src/__tests__/task-list-format.test.ts | 49 ++++++++++++++++++-
packages/core/src/index.ts | 2 +-
packages/core/src/task-list-format.ts | 35 +++++++++++++
packages/dashboard/src/planning-board-tools.ts | 8 ++-
packages/engine/src/triage.ts | 8 ++-
9 files changed, 164 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-6570
Fusion-Task-Lineage: 455f38a8-5e4f-4643-a3ce-088ef0c92b01
2026-06-17 06:14:10 -07:00
gsxdsm
e2a3a37b26
FN-6569: make auto-merge retry cap configurable
...
Adds a project setting that controls how many auto-merge conflict retries run before recovery paths give up.
- Add maxAutoMergeRetries to project settings defaults, schema, types, and dashboard controls.
- Resolve the retry cap in engine merge handling, self-healing recovery, stall detection, and blocker fanout logic.
- Cover custom retry caps with core, dashboard, and engine regression tests.
Files changed:
.changeset/fn-6569-max-auto-merge-retries.md | 5 ++
docs/architecture.md | 2 +-
docs/settings-reference.md | 1 +
.../core/src/__tests__/settings-defaults.test.ts | 12 ++++
packages/core/src/in-review-stall.ts | 16 ++++-
packages/core/src/index.ts | 1 +
packages/core/src/settings-schema.ts | 6 ++
packages/core/src/task-priority.ts | 4 +-
packages/core/src/types.ts | 8 +++
.../dashboard/app/components/SettingsModal.tsx | 8 +++
.../components/settings/sections/MergeSection.tsx | 26 +++++++
.../app/hooks/__tests__/useBlockerFanout.test.ts | 5 +-
packages/dashboard/app/hooks/useBlockerFanout.ts | 3 +-
.../auto-merge-retry-cap-settings.test.ts | 79 ++++++++++++++++++++++
packages/engine/src/project-engine.ts | 77 +++++++++++++--------
packages/engine/src/self-healing.ts | 30 +++++---
16 files changed, 236 insertions(+), 47 deletions(-)
Fusion-Task-Id: FN-6569
Fusion-Task-Lineage: 42242d6a-68bc-41f1-b2d9-af2e6f168eed
2026-06-17 04:51:31 -07:00
gsxdsm
6ced5d73de
FN-6568: route merge-seam graph aborts to retry
...
Classify merge-seam abort provenance so non-paused merge graph failures retry instead of parking as pauses.
- Track paused-abort provenance separately from the legacy pause-abort bit.
- Route merge and requestMerge graph failures through bounded auto-merge retry when they are not genuine pauses.
- Preserve user/global pause parking behavior with regression coverage and document the lifecycle invariant.
Files changed:
.../fn-6568-merge-seam-abort-classification.md | 5 +
docs/architecture.md | 1 +
.../engine/src/__tests__/executor-recovery.test.ts | 131 ++++++++++++++++++++-
packages/engine/src/executor.ts | 122 +++++++++++++------
4 files changed, 221 insertions(+), 38 deletions(-)
Fusion-Task-Id: FN-6568
Fusion-Task-Lineage: 5d9ee4f8-0336-4fb9-aa95-beb65e6c1ed9
2026-06-17 04:16:10 -07:00
gsxdsm
21c4d3e5ca
FN-6495: load chat session skills
...
Enable dashboard chat sessions to request the same agent and plugin skills used by execution lanes.
- Pass enabled plugin-contributed skills through the dashboard chat plugin runner contract.
- Add skill selection for bound-agent chat, model-only QuickChat, and room responder sessions.
- Cover regular chat, QuickChat, no-metadata fallback, legacy runner, and room responder skill requests.
- Document dashboard chat skill behavior and add a minor changeset for the published CLI package.
Files changed:
.changeset/fn-6495-chat-skill-selection.md | 5 +
docs/agents.md | 1 +
.../dashboard/src/__tests__/chat-manager.test.ts | 125 +++++++++++++++++++++
.../dashboard/src/__tests__/chat.rooms.test.ts | 45 ++++++++
packages/dashboard/src/chat.ts | 35 ++++++
packages/dashboard/src/server.ts | 5 +
packages/engine/src/index.ts | 6 +
7 files changed, 222 insertions(+)
Fusion-Task-Id: FN-6495
Fusion-Task-Lineage: 0b8998e2-848c-4c79-b93a-16c0b3c3d8a3
2026-06-16 19:40:56 -07:00
gsxdsm
0db81349bb
FN-6492: clamp task list text output
...
Bound fn_task_list responses now stay as plain text across board-tool surfaces.\n\n- Add a shared task-list text clamp with an explicit truncation marker.\n- Route CLI, dashboard planning-board, and engine triage task-list output through the shared formatter.\n- Cover bounded and column-filtered output with core and CLI regression tests.\n- Record the patch changeset and quarantine the observed engine CLI executor flake.\n\nFiles changed:\n .changeset/fn-6492-task-list-text-bound.md | 5 ++\n packages/cli/src/__tests__/extension.test.ts | 79 +++++++++++++++++++++-\n packages/cli/src/extension.ts | 7 +-\n .../core/src/__tests__/task-list-format.test.ts | 75 ++++++++++++++++++++\n packages/core/src/index.ts | 1 +\n packages/core/src/task-list-format.ts | 45 ++++++++++++\n packages/dashboard/src/planning-board-tools.ts | 8 ++-\n packages/engine/src/triage.ts | 7 +-\n packages/engine/vitest.config.ts | 5 ++\n scripts/lib/test-quarantine.json | 5 ++\n 10 files changed, 232 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-6492
Fusion-Task-Lineage: 8b347efb-bc17-4bbe-937c-4f07c63df318
2026-06-16 19:31:33 -07:00
gsxdsm
0093678ee6
FN-6481: require release triage authorization
...
Block release-class tasks from automatic triage dispatch unless they come from a user-authored source with explicit authorization.
- Add release intent classification and authorization-marker enforcement before final triage transitions.
- Record activity/log details when release tasks are parked awaiting manual approval.
- Surface the new release-authorization activity in dashboard activity views.
- Cover release gating behavior with engine tests and document the architecture pattern.
- Add a changeset for the published CLI package.
Files changed:
.changeset/fn-6481-release-triage-authorization.md | 5 +
.../release-triage-requires-user-authorization.md | 33 +++++
packages/core/src/types.ts | 2 +
packages/core/vitest.config.ts | 4 +
packages/dashboard/app/components/ActivityFeed.tsx | 5 +
.../dashboard/app/components/ActivityLogModal.tsx | 6 +
.../__tests__/triage-release-authorization.test.ts | 158 +++++++++++++++++++++
.../engine/src/triage-release-authorization.ts | 100 +++++++++++++
packages/engine/src/triage.ts | 51 +++++++
scripts/lib/test-quarantine.json | 8 +-
10 files changed, 371 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6481
Fusion-Task-Lineage: 0bddb77a-87e5-4fa5-b31a-e773bdae7a29
2026-06-16 15:08:24 -07:00
gsxdsm
cb91d3fc06
FN-6482: preserve awaiting graph failure states
...
Preserve resumable workflow graph waits instead of parking them as execute failures.
- Classify awaiting user input and CLI approval node values before terminal graph failure handling.\n- Read foreach container context values for step-execute instances.\n- Cover awaiting graph exits and genuine step-execute-unwired failures in executor recovery tests.\n\nFiles changed:\n .../engine/src/__tests__/executor-recovery.test.ts | 87 ++++++++++++++++++++++\n packages/engine/src/executor.ts | 34 +++++++++\n 2 files changed, 121 insertions(+)
Fusion-Task-Id: FN-6482
Fusion-Task-Lineage: 2443d4cd-1307-470a-b456-2f3b44b9cc83
2026-06-16 15:08:24 -07:00
gsxdsm
61f389ed3c
Address PR review feedback ( #1683 )
...
- monitor-trait: atomic incident-level claim (conditional UPDATE) so concurrent
regression ingests can't open duplicate fix tasks; loser absorbs (+ tests)
- register-git-github: attach/detach KnowledgeIndexRefreshService per project
store so task:moved→done refreshes the index for non-primary projects
- agent-logger: make usage-event emission genuinely fail-soft (try/catch +
absorb async rejection) so a throwing emitUsageEvent can't break tool logging
(+ sync-throw and rejected-promise tests)
- db: add composite (kind, ts) index on usage_events backing Command Center
tool analytics; folded into migration 118 (unreleased) — no SCHEMA_VERSION bump
- db.test: assert the six v120 deployments/incidents indexes survive migration
- lazy-loaded-views-docs.test: fix stale "20-view" → "21-view" description
- add FNXC_LOG change-log annotations across the touched package files per AGENTS.md
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-16 05:56:11 -07:00
gsxdsm
e617ce65d9
feat(pr): U18 — surface + gate auto-resolution of PR review comments
...
Adds autoResolveReviewComments project setting (default on) gating the existing
Review-response loop, a single-sourced summarizePrThreadActivity counter, and
fixed/acted thread counts in the dashboard PR summary. Resolution stays
independent of the auto-merge gate (disabled merge still resolves threads).
2026-06-15 19:44:17 -07:00
gsxdsm
ab9fdc4136
feat(telemetry): U1 — queryable usage_events table + emitUsageEvent capture
...
Schema migration 117→118 adds usage_events; events captured via a dedicated
emitUsageEvent seam wired through AgentLogger tool hooks + executor session
context (model/provider/nodeId), not by widening log signatures. meta is
size-capped and carries only non-sensitive descriptors.
2026-06-15 19:20:38 -07:00
gsxdsm
799e590e3e
Merge pull request #1580 from Runfusion/feature/workflow-owned-merge-s07-completion-handoff-merge-work
...
refactor(workflow): S07 completion handoff creates merge work
2026-06-16 04:30:22 +08:00
gsxdsm
1b5b8708a6
Merge pull request #1579 from Runfusion/feature/workflow-owned-merge-s06-git-merge-capabilities
...
refactor(workflow): S06 git and merge capability extraction
2026-06-16 04:28:26 +08:00
gsxdsm
5696d4497f
fix(review): address PR #1681 feedback (acp.active accuracy + FNXC comments)
...
- Greptile P2: `acp.active` now reflects the ACTUAL dispatch determinant
(FUSION_CLAUDE_ACP, which includes the operator force-override), not the
experimental flag alone — so the status isn't misleading when forced on/off.
- CodeRabbit/Greptile P2: add FNXC:ClaudeAcp comments to the new code blocks
per the AGENTS.md greppable-comment convention.
Already fixed in the prior commit (daa37d08c ): the P1 "sticky env" / latch
(applyClaudeAcpEnable now recomputes each call + FUSION_CLAUDE_ACP_FORCE
override) and the enable->disable-on-same-env regression test.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 12:34:44 -07:00
gsxdsm
daa37d08c5
feat(acp): surface bridge auth failure in the UI with fallback / fix-auth (R17)
...
When the bridged `claude` can't authenticate (detached daemon / no keychain),
the turn returns "Not logged in" instead of a real answer. Rather than silently
relay that, detect it and let the user choose.
- Driver: detect a "Not logged in"-only turn and write a cross-process signal
(fusion-acp-bridge-auth.json); a real response clears it (acp-driver test).
- Dashboard status: GET /providers/claude-cli/status reports
acp.authFailed + authReason from the signal.
- UI: the Claude CLI provider card shows an auth-failure banner with
"Use claude -p" (sets experimentalFeatures.claudeCliAcp=false) and
"I fixed auth — re-test", plus a fix hint (run `claude` to log in).
- Enable resolution now recomputes each call with an operator force-override
(FUSION_CLAUDE_ACP_FORCE), so the "Use -p" fallback takes effect on the next
turn — no restart. claude-acp-enable tests updated.
pi-claude-cli + engine tests green; dashboard typecheck clean.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 12:32:00 -07:00
gsxdsm
45184aef7e
feat(acp): enable Route A via experimental flag (claudeCliAcp), default ON
...
Replace the manual FUSION_CLAUDE_ACP env enable with an experimental feature
switch. `experimentalFeatures.claudeCliAcp` is ON by default (off only when
explicitly set false); the engine translates it into the FUSION_CLAUDE_ACP
dispatch the pi-claude-cli provider reads, at registerExtensionProviders time.
- Still fail-closed: with no bridge path published (acp-runtime plugin absent),
the provider falls back to `claude -p`.
- Explicit FUSION_CLAUDE_ACP env always wins (operator / test override).
- New testable helper claude-acp-enable.ts (6/6 tests); flag documented in the
core experimentalFeatures doc.
So with the acp-runtime plugin installed, Claude CLI now routes through the ACP
bridge by default; set experimentalFeatures.claudeCliAcp=false to force `-p`.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 12:14:20 -07:00
gsxdsm
079844e1c1
feat(acp): forward MCP servers on session/new (U10) + record U9 GO / R17
...
Route A unblock + the first Route A code increment.
- U9 verdict recorded (plan OQ1 + docs/acp-contract.md): in an authenticated
interactive session the pinned claude-code-cli-acp 0.1.1 bridge forwards
session/new mcpServers to Claude, Claude invokes the forwarded Fusion tool,
and the call traverses the ACP permission gate (session/request_permission).
Both security-critical answers resolve positively — overturns the headless
NOT-GO chain (FN-6466/6467/6473/6476), whose only blocker was running
detached from the login keychain session.
- R17 (daemon auth) recorded and closed for the supported setup: creds are
macOS Keychain-only; the user's login-session fn daemon has keychain access
(the existing claude -p provider authenticates there), so the bridge does too.
- U10: thread an optional mcpServers list through the ACP runtime contract.
newAcpSession now forwards it (was hardcoded []); AgentRuntimeOptions (engine
+ plugin-local copy) gains the field; defaults to [] to preserve Route B's
read-only ask posture. Tool calls still route through the U5 permission floor.
Plugin typechecks clean; provider-session tests 12/12 (incl. 2 new forwarding
tests). U11-U13 (provider transport swap, picker/auth, workflow verify) remain.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com >
2026-06-15 05:56:47 -07:00
gsxdsm
bc6dfd386e
FN-6478: surface paused workflow graph failures
...
Surface stranded paused workflow exits as actionable executor failures.
- Treat paused or aborted graph exits as benign only while the live task remains in-progress.
- Preserve terminal/review lifecycle state while recording operator-actionable failure evidence for advanced columns.
- Cover user-paused, pause-aborted, existing-failure, in-progress, in-review, todo, and done column recovery paths.
- Document the workflow lifecycle invariant and add a patch changeset.
Files changed:
.changeset/fn-6478-paused-workflow-executions.md | 5 +
docs/architecture.md | 1 +
.../engine/src/__tests__/executor-recovery.test.ts | 283 +++++++++++++++++++++
packages/engine/src/executor.ts | 30 ++-
4 files changed, 315 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-6478
Fusion-Task-Lineage: 219d8612-6604-4dbc-9a3a-a1c7837419c1
2026-06-15 02:30:41 -07:00
gsxdsm
a9815fb1ff
FN-6457: add ACP ask runner and bundled Claude bridge setup
...
Route ACP-backed planning and validation through a read-only ask-once runner with a pinned Claude bridge foundation.
- Add askAcpOnce for single-turn ACP sessions with timeout handling, JSON recovery, clean stop validation, and disposal.
- Refactor validation seams to use ACP runtime prompts and require structured pass verdicts.
- Resolve the Claude ACP bridge from the plugin bundle and add setup checks for identity, environment, probing, and auth readiness.
- Document the ACP Route B plan and update tests for validator, session, runtime, and plugin setup behavior.
Files changed:
CONCEPTS.md | 6 +
docs/acp-contract.md | 36 ++
.../2026-06-14-001-feat-claude-acp-runtime-plan.md | 465 +++++++++++++++++++++
.../engine/src/__tests__/cli-agent-ask.test.ts | 104 +++++
.../src/__tests__/cli-agent-validator.test.ts | 137 +++---
.../src/__tests__/interactive-ai-session.test.ts | 96 +++--
packages/engine/src/agent-runtime.ts | 6 +-
packages/engine/src/cli-agent-ask.ts | 120 ++++++
packages/engine/src/cli-agent-validator.ts | 65 ++-
.../cli-agent/__tests__/one-shot-session.test.ts | 16 +-
packages/engine/src/cli-agent/one-shot-session.ts | 17 +-
packages/engine/src/index.ts | 8 +-
packages/engine/src/interactive-ai-session.ts | 33 +-
plugins/fusion-plugin-acp-runtime/AGENTS.md | 14 +
plugins/fusion-plugin-acp-runtime/CHANGELOG.md | 6 +
plugins/fusion-plugin-acp-runtime/README.md | 13 +-
plugins/fusion-plugin-acp-runtime/package.json | 3 +-
.../src/__tests__/index.test.ts | 51 ++-
.../src/__tests__/process-manager.test.ts | 32 +-
.../src/__tests__/runtime-adapter.test.ts | 4 +-
.../src/__tests__/setup.test.ts | 71 ++++
plugins/fusion-plugin-acp-runtime/src/cli-spawn.ts | 95 ++++-
plugins/fusion-plugin-acp-runtime/src/index.ts | 16 +-
.../src/process-manager.ts | 26 +-
.../src/runtime-adapter.ts | 11 +-
plugins/fusion-plugin-acp-runtime/src/setup.ts | 104 +++++
plugins/fusion-plugin-acp-runtime/src/types.ts | 6 +-
pnpm-lock.yaml | 139 ++++--
28 files changed, 1502 insertions(+), 198 deletions(-)
Fusion-Task-Id: FN-6457
Fusion-Task-Lineage: a3364ed7-cb28-4a2b-b898-6ccd0d95fb92
2026-06-15 02:30:41 -07:00
gsxdsm
fee0178b4f
FN-6461: block incomplete no-commits no-op finalization
...
Add a shared no-op finalize guard so no-commits tasks with mostly incomplete steps return to todo instead of silently completing.
- Add core step-evidence evaluation for no-commits no-op finalization.
- Apply the guard across AI empty merge, early empty-own-diff, legacy no-op classifier, direct no-op, and self-healing finalize lanes.
- Emit run-audit/log evidence and preserve progress when demoting blocked tasks.
- Cover guard behavior with core, merger, AI merge, real-git, and self-healing tests.
- Document the finalize integrity invariant and add a patch changeset.
Files changed:
.changeset/fn-6461-no-commits-finalize-guard.md | 5 +
docs/architecture.md | 2 +
.../__tests__/no-commits-finalize-guard.test.ts | 58 +++++++
packages/core/src/index.ts | 2 +
packages/core/src/no-commits-finalize-guard.ts | 42 +++++
packages/engine/src/__tests__/merger-ai.test.ts | 59 +++++++
.../merger-finalize-unproven.real-git.test.ts | 176 +++++++++++++++++++++
packages/engine/src/__tests__/self-healing.test.ts | 125 +++++++++++++++
packages/engine/src/merger-ai.ts | 45 ++++++
packages/engine/src/merger.ts | 130 +++++++++++++++
packages/engine/src/run-audit.ts | 6 +
packages/engine/src/self-healing.ts | 41 ++++-
12 files changed, 689 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6461
Fusion-Task-Lineage: 36647768-42da-414a-9304-d8e0ed61b99c
2026-06-15 02:29:08 -07:00
gsxdsm
dc4c2b2204
FN-6453: clean up AI-merge worktrees after setup failures
...
Ensure AI-merge clean-room directories are cleaned up even when setup fails before worktree registration.
- Move clean-room directory creation inside the cleanup guard so terminal setup failures can remove it.
- Skip cleanup only when no merge root was ever created, while still unregistering any registered paths.
- Add regression coverage for active-session registration failure after mkdtemp and before git worktree add.
Files changed:
.../ai-merge-worktree-cleanup.test.ts | 31 ++++++++++++++++++++++
packages/engine/src/merger-ai.ts | 21 ++++++++++-----
2 files changed, 45 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6453
Fusion-Task-Lineage: 364b329b-c3e7-4902-8ca8-673360b0d9ac
2026-06-15 02:29:08 -07:00
gsxdsm
1815b87022
Merge pull request #1678 from plarson/fix/mission-stale-feature-repair
...
fix(engine): retriage stale mission feature links
2026-06-15 16:51:41 +08:00
gsxdsm
f80b301af2
chore(release): v0.43.1
...
Version bump via changesets.
2026-06-14 22:43:49 -07:00
Phil Larson
283f689d8a
fix(engine): retriage stale mission feature links
2026-06-14 19:26:55 -07:00
gsxdsm
4f7b3ac78f
FN-6439: clear stale near-duplicate flags
...
Clear near-duplicate decisions when their canonical task is no longer active.
- Add a shared canonical activity helper for near-duplicate detection.
- Clear stale persisted near-duplicate metadata when canonical tasks are done, archived, or deleted.
- Prevent triage and dashboard surfaces from presenting duplicate decisions for inactive canonicals.
- Cover stale-flag cleanup and hidden dashboard affordances with regression tests.
Files changed:
docs/task-management.md | 4 +-
.../near-duplicate-stale-flag-clear.test.ts | 105 +++++++++++++++++++++
packages/core/src/__tests__/near-duplicate.test.ts | 19 +++-
packages/core/src/index.ts | 2 +
packages/core/src/near-duplicate-canonical.ts | 25 +++++
packages/core/src/near-duplicate.ts | 3 +
packages/core/src/store.ts | 102 +++++++++++++++++++-
packages/dashboard/app/App.tsx | 7 +-
packages/dashboard/app/components/Column.tsx | 10 ++
packages/dashboard/app/components/TaskCard.tsx | 12 ++-
.../dashboard/app/components/TaskDetailModal.tsx | 12 ++-
packages/dashboard/app/components/WorktreeGroup.tsx | 30 +++++-
.../app/components/__tests__/TaskCard.test.tsx | 28 ++++++
.../__tests__/TaskDetailModal.rendering.test.tsx | 26 +++++
.../near-duplicate-intake.test.ts | 24 +++++
packages/engine/src/triage.ts | 10 ++
16 files changed, 411 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-6439
Fusion-Task-Lineage: e57b80e8-36aa-4b96-ad13-53b5a431477d
2026-06-14 15:29:35 -07:00
gsxdsm
93b2288d37
FN-6433: rescue non-CLI quarantined tests
...
Rescue and ratchet non-CLI quarantine state across engine, core, and dashboard suites.
- Empty the core, dashboard, and engine quarantine exclude arrays after proving rescued suites run under package load.
- Replace broad AI-merge active-session registry cleanup with path-scoped unregistering in engine tests.
- Delete the duplicate soft-delete blocker residue suite and clear the quarantine ledger.
- Document the non-CLI quarantine sweep pattern for future rescues.
Files changed:
docs/testing.md | 2 +
packages/core/vitest.config.ts | 10 +-
packages/dashboard/vitest.config.ts | 12 +-
.../merger-ai-cleanup-active-session.test.ts | 20 +++-
.../engine/src/__tests__/merger-ai-cleanup.test.ts | 5 +-
.../soft-delete-blocker-residue.test.ts | 128 ---------------------
packages/engine/vitest.config.ts | 12 +-
scripts/lib/test-quarantine.json | 65 +----------
8 files changed, 40 insertions(+), 214 deletions(-)
Fusion-Task-Id: FN-6433
Fusion-Task-Lineage: 18c37475-e6e1-4358-9350-eca65cf53b68
2026-06-14 15:29:35 -07:00
Phil Larson
93fd220aaf
fix: guard stuck-loop park logging
...
Handle logEntry failures after in-place parking without falling back to executor requeue and tighten the reliability assertion for STUCK_LOOP_EXHAUSTED.
2026-06-14 11:19:11 -07:00
Phil Larson
10ee5954d5
fix: guard stuck-loop in-place park patch failure
2026-06-14 11:09:17 -07:00
Phil Larson
f1ac8d5f6b
fix: address stuck-loop parking review comments
2026-06-14 10:59:21 -07:00
Phil Larson
19eca3d74b
fix(engine): park incomplete stuck-loop exhaustion
...
Preserve incomplete task progress after stuck-kill budget exhaustion while marking the task failed and paused for manual intervention instead of making it scheduler-runnable again.
2026-06-14 10:42:36 -07:00
gsxdsm
4482425d4b
chore(release): v0.43.0
...
Version bump via changesets.
2026-06-14 00:43:13 -07:00
gsxdsm
aa71ace101
fix(auth): refresh expired Claude OAuth tokens
...
Refresh stored Claude OAuth credentials before reporting dashboard auth status or resolving model auth so users do not need to repeatedly re-login after access-token expiry.
Coalesce concurrent refresh attempts, prevent stale refreshes from overwriting newer logins, and route CLI dashboard/serve/daemon/onboard auth wiring through the shared refresh-capable storage.
2026-06-13 23:20:06 -07:00
gsxdsm
be2773b412
FN-6423: fix scheduler capacity accounting
...
Correct scheduler dispatch diagnostics so capacity decisions use consistent non-negative slot counts.
- Clamp excess semaphore releases at zero and warn once when a slot is returned without an active holder.
- Recompute dispatch capacity at each queue decision, including tasks started earlier in the same scheduler tick.
- Update scheduler and semaphore tests for true binding gates, non-negative diagnostics, and workflow-step env stability.
- Add a patch changeset for the scheduler capacity fix.
Files changed:
.changeset/fn-6423-scheduler-capacity.md | 5 +
packages/engine/src/__tests__/concurrency.test.ts | 32 ++++++
.../src/__tests__/executor-step-session.test.ts | 10 +-
packages/engine/src/__tests__/scheduler.test.ts | 122 ++++++++++++++++++++-
packages/engine/src/concurrency.ts | 29 ++++-
packages/engine/src/scheduler.ts | 117 ++++++++++----------
6 files changed, 248 insertions(+), 67 deletions(-)
Fusion-Task-Id: FN-6423
Fusion-Task-Lineage: a6b2e668-a822-46e9-9cd8-ac267fbde804
2026-06-13 21:23:39 -07:00
gsxdsm
b1ba87e599
FN-6414: preserve built-in Z.ai models after extensions
...
Keep GLM-5.2 visible when user Z.ai extensions replace the provider registration.
- Add shared helpers to clone and register the built-in Z.ai provider safely.
- Re-merge missing built-in Z.ai models after extension provider registration in daemon, serve, dashboard, and pi flows.
- Cover provider replacement behavior in core and dashboard model route tests, and document the extension-preserving behavior.
Files changed:
.changeset/FN-6414-glm-5-2-visible.md | 5 ++
docs/settings-reference.md | 2 +-
packages/cli/src/commands/daemon.ts | 12 +--
packages/cli/src/commands/dashboard.ts | 12 +--
packages/cli/src/commands/serve.ts | 12 +--
packages/core/src/__tests__/zai-provider.test.ts | 33 +++++++-
packages/core/src/index.ts | 7 +-
packages/core/src/zai-provider.ts | 93 +++++++++++++++++++++
...register-model-routes-zai-real-registry.test.ts | 97 ++++++++++++++++++++++
packages/engine/src/pi.ts | 12 +--
10 files changed, 250 insertions(+), 35 deletions(-)
Fusion-Task-Id: FN-6414
Fusion-Task-Lineage: f0990da2-968d-4782-8c00-fbc350d6954f
2026-06-13 21:17:20 -07:00
gsxdsm
7b839069b5
FN-6420: run dependency sync in AI merge worktrees
...
Run configured or inferred dependency installs before AI merge verification uses the clean-room worktree.
- Add shared dependency-sync helpers with install marker caching for inferred lockfile installs.
- Run dependency sync during AI clean-room merges and audit/log the command, skip reason, and duration.
- Reuse the helper from merger paths while documenting the new behavior and covering install success/failure cases.
Files changed:
.changeset/fn-6420-ai-merge-dependency-sync.md | 5 +
docs/architecture.md | 2 +-
docs/settings-reference.md | 2 +-
.../src/__tests__/executor-step-session.test.ts | 5 +-
.../merger-ai-dependency-install.slow.test.ts | 269 +++++++++++++++++++++
packages/engine/src/merge-dependency-sync.ts | 144 +++++++++++
packages/engine/src/merger-ai.ts | 31 +++
packages/engine/src/merger.ts | 120 +++------
packages/engine/src/run-audit.ts | 1 +
9 files changed, 484 insertions(+), 95 deletions(-)
Fusion-Task-Id: FN-6420
Fusion-Task-Lineage: 49353cb6-4953-4670-b620-a90331f048dc
2026-06-13 21:09:12 -07:00
gsxdsm
821a8fb936
Merge pull request #1672 from Runfusion/feature/ce-workflow-integration
...
feat: make the compound-engineering workflow run the CE way end-to-end
2026-06-13 16:36:57 -07:00
gsxdsm
9149121bb6
FN-6401: add built-in Z.ai GLM-5.2 support
...
Add Z.ai's built-in provider registration so GLM-5.2 is selectable across Fusion model settings.
- Define and export a shared Z.ai provider registration with existing GLM models plus GLM-5.2.
- Register the built-in provider for CLI server and engine pi model registries.
- Cover provider availability and CLI auth-provider wrapping with focused tests.
- Document Z.ai model selection and add a minor changeset.
Files changed:
.changeset/FN-6401-glm-5-2.md | 5 +
docs/settings-reference.md | 2 +
packages/cli/src/commands/__tests__/daemon.test.ts | 11 ++
.../cli/src/commands/__tests__/dashboard.test.ts | 13 +++
packages/cli/src/commands/__tests__/serve.test.ts | 11 ++
packages/cli/src/commands/daemon.ts | 8 ++
packages/cli/src/commands/dashboard.ts | 8 ++
packages/cli/src/commands/serve.ts | 8 ++
packages/core/src/__tests__/zai-provider.test.ts | 48 ++++++++
packages/core/src/index.ts | 2 +
packages/core/src/zai-provider.ts | 125 +++++++++++++++++++++
.../src/__tests__/pi-create-fn-agent.test.ts | 5 +-
packages/engine/src/pi.ts | 20 +++-
13 files changed, 264 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6401
Fusion-Task-Lineage: e1f7a90d-0614-4d9f-826f-015605a08baa
2026-06-13 16:30:29 -07:00