Commit Graph

7871 Commits

Author SHA1 Message Date
Phil Larson
b1c1a33d34 Add safe task dependency mutation 2026-05-30 13:43:36 -07:00
gsxdsm
158f74962d FN-5725: streamline ChatView room-creation and slash-autocomplete tests
Simplify ChatView test coverage for room creation and slash command autocomplete flows.

- reduce repetitive setup in ChatView room-creation test cases
- tighten slash-autocomplete assertions while preserving behavior coverage
- remove redundant test code paths to keep the suite faster and easier to maintain

Files changed:
packages/dashboard/app/components/__tests__/ChatView.test.tsx | 80 ++++++++--------------
1 file changed, 28 insertions(+), 52 deletions(-)

Fusion-Task-Id: FN-5725

Fusion-Task-Lineage: 74b398aa-84c2-4f7a-8e18-173992190a5d
2026-05-30 13:36:26 -07:00
gsxdsm
d05d335da8 FN-5726: speed up copilot auth flow test in settings modal
Reduce runtime overhead in the GitHub Copilot authentication test by replacing slower user-event timing with deterministic timer control.

- import `act` from Testing Library to flush async state transitions explicitly
- switch the Copilot login/copy/open interactions in the target test from `userEvent.click` to `fireEvent.click`
- wrap the flow in `vi.useFakeTimers()`/`vi.useRealTimers()` and advance timers directly instead of waiting with a 5s timeout
- keep existing assertions for clipboard writes, toast feedback, GitHub link opening, and login code expiry behavior

Files changed:
 .../components/__tests__/SettingsModal.test.tsx    | 47 ++++++++++++++--------
 1 file changed, 31 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-5726
Fusion-Task-Lineage: e9ccf2d0-d5a2-4568-abf5-7d9f7e67d643
2026-05-30 13:26:48 -07:00
gsxdsm
50cdcbf06d FN-5730: close linked GitHub issues on archived transitions
Ensure task archival updates linked GitHub issue state consistently across source columns.

- close linked issues as not_planned when tasks move to archived from non-done columns
- keep done -> archived using completed close reason
- reopen issues whenever tasks leave done, including done -> archived regression coverage updates

Files changed:
 .../src/__tests__/github-tracking-state.test.ts          | 16 +++++++++++++---
 packages/dashboard/src/github-tracking-state.ts          | 14 ++++++++++----
 2 files changed, 23 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-5730

Fusion-Task-Lineage: 0ce031be-be8c-49b8-a944-9b269fda4e00
2026-05-30 13:07:49 -07:00
gsxdsm
797ee8df5e FN-5729: document custom non-coding workflow MVP spec
Add a decision-ready MVP spec for user-authored non-coding workflows.

- Add docs/custom-workflows-mvp-spec.md covering user needs, minimal YAML contract, lifecycle mapping, mission relationship, one-week MVP slice, success metrics, and launch risks/open questions.
- Link the new spec from docs/README.md under Task & Project Management.

Files changed:
 docs/README.md                    |   1 +
 docs/custom-workflows-mvp-spec.md | 171 ++++++++++++++++++++++++++++++++++++++
 2 files changed, 172 insertions(+)

Fusion-Task-Id: FN-5729

Fusion-Task-Lineage: 1d4e210a-b672-4846-8b39-220a399cb4fa
2026-05-30 13:03:11 -07:00
gsxdsm
5ff7f37c24 FN-5728: fake-timer store-watcher polling tests
Speed up store-watcher polling coverage by replacing real-time waits with deterministic fake-timer advancement.

- Apply Vitest fake timers to watch-active polling tests in store-watcher coverage.
- Advance timers explicitly around polling cycles and task creation to avoid interval-based delays.
- Ensure watcher teardown restores real timers and stops polling cleanly.
- Update FN-5048 speed audit notes with the fake-timer rewrite details and new runtime sample.

Files changed:
 docs/test-speed-audit-FN-5048.md                  |  4 ++--
 packages/core/src/__tests__/store-watcher.test.ts | 19 +++++++++++++++++++
 2 files changed, 21 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-5728

Fusion-Task-Lineage: 7cc1eed6-fe86-458d-94c3-8d0780ff7828
2026-05-30 12:58:47 -07:00
gsxdsm
15bc51a47e FN-5720: fix room chat scroll anchoring on scope re-entry
Ensure Rooms scope reliably re-anchors to bottom on re-entry without breaking scroll preservation during refetch.

- reset stale thread anchor state when entering Rooms without an active room
- treat direct↔rooms transitions as entry events and anchor messages to bottom on entry
- keep existing scroll position when room messages are refetched in-place
- add regression tests covering room re-entry anchoring and refetch scroll preservation

Files changed:
 packages/dashboard/app/components/ChatView.tsx     | 14 +++-
 .../app/components/__tests__/ChatView.test.tsx     | 88 ++++++++++++++++++++++
 2 files changed, 99 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-5720

Fusion-Task-Lineage: dde8818b-f2e5-4c55-8a4c-2c54241c2e38
2026-05-30 10:31:29 -07:00
gsxdsm
16a82cf0ad FN-5722: suppress __SKIP__ sentinel room replies
Treat __SKIP__ room responder outputs as intentional silence so they never appear in persisted or rendered chat history.

