gsxdsm
c8fcbec94f
FN-7717: release active-session locks when a task is archived
...
Archiving a task from triage/planning/todo (not just in-progress) previously left leaked active-session-registry entries, so a successor task could hit ActiveSessionPathHeldByForeignTaskError and get blocked from Plan Review.
- Add an explicit `to === "archived"` branch in the task-move handler that awaits abort of in-flight task work and sweeps any leftover activeSessionRegistry paths for the task, checked before the narrower `from === "in-progress"` branch so direct in-progress→archived transitions are covered too.
- Deliberately exclude `to === "done"` / `to === "in-review"` from this sweep since those columns legitimately hold ai-merge / workspace-repo-land merge leases that must survive the transition.
- Add regression test coverage for archive releasing active sessions across originating columns.
- Add changeset and architecture doc note.
Files changed:
.../fn-7717-archive-active-session-release.md | 7 +
docs/architecture.md | 1 +
...xecutor-archive-releases-active-session.test.ts | 167 +++++++++++++++++++++
packages/engine/src/executor.ts | 35 +++++
4 files changed, 210 insertions(+)
Fusion-Task-Id: FN-7717
Fusion-Task-Lineage: 7cff6821-7bb3-4b75-b502-a26467ca7f51
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-09 19:58:03 -07:00
gsxdsm
67cc02750c
FN-7692: fix misleading merger confirmation copy under active auto-merge
...
Correct the planner-oversight confirmation messaging so it no longer claims a hard block when the active auto-merge policy will actually advance the merge/pull-request stage unattended.
- decidePlannerRecovery accepts an additive, messaging-only `autoMergeWillProceed` flag and picks accurate reason wording (advisory vs. genuine human-approval block vs. neutral/unknown) for merger/pull-request await_confirmation decisions
- PlannerRecoveryController.tick threads `allowsAutoMergeProcessing(task, settings)` into decidePlannerRecovery as `autoMergeWillProceed`
- project-engine's requestConfirmation steering comment prefix changed from "confirmation required" to neutral "merge checkpoint" so it doesn't contradict the now-accurate reason text
- added regression tests in planner-recovery.test.ts and planner-overseer-intervention-wiring.test.ts
- added changeset and doc note
Files changed:
.changeset/fn-7692-merger-confirmation-copy.md | 7 +++
docs/architecture.md | 10 +++-
packages/core/src/__tests__/planner-recovery.test.ts | 66 ++++++++++++++++++++++
packages/core/src/planner-recovery.ts | 36 +++++++++++-
packages/engine/src/__tests__/planner-overseer-intervention-wiring.test.ts | 37 ++++++++++++
packages/engine/src/planner-recovery-controller.ts | 14 ++++-
packages/engine/src/project-engine.ts | 11 +++-
7 files changed, 176 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-7692
Fusion-Task-Lineage: 187684b8-1d24-425d-85d4-627587469908
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-08 15:09:26 -07:00
gsxdsm
bec8987ce9
FN-7648: gate hold-release on trait-based unplanned-card check, not literal todo column
...
Blocks planning/intake column cards from entering processing columns regardless of literal column id, so renamed custom intake/planning columns are covered by the same guard as the legacy todo column.
- Add isUnplannedForExecution() in hold-release.ts: true when task.status==="planning", or when the card sits in the legacy todo column or a column carrying the intake trait AND its PROMPT.md still equals the bootstrap stub.
- Route issueRelease() (used by the sweep, promoteHeldTask, and releaseHeldTaskByEvent) through this guard before releasing into any countsTowardWip processing column.
- Update scheduler.ts's reserveSlot guard to use the same trait-based predicate instead of a hardcoded "todo" column id check.
- Add regression tests in hold-release.test.ts and scheduler-workflow-cutover.test.ts covering renamed intake/planning columns.
- Document the invariant in docs/architecture.md and docs/workflow-steps.md.
- Add changeset (patch) describing the fix.
Files changed:
.changeset/fn-7648-unplanned-intake-cards-never-execute.md | 7 +
docs/architecture.md | 2 +
docs/workflow-steps.md | 2 +
packages/engine/src/__tests__/hold-release.test.ts | 238 +++++++++++++++++++++
packages/engine/src/__tests__/scheduler-workflow-cutover.test.ts | 60 +++++-
packages/engine/src/hold-release.ts | 60 ++++++
packages/engine/src/scheduler.ts | 26 +--
7 files changed, 378 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-7648
Fusion-Task-Lineage: a4b54d30-f86d-4eb9-9cf2-6ac55b6dbe58
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-07 22:06:21 -07:00
gsxdsm
923bba7082
FN-7645: force re-arm zombie heartbeat timers detected as stale during audit
...
Fixes the heartbeat timer audit so it repairs not just missing timer registrations but also 'zombie' ones — timer entries that remain present in memory after their underlying interval silently stopped firing. Long-interval (~1h) agents were most affected since a single lost tick compounded into hours of staleness before self-healing noticed.
- HeartbeatTriggerScheduler audit now computes staleness (elapsed vs repair-stale threshold) up front for every timer-eligible agent, not only for agents missing a timer entry
- Present-but-stale timer entries are now treated as non-advancing and force cleared/re-registered via registerAgent() (which already clears any existing timer before re-arming)
- Fresh (non-stale) present timers are left alone so healthy short-interval agents are never force-re-armed or double-ticked
- Repair reason/log messages now distinguish zombie-timer-rearmed repairs from missing-registration repairs, and the summary log reports counts for each
- Added heartbeat-scheduler tests covering the zombie-timer repair path
- Added changeset and a docs/architecture.md note
Files changed:
.changeset/fn-7645-heartbeat-rearm.md | 7 +
docs/architecture.md | 1 +
.../src/__tests__/heartbeat-scheduler.test.ts | 223 +++++++++++++++++++++
packages/engine/src/agent-heartbeat.ts | 42 +++-
4 files changed, 266 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-7645
Fusion-Task-Lineage: 652bc2eb-a660-4306-9f85-d2d5f9ca7e38
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-07 22:06:18 -07:00
gsxdsm
9e5c025113
FN-7608: block executors on pending approvals instead of allowing workarounds
...
Executors could previously treat a pending approval as a normal turn end and go hunt for ungated workarounds instead of stopping. This change makes wait-for-approval a hard suspend point.
- wait-for-approval now suspends the in-flight executor session via awaitAbortInFlightTaskWork
- Dedupe identical pending approvals so repeated waits don't pile up
- Executor prompts now carve out awaiting-approval as a legitimate turn end (agent-prompts.ts)
- Extend provisioning-gate and agent-action-gate coverage for the new suspend/carveout behavior
- Add changeset (patch) documenting the fix for release notes
- Update docs/agents.md and docs/architecture.md to describe the new blocking behavior
Files changed:
.changeset/fn-7608-awaiting-approval-blocking.md | 7 ++
docs/agents.md | 1 +
docs/architecture.md | 1 +
packages/core/src/agent-prompts.ts | 5 +
.../engine/src/__tests__/agent-action-gate.test.ts | 82 +++++++++++++
.../executor-approval-gate-suspend.test.ts | 128 +++++++++++++++++++++
.../executor-approval-prompt-carveout.test.ts | 61 ++++++++++
packages/engine/src/agent-heartbeat.ts | 13 +++
packages/engine/src/executor.ts | 28 +++++
packages/engine/src/pi.ts | 22 +++-
.../sandbox/__tests__/provisioning-gate.test.ts | 29 +++++
packages/engine/src/sandbox/provisioning-gate.ts | 11 ++
12 files changed, 384 insertions(+), 4 deletions(-)
Fusion-Task-Id: FN-7608
Fusion-Task-Lineage: 9e42d8ee-bda7-4ef1-b159-46c2100bbc48
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-06 19:03:07 -07:00
gsxdsm
3d58260e1a
FN-7551: wire overseer decision points to engine emitOverseer* façade
...
Wires PlannerOverseerMonitor/PlannerRecoveryController decision points (human-control withholds, confirmation requests/resolutions, and related overseer stages) to the FN-7520 emitOverseer* façade using the real TaskStore, so the planner-oversight intervention timeline now populates from real engine activity instead of staying empty.
- Add onConfirmationResolved handler to PlannerRecoveryController, invoked (best-effort, audit-only) from resolveConfirmation for both approved and denied outcomes.
- Wire project-engine.ts to call emitOverseerObservation/emitOverseerEscalation/emitOverseerConfirmation at the real engine decision points, deduped per (task, stage[, signal]).
- Add planner-overseer-intervention-wiring.test.ts covering the new wiring end-to-end.
- Update docs/architecture.md to reflect the wiring.
- Add changeset fn-7551-overseer-timeline-wiring.md (patch).
Files changed:
.changeset/fn-7551-overseer-timeline-wiring.md | 7 +
docs/architecture.md | 2 +-
.../planner-overseer-intervention-wiring.test.ts | 319 +++++++++++++++++++++
packages/engine/src/planner-recovery-controller.ts | 36 +++
packages/engine/src/project-engine.ts | 248 +++++++++++++++-
5 files changed, 607 insertions(+), 5 deletions(-)
Fusion-Task-Id: FN-7551
Fusion-Task-Lineage: 8bcd103e-8797-4ef5-9b68-bd2daec8d26b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 21:28:18 -07:00
gsxdsm
bf688394a2
FN-7520: add run-audit emission facade for planner-overseer decision points
...
Adds a canonical emission layer over recordPlannerIntervention so overseer decision points (observation, steering, recovery attempt, retry, confirmation, escalation) emit consistent overseer:intervention run-audit events without inlining action/outcome logic at each call-site.
- Add packages/core/src/planner-overseer-events.ts with emitOverseerObservation, emitOverseerSteering, emitOverseerRecoveryAttempt, emitOverseerRetry, emitOverseerConfirmation, and emitOverseerEscalation, each fixing its category's intervention action/default outcome and delegating to recordPlannerIntervention.
- Export the new emitters and OverseerEventInput type from packages/core/src/index.ts.
- Add unit tests covering each emitter's action/outcome mapping and metadata pass-through.
- Add a minor changeset documenting the new run-audit emission facade for planner-overseer events.
- Update docs/architecture.md's Run Audit API section to describe the FN-7520 emission facade and its relationship to FN-7519's overseer:intervention mutation type.
Files changed:
.changeset/fn-7520-planner-overseer-events.md | 7 +
docs/architecture.md | 2 +-
packages/core/src/__tests__/planner-overseer-events.test.ts | 236 +++++++++++++++++++++
packages/core/src/index.ts | 9 +
packages/core/src/planner-overseer-events.ts | 128 +++++++++++
5 files changed, 381 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-7520
Fusion-Task-Lineage: 85e0d761-e4f3-437e-abe2-031e6cf89c1c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 21:28:17 -07:00
gsxdsm
d10ea9aef1
FN-7519: add planner-overseer intervention timeline model and UI
...
Introduces a persisted planner-overseer intervention timeline surfaced in the task-detail Planner Oversight cluster, recording stage, reason, action taken, outcome, attempt count/limit, and source links for each intervention.
- Add core `PlannerInterventionEntry` type plus `recordPlannerIntervention`/`getPlannerInterventionTimeline` helpers that persist entries via the run-audit store under the `overseer:intervention` mutation
- Add `PlannerInterventionTimeline` dashboard component rendering the timeline (stage/reason/action/outcome/attempts/links) with associated styles
- Wire the new API route/legacy handler and TaskDetailModal integration to expose and render the timeline
- Add unit tests for the core helpers and the new UI component
- Add changeset for the new minor feature and update architecture/dashboard-guide docs
Files changed:
$(cat /tmp/diffstat_7519.txt)
Fusion-Task-Id: FN-7519
Fusion-Task-Lineage: 3c4fcda3-9eb2-46d3-b142-b0c7d6334cd0
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 21:28:17 -07:00
gsxdsm
726cbf89cc
FN-7531: expose planner overseer state to task cards
...
Expose transient planner overseer runtime snapshots to board task payloads and cards.
- Add core planner overseer state types and deterministic state derivation.
- Assemble read-only engine runtime snapshots from overseer observations and recovery registries.
- Enrich GET /api/tasks with best-effort planner overseer state and render non-idle TaskCard badges.
- Cover state derivation, API enrichment, runtime snapshot assembly, and card rendering with tests.
Files changed:
.../fn-7531-planner-overseer-state-exposure.md | 7 ++
docs/architecture.md | 36 +++++++
.../src/__tests__/planner-overseer-state.test.ts | 85 +++++++++++++++
packages/core/src/index.ts | 7 ++
packages/core/src/planner-overseer-state.ts | 78 ++++++++++++++
packages/core/src/types.ts | 12 +++
packages/dashboard/app/components/TaskCard.tsx | 27 ++++-
.../app/components/__tests__/TaskCard.test.tsx | 29 ++++++
.../__tests__/tasks-planner-overseer-state.test.ts | 114 +++++++++++++++++++++
.../src/routes/register-task-workflow-routes.ts | 23 ++++-
.../planner-overseer-runtime-snapshot.test.ts | 104 +++++++++++++++++++
packages/engine/src/index.ts | 8 ++
.../src/planner-overseer-runtime-snapshot.ts | 67 ++++++++++++
packages/engine/src/project-engine.ts | 17 +++
14 files changed, 612 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-7531
Fusion-Task-Lineage: b7659ed2-bf33-4312-a5ab-818ad37049b9
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 21:28:15 -07:00
gsxdsm
79ab367547
FN-7514: withhold overseer actions under human control
...
Add a human-control guard so planner overseer recovery stays inert for paused or human-review tasks.
- Add a pure overseer human-control policy that treats explicit user pauses and autoMerge:false / human-review tasks as full withhold states.
- Thread settings through planner recovery ticks, skip action classification and pending confirmations when withheld, and emit deduped no-action run-audit events.
- Wire ProjectEngine audit recording and document the new guard, run-audit event, exports, and release note.
Files changed:
.changeset/fn-7514-overseer-human-control-guard.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 39 +++++
.../overseer-human-control-policy.test.ts | 86 +++++++++++
...anner-recovery-controller-human-control.test.ts | 170 +++++++++++++++++++++
packages/engine/src/index.ts | 7 +
.../engine/src/overseer-human-control-policy.ts | 88 +++++++++++
packages/engine/src/planner-recovery-controller.ts | 107 ++++++++++++-
packages/engine/src/project-engine.ts | 44 +++++-
packages/engine/src/run-audit.ts | 15 +-
10 files changed, 558 insertions(+), 6 deletions(-)
Fusion-Task-Id: FN-7514
Fusion-Task-Lineage: d4d3bd04-3f8e-4a05-9636-f177e050390b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 14:11:25 -07:00
gsxdsm
2cc84b5177
FN-7513: require planner confirmation for risky side effects
...
Require explicit approval before planner recovery runs merge, PR, destructive, or external-service actions.
- Add pure planner side-effect classification and confirmation request modeling in core.
- Route merge/PR recovery decisions to await confirmation instead of autonomous dispatch.
- Persist pending confirmation requests and only execute approved controller actions.
- Cover confirmation gating with core and engine regression tests and document the policy.
Files changed:
.changeset/fn-7513-planner-confirmation-gate.md | 7 +
docs/architecture.md | 85 ++++++++-
docs/settings-reference.md | 2 +-
.../src/__tests__/planner-confirmation.test.ts | 125 +++++++++++++
.../core/src/__tests__/planner-recovery.test.ts | 14 +-
packages/core/src/index.ts | 7 +
packages/core/src/planner-confirmation.ts | 141 ++++++++++++++
packages/core/src/planner-recovery.ts | 103 ++++++++---
...lanner-recovery-controller-confirmation.test.ts | 205 +++++++++++++++++++++
packages/engine/src/index.ts | 5 +
packages/engine/src/planner-recovery-controller.ts | 204 +++++++++++++++++++-
packages/engine/src/project-engine.ts | 44 +++++
12 files changed, 913 insertions(+), 29 deletions(-)
Fusion-Task-Id: FN-7513
Fusion-Task-Lineage: 1e3c6640-8a4f-41f6-89dd-41eb9b675b2b
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 13:51:09 -07:00
gsxdsm
81f2053921
FN-7512: add bounded planner recovery
...
Adds bounded autonomous planner recovery decisions and dispatch so overseer observations can safely nudge stuck planning stages.
- Add pure core recovery policy with per-stage attempt limits and no-op fallbacks for disallowed or exhausted cases.
- Add engine controller wiring to inject guidance, retry steps, request targeted fixes, and emit recovery audit events.
- Register the planner recovery controller in project engine lifecycle and document the autonomous recovery behavior.
- Cover core decisions and controller dispatch with targeted tests, plus a patch changeset for the published CLI package.
Files changed:
.changeset/fn-7512-planner-bounded-recovery.md | 7 +
docs/architecture.md | 62 ++++++
.../core/src/__tests__/planner-recovery.test.ts | 116 +++++++++++
packages/core/src/index.ts | 12 ++
packages/core/src/planner-recovery.ts | 222 +++++++++++++++++++++
.../__tests__/planner-recovery-controller.test.ts | 163 +++++++++++++++
packages/engine/src/index.ts | 20 ++
packages/engine/src/planner-recovery-controller.ts | 195 ++++++++++++++++++
packages/engine/src/project-engine.ts | 66 ++++++
9 files changed, 863 insertions(+)
Fusion-Task-Id: FN-7512
Fusion-Task-Lineage: aad3849d-090e-497d-ae5c-34ec7ca96c3d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 13:19:02 -07:00
gsxdsm
12a6d1bc6a
FN-7511: add planner overseer stage monitoring
...
Add records-only planner overseer monitoring across in-flight task lifecycle stages.
- Add a PlannerOverseerMonitor with normalized observations and deterministic watched-stage resolution.
- Wire ProjectEngine to poll in-progress and in-review tasks, gated by effective planner oversight level.
- Document the monitoring seam and add focused coverage plus a release changeset.
Files changed:
.changeset/fn-7511-planner-overseer-monitoring.md | 7 +
docs/architecture.md | 26 ++
docs/workflow-steps.md | 2 +
.../engine/src/__tests__/planner-overseer.test.ts | 294 ++++++++++++++++++
packages/engine/src/index.ts | 12 +
packages/engine/src/planner-overseer.ts | 338 +++++++++++++++++++++
packages/engine/src/project-engine.ts | 93 +++++-
7 files changed, 771 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-7511
Fusion-Task-Lineage: 81b616cf-47e9-4769-b02d-fc7ebd3fcb2f
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 12:55:25 -07:00
gsxdsm
82493e0f62
FN-7488: allow source-free task artifacts to complete
...
Teach fn_task_done to honor explicit source-free task-artifact contracts without weakening ordinary commit requirements.
- Detect PROMPT-declared gitignored .fusion/tasks-only delivery contracts after completed steps.
- Keep zero-commit refusals for mixed tracked source, docs, config, test, or changeset scope.
- Document the completion contract in executor guidance and architecture notes.
- Add regression coverage for allowed source-free artifacts and refused mixed-scope deliveries.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-7488-source-free-completion.md | 7 ++
docs/architecture.md | 2 +-
packages/core/src/agent-prompts.ts | 6 ++
.../__tests__/executor-task-done-invariant.test.ts | 120 +++++++++++++++++++++
packages/engine/src/executor.ts | 61 ++++++++---
5 files changed, 183 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-7488
Fusion-Task-Lineage: adbf1146-4513-4531-bdd8-ccecbeb42a63
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-04 10:42:19 -07:00
gsxdsm
af6e671e72
FN-7385: preserve live worktrees with fresh fallback
...
Preserve active worktree owners by retrying acquisition on a fresh sibling checkout.
- Add executor fallback that detects active cleanup refusals and creates bounded sibling branches in fresh generated worktrees.\n- Cover DB-only, same-task workflow-step, existing-branch, and exhausted-suffix conflict paths with regression tests.\n- Document the live worktree conflict fallback and add a patch changeset for the published CLI package.\n\nFiles changed:\n .../fn-7385-active-worktree-fresh-fallback.md | 7 +\n docs/architecture.md | 1 +\n .../__tests__/executor-worktree-conflict.test.ts | 103 +++++++++++++-\n .../engine/src/__tests__/executor-worktree.test.ts | 153 ++++++++++++++++++---\n packages/engine/src/executor.ts | 90 ++++++++----\n 5 files changed, 312 insertions(+), 42 deletions(-)
Fusion-Task-Id: FN-7385
Fusion-Task-Lineage: 02c31656-1248-49c0-9063-0750cc8e41c6
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 10:55:57 -07:00
gsxdsm
919420e11a
FN-7373: enforce active worktree cap
...
Enforce maxWorktrees at the task-store transition boundary so active execution worktrees cannot exceed the operator cap.
- Reject allocated moves into in-progress when existing active or pending holders already meet maxWorktrees.
- Count in-progress tasks and pending in-progress transitions while excluding the task being moved.
- Cover scheduler and hold-release paths with regression tests and document the hard-cap invariant.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-7373-max-worktrees-cap.md | 7 ++
docs/architecture.md | 2 +-
packages/core/src/__tests__/store-movement.test.ts | 80 +++++++++++++++++++++-
packages/core/src/store.ts | 50 ++++++++++++++
packages/engine/src/__tests__/hold-release.test.ts | 52 ++++++++++++++
.../__tests__/scheduler-workflow-cutover.test.ts | 53 ++++++++++++++
6 files changed, 242 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-7373
Fusion-Task-Lineage: be4a9649-f6ae-475f-9395-07433e98de5c
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-07-01 10:18:32 -07:00
gsxdsm
6f2b8ab6e5
FN-7244: retry unavailable Plan Review without replanning
...
Preserve existing task specs when Plan Review retries after reviewer outages.
- Route plan-review-unavailable triage tasks through the Plan Review/finalization path instead of the planner.
- Validate existing PROMPT.md content and fail clearly when it is missing, empty, or invalid.
- Preserve retry status across interrupted triage work and cover retry behavior with engine tests.
- Document the retry lifecycle and add a patch changeset.
Files changed:
.../fn-7244-plan-review-unavailable-retry.md | 7 +
docs/architecture.md | 2 +
docs/workflow-steps.md | 2 +
.../triage-plan-review-unavailable-retry.test.ts | 251 +++++++++
packages/engine/src/__tests__/triage.test.ts | 604 +++++++++++++++++++++
packages/engine/src/triage.ts | 108 +++-
6 files changed, 945 insertions(+), 29 deletions(-)
Fusion-Task-Id: FN-7244
Fusion-Task-Lineage: 80e790e3-d2b9-4309-beec-3dbf6a03db39
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-29 17:40:00 -07:00
gsxdsm
998a7f2745
fix(FN-7226): make plan review the single pre-execution gate
...
Fusion-Task-Id: FN-7226
2026-06-29 01:48:27 -07:00
gsxdsm
e963be4088
FN-7220: harden workflow recovery lineage checks
...
Harden workflow recovery so pause/resume parks and already-merged detection preserve task ownership lineage.
- Reject already-merged recovery candidates with foreign task or lineage trailers before accepting patch-id, tree, or branch-tip matches.
- Recover benign pause/resume abort parks back to todo when the task has no live executor/session state.
- Add real-git and executor regression coverage plus architecture docs and a changeset for recovery behavior.
Files changed:
.changeset/fn-7220-workflow-recovery-lineage.md | 7 +
docs/architecture.md | 8 +-
.../already-merged-detector.real-git.test.ts | 69 ++++++++
.../executor-paused-abort-todo-benign.test.ts | 194 ++++++++++++++++++---
.../self-healing-already-merged.real-git.test.ts | 64 ++++++-
packages/engine/src/already-merged-detector.ts | 113 +++++++++---
packages/engine/src/executor.ts | 84 +++++++++
packages/engine/src/self-healing.ts | 134 ++++++++++++--
8 files changed, 609 insertions(+), 64 deletions(-)
Fusion-Task-Id: FN-7220
Fusion-Task-Lineage: 186c65bc-fe1a-457a-b90a-abbd73044252
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-28 22:43:02 -07:00
gsxdsm
58a0c1f1d6
FN-7214: make workflow node pause resume re-entrant
...
Workflow graph pause aborts now re-enter interrupted nodes instead of failing the task.
- Track and abort active workflow graph runners during hard cancel and global pause flows.
- Stamp interrupted workflow nodes with typed engine-pause abort context and surface it through graph run results.
- Re-enter safe todo, in-progress, and auto-mergeable in-review graph nodes with retry bounds and run-audit evidence.
- Add regression coverage and architecture notes for paused node re-entry behavior.
Files changed:
.changeset/fn-7214-workflow-graph-node-pause-resume.md | 7 +
docs/architecture.md | 4 +-
packages/engine/src/__tests__/executor-paused-abort-todo-benign.test.ts | 231 ++++++++++++++++++++-
packages/engine/src/__tests__/workflow-graph-paused-node-resume.test.ts | 148 +++++++++++++
packages/engine/src/executor.ts | 158 +++++++++++++-
packages/engine/src/workflow-graph-executor.ts | 50 ++++-
packages/engine/src/workflow-graph-task-runner.ts | 26 ++-
7 files changed, 614 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-7214
Fusion-Task-Lineage: 1689e3fd-e35f-4e83-8049-aabbab49cecd
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-28 19:42:45 -07:00
gsxdsm
dc54b615d4
FN-7182: pause auto-merge for manual pull requests
...
Manual pull requests now pause automatic merge processing until human action closes or merges the PR.
- Mark dashboard-created or linked pull requests with manual provenance and preserve it across PR refreshes and merges.
- Exclude tasks with manual open or draft PRs from automatic merge processing while preserving pipeline PR automation.
- Add regression coverage and document the manual PR handoff behavior.
Files changed:
.changeset/FN-7182-no-auto-merge-with-manual-pr.md | 7 ++
docs/architecture.md | 2 +-
docs/dashboard-guide.md | 1 +
packages/core/src/__tests__/task-helpers.test.ts | 49 ++++++++++++-
packages/core/src/__tests__/task-merge.test.ts | 60 +++++++++++++++-
packages/core/src/index.ts | 2 +-
packages/core/src/task-helpers.ts | 13 ++++
packages/core/src/task-merge.ts | 10 ++-
packages/core/src/types.ts | 6 ++
.../dashboard/src/__tests__/routes-auth.test.ts | 80 ++++++++++++++++++++++
.../dashboard/src/__tests__/routes-github.test.ts | 45 +++++++++++-
.../dashboard/src/routes/register-git-github.ts | 20 +++++-
12 files changed, 285 insertions(+), 10 deletions(-)
Fusion-Task-Id: FN-7182
Fusion-Task-Lineage: c415a9dc-43c1-4609-a032-367991e949a1
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-28 01:43:08 -07:00
gsxdsm
9f45f108e5
FN-7174: reset lost steps before stuck requeue cleanup
...
Preserve durable stuck-requeue progress while preventing retries from skipping deleted uncommitted work.
- Reconcile completed and in-progress steps before stuck cleanup removes executor worktrees.
- Reset step progress when a branch has no unique commits or git proof fails before checkout deletion.
- Cover normal, loop-timeout, and force stuck-requeue paths with regression tests and documentation.
Files changed:
.changeset/fn-7174-stuck-requeue-progress.md | 7 +
docs/architecture.md | 2 +-
packages/core/src/types.ts | 9 +-
...xecutor-stuck-requeue-preserve-progress.test.ts | 282 +++++++++++++++++++++
packages/engine/src/executor.ts | 99 ++++----
5 files changed, 349 insertions(+), 50 deletions(-)
Fusion-Task-Id: FN-7174
Fusion-Task-Lineage: 3b8b09e7-fceb-4b3d-af80-993a8842a51a
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-28 00:08:53 -07:00
gsxdsm
e42679daff
FN-7173: preserve stuck triage drafts on requeue
...
Stuck triage retries now continue from saved planning drafts instead of restarting.
- Detect non-empty PROMPT.md drafts or saved plan task documents after stuck-detector aborts.
- Requeue draft-backed stuck triage runs as replans with explicit resume feedback and bounded retry escalation.
- Cover prompt-vs-plan recovery, cold retries, approval recovery, and exhaustion behavior in engine tests.
- Document the stuck-triage preservation invariant and add a patch changeset.
Files changed:
...-7173-preserve-triage-draft-on-stuck-requeue.md | 7 +
docs/architecture.md | 6 +-
.../triage-stuck-requeue-preserve-draft.test.ts | 348 +++++++++++++++++++++
packages/engine/src/__tests__/triage.test.ts | 2 +-
packages/engine/src/triage.ts | 153 ++++++++-
5 files changed, 499 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-7173
Fusion-Task-Lineage: 8e59b025-92cc-4902-bf88-b203b65c2c7d
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 23:18:28 -07:00
gsxdsm
d7a02c4d5b
FN-7151: free scoped project concurrency slots
...
Free stopped or paused project engines' leaked slots without disturbing other projects.
- Add scoped semaphore accounting around the shared global agent pool.
- Return residual per-project slots after runtime stop drains aborted agents.
- Keep idle leak reconciliation scoped to the owning project so active projects retain their slots.
- Cover scoped release, reconciliation, project pause, and in-process runtime behavior with tests.
Files changed:
.../fn-7151-free-concurrency-slots-on-stop.md | 7 ++
docs/architecture.md | 2 +-
packages/engine/src/__tests__/concurrency.test.ts | 126 +++++++++++++++++++++
.../src/__tests__/project-engine-manager.test.ts | 60 ++++++++++
packages/engine/src/concurrency.ts | 123 +++++++++++++++++++-
packages/engine/src/project-engine.ts | 2 +-
.../runtimes/__tests__/in-process-runtime.test.ts | 51 +++++++++
packages/engine/src/runtimes/in-process-runtime.ts | 22 +++-
8 files changed, 385 insertions(+), 8 deletions(-)
Fusion-Task-Id: FN-7151
Fusion-Task-Lineage: e59e5e0c-67e8-4f80-a6b9-1ea4febaeb97
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 20:55:59 -07:00
gsxdsm
8b124960b8
FN-7154: prevent duplicate automation schedule runs
...
Add an atomic schedule claim so concurrent automation pollers execute each due window only once.
- Add AutomationStore.claimDueSchedule to CAS-advance nextRunAt before execution.
- Gate CronRunner execution on the claim across project, global, and all-scope pollers.
- Cover single-store, shared SQLite, legacy command, step, and in-process intercept deduplication paths.
- Document the claim-then-run automation invariant.
Files changed:
docs/architecture.md | 1 +
.../core/src/__tests__/automation-store.test.ts | 77 +++++++++++++++
packages/core/src/automation-store.ts | 33 +++++++
packages/engine/src/__tests__/cron-runner.test.ts | 110 +++++++++++++++++++++
packages/engine/src/cron-runner.ts | 18 +++-
5 files changed, 237 insertions(+), 2 deletions(-)
Fusion-Task-Id: FN-7154
Fusion-Task-Lineage: 490ba154-9dd8-4e92-bacb-24b7184cb6f8
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 20:09:52 -07:00
gsxdsm
6f46fa17dd
FN-7138: show task column context in agent assignments
...
Agent Current Task output now includes linked task column context to distinguish active execution from parked or stale links.
- Add shared Current Task formatting for active, terminal, and unresolved task links.
- Show linked task columns in engine and CLI agent list/show surfaces.
- Cover parked, active, terminal, and missing task-link display cases with tests.
- Document the durable agent task-link invariant and release the CLI fix.
Files changed:
.changeset/fn-7138-agent-current-task-context.md | 7 ++++
docs/agents.md | 1 +
docs/architecture.md | 2 +-
packages/cli/src/__tests__/extension.test.ts | 44 ++++++++++++++++++++++
packages/cli/src/extension.ts | 35 +++++++++++++++--
packages/core/src/agent-store.ts | 30 +++++++++++++++
packages/core/src/index.ts | 2 +-
.../src/__tests__/agent-tools-delegation.test.ts | 44 +++++++++++++++++++++-
packages/engine/src/agent-tools.ts | 15 ++++++--
9 files changed, 169 insertions(+), 11 deletions(-)
Fusion-Task-Id: FN-7138
Fusion-Task-Lineage: 0ea97b4c-d4f8-4289-a5b6-e5c51b47b768
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-27 16:16:25 -07:00
gsxdsm
5608bf555f
FN-7083: derive project in-flight counts from live tasks
...
Derive CLI project in-flight agent displays from live in-progress task counts instead of persisted health bookkeeping.
- Add shared CLI display health handling for project list and show output.
- Cover stale, missing, unreadable, table, and JSON project health cases in CLI tests.
- Clarify central health and concurrency fields as persisted bookkeeping in docs and types.
- Add a patch changeset for the published CLI behavior fix.
Files changed:
.changeset/fn-7083-cli-inflight-live-count.md | 7 +
docs/architecture.md | 1 +
docs/multi-project.md | 4 +-
.../cli/src/commands/__tests__/project.test.ts | 172 ++++++++++++++++++++-
packages/cli/src/commands/project.ts | 60 ++++---
packages/cli/src/project-resolver.ts | 4 +
packages/core/src/types.ts | 12 +-
7 files changed, 235 insertions(+), 25 deletions(-)
Fusion-Task-Id: FN-7083
Fusion-Task-Lineage: 2b57cb35-383f-443b-8bf3-3fc3c7a1ad43
Co-authored-by: Fusion (runfusion.ai) <noreply@runfusion.ai >
2026-06-26 18:35:54 -07:00
gsxdsm
0440ae4bb9
FN-7074: make task ID reservation commits atomic
...
Task creation now commits or rolls back distributed task ID reservations with the task-row transaction.
- Add transaction-participating reservation commit and rollback helpers.
- Wire create, duplicate, and refinement task paths to commit reservations inside task insertion.
- Record rollback audit events and preserve burned reservation rows after failed creates.
- Cover atomicity, rollback, and allocator behavior with reservation-focused tests and docs.
Files changed:
.changeset/fn-7074-reservation-atomicity.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 7 +-
docs/storage.md | 4 +-
.../core/src/__tests__/distributed-task-id.test.ts | 25 ++-
.../__tests__/store-reservation-atomicity.test.ts | 224 +++++++++++++++++++++
packages/core/src/distributed-task-id.ts | 208 +++++++++++++------
packages/core/src/store.ts | 93 +++++++--
8 files changed, 479 insertions(+), 90 deletions(-)
Fusion-Task-Id: FN-7074
Fusion-Task-Lineage: 464a98cf-e903-4257-93ac-424c7129412b
2026-06-26 14:55:01 -07:00
gsxdsm
74d37785d2
FN-7069: reconcile phantom task reservations
...
Harden task-store startup and maintenance against phantom committed task reservations.
- Reconcile committed reservation phantoms without freeing reserved task IDs.
- Prune orphaned child rows and emit durable run-audit evidence.
- Normalize missing legacy task.json reads to clean not-found errors.
- Cover archive/search and phantom-reservation reconciliation behavior with tests.
Files changed:
.changeset/fn-7069-phantom-task-reconcile.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 2 +
.../src/__tests__/store-archive-search.test.ts | 5 +
.../store-phantom-reservation-reconcile.test.ts | 148 +++++++++++++++++++++
packages/core/src/store.ts | 106 ++++++++++++++-
packages/engine/src/self-healing.ts | 14 ++
7 files changed, 282 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-7069
Fusion-Task-Lineage: 772aad37-db30-4310-a968-c6e5306c73bb
2026-06-26 13:39:33 -07:00
gsxdsm
b293525751
fix(dashboard): repair CSS token/contrast regressions and stale tests
...
Fixes ~19 deterministic dashboard test failures pre-existing on origin/main
(non-blocking full-suite lane). Mix of real product fixes and stale-test
reconciliation; no appeasement (no widened timeouts, skips, or weakened
assertions).
Product CSS fixes (real regressions the guards caught):
- Info toast contrast: shadcn-custom light theme had white-on-#0284c7 (4.10,
below WCAG AA 4.5); enrolled it in the light-mode dark-text correction.
- 27 undefined CSS token references (typos/foreign tokens) renamed to canonical
defined tokens; defined the genuinely-intended --border-strong and
--right-dock-min/max-width.
- Raw rgba() box-shadow fallback tokenized to color-mix; dev-server mobile
header split into its own responsive rule.
Stale tests reconciled with intentional product changes:
- workflowColumns graduated to always-on (board-workflows unit test).
- workflow optional-steps source re-pointed to v2 optional-group nodes.
- command-center pricing docs (one doc gap filled: openai-codex:* keying).
- SetupWizardModal added detectWorkspace + workspaceMode/taskPrefix payload.
- board-mobile listener-count assertion → unmount no-throw behavior.
- CommandCenterControls / ThemeSelector: default theme relabeled "Fusion Legacy".
- ProjectOverview / WorkflowNodeEditor: header divider intentionally removed.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com >
2026-06-25 14:37:52 -07:00
gsxdsm
eb3833a542
FN-6971: retire dual-observe cutover gating
...
Remove stale dual-observe prerequisites from workflow-authoritative readiness while preserving parity-summary safeguards.
- Require the authoritative flag plus clean populated parity summaries for interpreter cutover readiness.
- Keep persisted workflowInterpreterDualObserve values inert in runtime tests and documentation.
- Update cutover, parity, and graph-executor tests to reflect retired shadow observation behavior.
- Add a formatted patch changeset for the operator-facing cutover readiness fix.
Files changed:
.changeset/fn-6971-workflow-cutover-readiness.md | 7 ++
docs/architecture.md | 2 +-
docs/settings-reference.md | 4 +-
docs/workflow-steps.md | 19 +++--
.../core/src/__tests__/workflow-cutover.test.ts | 19 +++--
packages/core/src/workflow-cutover.ts | 9 +--
.../workflow-interpreter-cutover.test.ts | 87 +++++++++++++++++++---
.../workflow-interpreter-dual-observe.test.ts | 76 ++++++-------------
.../src/__tests__/stepwise-workflow-parity.test.ts | 25 ++++---
.../engine/src/workflow-authoritative-driver.ts | 10 +--
10 files changed, 152 insertions(+), 106 deletions(-)
Fusion-Task-Id: FN-6971
Fusion-Task-Lineage: 363a441d-62e5-403c-9389-75fcf788352a
2026-06-24 23:32:52 -07:00
gsxdsm
fe536b2af8
FN-6954: reconcile stale parked task assignments
...
Reconcile agent/task drift when durable agents remain linked to queued tasks without live execution proof.
- clear stale Agent.taskId links for parked todo/triage tasks while preserving task leases and queue state
- report stale parked assignments as active/no-live-run in Reports Health Check before reconciliation completes
- add scheduler and self-healing coverage for queued lease drift, overlap starvation, and audit events
- document the reconciliation behavior and add a published package patch changeset
Files changed:
.changeset/fn-6954-agent-task-state-drift.md | 5 +
docs/architecture.md | 2 +
.../src/__tests__/heartbeat-executor.test.ts | 68 ++++++++++++
.../__tests__/scheduler-overlap-starvation.test.ts | 68 +++++++++++-
.../self-healing-agent-link-drift.test.ts | 97 ++++++++++++++++-
.../engine/src/__tests__/task-agent-sync.test.ts | 33 +++++-
packages/engine/src/agent-heartbeat.ts | 121 +++++++++++++++++++--
packages/engine/src/run-audit.ts | 5 +
packages/engine/src/runtimes/in-process-runtime.ts | 1 +
packages/engine/src/scheduler.ts | 24 +++-
packages/engine/src/self-healing.ts | 102 ++++++++++++++---
packages/engine/src/task-agent-sync.ts | 65 ++++++++++-
12 files changed, 555 insertions(+), 36 deletions(-)
Fusion-Task-Id: FN-6954
Fusion-Task-Lineage: 24b8a2eb-5a33-4539-ab64-ae2bbfc2d195
2026-06-23 10:30:50 -07:00
gsxdsm
efb94c8623
FN-6876: add editable model pricing refresh
...
Add editable model pricing overrides and a LiteLLM refresh path for usage cost analytics.
- Add persisted model pricing override settings and apply them to token and team analytics cost calculations.
- Add a Command Center pricing fetch endpoint that imports chat pricing from LiteLLM and invalidates settings caches.
- Add a Global Models pricing editor with manual rows, removal, and one-click fetch support.
- Cover override lookup, settings parity, analytics, route behavior, and UI editing with tests and docs.
Files changed:
.changeset/model-pricing-overrides.md | 5 +
docs/architecture.md | 3 +-
docs/dashboard-guide.md | 5 +-
docs/settings-reference.md | 3 +
packages/core/src/__tests__/model-pricing.test.ts | 101 +++++++++++
.../core/src/__tests__/settings-parity.test.ts | 4 +
packages/core/src/__tests__/store-settings.test.ts | 25 +++
.../core/src/__tests__/token-analytics.test.ts | 39 +++++
packages/core/src/index.ts | 4 +
packages/core/src/model-pricing.ts | 118 +++++++++++--
packages/core/src/settings-schema.ts | 3 +
packages/core/src/team-analytics.ts | 17 +-
packages/core/src/token-analytics.ts | 19 +-
packages/core/src/types.ts | 12 ++
.../dashboard/app/components/SettingsModal.tsx | 2 +
.../settings/sections/GlobalModelsSection.tsx | 8 +-
.../settings/sections/ModelPricingSection.css | 82 +++++++++
.../settings/sections/ModelPricingSection.test.tsx | 126 ++++++++++++++
.../settings/sections/ModelPricingSection.tsx | 193 +++++++++++++++++++++
.../register-command-center-routes.test.ts | 172 +++++++++++++++++-
.../src/routes/register-command-center-routes.ts | 58 +++++++
21 files changed, 967 insertions(+), 32 deletions(-)
Fusion-Task-Id: FN-6876
Fusion-Task-Lineage: 4d4e3b9d-bec4-4e14-b7bc-88f846465566
2026-06-23 01:14:11 -07:00
gsxdsm
584ed02541
FN-6897: update dashboard navigation docs
...
Refresh the documentation to match the reshuffled dashboard navigation model.
- Clarify that desktop/tablet content destinations live in the left sidebar while inline tools live in the right dock.
- Update Planning, Import Tasks, Git Manager Recovery, and plugin view navigation instructions across docs.
- Remove stale Header overflow, duplicate dock/sidebar, and standalone Stash Recovery wording.
Files changed:
docs/architecture.md | 2 +-
docs/dashboard-guide.md | 55 +++++++++++++++++++++++++++----------------------
docs/getting-started.md | 4 ++--
docs/task-management.md | 4 ++--
4 files changed, 35 insertions(+), 30 deletions(-)
Fusion-Task-Id: FN-6897
Fusion-Task-Lineage: d0009a23-c197-4c1b-8c54-5fe4a8dca03c
2026-06-22 19:24:55 -07:00
gsxdsm
8dd9697468
FN-6714: backfill commit-association diff stats
...
Backfill historical commit-association diff stats so Command Center LOC can use real persisted git data.
- Add a core backfill API that inspects local git commits for associations with missing additions/deletions and supports dry-run reporting.
- Expose an authenticated Command Center productivity backfill endpoint and route it through the legacy API shim.
- Keep productivity LOC/hour sentinels safe for legacy payloads and document the backfill contract.
- Cover the backfill path, auth gate, productivity analytics, and route registration with tests.
Files changed:
.changeset/fn-6714-command-center-loc-backfill.md | 5 +
docs/architecture.md | 4 +-
docs/storage.md | 4 +-
...mmit-association-diff-backfill.real-git.test.ts | 140 +++++++++++++++++++++
packages/core/src/index.ts | 1 +
packages/core/src/store.ts | 76 ++++++++++-
packages/core/src/types.ts | 9 ++
packages/dashboard/app/api/legacy.ts | 16 +++
.../command-center/areas/ProductivityArea.tsx | 8 +-
.../register-command-center-routes.auth.test.ts | 48 ++++---
.../register-command-center-routes.test.ts | 49 +++++++-
.../src/routes/register-command-center-routes.ts | 20 +++
12 files changed, 354 insertions(+), 26 deletions(-)
Fusion-Task-Id: FN-6714
Fusion-Task-Lineage: 657c7789-bbe4-4611-abca-127af05b0300
2026-06-22 03:42:24 -07:00
gsxdsm
0b410d54e1
FN-6915: surface user comments in agent prompts
...
User task chat and steering comments now flow into planning, review, and merge agent context.
- Add a shared user-comment formatter and selector for prompt context.
- Inject latest user comments into planner-triggered review, reviewer, merger, and clean-room AI merge prompts.
- Cover comment selection, prompt formatting, review/merge propagation, and docs updates with targeted tests.
Files changed:
docs/architecture.md | 1 +
docs/dashboard-guide.md | 1 +
.../src/__tests__/agent-user-comments.test.ts | 81 ++++++++++++++++++++++
.../executor-review-step-indexing.test.ts | 28 +++++++-
packages/engine/src/__tests__/merger-ai.test.ts | 54 +++++++++++++++
.../src/__tests__/merger-prompt-and-utils.test.ts | 29 ++++++++
packages/engine/src/__tests__/reviewer.test.ts | 37 ++++++++--
packages/engine/src/__tests__/triage.test.ts | 23 ++++++
packages/engine/src/agent-user-comments.ts | 60 ++++++++++++++++
packages/engine/src/executor.ts | 14 ++--
packages/engine/src/merger-ai.ts | 23 +++++-
packages/engine/src/merger.ts | 22 +++++-
packages/engine/src/reviewer.ts | 13 ++++
13 files changed, 372 insertions(+), 14 deletions(-)
Fusion-Task-Id: FN-6915
Fusion-Task-Lineage: 02de0c12-481a-4489-b495-70c9c00619bc
2026-06-22 03:34:15 -07:00
gsxdsm
55266b6e9e
FN-6874: document Command Center pricing semantics
...
Document the Command Center pricing contract for maintainers and users.
- Explain that estimated token costs are derived at read time from the maintained pricing table and are not persisted billing truth.\n- Document pricingAsOf, stale low-confidence, unknown-model unavailable, and provider coverage maintenance expectations.\n- Add a documentation contract test to keep the dashboard and architecture guides aligned.
Files changed:\n docs/architecture.md | 2 ++\n docs/dashboard-guide.md | 3 +-\n .../__tests__/command-center-pricing-docs.test.ts | 35 ++++++++++++++++++++++\n 3 files changed, 39 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6874
Fusion-Task-Lineage: 04606ae1-4870-479a-afb6-8a24675fe66b
2026-06-21 16:28:30 -07:00
gsxdsm
7ee1fec22c
FN-6861: reject repo-root task worktrees
...
Prevent stale task metadata from treating the project repository root as a reusable task worktree.
- Classify root-equal task worktree paths as repo-root before registered-worktree checks.
- Clear stale resumed repo-root assignments so acquisition creates a fresh configured task worktree.
- Add structured executor audit metadata and regression coverage for repo-root liveness collisions.
- Document the repo-root requeue-loop invariant and recovery behavior.
Files changed:
docs/architecture.md | 2 +-
.../repo-root-task-worktree-requeue-loop.md | 49 ++++++++++++++++
.../__tests__/executor-worktree-liveness.test.ts | 23 +++++++-
.../src/__tests__/worktree-acquisition.test.ts | 67 +++++++++++++++++++++-
.../src/__tests__/worktree-pool-liveness.test.ts | 25 ++++++++
packages/engine/src/executor.ts | 22 ++++++-
packages/engine/src/worktree-acquisition.ts | 4 ++
packages/engine/src/worktree-pool.ts | 13 ++++-
8 files changed, 198 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6861
Fusion-Task-Lineage: d6a4922e-5a21-4037-b2c2-86ff53d8e9e3
2026-06-21 14:28:58 -07:00
gsxdsm
d99246cb74
FN-6834: use OS-available memory for system metrics
...
Use shared OS-available memory readings so macOS cache/inactive pages are not counted as used.
- Add a core available-memory helper that prefers `process.availableMemory()` and flags `freemem` fallback reliability.
- Route core metrics, dashboard system stats, and the dashboard TUI through the shared helper.
- Move and expand memory tests across core, dashboard routes, and verification coverage while documenting the telemetry behavior.
- Add a patch changeset for the published CLI package.
Files changed:
.changeset/fix-macos-memory-used.md | 5 ++
docs/architecture.md | 2 +-
docs/dashboard-guide.md | 2 +-
.../__tests__/available-memory.test.ts | 54 --------------
.../cli/src/commands/dashboard-tui/controller.ts | 37 +---------
.../core/src/__tests__/available-memory.test.ts | 83 ++++++++++++++++++++++
packages/core/src/__tests__/system-metrics.test.ts | 36 +++++++++-
packages/core/src/available-memory.ts | 32 +++++++++
packages/core/src/index.ts | 1 +
packages/core/src/system-metrics.ts | 9 ++-
.../dashboard/src/__tests__/routes-system.test.ts | 27 +++++++
packages/dashboard/src/routes.ts | 7 +-
.../src/__tests__/run-verification-command.test.ts | 18 +++++
13 files changed, 218 insertions(+), 95 deletions(-)
Fusion-Task-Id: FN-6834
Fusion-Task-Lineage: 2e651551-6c35-46d1-b517-535758c7ace2
2026-06-21 13:32:19 -07:00
gsxdsm
08d1f09107
FN-6796: preserve benign in-review pause aborts
...
Preserve completed in-review tasks when benign pause/resume aborts surface after executor handoff.
- Detect non-user hard-cancel pause aborts on clean completed in-review rows and clear the transient abort marker without moving the task.
- Let self-healing recover persisted safe in-review pause-abort parks in place while keeping hard-cancel, pause, autoMerge:false, terminal merge, and live-execution guards intact.
- Cover executor and self-healing recovery paths with regression tests, document the audit metadata, and add a patch changeset.
Files changed:
.../fn-6796-pause-resume-in-review-recovery.md | 5 ++
AGENTS.md | 1 +
docs/architecture.md | 2 +
.../engine/src/__tests__/executor-recovery.test.ts | 97 +++++++++++++++++++++-
.../active-worktree-removal-liveness.test.ts | 2 +-
.../self-healing-paused-abort-recovery.test.ts | 90 +++++++++++++++++++-
packages/engine/src/executor.ts | 35 ++++++++
packages/engine/src/self-healing.ts | 38 +++++++--
8 files changed, 257 insertions(+), 13 deletions(-)
Fusion-Task-Id: FN-6796
Fusion-Task-Lineage: d2fe6c6d-c118-4f2f-b19e-58e6f1b29384
2026-06-20 15:11:22 -07:00
gsxdsm
61ff17a057
FN-6797: harden in-review dependency rebound audits
...
Harden in-review dependency drift reconciliation with explicit guarded no-action audit evidence.
- Emit no-action run-audit events when pause, auto-merge, live execution, checkout, or rebound mutation guards prevent an in-review dependency rebound.
- Preserve scheduler dependency satisfaction semantics so in-review dependencies remain non-blocking under merge-request shadow mode without accepted markers.
- Extend regression coverage and run-audit documentation for guarded in-review rebounds.
Files changed:
.changeset/fn-6797-in-review-dependency-drift.md | 5 +
AGENTS.md | 2 +-
docs/architecture.md | 4 +-
.../in-review-unmet-dependency-reconcile.test.ts | 18 ++-
packages/engine/src/__tests__/self-healing.test.ts | 79 +++++++++++--
packages/engine/src/self-healing.ts | 129 ++++++++++++++++-----
6 files changed, 190 insertions(+), 47 deletions(-)
Fusion-Task-Id: FN-6797
Fusion-Task-Lineage: f94c7875-619a-47be-88f5-320a4dda3b34
2026-06-20 10:21:26 -07:00
gsxdsm
d2fc70ac91
FN-6793: enforce dependency gates before review
...
Dependency gating now blocks executor and review recovery paths when dependencies remain unmet.
- Re-check unmet scheduling dependencies before workflow graph or authoritative executor dispatch and requeue blocked tasks with blockedBy.
- Rebound auto-merge-eligible in-review tasks with live unmet dependencies back to todo while preserving progress, worktree, and resume state.
- Add run-audit documentation, a patch changeset, and regression coverage for executor, scheduler, and self-healing behavior.
Files changed:
.changeset/fn-6793-dependency-gating.md | 7 +
AGENTS.md | 1 +
docs/architecture.md | 2 +
.../engine/src/__tests__/executor-core.test.ts | 68 +++++++++
.../in-review-unmet-dependency-reconcile.test.ts | 115 +++++++++++++++
packages/engine/src/__tests__/scheduler.test.ts | 36 +++++
packages/engine/src/__tests__/self-healing.test.ts | 159 +++++++++++++++++++++
packages/engine/src/executor.ts | 46 ++++++
packages/engine/src/self-healing.ts | 112 +++++++++++++++
9 files changed, 546 insertions(+)
Fusion-Task-Id: FN-6793
Fusion-Task-Lineage: b209264c-faae-41aa-a024-c33e0d8b61be
2026-06-20 08:13:33 -07:00
gsxdsm
c32c925321
FN-6783: recover orphaned task dirs into the task index
...
Reconcile on-disk task.json records that are missing from SQLite without resurrecting tombstoned IDs.
- Add TaskStore orphaned task directory scanning with metadata validation, FTS-safe insertion, cache updates, lifecycle events, and run-audit entries.
- Run the reconcile during store init and self-healing maintenance for tasks created after startup.
- Cover recovery, skip, and maintenance behavior with core and engine regression tests.
- Document task index reconciliation and add the published package changeset.
Files changed:
.changeset/fn-6783-orphaned-task-dir-reconcile.md | 5 +
AGENTS.md | 1 +
docs/architecture.md | 2 +
docs/storage.md | 8 +
.../store-orphaned-task-dir-reconcile.test.ts | 179 +++++++++++++++++++++
packages/core/src/store.ts | 170 ++++++++++++++++++-
.../self-healing-orphaned-task-dirs.test.ts | 40 +++++
packages/engine/src/self-healing.ts | 14 ++
8 files changed, 412 insertions(+), 7 deletions(-)
Fusion-Task-Id: FN-6783
Fusion-Task-Lineage: 5c8d4690-5278-4c29-8f02-32d9f01d581d
2026-06-20 04:40:31 -07:00
gsxdsm
5117944371
FN-6720: add productivity task duration stats
...
Adds completed-task active-duration analytics to the Command Center Productivity surface.\n\n- Aggregate average, median, p90, total, and completed-task duration metrics from done tasks with recorded active time.\n- Render duration stat cards with unavailable dash sentinels and export matching CSV rows.\n- Cover analytics, dashboard, route, CSV, mobile/tablet layout, and documentation behavior.\n\nFiles changed:\n .changeset/soft-badgers-measure.md | 5 +\n docs/architecture.md | 4 +-\n docs/dashboard-guide.md | 2 +-\n docs/storage.md | 2 +\n .../src/__tests__/productivity-analytics.test.ts | 105 ++++++++++++++++++++-\n packages/core/src/productivity-analytics.ts | 83 +++++++++++++++-\n .../__tests__/CommandCenter.mobile-scroll.test.tsx | 16 ++++\n .../__tests__/CommandCenter.tablet-layout.test.tsx | 19 ++++\n .../command-center/areas/ProductivityArea.tsx | 65 ++++++++++++-\n .../command-center/areas/__tests__/areas.test.tsx | 65 ++++++++++++-\n .../components/command-center/areas/areaShared.ts | 12 +++\n .../src/__tests__/command-center-csv.test.ts | 8 ++\n .../register-command-center-routes.test.ts | 22 +++++\n packages/dashboard/src/command-center-csv.ts | 5 +\n 14 files changed, 404 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6720
Fusion-Task-Lineage: aa0980eb-d156-4dca-b6b8-1788570c166b
2026-06-19 17:25:35 -07:00
gsxdsm
59d3eee7f4
FN-6721: estimate productivity hours saved
...
Estimate human hours saved from productivity LOC analytics and expose it consistently.
- Add a shared human-lines-per-hour conversion and hoursSaved summary to productivity analytics.
- Show human hours saved in the Command Center productivity area with unavailable-state handling.
- Include hoursSaved in productivity CSV exports, docs, tests, and the release changeset.
Files changed:
.changeset/fuzzy-productivity-hours.md | 5 ++++
docs/architecture.md | 4 +--
docs/storage.md | 4 +--
.../src/__tests__/productivity-analytics.test.ts | 29 ++++++++++++++++------
packages/core/src/index.ts | 3 ++-
packages/core/src/productivity-analytics.ts | 28 +++++++++++++++++++--
.../command-center/areas/ProductivityArea.tsx | 24 ++++++++++++++++++
.../command-center/areas/__tests__/areas.test.tsx | 9 ++++++-
.../src/__tests__/command-center-csv.test.ts | 29 +++++++++++++++++++++-
.../register-command-center-routes.test.ts | 1 +
packages/dashboard/src/command-center-csv.ts | 1 +
11 files changed, 120 insertions(+), 17 deletions(-)
Fusion-Task-Id: FN-6721
Fusion-Task-Lineage: 80114bfc-7d7f-4659-983a-9488660e5f0f
2026-06-19 16:47:34 -07:00
gsxdsm
87f18f87ed
FN-6705: add plugin activation analytics
...
Record plugin activation events and expose them to Command Center analytics.
- Add plugin activation persistence, aggregation helpers, and exports.
- Record load/reload activation events through the plugin loader and store APIs.
- Surface plugin activation counts in the Command Center Ecosystem area and API route.
- Cover migrations, aggregation behavior, plugin loader recording, route auth, UI rendering, and quarantined flaky suites.
Files changed:
.changeset/fn-6705-plugin-activation-analytics.md | 5 +
docs/architecture.md | 2 +-
docs/dashboard-guide.md | 2 +-
packages/cli/vitest.config.ts | 8 +
packages/core/src/__tests__/db-migrate.test.ts | 34 ++---
packages/core/src/__tests__/db.test.ts | 59 ++++----
packages/core/src/__tests__/goals-schema.test.ts | 6 +-
packages/core/src/__tests__/insight-store.test.ts | 12 +-
.../src/__tests__/merge-request-record.test.ts | 3 +-
packages/core/src/__tests__/mission-store.test.ts | 6 +-
.../__tests__/plugin-activation-analytics.test.ts | 67 ++++++++
packages/core/src/__tests__/plugin-loader.test.ts | 168 ++++++++++++++++++++-
packages/core/src/__tests__/run-audit.test.ts | 6 +-
.../core/src/__tests__/store-merge-queue.test.ts | 3 +-
.../src/__tests__/store-plugin-activations.test.ts | 52 +++++++
packages/core/src/__tests__/task-documents.test.ts | 3 +-
packages/core/src/db.ts | 35 ++++-
packages/core/src/index.ts | 8 +
packages/core/src/plugin-activation-analytics.ts | 104 +++++++++++++
packages/core/src/plugin-loader.ts | 27 ++++
packages/core/src/store.ts | 24 ++-
packages/core/src/types.ts | 22 +++
packages/core/vitest.config.ts | 12 ++
.../command-center/areas/EcosystemArea.tsx | 40 +++--
.../command-center/areas/__tests__/areas.test.tsx | 52 ++++++-
.../register-command-center-routes.auth.test.ts | 1 +
.../register-command-center-routes.test.ts | 29 ++++
.../src/routes/register-command-center-routes.ts | 20 +++
.../src/store/__tests__/roadmap-store.test.ts | 9 +-
scripts/boot-smoke.mjs | 24 ++-
scripts/lib/test-quarantine.json | 55 +++++++
31 files changed, 799 insertions(+), 99 deletions(-)
Fusion-Task-Id: FN-6705
Fusion-Task-Lineage: 12ed6227-f935-4038-bbe9-a605a054850e
2026-06-19 16:47:33 -07:00
gsxdsm
df139ec84c
FN-6736: reclaim phantom executor bindings
...
Recover wedged in-progress tasks by clearing stale executor bindings only after liveness proves the owner is gone.
- Add a guarded executor escape hatch that clears only stale in-memory task bookkeeping while refusing live session surfaces.
- Teach self-healing to identify phantom executor-active bindings using age, checkout, heartbeat, run-audit, and worktree liveness signals before requeueing preserved work.
- Record reclaim events in run audit and cover preserved-worktree recovery with reliability interaction tests.
- Document the recovery path and add a patch changeset for the published CLI package.
Files changed:
.changeset/fn-6736-phantom-executor-binding.md | 5 +
AGENTS.md | 1 +
docs/architecture.md | 1 +
.../reclaim-phantom-executor-binding.test.ts | 244 +++++++++++++++++++++
packages/engine/src/executor.ts | 35 +++
packages/engine/src/run-audit.ts | 2 +
packages/engine/src/runtimes/in-process-runtime.ts | 3 +-
packages/engine/src/self-healing.ts | 112 ++++++++++
8 files changed, 402 insertions(+), 1 deletion(-)
Fusion-Task-Id: FN-6736
Fusion-Task-Lineage: c76191ba-f4c3-4832-a790-67676e258ba2
2026-06-19 16:47:33 -07:00
gsxdsm
340da92400
FN-6735: treat benign merge-seam pause aborts as retryable
...
Treat benign pause/resume aborts at workflow merge seams as retryable transient merge failures.
- Classify legacy, merge-region, manual-hold, and retry node ids as merge-seam graph failures.
- Route clean in-review pause/resume aborts back through bounded auto-merge retry when eligible.
- Keep conflict, contamination, foreign-work, exhausted-retry, global/user pause, and confirmed-merge cases terminal.
- Cover the lifecycle with a reliability regression test and architecture notes.
Files changed:
docs/architecture.md | 4 +-
.../merge-node-paused-abort-retryable.test.ts | 227 +++++++++++++++++++++
packages/engine/src/executor.ts | 77 ++++++-
packages/engine/src/workflow-graph-executor.ts | 2 +-
4 files changed, 301 insertions(+), 9 deletions(-)
Fusion-Task-Id: FN-6735
Fusion-Task-Lineage: 3560c1e3-91e9-405a-bdfc-a243f7052803
2026-06-19 16:47:33 -07:00
gsxdsm
47e7b4a150
FN-6704: capture merge LOC for productivity analytics
...
Capture merge-time diff stats so Command Center Productivity can report real Lines changed when available.
- Add nullable additions/deletions columns to task commit associations with migration and storage normalization.
- Persist git shortstat counts from merge association paths without blocking merges when stats are unavailable.
- Aggregate Productivity LOC from recorded commit stats while preserving the unavailable sentinel for historical unknowns.
- Cover migration, store upsert, analytics, and merger association stats behavior with tests and documentation.
Files changed:
.changeset/fn-6704-command-center-loc.md | 5 ++
docs/architecture.md | 4 +-
docs/storage.md | 3 +
packages/core/src/__tests__/db-migrate.test.ts | 32 ++++----
packages/core/src/__tests__/db.test.ts | 90 ++++++++++++++++------
.../src/__tests__/productivity-analytics.test.ts | 47 +++++++++--
packages/core/src/__tests__/store-upsert.test.ts | 40 ++++++++++
packages/core/src/db.ts | 14 +++-
packages/core/src/productivity-analytics.ts | 56 +++++++++-----
packages/core/src/store.ts | 17 +++-
packages/core/src/task-lineage.ts | 2 +
packages/core/src/types.ts | 2 +
.../merger-commit-association-stats.test.ts | 90 ++++++++++++++++++++++
packages/engine/src/merger-ai.ts | 2 +
packages/engine/src/merger.ts | 17 +++-
15 files changed, 349 insertions(+), 72 deletions(-)
Fusion-Task-Id: FN-6704
Fusion-Task-Lineage: f079fecb-eade-4318-bc55-23aa48097b4a
2026-06-19 06:51:57 -07:00
gsxdsm
898ac1e85f
FN-6698: back command center signals with incidents
...
Replace the Command Center signals placeholders with incidents-backed analytics.
- Add core signal aggregation over the incidents table with date filtering, breakdowns, and MTTR handling.
- Expose the signals analytics through the Command Center API and update dashboard areas to consume real data.
- Cover empty, scoped, auth, and rendered signal states with tests and update docs/changeset.
Files changed:
.changeset/command-center-signals.md | 5 +
docs/architecture.md | 1 +
docs/dashboard-guide.md | 6 +-
.../core/src/__tests__/signals-analytics.test.ts | 114 ++++++++++++
packages/core/src/index.ts | 8 +
packages/core/src/signals-analytics.ts | 195 +++++++++++++++++++++
.../components/command-center/CommandCenter.tsx | 49 +-----
.../command-center/areas/EcosystemArea.tsx | 9 +-
.../command-center/areas/ProductivityArea.tsx | 3 +
.../command-center/areas/SignalsArea.tsx | 63 +------
.../register-command-center-routes.auth.test.ts | 1 +
.../register-command-center-routes.test.ts | 54 ++++++
.../src/routes/register-command-center-routes.ts | 23 +++
13 files changed, 431 insertions(+), 100 deletions(-)
Fusion-Task-Id: FN-6698
Fusion-Task-Lineage: 9ce41fb2-9a92-4863-8aa7-ae124294fe09
2026-06-19 06:04:20 -07:00