Commit Graph

13329 Commits

Author SHA1 Message Date
gsxdsm
fc4beefe5e docs: index agent-activity-contract.md in README
Add missing index entry for docs/agent-activity-contract.md in the
Architecture & Development section. The doc was a genuine orphan —
a canonical wire/cursor/retention contract for GET /api/agent-activity
referenced in AGENTS.md but not discoverable from the docs index.
2026-08-09 17:50:58 -07:00
gsxdsm
234430a978 FN-8865: show live agent activity in org charts
Expose live per-agent activity throughout the dashboard org chart and active-agent cards.

- Add an activity store with polling, visibility refresh, and reduced-motion support.

- Render activity labels and active indicators in org-chart nodes and agent panels.

- Cover activity normalization, polling behavior, and dashboard presentation with tests.

Files changed:

 .changeset/fn-8865-live-agent-activity.md          |   7 +
 docs/dashboard-guide.md                            |   1 +
 packages/dashboard/app/api.ts                      |  11 +-
 .../dashboard/app/components/ActiveAgentsPanel.css |  20 ++
 .../dashboard/app/components/ActiveAgentsPanel.tsx |  28 ++-
 packages/dashboard/app/components/AgentsView.css   |  39 ++++
 packages/dashboard/app/components/AgentsView.tsx   |  62 +++++-
 .../__tests__/ActiveAgentsPanel.test.tsx           | 122 ++++++++++-
 .../AgentsView.orgchart.activity.test.tsx          | 235 +++++++++++++++++++++
 .../__tests__/AgentsView.orgchart.test.tsx         |   7 +
 .../__tests__/agentsOrgChartActivity.test.ts       | 137 ++++++++++++
 .../app/components/agentsOrgChartActivity.ts       | 156 ++++++++++++++
 .../app/hooks/__tests__/agentActivityStore.test.ts | 179 ++++++++++++++++
 .../app/hooks/__tests__/useAgentActivity.test.tsx  |  60 ++++++
 packages/dashboard/app/hooks/agentActivityStore.ts | 221 +++++++++++++++++++
 packages/dashboard/app/hooks/useAgentActivity.ts   |  18 ++
 packages/dashboard/app/hooks/useReducedMotion.ts   |  23 ++
 17 files changed, 1307 insertions(+), 19 deletions(-)

Fusion-Task-Id: FN-8865

Fusion-Task-Lineage: 04413da2-4114-4a19-9b6b-152f12c95ac6

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 17:10:49 -07:00
gsxdsm
a06a4988d9 fix(worktree): stop terminally failing tasks over a stale worktree base
A stale base is an optimization miss, not an execution failure. FN-8693's
dispatch-time refresh refused dirty checkouts and own-commit rebase conflicts
with executionSafe:false, and the refusal threw out of acquireTaskWorktree into
execute()'s generic terminal sink — parking the task `failed` and paging the
operator. Run-audit for 2026-08-01..09: 99 of 136 execution failures were these
refusals (74 dirty-worktree, 25 stale-base-conflict), and the bounded
non-parking lane built for them fired 0 times because it only ever saw refusals
published as typed graph node values and no code node enables refreshStaleBase.

82 of the 99 landed within five minutes of "Task marked done by agent": they
were code-review-remediation re-entries into execute() on the task's own warm
worktree — exactly the checkout the refresh must leave alone. Dispatch-time
rebase has no conflict resolution, so on a busy main it could only ever fail;
the merge lane already rebases with AI arbitration before landing and
deliberately leaves refreshStaleBase off.

- refreshReusedWorktreeBase: dirty tree, own-commit conflict, unresolvable base
  and compensated persistence failures now return skipped/executionSafe — keep
  the local base and run. Only an unproven tree (failed compensation, so a
  half-rebased checkout may be on disk) still refuses.
- Check whether a mutation is needed before consulting the working tree: a
  worktree already on the current base was refused just for carrying WIP.
- executor: catch WorktreeBaseRefreshError first and route it into
  holdForWorktreeBaseRefresh, one shared non-parking lane the graph path now
  uses too, so the two entry points cannot drift.
- run-audit: worktree:base-refresh-skipped separates a declined refresh from a
  genuine block.