- export ROOM_SKIP_SENTINEL and helper detection in chat orchestration
- skip persisting responder outputs that are trimmed-exact __SKIP__ sentinels
- avoid room reply failure errors when responders intentionally skip
- filter sentinel-only room messages in ChatView rendering
- add backend and UI tests covering sentinel suppression and substring pass-through
- document sentinel no-op behavior in dashboard chat room guide

Files changed:
 docs/dashboard-guide.md                            |  1 +
 packages/dashboard/app/components/ChatView.tsx     |  8 ++-
 packages/dashboard/app/components/__tests__/ChatView.rooms.test.tsx   | 16 +++++
 packages/dashboard/src/__tests__/chat.rooms.test.ts     | 80 +++++++++++++++++++++-
 packages/dashboard/src/chat.ts                     | 15 +++-
 5 files changed, 116 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-5722

Fusion-Task-Lineage: 242085fc-4b88-46c1-81aa-e398f5276fec
2026-05-30 10:21:49 -07:00
gsxdsm
d57ded1461 FN-5719: document executor-merger lifecycle decoupling RFC
Add an RFC that defines a merge-request handoff seam to decouple executor completion from merger orchestration.

- Document current executor/merger coupling points and failure modes across store, scheduler, self-healing, and merger paths.
- Propose a decoupled merge-request state machine with explicit handoff ownership, queueing, lease boundaries, and autoMerge true/false flows.
- Map reliability invariants (including FN-5147 and FN-5704) to preserved/modified behavior and define phased rollout plus follow-on test strategy.

Files changed:
 docs/rfcs/FN-5719-decouple-executor-merger.md | 149 ++++++++++++++++++++++++++
 1 file changed, 149 insertions(+)

Fusion-Task-Id: FN-5719

Fusion-Task-Lineage: 4a13c088-48a5-4b37-a969-a8602d82da4a
2026-05-30 10:15:58 -07:00
gsxdsm
da3f4aa967 FN-5717: add per-task auto-merge override in new task form
Add a New Task form option to override auto-merge behavior per task and wire it through task creation APIs.

- add TaskForm UI state/prop support for enabling or disabling per-task auto-merge override
- pass override values through NewTaskModal and legacy task creation API payloads
- persist and validate settings.autoMerge overrides in task workflow route handling
- add dashboard and route tests covering override defaults and explicit true/false behavior
- document per-task auto-merge override behavior in dashboard and settings docs

Files changed:
 docs/dashboard-guide.md                            |  1 +
 docs/settings-reference.md                         |  2 +-
 packages/dashboard/app/api/legacy.ts               |  2 +
 packages/dashboard/app/components/NewTaskModal.tsx | 11 ++++-
 packages/dashboard/app/components/TaskForm.tsx     | 27 ++++++++++++
 .../app/components/__tests__/NewTaskModal.test.tsx | 51 ++++++++++++++++++++++
 .../dashboard/src/__tests__/routes-tasks.test.ts   | 33 ++++++++++++++
 .../src/routes/register-task-workflow-routes.ts    |  6 +++
 8 files changed, 130 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-5717

Fusion-Task-Lineage: 3bdbb561-9c6d-4f64-ad4b-ae723e73223e
2026-05-30 10:11:23 -07:00
gsxdsm
cf95d3636f ci(release): drop macOS Intel (bun-darwin-x64) from binary matrix
macos-13 runners are too scarce — the darwin-x64 leg sat queued for hours
and blocked the release publish job (which needs all build legs). Ship the
CLI Apple-Silicon-only for macOS; desktop macOS DMG/ZIP stays universal.
Removed from release.yml + test-release.yml matrices, updated ci-workflow
assertions (5→4 targets) and RELEASING.md.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 10:06:51 -07:00
gsxdsm
eeedb8153e FN-5718: define mission completion gate contract
Document the mission completion gate so authored criteria and validator enforcement stay unambiguous.

- Add a new mission completion contract spec defining canonical enforcement via linked assertions.
- Clarify enforced vs informational surfaces, zero-assertion behavior, and FN-5696 legacy linkage handling.
- Define follow-on UI reconciliation and engineering acceptance criteria for deterministic mission/slice advance.
- Cross-link docs/missions.md to the new contract as the authoritative reference.

Files changed:
 docs/missions-completion-contract.md | 158 +++++++++++++++++++++++++++++++++++
 docs/missions.md                     |   4 +
 2 files changed, 162 insertions(+)

Fusion-Task-Id: FN-5718

Fusion-Task-Lineage: 4ca12798-b982-4c9c-ac88-fbc90f0e63e7
2026-05-30 10:04:16 -07:00
gsxdsm
3255965ad5 FN-5715: gate mission feature completion on assertion validation
Prevent mission-linked done tasks from bypassing assertion validation and recover stalled validation triggers after restart.

- require assertion-linked done features to have a passed validator result before slice/milestone completion
- keep assertion-linked features in progress when linked tasks move to done/archived until validation passes
- restart mission loop recovery when needed and re-trigger done/archived implementing features that still need validation
- add regression coverage for scheduler, mission loop recovery, mission store completion gating, and reliability trigger continuity
- document the new FN-5715 reliability backstop and recovery behavior

