FN-5703: forward task:deleted events through in-process runtime

Ensure engine-side task deletes propagate through all runtime transports so GitHub tracking cleanup runs consistently.

- extend IPC protocol and child-process runtime/worker plumbing to carry `task:deleted` events
- forward `task:deleted` from in-process runtime through project runtime and project manager dispatch
- add regression coverage for in-process runtime forwarding and GitHub tracking delete handling

Files changed:
 .../src/__tests__/github-tracking-delete.test.ts   | 29 ++++++++++++++++++
 .../src/__tests__/in-process-runtime.test.ts       | 34 +++++++++++++++++++++-
 packages/engine/src/ipc/ipc-protocol.ts            | 14 ++++++++-
 packages/engine/src/project-manager.ts             |  7 +++++
 packages/engine/src/project-runtime.ts             |  4 ++-
 .../engine/src/runtimes/child-process-runtime.ts   |  6 ++++
 .../engine/src/runtimes/child-process-worker.ts    | 14 +++++++--
 packages/engine/src/runtimes/in-process-runtime.ts | 10 ++++++-
 8 files changed, 111 insertions(+), 7 deletions(-)

Fusion-Task-Id: FN-5703

Fusion-Task-Lineage: 1406838b-5abf-4b86-8161-c2dd59f88a9b
This commit is contained in:
gsxdsm
2026-05-29 18:38:43 -07:00
parent dac9b96262
commit a9d2064f66
8 changed files with 111 additions and 7 deletions

View File

@@ -22,11 +22,13 @@ import {
TASK_CREATED,
TASK_MOVED,
TASK_UPDATED,
TASK_DELETED,
ERROR_EVENT,
HEALTH_CHANGED,
type TaskCreatedPayload,
type TaskMovedPayload,
type TaskUpdatedPayload,
type TaskDeletedPayload,
type ErrorEventPayload,
type HealthChangedPayload,
} from "../ipc/ipc-protocol.js";
@@ -296,6 +298,10 @@ export class ChildProcessRuntime
this.emit("task:updated", payload.task);
});
this.ipcHost.on(TASK_DELETED, (payload: TaskDeletedPayload) => {
this.emit("task:deleted", payload.task, payload.meta);
});
// Forward error events
this.ipcHost.on(ERROR_EVENT, (payload: ErrorEventPayload) => {
const error = new Error(payload.message);

View File

@@ -18,6 +18,10 @@ import {
STOP_RUNTIME,
GET_STATUS,
GET_METRICS,
TASK_CREATED,
TASK_MOVED,
TASK_UPDATED,
TASK_DELETED,
ERROR_EVENT,
type StartRuntimePayload,
} from "../ipc/ipc-protocol.js";
@@ -76,15 +80,19 @@ ipcWorker.onCommand(START_RUNTIME, async (payload: unknown) => {
// Forward runtime events to host
runtime.on("task:created", (task) => {
ipcWorker.sendEvent("TASK_CREATED", { task });
ipcWorker.sendEvent(TASK_CREATED, { task });
});
runtime.on("task:moved", (data) => {
ipcWorker.sendEvent("TASK_MOVED", data);
ipcWorker.sendEvent(TASK_MOVED, data);
});
runtime.on("task:updated", (task) => {
ipcWorker.sendEvent("TASK_UPDATED", { task });
ipcWorker.sendEvent(TASK_UPDATED, { task });
});
runtime.on("task:deleted", (task, meta) => {
ipcWorker.sendEvent(TASK_DELETED, { task, meta });
});
runtime.on("error", (error) => {

View File

@@ -10,6 +10,7 @@ import type {
PluginLoader,
MessageStore,
RoutineStore,
GithubIssueAction,
} from "@fusion/core";
import { ChatStore, createCentralDatabase, isEphemeralAgent } from "@fusion/core";
import { Scheduler } from "../scheduler.js";
@@ -1284,7 +1285,8 @@ export class InProcessRuntime
}
/**
* Set up event forwarding from TaskStore to runtime listeners.
* Set up event forwarding from TaskStore to runtime listeners
* for task:created, task:moved, task:updated, and task:deleted.
*/
private setupEventForwarding(): void {
// Forward task:created events
@@ -1305,6 +1307,12 @@ export class InProcessRuntime
this.emit("task:updated", task);
});
// Forward task:deleted events
this.taskStore.on("task:deleted", (task: Task, meta?: { githubIssueAction?: GithubIssueAction }) => {
this.recordActivity();
this.emit("task:deleted", task, meta);
});
runtimeLog.log("Event forwarding setup complete");
}