gsxdsm
a2b494ddc0
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
a3e0f2ba7d
test(FN-4316): complete Step 4 — add todo aging column coverage
...
Fusion-Task-Id: FN-4316
Fusion-Task-Lineage: 6b2b78b4-effa-479c-9a22-5a53d0f74894
2026-05-13 18:14:23 -07:00
Fusion
94ba91699c
feat(FN-4316): complete Step 3 — mount todo aging filter in column
...
Fusion-Task-Id: FN-4316
Fusion-Task-Lineage: 6b2b78b4-effa-479c-9a22-5a53d0f74894
2026-05-13 18:14:23 -07:00
Fusion
73145afa09
feat(FN-4316): complete Step 2 — add todo aging summary component
...
Fusion-Task-Id: FN-4316
Fusion-Task-Lineage: 6b2b78b4-effa-479c-9a22-5a53d0f74894
2026-05-13 18:14:22 -07:00
Fusion
b67f986e5e
feat(FN-4316): complete Step 1 — add todo aging utility
...
Fusion-Task-Id: FN-4316
Fusion-Task-Lineage: 6b2b78b4-effa-479c-9a22-5a53d0f74894
2026-05-13 18:14:22 -07:00
Fusion
d39430b344
feat(FN-4409): add branch contamination assertions in worktree flows
...
Fusion-Task-Id: FN-4409
Fusion-Task-Lineage: c608c942-fec7-4489-9970-b8dc314f8be2
2026-05-13 17:44:46 -07:00
Fusion
69c0a5622c
test(FN-4328): complete Step 3 — update modal button expectations
...
Fusion-Task-Id: FN-4328
Fusion-Task-Lineage: 32d20417-4e86-4fb5-9be9-72d98aaf0761
2026-05-13 17:07:23 -07:00
Fusion
e27d1e9ff1
feat(FN-4328): complete Step 2 — stop passing modal AI actions
...
Fusion-Task-Id: FN-4328
Fusion-Task-Lineage: 32d20417-4e86-4fb5-9be9-72d98aaf0761
2026-05-13 17:07:23 -07:00
Fusion
f9978e6f10
feat(FN-4328): complete Step 1 — remove modal AI action props
...
Fusion-Task-Id: FN-4328
Fusion-Task-Lineage: 32d20417-4e86-4fb5-9be9-72d98aaf0761
2026-05-13 17:07:23 -07:00
Fusion
e1c2cd564e
test(FN-4397): align worktree conflict tests with stale-resolved + tripwire assertions
...
Fusion-Task-Id: FN-4397
Fusion-Task-Lineage: 1ffac4f7-adf5-4115-b588-108d75eadde7
2026-05-13 16:58:35 -07:00
Fusion
ac2f779e1e
fix(FN-4397): add branch-conflict tripwire and tighten stale detection
...
Fusion-Task-Id: FN-4397
Fusion-Task-Lineage: 1ffac4f7-adf5-4115-b588-108d75eadde7
2026-05-13 16:58:35 -07:00
Fusion
e16af74ce4
fix(FN-4397): complete Step 3 — treat unbound branch conflicts as stale-resolved
...
Fusion-Task-Id: FN-4397
Fusion-Task-Lineage: 1ffac4f7-adf5-4115-b588-108d75eadde7
2026-05-13 16:58:35 -07:00
Fusion
de7de9526a
test(FN-4397): add loop reproduction for repeated branch-conflict emissions
...
Fusion-Task-Id: FN-4397
Fusion-Task-Lineage: 1ffac4f7-adf5-4115-b588-108d75eadde7
2026-05-13 16:58:35 -07:00
Fusion
b0f01451d7
test(FN-4397): annotate regression coverage for stale/live branch conflict
...
Fusion-Task-Id: FN-4397
Fusion-Task-Lineage: 1ffac4f7-adf5-4115-b588-108d75eadde7
2026-05-13 16:58:34 -07:00
Fusion
0c729718d6
test(FN-4397): complete Step 2 — reproduce stale/live misclassification
...
Fusion-Task-Id: FN-4397
Fusion-Task-Lineage: 1ffac4f7-adf5-4115-b588-108d75eadde7
2026-05-13 16:58:34 -07:00
Fusion
5f9493c8a3
test(FN-4386): complete Step 5 — add skip idle heartbeat toggle tests
...
Fusion-Task-Id: FN-4386
Fusion-Task-Lineage: 82c1c281-8d69-42c1-8705-90e811b6df93
2026-05-13 16:38:00 -07:00
Fusion
7161feaa18
feat(FN-4386): complete Step 4 — add idle heartbeat toggle in agent config
...
Fusion-Task-Id: FN-4386
Fusion-Task-Lineage: 82c1c281-8d69-42c1-8705-90e811b6df93
2026-05-13 16:38:00 -07:00
Fusion
20de80303e
test(FN-4386): complete Step 3 — cover idle heartbeat timer gate
...
Fusion-Task-Id: FN-4386
Fusion-Task-Lineage: 82c1c281-8d69-42c1-8705-90e811b6df93
2026-05-13 16:38:00 -07:00
Fusion
095e9a564c
feat(FN-4386): complete Step 2 — gate timer heartbeat when idle
...
Fusion-Task-Id: FN-4386
Fusion-Task-Lineage: 82c1c281-8d69-42c1-8705-90e811b6df93
2026-05-13 16:38:00 -07:00
Fusion
87bf64cdbc
feat(FN-4386): complete Step 1 — add runtime config field
...
Fusion-Task-Id: FN-4386
Fusion-Task-Lineage: 82c1c281-8d69-42c1-8705-90e811b6df93
2026-05-13 16:38:00 -07:00
Fusion
cefe80c178
test(FN-4288): stabilize dashboard mobile and quickchat assertions
...
Fusion-Task-Id: FN-4288
Fusion-Task-Lineage: 09c6efc0-ea0b-443a-ab45-a89188fcf888
2026-05-13 16:29:37 -07:00
Fusion
8456ce71ab
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
d4f080d162
feat(FN-4288): complete Step 4 — add stall diagnostics in task detail
...
Fusion-Task-Id: FN-4288
Fusion-Task-Lineage: 09c6efc0-ea0b-443a-ab45-a89188fcf888
2026-05-13 16:29:37 -07:00
Fusion
cf7d727c3f
feat(FN-4288): complete Step 3 — add task card stall badge
...
Fusion-Task-Id: FN-4288
Fusion-Task-Lineage: 09c6efc0-ea0b-443a-ab45-a89188fcf888
2026-05-13 16:29:37 -07:00
Fusion
7591e1fadc
feat(FN-4288): complete Step 2 — add stall log entry locator
...
Fusion-Task-Id: FN-4288
Fusion-Task-Lineage: 09c6efc0-ea0b-443a-ab45-a89188fcf888
2026-05-13 16:29:37 -07:00
Fusion
1b7d760b92
feat(FN-4288): complete Step 1 — add in-review stall copy module
...
Fusion-Task-Id: FN-4288
Fusion-Task-Lineage: 09c6efc0-ea0b-443a-ab45-a89188fcf888
2026-05-13 16:29:37 -07:00
Fusion
074fd1e23b
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
b752307122
test(FN-4307): fix notification tests for strict task status typing
...
Fusion-Task-Id: FN-4307
Fusion-Task-Lineage: 00140a5a-af93-4905-8570-32d7ecb8a874
2026-05-13 15:58:49 -07:00
Fusion
ffb31a4af6
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
e236712d9b
test(FN-4307): cover suppression signals and timer cleanup
...
Fusion-Task-Id: FN-4307
Fusion-Task-Lineage: 00140a5a-af93-4905-8570-32d7ecb8a874
2026-05-13 15:58:48 -07:00
Fusion
8fb7306e5f
test(FN-4307): add failed-notification grace window coverage
...
Fusion-Task-Id: FN-4307
Fusion-Task-Lineage: 00140a5a-af93-4905-8570-32d7ecb8a874
2026-05-13 15:58:48 -07:00
Fusion
6bf90f1cac
feat(FN-4307): complete Step 2 — suppress transient failure surfacing
...
Fusion-Task-Id: FN-4307
Fusion-Task-Lineage: 00140a5a-af93-4905-8570-32d7ecb8a874
2026-05-13 15:58:48 -07:00
Fusion
74f069b57f
feat(FN-4307): complete Step 1 — defer failed notifications
...
Fusion-Task-Id: FN-4307
Fusion-Task-Lineage: 00140a5a-af93-4905-8570-32d7ecb8a874
2026-05-13 15:58:48 -07:00
Fusion
7ecaec9839
test(FN-4387): complete Step 3 — update mobile padding regression assertion
...
Fusion-Task-Id: FN-4387
Fusion-Task-Lineage: d651d6a8-a005-4dca-89ac-1baa17e4f01d
2026-05-13 15:33:25 -07:00
Fusion
3f8e9142f1
feat(FN-4387): complete Step 2 — right-size mobile chat session text padding
...
Fusion-Task-Id: FN-4387
Fusion-Task-Lineage: d651d6a8-a005-4dca-89ac-1baa17e4f01d
2026-05-13 15:33:25 -07:00
Fusion
ff4f6b22d0
fix(FN-4383): satisfy tsc signatures in exec mock implementations
...
Fusion-Task-Id: FN-4383
Fusion-Task-Lineage: 69516bdf-34d1-405c-8bc9-b558c4780863
2026-05-13 15:28:34 -07:00
Fusion
fab7de4147
fix(FN-4383): align pooled worktree baseline tests with merge-base capture
...
Fusion-Task-Id: FN-4383
Fusion-Task-Lineage: 69516bdf-34d1-405c-8bc9-b558c4780863
2026-05-13 15:28:34 -07:00
Fusion
0d966aecf8
test(FN-4383): complete Step 3 — add real-git base commit capture regression
...
Fusion-Task-Id: FN-4383
Fusion-Task-Lineage: 69516bdf-34d1-405c-8bc9-b558c4780863
2026-05-13 15:28:34 -07:00
Fusion
82c52473e6
test(FN-4383): complete Step 2 — add base commit capture unit tests
...
Fusion-Task-Id: FN-4383
Fusion-Task-Lineage: 69516bdf-34d1-405c-8bc9-b558c4780863
2026-05-13 15:28:34 -07:00
Fusion
5de91e6e80
feat(FN-4383): complete Step 1 — capture baseCommitSha from merge-base
...
Fusion-Task-Id: FN-4383
Fusion-Task-Lineage: 69516bdf-34d1-405c-8bc9-b558c4780863
2026-05-13 15:28:34 -07:00
Fusion
a77bf81b6c
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
6130a95fe2
test(FN-4332): align notifier defaults with legacy failure behavior
...
Fusion-Task-Id: FN-4332
Fusion-Task-Lineage: c920ac71-906b-458d-b496-1b60540b58f3
2026-05-13 15:15:41 -07:00
Fusion
507cfbbf14
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
09fc59944d
feat(FN-4332): complete Step 4 — add notification failure controls
...
Fusion-Task-Id: FN-4332
Fusion-Task-Lineage: c920ac71-906b-458d-b496-1b60540b58f3
2026-05-13 15:15:41 -07:00
Fusion
0ee31db9e1
feat(FN-4332): complete Step 2 — defer failed notifications
...
Fusion-Task-Id: FN-4332
Fusion-Task-Lineage: c920ac71-906b-458d-b496-1b60540b58f3
2026-05-13 15:15:41 -07:00
Fusion
719b6284db
feat(FN-4332): complete Step 1 — add failure notification settings defaults
...
Fusion-Task-Id: FN-4332
Fusion-Task-Lineage: c920ac71-906b-458d-b496-1b60540b58f3
2026-05-13 15:15:41 -07:00
Fusion
40d85421df
test(FN-4369): complete Step 3 — add dashboard quality lane coverage for badge test
...
Fusion-Task-Id: FN-4369
Fusion-Task-Lineage: 3f08cecf-2e6c-41a6-804f-645c4b809e4a
2026-05-13 15:11:37 -07:00
Fusion
014ede3196
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
5587d82324
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
bcad65e84e
feat(FN-4370): complete Step 3 — retain badge snapshots across unsubscribes
...
Fusion-Task-Id: FN-4370
Fusion-Task-Lineage: c18188d5-c478-4233-943f-943b0125b271
2026-05-13 15:05:05 -07:00