Files changed:
 .changeset/fn-5715-mission-validation-trigger.md   |   7 +
 AGENTS.md                                          |   1 +
 docs/architecture.md                               |   1 +
 docs/missions.md                                   |  11 +-
 packages/core/src/__tests__/mission-integration.test.ts |   2 +-
 packages/core/src/__tests__/mission-store.test.ts  |  30 +++-
 packages/core/src/mission-store.ts                 |  19 ++-
 packages/engine/src/__tests__/mission-execution-loop.test.ts   |  95 +++++++++++++
 packages/engine/src/__tests__/reliability-interactions/mission-validation-trigger-gap.test.ts         | 151 +++++++++++++++++++++
 packages/engine/src/__tests__/scheduler.test.ts    |  54 ++++++++
 packages/engine/src/mission-autopilot.ts           |   7 +-
 packages/engine/src/mission-execution-loop.ts      |  25 ++++
 packages/engine/src/mission-feature-sync.ts        |  32 ++++-
 packages/engine/src/scheduler.ts                   |  12 +-
 14 files changed, 431 insertions(+), 16 deletions(-)

Fusion-Task-Id: FN-5715

Fusion-Task-Lineage: 98b1cbd6-6b68-40a0-b4b3-c512183adf8b
2026-05-30 09:43:02 -07:00
gsxdsm
98e6a7364e FN-5716: replace base-branch input with branch dropdown
Switch task base-branch selection to prefer existing branches while preserving custom entry when needed.

- fetch local git branches for TaskForm and sort common integration branches (main/master/trunk/develop) first
- render base branch as a dropdown with default and Custom… options, with fallback custom input mode and toggle back to dropdown
- update TaskForm/NewTaskModal tests for branch loading, dropdown ordering, unknown-branch fallback, and fetch failure behavior
- document the new branch dropdown + custom fallback behavior in dashboard guide branch planning rules

Files changed:
 docs/dashboard-guide.md                            |   4 +-
 packages/dashboard/app/components/TaskForm.tsx     | 100 +++++++++++++++++++--
 .../app/components/__tests__/NewTaskModal.test.tsx |   1 +
 .../app/components/__tests__/TaskForm.test.tsx     |  66 +++++++++++++-
 4 files changed, 156 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-5716

Fusion-Task-Lineage: 0ed72020-d8a0-4675-92d3-9476f53a173a
2026-05-30 09:40:44 -07:00
gsxdsm
805eae4237 fix(ci): scope node_modules cache key per job to stop save races
The Windows desktop build now succeeds (artifact builds + uploads), but the
job was marked failed on the post-job cache *save*: build-binaries
(windows-x64) and build-desktop-windows share runner.os/arch and thus the
same cache key, so concurrent saves hit "unable to reserve cache ... another
job may be creating this cache." Adding github.job to the key gives each job
its own cache and eliminates the race.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 09:09:25 -07:00
gsxdsm
4153ad7323 Merge pull request #1176 from plarson/fix/planning-start-failure-isolation
fix: dispose failed planning startup agents
2026-05-30 08:41:19 -07:00
gsxdsm
f5e738be14 Merge pull request #1177 from plarson/fix/fn202-dashboard-column-filter
fix: respect dashboard task column filters
2026-05-30 08:40:53 -07:00
gsxdsm
884e677afa fix(build): pin @types/node workspace-wide; make build-exe tests opt-in
(b) Windows desktop build flakily failed with "Property 'ok'/'status' does
not exist on type 'Response'" because the workspace resolved multiple
@types/node versions (incl. an ancient 12.20.55 from @manypkg/find-root that
predates global fetch types). plugin-sdk compiles with lib:["ES2022"] and no
DOM lib, so Response comes solely from @types/node — nondeterministic across
runners. Pin via pnpm.overrides "@types/node": "^25.5.2"; collapses the
lockfile to one version. Verified: plugin-sdk build + desktop + full
workspace typecheck all pass.

Also: build-exe-cross tests cross-compiled all 5 platforms on every CI run
(auto-enabled via Boolean(process.env.CI)) — a release-build dependency in
the normal lane. Made them opt-in (FUSION_TEST_BUILD_EXE=1) and pointed the
root test:slow-cli at the CLI slow lane instead of test:pre-release, so
everyday CI no longer depends on release builds. test:pre-release and
test-release.yml still validate binaries deliberately.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 08:39:38 -07:00
gsxdsm
033f74c458 FN-5714: reject linking features to non-active tasks
Gracefully handle feature-to-task linking when the referenced task is archived, deleted, or missing.

- enforce active-board task validation in mission store linkage path with clear error text
- return surfaced validation errors from fn_feature_link_task instead of throwing opaque failures
- add regression coverage in core and CLI extension tests for archived/non-active task references
- add changeset and sync Fusion skill reference docs with the new fn_feature_link_task behavior

