Skip to content

Commit 0de5742

Browse files
fix: consume plans on implementation (#1133)
1 parent b500a36 commit 0de5742

23 files changed

Lines changed: 965 additions & 16 deletions

apps/server/src/orchestration/Layers/ProjectionPipeline.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -653,6 +653,8 @@ const makeOrchestrationProjectionPipeline = Effect.gen(function* () {
653653
threadId: event.payload.threadId,
654654
turnId: event.payload.proposedPlan.turnId,
655655
planMarkdown: event.payload.proposedPlan.planMarkdown,
656+
implementedAt: event.payload.proposedPlan.implementedAt,
657+
implementationThreadId: event.payload.proposedPlan.implementationThreadId,
656658
createdAt: event.payload.proposedPlan.createdAt,
657659
updatedAt: event.payload.proposedPlan.updatedAt,
658660
});
@@ -775,6 +777,8 @@ const makeOrchestrationProjectionPipeline = Effect.gen(function* () {
775777
yield* projectionTurnRepository.replacePendingTurnStart({
776778
threadId: event.payload.threadId,
777779
messageId: event.payload.messageId,
780+
sourceProposedPlanThreadId: event.payload.sourceProposedPlan?.threadId ?? null,
781+
sourceProposedPlanId: event.payload.sourceProposedPlan?.planId ?? null,
778782
requestedAt: event.payload.createdAt,
779783
});
780784
return;

apps/server/src/orchestration/Layers/ProjectionSnapshotQuery.test.ts

Lines changed: 35 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@ projectionSnapshotLayer("ProjectionSnapshotQuery", (it) => {
2626

2727
yield* sql`DELETE FROM projection_projects`;
2828
yield* sql`DELETE FROM projection_state`;
29+
yield* sql`DELETE FROM projection_thread_proposed_plans`;
2930
yield* sql`DELETE FROM projection_turns`;
3031

3132
yield* sql`
@@ -101,6 +102,29 @@ projectionSnapshotLayer("ProjectionSnapshotQuery", (it) => {
101102
)
102103
`;
103104

105+
yield* sql`
106+
INSERT INTO projection_thread_proposed_plans (
107+
plan_id,
108+
thread_id,
109+
turn_id,
110+
plan_markdown,
111+
implemented_at,
112+
implementation_thread_id,
113+
created_at,
114+
updated_at
115+
)
116+
VALUES (
117+
'plan-1',
118+
'thread-1',
119+
'turn-1',
120+
'# Ship it',
121+
'2026-02-24T00:00:05.500Z',
122+
'thread-2',
123+
'2026-02-24T00:00:05.000Z',
124+
'2026-02-24T00:00:05.500Z'
125+
)
126+
`;
127+
104128
yield* sql`
105129
INSERT INTO projection_thread_activities (
106130
activity_id,
@@ -253,7 +277,17 @@ projectionSnapshotLayer("ProjectionSnapshotQuery", (it) => {
253277
updatedAt: "2026-02-24T00:00:05.000Z",
254278
},
255279
],
256-
proposedPlans: [],
280+
proposedPlans: [
281+
{
282+
id: "plan-1",
283+
turnId: asTurnId("turn-1"),
284+
planMarkdown: "# Ship it",
285+
implementedAt: "2026-02-24T00:00:05.500Z",
286+
implementationThreadId: ThreadId.makeUnsafe("thread-2"),
287+
createdAt: "2026-02-24T00:00:05.000Z",
288+
updatedAt: "2026-02-24T00:00:05.500Z",
289+
},
290+
],
257291
activities: [
258292
{
259293
id: asEventId("activity-1"),

apps/server/src/orchestration/Layers/ProjectionSnapshotQuery.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,8 @@ const makeProjectionSnapshotQuery = Effect.gen(function* () {
200200
thread_id AS "threadId",
201201
turn_id AS "turnId",
202202
plan_markdown AS "planMarkdown",
203+
implemented_at AS "implementedAt",
204+
implementation_thread_id AS "implementationThreadId",
203205
created_at AS "createdAt",
204206
updated_at AS "updatedAt"
205207
FROM projection_thread_proposed_plans
@@ -435,6 +437,8 @@ const makeProjectionSnapshotQuery = Effect.gen(function* () {
435437
id: row.planId,
436438
turnId: row.turnId,
437439
planMarkdown: row.planMarkdown,
440+
implementedAt: row.implementedAt,
441+
implementationThreadId: row.implementationThreadId,
438442
createdAt: row.createdAt,
439443
updatedAt: row.updatedAt,
440444
});

0 commit comments

Comments
 (0)