Commit Graph

2154 Commits

Author SHA1 Message Date
Fusion (runfusion.ai)
0b17d7915c fix(FN-5103): complete Step 8 — resolve verification regressions
Fusion-Task-Id: FN-5103
Fusion-Task-Lineage: e4e4d9ba-4884-4feb-b18b-a30e799c3fb1
2026-05-19 01:24:55 -07:00
Fusion (runfusion.ai)
0abb1fad2c feat(FN-5103): expose rebase landed-files capture helper for reliability tests
Fusion-Task-Id: FN-5103
Fusion-Task-Lineage: e4e4d9ba-4884-4feb-b18b-a30e799c3fb1
2026-05-19 01:24:55 -07:00
Fusion (runfusion.ai)
3e7073ab84 test(FN-5103): address review gaps in landed-files coverage
Fusion-Task-Id: FN-5103
Fusion-Task-Lineage: e4e4d9ba-4884-4feb-b18b-a30e799c3fb1
2026-05-19 01:24:55 -07:00
Fusion (runfusion.ai)
03212ce00b test(FN-5103): complete Step 6 — add landed-files attribution reliability coverage
Fusion-Task-Id: FN-5103
Fusion-Task-Lineage: e4e4d9ba-4884-4feb-b18b-a30e799c3fb1
2026-05-19 01:24:55 -07:00
Fusion (runfusion.ai)
20ab2f0172 feat(FN-5103): complete Step 3 — skip reconcile for restricted landed-files capture
Fusion-Task-Id: FN-5103
Fusion-Task-Lineage: e4e4d9ba-4884-4feb-b18b-a30e799c3fb1
2026-05-19 01:24:55 -07:00
Fusion (runfusion.ai)
d6be8fc771 feat(FN-5103): complete Step 2 — restrict rebase landed-files capture
Fusion-Task-Id: FN-5103
Fusion-Task-Lineage: e4e4d9ba-4884-4feb-b18b-a30e799c3fb1
2026-05-19 01:24:54 -07:00
Fusion (runfusion.ai)
3ac14a3605 fix(FN-5103): expose own commit shas in attribution helper
Fusion-Task-Id: FN-5103
Fusion-Task-Lineage: e4e4d9ba-4884-4feb-b18b-a30e799c3fb1
2026-05-19 01:24:54 -07:00
Fusion (runfusion.ai)
654e59199b feat(FN-5112): complete Step 3 — reviewer LLM defense-in-depth
Fusion-Task-Id: FN-5112
Fusion-Task-Lineage: 692fba2a-5856-4256-8144-d87bda56e1aa
2026-05-19 01:02:38 -07:00
Fusion (runfusion.ai)
574d661134 feat(FN-5112): complete Step 2 — gate fn_review_spec on dangling-ref detector
Fusion-Task-Id: FN-5112
Fusion-Task-Lineage: 692fba2a-5856-4256-8144-d87bda56e1aa
2026-05-19 01:02:38 -07:00
Fusion (runfusion.ai)
b5e257d6e3 feat(FN-5112): complete Step 1 — dangling task-doc reference detector
Fusion-Task-Id: FN-5112
Fusion-Task-Lineage: 692fba2a-5856-4256-8144-d87bda56e1aa
2026-05-19 01:02:38 -07:00
Fusion (runfusion.ai)
cc6bd1e724 feat(FN-5102): complete Step 4 and 5 — verify and document
Fusion-Task-Id: FN-5102
Fusion-Task-Lineage: 13be2941-176e-4a6e-b6fc-2bb644f7444a
2026-05-18 23:50:00 -07:00
Fusion (runfusion.ai)
a43c0cfb18 test(FN-5102): expand agent-surface github tracking regressions
Fusion-Task-Id: FN-5102
Fusion-Task-Lineage: 13be2941-176e-4a6e-b6fc-2bb644f7444a
2026-05-18 23:50:00 -07:00
Fusion (runfusion.ai)
000fa3d6bb feat(FN-5102): complete Step 2 — prefill agent github tracking
Fusion-Task-Id: FN-5102
Fusion-Task-Lineage: 13be2941-176e-4a6e-b6fc-2bb644f7444a
2026-05-18 23:50:00 -07:00
Fusion (runfusion.ai)
13977f4682 test(FN-5102): harden repro mock to keep hook deterministic
Fusion-Task-Id: FN-5102
Fusion-Task-Lineage: 13be2941-176e-4a6e-b6fc-2bb644f7444a
2026-05-18 23:50:00 -07:00
Fusion (runfusion.ai)
780cf6b3d8 test(FN-5102): add failing agent tracking flag repro
Fusion-Task-Id: FN-5102
Fusion-Task-Lineage: 13be2941-176e-4a6e-b6fc-2bb644f7444a
2026-05-18 23:50:00 -07:00
Fusion (runfusion.ai)
76790c424f feat(FN-5053): fix verification gate registration for workspace test stabil
Fix FN-5053 restores workspace test stability for the verification gate by adjusting the duplicate guard and task workflow route registration, with updated coverage in the branch-conflicts and diff-volume-gate test suites.