Files changed:
 .changeset/fn-5714-link-archived-task.md           |  5 +++
 .../cli/skill/fusion/references/extension-tools.md |  2 +-
 .../skill/fusion/references/fusion-capabilities.md |  2 +-
 packages/cli/src/__tests__/extension.test.ts       | 50 ++++++++++++++++++++++
 packages/cli/src/extension.ts                      | 35 +++++++++------
 packages/core/src/__tests__/mission-store.test.ts  | 17 ++++++++
 packages/core/src/mission-store.ts                 |  9 ++++
 7 files changed, 106 insertions(+), 14 deletions(-)

Fusion-Task-Id: FN-5714

Fusion-Task-Lineage: d84c45cf-0a0d-47a3-81c5-f99d16e03ecf
2026-05-30 08:39:38 -07:00
gsxdsm
3b594879a8 FN-5713: add mission update tool and docs
Add mission-update support to Fusion tooling and document it across mission references.

- register new `fn_mission_update` extension tool to patch mission title/description with validation and not-found handling
- add extension tests covering successful mission updates and error cases
- allowlist `fn_mission_update` in workflow-step readonly gating policy tests and classifications
- update Fusion skill and mission docs to describe mission updates and extension tool usage
- add a changeset for `@runfusion/fusion` patch release

Files changed:
 .changeset/fn-5713-mission-update-tool.md          |  5 ++
 docs/missions.md                                   | 13 ++++
 packages/cli/skill/fusion/SKILL.md                 |  2 +-
 packages/cli/skill/fusion/references/extension-tools.md | 10 +++
 packages/cli/skill/fusion/references/fusion-capabilities.md |  1 +
 packages/cli/src/__tests__/extension.test.ts       | 71 ++++++++++++++++++++++
 packages/cli/src/extension.ts                      | 69 +++++++++++++++++++++
 packages/engine/src/__tests__/workflow-step-readonly-allowlist.test.ts |  1 +
 packages/engine/src/gating-classifications.ts      |  1 +
 9 files changed, 172 insertions(+), 1 deletion(-)

Fusion-Task-Id: FN-5713
Fusion-Task-Lineage: e491973a-2d5d-4ef8-bf13-39b3669918ee
2026-05-30 08:39:38 -07:00
gsxdsm
f730451d1a FN-5712: fix x64 AppImage artifact assertion name
Align Linux x64 artifact checks with the actual AppImage filename pattern.

- Update release workflow artifact glob from linux-x64 to linux-x86_64.
- Update desktop release workflow test expectation to match linux-x86_64 naming.

Files changed:
 .github/workflows/test-release.yml                      | 2 +-
 packages/desktop/src/__tests__/release-workflow.test.ts | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-5712

Fusion-Task-Lineage: 2bb6f260-81b2-4cb7-bb45-f91bfaa6150c
2026-05-30 08:39:38 -07:00
Phil Larson
6ba3cbf495 fix: respect dashboard task column filters 2026-05-30 08:29:04 -07:00
Phil Larson
5f3e344b6e fix: dispose failed planning startup agents 2026-05-30 08:29:02 -07:00
gsxdsm
7cd4f3a2e7 Merge pull request #1172 from plarson/fix/fn166-scheduler-starvation
fix(FN-166): bypass coordination-only overlap leases
2026-05-30 08:27:54 -07:00
Phil Larson
f8bda56716 fix(FN-166): bypass coordination-only overlap leases
Fusion-Task-Id: FN-166
2026-05-30 06:47:02 -07:00
gsxdsm
b5178fd9ee fix(release): match electron-builder x64 AppImage name in Linux verify
electron-builder emits Fusion-<v>-linux-x86_64.AppImage for x64 (deb uses
amd64, tar.gz uses x64). The verify step globbed -linux-x64.AppImage and
failed with "No Fusion Linux x64 AppImage artifacts produced" even though
the AppImage built. Upload globs already used the broad -linux-*.AppImage.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 01:17:54 -07:00
gsxdsm
e153d00ee2 fix(desktop): declare author email so Linux .deb build succeeds
electron-builder's fpm target requires author 'email' in package.json;
without it the arm64/x64 .deb build failed (`Please specify author 'email'`).
Surfaced once the electron-builder --x64 --arm64 flags actually parsed.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 01:02:30 -07:00
gsxdsm
5f9deb6764 ci(release): gate GitHub Release creation to tag pushes only
Lets workflow_dispatch runs build and upload binaries as artifacts for
validation without creating a release (previously dispatch on a branch
would attempt a release tagged with the branch name).

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 00:44:53 -07:00
gsxdsm
4148f43ce4 fix(release): honor --publish never, guard Windows signing, fix desktop spawn
Second pass after the cache/arch fix unblocked `pnpm build` and surfaced
later-stage failures:

- Desktop packaging called `pnpm --filter @fusion/desktop dist:mac -- <args>`,
  but pnpm leaks the `--` separator into the script args. electron-builder
  stops parsing at `--`, so `--publish never` was ignored — it auto-published
  to api.github.com/repos/gsxdsm/fusion/releases and 404'd. The same leak
  dropped Linux's `--x64 --arm64`. Switch all four desktop packaging steps to
  `pnpm --filter @fusion/desktop exec electron-builder ...`, which forwards
  args cleanly (verified locally).
