Phil Larson
81b1860f95
fix(ci): correct future FNXC stamps ( #3440 )
...
## Summary
- replaces newly added future-dated FNXC metadata with the actual UTC
change time
- tightens the FNXC future-date baseline to zero known exceptions
## Test plan
- `pnpm check:fnxc-future-dates`
- `pnpm check:lifecycle-columns`
- `pnpm check:changesets`
- `pnpm --filter @runfusion/fusion exec vitest run
src/__tests__/staged-plugin-core-imports.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/engine typecheck`
- `pnpm lint`
2026-08-15 17:16:05 -07:00
gsxdsm
c0e568bf78
FN-9100: fix staged Cursor core imports in CLI builds
...
Ensure staged plugin core runtime imports resolve reliably in packaged CLI builds.
- Export Cursor runtime core helpers from the CLI runtime shim.
- Guard staged plugin imports against undeclared or unavailable core exports.
- Add Cursor bundle coverage and document the focused packaging test.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-9100-staged-plugin-core-shim.md | 7 +
docs/testing.md | 1 +
.../__tests__/plugin-sdk-core-runtime-shim.test.ts | 40 +++-
.../__tests__/staged-plugin-core-imports.test.ts | 221 +++++++++++++++++++++
packages/cli/src/plugin-sdk-core-runtime-shim.mjs | 10 +-
5 files changed, 272 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-9100
Fusion-Task-Lineage: 4c25ef74-065d-4e5a-86f2-e6f9a22500b3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 12:04:30 -07:00
gsxdsm
c7779e44ac
FN-9055: guard archive disposal of live workspace worktrees
...
Prevent archive cleanup from removing worktrees that still belong to live tasks.
- Add shared archive liveness evaluation and transactional refusal guards.
- Require CLI and extension archive operations to refuse live tasks unless a human uses --force.
- Protect baseline archive worktree disposal and cover CLI, core, and engine paths with tests.
Files changed:
.changeset/fn-9055-archive-live-worktree-guard.md | 7 ++
docs/cli-reference.md | 4 +-
docs/task-management.md | 4 +-
.../extension-task-archive-live-guard.test.ts | 82 +++++++++++++++++++
packages/cli/src/bin.ts | 6 +-
packages/cli/src/commands/__tests__/task.test.ts | 66 ++++++++++++++-
packages/cli/src/commands/task.ts | 49 +++++++++---
packages/cli/src/extension.ts | 25 ++++--
.../src/__tests__/archive-live-task-guard.test.ts | 70 ++++++++++++++++
.../postgres/archive-live-task-fence.pg.test.ts | 69 ++++++++++++++++
.../src/__tests__/task-archive-liveness.test.ts | 19 +++++
packages/core/src/index.ts | 10 +++
packages/core/src/store.ts | 4 +-
.../core/src/task-store/archive-lifecycle-2.ts | 27 +++++--
packages/core/src/task-store/archive-lifecycle.ts | 20 ++---
.../src/task-store/async/async-archive-lineage.ts | 17 +++-
packages/core/src/tasks/task-archive-liveness.ts | 56 +++++++++++++
...chive-baseline-disposer-live-task-guard.test.ts | 93 ++++++++++++++++++++++
.../healing/archive-worktree-disposer-install.ts | 15 +++-
19 files changed, 592 insertions(+), 51 deletions(-)
Fusion-Task-Id: FN-9055
Fusion-Task-Lineage: 08644626-cc61-4854-abb9-5b415ddc9491
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-15 00:35:12 -07:00
gsxdsm
9ba6a67695
fix: create CLI GitHub tracking issues synchronously before process exit
...
The task-created hook (GitHub tracking issue creation) was deferred behind
the fire-and-forget auto-title-summarize chain whenever autoSummarizeTitles
is on and the task has a long description and no title — i.e. for every
'fn task create'. The short-lived CLI process closed the store and exited
before the deferred chain ran, so tasks ended up with
githubTracking.enabled=true but no issue (observed on FN-9045..FN-9061).
fn task create now suppresses the deferred hook and calls
createTrackingIssueForTask directly after create, printing the linked
issue; exports that helper from @fusion/dashboard.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-14 21:55:49 -07:00
gsxdsm
41d415fe70
FN-9051: report blocked workspace finalization
...
Prevent workspace merge entry points from treating an unfinalized task as a successful merge.
- Add a typed blocked-finalization result and engine handling that avoids retries, failure parking, and branch promotion.
- Return blocked outcomes through dashboard and CLI merge surfaces.
- Cover blocked finalization behavior and publish a patch changeset.
Files changed:
.changeset/fn-9051-workspace-blocked-finalize.md | 7 ++
packages/cli/src/commands/__tests__/task.test.ts | 38 ++++++++
packages/cli/src/commands/dashboard.ts | 22 +++--
packages/cli/src/commands/task.ts | 19 ++--
.../engine/src/__tests__/project-engine.test.ts | 105 ++++++++++++++++++++-
.../engine/src/__tests__/workspace-merger.test.ts | 1 +
packages/engine/src/index.ts | 1 +
packages/engine/src/merge/merger-ai.ts | 28 +++++-
packages/engine/src/project-engine.ts | 42 ++++++++-
9 files changed, 240 insertions(+), 23 deletions(-)
Fusion-Task-Id: FN-9051
Fusion-Task-Lineage: 89d5fcbb-1a00-4429-87ea-fc3e34db2706
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-14 21:51:45 -07:00
gsxdsm
52a28d39ff
feat: add per-task GitHub tracking overrides to task create (fn_task_create + CLI)
...
fn_task_create gains github_tracking/github_repo params and fn task create
gains --github/--no-github/--github-repo flags, resolved through
resolveTaskGithubTracking (task > project > global). CLI create now also
honors the project/global tracking-enabled default it previously ignored;
explicit disables persist enabled:false so later default flips cannot
re-enable a task.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com >
2026-08-14 21:12:15 -07:00
gsxdsm
66b1c046c5
test: assert Memory Keeper in fresh-project built-in agent listings
...
Fusion-Task-Id: automation
FN-8932 seeds the durable Memory Keeper alongside the four routed workflow principals, so fn_list_agents and fn_agent_org_chart now enumerate five built-in agents on a fresh project. Update the two extension.test.ts assertions from count 4 to 5 and assert Memory Keeper is present.
2026-08-14 17:04:07 -07:00
gsxdsm
9d31396f7a
FN-9031: strengthen computer snapshot action fencing
...
Serialize computer snapshots and actions through a durable app-scoped fence.
- Hold the fence from snapshot acquisition or element resolution through OS action consumption.
- Report snapshot consumption only when the expected latest pointer was invalidated.
- Heartbeat and token-check directory locks for safe crash recovery and add command-fence coverage.
Files changed:
.../commands/__tests__/computer-commands.test.ts | 26 +++++++++-
.../__tests__/computer-snapshot-index.test.ts | 2 +-
packages/cli/src/commands/computer.ts | 37 ++++++++-----
.../cli/src/commands/computer/snapshot-store.ts | 60 ++++++++++++++++------
4 files changed, 93 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-9031
Fusion-Task-Lineage: f196b7ca-ce3f-4a50-98d2-d6ac8bf184ac
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 17:44:02 -07:00
gsxdsm
2dcead4c8f
FN-9035: prevent static computer commands in shipped skills
...
Keep bundled computer-use guidance limited to runtime discovery so command syntax cannot drift.
- Scan all shipped skill markdown files, including plugin skills
- Reject static `fn computer` commands outside the computer-use discovery stub
- Assert the discovery stub exposes only its supported JSON probes
Files changed:
packages/cli/src/commands/__tests__/computer-use-skill.test.ts | 50 ++++++++++++++++++++--
1 file changed, 47 insertions(+), 3 deletions(-)
Fusion-Task-Id: FN-9035
Fusion-Task-Lineage: 5049fd29-1b3b-4968-b09e-1bb7be9d52ff
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 17:01:39 -07:00
gsxdsm
1788dc0506
FN-9033: harden macOS computer-use permission handling
...
Treat missing osascript as an explicit automation denial while preserving replay failures.
- Track missing osascript separately from indeterminate permission probes.
- Block all macOS automation paths before execution when osascript is unavailable.
- Preserve replay permission and timeout errors, mapping only stale locators to element errors.
- Add coverage for replay failures and missing-binary enforcement.
Files changed:
.../__tests__/computer-adapter-registry.test.ts | 87 +++++++++++++++++++++-
.../commands/__tests__/computer-commands.test.ts | 29 +++++++-
.../cli/src/commands/computer/adapter-macos.ts | 52 +++++++------
3 files changed, 142 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-9033
Fusion-Task-Lineage: 48e77cc5-cd71-49f1-a163-13d68a81d1d4
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 16:55:23 -07:00
gsxdsm
7673f2e839
FN-9031: enforce snapshot consumption after computer actions
...
Computer-use actions now consume the captured app snapshot and require a fresh state capture before another element-targeted action.
- Add app-scoped, serialized snapshot-pointer consumption with stale-state diagnostics.
- Mark successful action results as consuming their snapshot and cover action/replay behavior.
- Document the enforced snapshot → act → snapshot loop and add a CLI changeset.
Files changed:
.../fn-9031-computer-use-snapshot-consumption.md | 7 ++
docs/cli-reference.md | 2 +-
docs/computer-use.md | 11 +--
.../commands/__tests__/computer-commands.test.ts | 88 ++++++++++++++++++++--
.../commands/__tests__/computer-contract.test.ts | 7 +-
.../__tests__/computer-snapshot-index.test.ts | 52 ++++++++++++-
.../commands/__tests__/computer-use-guide.test.ts | 4 +
packages/cli/src/commands/computer.ts | 37 ++++++---
.../cli/src/commands/computer/adapter-macos.ts | 4 +-
packages/cli/src/commands/computer/contract.ts | 17 ++++-
packages/cli/src/commands/computer/guide.ts | 4 +-
.../cli/src/commands/computer/snapshot-store.ts | 79 +++++++++++++++++--
12 files changed, 272 insertions(+), 40 deletions(-)
Fusion-Task-Id: FN-9031
Fusion-Task-Lineage: f196b7ca-ce3f-4a50-98d2-d6ac8bf184ac
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 16:31:44 -07:00
gsxdsm
d3e51f566e
FN-9030: resolve computer state at project root
...
Resolve computer-use state once per invocation at the containing Fusion project root.
- Add a state-root resolver shared by computer command adapters and snapshot storage.
- Preserve capture and replay snapshots across working directories while isolating projects.
- Cover root resolution and cross-directory state behavior, and document the storage contract.
- Add a patch changeset for the CLI fix.
Files changed:
.../fn-9030-computer-use-project-local-state.md | 7 ++
docs/computer-use.md | 2 +-
.../commands/__tests__/computer-commands.test.ts | 76 ++++++++++++++++++++++
.../__tests__/computer-snapshot-index.test.ts | 14 ++++
.../commands/__tests__/computer-state-root.test.ts | 49 ++++++++++++++
packages/cli/src/commands/computer.ts | 9 ++-
packages/cli/src/commands/computer/state-root.ts | 18 +++++
7 files changed, 171 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-9030
Fusion-Task-Lineage: a0cb48ee-fd7f-4966-9930-cde273027eca
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-13 16:08:52 -07:00
gsxdsm
8b00bab0b0
chore(release): v0.76.0
...
Version bump via changesets.
2026-08-13 01:41:54 -07:00
gsxdsm
a1ea7fe562
chore(release): v0.76.0-beta.3
...
Version bump via changesets.
2026-08-13 01:34:18 -07:00
gsxdsm
c7451ec6b2
chore(release): v0.76.0-beta.2
...
Version bump via changesets.
2026-08-12 17:37:09 -07:00
gsxdsm
8699ff41e2
FN-9016: add manager evaluation tools
...
Enable managers to review report evaluations and record coaching follow-ups.
- Add manager-scoped evaluation read and follow-up extension tools.
- Enforce management-subtree access through action gating and regression tests.
- Document the tool surface and add a minor release changeset.
Files changed:
.changeset/fn-9016-manager-eval-tools.md | 7 +
docs/agent-tool-surface-full-loop.md | 4 +-
docs/agents.md | 8 +-
packages/cli/skill/fusion/SKILL.md | 2 +-
.../cli/skill/fusion/references/extension-tools.md | 22 ++
.../skill/fusion/references/fusion-capabilities.md | 2 +
.../__tests__/extension-manager-eval-tools.test.ts | 159 +++++++++++++++
packages/cli/src/extension.ts | 227 +++++++++++++++++++++
.../engine/src/__tests__/agent-action-gate.test.ts | 1 +
.../src/__tests__/gating-classifications.test.ts | 1 +
.../src/__tests__/permanent-agent-gating.test.ts | 1 +
.../engine/src/execution/gating-classifications.ts | 8 +
12 files changed, 438 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-9016
Fusion-Task-Lineage: 1ad7c344-0f3c-4565-aabc-acb51481431d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-12 15:51:22 -07:00
gsxdsm
c4467b0a5b
FN-9007: upgrade Pi runtime to 0.84.1
...
Upgrade the bundled Pi runtime closure to version 0.84.1.
- Pin direct and transitive Pi runtime packages to a coherent 0.84.1 closure.
- Adapt runtime interfaces and test assertions for Pi 0.84.1 behavior.
- Guard the added Pi client, protocol, and telemetry packages in desktop packaging checks.
Files changed:
.changeset/fn-9007-pi-0-84-1.md | 7 +
packages/cli/package.json | 4 +-
packages/cli/src/__tests__/package-config.test.ts | 6 +-
packages/cli/vitest.config.ts | 2 +-
packages/core/package.json | 2 +-
packages/dashboard/package.json | 4 +-
packages/dashboard/src/routes.ts | 6 +-
packages/engine/package.json | 4 +-
packages/engine/src/__tests__/pi.test.ts | 45 ++--
.../src/__tests__/provider-registration.test.ts | 4 +-
packages/engine/src/auth/auth-storage.ts | 20 +-
packages/engine/src/pi.ts | 5 +
packages/pi-claude-cli/package.json | 8 +-
pnpm-lock.yaml | 283 ++++++++++++---------
pnpm-workspace.yaml | 14 +-
.../__tests__/check-pi-versions-pinned.test.mjs | 27 +-
scripts/check-pi-versions-pinned.mjs | 8 +
17 files changed, 279 insertions(+), 170 deletions(-)
Fusion-Task-Id: FN-9007
Fusion-Task-Lineage: 89045e86-d4c8-4fc3-bbf6-5ba38fc786e7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-12 14:07:30 -07:00
gsxdsm
36691e54d2
chore(release): v0.76.0-beta.1
...
Version bump via changesets.
2026-08-12 00:17:27 -07:00
Phil Larson
6cc15fd73d
fix(ci): restore clean-main CLI and lifecycle gates ( #3420 )
...
## Summary
- Complete the isolated `@fusion/core` mock used by the
experiment-finalize extension suite
- Classify three intentional physical/synthetic lifecycle literals
introduced on current main
- Re-record the strict lifecycle census baseline with zero unexamined
guards
## Test plan
- `pnpm --filter @runfusion/fusion exec vitest run
src/__tests__/extension-experiment-finalize.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/core exec vitest run
src/__tests__/task-intake-owner-resolver.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/engine exec vitest run --project engine-default
src/__tests__/mission-feature-sync-lanes.test.ts --silent=passed-only
--reporter=dot`
- `pnpm check:lifecycle-columns`
- `node scripts/check-mock-completeness.mjs`
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
- **Bug Fixes**
- Improved mission reconciliation previews for task links, specification
alignment, and lifecycle updates.
- Prevented stale or superseded validation runs from overwriting current
feature status or ownership.
- Improved blocked-feature diagnostics and archived-task handling across
workflow configurations.
- **Documentation**
- Clarified validation, assignment checks, and mission synchronization
behavior.
- **Tests**
- Expanded coverage for reconciliation previews and validator ownership
scenarios.
- **Chores**
- Updated lifecycle baseline data for known archived-task cases.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-11 10:57:36 -10:00
gsxdsm
25e292d0e6
FN-8954: preserve CLI liveness during startup
...
Ensure CLI startup operations settle before process exit on supported Node runtimes.
- Keep awaited QMD probes and ephemeral port selection ref'd until completion.
- Add CLI process regressions for init persistence and exit code 13.
- Declare the Node 22.4 runtime floor and extend boot smoke coverage.
Files changed:
.changeset/fn-8954-cli-exit-13.md | 7 ++
docs/testing.md | 4 +-
package.json | 3 +
packages/cli/agent-browser.mjs | 6 ++
packages/cli/bin.mjs | 7 ++
packages/cli/package.json | 3 +
packages/cli/src/__tests__/ci-workflow.test.ts | 9 +++
packages/cli/src/__tests__/cli-exit-code.test.ts | 82 ++++++++++++++++++++++
packages/cli/src/__tests__/package-config.test.ts | 12 ++++
packages/cli/src/bin.ts | 6 ++
.../__tests__/postgres/embedded-free-port.test.ts | 37 ++++++++++
packages/core/src/memory/memory-backend.ts | 17 +++--
packages/core/src/postgres/embedded-lifecycle.ts | 16 +++--
scripts/boot-smoke.mjs | 62 +++++++++++-----
14 files changed, 244 insertions(+), 27 deletions(-)
Fusion-Task-Id: FN-8954
Fusion-Task-Lineage: 05303d07-2662-48d5-a442-6d43fa0a4493
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 04:20:33 -07:00
gsxdsm
62979d8796
FN-8985: centralize CLI version resolution
...
Centralize CLI self-version discovery without widening the early boot import graph.
- Reuse one bounded manifest resolver for the CLI binary, updater, and plugin scaffold.
- Add regression coverage for manifest lookup bounds, malformed manifests, and scaffold version fallback.
- Preserve update command test isolation after the core i18n module relocation.
Files changed:
packages/cli/src/__tests__/cli-version.test.ts | 136 +++++++++++++++++++++
.../plugin-scaffold-caret-fallback.test.ts | 91 ++++++++++++++
packages/cli/src/bin.ts | 45 +------
packages/cli/src/cli-version.ts | 51 ++++++++
packages/cli/src/commands/__tests__/update.test.ts | 2 +-
packages/cli/src/commands/plugin-scaffold.ts | 40 +-----
packages/cli/src/commands/update.ts | 37 +-----
7 files changed, 292 insertions(+), 110 deletions(-)
Fusion-Task-Id: FN-8985
Fusion-Task-Lineage: dd95b651-3578-4c5f-957a-5af7b85129d7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 01:51:22 -07:00
gsxdsm
8f6190910d
FN-8971: add mission blocked-status clearing tool
...
Add an operator-only CLI tool for repairing stale mission blocked badges.
- Register and document fn_mission_clear_blocked with PostgreSQL and status-error handling.
- Withhold the repair action from agent principals and deny it in readonly workflow steps.
- Classify the tool consistently across engine permission gates and add coverage.
- Add a minor CLI changeset for the new operator capability.
Files changed:
.changeset/fn-8971-mission-clear-blocked-tool.md | 7 +++
docs/missions.md | 7 ++-
packages/cli/skill/fusion/SKILL.md | 2 +-
.../cli/skill/fusion/references/extension-tools.md | 9 ++++
.../skill/fusion/references/fusion-capabilities.md | 1 +
.../__tests__/extension-permission-gates.test.ts | 26 ++++++++++
packages/cli/src/__tests__/extension.test.ts | 56 +++++++++++++++++++++-
packages/cli/src/extension.ts | 54 +++++++++++++++++++++
.../src/__tests__/agent-mission-tools.test.ts | 5 +-
.../src/__tests__/gating-classifications.test.ts | 8 ++++
.../workflow-step-readonly-allowlist.test.ts | 5 +-
.../engine/src/execution/gating-classifications.ts | 7 +++
12 files changed, 182 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-8971
Fusion-Task-Lineage: 650c13b3-c6c4-4dc5-a0b5-9c71d3b94fc5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 01:45:08 -07:00
gsxdsm
eacd6687bc
FN-8961: add computer-use skill and version-matched guide
...
Ship the computer-use skill across bundled clients and surface its matching guide through the CLI.
- add the computer-use skill, computer command descriptor, and `fn skills get computer-use` guide
- reconcile all shipped Claude skills at project and startup entry points
- cover both skills' reconciliation outcomes and every required call site
Files changed:
.changeset/fn-8961-computer-use-skill.md | 7 +
docs/cli-reference.md | 6 +-
docs/computer-use.md | 8 +
packages/cli/skill/computer-use/SKILL.md | 31 +++
packages/cli/src/__tests__/package-config.test.ts | 20 ++
packages/cli/src/bin.ts | 14 +-
.../__tests__/claude-skills-callsites.test.ts | 64 ++++++
.../src/commands/__tests__/claude-skills.test.ts | 221 ++++++++-------------
.../__tests__/computer-surface-descriptor.test.ts | 108 ++++++++++
.../commands/__tests__/computer-use-guide.test.ts | 36 ++++
.../commands/__tests__/computer-use-skill.test.ts | 20 ++
packages/cli/src/commands/__tests__/daemon.test.ts | 36 +++-
.../__tests__/dashboard-claude-skills.test.ts | 19 ++
packages/cli/src/commands/__tests__/init.test.ts | 48 ++++-
.../cli/src/commands/__tests__/project.test.ts | 38 ++++
packages/cli/src/commands/__tests__/serve.test.ts | 36 +++-
.../commands/__tests__/skill-installation.test.ts | 12 ++
.../cli/src/commands/__tests__/skills-get.test.ts | 67 ++++++
packages/cli/src/commands/claude-skills-runner.ts | 55 ++---
packages/cli/src/commands/claude-skills.ts | 47 +++--
packages/cli/src/commands/computer.ts | 6 +-
packages/cli/src/commands/computer/contract.ts | 52 +++++
packages/cli/src/commands/computer/guide.ts | 62 ++++++
packages/cli/src/commands/init.ts | 4 +-
packages/cli/src/commands/skill-installation.ts | 45 +++--
packages/cli/src/commands/skills.ts | 24 +++
26 files changed, 853 insertions(+), 233 deletions(-)
Fusion-Task-Id: FN-8961
Fusion-Task-Lineage: b6baaebb-bf72-4991-8239-eb9bcf9cbcf1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-11 01:16:59 -07:00
gsxdsm
79502c67a0
FN-8978: fix CLI TypeScript external packaging
...
Keep TypeScript available as a runtime external in the published CLI package.
- Remove the duplicate TypeScript devDependency declaration.
- Assert tsup externals are published runtime dependencies.
- Document the runtime external packaging invariant.
Files changed:
.changeset/fn-8978-typescript-dedup.md | 7 +++++
packages/cli/package.json | 1 -
packages/cli/src/__tests__/package-config.test.ts | 31 +++++++++++++++++++++++
packages/cli/tsup.config.ts | 6 +++++
4 files changed, 44 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-8978
Fusion-Task-Lineage: b9630c4a-73a9-414f-9a78-25c689359509
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 23:04:32 -07:00
gsxdsm
79206c3f31
FN-8977: unify CLI Vitest mock resolution
...
Route CLI test mocks through dashboard and engine runtime imports.
- Anchor pi-coding-agent resolution to the CLI package instance
- Preserve real session exports while overriding runtime dependencies
- Add a regression test and document cross-package mock scoping
Files changed:
docs/testing.md | 6 ++
.../__tests__/extension-permission-gates.test.ts | 10 ++-
.../vitest-cross-package-mock-scope.test.ts | 75 ++++++++++++++++++++++
packages/cli/vitest.config.ts | 12 ++++
4 files changed, 101 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-8977
Fusion-Task-Lineage: a652cdf4-463e-4603-8d71-87db91d0b846
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 22:12:15 -07:00
gsxdsm
1da61f35f7
FN-8960: add macOS computer automation CLI
...
Add a snapshot-backed macOS computer-use surface to the Fusion CLI.
- Register fn computer commands for app state, permission, capability, and UI actions.
- Implement macOS JXA automation with locator replay and persisted snapshot safety checks.
- Document the CLI surface, add contract coverage, and include a release changeset.
Files changed:
.changeset/fn-8960-computer-use-cli.md | 7 +
docs/README.md | 1 +
docs/cli-reference.md | 21 ++
docs/computer-use.md | 156 +++++++++++++
packages/cli/src/bin.ts | 11 +
.../__tests__/computer-adapter-registry.test.ts | 154 ++++++++++++
.../commands/__tests__/computer-commands.test.ts | 71 ++++++
.../commands/__tests__/computer-contract.test.ts | 34 +++
.../__tests__/computer-snapshot-index.test.ts | 87 +++++++
packages/cli/src/commands/computer.ts | 182 +++++++++++++++
.../cli/src/commands/computer/adapter-macos.ts | 211 +++++++++++++++++
.../cli/src/commands/computer/adapter-registry.ts | 42 ++++
.../src/commands/computer/adapter-unsupported.ts | 44 ++++
packages/cli/src/commands/computer/adapter.ts | 97 ++++++++
packages/cli/src/commands/computer/contract.ts | 83 +++++++
packages/cli/src/commands/computer/exec-seam.ts | 61 +++++
.../cli/src/commands/computer/scripts/macos-jxa.ts | 37 +++
.../cli/src/commands/computer/snapshot-store.ts | 257 +++++++++++++++++++++
18 files changed, 1556 insertions(+)
Fusion-Task-Id: FN-8960
Fusion-Task-Lineage: 5870bf69-b751-4879-bf9d-5f5396cc0f55
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 21:56:18 -07:00
gsxdsm
cef07527f6
FN-8948: reconcile mission state from task ground truth
...
Centralize mission and feature state repair around deterministic task lifecycle evidence.
- Add a reusable mission reconciliation authority with task-move, API, tool, and maintenance callers.
- Repair unambiguous title links while preserving terminal, validation, and audit safeguards.
- Route scheduler moves through the authority and reject duplicate feature-title ownership.
- Expose reconcile controls and document the operator workflow.
Files changed:
.changeset/fn-8948-mission-auto-reconcile.md | 7 +
AGENTS.md | 1 +
docs/missions.md | 8 +-
packages/cli/skill/fusion/SKILL.md | 2 +-
.../cli/skill/fusion/references/extension-tools.md | 9 +
.../skill/fusion/references/fusion-capabilities.md | 1 +
.../extension-experiment-finalize.test.ts | 2 +
.../__tests__/extension-gitlab-tracking.test.ts | 2 +
.../cli/src/__tests__/extension-web-fetch.test.ts | 2 +
packages/cli/src/extension.ts | 14 +
packages/dashboard/src/mission-routes.ts | 24 +-
.../src/__tests__/agent-mission-tools.test.ts | 2 +-
.../engine/src/__tests__/mission-autopilot.test.ts | 8 +-
.../src/__tests__/mission-state-reconcile.test.ts | 67 +++++
packages/engine/src/agent-tools.ts | 6 +
.../engine/src/execution/gating-classifications.ts | 1 +
packages/engine/src/index.ts | 6 +
packages/engine/src/missions/index.ts | 8 +-
packages/engine/src/missions/mission-autopilot.ts | 106 +------
.../engine/src/missions/mission-feature-sync.ts | 1 +
.../engine/src/missions/mission-state-reconcile.ts | 169 +++++++++++
packages/engine/src/runtimes/in-process-runtime.ts | 4 +-
packages/engine/src/scheduler.ts | 331 +++++----------------
packages/engine/src/util/run-audit.ts | 2 +
24 files changed, 426 insertions(+), 357 deletions(-)
Fusion-Task-Id: FN-8948
Fusion-Task-Lineage: 0fbccef3-eeac-46d2-b3d8-aca679b3657e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 20:32:26 -07:00
gsxdsm
b82f1a41f3
FN-8947: add repairable mission validation controls
...
Add repairable mission-validation badges with clear and re-run flows.
- Persist repair metadata and audit events for mission validation state changes.
- Expose validation repair through dashboard routes, UI controls, engine tools, and CLI capabilities.
- Add database, API, UI, engine, and extension coverage plus operator documentation.
Files changed: .changeset/fn-8947-mission-validation-repair.md | 7 +
docs/missions.md | 15 +-
packages/cli/skill/fusion/SKILL.md | 2 +-
.../cli/skill/fusion/references/extension-tools.md | 10 +
.../skill/fusion/references/fusion-capabilities.md | 1 +
.../extension-experiment-finalize.test.ts | 2 +
.../__tests__/extension-gitlab-tracking.test.ts | 2 +
.../cli/src/__tests__/extension-web-fetch.test.ts | 2 +
packages/cli/src/__tests__/extension.test.ts | 24 +++
packages/cli/src/extension.ts | 40 ++++
.../mission-status-event-metadata.test.ts | 23 +++
.../postgres/mission-validation-repair.pg.test.ts | 187 ++++++++++++++++++
.../core/src/async-stores/async-mission-store.ts | 216 ++++++++++++++++++---
packages/core/src/index.gate.ts | 5 +
packages/core/src/index.ts | 5 +-
packages/core/src/missions/mission-types.ts | 49 +++++
packages/core/src/types.ts | 7 +
packages/dashboard/app/api/legacy.ts | 1 +
packages/dashboard/app/api/missions/missions.ts | 13 ++
.../dashboard/app/components/MissionManager.css | 26 ++-
.../dashboard/app/components/MissionManager.tsx | 207 +++++++++++++++++---
.../__tests__/MissionManager.mobile-css.test.ts | 8 +
.../MissionManager.validation-repair.test.tsx | 83 ++++++++
.../__tests__/mission-task-prefix-routes.test.ts | 162 +++++++++++++++-
packages/dashboard/src/mission-routes.ts | 104 +++++++++-
.../src/__tests__/agent-mission-tools.test.ts | 119 +++++++++++-
.../__tests__/mission-feature-sync-lanes.test.ts | 59 +++++-
.../workflow-step-readonly-allowlist.test.ts | 1 +
packages/engine/src/agent-tools.ts | 36 ++++
.../engine/src/execution/gating-classifications.ts | 1 +
packages/engine/src/index.ts | 1 +
.../engine/src/missions/mission-feature-sync.ts | 79 ++++++++
32 files changed, 1430 insertions(+), 67 deletions(-)
Fusion-Task-Id: FN-8947
Fusion-Task-Lineage: b93e5ab6-021c-4d32-bffb-f89f4c3894bc
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 19:36:31 -07:00
gsxdsm
a839c61929
FN-8926: expose graph and recall through MCP
...
Expose Fusion knowledge graph and durable recall through a built-in MCP transport.
- Add the reserved fusion-memory server with graph and recall MCP tools.
- Resolve built-in availability and enable/disable tombstones across configuration and UI.
- Add CLI transport, documentation, release metadata, and lane coverage tests.
Files changed:
.changeset/fn-8926-memory-mcp-server.md | 7 +
docs/cli-reference.md | 4 +
docs/mcp.md | 10 ++
packages/cli/src/bin.ts | 6 +
.../__tests__/mcp-memory-server-spawn.test.ts | 79 ++++++++++
.../commands/__tests__/mcp-memory-server.test.ts | 83 +++++++++++
packages/cli/src/commands/__tests__/mcp.test.ts | 27 +++-
packages/cli/src/commands/mcp-memory-server.ts | 104 +++++++++++++
packages/cli/src/commands/mcp.ts | 64 ++++++--
packages/core/package.json | 10 ++
.../core/src/__tests__/mcp-builtin-servers.test.ts | 17 +++
packages/core/src/__tests__/mcp-config.test.ts | 12 ++
packages/core/src/config/mcp-builtin-descriptor.ts | 16 ++
packages/core/src/config/mcp-builtin-servers.ts | 18 +++
packages/core/src/config/mcp-config.ts | 40 +++--
packages/core/src/config/mcp-discovery.ts | 3 +-
packages/core/src/index.ts | 6 +
packages/core/src/memory/index.ts | 1 +
.../mcp/__tests__/memory-mcp-handler.test.ts | 36 +++++
.../mcp/__tests__/memory-mcp-serialization.test.ts | 23 +++
packages/core/src/memory/mcp/index.ts | 4 +
.../core/src/memory/mcp/memory-mcp-backends.ts | 39 +++++
packages/core/src/memory/mcp/memory-mcp-handler.ts | 54 +++++++
.../src/memory/mcp/memory-mcp-serialization.ts | 48 ++++++
packages/core/src/memory/mcp/memory-mcp-tools.ts | 64 ++++++++
packages/core/src/types.ts | 10 ++
.../settings/sections/GlobalMcpSection.tsx | 14 +-
.../settings/sections/McpServersCard.tsx | 67 +++++++--
.../settings/sections/ProjectMcpSection.tsx | 15 +-
.../__tests__/McpServersCard.builtin.test.tsx | 45 ++++++
.../dashboard/src/__tests__/chat-manager.test.ts | 24 +++
.../register-config-mcp-pi-settings-routes.ts | 20 ++-
packages/dashboard/vitest.config.ts | 2 +
.../__tests__/mcp-builtin-lane-coverage.test.ts | 163 +++++++++++++++++++++
packages/engine/src/mcp/mcp-resolution.ts | 10 +-
packages/engine/vitest.config.ts | 2 +
36 files changed, 1097 insertions(+), 50 deletions(-)
Fusion-Task-Id: FN-8926
Fusion-Task-Lineage: b2861491-33da-4b05-b9f8-a7c1448c1c8c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 17:50:27 -07:00
gsxdsm
3143f9536f
FN-8908: auto-recover terminal task failures
...
Recover generic terminal task failures through a bounded, durable retry budget before escalating them to operators.
- add fenced task-store recovery claims, retries, budget resets, and audit events
- defer terminal-failure notifications until recovery is exhausted while preserving a single escalation
- expose operator retry budget reset and cover recovery lifecycle behavior
Files changed:
.../fn-8908-terminal-failure-auto-recovery.md | 7 +
AGENTS.md | 1 +
docs/agents.md | 2 +
docs/architecture.md | 2 +
packages/cli/src/commands/task.ts | 2 +
packages/cli/src/extension.ts | 2 +
...terminal-failure-auto-recovery-store.pg.test.ts | 108 +++++++++
.../terminal-failure-auto-recovery.test.ts | 60 +++++
packages/core/src/index.gate.ts | 1 +
packages/core/src/index.ts | 1 +
packages/core/src/store.ts | 179 ++++++++++++++-
.../core/src/task-store/archive-lifecycle-2.ts | 15 ++
packages/core/src/task-store/moves.ts | 48 +++-
packages/core/src/task-store/persistence.ts | 18 +-
packages/core/src/task-store/project-store-ops.ts | 4 +-
.../src/task-store/workflow-task-create-ops.ts | 4 +-
packages/core/src/tasks/index.ts | 1 +
.../src/tasks/terminal-failure-auto-recovery.ts | 114 ++++++++++
packages/core/src/types/task/task-core.ts | 24 ++
.../src/routes/register-task-workflow-routes.ts | 2 +
...-healing-terminal-failure-auto-recovery.test.ts | 199 ++++++++++++++++
.../__tests__/notification-service.test.ts | 86 ++++++-
.../__tests__/task-wedge-notification.test.ts | 2 +-
.../src/notification/notification-service.ts | 103 +++++++--
.../src/notification/task-wedge-notification.ts | 30 ++-
packages/engine/src/self-healing.ts | 251 ++++++++++++++++++++-
packages/engine/src/util/run-audit.ts | 7 +
27 files changed, 1240 insertions(+), 33 deletions(-)
Fusion-Task-Id: FN-8908
Fusion-Task-Lineage: 99e96b16-0306-41f1-87da-8623d69735f7
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 16:53:51 -07:00
gsxdsm
0fc6f3d849
FN-8946: enable attributed agent mission status updates
...
Enable authorized agents to update feature and mission statuses with transactional, attributed audit events.
- Add mission and feature status tools to the Fusion extension and engine allowlists.
- Record bounded actor, reason, and hierarchy metadata for status transitions across every writer.
- Guard linked feature transitions and document the agent-facing workflow.
Files changed:
.changeset/fn-8946-mission-status-writes.md | 7 +
docs/missions.md | 7 +-
packages/cli/skill/fusion/SKILL.md | 2 +-
.../cli/skill/fusion/references/extension-tools.md | 20 +++
.../skill/fusion/references/fusion-capabilities.md | 2 +
packages/cli/src/__tests__/extension.test.ts | 46 ++++++
packages/cli/src/extension.ts | 27 +++
.../mission-status-event-metadata.test.ts | 50 ++++++
.../__tests__/postgres/mission-store.pg.test.ts | 160 +++++++++++++++++-
.../core/src/async-stores/async-mission-store.ts | 182 +++++++++++++++------
packages/core/src/index.ts | 5 +
packages/core/src/missions/mission-store.ts | 7 +-
packages/core/src/missions/mission-types.ts | 99 +++++++++--
.../src/__tests__/chat-toolset-permissions.test.ts | 24 +++
packages/dashboard/src/mission-routes.ts | 3 +-
.../src/__tests__/agent-mission-tools.test.ts | 42 ++++-
.../src/__tests__/heartbeat-executor.test.ts | 4 +-
.../workflow-step-readonly-allowlist.test.ts | 2 +
packages/engine/src/agent-tools.ts | 18 ++
.../engine/src/execution/gating-classifications.ts | 2 +
20 files changed, 635 insertions(+), 74 deletions(-)
Fusion-Task-Id: FN-8946
Fusion-Task-Lineage: 473cc0e0-e632-48b3-ac84-adaaeb81db4b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 07:30:42 -07:00
gsxdsm
27cb2d2621
FN-8921: add deterministic knowledge graph tooling
...
Add a committable, provenance-tagged knowledge graph layer with CLI generation and query support.
- Extract TypeScript, Markdown, and FNXC knowledge into deterministic graph nodes and edges.
- Persist recoverable graph artifacts outside ignored Fusion state and expose build/query CLI commands.
- Document configuration and add core and CLI coverage for graph structure, serialization, and recovery.
Files changed:
.changeset/fn-8921-knowledge-graph.md | 7 +
.gitattributes | 3 +
AGENTS.md | 1 +
docs/README.md | 2 +
docs/cli-reference.md | 4 +
docs/knowledge-graph.md | 37 +++++
docs/settings-reference.md | 4 +
docs/storage.md | 2 +
packages/cli/package.json | 3 +-
.../__tests__/knowledge-graph-bundle-shape.test.ts | 4 +
.../src/__tests__/knowledge-graph-command.test.ts | 115 ++++++++++++++
packages/cli/src/bin.ts | 19 +++
packages/cli/src/commands/knowledge-graph.ts | 79 ++++++++++
packages/cli/tsup.config.ts | 2 +
packages/core/package.json | 4 +-
packages/core/src/config/settings-schema.ts | 2 +
packages/core/src/index.ts | 1 +
.../__tests__/derive-modules.test.ts | 11 ++
.../__tests__/extract-file-composition.test.ts | 20 +++
.../knowledge-graph/__tests__/extract-fnxc.test.ts | 33 ++++
.../__tests__/extract-markdown.test.ts | 21 +++
.../__tests__/extract-typescript.test.ts | 30 ++++
.../__tests__/file-discovery.test.ts | 26 ++++
.../graph-artifact-not-gitignored.test.ts | 15 ++
.../__tests__/graph-builder-equivalence.test.ts | 76 ++++++++++
.../__tests__/graph-builder-incremental.test.ts | 52 +++++++
.../__tests__/graph-identity.test.ts | 11 ++
.../knowledge-graph/__tests__/graph-query.test.ts | 13 ++
.../__tests__/graph-serialization.test.ts | 29 ++++
.../__tests__/graph-store-recovery.test.ts | 106 +++++++++++++
.../__tests__/resolve-imports.test.ts | 10 ++
.../core/src/knowledge-graph/derive-modules.ts | 4 +
packages/core/src/knowledge-graph/extract-file.ts | 6 +
packages/core/src/knowledge-graph/extract-fnxc.ts | 168 +++++++++++++++++++++
.../core/src/knowledge-graph/extract-markdown.ts | 9 ++
.../core/src/knowledge-graph/extract-typescript.ts | 107 +++++++++++++
.../core/src/knowledge-graph/file-discovery.ts | 85 +++++++++++
packages/core/src/knowledge-graph/graph-builder.ts | 141 +++++++++++++++++
.../core/src/knowledge-graph/graph-manifest.ts | 4 +
packages/core/src/knowledge-graph/graph-query.ts | 126 ++++++++++++++++
.../src/knowledge-graph/graph-serialization.ts | 134 ++++++++++++++++
packages/core/src/knowledge-graph/graph-store.ts | 97 ++++++++++++
packages/core/src/knowledge-graph/graph-types.ts | 54 +++++++
packages/core/src/knowledge-graph/index.ts | 14 ++
.../core/src/knowledge-graph/resolve-imports.ts | 4 +
packages/core/src/types/settings/settings-scope.ts | 2 +
pnpm-lock.yaml | 12 +-
47 files changed, 1700 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-8921
Fusion-Task-Lineage: 7014d0f1-fc47-454b-afe5-5f0d9b229f33
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-10 06:15:17 -07:00
gsxdsm
1cf86baa1c
refactor: package code organization wave 18 (executor pure peels) ( #3317 )
...
## Summary
Wave 18 continues the package code-organization program after wave 17
domain folders (U4 Slice A from
`docs/plans/2026-07-14-001-refactor-package-code-organization-plan.md`).
### What changed
Peel **pure, behavior-preserving** helpers out of
`packages/engine/src/executor.ts` into domain modules under
`packages/engine/src/executor/`, with **stable re-exports** from
`executor.ts` so deep imports and `vi.mock("../executor.js")` keep
working.
| New module | Symbols |
|------------|---------|
| `executor/task-done-refusal.ts` | `evaluateTaskDoneRefusal`,
`determineRevisionResetStart`, skip-bypass refusal helper |
| `executor/workflow-feedback-paths.ts` |
`extractReferencedPathsFromWorkflowFeedback`,
`isAlwaysAllowedScopeLeakPath`, `workflowPathMatchesDeclaredScope` |
| `executor/workflow-step-verdict.ts` |
`FUSION_WORKFLOW_STEP_CONVENTIONS_PREAMBLE`, `parseWorkflowStepVerdict`
/ `parseWorkflowStepOutput`, step outcome types |
| `executor/await-input-parse.ts` | `parseAwaitInputSentinel`,
`parseAwaitInputQuestionToolCall` |
| `executor/no-commit-eligibility.ts` | `getNoCommitEligibilityReason`
(+ prompt heuristics) |
`executor.ts` live LOC ~**22817 → ~22427** (first pure-peel batch; more
peels needed to approach the 2k cap).
### Shims
- `old path` `executor.ts` public exports → `new path` `executor/*.ts` →
delete-when consumer deep-imports are re-pointed (not this PR)
### Test plan
- [x] `@fusion/engine` typecheck
- [x] Oracle: task-done refusal, skip-bypass, workflow malformed
verdict, scope-leak allowlist, executor-step-session, executor-prompt
- [x] `vitest --project=engine-core` (merge-gate curated suite)
- [ ] CI merge gate
**Stack:** wave17 (merged) → **this PR**
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Improved recognition of workflow outcomes from structured and
conversational responses.
* Added support for extracting questions from await-input responses and
tool calls.
* Improved workflow feedback handling for referenced files and declared
scope patterns.
* Added clearer guidance for task execution, approvals, verification,
and available tools.
* **Bug Fixes**
* Prevented completion when required review approvals are missing or
revisions remain pending.
* Improved handling of workflows that legitimately require no code
changes.
* Added clearer refusal messages and more reliable revision restarts.
* Sanitized repository paths in Git remediation instructions.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-09 15:46:09 -10:00
Victor Canô
a09e0cb87f
feat(i18n): add Português (Brasil) (pt-BR) locale ( #3347 )
...
## Summary
Adds **Português (Brasil)** (`pt-BR`) as a supported locale:
- Selectable as **Translation target language** (project settings) and
as the dashboard / terminal UI language.
- Full machine-drafted catalogs (`app`, `cli`, `common`), disclosed in
`packages/i18n/locales/TRANSLATION_STATUS.md` following the pattern
#1352 established — reviewed for glossary/register consistency (0.18%
untranslated, matching only keys that are empty in `en`), but
native-speaker corrections are welcome.
- Brazilian Portuguese content-language detection (accent-stripped
stopword list — the scorer strips diacritics before matching, so
accented entries never match; `com`/`mais` deliberately omitted to avoid
bare-domain `.com` and French collisions, with regression tests for both
directions).
- `pt`/`pt-PT` browser and environment locales resolve to `pt-BR` on all
three detection paths (`FALLBACK_LNG` routing plus a `pt` branch in
`normalizeToSupportedLocale`, mirroring the existing `zh` handling).
- `README.pt-BR.md` + switcher links in all READMEs, docs updates
(`settings-reference`, `cli-reference`, `i18n-contributing`, `--lang`
help text), changeset (`minor`).
Drive-by fixes bundled: `TRANSLATION_STATUS.md` was missing the `ko`
row; the LanguageSelector endonym test was missing `한국어`;
`docs/i18n-contributing.md` now names the two compile-enforced display
maps (`LOCALE_LABELS`, `localeDisplayName`) a new locale must update;
the `--lang` CLI help text no longer drifts from its validator.
## Test plan
- `pnpm i18n:status` (key parity gate) green; catalogs are
`i18n:sync`-idempotent.
- Updated/extended suites: core `locale-settings`, i18n
`config`/`parity`/`db-banner-catalog`/`i18n-gate-coverage`, dashboard
`useLanguage`/`LanguageSelector`/`GeneralSection.importTranslate`/`detectContentLanguage`
(incl. new pt-BR detection + bare-domain regression tests), CLI
`settings`.
- `pnpm verify:fast` (typecheck, build, boot smoke), `pnpm lint`, `pnpm
check:changesets`, and the bounded `pnpm test` lane all green locally
(the three `test:pg-gate` files fail locally only for lack of a Postgres
instance; they fail identically on clean `main`).
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added Brazilian Portuguese (Português (Brasil)) across the dashboard,
terminal interface, settings, and translation tools.
* Added Portuguese translations for common interface and CLI content.
* Added automatic Portuguese language detection, locale normalization,
and fallback support.
* Added a Portuguese (Brazil) README with product, setup, and usage
documentation.
* **Documentation**
* Updated language selectors, CLI references, settings documentation,
and translation guidance.
* Added Portuguese README links to translated documentation.
* Added French to the documented dashboard language options.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com >
2026-08-09 13:33:16 -10:00
gsxdsm
c7c879905b
FN-8903: add event-driven GitHub CI merge checks
...
Persist ingested GitHub CI signals and use them to assess merge readiness.
- Store project-scoped GitHub check states with retention maintenance.
- Resolve configured required checks from ingested signals during PR merge decisions.
- Add delivery, lifecycle, persistence, and retention coverage with operator documentation.
Files changed:
.changeset/fn-8903-event-driven-checks.md | 7 ++
docs/architecture.md | 1 +
docs/settings-reference.md | 2 +-
docs/signals-connectors.md | 2 +-
.../src/commands/__tests__/task-lifecycle.test.ts | 50 ++++++++-
packages/cli/src/commands/task-lifecycle.ts | 7 +-
.../core/src/__tests__/ingested-checks.test.ts | 66 +++++++++++
.../postgres/github-check-states.pg.test.ts | 71 ++++++++++++
packages/core/src/config/index.ts | 1 +
packages/core/src/config/ingested-checks.ts | 32 ++++++
packages/core/src/index.ts | 10 ++
.../0048_fn_8903_github_check_states.sql | 32 ++++++
packages/core/src/postgres/schema-applier.ts | 15 ++-
packages/core/src/postgres/schema/project.ts | 29 ++++-
.../core/src/task-store/async/async-ci-checks.ts | 104 ++++++++++++++++++
packages/core/src/task-store/async/index.ts | 1 +
packages/core/src/types.ts | 2 +
packages/dashboard/src/__tests__/github.test.ts | 121 ++++++++++++++++++++-
.../src/__tests__/register-signal-routes.test.ts | 81 +++++++++++++-
packages/dashboard/src/github.ts | 74 +++++++++----
.../dashboard/src/routes/register-git-github.ts | 29 +++--
.../dashboard/src/routes/register-signal-routes.ts | 10 +-
.../src/routes/register-task-workflow-routes.ts | 14 ++-
packages/dashboard/src/signal-source.ts | 23 ++++
packages/dashboard/src/signal-sources/github.ts | 2 +
.../self-healing-github-check-retention.test.ts | 121 +++++++++++++++++++++
packages/engine/src/self-healing.ts | 23 ++++
27 files changed, 878 insertions(+), 52 deletions(-)
Fusion-Task-Id: FN-8903
Fusion-Task-Lineage: b2643587-c568-4b6c-8b3a-d50a6165963d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 09:14:56 -07:00
gsxdsm
2643f4e567
FN-8884: enable GitHub-native PR auto-merge
...
Enable opt-in GitHub-managed auto-merge for pull requests.
- Add a project setting and dashboard control for GitHub native auto-merge.
- Arm individual, group, dashboard, and workflow PRs with `gh pr merge --auto` or GraphQL, including while checks are pending.
- Preserve deferred PR reconciliation, unavailable-feature errors, project-scoped runtime configuration, tests, documentation, and a release changeset.
Files changed:
.changeset/fn-8884-github-native-auto-merge.md | 7 +
docs/settings-reference.md | 5 +
packages/cli/src/commands/__tests__/daemon.test.ts | 16 +++
packages/cli/src/commands/__tests__/serve.test.ts | 14 ++
.../src/commands/__tests__/task-lifecycle.test.ts | 158 +++++++++++++++++++++
packages/cli/src/commands/daemon.ts | 11 +-
packages/cli/src/commands/dashboard.ts | 11 +-
packages/cli/src/commands/serve.ts | 11 +-
packages/cli/src/commands/task-lifecycle.ts | 45 ++++--
.../core/src/__tests__/settings-defaults.test.ts | 4 +
packages/core/src/config/settings-schema.ts | 1 +
packages/core/src/types/settings/settings-scope.ts | 8 ++
.../settings/__tests__/section-keys.test.ts | 1 +
.../app/components/settings/section-keys.ts | 1 +
.../components/settings/sections/MergeSection.tsx | 14 +-
.../settings-default-descriptions.test.tsx | 1 +
.../src/__tests__/github-native-auto-merge.test.ts | 114 +++++++++++++++
.../src/__tests__/routes-pr-merge.test.ts | 84 +++++++++++
packages/dashboard/src/github.ts | 88 +++++++++++--
packages/dashboard/src/index.ts | 2 +-
.../dashboard/src/routes/register-git-github.ts | 33 +++--
.../project-engine-deferred-startup.test.ts | 21 +++
packages/engine/src/project-engine-manager.ts | 2 +
packages/engine/src/project-engine.ts | 6 +
packages/engine/src/project/project-runtime.ts | 6 +
packages/engine/src/runtimes/in-process-runtime.ts | 9 +-
packages/i18n/locales/en/app.json | 4 +-
27 files changed, 634 insertions(+), 43 deletions(-)
Fusion-Task-Id: FN-8884
Fusion-Task-Lineage: cf1b1ea4-7ef7-4050-bd87-25933456a5b6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 04:50:30 -07:00
gsxdsm
d59c1b162f
FN-8855: enforce configured PR checks before merging
...
Add configurable Fusion-side PR check gating across merge surfaces.
- Add project required-check settings, validation, UI controls, CLI support, and operator documentation.
- Evaluate configured checks before dashboard and CLI PR merges, accepting successful, skipped, and neutral checks.
- Bind merges to the evaluated PR head SHA to prevent push-and-merge races.
- Cover required-check policy and head-SHA merge behavior with tests.
Files changed:
.changeset/fn-8855-required-checks.md | 7 +
docs/dashboard-guide.md | 5 +
docs/settings-reference.md | 1 +
.../src/commands/__tests__/task-lifecycle.test.ts | 30 ++++-
packages/cli/src/commands/task-lifecycle.ts | 17 ++-
.../core/src/__tests__/required-checks.test.ts | 16 +++
packages/core/src/config/index.ts | 1 +
packages/core/src/config/required-checks.ts | 16 +++
packages/core/src/config/settings-schema.ts | 1 +
packages/core/src/index.ts | 1 +
packages/core/src/types.ts | 6 +
packages/core/src/types/settings/settings-scope.ts | 6 +
packages/core/src/types/task/task-tracking.ts | 5 +
.../settings/__tests__/section-keys.test.ts | 1 +
.../app/components/settings/section-keys.ts | 1 +
.../settings/sections/MergeSection.search.ts | 3 +
.../components/settings/sections/MergeSection.tsx | 30 ++++-
.../__tests__/MergeSection.requiredChecks.test.tsx | 50 +++++++
.../settings-default-descriptions.test.tsx | 1 +
packages/dashboard/src/__tests__/github.test.ts | 123 +++++++++++++++++
packages/dashboard/src/github.ts | 149 +++++++++++++--------
.../dashboard/src/routes/register-git-github.ts | 38 ++++--
.../src/routes/register-task-workflow-routes.ts | 8 +-
packages/i18n/locales/en/app.json | 4 +-
24 files changed, 441 insertions(+), 79 deletions(-)
Fusion-Task-Id: FN-8855
Fusion-Task-Lineage: 708e9c27-72be-4925-bf09-5db421bcaa67
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-09 01:33:06 -07:00
gsxdsm
b3504f01a4
FN-8838: refresh automated PR heads before GitHub mutations
...
Refresh isolated automated PR heads against their target immediately before PR creation or merge.
- Rebase and lease-publish task and group heads at every automated GitHub boundary.
- Fail closed on concurrent head updates and reconcile retained refresh worktrees.
- Add lifecycle coverage and document the configurable integration remote.
Files changed:
.changeset/fn-8838-refresh-pr-heads.md | 7 +
docs/settings-reference.md | 6 +
.../task-lifecycle-refresh.integration.test.ts | 438 ++++++++++++++++
.../src/commands/__tests__/task-lifecycle.test.ts | 309 ++++++++++-
packages/cli/src/commands/daemon.ts | 4 +-
packages/cli/src/commands/dashboard.ts | 4 +-
packages/cli/src/commands/serve.ts | 4 +-
packages/cli/src/commands/task-lifecycle.ts | 581 +++++++++++++++++++--
.../src/__tests__/group-merge-coordinator.test.ts | 43 ++
.../engine/src/merge/group-merge-coordinator.ts | 34 +-
packages/engine/src/merge/pr-nodes.ts | 35 +-
packages/engine/src/project-engine.ts | 16 +-
12 files changed, 1425 insertions(+), 56 deletions(-)
Fusion-Task-Id: FN-8838
Fusion-Task-Lineage: a9b9e800-7d73-441f-bc1b-2488d244e0b1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-08 22:35:59 -07:00
gsxdsm
c0e2ba2ade
FN-8836: classify GitHub branch policy merge blocks
...
Classify ambiguous GitHub merge failures using refreshed pull request state.
- Distinguish branch-protection blocks from true merge conflicts.
- Surface review and required-check blockers in CLI and dashboard merge flows.
- Add regression coverage and a patch changeset.
Files changed:
.changeset/fn-8836-gh-merge-policy-errors.md | 7 ++
.../src/commands/__tests__/task-lifecycle.test.ts | 55 +++++++++
packages/cli/src/commands/task-lifecycle.ts | 14 ++-
packages/core/src/__tests__/gh-cli.test.ts | 39 +++++-
packages/core/src/cli/gh-cli.ts | 60 +++++++++-
packages/core/src/index.gate.ts | 1 +
packages/core/src/index.ts | 1 +
.../dashboard/src/__tests__/routes-github.test.ts | 131 +++++++++++++++++++++
.../dashboard/src/routes/register-git-github.ts | 58 +++++++--
9 files changed, 351 insertions(+), 15 deletions(-)
Fusion-Task-Id: FN-8836
Fusion-Task-Lineage: 7102f5ba-aca9-48cd-a27b-76deb952c4a5
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-08 18:56:43 -07:00
gsxdsm
54d1ccb8d5
FN-8835: block unmergeable pull requests
...
Fail closed before auto-merging pull requests that GitHub reports as unmergeable.
- Require normalized clean mergeability in PR readiness checks.
- Cover protected, behind, conflicting, and unknown PR states across CLI and dashboard tests.
- Add a patch changeset for the corrected auto-merge behavior.
Files changed:
.changeset/fn-8835-pr-merge-readiness.md | 7 +++
.../src/commands/__tests__/task-lifecycle.test.ts | 21 ++++---
packages/dashboard/src/__tests__/github.test.ts | 64 ++++++++++++++++++----
packages/dashboard/src/github.ts | 11 ++++
4 files changed, 84 insertions(+), 19 deletions(-)
Fusion-Task-Id: FN-8835
Fusion-Task-Lineage: 698dacf9-5f24-42b7-b927-ae5b5579ee3f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-08 18:13:52 -07:00
gsxdsm
03f84d406c
chore(release): v0.76.0-beta.0
...
Version bump via changesets.
2026-08-08 14:25:19 -07:00
gsxdsm
0fda8b203b
test: bind a project partition in the PG harness for built-in agent provisioning
...
FN-8764 made AgentStore.init() unconditionally provision the four durable
built-in workflow-owner agents, and that provisioning needs a bound
asyncLayer.projectId — backendProjectId rejects the empty/unbound partition so a
shared cluster cannot mix ownership. Every AgentStore-backed PG test therefore
threw in init(); without this change all 10 cases in agent-instructions.pg.test
fail at agent-store.ts:526.
createTaskStoreForTest / createSharedPgTaskStoreTestHarness gain an OPT-IN
projectId. Undefined keeps the historical project-agnostic harness (RLS bypass,
empty-string partition) that the rest of the core suite relies on. When set, the
connection GUC `fusion.project_id`, the AsyncDataLayer, and the seeded config row
all share one partition — so agents (explicit project_id) and their config
revisions (GUC-default project_id) land together and the
(project_id, agent_id) FK on agent_config_revisions holds.
Also folds in two already-merged consequences: serve.test expects the
consumerId: "engine" that serve.ts:326 already passes (FN-8685), and the
auto-generated Fusion skill docs pick up fn_workflow_step_resume, the roles /
max_workflow_sessions agent fields, and the deprecated singular role.
Uncommitted in the working tree; reviewed, verified against the real database,
and committed as-is.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com >
2026-08-07 17:33:56 -07:00
gsxdsm
eaadd153b1
FN-8764: route workflow stages through durable role agents
...
Route workflow stages through task-scoped durable role agents.
- Persist normalized multi-role agents and workflow principal fences with migrations.
- Route planning, execution, review, and merge workflow nodes through authorized permanent principals with capacity leasing and recovery.
- Retire ephemeral workflow-stage workers and expose role-aware agent configuration, workflow editing, and documentation.
- Preserve lifecycle-column ratchet coverage by centralizing workflow-role classification rather than adding test exemptions.
Files changed:
.changeset/fn-8764-workflow-role-agents.md | 7 +
CONCEPTS.md | 3 +
docs/agents.md | 6 +
docs/architecture.md | 6 +
docs/cli-reference.md | 2 +
docs/dashboard-guide.md | 4 +
docs/settings-reference.md | 6 +-
docs/storage.md | 2 +
docs/workflow-steps.md | 6 +
.../src/__tests__/extension-agent-update.test.ts | 11 +-
packages/cli/src/__tests__/extension.test.ts | 18 +-
packages/cli/src/extension.ts | 41 +-
.../core/src/__tests__/agent-permissions.test.ts | 12 +
.../core/src/__tests__/agent-role-policy.test.ts | 7 +
packages/core/src/__tests__/agent-roles.test.ts | 21 +
.../legacy-column-collection-gating-ledger.test.ts | 19 +-
.../src/__tests__/postgres/schema-applier.test.ts | 16 +-
.../core/src/__tests__/settings-parity.test.ts | 9 +-
.../workflow-agent-node-classification.test.ts | 25 +
.../src/__tests__/workflow-work-item-cas.test.ts | 38 ++
packages/core/src/agents/agent-permissions.ts | 11 +-
packages/core/src/agents/agent-role-policy.ts | 39 +-
packages/core/src/agents/agent-store.ts | 190 ++++++-
.../core/src/async-stores/async-agent-store.ts | 6 +
packages/core/src/config/settings-schema.ts | 5 +-
packages/core/src/index.gate.ts | 2 +-
packages/core/src/index.ts | 7 +-
.../0045_fn_8764_multi_role_workflow_agents.sql | 20 +
.../0046_fn_8764_workflow_principal_fence.sql | 49 ++
packages/core/src/postgres/schema-applier.ts | 22 +-
packages/core/src/postgres/schema/project.ts | 21 +
packages/core/src/store.ts | 2 +-
.../task-store/async/async-workflow-workitems.ts | 49 +-
packages/core/src/task-store/row-types.ts | 4 +
packages/core/src/task-store/settings-helpers.ts | 16 +-
packages/core/src/task-store/settings-ops-2.ts | 13 +-
packages/core/src/task-store/settings-ops.ts | 16 +-
packages/core/src/task-store/task-row-mappers.ts | 4 +
.../src/task-store/workflow-task-create-ops.ts | 6 +-
.../src/task-store/workflow-workitems-ops-2.ts | 25 +-
packages/core/src/types.ts | 2 +
packages/core/src/types/agents/agents.ts | 45 +-
packages/core/src/types/merge/merge-queue.ts | 17 +
packages/core/src/types/settings/settings-scope.ts | 9 +-
packages/core/src/workflows/workflow-ir-types.ts | 58 +++
packages/core/src/workflows/workflow-ir.ts | 19 +
.../dashboard/app/components/AgentDetailView.css | 14 +
.../dashboard/app/components/AgentDetailView.tsx | 34 +-
.../dashboard/app/components/NewAgentDialog.tsx | 28 +-
.../app/components/WorkflowNodeEditor.tsx | 19 +
.../__tests__/AgentDetailView.core.test.tsx | 4 +-
.../app/components/__tests__/AgentsView.test.tsx | 2 +-
.../__tests__/SettingsModal.general.test.tsx | 86 ---
.../__tests__/SettingsModal.test-harness.tsx | 1 -
.../components/agent-presets/agentCreatePayload.ts | 9 +-
.../app/components/settings/section-keys.ts | 1 -
.../settings/sections/GeneralSection.tsx | 8 -
.../settings-default-descriptions.test.tsx | 1 -
.../app/components/workflow-flow-mapping.ts | 7 +
packages/dashboard/src/mission-routes.ts | 26 +-
.../src/routes/__tests__/agent-core-routes.test.ts | 23 +-
.../src/routes/register-agent-core-routes.ts | 42 +-
...gister-agent-import-export-generation-routes.ts | 21 -
.../engine/src/__tests__/agent-action-gate.test.ts | 33 ++
.../engine/src/__tests__/agent-assignment.test.ts | 370 -------------
.../src/__tests__/ephemeral-worker-manager.test.ts | 575 ---------------------
...ecutor-ephemeral-disabled-dispatch-gate.test.ts | 223 --------
.../__tests__/executor-fast-mode-workflows.test.ts | 58 +++
.../engine/src/__tests__/log-severity-manifest.ts | 1 -
.../__tests__/log-severity-spam-contract.test.ts | 3 -
.../resolved-read-with-literal-filter.test.ts | 4 -
.../__tests__/scheduler-ephemeral-toggle.test.ts | 175 -------
.../__tests__/scheduler-workflow-cutover.test.ts | 19 -
.../src/__tests__/workflow-agent-capacity.test.ts | 47 ++
.../src/__tests__/workflow-agent-routing.test.ts | 137 +++++
.../src/__tests__/workflow-graph-foreach.test.ts | 15 +
.../__tests__/workflow-graph-task-runner.test.ts | 73 +++
.../src/__tests__/workflow-task-runtime.test.ts | 95 ++++
.../src/__tests__/workflow-work-scheduler.test.ts | 20 +
packages/engine/src/agents/agent-action-gate.ts | 64 +++
packages/engine/src/agents/agent-assignment.ts | 135 -----
packages/engine/src/agents/agent-reflection.ts | 1 +
.../engine/src/agents/ephemeral-worker-manager.ts | 429 ---------------
.../engine/src/agents/workflow-agent-capacity.ts | 113 ++++
.../engine/src/agents/workflow-agent-router.ts | 185 +++++++
packages/engine/src/execution/reviewer.ts | 26 +-
packages/engine/src/executor.ts | 501 +++++++++++++++---
packages/engine/src/index.ts | 1 -
packages/engine/src/merger.ts | 20 +-
packages/engine/src/pi.ts | 11 +
packages/engine/src/runtimes/in-process-runtime.ts | 37 --
packages/engine/src/scheduler.ts | 114 +---
packages/engine/src/triage.ts | 196 ++++++-
.../src/workflows/workflow-graph-executor.ts | 109 +++-
.../engine/src/workflows/workflow-graph-loop.ts | 13 +-
.../src/workflows/workflow-graph-task-runner.ts | 12 +
.../engine/src/workflows/workflow-task-runtime.ts | 125 ++++-
.../src/workflows/workflow-work-scheduler.ts | 8 +-
98 files changed, 2722 insertions(+), 2468 deletions(-)
Fusion-Task-Id: FN-8764
Fusion-Task-Lineage: 5527fccb-342d-46f6-8108-bbf89142efec
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-07 01:36:34 -07:00
ischindl
f7ca14beab
feat(workflow): add fn_workflow_step_resume operator escape hatch for stuck pending merge-review steps ( #3339 )
...
## Summary
Adds an **operator-only** escape hatch for a card stranded `in-review`
(or `in-progress`) with a workflow step permanently stuck in `pending`
status — the leading real-world cause being a dispatched prompt node
(e.g. `code-review`) whose verdict callback was never received (see
#1946 ). Transitions the stuck `pending` pre-merge step to `status:
"failed"` with resume audit metadata, so the existing
`fn_task_bypass_review` escape hatch can then clear the merge blocker.
## What changed
- **`WorkflowStepResult`** gains resume audit fields: `resumedBy`,
`resumedAt`, `resumeReason`, `resumedFromStatus`. They are pure audit
trail and **do not** participate in merge-blocking
(`getTaskMergeBlocker`).
- **`findPendingPreMergeStep`** (new helper, exported from
`@fusion/core`) summarizes the stuck-pending pre-merge state for
operator tooling. Ignores post-merge steps; returns the newest pending
pre-merge result.
- **`TaskStore.resumeWorkflowStep(id, { stepId, reason, actor })`** —
the store primitive (eligibility-gated: task must be
`in-review`/`in-progress`, not paused; step must exist and be `pending`;
a mandatory non-blank `reason` and `stepId` are required). Runs under
`withTaskLock`, writes the resume as a terminal `failed` result, appends
a task-log breadcrumb, and emits the new `task:resume-step` run-audit
event.
- **`fn_workflow_step_resume`** — new CLI/pi-extension tool registered
**only** on the operator surface (deliberately **not** wired into
executor/reviewer/triage agent tool lists). Accepts `{ id, stepId,
reason }`; the actor defaults to `cli-operator`.
- **Run-audit**: new `task:resume-step` `DatabaseMutationType` member.
## Why
A prompt-node verdict callback can be lost (dispatched prompt never
receives a verdict), leaving the step `pending` forever. Previously the
only recourse was `fn_task_bypass_review`, which requires a terminal
*failed* pre-merge step to clear the blocker — a permanently `pending`
step could not be bypassed. This PR bridges that gap: resume (pending →
failed) then bypass (failed merge-blocker cleared).
## Verification
- **Typecheck**: `@fusion/core`, `@fusion/engine`, `@runfusion/fusion`
all clean.
- **`task-merge-bypass.test.ts`**: 15/15 pass (incl. 5 new
`findPendingPreMergeStep` cases).
- **`store-resume-step.test.ts`** (new, PG-backed): 9/9 pass —
eligibility gating, resume rewrite + audit fields, run-audit event,
non-pending/non-found/blank-argument rejection, in-progress column
support, property preservation.
- **`extension.test.ts`**: 75/75 pass (expected-tool registration
includes the new tool).
## Files
- `packages/core/src/types/workflow/workflow-steps.ts`
- `packages/core/src/merge/task-merge.ts`
- `packages/core/src/store.ts`
- `packages/core/src/index.ts`
- `packages/core/src/__tests__/store-resume-step.test.ts` (new)
- `packages/core/src/__tests__/task-merge-bypass.test.ts`
- `packages/engine/src/util/run-audit.ts`
- `packages/cli/src/extension.ts`
- `packages/cli/src/__tests__/extension.test.ts`
- `.changeset/stas-032-resume-workflow-step.md` (minor, feature)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **New Features**
* Added an operator-only workflow recovery tool for permanently pending
pre-merge steps.
* Operators can mark eligible pending steps as failed by providing a
required audit reason.
* Recovery actions record operator details, timestamps, reasons, prior
status, task logs, and audit events.
* **Bug Fixes**
* Improved selection of the latest pending pre-merge workflow step while
excluding post-merge steps.
* Added validation to prevent recovery of paused, invalid, or
out-of-scope workflow steps.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
---------
Co-authored-by: schindler <schindler@users.noreply.github.com >
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com >
2026-08-07 00:26:15 -07:00
ischindl
4739f8aa67
fix: eagerly warm extension host stores from engine TaskStores ( #3340 )
...
## Summary
Warm the extension-host task stores **up front** at dashboard startup
instead of letting the first `fn_task_*` call lazily boot a second
PostgreSQL pool per project.
## What changed
`packages/cli/src/commands/dashboard.ts`:
- After the dashboard boots, iterate every registered project (from
`centralCoreForEngine.listProjects()`) and call
`setHostTaskStore(p.path, engine.getTaskStore())` for each non-cwd
project that already has a running `ProjectEngine`.
- Reuses each engine's **existing** `TaskStore` directly — no new
backend connection, no schema advisory-lock contention, no extra
connection-pool exhaustion.
- `cwd` is skipped because its store is already injected at startup.
- Per-project failures are non-fatal (warn) and a failed project listing
logs a single warn — dashboard startup never blocks on this.
- `.changeset/extension-host-store-warmup.md` (patch, fix).
## Why
Left on its own, the first extension tool call (`fn_task_update`,
`fn_task_archive`, `fn_agent_show`, …) for a non-cwd project falls
through to `createTaskStoreForBackend`, which boots a **second**
PostgreSQL connection pool on demand. On busy hosts that lazy boot can
time out, or the call stalls behind pool/startup contention — the
classic "first `fn_task_*` call is slow or errors" experience.
Pre-populating from the already-running engines removes that lazy
worst-case path entirely.
## Verification
- `pnpm verify:fast` — PASS (13 steps, 115s): CLI `tsup` build green,
scoped typecheck/build green, boot smoke green (`fn --help` + real
`serve` with `GET /api/health` 200).
- Cherry-picked cleanly onto current `origin/main` (`5532019fd`); branch
is up-to-date with `origin/main` at PR time.
## Files
- `packages/cli/src/commands/dashboard.ts` (+30)
- `.changeset/extension-host-store-warmup.md` (new)
<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit
* **Bug Fixes**
* Improved dashboard startup reliability by reusing existing project
task connections.
* Prevented extension task tools from creating duplicate connection
pools.
* Added non-blocking warnings when individual project initialization or
discovery fails.
* Dashboard startup now reports how many project task stores were
successfully prepared.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com >
2026-08-07 00:25:39 -07:00
gsxdsm
64413f4e8d
chore(release): v0.75.1
...
Version bump via changesets.
2026-08-06 00:18:07 -07:00
gsxdsm
cb500eeb4c
chore(release): v0.75.1-beta.2
...
Version bump via changesets.
2026-08-05 18:19:27 -07:00
gsxdsm
1db7adcdb0
FN-8809: preserve agent principals for secret approvals
...
Keep prompt-gated secret approvals bound to their calling chat-agent session.
- Resolve extension secret callers through async session identity context.
- Give anonymous engine sessions unique principals and preserve them across tool invocations.
- Surface actionable approval decision errors in the mailbox and cover approval flows.
Files changed:
.changeset/fn-8809-secrets-chat-approval.md | 7 +
.../__tests__/extension-permission-gates.test.ts | 257 ++++++++++++++++++++-
packages/cli/src/extension.ts | 96 +++++---
.../__tests__/session-identity-registry.test.ts | 27 +++
packages/core/src/index.ts | 4 +-
packages/core/src/session-identity-registry.ts | 47 +++-
packages/dashboard/app/components/MailboxView.tsx | 11 +-
.../app/components/__tests__/MailboxView.test.tsx | 49 ++++
.../dashboard/src/__tests__/chat-manager.test.ts | 28 ++-
.../__tests__/register-approval-routes.test.ts | 22 ++
.../src/__tests__/pi-create-fn-agent.test.ts | 210 ++++++++++++++++-
packages/engine/src/pi.ts | 34 ++-
12 files changed, 748 insertions(+), 44 deletions(-)
Fusion-Task-Id: FN-8809
Fusion-Task-Lineage: 2e070f78-7215-4401-bcf2-6fa25fa27066
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 16:46:53 -07:00
gsxdsm
2a0827835d
FN-8810: wire secrets stores into runtime worktrees
...
Wire project secrets stores into runtime and dashboard heartbeat worktree acquisition.
- Inject the project secrets store into executor and heartbeat monitors.
- Cover in-process, UI-only dashboard, and secrets-env worktree materialization paths.
- Add a patch changeset for restored secrets-env files.
Files changed:
.changeset/fn-8810-secrets-env-runtime-wiring.md | 7 ++
.../commands/__tests__/dashboard-supervise.test.ts | 28 ++++-
packages/cli/src/commands/dashboard.ts | 38 ++++++-
.../src/__tests__/in-process-runtime.pg.test.ts | 121 ++++++++++++++++++++-
.../src/__tests__/secrets-env-writer.test.ts | 35 ++++++
.../worktree-acquisition-secrets-env.test.ts | 4 +-
packages/engine/src/runtimes/in-process-runtime.ts | 9 ++
7 files changed, 233 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-8810
Fusion-Task-Lineage: a67c3fbe-7744-4898-8a56-8739caa04479
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-08-05 15:23:08 -07:00
gsxdsm
68e964383f
chore(release): v0.75.1-beta.1
...
Version bump via changesets.
2026-08-05 00:12:09 -07:00