Fusion-Task-Id: FN-5053

Fusion-Task-Lineage: cc8a561a-fd56-4275-b06c-0966c80c2868
2026-05-18 23:14:27 -07:00
Fusion (runfusion.ai)
65f9995b26 test(FN-5090): align attribution test shape with commit metadata
Fusion-Task-Id: FN-5090
Fusion-Task-Lineage: 9d74fe7a-d54c-460f-9db9-1c90475ec832
2026-05-18 22:44:49 -07:00
Fusion (runfusion.ai)
45fa52d735 feat(FN-5090): complete Step 1 — add shared commit attribution helper
Fusion-Task-Id: FN-5090
Fusion-Task-Lineage: 9d74fe7a-d54c-460f-9db9-1c90475ec832
2026-05-18 22:44:41 -07:00
Fusion (runfusion.ai)
d8a04ff5a7 feat(FN-5099): complete Step 4 — pass verification gates
Fusion-Task-Id: FN-5099
Fusion-Task-Lineage: 26353f25-da61-4b61-8fd2-69915a984cc4
2026-05-18 22:34:21 -07:00
Fusion (runfusion.ai)
12adde0ab9 feat(FN-5052): complete Step 8 — documentation and delivery
Fusion-Task-Id: FN-5052
Fusion-Task-Lineage: 607cd9e6-e4d0-4572-b183-8253d127209f
2026-05-18 21:55:51 -07:00
Fusion (runfusion.ai)
a0b75579b8 feat(FN-5094): merge fusion/fn-5094
Commits merged:
- merge fusion/fn-5094

Files changed:
.../self-healing-stale-merger-status.test.ts       | 200 +++++++++++++++++++++
 packages/engine/src/branch-conflicts.ts            |   6 +-
 packages/engine/src/run-audit.ts                   |   2 +
 packages/engine/src/self-healing.ts                |  67 ++++++-
 4 files changed, 271 insertions(+), 4 deletions(-)

Fusion-Task-Id: FN-5094

Fusion-Task-Lineage: c6c9710c-51fe-40e9-bfad-bfb6d589c7f4
2026-05-18 21:54:39 -07:00
Fusion (runfusion.ai)
12d718166c test(FN-5094): complete Step 4 — add inline attribution coverage
Fusion-Task-Id: FN-5094
Fusion-Task-Lineage: c6c9710c-51fe-40e9-bfad-bfb6d589c7f4
2026-05-18 21:44:35 -07:00
gsxdsm
a25ef82e13 fix(FN-5092): clear transient "merging" status on self-healing auto-finalize paths
The merger maintains a single mergeActive slot per project; while a task
holds it, no other in-review task can be picked up. When the merger
sets task.status="merging" but the task is then completed via a
self-healing recovery path instead of the merger's own completeTask(),
the status field is never cleared. The mergeActive slot stays leaked
indefinitely, and the entire merger queue stalls.

Concrete failure: FN-5052 landed via FN-4499 auto-recover-branch-misbound
on 2026-05-18 15:48 with mergeConfirmed=true. Status field stayed at
"merging". 12.5 hours later, FN-5083, FN-5060, FN-5053, FN-5092, and
every other in-review task were waiting on the merger queue with no
merger activity at all.

Two self-healing → done paths were missing the status clear:

- recoverBranchMisboundInReviewTasks() (self-healing.ts ~5031):
  branch-tip-misbound recovery moves an in-review task to done after
  detecting its work landed on main via a different commit. The merger's
  completeTask() correctly clears status before moveTask(); this path
  did not.

- proven-no-op finalize in recoverNoOpReviewTasks() (self-healing.ts
  ~3460): for tasks proven already on main (FN-4500 classifier), the
  updateTask({ mergeDetails, modifiedFiles }) patch did not include
  status: null. Same leak class.

Both now follow the pattern from merger.ts completeTask() and
project-engine.ts auto-merge already-confirmed:
  updateTask({ status: null, error: null, paused: false }) before
  moveTask("done").

FN-5052 task.json patched to clear the existing stale status as part
of this commit so the running engine releases its mergeActive slot
on next sweep.

Fusion-Task-Id: FN-5092
2026-05-18 21:24:02 -07:00
gsxdsm
fac81b8432 fix(FN-5090): use live merge-base in classifyForeignOnlyContamination
When task.baseCommitSha becomes stale (because main has advanced past
it via legitimate merges of OTHER tasks), git log baseSha..branchName
includes commits that are already on main with foreign task-id
attribution. classifyForeignOnlyContamination then returns
kind="ambiguous" — own commits AND foreign commits in range — and the
contamination recovery skips, blocking the merger handoff
indefinitely.

This stranded FN-5092 after manual merges of FN-5060/FN-5090/FN-5053
moved main forward without updating downstream tasks' baseCommitSha.

Fix: when git merge-base(branch, main) is a descendant of the
persisted baseSha, prefer the live merge-base for the contamination
classification range. Fail open to persisted baseSha on any git
error. Also pass the effective base to classifyBootstrapMisbinding
so both classifiers see consistent input.

Fusion-Task-Id: FN-5090
2026-05-18 21:23:19 -07:00
gsxdsm
b9d4bd8c1b feat(FN-5053): merge fusion/fn-5053 — align no-task heartbeat prompts
Squash-merge of fusion/fn-5053 (7 commits including retry duplicates).
Drops stale conflict in packages/core/src/index.ts (FN-5053 branch
re-exported symbols that main already exports) and packages/core/src/store.ts
(branch had a stale, narrower updateTask signature; main is authoritative).

Manual CEO recovery after the trailerless-commit attribution bug
(now fixed by FN-5090 in 92be8225e) stranded this task in in-review.

Fusion-Task-Id: FN-5053
2026-05-18 21:08:04 -07:00
gsxdsm
92be8225e4 fix(FN-5090): subject-prefix fallback in trailer attribution
The contamination detector relied solely on the Fusion-Task-Id commit
trailer to attribute commits to a task. Agent-driven commits do not
currently get the trailer written (no commit-msg hook installs it), so
filterFilesToOwnTaskCommits saw 0 of N commits attributed even when
every commit subject was clearly feat(FN-XXXX): / fix(FN-XXXX): work
for that task. This drove attributedFileCount=0 reports, false-positive
task:worktree-contamination-detected events, and indefinite
foreign-only-contamination-skipped + completion-handoff-limbo loops
that stranded FN-5053, FN-5060, FN-5083 (manually merged) for hours.

Hotfix:
- extractAttributedTaskId now accepts both Fusion-Task-Id and a
  generic Task-Id trailer.
- New extractTaskIdFromSubject recognizes conventional-commit
  (feat(<id>):), bracketed ([<id>]) and legacy colon (<id>:) styles
  for any uppercase task prefix (FN, KB, RF, PROJ, JIRA, ...).
- filterFilesToOwnTaskCommits falls back to subject-derived
  attribution when the trailer is missing, with case-insensitive
  match against opts.taskId.

Project-agnostic by design: the subject regex matches any
[A-Z]+-\d+ pattern, so projects with non-FN taskPrefix are
covered automatically.

Two new tests cover the FN-5083 production repro and the
KB-/lowercase/legacy variants.