- Windows CLI signing now skips when WINDOWS_CERTIFICATE_BASE64 is absent,
  mirroring the macOS guard (was hard-failing the bun-windows-x64 job).
- Desktop build spawns workspace .cmd bins with shell:true on Windows; Node
  rejects .cmd/.bat spawns without a shell (EINVAL) since CVE-2024-27980,
  which broke `@fusion/desktop build` on the Windows runner.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 00:30:39 -07:00
gsxdsm
f659a07a25 chore(release): v0.38.1
Version bump via changesets.
2026-05-30 00:18:41 -07:00
gsxdsm
bad8f52c5c chore: add patch changesets for release fix and mission mobile layout
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 00:16:04 -07:00
gsxdsm
76e9eb4aaa fix(release): publish binaries despite partial build failures
The Binary Release workflow stopped producing any GitHub Release assets
because every release had at least one failing build leg, and the
github-release job (needs: all four builds, no if:) was skipped whenever
any leg failed — suppressing even successfully-built platforms.

Root causes fixed:
- github-release: add `if: !cancelled()` + zero-artifact guard so a single
  failing leg yields a partial release instead of none.
- setup-node-pnpm cache key: add runner.arch. runner.os is only
  Linux/macOS/Windows, so arm64 runners restored x64 node_modules missing
  native deps (@rollup/rollup-linux-arm64-gnu), crashing `pnpm build`.
- macOS CLI sign step: guard on APPLE_CERTIFICATE_BASE64 so unsigned
  binaries still publish when certs are absent; add timeout-minutes: 30 to
  build-binaries to avoid 24h runner hangs.
- dependency-graph plugin: replace unix cp/mkdir -p (failed on Windows
  cmd.exe) with a cross-platform node copy script.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-05-30 00:12:24 -07:00
gsxdsm
0957a91bdd FN-5711: stack mission list items and actions on mobile
Improve the mission manager mobile stacked layout so mission rows reflow cleanly.

- make stacked mission list items switch to column layout with stretched content on mobile
- make stacked mission item actions full-width and wrapping instead of cramped inline controls
- make stacked mission run controls span full width
- add mobile CSS regression assertions for stacked-body mission cards and action controls

Files changed:
 packages/dashboard/app/components/MissionManager.css     | 16 ++++++++++++++++
 packages/dashboard/app/components/__tests__/MissionManager.mobile-css.test.ts | 13 +++++++++++++
 2 files changed, 29 insertions(+)

Fusion-Task-Id: FN-5711

Fusion-Task-Lineage: 76a20899-89fe-4aa9-8871-6b64c2521a0b
2026-05-30 00:10:23 -07:00
gsxdsm
45d22586dc chore(release): v0.38.0
Version bump via changesets.
2026-05-29 23:17:31 -07:00
gsxdsm
1207dac52d FN-5710: flush queued first quick chat send after session init
Ensure the first Quick Chat message reliably streams even when a stale sendMessage closure sees no active session.

- trigger a microtask flush for queued pre-session sends when a session is already active and no stream is running
- preserve existing streaming guards so flush only runs when safe
- add regression coverage for stale-closure first-send flow to verify stream start and completion behavior

Files changed:
 .../app/hooks/__tests__/useQuickChat.test.ts       | 47 ++++++++++++++++++++++
 packages/dashboard/app/hooks/useQuickChat.ts       | 12 ++++++
 2 files changed, 59 insertions(+)

Fusion-Task-Id: FN-5710

Fusion-Task-Lineage: a4b32867-dedd-40f5-b6a8-3c71b9f7dee1
2026-05-29 22:36:45 -07:00
gsxdsm
b78736ce58 FN-5709: queue initial quick chat send until session is ready
Ensure a user's first quick-chat message is preserved and sent once session initialization finishes.

- queue pre-session text sends as promise-backed pending work instead of returning early
- flush queued text after session activation and wire completion/rejection to the original send promise
- clear queued completion state on stream reset paths and add regression coverage for first-send-before-init flow

Files changed:
 .../app/hooks/__tests__/useQuickChat.test.ts       | 34 ++++++++++++++++++++
 packages/dashboard/app/hooks/useQuickChat.ts       | 37 ++++++++++++++++++++--
 2 files changed, 69 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-5709

Fusion-Task-Lineage: 7598aa93-d127-4602-9571-02bc2a0cc5da
2026-05-29 21:56:53 -07:00
gsxdsm
4a60c2ac41 FN-5708: backfill files changed chip on done task cards
Ensure freshly done task cards show the "N files changed" chip once mergeDetails diff stats arrive.

- backfill TaskCard diff stat display logic so completed cards update when mergeDetails enrichment lands after initial render
- update useTaskDiffStats to derive files-changed counts from merge details with fallback-safe behavior
- add TaskCard and useTaskDiffStats test coverage for late-arriving mergeDetails and chip rendering
- add a changeset for @runfusion/fusion documenting the patch release

Files changed:
 .changeset/fn-5708-files-changed-chip.md           |  5 ++
 packages/dashboard/app/components/TaskCard.tsx     | 10 +++
 .../app/components/__tests__/TaskCard.test.tsx     | 64 +++++++++++++++
 .../app/hooks/__tests__/useTaskDiffStats.test.ts   | 92 ++++++++++++++++++++++
 packages/dashboard/app/hooks/useTaskDiffStats.ts   | 17 +++-
 5 files changed, 185 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-5708

