Commit Graph

1282 Commits

Author SHA1 Message Date
Fusion
1b925f1e1c feat(FN-4412): complete Steps 2-6 — add bulk pause/unpause/archive actions
Fusion-Task-Id: FN-4412
Fusion-Task-Lineage: 20883b92-0de6-4b95-b8f8-9075f1d9d54e
2026-05-13 19:33:34 -07:00
Fusion
f790436c95 feat(FN-4415): revert todo aging indicator from FN-4316
Reverts the FN-4316 todo aging indicator feature, removing the `TodoAgingSummary` component and its CSS, the `todoAging` utility, all associated tests, and the corresponding documentation. The revert is accompanied by a changeset confirming the patch-level reversal.

Fusion-Task-Id: FN-4415
2026-05-13 19:22:38 -07:00
gsxdsm
35854e0479 fix(FN-4417): stop false-positive branch contamination from stale baseCommitSha
The contamination check at executor.ts was reusing task.baseCommitSha as
its reference SHA. That field is intentionally preserved across resumed
sessions for stable diff math, which means it can lag behind main by
many commits. Passing it to assertCleanBranchAtBase caused every
legitimately-merged commit on main since the stale SHA to be reported
as a foreign task-attributed contamination commit, pausing the task
with pausedReason=branch-cross-contamination.

FN-4403 was the trigger case: a pooled worktree was force-reset to
current main by WorktreePool.prepareForTask (correctly), then the
executor immediately ran assertCleanBranchAtBase(rootDir, branch,
staleBaseCommitSha, taskId) and flagged 157 commits across ~39
unrelated FN-* tasks as contamination. FN-4417 itself then hit the
same bug when it tried to start, blocking the board.

Two fixes, both in packages/engine/src/executor.ts:

1. New resolveContaminationBaseRef(worktreePath) computes a fresh
   merge-base against origin/main or main and is used in place of
   resolveDiffBaseRef for the contamination check. It never reads
   task.baseCommitSha and never falls back to HEAD~1 (which on a
   force-reset pooled branch would be a main commit and re-introduce
   the same false positive at smaller scale). Returns undefined on
   git failure so the caller treats it as check skipped.

2. captureBaseCommitSha gains an explicit { isResume: boolean }
   parameter and only preserves an existing baseCommitSha when
   isResume is true. On fresh/pool acquisitions the branch was just
   force-reset to current main, so the stored value is stale by
   definition. Always recapture in that case. Diff-base stability
   across resumed sessions (FN-4309/FN-4383) is preserved by passing
   isResume: true on resume; the existing executor call site is
   already gated on non-resume and passes false.

Tests:
- executor-base-commit-capture.test.ts: updated to thread isResume
  through assertions and added a FN-4417 regression case that verifies
  a stale-but-ancestor baseCommitSha is recaptured (not preserved) on
  non-resume.
- executor-base-commit-capture.real-git.test.ts: FN-4309/FN-4383
  multi-session test now explicitly passes isResume: true on the
  second capture, matching the real resume code path.
- executor-contamination-base.test.ts (new): three focused tests for
  resolveContaminationBaseRef covering fresh-merge-base resolution,
  graceful failure when neither origin/main nor main resolves, and a
  structural guard that the function arity is 1 (no baseCommitSha
  parameter, so the bug cannot regress through that surface).

Verified: 4265 engine tests pass; tsc clean.