Fusion-Task-Id: FN-5090
2026-05-18 21:05:51 -07:00
Fusion (runfusion.ai)
2b96475fdd fix(FN-5060): stabilize dedup typing and engine expectations 2026-05-18 19:44:33 -07:00
Fusion (runfusion.ai)
73202b7eb0 test(FN-5060): cover linked-existing messaging in engine task tools 2026-05-18 19:44:33 -07:00
Fusion (runfusion.ai)
0ae068dbe0 fix(FN-5060): surface duplicate-link result in delegate task response 2026-05-18 19:44:33 -07:00
Fusion (runfusion.ai)
a54496f45d feat(FN-5060): complete Step 5 — wire engine and mission dedup guard 2026-05-18 19:44:33 -07:00
Fusion (runfusion.ai)
b3ac0beaa0 test(FN-5083): tighten rebind reliability and quality-gate coverage 2026-05-18 18:27:08 -07:00
Fusion (runfusion.ai)
5c3096c7d1 feat(FN-5083): complete Steps 5-7 rebind UI and reliability docs 2026-05-18 18:26:52 -07:00
Fusion (runfusion.ai)
fe671a5efc fix(FN-5083): export rebind result type for dashboard route 2026-05-18 18:26:52 -07:00
Fusion (runfusion.ai)
211c361cd7 feat(FN-5083): complete Step 4 — add recover branch binding route 2026-05-18 18:26:52 -07:00
Fusion (runfusion.ai)
a2f4b99ecc test(FN-5083): add case-insensitive task-done branch canonicalization 2026-05-18 18:26:52 -07:00
Fusion (runfusion.ai)
c56e0cf814 feat(FN-5083): complete Step 3 — canonicalize fusion branch naming 2026-05-18 18:26:52 -07:00
Fusion (runfusion.ai)
13d7195642 fix(FN-5083): address rebind review feedback 2026-05-18 18:26:52 -07:00
Fusion (runfusion.ai)
77342c03fb feat(FN-5083): complete Step 2 — add in-review branch rebind stage 2026-05-18 18:26:52 -07:00
gsxdsm
6fc0f5cebc feat(FN-5063): merge fusion/fn-5063 2026-05-18 15:51:01 -07:00
gsxdsm
aad1219037 feat(FN-4967): merge fusion/fn-4967 2026-05-18 15:50:48 -07:00
gsxdsm
bed14fda7b feat(FN-5065): merge fusion/fn-5065 2026-05-18 14:16:22 -07:00
gsxdsm
cae9c6c4fc feat(FN-5064): merge fusion/fn-5064 2026-05-18 12:46:23 -07:00
gsxdsm
a8a413cc91 feat(FN-5009): merge fusion/fn-5009 2026-05-18 12:31:21 -07:00
gsxdsm
9aa7518bad feat(FN-5057): merge fusion/fn-5057 2026-05-18 11:46:43 -07:00
gsxdsm
46d09285d5 feat(FN-5058): merge fusion/fn-5058 2026-05-18 11:01:32 -07:00
Fusion (runfusion.ai)
e5af1f11e3 feat(FN-5052): complete Step 8 — document autoMerge stall suppression
Fusion-Task-Id: FN-5052
Fusion-Task-Lineage: 607cd9e6-e4d0-4572-b183-8253d127209f
2026-05-18 08:44:20 -07:00
Fusion (runfusion.ai)
04e68ce489 fix(FN-5052): complete Step 7 — restore workspace-green verification
Fusion-Task-Id: FN-5052
Fusion-Task-Lineage: 607cd9e6-e4d0-4572-b183-8253d127209f
2026-05-18 08:44:20 -07:00
Fusion (runfusion.ai)
22c3acf2e0 test(FN-5052): complete Step 6 — cover self-healing autoMerge gating
Fusion-Task-Id: FN-5052
Fusion-Task-Lineage: 607cd9e6-e4d0-4572-b183-8253d127209f
2026-05-18 08:44:20 -07:00
Fusion (runfusion.ai)
0f1d030c5d feat(FN-5052): complete Step 4 — gate in-review stall surfacing on autoMerge
Fusion-Task-Id: FN-5052
Fusion-Task-Lineage: 607cd9e6-e4d0-4572-b183-8253d127209f
2026-05-18 08:44:20 -07:00
Fusion (runfusion.ai)
656744fb95 test(FN-5039): stabilize workflow scope tests under attribution filtering
Fusion-Task-Id: FN-5039
Fusion-Task-Lineage: 324b7259-e08f-4051-b89c-b94836b73d5d
2026-05-18 08:07:06 -07:00