Fusion-Task-Lineage: 3f961f3f-045b-473e-9636-ca33fd84282c
2026-05-29 21:32:09 -07:00
gsxdsm
9b54f52b39 FN-5707: fix Android executor footer overlap after keyboard dismiss
Adjust mobile keyboard bar flags so Android keeps the executor footer stacked above the nav bar while iOS retains collapse behavior.

- extract mobile bar keyboard flag computation into a dedicated utility
- keep nav keyboard pinning cross-platform while limiting footer keyboard-collapse to iOS
- add focused unit tests for Android/iOS/modal/desktop keyboard flag scenarios
- update ExecutorStatusBar keyboard-open test assertion and dashboard guide keyboard behavior notes

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 packages/dashboard/app/App.tsx                     | 23 ++++---
 .../__tests__/ExecutorStatusBar.test.tsx           |  6 +-
 .../utils/__tests__/mobileBarKeyboardFlags.test.ts | 73 ++++++++++++++++++++++
 .../dashboard/app/utils/mobileBarKeyboardFlags.ts  | 36 +++++++++++
 5 files changed, 129 insertions(+), 11 deletions(-)

Fusion-Task-Id: FN-5707

Fusion-Task-Lineage: ed01fcb0-d814-4595-9479-5baf97326ae7
2026-05-29 21:03:12 -07:00
gsxdsm
ee0b1cd9c8 FN-5658: add goal injection visibility diagnostics
Improve anchoring visibility by classifying and emitting goal-injection diagnostics across engine lanes.

- add goal-injection diagnostics module with result/failure classification and audit emission helpers
- wire heartbeat and executor prompt construction to resolve classified goal context and emit diagnostic events
- expose diagnostic APIs from engine index and add new run-audit event type for prompt goal injection
- add unit and wiring tests plus diagnostics docs updates for the new observability path

Files changed:
 docs/diagnostics.md                                |   8 +
 .../goal-injection-diagnostics-wiring.test.ts      |  87 +++++++++
 .../__tests__/goal-injection-diagnostics.test.ts   | 150 +++++++++++++++
 packages/engine/src/agent-heartbeat.ts             |  34 +++-
 packages/engine/src/executor.ts                    |  35 +++-
 packages/engine/src/goal-injection-diagnostics.ts  | 209 +++++++++++++++++++++
 packages/engine/src/index.ts                       |  10 +
 packages/engine/src/run-audit.ts                   |   7 +-
 8 files changed, 521 insertions(+), 19 deletions(-)

Fusion-Task-Id: FN-5658

Fusion-Task-Lineage: f4feaa37-d9b1-4bb6-b8c9-35a9b7a02f57
2026-05-29 20:50:08 -07:00
gsxdsm
ab1f6a7ffa FN-5706: hide chat input overflow until max-height
Prevent the chat composer from showing a right-edge scrollbar line before it reaches the autosize cap.

- set chat textarea default overflow to hidden in ChatView CSS
- add resolveChatInputOverflowY to switch overflow to auto only past the 640px cap
- apply overflow mode during composer autosize updates
- extend chat input autosize tests and docs to cover overflow behavior

Files changed:
 docs/dashboard-guide.md                                          | 2 +-
 packages/dashboard/app/components/ChatView.css                   | 1 +
 packages/dashboard/app/components/ChatView.tsx                   | 5 +++++
 packages/dashboard/app/components/__tests__/ChatView.chat-input-autosize.test.tsx   | 9 ++++++++-
 4 files changed, 15 insertions(+), 2 deletions(-)

Fusion-Task-Id: FN-5706

Fusion-Task-Lineage: 4619aa30-c02f-453b-bdf2-f60f360e9372
2026-05-29 20:47:13 -07:00
gsxdsm
beab117771 FN-5705: wire task-detail opens into navigation history
Ensure task detail modal openings consistently register browser history so Android back swipe/button dismisses the modal from all entry paths.

- add a shared openDetailTaskWithNav callback in AppModals that opens task detail and pushes a modal close handler into navigation history
- route onboarding view-task, activity log open-task, and task-to-task detail navigation through the new history-aware opener
- extend AppModals tests with a navigation history wrapper and popstate assertions for onboarding/activity log/task-to-task flows
- document that these task detail entry points now participate in navigation history for consistent Android back behavior

Files changed:
 docs/dashboard-guide.md                            |   1 +
 packages/dashboard/app/components/AppModals.tsx    |  21 ++++-
 .../app/components/__tests__/AppModals.test.tsx    | 101 ++++++++++++++++++++-
 3 files changed, 115 insertions(+), 8 deletions(-)

Fusion-Task-Id: FN-5705

Fusion-Task-Lineage: fd0309ae-e0da-4489-95e4-c34699287e7c
2026-05-29 20:26:43 -07:00
gsxdsm
afc3b4749f FN-5655: add goal anchoring audit events across lanes
Add audit guardrails that track goal anchoring injection across executor, heartbeat, and CLI/dashboard surfaces.

