fix(FN-1285): harden async listener error guards

- Wrap TaskExecutor task:updated async listener logic in a top-level guard and log uncaught listener failures
- Add explicit catch handling for ProjectManager activity logging and dashboard stuck-detector settings-triggered checkNow calls
- Document async EventEmitter guard conventions in scheduler and hybrid executor listener wiring
- Add regression tests for executor and dashboard listener guards and include a patch changeset for @gsxdsm/fusion
This commit is contained in:
gsxdsm
2026-04-08 11:49:33 -07:00
parent 90ccfb4d17
commit 7881a09a07
8 changed files with 227 additions and 100 deletions

View File

@@ -352,7 +352,9 @@ export class ProjectManager extends EventEmitter<ProjectManagerEvents> {
// Forward task:created
runtime.on("task:created", (task: Task) => {
this.emit("task:created", { projectId, projectName, task });
this.logActivity("task:created", projectId, projectName, `Task ${task.id} created`, task.id, task.title);
this.logActivity("task:created", projectId, projectName, `Task ${task.id} created`, task.id, task.title).catch((err: unknown) => {
projectManagerLog.warn(`Failed to log task:created activity for ${projectId}:`, err);
});
});
// Forward task:moved
@@ -366,7 +368,9 @@ export class ProjectManager extends EventEmitter<ProjectManagerEvents> {
data.task.id,
data.task.title,
{ from: data.from, to: data.to }
);
).catch((err: unknown) => {
projectManagerLog.warn(`Failed to log task:moved activity for ${projectId}:`, err);
});
});
// Forward task:updated
@@ -382,7 +386,9 @@ export class ProjectManager extends EventEmitter<ProjectManagerEvents> {
projectId,
projectName,
`Error in ${projectName}: ${error.message}`
);
).catch((err: unknown) => {
projectManagerLog.warn(`Failed to log task:failed activity for ${projectId}:`, err);
});
});
// Forward health changes