Commit Graph

7090 Commits

Author SHA1 Message Date
Fusion (runfusion.ai)
c34229f499 feat(FN-5112): complete Step 5 — documentation and delivery
Fusion-Task-Id: FN-5112
Fusion-Task-Lineage: 692fba2a-5856-4256-8144-d87bda56e1aa
2026-05-19 01:02:39 -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)
febd1f872c fix(FN-5108): restore recover-branch-binding route and lock failure boundary
Fusion-Task-Id: FN-5108
Fusion-Task-Lineage: 1b273c01-9f58-40ed-82f3-5706802cc2fc
2026-05-19 00:46:35 -07:00
Fusion (runfusion.ai)
c2596f882e test(FN-5108): complete Step 2 — add default model icon coverage
Fusion-Task-Id: FN-5108
Fusion-Task-Lineage: 1b273c01-9f58-40ed-82f3-5706802cc2fc
2026-05-19 00:46:35 -07:00
Fusion (runfusion.ai)
d5d978c59f feat(FN-5108): complete Step 1 — resolve effective session model provider
Fusion-Task-Id: FN-5108
Fusion-Task-Lineage: 1b273c01-9f58-40ed-82f3-5706802cc2fc
2026-05-19 00:46:35 -07:00
gsxdsm
06d1911aec fix(lint): prefix unused resolveSelfHealingManager destructuring with underscore
Resolve @typescript-eslint/no-unused-vars error in register-task-workflow-routes.ts.
The import is kept in deps for potential future use but prefixed to satisfy lint.
2026-05-19 00:33:14 -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)
093ae0bac8 feat(FN-5096): fix dashboard typecheck and stabilize verification gates
- fix(FN-5096): restore dashboard typecheck and stabilize verification gates

Fusion-Task-Id: FN-5096
2026-05-18 23:14:48 -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)
070ad28151 feat(FN-5060): complete Step 7 — testing and verification
Fusion-Task-Id: FN-5060
Fusion-Task-Lineage: 35434cc4-583f-4e50-9ca3-c12546d220c1
2026-05-18 22:47:51 -07:00
Fusion (runfusion.ai)
d5438ebc11 feat(FN-5060): complete Step 2 — stabilize shared dedup guard exports
Fusion-Task-Id: FN-5060
Fusion-Task-Lineage: 35434cc4-583f-4e50-9ca3-c12546d220c1
2026-05-18 22:47:51 -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)
39fee83654 test(FN-5099): add failing footer-alignment case for retry badge
Fusion-Task-Id: FN-5099
Fusion-Task-Lineage: 26353f25-da61-4b61-8fd2-69915a984cc4
2026-05-18 22:34:21 -07:00
Fusion (runfusion.ai)
0820b64d1a fix(FN-5095): restore workspace verification gates
Fusion-Task-Id: FN-5095
Fusion-Task-Lineage: dff589e4-5142-429d-8ca2-53352eaeaac6
2026-05-18 22:02:54 -07:00
Fusion (runfusion.ai)
aff9bdcb3c feat(FN-5095): complete Step 3 — update qualityAppTests basenames
Fusion-Task-Id: FN-5095
Fusion-Task-Lineage: dff589e4-5142-429d-8ca2-53352eaeaac6
2026-05-18 22:02:53 -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)
0c35e6db6f fix(FN-5094): resolve workspace typecheck regressions before delivery
Fusion-Task-Id: FN-5094
Fusion-Task-Lineage: c6c9710c-51fe-40e9-bfad-bfb6d589c7f4
2026-05-18 21:44:36 -07:00
Fusion (runfusion.ai)
39db6157e4 test(FN-5094): stabilize dashboard API tests for current route exports
Fusion-Task-Id: FN-5094
Fusion-Task-Lineage: c6c9710c-51fe-40e9-bfad-bfb6d589c7f4
2026-05-18 21:44:35 -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)
68b5694cba feat(FN-5060): complete Step 8 — update docs and changeset 2026-05-18 19:45:58 -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)
4c3869403d test(FN-5060): add cancel and no-match duplicate warning cases 2026-05-18 19:44:33 -07:00
Fusion (runfusion.ai)
f73ffd6386 feat(FN-5060): add InlineCreateCard duplicate warning flow 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)
6365fceee4 feat(FN-5060): complete Step 4 — integrate CLI deterministic dedup 2026-05-18 19:44:33 -07:00
gsxdsm
daa1edf1dc feat(FN-5060): complete Step 4 — refactor dashboard dedup route to shared helper 2026-05-18 19:44:33 -07:00
gsxdsm
cae5f9f298 fix(FN-5060): correct TaskStore type imports for duplicate guard 2026-05-18 19:43:55 -07:00
gsxdsm
9b88f1a3ed feat(FN-5060): complete Step 3 — extract core duplicate guard helper 2026-05-18 19:43:55 -07:00
gsxdsm
f11695311a feat(FN-5088): merge fusion/fn-5088 2026-05-18 18:38:00 -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