- add a dedicated engine goal-anchoring audit emitter and export it
- emit goal anchoring audit events from executor and heartbeat goal-context injection paths
- extend run-audit wiring and CLI extension output to surface goal anchoring events
- add engine, CLI, and dashboard regression tests for goal-tool and audit event behavior
- document the new audit coverage and include a published changeset entry

Files changed:
 .changeset/fn-5655-goal-anchoring-audit.md         |  7 ++
 docs/architecture.md                               |  1 +
 docs/dashboard-guide.md                            |  1 +
 .../__tests__/extension-goal-tools-audit.test.ts   | 65 +++++++++++++++
 packages/cli/src/extension.ts                      | 28 +++++++
 .../__tests__/routes-run-audit-goal-events.test.ts | 72 ++++++++++++++++
 .../src/__tests__/goal-anchoring-audit.test.ts     | 95 ++++++++++++++++++++++
 packages/engine/src/agent-heartbeat.ts             | 20 +++--
 packages/engine/src/executor.ts                    | 20 +++--
 packages/engine/src/goal-anchoring-audit.ts        | 89 ++++++++++++++++++++
 packages/engine/src/index.ts                       | 10 +++
 packages/engine/src/run-audit.ts                   |  6 +-
 12 files changed, 399 insertions(+), 15 deletions(-)

Fusion-Task-Id: FN-5655

Fusion-Task-Lineage: f3c10568-4050-42c4-9fe2-b84bf749b89d
2026-05-29 20:05:14 -07:00
gsxdsm
0dbb1cd6f9 FN-5704: escalate self-owned execution limbo instead of endless resume
Escalate reclaimable in-progress resume limbo into an explicit failure path to stop infinite self-healing loops.

- add resume-limbo escalation handling in self-healing/executor flow so self-owned stuck execution is failed and surfaced
- extend core task/run-audit types and retry-reset/store behavior to persist and expose the new escalation state
- add reliability interaction coverage for reclaim self-owned resume limbo escalation and update related schema/store/CLI/plugin tests and docs

Files changed:
 AGENTS.md                                          |   1 +
 docs/architecture.md                               |   2 +
 packages/cli/src/commands/__tests__/task.test.ts   |   2 +
 packages/core/src/__tests__/db-migrate.test.ts     |  12 +-
 packages/core/src/__tests__/db.test.ts             |  34 ++---
 packages/core/src/__tests__/goals-schema.test.ts   |   2 +-
 packages/core/src/__tests__/insight-store.test.ts  |  10 +-
 packages/core/src/__tests__/mission-store.test.ts  |   2 +-
 packages/core/src/__tests__/run-audit.test.ts      |   2 +-
 packages/core/src/__tests__/secrets-schema.test.ts |   6 +-
 .../core/src/__tests__/store-merge-queue.test.ts   |   2 +-
 packages/core/src/__tests__/task-documents.test.ts |   2 +-
 packages/core/src/db.ts                            |  13 +-
 packages/core/src/manual-retry-reset.ts            |   1 +
 packages/core/src/store.ts                         |  37 ++++-
 packages/core/src/types.ts                         |  11 ++
 ...laim-self-owned-resume-limbo-escalation.test.ts | 168 +++++++++++++++++++++
 packages/engine/src/executor.ts                    |   5 +
 packages/engine/src/run-audit.ts                   |   1 +
 packages/engine/src/self-healing.ts                |  72 +++++++++
 .../src/store/__tests__/roadmap-store.test.ts      |   4 +-
 21 files changed, 345 insertions(+), 44 deletions(-)

Fusion-Task-Id: FN-5704

Fusion-Task-Lineage: c8f73d16-d95b-450f-a514-e7d3c2f7aebe
2026-05-29 20:05:14 -07:00
gsxdsm
129e17d16c FN-5702: keep mobile footer and nav pinned when keyboard opens
Add viewport-offset handling so mobile bottom bars stay anchored while virtual keyboards resize the visual viewport.

- add a shared viewportOffset utility to compute keyboard-related visual viewport compensation
- update dashboard app bootstrap/index logic to apply compensation variables for pinned footer/nav layout
- extend mobile keyboard layout coverage with dedicated viewport compensation and bottom-bar tests
- document the keyboard/pinned-bar behavior update in dashboard guide

Files changed:
 docs/dashboard-guide.md                            |  2 +-
 .../mobile-bottom-bars-keyboard-layout.test.ts     | 12 ++-
 .../viewport-compensation-keyboard.test.ts         | 24 ++++++
 packages/dashboard/app/index.html                  | 39 +++++++++-
 .../app/utils/__tests__/viewportOffset.test.ts     | 86 ++++++++++++++++++++++
 packages/dashboard/app/utils/viewportOffset.ts     | 64 ++++++++++++++++
 6 files changed, 223 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-5702

Fusion-Task-Lineage: be47ad0c-82df-4c38-9577-94c2eee49a0e
2026-05-29 20:05:14 -07:00
gsxdsm
ff575f8b06 FN-5653: inject active goal context into heartbeat and executor prompts
Align heartbeat and executor prompt assembly so both lanes receive the same active-goal context block.

