Record stepless built-in workflow defaults so zero-step selections survive task creation.\n\n- Return an explicit workflow selection for built-in workflows that compile to zero steps.\n- Cover both normal and reserved-id task creation for coding and interpreter-deferred stepwise defaults.\n- Add a patch changeset for the published Fusion package.\n\nFiles changed:\n .changeset/FN-6335-zero-step-workflow-defaults.md | 5 +++++\n packages/core/src/__tests__/builtin-workflows.test.ts | 14 ++++++++++++++\n packages/core/src/store.ts | 4 +++-\n 3 files changed, 22 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6335
Fusion-Task-Lineage: 521ef05d-bef7-4d26-9f6a-592363f522d1
Rescues the database recovery corruption test by reducing its fixture size and removing its quarantine.
- Reduce recovery test fixture rows so sqlite3 .recover is not overfed while still corrupting a B-tree page.
- Re-enable packages/core/src/__tests__/db.test.ts in the core Vitest config.
- Remove the db recovery test entry from the quarantine ledger.
Files changed:
packages/core/src/__tests__/db.test.ts | 5 +++--
packages/core/vitest.config.ts | 1 -
scripts/lib/test-quarantine.json | 5 -----
3 files changed, 3 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-6334
Fusion-Task-Lineage: c4555976-fe98-4f25-a1b5-e70bfd991b16
Classify the archive FTS churn and merge-queue hook timeouts as deterministic test-cost fixes instead of quarantines.
- Reduce the archive FTS churn fixture while preserving rebuild shrinkage and search coverage.
- Use in-memory TaskStore setup for merge-queue cases that do not require disk persistence.
- Keep disk-backed coverage for legacy migration and competing-store lease arbitration.
- Verification: targeted archive FTS + merge-queue run passed in 7.47s versus 27.69s before the fix.
Files changed:
.../core/src/__tests__/archive-db-fts-maintenance.test.ts | 6 +++---
packages/core/src/__tests__/store-merge-queue.test.ts | 15 ++++++++++-----
2 files changed, 13 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-6325
Fusion-Task-Lineage: a6191c99-f7f1-4766-9e01-ccc3f0673bcd
Reconcile the FN-352 no-commit coordination guard skip with main's
independently-landed FN-424 work. Both branches added a no_commits
guard bypass at the same fn_task_done call site:
- FN-352 (this branch): getNoCommitEligibilityReason(task) covering
Review Level 1 coordination prompts with board-only scope and
explicit no-source intent (e.g. "Do not change product source").
- FN-424 (main): evaluatePromptDerivedNoCommitEligibility(...) plus
non-blocking audit logging of the skip.
Their prompt phrase-matching differs, so neither alone satisfies the
merged test file. Resolved by OR-ing both eligibility checks and
wrapping the skip in main's audit-logging block. Both helpers still
refuse the contradictory implementation+coordination prompt.
All 18 executor-task-done-invariant tests pass; engine typecheck clean.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Quarantine the flaky deferred-hook title summarization coverage while preserving focused store-create coverage.
- Extract the deferred task-created hook summarization test into its own file.
- Exclude the extracted test file from the core Vitest suite.
- Record the flake investigation and quarantine rationale in the test quarantine ledger.
Files changed:
.../store-create-summarize-deferred-hook.test.ts | 67 ++++++++++++++++++++++
packages/core/src/__tests__/store-create.test.ts | 44 --------------
packages/core/vitest.config.ts | 1 +
scripts/lib/test-quarantine.json | 5 ++
4 files changed, 73 insertions(+), 44 deletions(-)
Fusion-Task-Id: FN-6326
Fusion-Task-Lineage: a37189b3-b88b-483f-b2bf-471fde806b35
Stabilize the checkout leasing AgentStore regression test setup.
- Recreate the nested checkout-leasing AgentStore with an in-memory database after replacing the TaskStore.
- Keep the disk-backed TaskStore for persistence assertions while avoiding a shared disk-backed AgentStore database lifecycle.
- Let the top-level cleanup own AgentStore closure to avoid double-closing in the nested hook.
Files changed:
packages/core/src/__tests__/agent-store.test.ts | 7 +++++--
1 file changed, 5 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6312
Fusion-Task-Lineage: a7f95ba4-fe8b-4367-9f65-6696b1a3867a
Resolve conflicts from main's FN-6232 single-source triage prompt refactor:
- Drop the inline FAST_TRIAGE_SYSTEM_PROMPT const removed by main; the fast
triage prompt now lives in agent-prompts.ts (planning-fast seam).
- Migrate the PR's no-commit/operational-routing heuristic edits into the
fast block of agent-prompts.ts (standard block already carried them).
- Point triage tests at FAST_PLANNING_PROMPT/TRIAGE_POLICY_PROMPT instead of
the removed const.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Close plugin-store migration test database handles so migration cleanup does not hang.
- Close legacy project database handles after seeding plugin rows.
- Close central and local database handles after idempotency assertions.
- Preserve the migration coverage while preventing open handles from delaying test teardown.
Files changed:
packages/core/src/__tests__/plugin-store.test.ts | 86 ++++++++++++++----------
1 file changed, 49 insertions(+), 37 deletions(-)
Fusion-Task-Id: FN-6317
Fusion-Task-Lineage: 36f6a1da-6ec8-4dae-89a4-6caf1e566def
Stabilize the process supervisor cascade teardown assertion without relying on the lifetime timer.
- Disable maxLifetimeMs for the explicit cascade teardown test so it cannot race the test's wait window.
- Assert the supervised child exits from SIGTERM and the supervisor registry is cleaned up.
- Keep the grandchild termination assertion explicit after cascade cleanup.
Files changed:
packages/core/src/__tests__/process-supervisor.test.ts | 10 ++++++++--
1 file changed, 8 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-6293
Fusion-Task-Lineage: 56fbedee-57e3-4b33-b84e-03fc1a7b7212
Title summarization now accepts oversized task descriptions while bounding the model prompt.
- Remove the 2000-character validation ceiling for summarize-title requests.
- Truncate long descriptions only at model-input time with a dedicated exported cap.
- Update route/API docs and tests for long-description behavior.
- Add a patch changeset for the published Fusion package.
Files changed:
.changeset/fn-6305-title-summarize-any-length.md | 5 +++
packages/core/src/__tests__/ai-summarize.test.ts | 43 ++++++++++++++++++----
packages/core/src/ai-summarize.ts | 34 +++++++++++------
packages/core/src/index.ts | 1 +
packages/dashboard/app/api/legacy.ts | 2 +-
.../src/__tests__/routes-planning.test.ts | 25 +++++++++++++
packages/dashboard/src/routes.ts | 2 +-
7 files changed, 92 insertions(+), 20 deletions(-)
Fusion-Task-Id: FN-6305
Fusion-Task-Lineage: 69a83173-ac85-489f-b4cc-d1a70b6d25eb
Move frontend UX criteria out of triage self-instructions and into deterministic workflow policy.
- Add a shared frontend UX policy helper that matches frontend file scopes and injects the byte-equivalent checklist idempotently.
- Apply the policy during triage finalization and persist the updated PROMPT.md when applicable.
- Replace the legacy prompt-based injection instructions with a pointer to the deterministic policy.
- Cover path matching, insertion behavior, and checklist parity with focused core tests.
- Add a minor changeset for the published Fusion package.
Files changed:
.changeset/fn-6237-frontend-ux-policy.md | 5 +
.../core/src/__tests__/frontend-ux-policy.test.ts | 119 +++++++++++++++++
packages/core/src/agent-prompts.ts | 29 +---
packages/core/src/frontend-ux-policy.ts | 148 +++++++++++++++++++++
packages/core/src/index.ts | 1 +
packages/engine/src/triage.ts | 19 ++-
6 files changed, 291 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-6237
Fusion-Task-Lineage: 7ac95064-9ec6-4760-8609-20c35075aca1
Use per-invocation Vitest worker roots to keep compound-engineering tests from timing out on stale temp fixtures.
- Allocate a fresh FUSION_TEST_WORKER_ROOT during Vitest global setup and remove it during teardown.
- Preserve per-worker fallback root creation when global setup is not available.
- Clean compound-engineering harness project roots on close and cover the setup invariants with regression tests.
Files changed:
packages/core/src/__test-utils__/vitest-setup.ts | 20 +++++++---
.../core/src/__test-utils__/vitest-teardown.ts | 38 +++++++++++--------
.../src/__tests__/_harness.ts | 7 +++-
.../src/__tests__/setup-invariant.test.ts | 43 ++++++++++++++++++++++
4 files changed, 85 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-6282
Fusion-Task-Lineage: 8b842dd0-4f51-44de-b2db-8e8bfa97239c
FN-6035 modeled the merge lifecycle as a branching subgraph of merge/
retry/branch-group primitives instead of a single `merge` seam, but the
linear workflow compiler still tried to lower those nodes and rejected
merge-gate's fan-out — so task creation failed with "node 'merge-gate'
branches into 2 edges — graphs with branches require the workflow
interpreter (deferred)".
Treat the merge-region primitive kinds (merge-gate, merge-attempt,
manual-merge-hold, retry-backoff, recovery-router,
branch-group-member-integration, branch-group-promotion, pr-merge) as an
engine-owned terminal boundary: exempt from the single-edge linearity
rule and never lowered to a step. Linear-prefix workflows compile to
their pre-merge step list again.
Also refresh the stale builtin-workflows assertions that referenced the
removed `merge` seam node.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Restore Pi-upgraded workspaces to keep Fusion resources accessible and recover title generation when configured models go stale.
- Mark read-only Fusion/Pi provider settings views as project-trusted so extension loading keeps working after Pi upgrades.
- Retry task title summarization with automatic model resolution when the configured provider model is missing from the Pi registry.
- Cover provider settings trust behavior and stale summarizer fallback paths with regression tests.
- Document the read-only settings trust contract and add a patch changeset.
Files changed:
.changeset/fn-6218-pi-upgrade-regressions.md | 5 +
docs/settings-reference.md | 2 +
docs/task-management.md | 2 +
.../commands/__tests__/provider-settings.test.ts | 16 ++++
packages/cli/src/commands/provider-settings.ts | 5 +
packages/core/src/__tests__/ai-summarize.test.ts | 102 +++++++++++++++++++++
packages/core/src/ai-summarize.ts | 85 ++++++++++++-----
.../src/__tests__/pi-create-fn-agent.test.ts | 32 +++++++
packages/engine/src/pi.ts | 7 +-
9 files changed, 233 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-6218
Fusion-Task-Lineage: 3d6aca32-a56a-43a0-a57b-8e6abc839ce9
Adjust workflow-definition-store expectations to include the built-in PR fragment.
- expect builtin:pr-workflow in fragment-filtered workflow definition results
- allow built-in workflow entries to be either workflow or fragment kinds
- verify fragment filtering and cache regression coverage include the PR lifecycle built-in
Files changed:
packages/core/src/__tests__/workflow-definition-store.test.ts | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6176
Fusion-Task-Lineage: fca73dec-060c-4935-9f03-67299d99983f