diff --git a/docker/agent/daemon/repos.test.ts b/docker/agent/daemon/repos.test.ts index db4ff3011..32c72e9dd 100644 --- a/docker/agent/daemon/repos.test.ts +++ b/docker/agent/daemon/repos.test.ts @@ -14,6 +14,15 @@ vi.mock("node:fs", async (orig) => ({ writeFileSync: vi.fn(), mkdirSync: vi.fn(), rmSync: vi.fn(), + // The orphan sweep in reconcileRepos reads the workspace root via readdirSync + // (+ statSync for mtimes). Without mocking these, the sweep enumerates the REAL + // filesystem — so any sibling dir in /workspace (e.g. other checked-out repos in + // a CI/dev container) is treated as an orphan and rm-rf'd, firing spurious rmSync + // calls that break the reconcileRepos rmSync assertions below. Default to an empty + // workspace so these integration tests only exercise the adopt/clone decisions; + // the sweep itself is covered separately by the pure sweepOrphanWorkspaceDirs tests. + readdirSync: vi.fn(() => [] as unknown as ReturnType), + statSync: vi.fn(() => ({ mtimeMs: 0 }) as unknown as ReturnType), })); // Isolate reconcileRepos from the (heavy, fs/exec-driven) E2 setup path — the diff --git a/prisma/schema.prisma b/prisma/schema.prisma index 05d5ba2de..4f01110d0 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -133,7 +133,7 @@ enum SyncDirection { enum GoalPriorityEntityType { task deliverable - checkpoint + feedback phase } diff --git a/src/app/(app)/o/[orgSlug]/p/[projectSlug]/phases/phase-board.tsx b/src/app/(app)/o/[orgSlug]/p/[projectSlug]/phases/phase-board.tsx index 700f2db5e..61c80bed0 100644 --- a/src/app/(app)/o/[orgSlug]/p/[projectSlug]/phases/phase-board.tsx +++ b/src/app/(app)/o/[orgSlug]/p/[projectSlug]/phases/phase-board.tsx @@ -750,7 +750,7 @@ function CheckpointCard({ onDelete={onDelete ? () => onDelete(item) : undefined} /> e.stopPropagation()}> - +