Commit Graph

13128 Commits

Author SHA1 Message Date
gsxdsm
27d5bbc80e FN-8751: add depth to expanded sidebar
Give the expanded desktop sidebar a floating visual layer above board content.

- Elevate the expanded sidebar with tokenized shadow and stacking context.
- Keep collapsed and mobile navigation visually flat.
- Cover the depth behavior with CSS-focused component tests.

Files changed:
 .../dashboard/app/components/LeftSidebarNav.css    |  6 +++++
 .../components/__tests__/LeftSidebarNav.test.tsx   | 26 +++++++++++++++++++---
 2 files changed, 29 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-8751

Fusion-Task-Lineage: 2c3197dc-f4f4-4d48-81bb-3fab67310e60

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-02 22:47:04 -07:00
gsxdsm
34ed2d1ffb FN-8750: redesign resolved GitHub issues table
Improve the resolved GitHub issues table across desktop, tablet, and mobile layouts.

- Add responsive table styling with semantic links and readable metadata.
- Add table hooks and regression coverage for layout and token use.
- Capture desktop and mobile layout smoke screenshots.

Files changed:
 ...mmand-center-css-token-canonicalization.test.ts |  15 ++
 .../components/command-center/areas/GithubArea.tsx |  37 +++--
 .../areas/__tests__/areas.github-signals.test.tsx  |  27 ++--
 .../app/components/command-center/areas/areas.css  | 151 +++++++++++++++++++++
 .../dashboard/scripts/browser-layout-smoke.mjs     | 120 +++++++++++++++-
 screenshots/fn-8750-resolved-github-desktop.png    |   3 +
 screenshots/fn-8750-resolved-github-mobile.png     |   3 +
 7 files changed, 333 insertions(+), 23 deletions(-)

Fusion-Task-Id: FN-8750

Fusion-Task-Lineage: b229bad6-7d32-4a04-9681-c4184c46c015

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-02 21:50:26 -07:00
gsxdsm
a3bb584bff chore(release): v0.74.0
Version bump via changesets.
2026-08-02 20:31:14 -07:00
gsxdsm
bc34b724ac chore(release): v0.74.0-beta.9
Version bump via changesets.
2026-08-02 20:00:46 -07:00
gsxdsm
19e9f5bc88 chore(release): require interactive confirm; drop authorized/--yes skips
Remove the typed authorization phrase and the --yes/-y auto-confirm path so
every real release must confirm y/N in an interactive terminal. Reject --yes
with a clear error so old muscle memory cannot skip the proceed prompt.
2026-08-02 19:58:37 -07:00
gsxdsm
da17a57bde FN-8731: refresh task definition prompts during planning
Keep the visible task definition current while planning and Plan Review can revise it.

- Refresh Definition prompts when the visible tab opens and poll during active planning lifecycles.
- Preserve inline edit drafts while applying authoritative prompt updates.
- Add lifecycle and hidden-host coverage, documentation, and a patch changeset.

Files changed:
 .changeset/fn-8731-definition-prompt-refresh.md    |   7 ++
 docs/dashboard-guide.md                            |   1 +
 .../dashboard/app/components/TaskDetailModal.tsx   | 106 ++++++++++++++++++---
 .../TaskDetailModal.definition-actions.test.tsx    |  91 +++++++++++++++++-
 .../TaskDetailModal.popup-hidden-gating.test.tsx   |  25 ++++-
 5 files changed, 215 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-8731

