Commit Graph

1273 Commits

Author SHA1 Message Date
Fusion
50ccd27a13 test(FN-4393): add heartbeat memory mode integration coverage
Fusion-Task-Id: FN-4393
Fusion-Task-Lineage: 3615215d-9caa-4402-9258-a5a5de137dd6
2026-05-13 23:41:35 -07:00
Fusion
3a7a5f6e46 fix(FN-4393): stabilize heartbeat memory mode transition handling
Fusion-Task-Id: FN-4393
Fusion-Task-Lineage: 3615215d-9caa-4402-9258-a5a5de137dd6
2026-05-13 23:41:35 -07:00
Fusion
fbec3e4d2d feat(FN-4393): complete Step 3 — branch memory inclusion by mode
Fusion-Task-Id: FN-4393
Fusion-Task-Lineage: 3615215d-9caa-4402-9258-a5a5de137dd6
2026-05-13 23:41:35 -07:00
Fusion
96b6d974e9 feat(FN-4393): complete Step 2 — add memory index builder
Fusion-Task-Id: FN-4393
Fusion-Task-Lineage: 3615215d-9caa-4402-9258-a5a5de137dd6
2026-05-13 23:41:35 -07:00
Fusion
3bfc9fe7ab test(FN-4434): complete Step 3 — cover recovery audit emission
Fusion-Task-Id: FN-4434
Fusion-Task-Lineage: 547a5663-114c-49c8-bd0c-dddfb280c4ef
2026-05-13 22:52:53 -07:00
Fusion
0f906d7345 feat(FN-4434): complete Step 2 — emit already-merged recovery audit
Fusion-Task-Id: FN-4434
Fusion-Task-Lineage: 547a5663-114c-49c8-bd0c-dddfb280c4ef
2026-05-13 22:52:53 -07:00
Fusion
bdc4045e59 feat(FN-4434): complete Step 1 — add run-audit mutation type
Fusion-Task-Id: FN-4434
Fusion-Task-Lineage: 547a5663-114c-49c8-bd0c-dddfb280c4ef
2026-05-13 22:52:53 -07:00
Fusion
8e2d4c962b test(FN-4313): complete Step 2 — add project engine id accessor
Fusion-Task-Id: FN-4313
Fusion-Task-Lineage: 36b8aad3-20f4-475b-9b0f-63e5458d1b91
2026-05-13 22:46:17 -07:00
Fusion
2838df2199 feat(FN-4388): complete remaining observability surfaces
Fusion-Task-Id: FN-4388
Fusion-Task-Lineage: 7497a0a1-5edb-4778-b339-118d1fd668f7
2026-05-13 22:41:29 -07:00
Fusion
faa837a071 feat(FN-4388): complete Step 1 — engine cache metrics logs
Fusion-Task-Id: FN-4388
Fusion-Task-Lineage: 7497a0a1-5edb-4778-b339-118d1fd668f7
2026-05-13 22:41:29 -07:00
Fusion
d94caed102 test(FN-4361): add reliability interaction backstop suite
Fusion-Task-Id: FN-4361
Fusion-Task-Lineage: bdf2de3b-c9ce-4a29-9e60-9a029f913ae9
2026-05-13 22:08:41 -07:00
Fusion
1696c312cb fix(FN-4389): complete missing token usage parity and dashboard split
Fusion-Task-Id: FN-4389
Fusion-Task-Lineage: 366f9d57-c476-448f-96c0-6e753fc8b090
2026-05-13 22:03:38 -07:00
Fusion
0eed7c0065 feat(FN-4389): complete Step 8 — run verification and fix regressions
Fusion-Task-Id: FN-4389
Fusion-Task-Lineage: 366f9d57-c476-448f-96c0-6e753fc8b090
2026-05-13 22:03:38 -07:00
Fusion
b9dcda05c5 fix(FN-4344): normalize cache lookup commands for optional verification settings
Fusion-Task-Id: FN-4344
Fusion-Task-Lineage: 5c3fc80e-619d-4daf-a224-580cea402b4c
2026-05-13 21:59:15 -07:00
Fusion
551bb16236 test(FN-4344): complete Step 2 — add HEAD-drift audit cache lookup tests
Fusion-Task-Id: FN-4344
Fusion-Task-Lineage: 5c3fc80e-619d-4daf-a224-580cea402b4c
2026-05-13 21:59:15 -07:00
Fusion
e741d0e213 feat(FN-4344): complete Step 1 — add multi-ref audit verification lookup
Fusion-Task-Id: FN-4344
Fusion-Task-Lineage: 5c3fc80e-619d-4daf-a224-580cea402b4c
2026-05-13 21:59:15 -07:00
Fusion
28427aece7 feat(FN-4221): complete Step 3 — wire research dispatcher into engine
Fusion-Task-Id: FN-4221
Fusion-Task-Lineage: d710caa1-18b8-40d9-a70a-c5a4568484e3
2026-05-13 21:52:40 -07:00
gsxdsm
d22a52149d chore(release): v0.29.0
Version bump via changesets.
2026-05-13 21:39:15 -07:00
Fusion
609ed5da90 test(FN-4424): complete Step 5 — cover empty cherry-pick real-git cases
Fusion-Task-Id: FN-4424
Fusion-Task-Lineage: 0a3120bf-9f09-45de-bda7-a59c5842b2d9
2026-05-13 20:56:33 -07:00
Fusion
d98943efca feat(FN-4424): complete Step 2 — add empty cherry-pick detection
Fusion-Task-Id: FN-4424
Fusion-Task-Lineage: 0a3120bf-9f09-45de-bda7-a59c5842b2d9
2026-05-13 20:56:33 -07:00
Fusion
4eb73a983e fix(FN-4186): stabilize workspace lint and test baselines
Fusion-Task-Id: FN-4186
Fusion-Task-Lineage: 30721f11-a830-4549-aa91-d8c3186c0dcf
2026-05-13 20:20:26 -07:00
Fusion
f81fe5ddc0 fix(FN-4343): isolate workflow-step scope checks to post-step delta
Fusion-Task-Id: FN-4343
Fusion-Task-Lineage: b880b71a-9250-4d9e-bdac-8298a73058f7
2026-05-13 20:03:31 -07:00
Fusion
7366bb887d feat(FN-4343): complete Step 3 — enforce workflow step scope invariants
Fusion-Task-Id: FN-4343
Fusion-Task-Lineage: b880b71a-9250-4d9e-bdac-8298a73058f7
2026-05-13 20:03:31 -07:00
Fusion
06f44f8f8d feat(FN-4343): complete Step 2 — dual-signal frontend ux auto-skip
Fusion-Task-Id: FN-4343
Fusion-Task-Lineage: b880b71a-9250-4d9e-bdac-8298a73058f7
2026-05-13 20:03:31 -07:00
Fusion
085c44bc25 feat(FN-4315): add audit recovery pipeline documentation and changeset
Completes FN-4315 by adding a patch changeset for `@runfusion/fusion` and updating project documentation (AGENTS.md and settings reference) to cover the audit recovery pipeline feature.

