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:
@@ -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);
|
||||
|
||||
Reference in New Issue
Block a user