feat(KB-332): rename task prefix from KB to FN and branches from kb/ to fusion/

- Change default task prefix from KB to FN across all packages

- Rename branch naming pattern from kb/{id} to fusion/{id}

- Update all test assertions and fixtures to use new prefixes

- Add changeset for the breaking change

- Resolve merge conflicts in TaskCard.test.tsx touch gesture tests
This commit is contained in:
gsxdsm
2026-03-31 19:29:47 -07:00
parent 204604ec43
commit 5647e500cf
75 changed files with 2303 additions and 2189 deletions

View File

@@ -73,40 +73,40 @@ describe("StuckTaskDetector", () => {
describe("trackTask", () => {
it("adds task to tracking", () => {
const session = createMockSession();
detector.trackTask("KB-001", session);
detector.trackTask("FN-001", session);
expect(detector.trackedCount).toBe(1);
});
it("sets initial activity timestamp", () => {
const session = createMockSession();
const before = Date.now();
detector.trackTask("KB-001", session);
detector.trackTask("FN-001", session);
const after = Date.now();
const lastActivity = detector.getLastActivity("KB-001");
const lastActivity = detector.getLastActivity("FN-001");
expect(lastActivity).toBeDefined();
expect(lastActivity).toBeGreaterThanOrEqual(before);
expect(lastActivity).toBeLessThanOrEqual(after);
});
it("can track multiple tasks", () => {
detector.trackTask("KB-001", createMockSession());
detector.trackTask("KB-002", createMockSession());
detector.trackTask("FN-001", createMockSession());
detector.trackTask("FN-002", createMockSession());
expect(detector.trackedCount).toBe(2);
});
});
describe("untrackTask", () => {
it("removes task from tracking", () => {
detector.trackTask("KB-001", createMockSession());
detector.trackTask("FN-001", createMockSession());
expect(detector.trackedCount).toBe(1);
detector.untrackTask("KB-001");
detector.untrackTask("FN-001");
expect(detector.trackedCount).toBe(0);
});
it("is safe to untrack untracked task", () => {
detector.untrackTask("KB-001");
detector.untrackTask("FN-001");
expect(detector.trackedCount).toBe(0);
});
});
@@ -116,14 +116,14 @@ describe("StuckTaskDetector", () => {
const session = createMockSession();
vi.useFakeTimers({ shouldAdvanceTime: true });
detector.trackTask("KB-001", session);
const initialActivity = detector.getLastActivity("KB-001")!;
detector.trackTask("FN-001", session);
const initialActivity = detector.getLastActivity("FN-001")!;
// Advance time
vi.advanceTimersByTime(10);
detector.recordActivity("KB-001");
detector.recordActivity("FN-001");
const newActivity = detector.getLastActivity("KB-001")!;
const newActivity = detector.getLastActivity("FN-001")!;
expect(newActivity).toBeGreaterThanOrEqual(initialActivity);
vi.useRealTimers();
@@ -131,44 +131,44 @@ describe("StuckTaskDetector", () => {
it("does nothing for untracked task", () => {
// Should not throw
detector.recordActivity("KB-001");
detector.recordActivity("FN-001");
});
});
describe("isStuck", () => {
it("returns false when no timeout exceeded", () => {
const session = createMockSession();
detector.trackTask("KB-001", session);
detector.trackTask("FN-001", session);
expect(detector.isStuck("KB-001", 60000)).toBe(false);
expect(detector.isStuck("FN-001", 60000)).toBe(false);
});
it("returns true when timeout exceeded", () => {
const session = createMockSession();
vi.useFakeTimers({ shouldAdvanceTime: true });
detector.trackTask("KB-001", session);
detector.trackTask("FN-001", session);
vi.advanceTimersByTime(61000); // Advance 61 seconds
expect(detector.isStuck("KB-001", 60000)).toBe(true);
expect(detector.isStuck("FN-001", 60000)).toBe(true);
vi.useRealTimers();
});
it("returns false for untracked task", () => {
expect(detector.isStuck("KB-001", 60000)).toBe(false);
expect(detector.isStuck("FN-001", 60000)).toBe(false);
});
});
describe("killAndRetry", () => {
it("disposes the session", async () => {
const session = createMockSession();
detector.trackTask("KB-001", session);
detector.trackTask("FN-001", session);
vi.useFakeTimers({ shouldAdvanceTime: true });
vi.advanceTimersByTime(61000);
await detector.killAndRetry("KB-001", 60000);
await detector.killAndRetry("FN-001", 60000);
expect(session.dispose).toHaveBeenCalled();
@@ -177,13 +177,13 @@ describe("StuckTaskDetector", () => {
it("removes task from tracking", async () => {
const session = createMockSession();
detector.trackTask("KB-001", session);
detector.trackTask("FN-001", session);
expect(detector.trackedCount).toBe(1);
vi.useFakeTimers({ shouldAdvanceTime: true });
vi.advanceTimersByTime(61000);
await detector.killAndRetry("KB-001", 60000);
await detector.killAndRetry("FN-001", 60000);
expect(detector.trackedCount).toBe(0);
@@ -192,15 +192,15 @@ describe("StuckTaskDetector", () => {
it("logs to task log", async () => {
const session = createMockSession();
detector.trackTask("KB-001", session);
detector.trackTask("FN-001", session);
vi.useFakeTimers({ shouldAdvanceTime: true });
vi.advanceTimersByTime(61000);
await detector.killAndRetry("KB-001", 60000);
await detector.killAndRetry("FN-001", 60000);
expect(store.logEntry).toHaveBeenCalledWith(
"KB-001",
"FN-001",
expect.stringContaining("Task terminated due to stuck agent session")
);
@@ -209,15 +209,15 @@ describe("StuckTaskDetector", () => {
it("updates task status and moves to todo", async () => {
const session = createMockSession();
detector.trackTask("KB-001", session);
detector.trackTask("FN-001", session);
vi.useFakeTimers({ shouldAdvanceTime: true });
vi.advanceTimersByTime(61000);
await detector.killAndRetry("KB-001", 60000);
await detector.killAndRetry("FN-001", 60000);
expect(store.updateTask).toHaveBeenCalledWith("KB-001", { status: "stuck-killed" });
expect(store.moveTask).toHaveBeenCalledWith("KB-001", "todo");
expect(store.updateTask).toHaveBeenCalledWith("FN-001", { status: "stuck-killed" });
expect(store.moveTask).toHaveBeenCalledWith("FN-001", "todo");
vi.useRealTimers();
});
@@ -227,20 +227,20 @@ describe("StuckTaskDetector", () => {
const customDetector = new StuckTaskDetector(store, { onStuck });
const session = createMockSession();
customDetector.trackTask("KB-001", session);
customDetector.trackTask("FN-001", session);
vi.useFakeTimers({ shouldAdvanceTime: true });
vi.advanceTimersByTime(61000);
await customDetector.killAndRetry("KB-001", 60000);
await customDetector.killAndRetry("FN-001", 60000);
expect(onStuck).toHaveBeenCalledWith("KB-001");
expect(onStuck).toHaveBeenCalledWith("FN-001");
vi.useRealTimers();
});
it("does nothing for untracked task", async () => {
await detector.killAndRetry("KB-001", 60000);
await detector.killAndRetry("FN-001", 60000);
// Should not throw
expect(store.moveTask).not.toHaveBeenCalled();
});
@@ -254,14 +254,14 @@ describe("StuckTaskDetector", () => {
const customDetector = new StuckTaskDetector(store);
const session = createMockSession();
customDetector.trackTask("KB-001", session);
customDetector.trackTask("FN-001", session);
vi.useFakeTimers({ shouldAdvanceTime: true });
vi.advanceTimersByTime(61000);
await customDetector.checkNow();
expect(store.moveTask).toHaveBeenCalledWith("KB-001", "todo");
expect(store.moveTask).toHaveBeenCalledWith("FN-001", "todo");
vi.useRealTimers();
});
@@ -292,7 +292,7 @@ describe("StuckTaskDetector", () => {
const customDetector = new StuckTaskDetector(store);
const session = createMockSession();
customDetector.trackTask("KB-001", session);
customDetector.trackTask("FN-001", session);
vi.useFakeTimers({ shouldAdvanceTime: true });
vi.advanceTimersByTime(61000);
@@ -311,7 +311,7 @@ describe("StuckTaskDetector", () => {
const customDetector = new StuckTaskDetector(store);
const session = createMockSession();
customDetector.trackTask("KB-001", session);
customDetector.trackTask("FN-001", session);
vi.useFakeTimers({ shouldAdvanceTime: true });
vi.advanceTimersByTime(61000);
@@ -330,7 +330,7 @@ describe("StuckTaskDetector", () => {
const customDetector = new StuckTaskDetector(store);
const session = createMockSession();
customDetector.trackTask("KB-001", session);
customDetector.trackTask("FN-001", session);
vi.useFakeTimers({ shouldAdvanceTime: true });
vi.advanceTimersByTime(61000);