- inject goalContext into heartbeat and executor buildPromptLayers inputs using buildGoalContextSection
- extend goal-context regression coverage with parity tests for heartbeat/executor injection and empty-goal behavior
- update executor test helpers for goal-store access and document the shared prompt-lane behavior in architecture/agents docs

Files changed:
 docs/agents.md                                     |  1 +
 docs/architecture.md                               |  1 +
 packages/engine/src/__tests__/executor-test-helpers.ts  |  3 +
 packages/engine/src/__tests__/goal-context-injection.test.ts   | 72 ++++++++++++++++++++++
 packages/engine/src/agent-heartbeat.ts             | 12 +++-
 packages/engine/src/executor.ts                    | 12 +++-
 packages/engine/src/prompt-layers.ts               |  9 ++-
 7 files changed, 107 insertions(+), 3 deletions(-)

Fusion-Task-Id: FN-5653
Fusion-Task-Lineage: d2670585-57f7-409d-bb11-cef3448267a6
2026-05-29 20:05:14 -07:00
gsxdsm
a9d2064f66 FN-5703: forward task:deleted events through in-process runtime
Ensure engine-side task deletes propagate through all runtime transports so GitHub tracking cleanup runs consistently.

- extend IPC protocol and child-process runtime/worker plumbing to carry `task:deleted` events
- forward `task:deleted` from in-process runtime through project runtime and project manager dispatch
- add regression coverage for in-process runtime forwarding and GitHub tracking delete handling

Files changed:
 .../src/__tests__/github-tracking-delete.test.ts   | 29 ++++++++++++++++++
 .../src/__tests__/in-process-runtime.test.ts       | 34 +++++++++++++++++++++-
 packages/engine/src/ipc/ipc-protocol.ts            | 14 ++++++++-
 packages/engine/src/project-manager.ts             |  7 +++++
 packages/engine/src/project-runtime.ts             |  4 ++-
 .../engine/src/runtimes/child-process-runtime.ts   |  6 ++++
 .../engine/src/runtimes/child-process-worker.ts    | 14 +++++++--
 packages/engine/src/runtimes/in-process-runtime.ts | 10 ++++++-
 8 files changed, 111 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-5703

Fusion-Task-Lineage: 1406838b-5abf-4b86-8161-c2dd59f88a9b
2026-05-29 20:05:14 -07:00
gsxdsm
dac9b96262 FN-5681: clarify mission run controls and autopilot states
Improve Mission Manager run-state UX by separating mission run controls from autopilot behavior.

- Group mission run settings in the detail view and add explicit Start mission / Stop mission / Resume mission buttons with contextual helper text.
- Humanize autopilot state labels (Off, Watching, Activating slice, Completing) and add explanatory autopilot description copy.
- Update Mission Manager styling to support the new run-settings layout and helper text blocks in list/detail views.
- Extend MissionManager tests to verify labeled run controls, endpoint wiring for start/stop/resume, and humanized autopilot badge labels.
- Update mission docs to clarify the distinction between mission run-state controls and the autopilot toggle.

Files changed:
 docs/missions.md                                   |   2 +-
 packages/dashboard/app/components/MissionManager.css    |  62 ++++-
 packages/dashboard/app/components/MissionManager.tsx    | 272 +++++++++++++--------
 packages/dashboard/app/components/__tests__/MissionManager.test.tsx   | 107 +++++++-
 4 files changed, 330 insertions(+), 113 deletions(-)

Fusion-Task-Id: FN-5681

Fusion-Task-Lineage: 0dcac659-2eff-435b-a176-b66e7646b054
2026-05-29 20:05:13 -07:00
gsxdsm
480915b4f8 Merge pull request #1165 from plarson/fix/auto-claim-candidate-prompt
fix: explain role-filtered auto-claim candidates
2026-05-29 20:04:38 -07:00
Phil Larson
53d97e2c6f fix(FN-096): explain role-filtered auto-claim candidates 2026-05-29 18:25:19 -07:00
gsxdsm
668e3a5099 FN-5679: default new missions to stopped state
Ensure mission creation always starts in a stopped planning state with autopilot off.

- Force MissionStore createMission to ignore create-time autopilotEnabled and persist stopped defaults
- Update mission POST route behavior to stop auto-watching on create and keep optional create-time updates scoped
- Add/adjust core and dashboard tests to assert stopped-by-default creation semantics
- Document mission autopilot creation behavior and add a patch changeset for @runfusion/fusion

Files changed:
 .changeset/fn-5679-missions-default-stopped.md         |  7 +++++++
 docs/missions.md                                       |  4 +++-
 .../mission-factory-parity.integration.test.ts         |  6 +++---
 packages/core/src/__tests__/mission-store.test.ts      | 18 ++++++++++++++++++
 packages/core/src/mission-store.ts                     |  5 +++--
 packages/dashboard/src/__tests__/mission-e2e.test.ts   |  8 +++++---
 packages/dashboard/src/mission-routes.ts               |  9 +--------
 7 files changed, 40 insertions(+), 17 deletions(-)

Fusion-Task-Id: FN-5679

Fusion-Task-Lineage: 05eff3cb-07d8-4b52-ac7f-065979e78816
2026-05-29 15:45:20 -07:00