reset-to-base — the actual FN-8693 requirement — is preserved and tested.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-08-09 17:04:55 -07:00
Phil Larson
f0218ef961 fix(i18n): sync required checks locale keys (#3387)
## Summary
- sync the new required-check settings keys into all secondary app
locales
- restore the repository i18n parity gate after FN-8887

## Test plan
- `tsx --no-warnings packages/i18n/scripts/check-i18n-parity.mjs`
- `node scripts/check-changeset-format.mjs --strict`
- `git diff --check`

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **New Features**
- Added localized labels and help text for required merge checks in
Spanish and French.
- Added required-check translation entries for Korean, Simplified
Chinese, and Traditional Chinese.
- Updated dashboard locale coverage so required pull-request check
settings are available consistently across supported languages.

- **Chores**
  - Recorded a patch release for the localization updates.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-08-09 14:02:52 -10:00
Phil Larson
2286a7a378 fix: refresh dependent worktrees after local merges (#3381)
## Summary

- apply Fusion's existing stale-base reconciliation to freshly
reacquired and pooled execution worktrees
- advance retained task branches to the current local integration commit
after dependencies land
- keep planning and Worktrunk behavior unchanged while preserving
dirty/conflict fail-closed handling

## Problem

A dependent task can be planned before its dependency lands. If the
dependency merges and its branch is deleted, a later execution retry may
recreate the dependent worktree from its already-existing task branch.
That branch can still point at the pre-dependency commit.

Fusion already refreshes reused execution worktrees, but fresh
acquisition returned without calling the same reconciliation primitive.
The dependent task therefore executed without the landed dependency
output even though Fusion marked the dependency complete.

## Fix

When `refreshStaleBase` is enabled, run `refreshReusedWorktreeBase`
after a native fresh or pooled worktree is acquired and before cleanup,
init, or session execution. Track the actual backend used by injected
and fallback creators so a native fallback still refreshes while
Worktrunk-managed paths remain excluded. The existing primitive:

- resolves the current local integration branch without requiring a
remote
- resets branches with no task-owned commits
- rebases branches with task-owned commits
- blocks dirty or conflicting worktrees
- persists the integration commit as `baseCommitSha`

If refresh blocks a pooled checkout, clear the task's durable binding
before releasing the checkout for reuse.

Planning callers do not enable `refreshStaleBase`, so planning worktrees
remain unchanged.

## Verification

- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/worktree-base-refresh.test.ts
src/__tests__/worktree-acquisition.test.ts --silent=passed-only
--reporter=dot` — 34 passed
- `pnpm --filter @fusion/engine typecheck`
- `pnpm --filter @fusion/engine build`
- `pnpm test:gate:static`
- `pnpm check:changesets`
- `git diff --check`


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Improved worktree acquisition by refreshing stale branches against the
current integration branch.
* Added refresh support for recreated, pooled, and native fallback
worktrees.
* Prevented task execution when refresh fails and safely released
affected pooled worktrees.
  * Avoided unnecessary refreshes for newly created Worktrunk worktrees.

* **Tests**
* Added coverage for stale-base refresh behavior across supported
acquisition scenarios.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-09 13:51:28 -10:00
Drew Donaldson
a3e37757e6 fix: default --no-auto-update off to fix Grok ACP startup on CLI v1.0.0 (#3390)
The released Grok CLI (v1.0.0, latest stable) does not recognize the
--no-auto-update flag and exits immediately with error: unexpected
argument. This causes Fusion to report 'ACP connection closed' when
spawning grok agent stdio.

buildGrokAcpArgs previously defaulted noAutoUpdate to true (via !==
false). Changed to opt-in (=== true) so the flag is only passed when
explicitly enabled. Updated acp-settings.test.ts assertions accordingly.

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

- **Bug Fixes**
  - Grok ACP startup no longer disables automatic updates by default.
- Automatic update prevention is applied only when explicitly enabled in
settings.
- **Tests**
- Updated startup argument validation to reflect the revised default
behavior.
- **Documentation**
  - Added release notes documenting the change.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

---------

Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-08-09 13:51:03 -10:00
ischindl
3766dfc2a7 fix: Engine Control popover collapsed to ~trigger width (FN-8802 .card clamp) (#3363)
## What & why

RUFU-042. The open **Engine Controls** popover (footer status bar,
bottom-right) carries the shared `.card` class. Since FN-8802, `.card`
bases set `min-width: 0; max-width: 100%` (TaskCard.css). The popover's
containing block (`.engine-control-menu`) sizes to the narrow trigger
button, so `.card`'s `max-width: 100%` clamped the intended `24rem` grid
down to ~the trigger's width — a **~5mm-wide invisible popover**.

## Fix (CSS only, `EngineControlMenu.css`)

- Footer-scoped desktop rule (`0,3,0`) re-asserts
`min-width`/`max-width` clamped to the **viewport** (not the trigger
wrapper), deterministically beating the shared `.card` (`0,1,0`) by
specificity — same pattern as `.selection-comment-panel.card`.
- Mobile `@media (max-width:1024px)` resets `min-width:0;
max-width:none` so the full-width gutter panel cannot overflow nor be
re-clamped by `.card`.
- No `className="card"` removal; shared `.card` base untouched.

## Regression tests

Two new tests in `EngineControlMenu.test.tsx` assert the desktop min/max
guard and the mobile reset, so the collapse cannot silently return.
**17/17 tests pass.**

No changeset (`@fusion/dashboard` is a private package).

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **Bug Fixes**
* Improved engine control popovers so they size correctly without
collapsing or overflowing.
* Enhanced mobile layouts to maintain full-width display with
appropriate screen gutters.

* **Tests**
* Added regression coverage for desktop width limits and narrow-screen
popover behavior.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Fusion <noreply@runfusion.ai>
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-08-09 13:49:56 -10:00
Phil Larson
50311a88d6 test(engine): normalize routed session mock calls (#3396)
## Summary
- normalize Vitest mock-call tuples before selecting graph
implementation sessions
- restore six clean-main executor assertions that otherwise misclassify
a routed implementation call as missing

## Test plan
- `pnpm --filter @fusion/engine exec vitest run --reporter=dot
src/__tests__/executor-review-verdicts.test.ts
src/__tests__/executor-worktree-liveness.test.ts`
- `pnpm --filter @fusion/engine typecheck`
- `pnpm test:gate:static`

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Tests**
* Updated workflow routing and worktree liveness tests to use normalized
agent configuration when validating implementation-session selection.
* Improved coverage for fresh worktrees, configured directories, and
routed implementation sessions.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-08-09 13:49:25 -10:00
Phil Larson
477f3faf0a feat: support operator-routed external task checkouts (#3398)
## Summary
- add an explicit API route that persists one clean external Git
checkout for task execution and enforced review
- fence execution to the checkout's persisted branch and fail closed
when the route becomes invalid
- allow completion invariants to validate explicitly routed checkouts
outside the project worktree directory

## Test plan
- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/external-execution-checkout.test.ts
src/__tests__/review-checkout.test.ts
src/__tests__/engine-no-blocking-shellout.test.ts --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/engine exec vitest run
src/__tests__/executor-fast-mode-workflows.test.ts -t 'prepares a
persisted external execution checkout' --silent=passed-only
--reporter=dot`
- `FUSION_DASHBOARD_DEEP=1 pnpm --filter @fusion/dashboard exec vitest
run src/__tests__/routes-tasks-near-duplicate.test.ts -t 'PATCH
external-checkout' --project dashboard-api --silent=passed-only
--reporter=dot`
- `pnpm --filter @fusion/engine typecheck`
- `pnpm --filter @fusion/dashboard exec tsc --noEmit`
- `pnpm verify:fast`
- `pnpm test:gate` (605 non-PostgreSQL tests pass; local PostgreSQL
suites cannot authenticate because the configured client returns an
empty password)


<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->
## Summary by CodeRabbit

* **New Features**
* Added support for routing task execution and review through
operator-selected external Git checkouts.
* External checkouts are validated for valid Git repositories, attached
branches, clean status, and branch consistency.
  * Tasks can clear previously configured external checkout routing.
* Valid routed checkouts are used directly without creating a separate
worktree.

* **Bug Fixes**
* Invalid, incomplete, dirty, or mismatched checkout configurations now
fail early with clear validation errors.
  * Missing tasks return the appropriate not-found response.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-08-09 13:49:06 -10:00
gsxdsm
ccebe5c5cf fix(engine): keep orphaned planning recovery alive (#3399)
## Summary

Resolves merge conflicts from #3392 against current `main`.

`main` already landed the core #3386 fix via FN-8909 (`includeArchived:
false` live-row enumeration + per-task isolation). This PR rebases the
remaining #3392 refinements on top of that:

- Best-effort, secret-free audit emission (per-task and no-action)
- Distinguish `no-eligible-orphan` vs `all-attempts-failed` /
`no-finalization` no-action outcomes
- Redacted `errorType=` warn logs so poisoned-row failures cannot abort
the sweep or leak error prose

Supersedes #3392 (fork head is not writable from this environment
despite `maintainer_can_modify`).

## Test plan

- [x] `pnpm --filter @fusion/engine exec vitest run
src/__tests__/self-healing.test.ts --project engine-default --run -t
"finalizeOrphanedPlanningSegments"` — 8 passed
- [ ] CI PR checks green

<!-- This is an auto-generated comment: release notes by coderabbit.ai
-->

## Summary by CodeRabbit

* **Bug Fixes**
* Improved recovery of orphaned planning segments when individual
finalization attempts fail.
* Recovery now continues successfully even if audit recording encounters
an error.
* Added clearer recovery outcomes, distinguishing cases where no
segments qualify, all attempts fail, or only some segments are
finalized.
* Warning messages now provide structured error details without exposing
sensitive information.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->

Co-authored-by: Codex <codex@openai.com>
2026-08-09 13:48:39 -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
7775000bfd fix(dashboard): silence no-empty catch warnings in planning storage
Add intentional comments to best-effort eviction/retry catch blocks so eslint no-empty no longer warns.
2026-08-09 16:27:51 -07:00
Phil Larson
a39a5116c2 fix(dashboard): preserve recommendation recovery across archive lanes (#3360)
## Summary
- align dependency-link tests with prompt-only Definition refreshes
- classify archived recommendation tasks through shared workflow-trait
lanes, including legacy and v1 compatibility
- restore deterministic recommendation tasks directly to their workflow
intake lane without invoking cold-storage unarchive

## Test plan
- `FUSION_DASHBOARD_DEEP=1 corepack pnpm --filter @fusion/dashboard exec
vitest run src/routes/__tests__/task-recommendation-routes.test.ts
src/__tests__/task-lifecycle-lanes.test.ts
app/components/__tests__/TaskDetailModal.responsive-and-dependencies.test.tsx
--silent=passed-only --reporter=dot`
- `corepack pnpm --filter @fusion/dashboard typecheck`
- `corepack pnpm --filter @fusion/dashboard build`
- `corepack pnpm exec eslint
packages/dashboard/src/routes/register-task-workflow-routes.ts
packages/dashboard/src/routes/__tests__/task-recommendation-routes.test.ts
packages/dashboard/src/task-lifecycle-lanes.ts
packages/dashboard/src/__tests__/task-lifecycle-lanes.test.ts
packages/dashboard/app/components/__tests__/TaskDetailModal.responsive-and-dependencies.test.tsx`
- `corepack pnpm check:lifecycle-columns`
- `corepack pnpm check:changesets --strict`
2026-08-09 13:22:32 -10:00
gsxdsm
9ce698699a FN-8917: add telemetry seams to merger test stores
Ensure merger test fixtures model session-usage telemetry so user-hold release coverage exercises the production lane.

- Add emitUsageEvent fakes across merger AI test stores.
- Assert the user-held branch-group member emits merger session telemetry when explicitly released.
- Document fixture requirements and expected hold-path stderr.

Files changed:
 .../src/__tests__/group-merge-coordinator.test.ts   | 21 +++++++++++++++++++++
 .../engine/src/__tests__/merger-ai-cleanup.test.ts  |  1 +
 .../merger-ai-dependency-install.slow.test.ts       |  1 +
 .../__tests__/merger-ai-push-after-merge.test.ts    |  1 +
 .../src/__tests__/merger-ai-renamed-columns.test.ts |  6 ++++++
 .../ai-merge-cleanup-enoent-idempotent.test.ts      |  1 +
 6 files changed, 31 insertions(+)

Fusion-Task-Id: FN-8917

Fusion-Task-Lineage: aab96cdb-50ec-441f-80f5-944e8e1d70ab

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 16:09:55 -07:00
gsxdsm
6bd8004ba1 FN-8915: document agent activity API contract
Publish an inspectable contract for durable agent-activity history and pagination.

- Define the route wire shape, cursor semantics, retention, and SSE recovery behavior.
- Add PostgreSQL and dashboard coverage for documented pagination and truncation guarantees.
- Link architecture and diagnostics guidance to the canonical contract and validate its prerequisite lineage.

Files changed:
 .changeset/fn-8864-agent-activity-events.md        |  2 +-
 AGENTS.md                                          |  1 +
 docs/agent-activity-contract.md                    | 94 ++++++++++++++++++++++
 docs/architecture.md                               |  2 +-
 docs/diagnostics.md                                |  2 +-
 .../agent-activity-cursor-contract.pg.test.ts      | 90 +++++++++++++++++++++
 .../src/__tests__/agent-activity-route.test.ts     | 10 +++
 .../src/__tests__/sse-agent-activity.test.ts       | 12 ++-
 scripts/check-fn-8864-ancestry.sh                  | 35 ++++++++
 9 files changed, 244 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-8915

Fusion-Task-Lineage: da3f8c96-3b58-4e6d-a413-c51bdd643f26

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 15:58:54 -07:00
gsxdsm
22711c2dbb Test update 2026-08-09 15:51:35 -07:00
gsxdsm
8a7ab1dedc FN-8911: allow direct database URLs for planning locks
Allow planning lifecycle locks to use non-pooled runtime PostgreSQL connections without a duplicate migration URL.

- Select runtime-direct endpoints for direct DATABASE_URL connections and retain migration overrides for pooled endpoints.
- Preserve lifecycle transport failures across triage retries and expose lock helpers through the core barrel.
- Document the connection behavior and add resolver, advisory-lock, and triage regression coverage.

Files changed:
 .../fn-8911-direct-database-url-planning-lock.md   |   7 +
 docs/architecture.md                               |   2 +-
 docs/multi-project.md                              |   4 +-
 .../__tests__/postgres/backend-resolver.test.ts    |  43 +++++-
 .../planning-lifecycle-advisory-lock.pg.test.ts    |  28 +++-
 packages/core/src/index.ts                         |   2 +
 packages/core/src/postgres/advisory-locks.ts       |   6 +-
 packages/core/src/postgres/backend-resolver.ts     |  29 +++-
 packages/core/src/postgres/index.ts                |   5 +
 ...ge-planning-lifecycle-transport-failure.test.ts | 159 +++++++++++++++++++++
 packages/engine/src/triage.ts                      | 100 +++++++++++--
 11 files changed, 360 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-8911
Fusion-Task-Lineage: ac2ec0d6-f409-40ba-a678-6dd7da7006dd
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 15:24:21 -07:00
gsxdsm
3aa32a846c FN-8910: allow held tasks to remediate review findings
Allow pre-merge remediation to proceed under project-level merge holds while preserving task-level operator holds.

- Restrict remediation holds to operator-authored task-level auto-merge settings
- Record remediation and revision-budget refusals for parked review tasks
- Keep fire-and-forget remediation failures in their review lane
- Cover shared-branch recovery behavior and document the policy

Files changed:
 .changeset/fn-8910-premerge-remediation-hold.md    |  7 ++
 docs/workflow-steps.md                             |  2 +
 packages/core/src/__tests__/task-merge.test.ts     | 44 ++++++-------
 packages/core/src/merge/task-merge.ts              | 20 +++---
 .../__tests__/executor-graph-requeue-gate.test.ts  | 60 ++++++++++++++++-
 ...cutor-live-branch-group-auto-merge-hold.test.ts | 63 ++++++++++++++++--
 .../workflow-graph-optional-step-fix.test.ts       | 24 +++++--
 .../src/__tests__/workflow-task-runtime.test.ts    | 10 ++-
 packages/engine/src/executor.ts                    | 76 ++++++++++++++++++----
 9 files changed, 244 insertions(+), 62 deletions(-)

Fusion-Task-Id: FN-8910

Fusion-Task-Lineage: b5e10f87-67cf-4acf-b125-91be5ade17a8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 15:16:12 -07:00
gsxdsm
6bd178bdcf FN-8864: add durable agent activity stream
Add a persisted, project-scoped agent activity feed with query and live delivery surfaces.

- Store sequenced, attributed activity events with privacy-safe metadata and retention.

- Emit activity across agents, workflow execution, reviews, approvals, merges, and recovery.

- Provide paginated API history and resilient SSE tailing with coverage and documentation.

- Renumber the activity migration to 0049 after reconciling main’s 0048 GitHub check-state migration.

Files changed:

 .changeset/fn-8864-agent-activity-events.md        |   7 +
 docs/architecture.md                               |   8 +
 docs/diagnostics.md                                |   4 +
 docs/storage.md                                    |   1 +
 .../__tests__/agent-activity-attribution.test.ts   |  21 +
 .../agent-activity-metadata-hygiene.test.ts        |  60 +++
 .../src/__tests__/agent-activity-writers.test.ts   |  94 +++++
 .../postgres/agent-activity-events.pg.test.ts      |  57 +++
 .../src/__tests__/postgres/schema-applier.test.ts  |  34 +-
 packages/core/src/agents/agent-store.ts            |  24 ++
 packages/core/src/agents/approval-request-store.ts |  15 +-
 packages/core/src/index.ts                         |   4 +
 .../0049_fn_8864_agent_activity_events.sql         |  24 ++
 packages/core/src/postgres/schema-applier.ts       |  15 +-
 packages/core/src/postgres/schema/project.ts       |  19 +-
 packages/core/src/store.ts                         |  17 +
 .../core/src/task-store/agent-activity-outbox.ts   |  75 ++++
 .../src/task-store/async/async-agent-activity.ts   |  71 ++++
 packages/core/src/types.ts                         |   2 +
 packages/core/src/types/agents/agents.ts           |  79 ++++
 packages/dashboard/app/api.ts                      |  54 +++
 .../src/__tests__/agent-activity-route.test.ts     |  68 ++++
 .../src/__tests__/sse-agent-activity.test.ts       | 315 +++++++++++++++
 packages/dashboard/src/routes/README.md            |   2 +-
 .../src/routes/register-setup-activity-routes.ts   |  19 +-
 packages/dashboard/src/sse.ts                      | 139 ++++++-
 .../src/__tests__/agent-activity-writers.test.ts   | 442 +++++++++++++++++++++
 packages/engine/src/executor.ts                    | 110 ++++-
 packages/engine/src/merger.ts                      |  15 +-
 packages/engine/src/self-healing.ts                |  35 +-
 30 files changed, 1809 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-8864
Fusion-Task-Lineage: 4938f35b-a0bc-4eb3-905c-178fed859cc6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 14:39:17 -07:00
gsxdsm
3ca5d4d643 FN-8913: prioritize older tasks in hold-release scheduling
Rank eligible hold-release candidates by priority, age, and task ID to prevent newer work from starving older peers.

- Reuse the core priority-age-ID comparator for hold-release evaluation.
- Add regression coverage for priority, age, dependency, and overlap scheduling behavior.
- Document the production hold-release fairness order and add a patch changeset.

Files changed:
 .changeset/fn-8913-older-first-scheduling.md       |   7 ++
 docs/architecture.md                               |   4 +-
 .../hold-release-priority-age-order.test.ts        | 113 +++++++++++++++++++++
 .../__tests__/scheduler-overlap-starvation.test.ts |  76 ++++++++++++++
 packages/engine/src/execution/hold-release.ts      |  17 +++-
 5 files changed, 212 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-8913

Fusion-Task-Lineage: 89910df9-9d3a-404c-85fa-f0797e8fa001

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 14:23:24 -07:00
gsxdsm
ad91795dac FN-8843: assign eligible executors to new tasks
Assign durable executor ownership during shared task intake.

- Resolve eligible executor owners for API, dashboard, and reserved-ID task creation.
- Preserve explicit assignments, reject invalid owners, and audit unresolved ownerless intake.
- Cover routing and PostgreSQL intake behavior with regression tests and document the contract.

Files changed:
 .changeset/fn-8843-intake-agent-assignment.md      |   7 +
 docs/architecture.md                               |   6 +
 docs/workflow-steps.md                             |  12 +-
 .../postgres/create-task-reserved-id.pg.test.ts    | 187 +++++++++++++++
 .../__tests__/task-intake-owner-resolver.test.ts   | 141 ++++++++++++
 packages/core/src/store.ts                         |  29 ++-
 packages/core/src/task-store/task-creation.ts      | 251 +++++++++++++++++----
 .../core/src/tasks/task-intake-owner-resolver.ts   | 239 ++++++++++++++++++++
 .../dashboard/src/__tests__/routes-tasks.test.ts   |  47 ++++
 .../__tests__/task-create-intake-owner.pg.test.ts  | 195 ++++++++++++++++
 .../src/routes/register-task-workflow-routes.ts    |  12 +-
 .../src/__tests__/workflow-agent-routing.test.ts   |  19 +-
 .../engine/src/agents/workflow-agent-router.ts     |  37 ++-
 13 files changed, 1120 insertions(+), 62 deletions(-)

Fusion-Task-Id: FN-8843

Fusion-Task-Lineage: b94728b4-d9e8-4a26-8fbc-7096eb797839

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 14:12:49 -07:00
gsxdsm
c1c41ac60a FN-8909: isolate orphaned planning segment recovery failures
Keep planning-time recovery active when archived or soft-deleted tasks retain timing anchors.

- Restrict orphaned planning segment candidates to live, non-archived tasks.
- Isolate per-task and sweep failures so poisoned rows do not abort healthy finalization.
- Add PostgreSQL and unit regressions for archived, deleted, and racing rows.
- Add a patch changeset for the recovery fix.

Files changed:
 .../fn-8909-orphaned-planning-segment-sweep.md     |   7 ++
 ...phaned-planning-segment-poisoned-row.pg.test.ts |  91 ++++++++++++++++++
 packages/engine/src/__tests__/self-healing.test.ts |  75 +++++++++++++++
 packages/engine/src/self-healing.ts                | 103 +++++++++++++--------
 4 files changed, 237 insertions(+), 39 deletions(-)

Fusion-Task-Id: FN-8909

Fusion-Task-Lineage: 247867ea-90ce-4768-b21c-2441788170f3

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 13:51:52 -07:00
gsxdsm
e72d9da1f7 FN-8907: hide Promote for planning tasks
Prevent planning-stage task cards from exposing an action that cannot safely advance work.

- Gate the Promote action and related cost-row layout on planning state.
- Cover planning, approval, replan, and planned hold-card render paths.
- Add a patch changeset for the dashboard behavior fix.

Files changed:
 .changeset/fn-8907-promote-planning.md             |  7 ++
 packages/dashboard/app/components/TaskCard.tsx     | 18 +++-
 .../__tests__/TaskCard.cost-badge.test.tsx         |  3 +-
 .../__tests__/TaskCard.footer-wrap.test.tsx        |  2 +-
 .../app/components/__tests__/TaskCard.test.tsx     | 97 ++++++++++++++++++++--
 5 files changed, 116 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-8907

Fusion-Task-Lineage: d64aaa0a-6675-4c59-9b21-7fd82f20ecfa

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 12:17:03 -07:00
gsxdsm
29bb6d0dc2 FN-8868: restore durable agent activity telemetry
Restore Activity telemetry for durable agent sessions.

- Emit session-start and usage events across durable agent lanes.
- Count durable agent sessions and user messages in Activity analytics.
- Cover lifecycle wiring and telemetry persistence with tests.

Files changed: .../fn-8868-durable-agent-activity-telemetry.md    |   7 +
 docs/dashboard-guide.md                            |   8 +-
 .../message-store-user-message-telemetry.test.ts   |  73 ++++++++++
 ...mmand-center-activity-durable-agents.pg.test.ts | 158 +++++++++++++++++++++
 packages/core/src/board/activity-analytics.ts      |  12 +-
 packages/core/src/stores/message-store.ts          |  16 +++
 packages/core/src/task-store/async/async-events.ts |  11 ++
 .../dashboard/src/__tests__/chat-manager.test.ts   |  88 ++++++++++++
 packages/dashboard/src/chat.ts                     |  17 +++
 .../__tests__/agent-usage-telemetry-lanes.test.ts  |  84 +++++++++++
 .../__tests__/agent-usage-telemetry-wiring.test.ts | 119 ++++++++++++++++
 .../src/__tests__/agent-usage-telemetry.test.ts    |  33 +++++
 .../engine/src/__tests__/executor-prompt.test.ts   |   8 ++
 packages/engine/src/__tests__/merger-ai.test.ts    |  11 ++
 .../src/__tests__/merger-merge-lifecycle.test.ts   |  21 ++-
 packages/engine/src/__tests__/reviewer.test.ts     |  58 +++++++-
 .../src/__tests__/step-session-executor.test.ts    |  37 ++++-
 packages/engine/src/__tests__/triage.test.ts       |  31 ++++
 packages/engine/src/agent-heartbeat.ts             |  43 ++++++
 packages/engine/src/agents/agent-logger.ts         |  30 +++-
 .../engine/src/agents/agent-usage-telemetry.ts     |  30 ++++
 packages/engine/src/execution/reviewer.ts          |  41 +++++-
 .../engine/src/execution/step-session-executor.ts  |  12 ++
 packages/engine/src/executor.ts                    |  27 +++-
 packages/engine/src/merge/merger-ai.ts             |   7 +
 packages/engine/src/merger.ts                      | 120 +++++++++++++++-
 packages/engine/src/triage.ts                      |   5 +
 27 files changed, 1085 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-8868

Fusion-Task-Lineage: 0aa2ee4e-4d40-4adc-a510-bf8f4b1c0233

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 10:28:24 -07:00
gsxdsm
5108cfc312 FN-8906: scope Stats runtime-status assertions
Scope Task Detail Stats status assertions to their semantic region.

- Centralize the shared Stats runtime-status assertion helper.
- Update Stats-tab integration assertions to avoid ambiguous status queries.

Files changed:
 ...lModal.inline-editing-and-integrations.test.tsx | 10 ++++++++--
 .../__tests__/TaskDetailModal.rendering.test.tsx   | 19 ++----------------
 .../__tests__/TaskDetailModal.test-helpers.ts      | 23 +++++++++++++++++++++-
 3 files changed, 32 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-8906
Fusion-Task-Lineage: 980f24a1-0409-46ba-9957-a87329e9831e
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 10:03:49 -07:00
gsxdsm
6ee8994767 FN-8881: test Planning Mode image import parity
Cover Planning Mode image-context import behavior at both responsive breakpoints.

- Exercise desktop and mobile Planning Mode actions with image-bearing issue comments.
- Assert provider metadata and every image-bearing body are forwarded without a client-side cap.

Files changed:
 .../__tests__/GitHubImportModal.test.tsx           | 58 ++++++++++++++--------
 1 file changed, 36 insertions(+), 22 deletions(-)

Fusion-Task-Id: FN-8881

Fusion-Task-Lineage: e14cf0a6-a967-46ff-9d65-3e4fabbf9f45

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 09:21:29 -07: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
673b962dfe FN-8904: fix GitHub PR conflict route tests
Align PR merge route mocks with the pre-flight readiness check.

- Add coverage for pre-flight merge blockers and missing head commits
- Sequence refreshed status mocks for post-failure conflict diagnostics
- Document the two-stage merge-status contract

Files changed:
 .../dashboard/src/__tests__/routes-github.test.ts  | 181 ++++++++++++++++-----
 .../dashboard/src/routes/register-git-github.ts    |  10 +-
 2 files changed, 140 insertions(+), 51 deletions(-)

Fusion-Task-Id: FN-8904

Fusion-Task-Lineage: dabf463f-4f04-47a7-8ccb-7b158adaa767

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 08:56:18 -07:00
gsxdsm
b6af36916e FN-8877: import GitHub issue images into planning mode
Planning Mode now preserves eligible GitHub issue and comment images through task creation.

- Capture image-bearing issue and cached comment bodies when starting Planning Mode.
- Persist validated image URLs with planning provenance and attach them after task creation.
- Bound browser transport and server downloads while covering the import flow with regression tests.

Files changed:
 .../fn-8877-planning-issue-image-attachments.md    |   7 ++
 docs/dashboard-guide.md                            |   4 +-
 .../dashboard/app/components/GitHubImportModal.tsx |  43 +++++--
 .../__tests__/GitHubImportModal.test.tsx           | 111 ++++++++++++++++++
 .../src/__tests__/issue-image-attachments.test.ts  |  33 +++++-
 .../planning-body-parser-integration.test.ts       |  58 ++++++++++
 .../__tests__/planning-e2e-plan-creation.test.ts   |  34 ++++++
 .../__tests__/routes-planning-issue-images.test.ts | 127 +++++++++++++++++++++
 .../src/__tests__/routes-planning-tracking.test.ts |   3 +
 packages/dashboard/src/issue-image-attachments.ts  |  37 ++++--
 packages/dashboard/src/issue-image-markup.ts       |   6 +
 packages/dashboard/src/planning.ts                 |  31 ++++-
 .../src/routes/register-planning-subtask-routes.ts |  28 ++++-
 packages/dashboard/src/server.ts                   |  33 ++++--
 14 files changed, 518 insertions(+), 37 deletions(-)

Fusion-Task-Id: FN-8877

Fusion-Task-Lineage: 057a8a2b-1c0f-4502-9fb3-7ee136d39563

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 08:31:26 -07:00
gsxdsm
661b2cf7b3 FN-8899: document unified AI merge path
Clarify that approved work is merged exclusively through the clean-room AI merge workflow.

- Replace the legacy merger entry point with runAiMerge in the architecture overview.
- Mark aiMergeTask as retained, soft-deprecated, and inert.

Files changed:
 docs/architecture.md | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Fusion-Task-Id: FN-8899

Fusion-Task-Lineage: 03436366-3f48-46c7-908e-ff97843b81d9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 07:22:31 -07:00
gsxdsm
d09e3e5554 FN-8861: preserve GitHub issue context in planning
Preserve imported GitHub issue provenance through Planning Mode and source tracking.

- Pass structured GitHub issue context from import through planning task creation.
- Append source-issue metadata to planned tasks and safely link each source issue once.
- Cover provenance persistence, duplicate suppression, and planning UI handoff.

Files changed:
 .changeset/fn-8861-planning-source-issue.md        |   7 ++
 docs/dashboard-guide.md                            |   8 +-
 docs/settings-reference.md                         |   2 +-
 packages/dashboard/app/App.tsx                     |   4 +-
 packages/dashboard/app/api/planning/planning.ts    |   3 +-
 packages/dashboard/app/components/AppModals.tsx    |   2 +-
 .../dashboard/app/components/GitHubImportModal.tsx |  13 +--
 .../dashboard/app/components/PlanningModeModal.tsx |   5 +-
 .../__tests__/GitHubImportModal.test.tsx           |  34 ++++++
 .../app/components/dashboard/PlanningKeepAlive.tsx |   1 +
 .../dashboard/app/components/dashboard/types.ts    |   2 +-
 .../app/hooks/__tests__/useModalManager.test.ts    |  26 ++++-
 packages/dashboard/app/hooks/useModalManager.ts    |  17 ++-
 .../src/__tests__/github-tracking.test.ts          | 125 ++++++++++++++++++++-
 packages/dashboard/src/__tests__/github.test.ts    |  78 ++++++++++++-
 .../__tests__/planning-e2e-plan-creation.test.ts   |  49 +++++++-
 .../src/__tests__/planning-source-issue.test.ts    |  61 ++++++++++
 .../src/__tests__/routes-planning-tracking.test.ts | 118 ++++++++++++++++++-
 packages/dashboard/src/github-tracking.ts          | 112 ++++++++++++++++--
 packages/dashboard/src/github.ts                   |  50 +++++++++
 packages/dashboard/src/planning.ts                 |  48 +++++++-
 .../dashboard/src/routes/register-git-github.ts    |  31 +----
 .../src/routes/register-planning-subtask-routes.ts |  69 +++++++++++-
 23 files changed, 785 insertions(+), 80 deletions(-)

Fusion-Task-Id: FN-8861
Fusion-Task-Lineage: b2433f70-9c1b-47ef-bafa-0434861cd0a8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 07:06:06 -07:00
gsxdsm
569d2eee91 FN-8885: add GitHub CI signal ingestion
Ingest signed GitHub CI webhook outcomes into Command Center incidents.

- Support check_suite, workflow_run, and status events with HMAC verification.
- Resolve the latest matching open incident for successful recovery events without creating tasks.
- Document GitHub signal configuration and add connector, route, and monitor-store coverage.

Files changed:
 .changeset/fn-8885-github-signals-connector.md     |   7 ++
 docs/dashboard-guide.md                            |   2 +-
 docs/settings-reference.md                         |   1 +
 docs/signals-connectors.md                         |  31 ++++-
 .../core/src/task-store/async/async-monitor.ts     |  30 ++---
 packages/dashboard/README.md                       |   5 +-
 .../src/__tests__/github-signal-source.test.ts     |  49 ++++++++
 .../src/__tests__/monitor-store.pg.test.ts         |  35 ++++++
 .../src/__tests__/register-signal-routes.test.ts   | 132 +++++++++++++++++++-
 packages/dashboard/src/monitor-store.ts            |  28 ++---
 .../dashboard/src/routes/register-signal-routes.ts |  25 ++++
 packages/dashboard/src/signal-source.ts            |  17 ++-
 packages/dashboard/src/signal-sources/github.ts    | 135 +++++++++++++++++++++
 13 files changed, 461 insertions(+), 36 deletions(-)

Fusion-Task-Id: FN-8885

Fusion-Task-Lineage: d2e9f6ed-95fe-4387-81bd-2ee67b2e1283

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 06:51:22 -07:00
gsxdsm
98ad663011 FN-8872: add structural mail reports from chat
Add a report-oriented mail workflow that turns completed chat responses into structured, reviewable messages.

- Render structural report items with dedicated visual treatment and tests across mail surfaces.
- Add report-mode composer fields and route Send as report handoffs from completed chat responses.
- Document the mail/chat workflow and publish a Fusion changeset.

Files changed:
 .changeset/fn-8872-structural-mail-ui.md           |   7 +
 docs/dashboard-guide.md                            |   3 +
 packages/dashboard/app/App.tsx                     |   9 +
 packages/dashboard/app/components/ChatView.tsx     |  36 ++--
 packages/dashboard/app/components/MailboxModal.tsx |  28 ++-
 .../app/components/MailboxStructuralItem.css       |  73 +++++++
 .../app/components/MailboxStructuralItem.tsx       | 100 ++++++++++
 packages/dashboard/app/components/MailboxView.tsx  |  50 ++++-
 .../dashboard/app/components/MessageComposer.css   |  18 ++
 .../dashboard/app/components/MessageComposer.tsx   |  57 +++++-
 .../__tests__/ChatMailReportRouting.test.tsx       | 144 ++++++++++++++
 .../__tests__/ChatView.send-as-report.test.tsx     |  96 +++++++++
 .../__tests__/MailboxStructuralItem.test.tsx       |  90 +++++++++
 .../MailboxStructuralMail.surfaces.test.tsx        | 217 +++++++++++++++++++++
 .../app/components/__tests__/MailboxView.test.tsx  |  28 +++
 .../__tests__/MessageComposer.report-mode.test.tsx | 106 ++++++++++
 .../components/__tests__/chatReportHandoff.test.ts |  26 +++
 .../dashboard/app/components/chatReportHandoff.ts  |  65 ++++++
 .../app/components/dashboard/MainContent.tsx       |   4 +
 .../dashboard/app/components/dashboard/types.ts    |   3 +
 20 files changed, 1135 insertions(+), 25 deletions(-)

Fusion-Task-Id: FN-8872

Fusion-Task-Lineage: 55e4bf5e-e7f3-48a5-8084-4090ab24710a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 06:07:01 -07:00
gsxdsm
3d6a908b95 FN-8898: document inert prerebase settings
Clarify that legacy prerebase settings are inert on the production merge path.

- Mark retained prerebase configuration and audit events as legacy-only.
- Add a static validator and tests preventing new prerebase callers.
- Update merge architecture, testing, and settings documentation.

Files changed:
 AGENTS.md                                          |   2 +-
 docs/architecture.md                               |   3 +-
 docs/settings-reference.md                         |   6 +-
 docs/testing.md                                    |   2 +-
 package.json                                       |   6 +-
 packages/core/src/types/settings/settings-scope.ts |  32 +++--
 .../src/errors/transient-merge-error-classifier.ts |  12 +-
 packages/engine/src/merge/merger-auto-prerebase.ts |  12 +-
 packages/engine/src/util/run-audit.ts              |   2 +
 scripts/__tests__/check-prerebase-inert.test.mjs   |  73 +++++++++++
 scripts/__tests__/run-static-gate-checks.test.mjs  |   1 +
 scripts/__tests__/verify-fast.test.mjs             |   1 +
 scripts/check-prerebase-inert.mjs                  | 146 +++++++++++++++++++++
 scripts/lib/source-projection.mjs                  |  87 ++++++++++++
 14 files changed, 359 insertions(+), 26 deletions(-)

Fusion-Task-Id: FN-8898

Fusion-Task-Lineage: 9cfd836d-17c2-44a0-a076-56fef0917935

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 06:01:02 -07:00
gsxdsm
94470d27ca FN-8876: harden graph-owned executor test mocks
Align executor test fixtures with graph-owned session routing.

- Route executor harnesses through durable and ephemeral graph agents.
- Select implementation sessions by their task-completion tool.
- Guard lifecycle tests against review-only and empty captures.

Files changed:
 .../engine/src/__tests__/executor-prompt.test.ts   | 389 ++++++++++-----------
 .../src/__tests__/executor-step-session.test.ts    | 185 ++++++----
 .../engine/src/__tests__/executor-test-helpers.ts  |  87 ++---
 3 files changed, 344 insertions(+), 317 deletions(-)

Fusion-Task-Id: FN-8876

Fusion-Task-Lineage: d89eeb54-0910-4dfb-890d-5f570afa9186

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 05:54:57 -07:00
gsxdsm
74b4de3d19 FN-8883: migrate executor tests to StepSessionExecutor seam
Route executor lifecycle tests through graph-owned StepSessionExecutor fixtures.

- Add reusable workflow routing, worktree refresh, and implementation-session test helpers
- Update executor prompt, step-session, pause, and completion assertions for graph-owned sessions
- Document the graph executor fixture seams for focused verification

Files changed:
 docs/testing.md                                    |   3 +
 .../__tests__/ephemeral-task-create-gate.test.ts   |  29 +-
 .../engine/src/__tests__/executor-prompt.test.ts   | 417 ++++++++++++---------
 .../src/__tests__/executor-review-verdicts.test.ts |   2 +-
 .../executor-step-numbering-zero-based.test.ts     |  23 +-
 .../src/__tests__/executor-step-session.test.ts    | 152 ++++++--
 .../executor-task-done-summary.test.ts             |  14 +-
 .../engine/src/__tests__/executor-test-helpers.ts  |  65 +++-
 8 files changed, 468 insertions(+), 237 deletions(-)

Fusion-Task-Id: FN-8883

Fusion-Task-Lineage: 7ebbee52-fe43-4e18-b0e9-2253911a0acb

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 04:59:15 -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
c60a11607f FN-8856: bound scheduler hold-release sweep work
Keep hold-release scheduling and dashboard health checks responsive under PostgreSQL load.

- Batch and cache workflow-selection reads for each hold-release pass.
- Bound sweep execution, prevent overlapping project passes, and expose sweep instrumentation.
- Time-bound PostgreSQL health probes and add regression coverage.

Files changed:
 .changeset/fn-8856-hold-release-sweep-bounded.md   |   7 +
 docs/architecture.md                               |   6 +
 docs/diagnostics.md                                |   4 +
 .../__tests__/workflow-ir-selection-cache.test.ts  |  77 ++++
 packages/core/src/index.ts                         |   2 +
 packages/core/src/store.ts                         |   6 +-
 .../core/src/task-store/workflow-definitions.ts    |  25 ++
 .../core/src/workflows/workflow-ir-resolver.ts     |  27 +-
 .../__tests__/dashboard-postgres-health.test.ts    |  76 ++++
 .../dashboard/src/dashboard-postgres-health.ts     |  34 +-
 .../__tests__/hold-release-instrumentation.test.ts |  34 ++
 .../hold-release-sweep-bounded-db-work.test.ts     | 467 +++++++++++++++++++++
 packages/engine/src/execution/hold-release.ts      | 391 +++++++++--------
 packages/engine/src/scheduler.ts                   |  56 ++-
 14 files changed, 1021 insertions(+), 191 deletions(-)

Fusion-Task-Id: FN-8856

Fusion-Task-Lineage: 5fa55d95-0760-4c4d-8c6c-6e1805109b3c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 04:37:47 -07:00
gsxdsm
e945723903 FN-8897: strengthen executor graph-routing test harnesses
Ensure executor tests verify graph-routed implementation sessions instead of passing vacuously.

- Add helpers that select sessions exposing the implementation completion tool.
- Assert routed runs reach graph review and unrouted runs suspend before session creation.
- Cover graph routing in review-verdict and worktree-liveness fixtures.

Files changed:
 .../src/__tests__/executor-review-verdicts.test.ts | 46 +++++++++++++++++++---
 .../engine/src/__tests__/executor-test-helpers.ts  | 18 +++++++++
 .../__tests__/executor-worktree-liveness.test.ts   | 45 ++++++++++++++++++---
 3 files changed, 99 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-8897

Fusion-Task-Lineage: a8feb7fc-599a-4bdf-a423-f39ed620c5d8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 04:24:47 -07:00
gsxdsm
cf171bc4b2 FN-8900: rescue deterministic Kimi K3 catalog test
Rescue Kimi K3 route coverage with a deterministic bundled-catalog registry seam.

- Use pi-ai's real Kimi catalog without live registry refresh.
- Restore route merge and deduplication coverage and remove the paired quarantine records.
- Document the measured refresh stall and preserve the existing timeout budget.

Files changed:
 docs/testing.md                                    |  3 +-
 packages/dashboard/package.json                    |  1 +
 .../src/__tests__/_kimi-model-catalog-fixture.ts   | 40 +++++++++
 ...ister-model-routes-kimi-k3-supplemental.test.ts | 75 ++++++-----------
 packages/dashboard/vitest.config.ts                | 19 ++---
 pnpm-lock.yaml                                     | 98 +++++++++++++++++-----
 scripts/lib/test-quarantine.json                   |  5 --
 7 files changed, 153 insertions(+), 88 deletions(-)

Fusion-Task-Id: FN-8900

Fusion-Task-Lineage: 6d4986ed-bc93-479f-85fb-510d17ced4b5

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 03:47:56 -07:00
gsxdsm
7c034f4862 FN-8888: emit approval mail for triage pauses
Route triage approval pauses through the shared structural-mail helper.

- Pass the runtime message store into triage processing.
- Emit idempotent, fail-soft approval mail when triage pauses for approval.
- Cover triage approval-mail delivery and publish the feature changeset.

Files changed:
 .changeset/fn-8888-triage-approval-mail.md         |   7 ++
 .../src/__tests__/approval-mail-emission.test.ts   | 101 +++++++++++++++++++++
 packages/engine/src/runtimes/in-process-runtime.ts |   1 +
 packages/engine/src/triage.ts                      |  14 +++
 4 files changed, 123 insertions(+)

Fusion-Task-Id: FN-8888

Fusion-Task-Lineage: f0970c59-abca-4081-b213-c9aec0833416

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 03:15:00 -07:00
gsxdsm
c9f8c3d7dd FN-8896: route executor harnesses through graph agent store
Migrate executor test harnesses to exercise graph principal routing.

- Add routing-aware executor fixtures backed by the workflow agent store.
- Assert executor sessions route a principal before opening.
- Mock worktree acquisition phases so liveness tests reach containment gates.

Files changed:
 .../src/__tests__/executor-review-verdicts.test.ts | 60 +++++++++++++++----
 .../__tests__/executor-worktree-liveness.test.ts   | 68 +++++++++++++++++++---
 2 files changed, 108 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-8896

Fusion-Task-Lineage: 3b01ccb3-2900-4cc8-8439-09c0127d8476

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 02:50:06 -07:00
gsxdsm
7745c59e63 FN-8880: align shared-member recovery consent tests
Align recovery expectations with the shared-member consent policy.

- Hold non-opted-in shared members when project auto-merge is off.
- Cover explicit per-task auto-merge opt-in during startup and self-healing recovery.
- Document the project-off consent rule for branch-group members.

Files changed:
 AGENTS.md                                          |  2 +-
 docs/architecture.md                               |  4 +-
 packages/engine/src/__tests__/project-engine.test.ts    | 41 +++++++++++------
 packages/engine/src/__tests__/self-healing.test.ts | 51 +++++++++++++++++++---
 4 files changed, 75 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-8880

Fusion-Task-Lineage: 3118064d-59ca-4c2e-89a8-442ee8876cf8

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 02:41:02 -07:00
gsxdsm
7c4b29f642 FN-8895: harden group merge coordinator store fakes
Ensure group-merge coordinator tests exercise the production store seams without warning suppression.

- Provide scoped settings and branch-group task fake methods used by promotion evaluation
- Await promotion evaluation and fail the fixture on missing-store-method warnings
- Assert branch-group task lookup is reached during the merge drain

Files changed:
 packages/engine/src/__tests__/group-merge-coordinator.test.ts | 59 ++++++++++++++++++----
 1 file changed, 49 insertions(+), 10 deletions(-)

Fusion-Task-Id: FN-8895

Fusion-Task-Lineage: 99748c07-2083-41f9-b776-da644bf1857a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 02:28:33 -07:00
gsxdsm
ef99dcd1b0 FN-8894: model advancing clocks in oversight tests
Ensure TaskDetailModal mutation fixtures mirror server update timestamps.

- Add an advancing-clock task fixture helper for mutation responses
- Update desktop and mobile oversight control mocks to use newer task snapshots
- Cover equal-clock merge behavior and document the fixture contract

Files changed:
 docs/testing.md                                    |  6 ++
 .../TaskDetailModal.oversight-controls.test.tsx    | 74 +++++++++++++++++++++-
 .../TaskDetailModal.oversight-mobile.test.tsx      |  3 +-
 .../__tests__/TaskDetailModal.test-helpers.ts      | 15 +++++
 4 files changed, 94 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-8894

Fusion-Task-Lineage: 614eb85a-0fbf-4f44-a08d-347f2511499b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 02:23:54 -07:00
gsxdsm
ccf2ffe93d FN-8854: document rebase settings and configuration audits
Document the worktree rebase controls and configuration audit surfaces.

- Describe worktree rebase defaults, remote resolution, and legacy pipeline reachability
- Explain configuration revisions and Activity Log query contracts
- Add source-aligned documentation contract coverage

Files changed:
 docs/diagnostics.md                                | 22 ++++-
 docs/settings-reference.md                         | 15 ++++
 .../configuration-audit-documentation.test.ts      | 94 ++++++++++++++++++++++
 3 files changed, 130 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-8854

Fusion-Task-Lineage: 5807280f-e1da-4847-8337-1c27c8ed695f

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 02:06:44 -07:00
gsxdsm
555316c12f FN-8892: test responsive status badge fallbacks
Cover lifecycle badge fallback behavior across AppModals status surfaces.

- Verify authoritative status refreshes replace stale Planning labels with In Progress lifecycle badges.
- Exercise board, desktop list, mobile list, and detail modal status renderers.
- Isolate task cache and viewport mocks for deterministic responsive assertions.

Files changed:
 .../app/components/__tests__/AppModals.test.tsx    | 145 ++++++++++++++++++++-
 1 file changed, 140 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-8892

Fusion-Task-Lineage: 34ccda74-3f29-4bc3-8221-f44983a97a5e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 02:01:05 -07:00
gsxdsm
56e330f66e FN-8887: fix dependency link test hydration
Align TaskDetailModal dependency tests with the full-task hydration contract.

- Assert that full task details skip mount fetches before dependency navigation
- Cover unscoped dependency requests and slim-task hydration before link fetches
- Preserve click, keyboard, failure, and blocking-link assertions with scoped mocks

Files changed:
 ...etailModal.responsive-and-dependencies.test.tsx | 94 +++++++++++++++++-----
 1 file changed, 73 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-8887

Fusion-Task-Lineage: db910342-4cde-418c-99fa-c0f19498d5e2

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 01:45:52 -07:00
gsxdsm
4cb7bea967 FN-8882: add merge-lane fixture drift test
Prevent unseeded ProjectEngine merge-lane fields from causing prototype fake TypeErrors.

- Inspect the auto-merge state block for declared fields
- Require fixture defaults or documented drain-path exclusions for each field

Files changed:
 ...project-engine-merge-lane-fixture-drift.test.ts | 55 ++++++++++++++++++++++
 1 file changed, 55 insertions(+)

Fusion-Task-Id: FN-8882

Fusion-Task-Lineage: c5cb270d-d988-43e7-a554-7f9bc8770c5c

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-09 01:40:34 -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