Fusion-Task-Id: FN-4417
2026-05-13 18:44:41 -07:00
Fusion
ec58a4a67b feat(FN-4316): complete Step 6 — document todo aging indicator
Fusion-Task-Id: FN-4316
Fusion-Task-Lineage: 6b2b78b4-effa-479c-9a22-5a53d0f74894
2026-05-13 18:14:23 -07:00
Fusion
6287c14bc9 feat(FN-4328): complete Step 5 — add changeset
Fusion-Task-Id: FN-4328
Fusion-Task-Lineage: 32d20417-4e86-4fb5-9be9-72d98aaf0761
2026-05-13 17:07:23 -07:00
Fusion
bb65002842 feat(FN-4397): complete Step 4/5 — tripwire docs and release note
Fusion-Task-Id: FN-4397
Fusion-Task-Lineage: 1ffac4f7-adf5-4115-b588-108d75eadde7
2026-05-13 16:58:35 -07:00
Fusion
5b3c8d3bc9 feat(FN-4386): complete Step 7 — add changeset
Fusion-Task-Id: FN-4386
Fusion-Task-Lineage: 82c1c281-8d69-42c1-8705-90e811b6df93
2026-05-13 16:38:00 -07:00
Fusion
076f132790 feat(FN-4288): add stall surface docs and changeset
Fusion-Task-Id: FN-4288
Fusion-Task-Lineage: 09c6efc0-ea0b-443a-ab45-a89188fcf888
2026-05-13 16:29:37 -07:00
Fusion
1fbfe9f23f feat(FN-4402): validate file scope tokens in prompt parsing and writes
Merged: Validates file scope tokens during prompt parsing and write operations in the task store, adding ~160 lines of logic to `packages/core/src/store.ts` with corresponding test coverage in `store-parsing.test.ts`. Also updated AGENTS.md documentation and created a changeset for the `@runfusion/f

Fusion-Task-Id: FN-4402
2026-05-13 16:29:11 -07:00
Fusion
cd7779c3e0 test(FN-4307): add recovery-notification integration coverage
Fusion-Task-Id: FN-4307
Fusion-Task-Lineage: 00140a5a-af93-4905-8570-32d7ecb8a874
2026-05-13 15:58:48 -07:00
Fusion
95c534010f feat(FN-4383): complete Step 4 — add release changeset
Fusion-Task-Id: FN-4383
Fusion-Task-Lineage: 69516bdf-34d1-405c-8bc9-b558c4780863
2026-05-13 15:28:34 -07:00
Fusion
1e4d146b41 feat(FN-4375): consolidate mobile settings modal into single-row header lay
Completes the mobile settings header refactor by consolidating the header into a single row on small viewports, trimming CSS complexity with test coverage for the responsive layout contract.

Fusion-Task-Id: FN-4375
2026-05-13 15:28:12 -07:00
Fusion
7bc58d20e7 feat(FN-4332): complete Step 5 — add changeset for notification deferral
Fusion-Task-Id: FN-4332
Fusion-Task-Lineage: c920ac71-906b-458d-b496-1b60540b58f3
2026-05-13 15:15:41 -07:00
Fusion
187a02988d feat(FN-4369): complete Step 2 — normalize badge dimensions
Fusion-Task-Id: FN-4369
Fusion-Task-Lineage: 3f08cecf-2e6c-41a6-804f-645c4b809e4a
2026-05-13 15:11:37 -07:00
Fusion
c4e0e255eb feat(FN-4370): complete Step 5 — add changeset and finalize badge fix
Fusion-Task-Id: FN-4370
Fusion-Task-Lineage: c18188d5-c478-4233-943f-943b0125b271
2026-05-13 15:05:06 -07:00
Fusion
1291059ed5 feat(FN-4380): complete Step 6 — add changeset
Fusion-Task-Id: FN-4380
Fusion-Task-Lineage: f899054c-f015-4ebc-ae7d-1f25c2af41d7
2026-05-13 14:38:42 -07:00
Fusion
9ba4ef5010 feat(FN-4379): complete Step 7 — add release changeset
Fusion-Task-Id: FN-4379
Fusion-Task-Lineage: 88ee0f49-1db2-40e6-8781-7ecbc4dcbdc8
2026-05-13 14:22:23 -07:00
Fusion
48c6343673 feat(FN-4378): complete Step 7 — document github issue delete actions
Fusion-Task-Id: FN-4378
Fusion-Task-Lineage: d3867ba8-f852-41e3-9db0-584c0ffc23b1
2026-05-13 14:12:52 -07:00
Fusion
c50e152a87 feat(FN-4381): flush queued chat messages on recovery completion
Fixes chat hooks to flush queued messages when recovery completes, preventing stale messages from lingering in useChat and useQuickChat; includes tests for both hooks.

Fusion-Task-Id: FN-4381
2026-05-13 13:50:03 -07:00
Fusion
039e9a2d02 feat(FN-4309): guard squash commits against gitignored files
- Unstage gitignored paths before squash merge commit creation using git check-ignore
- Re-run the guard on the verification-fix squash restore path to keep ignored artifacts out of final merges
- Add merger tests covering forced .fusion artifacts, spaced ignored paths, and ignored-only squash results
- Document the gitignored-path merge guard and add a published package changeset

Fusion-Task-Id: FN-4309
2026-05-13 13:18:12 -07:00
Fusion
bb03977c5a chore(FN-4293): add changeset for tree-equality recovery
Fusion-Task-Id: FN-4293
Fusion-Task-Lineage: 5b7b5a50-d4f5-487c-b420-0ae2ea49b21f
2026-05-13 13:07:06 -07:00
Fusion
bb0d6118e2 feat(FN-4350): complete Step 5 — add changeset and delivery docs
Fusion-Task-Id: FN-4350
Fusion-Task-Lineage: 11fff2c2-1cd1-4562-9b01-032a15217479
2026-05-13 12:26:08 -07:00
Fusion
433490086b feat(FN-4349): complete Step 5 — add changeset
Fusion-Task-Id: FN-4349
Fusion-Task-Lineage: 7fa7b0ee-7705-4728-b425-1a3ac45e75a2
2026-05-13 12:16:51 -07:00
Fusion
09f4236139 feat(FN-4329): complete Step 5 — add changeset
Fusion-Task-Id: FN-4329
Fusion-Task-Lineage: 6a0517ee-39e6-497f-ad31-535dc3492489
2026-05-13 11:38:47 -07:00
Fusion
9e89c3bf54 feat(FN-4353): complete Step 3 — document default-on upgrade behavior
Fusion-Task-Id: FN-4353
Fusion-Task-Lineage: 2384df03-5eb9-4327-bb8a-1ee0f97ac0fd
2026-05-13 11:07:31 -07:00
Fusion
aaed8b97d4 feat(FN-4333): complete Step 5 — add post-merge audit mode changeset
Fusion-Task-Id: FN-4333
Fusion-Task-Lineage: 39442c0b-046e-4a34-8bdd-0f4c60bea451
2026-05-13 10:45:52 -07:00
Fusion
ebc5f707a8 feat(FN-4295): complete Step 3 — add changeset for reports stale threshold
Fusion-Task-Id: FN-4295
Fusion-Task-Lineage: e2a47487-33f5-4077-8031-c7bb14882121
2026-05-13 10:08:30 -07:00
Fusion
954ccba0a8 test(FN-4336): add mobile direct-chat anchor regression coverage
Fusion-Task-Id: FN-4336
Fusion-Task-Lineage: d96c9da9-e355-4dc0-bf8c-451a917b0270
2026-05-13 09:42:34 -07:00
Fusion
bd7544f629 feat(FN-4281): complete Step 4 — add changeset for mobile header fix
Fusion-Task-Id: FN-4281
Fusion-Task-Lineage: fe64ad7e-e0ef-4eda-8023-c080db34d5a9
2026-05-13 09:35:29 -07:00
Fusion
5e564cd079 docs(FN-4308): complete Step 6 — document done-task file aggregation source
Fusion-Task-Id: FN-4308
Fusion-Task-Lineage: d0a46a8f-2245-4ddc-99b4-06d78e87db16
2026-05-13 09:28:08 -07:00
gsxdsm
961f3da8bb feat(FN-4333): emergency hot-fix for post-merge audit blocks
Stop the post-merge audit from parking tasks as `failed` when deterministic
merge verification already proved the merged tree. Adds `postMergeAuditMode`
project setting (`block` | `warn` | `off`, default `block`) and a
verified-tree short-circuit for rebase-strategy overlap-only findings.

- packages/engine/src/merger.ts: new `resolvePostMergeAuditAction` helper
  + audit call site gated on `postMergeAuditMode` and verification-cache
  lookup. Rebase + overlap-only + verified-tree → pass through with a
  short-circuit log entry instead of throwing SquashAuditError.
- packages/core/src/types.ts, settings-schema.ts, index.ts: new
  `PostMergeAuditMode` type, `postMergeAuditMode` field on Settings,
  default `block`, exports `normalizePostMergeAuditMode`.
- packages/engine/src/__tests__/post-merge-audit-action.test.ts: unit
  tests for the decision helper.
- packages/dashboard/app/components/SettingsModal.tsx: settings UI row.
- .changeset: minor bump for @runfusion/fusion.

The FN-3936 silent-drop guard is preserved: duplicate-subject findings
still block in `block` mode and squash-strategy audits still block
(no equivalent deterministic guarantee).

Fusion-Task-Id: FN-4333
2026-05-13 09:06:20 -07:00
Fusion
f6744e018a feat(FN-4327): complete Step 6 — add changeset for direct visibility anchoring
Fusion-Task-Id: FN-4327
Fusion-Task-Lineage: 8508cca0-c7ff-43da-bbf1-385f9bc095ff
2026-05-13 09:06:20 -07:00
Fusion
7f86215a9e feat(FN-4102): add executor durability guard documentation
Adds documentation and a changeset for the executor durability guard feature (FN-4102).

Fusion-Task-Id: FN-4102
2026-05-13 09:06:20 -07:00
Fusion
ca6fe91778 feat(FN-4248): complete Step 5 — add changeset and delivery notes
Fusion-Task-Id: FN-4248
Fusion-Task-Lineage: 90028ba0-6d46-4b61-8458-1f1a4fa27fa8
2026-05-13 09:06:20 -07:00
Fusion
eb015bca39 feat(FN-4306): complete Step 5 — document setting and add changeset
Fusion-Task-Id: FN-4306
Fusion-Task-Lineage: b0ab9b60-de02-40a7-ad8b-0ca18c98e16c
2026-05-13 09:06:20 -07:00
Fusion
86a40dd675 feat(FN-4247): complete Step 4 — add changeset for drafts priority
Fusion-Task-Id: FN-4247
Fusion-Task-Lineage: d0b267a8-1254-4f87-87b8-c9f565fe9950
2026-05-13 09:06:20 -07:00
Fusion
b4b80ac0cb fix(FN-4162): keep GitHub tracking enable button mounted while saving
- Keep the inline GitHub tracking Enable button mounted during save
- Disable the button while showing the in-flight tracking status spinner
- Update dashboard tests to assert the stable mounted-button behavior
- Add a changeset for the published CLI package

Fusion-Task-Id: FN-4162
2026-05-13 06:29:36 -07:00
Fusion
00416c2769 feat(FN-4080): complete Step 4 — document thinking persistence toggles
Fusion-Task-Id: FN-4080
Fusion-Task-Lineage: 086863ba-7100-41ab-9cfc-197301fbcab0
2026-05-13 06:29:36 -07:00
Fusion
a51d14ef83 feat(FN-4259): add release note for exhausted-loop contract
Fusion-Task-Id: FN-4259
Fusion-Task-Lineage: 7a7ca17b-93ce-4319-8461-7d1462a2c0e1
2026-05-13 06:29:36 -07:00
Fusion
5225300c6d chore(FN-4223): add changeset and polish research description test
Fusion-Task-Id: FN-4223
Fusion-Task-Lineage: bc114ff2-ee0f-4e96-b1d2-6ba3112a48e4
2026-05-13 06:29:36 -07:00
Fusion
b514ed0855 feat(FN-4230): complete Step 4 — add changeset
Fusion-Task-Id: FN-4230
Fusion-Task-Lineage: 99ad972d-a633-4905-b8e1-d606f4237b7d
2026-05-13 06:29:35 -07:00
Fusion
8e08891a3c feat(FN-4190): complete Step 7 — tracking UX and summarization discoverability
Fusion-Task-Id: FN-4190
Fusion-Task-Lineage: 5d94a4ad-32fb-4d20-8d04-5d757619f104
2026-05-13 06:29:35 -07:00
Fusion
fb50956351 feat(FN-4214): fix live-log empty-state when agent logs become stale
Fixes a live-log empty-state regression in the workflow results tab by adding test coverage for the stale agent-log case, with a changeset prepared to publish the patch.

Fusion-Task-Id: FN-4214

Fusion-Task-Lineage: da180434-6d1d-497e-8f5a-f29d07a874f2
2026-05-13 06:29:35 -07:00
Fusion
e43cdd2158 fix(FN-4114): normalize invariant requeue state and add changeset
Fusion-Task-Id: FN-4114
Fusion-Task-Lineage: 44fd5718-42dc-44d1-8f5a-97b67dd05d13
2026-05-13 06:29:35 -07:00
Fusion
7d12b9e406 feat(FN-4199): complete Step 5 — docs and changeset
Fusion-Task-Id: FN-4199
Fusion-Task-Lineage: fd530f3d-ef2e-4684-ab05-5aaab6856f15
2026-05-13 06:29:35 -07:00
Fusion
d4cac08455 feat(FN-4168): complete Step 6 — document stalled review signal
Fusion-Task-Id: FN-4168
Fusion-Task-Lineage: 781ffc66-cb1c-42b9-85e1-e5cbe0655863
2026-05-13 06:29:35 -07:00
Fusion
fcd70d4c07 fix(FN-4201): add autosize regression coverage and finalize gates
Fusion-Task-Id: FN-4201
Fusion-Task-Lineage: 6bfc2e72-8c11-4e63-b3c7-9245965d2380
2026-05-13 06:29:35 -07:00
Fusion
79cef0111d feat(FN-4092): complete Step 5 — document unavailable recovery contract
Fusion-Task-Id: FN-4092
Fusion-Task-Lineage: fcee3a44-5c36-4899-bf9d-835d36abdf2e
2026-05-13 06:29:35 -07:00
Fusion
a35d4dc547 feat(FN-4121): complete Step 8 — add changeset for org chart layout toggle
Fusion-Task-Id: FN-4121
Fusion-Task-Lineage: aa8b8ab7-c250-4ce5-b42e-7b7a2ba920b1
2026-05-13 06:29:35 -07:00
Fusion
539c730630 feat(FN-4174): complete Step 4 — add changeset for always-on web search row
Fusion-Task-Id: FN-4174
Fusion-Task-Lineage: 8b50a52b-dc3a-448d-998b-09023fbdd9af
2026-05-13 06:29:34 -07:00