Fusion-Task-Id: FN-4315

Fusion-Task-Lineage: 2646fd86-e525-4b62-a041-616fa7789e84
2026-05-13 20:03:02 -07:00
Fusion
c9d0fcd0be feat(FN-4315): complete Step 2 — add programmatic survival checks
Fusion-Task-Id: FN-4315
Fusion-Task-Lineage: 2646fd86-e525-4b62-a041-616fa7789e84
2026-05-13 19:30:20 -07:00
Fusion
cb53d13623 feat(FN-4315): complete Step 1 — add audit recovery settings and bounce field plumbing
Fusion-Task-Id: FN-4315
Fusion-Task-Lineage: 2646fd86-e525-4b62-a041-616fa7789e84
2026-05-13 19:30:20 -07:00
gsxdsm
ab4df2a72f fix(FN-4417): prefer local main over origin/main in contamination base
Follow-up to 35854e047. The previous fix correctly stopped using
task.baseCommitSha for the contamination check, but the new
resolveContaminationBaseRef tried origin/main first and fell back to
local main only if the origin/main lookup failed. On dev machines that
have not pushed recently, origin/main is a tracking ref that can lag
local main by hundreds of commits. `git merge-base HEAD origin/main`
then resolves successfully and returns the last common ancestor between
the (force-reset-to-local-main) branch and the stale origin/main ref,
which is exactly the same stale SHA the prior bug surfaced. Every
commit on local main since that point is then flagged as foreign
contamination.

Observed: after restarting the engine with 35854e047, FN-4315/FN-4403
still failed with `since base 961f3da8bb7b...`. Local main was 166
commits ahead of origin/main; 961f3da was the last shared commit.

Fix: reorder the shell fallback to prefer `main` over `origin/main`.
Local main is the canonical integration target for Fusion's merger,
and origin/main is only useful as a fallback when local main does not
exist (rare in a worktree).

Test updated: `resolveContaminationBaseRef returns the current
merge-base...` now asserts local `main` appears before `origin/main` in
the issued command so the shell `||` resolves to local main first.

Fusion-Task-Id: FN-4417
2026-05-13 19:07:31 -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
c1f787a0df 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
1941d2133e 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
09e6302798 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
263de0cb3d 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
3d2997ce8e 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
e88b5dbb01 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
381ecbfe21 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
ea4af60998 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
8a9f320983 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
be6fe05b2f 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
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
425926b0b4 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
fac39cf72e 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
76a07fea21 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
2e7e5e091c 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
084047555c 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
86bcd2566b 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
3695555757 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
f9f8ee6f62 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
731aa7b14a 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
c9e8e7a350 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