Fusion-Task-Lineage: b5536ad7-cbe1-42ee-a6df-6e997eeeda05

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-02 19:39:57 -07:00
gsxdsm
4a67883bb0 fix: restore main full-suite after schema, hooks, and ledger drift (#3312)
## Summary
Restores the non-blocking full suite on `main` after a multi-package
failure cluster (latest red run:
[30777132347](https://github.com/Runfusion/Fusion/actions/runs/30777132347)).

### Product fixes
- **MissionManager**: move `handleDiscardInterviewSession` /
`handleConfirmDelete` **above** `if (!isActive) return null` so hiding
the inline Missions tab does not drop hooks (`Rendered fewer hooks than
expected`).
- **task-update dependency re-spec**: emit `task:moved` only when the
column actually changes, with resolved endpoints (not hardcoded
`todo`→`triage`); fixes `laneCache.set is not a function` harness
failures and deleted-column announcements.

### Bookkeeping / suite alignment
- **Schema applier tests**: baseline `0042`, project table count `104`
(+4 FN-8685 consumer tables), historical `0000` fixture includes
`mission_validator_runs` for 0042 upgrades, version lists include
0041/0042.
- **Ledgers**: archived-gate TS inventory (lifecycle-ops), legacy
collection ledger (`LEGACY_PLANNER_WAKE_COLUMNS`), worktree capacity
audited bounds + two admission readers (scheduler + triage).
- **Desktop**: pin `actions/setup-java@v5.6.0` after Dependabot bump.
- **Dashboard tests**: FN-8701 ToolCallDetails nested `<pre>`;
CreateRoomModal re-pins agent mock after empty-once.

## Test plan
- [x] `@fusion/core` task-update + ledger tests
- [x] `@fusion/core` schema-applier subset (table count,
0000/0001/0002/0003 upgrades, concurrent)
- [x] `@fusion/dashboard` AgentLogViewer / CreateRoomModal /
MissionManager overview tests
- [x] `@fusion/desktop` release-workflow tests
- [ ] CI full-suite green on this PR

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

- **Bug Fixes**
- Dependency re-specification now moves held tasks to the resolved
workflow intake lane when available.
  - Task move events are emitted only when a task’s column changes.
- Improved mission draft deletion handling for locked, missing, and
failed operations.
- Prevented mission management issues when inline Missions are shown or
hidden.
  - Updated database migration handling for lifecycle-related tables.

- **Tests**
- Expanded coverage for workflow lanes, database upgrades, worktree
limits, and release workflows.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-02 19:27:49 -07:00
gsxdsm
5931e10345 FN-8730: add Midnight dashboard theme
Add a persisted Midnight palette with consistent first-paint behavior across dashboard surfaces.

- Register Midnight in shared theme metadata and web/Electron startup validators
- Define light and dark Midnight tokens plus selector swatches
- Cover selection and bootstrap validation, and document the new preset

Files changed:
 .changeset/fn-8730-midnight-theme.md               |  7 ++
 docs/dashboard-guide.md                            |  5 +-
 docs/settings-reference.md                         |  2 +-
 packages/core/src/types/execution-and-ui.ts        |  5 ++
 .../dashboard/app/__tests__/midnight-theme.test.ts | 94 ++++++++++++++++++++++
 .../dashboard/app/components/ThemeSelector.css     | 14 ++++
 .../components/__tests__/ThemeDropdown.test.tsx    | 54 ++++++++++++-
 packages/dashboard/app/components/themeOptions.ts  |  1 +
 packages/dashboard/app/index.html                  |  3 +-
 packages/dashboard/app/public/theme-data.css       | 86 +++++++++++++++++++-
 packages/desktop/src/renderer/index.html           |  2 +
 11 files changed, 267 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-8730

Fusion-Task-Lineage: 8e2d81bc-37f1-4381-8985-01e83cad06bd

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-02 19:23:28 -07:00
gsxdsm
0e69ed9a5b fix: stop stale-active-branch rescue spam for done squash leftovers (#3311)
## Summary
- Local `fusion/*` branches for **done** tasks kept unique tip SHAs
after squash/AI merge, so self-healing logged
`stale-active-branch-rescue-needed` on every maintenance sweep without
ever deleting them.
- **Completion fan-out** now force-deletes the task branch even when
unique commits remain (squash-safe).
- **`reclaim-stale-active-branches`** force-deletes complete-lane
leftovers (`reason=complete-column-unique-commits-force`) and no longer
emits rescue-needed for those lanes; non-complete columns still warn and
preserve unmerged work. Archived lanes still skip reclaim entirely.

Also cleaned up 116 leftover local fusion branches on this machine
(done/orphan only; 9 active kept).

## Test plan
- [x] `pnpm --filter @fusion/engine exec vitest run
src/__tests__/self-healing-completion-fanout.test.ts
src/__tests__/self-healing.test.ts -t "SelfHealingManager
reclaimStaleActiveBranches|self-healing completion
fan-out|force-deletes"`
- [ ] After merge/restart engine: confirm logs no longer spam
rescue-needed for done tasks
- [ ] Confirm active todo/in-progress fusion branches still get
rescue-needed when unique and no worktree

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

## Summary by CodeRabbit

* **Bug Fixes**
* Improved cleanup of stale task branches after completion, including
branches with unique commits remaining after squash or AI-assisted
merges.
* Completed tasks now reliably remove residual branches and worktree
metadata.
* Non-completed tasks continue to preserve recoverable branches and
display rescue warnings.
* Added clearer recovery logging and audit records for forced branch
cleanup.

<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-02 19:05:59 -07:00
gsxdsm
0ae6c396d0 chore(release): v0.74.0-beta.8
Version bump via changesets.
2026-08-02 18:32:41 -07:00
gsxdsm
6cc687d3a3 FN-8728: retry incomplete planner runs before review
Retry planner attempts until a clean, changed artifact is ready for Plan Review.

- Track each planning attempt's prompt baseline and fallback provenance.
- Require a runtime-owned fallback-dispatch boundary before review handoff.
- Back off and surface actionable errors for empty, unchanged, or fallback-engaged attempts.

Files changed:
 .changeset/fn-8728-planner-retry-before-review.md |   7 +
 docs/architecture.md                              |   2 +-
 packages/engine/src/__tests__/triage.test.ts      | 492 ++++++++++++++++++++++
 packages/engine/src/agent-runtime.ts              |   8 +
 packages/engine/src/agent-session-helpers.ts      |   3 +
 packages/engine/src/pi.ts                         |  14 +-
 packages/engine/src/runtime-resolution.ts         |  14 +-
 packages/engine/src/triage.ts                     | 135 +++++-
 8 files changed, 656 insertions(+), 19 deletions(-)

Fusion-Task-Id: FN-8728

Fusion-Task-Lineage: e7581d29-5bd6-43dc-aa0b-6594b9dd9c0d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-02 18:26:18 -07:00
gsxdsm
4d933b19f6 FN-8729: move terminal close control after new tab
Keep the terminal close control last in the non-embedded terminal header across responsive layouts.

- Render one shared close control after terminal tabs, workspace picker, and status.
- Preserve the mobile corner ordering and prevent close-control shrinkage.
- Add ordering coverage for desktop, mobile, workspace, and status states.
- Add a patch changeset for the toolbar fix.

Files changed:
 .changeset/fn-8729-terminal-toolbar.md             |  7 +++
 .../dashboard/app/components/TerminalModal.css     | 15 +++---
 .../dashboard/app/components/TerminalModal.tsx     | 56 ++++++++--------------
 .../components/__tests__/TerminalModal.test.tsx    | 51 ++++++++++++++++++++
 4 files changed, 83 insertions(+), 46 deletions(-)

Fusion-Task-Id: FN-8729

Fusion-Task-Lineage: ba9b039c-557d-4692-8203-bf764388d039

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-02 17:50:17 -07:00
gsxdsm
6d8492ba72 chore(FN): add changeset for settle-window sync task-move fix
Fusion-Task-Id: FN-scheduler-settle-window
2026-08-02 17:39:46 -07:00
gsxdsm
a84e16118a fix(engine): keep settle-window ledger updates synchronous on task moves
FN-8656 moved the recentEngineTodoRequeues / dispatch-oscillation reset behind
await resolveTaskParkedColumns, racing sync delete/update handlers. A hold
requeue then delete in the same tick could re-set the settle guard after the
clear and leave the card undispatchable. Consume the sync parked lanes in the
emitter prologue again.
2026-08-02 17:33:11 -07:00
gsxdsm
f21c07929a fix(dashboard): align mid-tablet shell chrome with JS viewport mode
Tablet-class devices at ≤768 CSS px were mode=tablet (left sidebar on, no
MobileNavBar) while pure max-width:768 rules hid the sidebar and elevated the
footer for a phantom tab bar. Publish data-viewport-mode and key shell CSS off
it so tablet keeps the left sidebar and a true bottom footer.
2026-08-02 17:27:31 -07:00
gsxdsm
1e7f510ee2 fix: stop blocking tasks on open-PR file claims — board tasks are the only blockers
Remove the FN-8700 PR/file-claim blocking mechanism end to end (operator
decision after FN-8728 parked on unrelated PR #2398):

- Drop the AGENTS.md claim-check rule and scripts/check-file-claimed.mjs
- Executor prompt + fn_task_done no longer accept pr:N refs or treat open
  PRs as blocked-exit reasons
- execution-block-classifier classifies on Fusion task dependencies only;
  legacy pr refs are discarded, reason prose never makes a block durable
- Remove the session-log BLOCKED promotion and the gh-backed
  reconcile-external-pr-blockers self-healing sweep
- Legacy file-claim parks are no longer honored, so previously PR-blocked
  rows recover via normal paths

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-02 17:06:38 -07:00
gsxdsm
4c0ead498a FN-8725: label pending authentication accounts
Add visible labels and responsive spacing for pending credential account fields.

- Associate provider-specific account-name labels with pending credential inputs.
- Preserve account labels through API-key saving and OAuth login actions.
- Cover labeled pending fields for API-key and OAuth credential instances.

Files changed:
 .../AuthenticationSection.instances.test.tsx       | 24 +++++++++++++++++++---
 .../settings/sections/AuthenticationSection.css    |  4 ++++
 .../settings/sections/AuthenticationSection.tsx    | 11 +++++++++-
 3 files changed, 35 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-8725

Fusion-Task-Lineage: df0b6f7d-d1fb-471a-a277-60c794f6e7a7

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 22:38:06 -07:00
dependabot[bot]
df0b295454 chore(deps): bump actions/setup-java from 4 to 5.6.0 (#3303)
Bumps [actions/setup-java](https://github.com/actions/setup-java) from 4
to 5.6.0.
<details>
<summary>Release notes</summary>
<p><em>Sourced from <a
href="https://github.com/actions/setup-java/releases">actions/setup-java's
releases</a>.</em></p>
<blockquote>
<h2>v5.6.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Backport to v5: Add Maven compiler problem matcher for javac
diagnostics by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1087">actions/setup-java#1087</a></li>
<li>feat: expose cache-primary-key output (<a
href="https://redirect.github.com/actions/setup-java/issues/597">#597</a>)
[v5 backport] by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1089">actions/setup-java#1089</a></li>
<li>dist: Cover Tencent Kona JDK 25 (<a
href="https://redirect.github.com/actions/setup-java/issues/1108">#1108</a>)
[v5 backport] by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1110">actions/setup-java#1110</a></li>
<li>Backport <a
href="https://redirect.github.com/actions/setup-java/issues/1111">#1111</a>:
Preserve Maven toolchains across repeated setup-java runs (<a
href="https://redirect.github.com/actions/setup-java/issues/1099">#1099</a>)
by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1113">actions/setup-java#1113</a></li>
<li>Backport <a
href="https://redirect.github.com/actions/setup-java/issues/1097">#1097</a>/<a
href="https://redirect.github.com/actions/setup-java/issues/1098">#1098</a>
to v5: cache Maven and Gradle wrapper distributions separately by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1122">actions/setup-java#1122</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-java/compare/v5...v5.6.0">https://github.com/actions/setup-java/compare/v5...v5.6.0</a></p>
<h2>v5.5.0</h2>
<h2>What's Changed</h2>
<ul>
<li>chore: enforce pre-PR validation (aggregate scripts, git hooks, PR
checklist) by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1061">actions/setup-java#1061</a></li>
<li>Bump github/codeql-action from 3 to 4 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-java/pull/1069">actions/setup-java#1069</a></li>
<li>Bump actions/checkout from 6 to 7 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-java/pull/1068">actions/setup-java#1068</a></li>
<li>Bump actions/setup-python from 5 to 6 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-java/pull/1067">actions/setup-java#1067</a></li>
<li>Bump <code>@​typescript-eslint/parser</code> from 8.61.1 to 8.62.0
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-java/pull/1062">actions/setup-java#1062</a></li>
<li>feat: Add verify-signature plumbing and Temurin+Microsoft
verification support by <a
href="https://github.com/johnoliver"><code>@​johnoliver</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/1060">actions/setup-java#1060</a></li>
<li>Updated jetbrains test: https.request() now catches errors. This
fixes leaking tests as well by <a
href="https://github.com/jmjaffe37"><code>@​jmjaffe37</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/1070">actions/setup-java#1070</a></li>
<li>Fix arm64 e2e workflow tests mislabeled as x64 by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a>
with <a href="https://github.com/Copilot"><code>@​Copilot</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1073">actions/setup-java#1073</a></li>
<li>feat: suppress Maven transfer progress via MAVEN_ARGS by default
(add show-download-progress input) by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1053">actions/setup-java#1053</a></li>
<li>feat: Disable interactiveMode in generated Maven settings.xml by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a>
with <a href="https://github.com/Copilot"><code>@​Copilot</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1052">actions/setup-java#1052</a></li>
<li>Bump prettier from 3.6.2 to 3.9.1 by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-java/pull/1066">actions/setup-java#1066</a></li>
<li>chore(deps-dev): bump eslint-plugin-jest from 29.0.1 to 29.15.4 by
<a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-java/pull/1074">actions/setup-java#1074</a></li>
<li>fix: Maven Toolchains grows unexpectedly by <a
href="https://github.com/Okeanos"><code>@​Okeanos</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/534">actions/setup-java#534</a></li>
<li>dist: Support Tencent Kona JDK by <a
href="https://github.com/johnshajiang"><code>@​johnshajiang</code></a>
in <a
href="https://redirect.github.com/actions/setup-java/pull/672">actions/setup-java#672</a></li>
<li>feat: Add set-default option by <a
href="https://github.com/gsmet"><code>@​gsmet</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/1017">actions/setup-java#1017</a></li>
<li>docs: document problem matcher (and how to disable it), Maven
Wrapper caching, and generated interactiveMode by <a
href="https://github.com/brunoborges"><code>@​brunoborges</code></a> in
<a
href="https://redirect.github.com/actions/setup-java/pull/1075">actions/setup-java#1075</a></li>
<li>feat: Add distribution detection support to .sdkmanrc file by <a
href="https://github.com/lukaszgyg"><code>@​lukaszgyg</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/975">actions/setup-java#975</a></li>
</ul>
<h2>New Contributors</h2>
<ul>
<li><a href="https://github.com/jmjaffe37"><code>@​jmjaffe37</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-java/pull/1070">actions/setup-java#1070</a></li>
<li><a href="https://github.com/gsmet"><code>@​gsmet</code></a> made
their first contribution in <a
href="https://redirect.github.com/actions/setup-java/pull/1017">actions/setup-java#1017</a></li>
<li><a href="https://github.com/lukaszgyg"><code>@​lukaszgyg</code></a>
made their first contribution in <a
href="https://redirect.github.com/actions/setup-java/pull/975">actions/setup-java#975</a></li>
</ul>
<p><strong>Full Changelog</strong>: <a
href="https://github.com/actions/setup-java/compare/v5...v5.5.0">https://github.com/actions/setup-java/compare/v5...v5.5.0</a></p>
<h2>v5.4.0</h2>
<h2>What's Changed</h2>
<ul>
<li>Bump <code>@​typescript-eslint/parser</code> from 8.48.0 to 8.61.1
by <a
href="https://github.com/dependabot"><code>@​dependabot</code></a>[bot]
in <a
href="https://redirect.github.com/actions/setup-java/pull/1021">actions/setup-java#1021</a></li>
<li>Fix codeql workflow permissions by <a
href="https://github.com/jsoref"><code>@​jsoref</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/993">actions/setup-java#993</a></li>
<li>fix CodeQL permissions by <a
href="https://github.com/gdams"><code>@​gdams</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/1025">actions/setup-java#1025</a></li>
<li>fix: reject non-semver candidate versions in isVersionSatisfies by
<a href="https://github.com/sproctor"><code>@​sproctor</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/1009">actions/setup-java#1009</a></li>
<li>Bump <code>@​actions/cache</code> to 5.1.0, handle cache write
denied by <a
href="https://github.com/jasongin"><code>@​jasongin</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/1026">actions/setup-java#1026</a></li>
<li>Add Maven Wrapper cache feature by <a
href="https://github.com/mahabaleshwars"><code>@​mahabaleshwars</code></a>
in <a
href="https://redirect.github.com/actions/setup-java/pull/1027">actions/setup-java#1027</a></li>
<li>Spelling by <a
href="https://github.com/jsoref"><code>@​jsoref</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/713">actions/setup-java#713</a></li>
<li>add link to advanced configuration for JetBrains by <a
href="https://github.com/robstoll"><code>@​robstoll</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/850">actions/setup-java#850</a></li>
<li>docs(action): fix missing required or default fields by <a
href="https://github.com/kranthipoturaju"><code>@​kranthipoturaju</code></a>
in <a
href="https://redirect.github.com/actions/setup-java/pull/1007">actions/setup-java#1007</a></li>
<li>feat: add microsoft openjdk 17.0.18 by <a
href="https://github.com/al-kau"><code>@​al-kau</code></a> in <a
href="https://redirect.github.com/actions/setup-java/pull/1002">actions/setup-java#1002</a></li>
</ul>
<!-- raw HTML omitted -->
</blockquote>
<p>... (truncated)</p>
</details>
<details>
<summary>Commits</summary>
<ul>
<li><a
href="03ad4de099"><code>03ad4de</code></a>
Backport <a
href="https://redirect.github.com/actions/setup-java/issues/1097">#1097</a>/<a
href="https://redirect.github.com/actions/setup-java/issues/1098">#1098</a>:
cache Maven and Gradle wrapper distributions separately...</li>
<li><a
href="d229d2e858"><code>d229d2e</code></a>
Backport <a
href="https://redirect.github.com/actions/setup-java/issues/1111">#1111</a>:
Preserve Maven toolchains across repeated setup-java runs (<a
href="https://redirect.github.com/actions/setup-java/issues/1">#1</a>...</li>
<li><a
href="bbf0f69670"><code>bbf0f69</code></a>
dist: Cover Tencent Kona JDK 25 (<a
href="https://redirect.github.com/actions/setup-java/issues/1110">#1110</a>)</li>
<li><a
href="513edc4f87"><code>513edc4</code></a>
feat: expose cache-primary-key output (<a
href="https://redirect.github.com/actions/setup-java/issues/597">#597</a>)
[v5 backport] (<a
href="https://redirect.github.com/actions/setup-java/issues/1089">#1089</a>)</li>
<li><a
href="62df799a9c"><code>62df799</code></a>
Add Maven compiler problem matcher for javac diagnostics (<a
href="https://redirect.github.com/actions/setup-java/issues/1087">#1087</a>)</li>
<li><a
href="176156a187"><code>176156a</code></a>
chore: bump version to 5.6.0 for v5 release line</li>
<li><a
href="bf7b8deac2"><code>bf7b8de</code></a>
build: rebuild dist for backported changes (<a
href="https://redirect.github.com/actions/setup-java/issues/1079">#1079</a>,
<a
href="https://redirect.github.com/actions/setup-java/issues/1083">#1083</a>,
<a
href="https://redirect.github.com/actions/setup-java/issues/1084">#1084</a>)</li>
<li><a
href="0173e6dd1b"><code>0173e6d</code></a>
Infer distribution from asdf .tool-versions vendor prefix (<a
href="https://redirect.github.com/actions/setup-java/issues/1084">#1084</a>)</li>
<li><a
href="f45cd82b67"><code>f45cd82</code></a>
Rename jdkFile input to jdk-file with deprecated alias (<a
href="https://redirect.github.com/actions/setup-java/issues/1083">#1083</a>)</li>
<li><a
href="e2863ad499"><code>e2863ad</code></a>
Map Zulu x86 architecture to i686 for Azul Metadata API (<a
href="https://redirect.github.com/actions/setup-java/issues/1079">#1079</a>)</li>
<li>Additional commits viewable in <a
href="https://github.com/actions/setup-java/compare/v4...v5.6.0">compare
view</a></li>
</ul>
</details>
<br />


[![Dependabot compatibility
score](https://dependabot-badges.githubapp.com/badges/compatibility_score?dependency-name=actions/setup-java&package-manager=github_actions&previous-version=4&new-version=5.6.0)](https://docs.github.com/en/github/managing-security-vulnerabilities/about-dependabot-security-updates#about-compatibility-scores)

Dependabot will resolve any conflicts with this PR as long as you don't
alter it yourself. You can also trigger a rebase manually by commenting
`@dependabot rebase`.

[//]: # (dependabot-automerge-start)
[//]: # (dependabot-automerge-end)

---

<details>
<summary>Dependabot commands and options</summary>
<br />

You can trigger Dependabot actions by commenting on this PR:
- `@dependabot rebase` will rebase this PR
- `@dependabot recreate` will recreate this PR, overwriting any edits
that have been made to it
- `@dependabot show <dependency name> ignore conditions` will show all
of the ignore conditions of the specified dependency
- `@dependabot ignore this major version` will close this PR and stop
Dependabot creating any more for this major version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this minor version` will close this PR and stop
Dependabot creating any more for this minor version (unless you reopen
the PR or upgrade to it yourself)
- `@dependabot ignore this dependency` will close this PR and stop
Dependabot creating any more for this dependency (unless you reopen the
PR or upgrade to it yourself)


</details>

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
Co-authored-by: gsxdsm <gsxdsm@users.noreply.github.com>
2026-08-01 22:35:17 -07:00
gsxdsm
cfc63fc8f5 FN-8724: stabilize hydration freshness tests
Make the useTasks hydration freshness coverage deterministic and restore it to the dashboard suite.

- Control the system clock for hydration fixtures and flush async updates without advancing time.
- Remove the rescued test from the dashboard exclusion list and quarantine ledger.

Files changed:
 .../__tests__/useTasks-hydration-freshness.test.ts | 30 ++++++++++++++--------
 packages/dashboard/vitest.config.ts                |  8 ------
 scripts/lib/test-quarantine.json                   |  5 ----
 3 files changed, 19 insertions(+), 24 deletions(-)

Fusion-Task-Id: FN-8724

Fusion-Task-Lineage: 1d764e2c-0975-4d26-92c6-187a6a94caee

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 20:30:16 -07:00
gsxdsm
546a19aef6 chore(release): v0.74.0-beta.7
Version bump via changesets.
2026-08-01 20:22:07 -07:00
gsxdsm
4fb873f465 FN-8722: fix GitHub Import sheet spacing
Fix standalone GitHub Import content alignment on mobile and short sheet viewports.

- Remove the standalone resize-handle gutter when the FloatingWindow sheet contract applies.
- Add fixture and browser-smoke coverage for standalone, embedded, and detail import layouts.
- Document the shared short-height sheet geometry behavior and add a patch changeset.

Files changed:
 .changeset/fn-8722-github-import-mobile-spacing.md |  7 ++
 docs/dashboard-guide.md                            |  3 +-
 .../__tests__/browser-layout-smoke-fixture.test.ts | 17 +++++
 .../dashboard/app/components/FloatingWindow.css    | 12 ++++
 .../__tests__/GitHubImportModal.test.tsx           | 18 +++++
 .../dashboard/scripts/browser-layout-smoke.mjs     | 78 ++++++++++++++++++++++
 6 files changed, 134 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-8722

Fusion-Task-Lineage: cc812078-b0b5-4223-9435-ed77d80f2b47

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 20:04:41 -07:00
Phil Larson
fab2b3a7b1 fix(i18n): restore reverted-task locale parity (#3302)
## Summary
- add reverted-task resolution keys to every secondary app catalog
- restore structural locale parity after the reverted-task dashboard UI
landed
- include labeled patch release metadata

## Test plan
- `pnpm --filter @fusion/i18n test`
- `pnpm i18n:status`
- `pnpm check:changesets -- --strict`
- `pnpm build`

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

* **Localization**
* Added localized labels for reverted tasks, resolution actions,
revision actions, and related task titles in French, Korean, Simplified
Chinese, and Traditional Chinese.
* Added Spanish locale entries for consistent support of these task
actions.
  * Improved terminology coverage across supported secondary locales.
<!-- end of auto-generated comment: release notes by coderabbit.ai -->
2026-08-01 19:18:15 -07:00
gsxdsm
9e0f29abc9 fix: durable parks for file-claim and PR blockers (FN-8700)
Classify blocked exits so check-file-claimed / open-PR collisions never
auto-replan. Park failed with externalBlockers metadata (pr:N supported),
promote BLOCKED session logs instead of incomplete-step requeue, thrash-
exhaust after 3 identical durable blocks, and clear parks when gh reports
blocking PRs merged or closed.
2026-08-01 18:34:42 -07:00
gsxdsm
af138d73ee test: harden engine fixtures after lane and session refactors
Scope stuck-requeue merge-base failure to the task-branch proof so setup
still reaches the session; loosen MCP coverage to allow let session
rebinding; mock getRootDir for stranded-hold capacity; and expect the
scheduler parked-role site to use awaited resolveTaskParkedColumns after
FN-8656.
2026-08-01 18:21:19 -07:00
gsxdsm
400c640c85 fix: stop inactive DUPLICATE replan loop (FN-8704)
After one free needs-replan clear of an inactive DUPLICATE marker, a
re-emit of the same dismissed canonical parks status failed
(DUPLICATE_REPLAN_EXHAUSTED) so triage no longer re-admits the card.
Tracks clear count in sourceMetadata; self-healing mirrors triage.
2026-08-01 17:48:29 -07:00
gsxdsm
66052d4178 test(FN-slow): replace real 400ms waits in ListView refetch tests with fake timers
Convert three real-timer 400ms wall waits in the unmapped-workflow forced-refetch
negative-assertion tests to deterministic vi.useFakeTimers()/advanceTimersByTimeAsync
advances, removing ~1.2s of dead wall-time while preserving the REVERT CHECK semantics
(a regression that armed a RETRY_DELAY_MS retry would still fire and fail).

Fusion-Task-Id: FN-slow
2026-08-01 17:15:04 -07:00
gsxdsm
6d176a9372 FN-8721: reconcile census, delegation routing, and archive repair
Align lifecycle census coverage while routing delegated work to workflow-ready lanes and safely repairing archived tasks.

- Route delegated tasks through the selected workflow's hold or entry column.
- Scope soft-deleted archive repairs by project and protect them with compare-and-set updates.
- Refresh lifecycle-column census detection, baseline, documentation, and coverage.

Files changed:
 docs/testing.md                                    | 21 +++---
 .../u15-engine-dashboard-consumers.test.ts         | 31 ++++++++-
 .../core/src/task-store/archive-lifecycle-2.ts     |  5 ++
 .../core/src/task-store/async-archive-lineage.ts   |  5 ++
 packages/core/src/task-store/async-persistence.ts  | 11 ++++
 packages/core/src/task-store/async-self-healing.ts | 76 +++++++++++++++-------
 .../src/__tests__/agent-tools-delegation.test.ts   | 43 +++++++++++-
 .../__tests__/lifecycle-column-census-ast.test.ts  | 20 ++++++
 .../src/__tests__/lifecycle-column-census.test.ts  | 29 ++++++---
 packages/engine/src/agent-tools.ts                 | 29 +++++++--
 scripts/lib/lifecycle-column-census-ast.mjs        | 21 +++++-
 scripts/lib/lifecycle-column-census-baseline.json  | 17 ++---
 scripts/lifecycle-column-census.mjs                |  3 +-
 13 files changed, 245 insertions(+), 66 deletions(-)

Fusion-Task-Id: FN-8721
Fusion-Task-Lineage: ff78481f-5ecb-4d9b-b21a-a095682372ed
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 16:57:49 -07:00
gsxdsm
54c2c1e666 FN-8719: fix stale milestone validation badges
Keep persisted milestone validation rollups and dashboard badges synchronized after assertion changes.

- Reconcile assertion mutations and validation rollups atomically within each project.
- Prevent stale rollup and telemetry responses from overwriting newer milestone state.
- Cover repaired and removed failure states with PostgreSQL and dashboard tests.

Files changed:
 .changeset/fn-8719-milestone-validation-rollup.md  |   7 +
 docs/missions.md                                   |   4 +
 .../__tests__/postgres/mission-store.pg.test.ts    |  61 +++++++
 packages/core/src/async-mission-store.ts           | 142 ++++++++++------
 .../dashboard/app/components/MissionManager.tsx    | 108 ++++++++----
 .../MissionManager.validation-rollup.test.tsx      | 181 +++++++++++++++++++++
 6 files changed, 416 insertions(+), 87 deletions(-)

Fusion-Task-Id: FN-8719
Fusion-Task-Lineage: c505211c-935a-4ad3-b35d-81c486e56121
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 14:38:45 -07:00
gsxdsm
3b633512d8 FN-8707: recover noisy mission validator JSON
Recover bounded, valid mission validator payloads amid ordinary response formatting noise.

- Extract bounded, string-aware fenced and balanced JSON candidates and prefer the final valid payload.
- Conservatively repair trailing commas and missing closing delimiters while retaining fail-closed assertion validation.
- Cover recovery and irreparable-response behavior, document the safety bounds, and add a patch changeset.

Files changed:
 .../fn-8707-mission-validator-json-recovery.md     |   7 +
 docs/missions.md                                   |   2 +
 .../src/__tests__/mission-execution-loop.test.ts   |  74 ++++++++-
 packages/engine/src/mission-execution-loop.ts      | 183 +++++++++++++++------
 4 files changed, 204 insertions(+), 62 deletions(-)

Fusion-Task-Id: FN-8707

Fusion-Task-Lineage: 0eb5e5c0-a520-4485-9f54-0376a47a5b5e

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 13:37:23 -07:00
gsxdsm
bf173dad7c FN-8696: keep reverted tasks out of Done
Keep reverted tasks out of completed views and give every task-detail host a revision recovery path.

- Exclude reverted tasks from complete columns and group them in dedicated recovery lists.
- Provide Delete and Revise actions in cards, lists, docks, modals, and popped-out details.
- Add localized copy, documentation, regression coverage, and a patch changeset.

Files changed:
 .changeset/fn-8696-reverted-task-resolution.md     |  7 ++++
 docs/dashboard-guide.md                            |  4 ++
 packages/dashboard/app/App.tsx                     |  2 +
 packages/dashboard/app/components/AppModals.tsx    |  2 +
 packages/dashboard/app/components/Board.tsx        | 42 +++++++++++++++++++-
 packages/dashboard/app/components/DockTaskList.tsx | 21 +++++++++-
 packages/dashboard/app/components/ListView.tsx     | 18 +++++++++
 packages/dashboard/app/components/TaskCard.css     |  4 ++
 packages/dashboard/app/components/TaskCard.tsx     |  9 +++++
 .../dashboard/app/components/TaskDetailModal.tsx   | 18 ++++++++-
 .../app/components/__tests__/Board.test.tsx        | 46 ++++++++++++++++++++++
 .../app/components/__tests__/DockTaskList.test.tsx | 29 +++++++++++++-
 .../app/components/dashboard/MainContent.tsx       |  4 ++
 .../app/components/overflowViewRegistry.tsx        |  3 ++
 .../app/components/useRightDockController.tsx      |  9 +++++
 .../app/utils/__tests__/taskRevert.test.ts         | 16 +++++++-
 packages/dashboard/app/utils/taskRevert.ts         | 18 +++++++++
 packages/i18n/locales/en/app.json                  |  3 ++
 18 files changed, 249 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-8696
Fusion-Task-Lineage: 7c9550fb-ef8e-4422-8ec1-0de1665413a3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 13:30:18 -07:00
gsxdsm
529ab26ba4 FN-8695: fix dashboard assertion CRUD validation
Restore dashboard assertion status edits and deletes for store-generated IDs.

- Validate assertion route IDs against the MissionStore-generated format while preserving legacy IDs.
- Dispatch assertion deletes through the shared confirmation handler and surface request failures.
- Cover current ID CRUD routes and desktop/mobile deletion behavior.

Files changed:
 .changeset/fn-8695-assertion-id-validation.md      |   7 ++
 docs/missions.md                                   |   2 +-
 .../dashboard/app/components/MissionManager.tsx    |  51 ++++++++---
 .../MissionManager.delete-confirm.test.tsx         |  99 ++++++++++++++++++++
 .../mission-assertion-id-validation.test.ts        | 100 +++++++++++++++++++++
 packages/dashboard/src/mission-routes.ts           |   8 +-
 6 files changed, 249 insertions(+), 18 deletions(-)

Fusion-Task-Id: FN-8695

Fusion-Task-Lineage: b7e2d70f-d3c7-4fdd-92f6-989cf414570b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 13:10:26 -07:00
gsxdsm
1e67e87321 FN-8702: fix Git Manager phone sheet spacing
Make Git Manager use the standalone phone layout only below the 768px boundary.

- Remove the hidden resize-handle gutter from Git Manager phone sheets
- Preserve embedded, tablet, and desktop Git Manager geometry
- Add responsive layout smoke fixtures and regression coverage
- Document the phone-sheet behavior and add a patch changeset

Files changed:
 .changeset/fn-8702-git-manager-mobile-spacing.md   |   7 +
 docs/dashboard-guide.md                            |   5 +-
 .../__tests__/browser-layout-smoke-fixture.test.ts |  23 ++++
 .../dashboard/app/components/FloatingWindow.css    |  12 ++
 packages/dashboard/app/components/ScriptsModal.css |  10 +-
 .../components/__tests__/GitManagerModal.test.tsx  |  31 +++--
 packages/dashboard/scripts/browser-layout-smoke.mjs| 143 +++++++++++++++++++++
 7 files changed, 211 insertions(+), 20 deletions(-)

Fusion-Task-Id: FN-8702

Fusion-Task-Lineage: 52473a8a-d3a7-48d2-b768-fc2f6fcd18b9

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 13:03:34 -07:00
gsxdsm
fdd2bf2418 fix: prevent queued badge icon clipping on tablets 2026-08-01 12:58:29 -07:00
gsxdsm
5d06c92b77 FN-8713: handle missing auth-status query data
Keep auth-status available when direct callers omit credential-instance query data.

- Default absent request query data to an empty selection.
- Preserve validation and prevent dangling instances from falling back to other credentials.
- Add coverage for omitted, valid, and dangling credential-instance queries.
- Add a patch changeset for the auth-status fix.

Files changed:
 .changeset/fn-8713-auth-status-query.md            |  7 +++
 .../register-auth-routes-hermes-additive.test.ts   | 67 ++++++++++++++++++++--
 .../dashboard/src/routes/register-auth-routes.ts   |  9 ++-
 3 files changed, 77 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-8713

Fusion-Task-Lineage: 0bcb965e-0606-4c7b-aefc-e7e3461ae75d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 12:53:07 -07:00
gsxdsm
494362cd23 FN-8697: preserve redacted failed-tool diagnostics
Persist safe error detail so operators can diagnose repeated executor tool failures.

- Redact and retain failed-tool diagnostics even when tool output persistence is disabled.
- Cover redaction, disclosure independence, inert rendering, and retry-backoff normalization.

Files changed:
 .../__tests__/AgentLogViewer.rendering.test.tsx    | 29 +++++++++++++++++
 .../src/__tests__/agent-logger-diagnostics.test.ts | 38 ++++++++++++++++++++++
 packages/engine/src/__tests__/agent-logger.test.ts |  4 +--
 .../__tests__/executor-tool-failure-retry.test.ts  | 22 ++++++++++++-
 packages/engine/src/agent-logger.ts                | 11 +++++--
 5 files changed, 99 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-8697

Fusion-Task-Lineage: 5ed900b6-a42b-4ad7-9270-47053295e6e1

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 12:48:30 -07:00
gsxdsm
39368f4bb8 FN-8694: add content-addressed validation memoization
Memoizes mission validation inputs and bounds repeat failures.

- Persist validator input fingerprints and atomically admit validation runs.
- Reuse unchanged static passes while enforcing per-fingerprint failure budgets.
- Add migration coverage, execution-loop tests, and operator documentation.

Files changed:
 .changeset/fn-8694-validation-memoization.md       |   7 +
 docs/missions.md                                   |   6 +
 docs/storage.md                                    |   6 +
 .../__tests__/postgres/mission-store.pg.test.ts    |  40 +++-
 packages/core/src/async-mission-store-queries.ts   |  24 ++-
 packages/core/src/async-mission-store.ts           |  65 +++++-
 packages/core/src/mission-store.ts                 |  10 +-
 packages/core/src/mission-types.ts                 |  19 ++
 .../0042_fn_8694_validator_input_fingerprint.sql   |   9 +
 packages/core/src/postgres/schema-applier.ts       |  13 +-
 packages/core/src/postgres/schema/project.ts       |   5 +
 .../src/__tests__/mission-execution-loop.test.ts   |  72 ++++++-
 packages/engine/src/mission-execution-loop.ts      | 217 +++++++++++++++++----
 13 files changed, 443 insertions(+), 50 deletions(-)

Fusion-Task-Id: FN-8694

Fusion-Task-Lineage: 92a790d5-f2fc-4e71-b9ee-8334ff38b20d

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 12:40:24 -07:00
gsxdsm
7dc6c4b4ec FN-8711: preserve credential instances in settings actions
Preserve selected credential-instance identity across dashboard authentication actions.

- Route named-account OAuth and API-key actions with their instance IDs.
- Retain sibling credential accounts during targeted OAuth polling.
- Document the default-versus-named credential contract and extend desktop/mobile coverage.

Files changed:
 ...n-8711-settings-credential-instance-contract.md |  7 ++
 docs/settings-reference.md                         |  2 +-
 .../app/__tests__/settings-moved-keys.test.ts      |  2 +
 .../dashboard/app/components/SettingsModal.tsx     | 49 +++++++++++---
 .../__tests__/SettingsModal.models-auth.test.tsx   | 78 ++++++++++++++++++++++
 .../components/__tests__/settings-mobile.test.tsx  | 14 ++--
 .../settings/sections/AuthenticationSection.tsx    | 15 +++--
 .../settings-default-descriptions.test.tsx         | 19 ++++++
 8 files changed, 165 insertions(+), 21 deletions(-)

Fusion-Task-Id: FN-8711

Fusion-Task-Lineage: f43eaa27-4d36-4a3d-acf3-caba54e31857

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 12:33:35 -07:00
gsxdsm
6e98e16e70 fix: reject DUPLICATE-only PROMPT at dispatch (FN-8704)
FN-8704 failed at the graph parse node because PROMPT.md was only
"DUPLICATE: FN-8676". Filesystem validation treated non-empty as planned
and admitted the card into WIP, which then looped on parse failure.

Treat a sole DUPLICATE redirect as unplanned: block dispatch and hold
release, badge as awaiting planning, and if parse still sees that shape
rebound to needs-replan with feedback instead of parking failed.
2026-08-01 12:26:53 -07:00
gsxdsm
7f29809728 fix: exclude failed WIP from live capacity holders
Failed parks left in the WIP column still counted as running agents and
file-scope lease holders, so they consumed maxWorktrees/maxConcurrent and
could serialize unrelated todos. Match review-lane semantics: status
failed is never a live top-level holder.
2026-08-01 12:23:59 -07:00
gsxdsm
0512334e86 FN-8714: fix quality runner CLI argument passthrough
Allow dashboard aggregate quality commands through the pnpm script boundary.

- Normalize pnpm’s leading argument separator before validating runner options
- Add end-to-end aggregate and fail-fast quality-runner coverage with a deterministic fixture
- Document aggregate quality-runner invocation and failure reporting

Files changed:
 docs/testing.md                                    | 15 ++++
 packages/dashboard/scripts/__tests__/quality-runner-fixture.mjs | 18 +++++
 packages/dashboard/scripts/__tests__/run-quality-tests.test.ts | 88 ++++++++++++++++++++++
 packages/dashboard/scripts/run-quality-tests.mjs   | 23 ++++--
 4 files changed, 139 insertions(+), 5 deletions(-)

Fusion-Task-Id: FN-8714

Fusion-Task-Lineage: 48dbd434-a9e6-4283-8658-cbaa254a7dc7

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 12:13:52 -07:00
gsxdsm
e3fbd2ebf5 fix: stop inactive-duplicate clear from replan-storming
Clearing a DUPLICATE marker for an inactive or kept canonical left
status:null without PROMPT.md. The scheduler treats planning→null as
"finished planning" and re-dispatched the card; FS validation rebounded
to needs-replan with no ceiling, and triage re-planned with empty
feedback so the planner could re-emit the same inactive marker forever
(FN-8704 / FN-8676).

Leave needs-replan + dismissal metadata + replan feedback instead, share
the clear contract across triage and self-healing, and bound scheduler
filesystem-validation rebounds with the shared recovery budget.
2026-08-01 11:53:53 -07:00
gsxdsm
60706ed5e4 fix: demote high-frequency TUI log lines to debug
Session setup, track bookkeeping, intentional skill exclusions, token-cache
metrics, zero-count recovery summaries, and expected-missing PROMPT seed reads
were flooding the default log pane. Gate them behind FUSION_DEBUG so only
state transitions and operator-actionable warnings remain visible.
2026-08-01 11:48:56 -07:00
gsxdsm
7dbcff139c fix: board lane counts and card glow never exceed live running agents
Operators summing the lane-header executing counts saw 10 active cards
under a 9-slot concurrency cap and read it as a capacity breach. The
header unioned the shared Running predicate with the card activity-chrome
predicate, which glowed needs-replan parks (FN-8494) and fresh
planner-log windows (FN-8300) that hold no concurrency slot.

isTaskAgentActive's positive arm now delegates to the shared
isRunningAgentTask predicate (footer/admission truth) and Column headers
count only that predicate, so glow and counts are a strict subset of the
live-agent population. Idle replans render the existing "Queued to
revise" waiting label instead of activity chrome.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
2026-08-01 11:03:04 -07:00
gsxdsm
45daf4478c FN-8710: cover credential instances in model selector saves
Add regression coverage for credential-instance persistence across task model selector lanes.

- Assert lane model saves explicitly clear stale credential instances.
- Cover selecting an available executor credential instance and replacing it with a new model.
- Verify inline task detail updates preserve and restore credential-instance state.

Files changed:
 .../components/__tests__/ModelSelectorTab.test.tsx | 68 ++++++++++++++++++++++
 ...lModal.inline-editing-and-integrations.test.tsx | 51 ++++++++++++++--
 2 files changed, 115 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-8710

Fusion-Task-Lineage: 35295b90-2aa7-4258-a170-9aaca537bb7a

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 10:53:52 -07:00
gsxdsm
2ab81d954b FN-8712: fix GitLab delete listener logging
Route GitLab delete-close listener failures through the structured dashboard logger.

- Replace console warnings with a named structured logger
- Record normalized error details alongside task and lifecycle metadata
- Cover listener-boundary failures without duplicate closure or unhandled rejections

Files changed:
 .../src/__tests__/gitlab-delete-close.test.ts      | 46 ++++++++++++++++++----
 packages/dashboard/src/gitlab-delete-close.ts      | 18 ++++++---
 2 files changed, 51 insertions(+), 13 deletions(-)

Fusion-Task-Id: FN-8712

Fusion-Task-Lineage: 466a5b80-efa7-4961-bdb6-79277f6deb41

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 10:45:13 -07:00
gsxdsm
52310c9b65 FN-8698: test independent Board and List task popups
Add regression coverage for independently retained task popups across Board and List views.

- Exercise popup identity, refresh, visibility, and close behavior for the same task.
- Cover real desktop and mobile Board/List interaction paths.

Files changed:
 .../app/__tests__/App.taskPopupViewGating.test.tsx |  69 ++++++++++++-
 .../app/components/__tests__/App.test.tsx          | 113 ++++++++++++++++++++-
 2 files changed, 176 insertions(+), 6 deletions(-)

Fusion-Task-Id: FN-8698

Fusion-Task-Lineage: 857db4cb-0dd5-45ea-a7b7-9cb95f6f5fef

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 10:19:53 -07:00
gsxdsm
01d65805c3 FN-8693: refresh reused worktree bases before execution
Refresh reused execution worktrees against the current integration baseline.

- Rebase or reset clean reused worktrees before coding sessions while preserving task commits.
- Persist and audit refreshed base SHAs, and block unsafe refresh states before execution.
- Cover executor, graph, and heartbeat refresh paths with regression tests.

Files changed:
 .changeset/fn-8693-stale-worktree-base.md          |   7 +
 docs/architecture.md                               |   1 +
 .../src/__tests__/agent-heartbeat-worktree.test.ts |  28 ++++
 .../__tests__/ce-workflow-step-executor.test.ts    |  44 ++++++
 .../src/__tests__/worktree-base-refresh.test.ts    |  90 ++++++++++++
 packages/engine/src/agent-heartbeat.ts             |  35 ++++-
 packages/engine/src/executor.ts                    |  67 ++++++++-
 packages/engine/src/merger.ts                      |   5 +
 packages/engine/src/run-audit.ts                   |  11 ++
 packages/engine/src/workflow-graph-executor.ts     |  32 ++++-
 packages/engine/src/worktree-acquisition.ts        |  28 +++-
 packages/engine/src/worktree-base-refresh.ts       | 158 +++++++++++++++++++++
 12 files changed, 498 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-8693
Fusion-Task-Lineage: e39a441f-39b5-4723-b503-753e921018f3
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 10:03:28 -07:00
gsxdsm
b8bde05ca6 FN-8703: render project overview before health telemetry
Render registered project cards immediately while optional health telemetry hydrates in the background.

- Publish completed health batches progressively and prevent stale responses from overwriting current state.
- Keep project controls usable while health metrics load and indicate per-card pending telemetry.
- Add coverage and operator documentation for progressive overview hydration.

Files changed:
 .changeset/fn-8703-project-overview-load.md        |   7 ++
 docs/dashboard-guide.md                            |   3 +-
 packages/dashboard/app/components/ProjectCard.tsx  |  12 ++-
 .../dashboard/app/components/ProjectOverview.tsx   |  15 +--
 .../components/__tests__/ProjectOverview.test.tsx  | 101 ++++++++++++++++++++
 .../app/hooks/__tests__/useProjectHealth.test.ts   |  98 ++++++++++++++++++++
 packages/dashboard/app/hooks/useProjectHealth.ts   | 102 ++++++++++-----------
 7 files changed, 277 insertions(+), 61 deletions(-)

Fusion-Task-Id: FN-8703

Fusion-Task-Lineage: eb816c9d-c808-4d52-a3f0-28bb9de5f149

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 09:53:36 -07:00
gsxdsm
5209e7fb8f FN-8708: isolate task card menu interactions
Prevent portal menu interactions from bubbling into task-card detail navigation.

- Stop pointer, touch, click, keyboard, and context-menu propagation at the portaled menu wrapper.
- Cover pause and unpause mobile actions while retaining intentional card-tap navigation.

Files changed:
 packages/dashboard/app/components/TaskCard.tsx     | 19 ++++++-
 .../app/components/__tests__/TaskCard.test.tsx     | 63 ++++++++++++++++++++++
 2 files changed, 81 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-8708

Fusion-Task-Lineage: 247d7101-ff3f-4423-b9b0-71f60f89e09b

Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 09:47:14 -07:00
gsxdsm
9c9dd7db2f FN-8706: scan paginated PR files for claims
Scan paginated pull-request file lists so claim checks remain reliable for large diffs.

- Replace truncated PR diff scans with count-validated paginated GitHub API requests.
- Fail closed when open PR or file-list data is incomplete, malformed, or exceeds the API ceiling.
- Add coverage for large diffs, API failures, count mismatches, and claim precedence.

Files changed:
 scripts/__tests__/check-file-claimed.test.mjs | 186 ++++++++++++++++++++++++++
 scripts/check-file-claimed.mjs                | 119 +++++++++++-----
 2 files changed, 272 insertions(+), 33 deletions(-)

Fusion-Task-Id: FN-8706
Fusion-Task-Lineage: 1edf3546-553b-4e35-8c41-cd5143c08e0a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai>
2026-08-01 09:39:38 -07:00