import { CommandId, ProjectId, ProviderInstanceId, ThreadId, type OrchestrationReadModel,} from "@t3tools/contracts";import * as NodeServices from "@effect/platform-node/NodeServices";import { expect, it } from "@effect/vitest";import * as Effect from "effect/Effect"; import { decideOrchestrationCommand } from "./decider.ts"; const UPDATED_AT = "2026-01-01T00:00:00.000Z"; const readModel: OrchestrationReadModel = { snapshotSequence: 0, projects: [], threads: [ { id: ThreadId.make("thread-1"), projectId: ProjectId.make("project-1"), title: "Manual title", modelSelection: { instanceId: ProviderInstanceId.make("codex"), model: "gpt-5.4" }, runtimeMode: "full-access", interactionMode: "default", branch: null, worktreePath: null, latestTurn: null, createdAt: UPDATED_AT, updatedAt: UPDATED_AT, archivedAt: null, settledOverride: null, settledAt: null, snoozedUntil: null, snoozedAt: null, deletedAt: null, messages: [], proposedPlans: [], activities: [], checkpoints: [], session: null, }, ], updatedAt: UPDATED_AT,}; it.layer(NodeServices.layer)("title regeneration decider", (it) => { it.effect("preserves updatedAt for a stale completion", () => Effect.gen(function* () { const result = yield* decideOrchestrationCommand({ command: { type: "thread.title.regeneration.complete", commandId: CommandId.make("cmd-regeneration-complete"), threadId: ThreadId.make("thread-1"), requestId: CommandId.make("cmd-old-regeneration-request"), title: "Generated title", }, readModel, }); const event = Array.isArray(result) ? result[0] : result; expect(event.type).toBe("thread.meta-updated"); if (event.type === "thread.meta-updated") { expect(event.payload).toEqual({ threadId: ThreadId.make("thread-1"), updatedAt: UPDATED_AT, }); } }), );});
import {
CommandId,
ProjectId,
ProviderInstanceId,
ThreadId,
type OrchestrationReadModel,
} from "@t3tools/contracts";
import * as NodeServices from "@effect/platform-node/NodeServices";
import { expect, it } from "@effect/vitest";
import * as Effect from "effect/Effect";
import { decideOrchestrationCommand } from "./decider.ts";
const UPDATED_AT = "2026-01-01T00:00:00.000Z";
const readModel: OrchestrationReadModel = {
snapshotSequence: 0,
projects: [],
threads: [
{
id: ThreadId.make("thread-1"),
projectId: ProjectId.make("project-1"),
title: "Manual title",
modelSelection: { instanceId: ProviderInstanceId.make("codex"), model: "gpt-5.4" },
runtimeMode: "full-access",
interactionMode: "default",
branch: null,
worktreePath: null,
latestTurn: null,
createdAt: UPDATED_AT,
updatedAt: UPDATED_AT,
archivedAt: null,
settledOverride: null,
settledAt: null,
snoozedUntil: null,
snoozedAt: null,
deletedAt: null,
messages: [],
proposedPlans: [],
activities: [],
checkpoints: [],
session: null,
},
],
updatedAt: UPDATED_AT,
};
it.layer(NodeServices.layer)("title regeneration decider", (it) => {
it.effect("preserves updatedAt for a stale completion", () =>
Effect.gen(function* () {
const result = yield* decideOrchestrationCommand({
command: {
type: "thread.title.regeneration.complete",
commandId: CommandId.make("cmd-regeneration-complete"),
threadId: ThreadId.make("thread-1"),
requestId: CommandId.make("cmd-old-regeneration-request"),
title: "Generated title",
},
readModel,
});
const event = Array.isArray(result) ? result[0] : result;
expect(event.type).toBe("thread.meta-updated");
if (event.type === "thread.meta-updated") {
expect(event.payload).toEqual({
threadId: ThreadId.make("thread-1"),
updatedAt: UPDATED_AT,
});
}
}),
);
});