@cat-factory/orchestration 0.64.0 → 0.66.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (29) hide show
  1. package/dist/container.d.ts +4 -1
  2. package/dist/container.d.ts.map +1 -1
  3. package/dist/container.js +45 -12
  4. package/dist/container.js.map +1 -1
  5. package/dist/modules/execution/ExecutionService.d.ts +9 -1
  6. package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
  7. package/dist/modules/execution/ExecutionService.js +9 -1
  8. package/dist/modules/execution/ExecutionService.js.map +1 -1
  9. package/dist/modules/execution/RunStateMachine.d.ts +7 -0
  10. package/dist/modules/execution/RunStateMachine.d.ts.map +1 -1
  11. package/dist/modules/execution/RunStateMachine.js +8 -0
  12. package/dist/modules/execution/RunStateMachine.js.map +1 -1
  13. package/dist/modules/initiative/InitiativeLoopService.d.ts +88 -0
  14. package/dist/modules/initiative/InitiativeLoopService.d.ts.map +1 -0
  15. package/dist/modules/initiative/InitiativeLoopService.js +356 -0
  16. package/dist/modules/initiative/InitiativeLoopService.js.map +1 -0
  17. package/dist/modules/initiative/InitiativeService.d.ts +31 -1
  18. package/dist/modules/initiative/InitiativeService.d.ts.map +1 -1
  19. package/dist/modules/initiative/InitiativeService.js +53 -0
  20. package/dist/modules/initiative/InitiativeService.js.map +1 -1
  21. package/dist/modules/initiative/initiative.logic.d.ts +58 -1
  22. package/dist/modules/initiative/initiative.logic.d.ts.map +1 -1
  23. package/dist/modules/initiative/initiative.logic.js +157 -0
  24. package/dist/modules/initiative/initiative.logic.js.map +1 -1
  25. package/dist/modules/recurring/RecurringPipelineService.d.ts +11 -2
  26. package/dist/modules/recurring/RecurringPipelineService.d.ts.map +1 -1
  27. package/dist/modules/recurring/RecurringPipelineService.js +87 -32
  28. package/dist/modules/recurring/RecurringPipelineService.js.map +1 -1
  29. package/package.json +10 -10
@@ -0,0 +1,356 @@
1
+ import { ConflictError, DomainError } from '@cat-factory/kernel';
2
+ import { commitInitiativeTracker } from '@cat-factory/agents';
3
+ import { activeItemCount, allItemsSettled, applyRevertClaim, applySpawnClaim, deriveCurrentPhase, effectiveMaxConcurrent, eligibleItemsToSpawn, reconcileItem, selectInitiativePipeline, } from './initiative.logic.js';
4
+ /**
5
+ * The initiative EXECUTION LOOP (slice 3): the driver that turns an approved plan into a
6
+ * running body of work. The cron/interval sweepers call {@link runDue}; a settling child run
7
+ * pokes {@link pokeForInitiativeBlock} so the loop advances immediately instead of waiting for
8
+ * the next sweep. Each per-initiative {@link tick}:
9
+ *
10
+ * 1. RECONCILE — batch-reads ONLY the spawned task blocks (one chunked `findByIds`, indexed —
11
+ * no N+1, no full-workspace scan) and folds each block's status back onto its item (done +
12
+ * PR link / pr_open / blocked + deviation).
13
+ * 2. COMPLETE — when every item is settled, flip the initiative + its anchor block `done`,
14
+ * re-commit the tracker, and notify.
15
+ * 3. SPAWN — creates task blocks for the eligible `pending` items (current phase, deps met,
16
+ * phase not halted by a blocked sibling) up to the concurrency cap, picking each task's
17
+ * pipeline from the policy rules. Spawning is CLAIM-FIRST: a CAS write records the
18
+ * pre-generated block id BEFORE any side effect, so a concurrent ticker that lost the CAS
19
+ * created nothing (single-writer by construction, exactly like the rest of the entity).
20
+ *
21
+ * Every entity write goes through {@link InitiativeService}'s rev-guarded CAS, so a lost tick is
22
+ * simply abandoned; the next sweep retries. A per-service task-limit `ConflictError` leaves the
23
+ * item `pending` for the next sweep (never `blocked`); a missing pipeline (deleted after ingest)
24
+ * records a deviation + notification and blocks the item — the sweep NEVER throws.
25
+ */
26
+ export class InitiativeLoopService {
27
+ deps;
28
+ /** In-process re-entrancy guard so a cron sweep + a terminal poke don't double-tick one initiative. */
29
+ ticking = new Set();
30
+ constructor(deps) {
31
+ this.deps = deps;
32
+ }
33
+ /**
34
+ * Tick every `executing` initiative across all workspaces. The cron (Worker) / interval
35
+ * (Node) sweepers call this. Never throws — a per-initiative failure is isolated so one bad
36
+ * initiative can't stall the others. Returns aggregate counts for logging.
37
+ */
38
+ async runDue(_now) {
39
+ const executing = await this.deps.initiativeRepository.listExecuting();
40
+ let spawned = 0;
41
+ let completed = 0;
42
+ for (const { workspaceId, initiative } of executing) {
43
+ try {
44
+ const result = await this.tick(workspaceId, initiative);
45
+ spawned += result.spawned;
46
+ if (result.completed)
47
+ completed++;
48
+ }
49
+ catch {
50
+ // Isolate a bad initiative; the next sweep retries it. (Each entity write is already
51
+ // CAS-guarded, so a partial tick left the entity consistent.)
52
+ }
53
+ }
54
+ return { ticked: executing.length, spawned, completed };
55
+ }
56
+ /**
57
+ * Best-effort single tick for one initiative, triggered when a spawned child run settles (a
58
+ * terminal run / a merge). Fire-and-forget from the caller; swallow errors (the sweep is the
59
+ * backstop). `initiativeBlockId` is the block the settled child carries in its `initiativeId`.
60
+ */
61
+ async pokeForInitiativeBlock(workspaceId, initiativeBlockId) {
62
+ try {
63
+ const initiative = await this.deps.initiativeRepository.getByBlock(workspaceId, initiativeBlockId);
64
+ if (initiative && initiative.status === 'executing')
65
+ await this.tick(workspaceId, initiative);
66
+ }
67
+ catch {
68
+ // Swallow — the periodic sweep will pick the initiative up.
69
+ }
70
+ }
71
+ async tick(workspaceId, seed) {
72
+ const key = seed.id;
73
+ if (this.ticking.has(key))
74
+ return { spawned: 0, completed: false };
75
+ this.ticking.add(key);
76
+ try {
77
+ // Re-read the freshest entity (the seed may be stale — from listExecuting or a poke).
78
+ let initiative = await this.deps.initiativeRepository.getByBlock(workspaceId, seed.blockId);
79
+ if (!initiative || initiative.status !== 'executing')
80
+ return { spawned: 0, completed: false };
81
+ const startRev = initiative.rev;
82
+ // 1. Reconcile spawned tasks from their blocks — a single batched point-read of ONLY the
83
+ // spawned task blocks (chunked `IN` via `findByIds`, not a full-workspace scan), indexed.
84
+ const blocksById = await this.readSpawnedBlocks(workspaceId, initiative);
85
+ initiative = (await this.reconcile(workspaceId, initiative, blocksById)) ?? initiative;
86
+ // 2. Complete when every item is settled.
87
+ if (allItemsSettled(initiative)) {
88
+ await this.complete(workspaceId, initiative);
89
+ return { spawned: 0, completed: true };
90
+ }
91
+ // 3. Spawn eligible items up to the effective concurrency cap.
92
+ const spawned = await this.spawn(workspaceId, initiative);
93
+ // 4. Best-effort mirror the tracker — ONLY when this tick actually mutated the entity (a
94
+ // reconcile folded a status, or a spawn/claim/block landed → the persisted `rev` moved).
95
+ // An idle tick (spawned tasks still running, nothing to fold) skips it entirely, so an
96
+ // executing initiative waiting on in-flight PRs doesn't hit GitHub every sweep. Never
97
+ // before a DB CAS wins; hash-short-circuited even when it does run.
98
+ await this.recommitTracker(workspaceId, initiative.blockId, startRev).catch(() => { });
99
+ return { spawned, completed: false };
100
+ }
101
+ finally {
102
+ this.ticking.delete(key);
103
+ }
104
+ }
105
+ /**
106
+ * Batch-read ONLY the blocks the initiative's items were spawned as (a single chunked `IN`
107
+ * via {@link BlockRepository.findByIds}), indexed by id for the reconcile lookup — never a
108
+ * full-workspace block scan. Empty when no item carries a block link yet.
109
+ */
110
+ async readSpawnedBlocks(workspaceId, initiative) {
111
+ const ids = (initiative.items ?? []).map((i) => i.blockId).filter((id) => !!id);
112
+ if (ids.length === 0)
113
+ return new Map();
114
+ const found = await this.deps.blockRepository.findByIds(ids);
115
+ return new Map(found.filter((r) => r.workspaceId === workspaceId).map((r) => [r.block.id, r.block]));
116
+ }
117
+ // ---- Reconcile ----------------------------------------------------------
118
+ async reconcile(workspaceId, initiative, blocksById) {
119
+ // Nothing to reconcile unless an actively-spawned item exists.
120
+ const hasActive = (initiative.items ?? []).some((i) => i.blockId && (i.status === 'in_progress' || i.status === 'pr_open'));
121
+ if (!hasActive)
122
+ return null;
123
+ let newlyBlocked = false;
124
+ const updated = await this.deps.initiativeService.update(workspaceId, initiative.blockId, (current) => {
125
+ const items = (current.items ?? []).map((it) => it.blockId ? reconcileItem(it, blocksById.get(it.blockId)) : it);
126
+ const deviations = [...(current.deviations ?? [])];
127
+ for (let i = 0; i < items.length; i++) {
128
+ const before = current.items[i];
129
+ const after = items[i];
130
+ if (after.status === 'blocked' && before.status !== 'blocked') {
131
+ newlyBlocked = true;
132
+ deviations.push({
133
+ id: this.deps.idGenerator.next('idev'),
134
+ at: this.deps.clock.now(),
135
+ itemId: after.id,
136
+ description: `Task for "${after.title}" was blocked; the phase is halted until it is retried or skipped.`,
137
+ });
138
+ }
139
+ }
140
+ return { ...current, items, deviations };
141
+ });
142
+ if (newlyBlocked && updated)
143
+ await this.notify(workspaceId, updated, 'item_blocked');
144
+ return updated;
145
+ }
146
+ // ---- Complete -----------------------------------------------------------
147
+ async complete(workspaceId, initiative) {
148
+ const done = await this.deps.initiativeService.update(workspaceId, initiative.blockId, (current) => allItemsSettled(current) && current.status === 'executing'
149
+ ? { ...current, status: 'done' }
150
+ : current);
151
+ if (!done || done.status !== 'done')
152
+ return;
153
+ await this.deps.blockRepository.update(workspaceId, done.blockId, {
154
+ status: 'done',
155
+ progress: 1,
156
+ });
157
+ await this.deps.events.boardChanged(workspaceId, 'initiative-complete', done.blockId);
158
+ await this.recommitTracker(workspaceId, done.blockId).catch(() => { });
159
+ await this.notify(workspaceId, done, 'complete');
160
+ }
161
+ // ---- Spawn --------------------------------------------------------------
162
+ async spawn(workspaceId, initiative) {
163
+ const phase = deriveCurrentPhase(initiative);
164
+ if (!phase)
165
+ return 0;
166
+ let slots = effectiveMaxConcurrent(initiative, phase) - activeItemCount(initiative);
167
+ if (slots <= 0)
168
+ return 0;
169
+ const eligible = eligibleItemsToSpawn(initiative);
170
+ if (eligible.length === 0)
171
+ return 0;
172
+ // Resolve the host frame ONCE (invariant across items): spawned tasks live under the
173
+ // initiative's parent service frame (structural containment), linked to the initiative via
174
+ // `initiativeId` (epic-style membership). No frame ⇒ nothing to host the work.
175
+ const anchor = await this.deps.blockRepository.get(workspaceId, initiative.blockId);
176
+ const frame = anchor?.parentId
177
+ ? await this.deps.blockRepository.get(workspaceId, anchor.parentId)
178
+ : null;
179
+ if (!frame)
180
+ return 0;
181
+ const serviceId = this.deps.serviceRepository
182
+ ? ((await this.deps.serviceRepository.getByFrameBlock(frame.id))?.id ?? null)
183
+ : null;
184
+ let spawned = 0;
185
+ let entity = initiative;
186
+ for (const item of eligible) {
187
+ if (slots <= 0)
188
+ break;
189
+ const result = await this.spawnItem(workspaceId, entity, item, frame, serviceId);
190
+ entity = result.entity;
191
+ if (result.outcome === 'spawned') {
192
+ spawned++;
193
+ slots--;
194
+ }
195
+ else if (result.outcome === 'conflict') {
196
+ // Lost a CAS, or the per-service task limit was hit — abandon the rest of this tick.
197
+ break;
198
+ }
199
+ // 'skipped' (item no longer pending, or blocked on a config problem) — try the next item.
200
+ }
201
+ return spawned;
202
+ }
203
+ async spawnItem(workspaceId, entity, item, frame, serviceId) {
204
+ const policy = entity.policy;
205
+ if (!policy)
206
+ return { outcome: 'skipped', entity };
207
+ // Pick the pipeline first; a missing one is a config problem (a pipeline deleted after
208
+ // ingest) → block the item + deviation + notify, NEVER throw inside the sweep.
209
+ const pipelineId = selectInitiativePipeline(item, policy);
210
+ if (!(await this.deps.pipelineRepository.get(workspaceId, pipelineId))) {
211
+ const blocked = await this.blockItem(workspaceId, entity.blockId, item.id, `Pipeline "${pipelineId}" no longer exists — pick another in the initiative policy.`);
212
+ return { outcome: 'skipped', entity: blocked ?? entity };
213
+ }
214
+ // Claim the item BEFORE any side effect: a CAS write records the pre-generated block id, so
215
+ // a concurrent ticker whose CAS lost created nothing (the winner's claim short-circuits the
216
+ // loser's transform to a no-op).
217
+ const spawnedBlockId = this.deps.idGenerator.next('blk');
218
+ const claimed = await this.deps.initiativeService.update(workspaceId, entity.blockId, (current) => applySpawnClaim(current, item.id, spawnedBlockId));
219
+ if (!claimed)
220
+ return { outcome: 'skipped', entity };
221
+ const claimedItem = (claimed.items ?? []).find((i) => i.id === item.id);
222
+ if (!claimedItem || claimedItem.blockId !== spawnedBlockId) {
223
+ // Another ticker already claimed it (a different block id), or it moved on — skip.
224
+ return { outcome: 'skipped', entity: claimed };
225
+ }
226
+ // The claim won: insert the task block, then start its run.
227
+ const block = this.buildTaskBlock(spawnedBlockId, item, frame, entity.blockId);
228
+ try {
229
+ await this.deps.blockRepository.insert(workspaceId, block, serviceId);
230
+ await this.deps.events.boardChanged(workspaceId, 'block-added', block.id);
231
+ await this.deps.executionService.start(workspaceId, block.id, pipelineId);
232
+ return { outcome: 'spawned', entity: claimed };
233
+ }
234
+ catch (error) {
235
+ // Roll back the block, then decide on the item. A per-service task-limit ConflictError is
236
+ // transient → revert the item to `pending` for the next sweep and stop spawning this tick.
237
+ // Any OTHER failure is (likely) a persistent config problem → block + notify so it isn't
238
+ // retried forever.
239
+ await this.deps.blockRepository.deleteMany(workspaceId, [block.id]).catch(() => { });
240
+ const reason = error instanceof DomainError ? error.details?.reason : undefined;
241
+ if (error instanceof ConflictError && reason === 'task_limit_reached') {
242
+ const reverted = await this.deps.initiativeService.update(workspaceId, entity.blockId, (current) => applyRevertClaim(current, item.id, spawnedBlockId));
243
+ return { outcome: 'conflict', entity: reverted ?? claimed };
244
+ }
245
+ const message = error instanceof Error ? error.message : 'Failed to start the task.';
246
+ const blocked = await this.blockItem(workspaceId, entity.blockId, item.id, `Could not start the task: ${message}`);
247
+ return { outcome: 'skipped', entity: blocked ?? claimed };
248
+ }
249
+ }
250
+ /** Build the task block a spawned item runs as (item estimate stamped, `initiativeId` linked). */
251
+ buildTaskBlock(blockId, item, frame, initiativeBlockId) {
252
+ const estimate = estimateForItem(item, this.deps.clock.now());
253
+ return {
254
+ id: blockId,
255
+ title: item.title,
256
+ // Inherit the host frame's (behavioural) repo type, like BoardService.addTask.
257
+ type: frame.type,
258
+ description: item.description,
259
+ position: { x: 24, y: 96 },
260
+ status: 'planned',
261
+ progress: 0,
262
+ dependsOn: [],
263
+ executionId: null,
264
+ level: 'task',
265
+ parentId: frame.id,
266
+ // Epic-style membership so the loop reconciles from the block and the board badges it. The
267
+ // loop OWNS sequencing, so NEVER opt into `autoStartDependents` on a spawned block.
268
+ initiativeId: initiativeBlockId,
269
+ ...(estimate ? { estimate } : {}),
270
+ };
271
+ }
272
+ /**
273
+ * Block an item that could not be spawned (a missing pipeline / a start failure): mark it
274
+ * `blocked`, drop its dangling block link, record a deviation, and raise the notification.
275
+ * The blocked item halts its phase (see `phaseIsHalted`) until a human intervenes.
276
+ */
277
+ async blockItem(workspaceId, initiativeBlockId, itemId, note) {
278
+ const updated = await this.deps.initiativeService.update(workspaceId, initiativeBlockId, (current) => {
279
+ const items = (current.items ?? []).map((i) => i.id === itemId ? { ...i, status: 'blocked', note, blockId: null } : i);
280
+ const deviations = [
281
+ ...(current.deviations ?? []),
282
+ {
283
+ id: this.deps.idGenerator.next('idev'),
284
+ at: this.deps.clock.now(),
285
+ itemId,
286
+ description: note,
287
+ },
288
+ ];
289
+ return { ...current, items, deviations };
290
+ });
291
+ if (updated)
292
+ await this.notify(workspaceId, updated, 'item_blocked');
293
+ return updated;
294
+ }
295
+ // ---- Tracker mirror + notifications -------------------------------------
296
+ async recommitTracker(workspaceId, initiativeBlockId, sinceRev) {
297
+ if (!this.deps.resolveRunRepoContext)
298
+ return;
299
+ const initiative = await this.deps.initiativeRepository.getByBlock(workspaceId, initiativeBlockId);
300
+ if (!initiative)
301
+ return;
302
+ // Nothing changed this tick (the persisted rev never moved) ⇒ skip the repo round-trip.
303
+ if (sinceRev !== undefined && initiative.rev === sinceRev)
304
+ return;
305
+ const runRepo = await this.deps.resolveRunRepoContext(workspaceId, initiativeBlockId);
306
+ if (!runRepo)
307
+ return;
308
+ const doc = await commitInitiativeTracker(runRepo.repo, runRepo.baseBranch, initiative, new Date(this.deps.clock.now()));
309
+ // Stamp the committed version/hash back (a content-unchanged tick commits nothing, so the
310
+ // no-change short-circuit means a replay skips this write too). `markExecuting` leaves an
311
+ // already-`executing` status untouched and only writes the `doc` bookkeeping.
312
+ if (doc)
313
+ await this.deps.initiativeService.markExecuting(workspaceId, initiativeBlockId, doc);
314
+ }
315
+ async notify(workspaceId, initiative, reason) {
316
+ if (!this.deps.notificationService)
317
+ return;
318
+ const items = initiative.items ?? [];
319
+ const blocked = items.filter((i) => i.status === 'blocked');
320
+ const input = reason === 'complete'
321
+ ? {
322
+ title: `Initiative "${initiative.title}" complete`,
323
+ body: `Every planned task is resolved (${items.length} item${items.length === 1 ? '' : 's'}).`,
324
+ }
325
+ : {
326
+ title: `Initiative "${initiative.title}" needs attention`,
327
+ body: blocked.length === 1
328
+ ? `A task was blocked (${blocked[0].title}). Retry or skip it to unblock the phase.`
329
+ : `${blocked.length} tasks are blocked. Retry or skip them to unblock the phase.`,
330
+ };
331
+ await this.deps.notificationService
332
+ .raise(workspaceId, {
333
+ type: 'initiative',
334
+ blockId: initiative.blockId,
335
+ executionId: null,
336
+ title: input.title,
337
+ body: input.body,
338
+ payload: { initiativeReason: reason },
339
+ })
340
+ .catch(() => { });
341
+ }
342
+ }
343
+ /** Build a {@link TaskEstimate} from an item's planner estimate, stamped for the spawned block. */
344
+ export function estimateForItem(item, now) {
345
+ if (!item.estimate)
346
+ return undefined;
347
+ return {
348
+ complexity: item.estimate.complexity,
349
+ risk: item.estimate.risk,
350
+ impact: item.estimate.impact,
351
+ rationale: item.estimate.rationale ?? '',
352
+ model: 'initiative-planner',
353
+ createdAt: now,
354
+ };
355
+ }
356
+ //# sourceMappingURL=InitiativeLoopService.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"InitiativeLoopService.js","sourceRoot":"","sources":["../../../src/modules/initiative/InitiativeLoopService.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Block, BlockRepository, Clock, CreateInitiativeInput, ExecutionEventPublisher, IdGenerator, Initiative, InitiativeRepository, WorkspaceRepository } from '@cat-factory/kernel';
1
+ import type { Block, BlockRepository, Clock, CreateInitiativeInput, ExecutionEventPublisher, IdGenerator, Initiative, InitiativeRepository, PipelineRepository, WorkspaceRepository } from '@cat-factory/kernel';
2
2
  export interface InitiativeServiceDependencies {
3
3
  workspaceRepository: WorkspaceRepository;
4
4
  blockRepository: BlockRepository;
@@ -6,6 +6,13 @@ export interface InitiativeServiceDependencies {
6
6
  events: ExecutionEventPublisher;
7
7
  clock: Clock;
8
8
  idGenerator: IdGenerator;
9
+ /**
10
+ * Pipelines, used ONLY to validate the plan's `defaultPipelineId` at ingest (fail the
11
+ * planning run loudly on a plan that names a non-existent pipeline, rather than surfacing
12
+ * it later as a per-item spawn deviation). Optional so a deployment/test without pipelines
13
+ * wired still ingests. A pipeline deleted AFTER ingest is handled by the loop at spawn.
14
+ */
15
+ pipelineRepository?: PipelineRepository;
9
16
  }
10
17
  /**
11
18
  * The initiative entity's owner: creation (the board block + the entity in one
@@ -40,6 +47,13 @@ export declare class InitiativeService {
40
47
  * initiative (nothing to ingest into).
41
48
  */
42
49
  ingestPlan(workspaceId: string, blockId: string, rawDraft: unknown): Promise<Initiative | null>;
50
+ /**
51
+ * Fail a plan ingest whose policy names a pipeline that doesn't exist (the default, or a
52
+ * rule/item override) — a plan the loop could never execute. No-op when no pipeline
53
+ * repository is wired (tests/conformance). The loop still guards a pipeline deleted AFTER
54
+ * ingest at spawn time (a deviation + notification, never a throw inside the sweep).
55
+ */
56
+ private assertPipelinesExist;
43
57
  /**
44
58
  * Flip an initiative to `executing` (the committer step ran: the plan is
45
59
  * approved and the tracker mirror committed), stamping the repo-doc
@@ -50,6 +64,22 @@ export declare class InitiativeService {
50
64
  version: number;
51
65
  hash: string;
52
66
  } | null): Promise<Initiative | null>;
67
+ /**
68
+ * Apply a CAS-guarded transform to the block's initiative — the execution loop's write
69
+ * path. A content-identical transform short-circuits to no write (replay/idempotency);
70
+ * a lost CAS reloads and retries a bounded number of times. Returns the persisted entity,
71
+ * or null when the block has no initiative.
72
+ */
73
+ update(workspaceId: string, blockId: string, transform: (current: Initiative) => Initiative): Promise<Initiative | null>;
74
+ /** Pause an executing initiative (the sweep skips it; in-flight tasks finish naturally). */
75
+ pause(workspaceId: string, blockId: string): Promise<Initiative | null>;
76
+ /** Resume a paused initiative back to `executing` (the next sweep picks it up). */
77
+ resume(workspaceId: string, blockId: string): Promise<Initiative | null>;
78
+ /**
79
+ * Cancel an initiative: stop spawning further work. Terminal from the loop's view. In-flight
80
+ * spawned tasks are left to finish on their own (cascading their teardown is slice 4).
81
+ */
82
+ cancel(workspaceId: string, blockId: string): Promise<Initiative | null>;
53
83
  /** Append a fresh round of pending interview questions (parks the interview `awaiting`). */
54
84
  recordInterviewQuestions(workspaceId: string, blockId: string, questions: string[]): Promise<Initiative | null>;
55
85
  /** Record the human's answer to one pending question (no run resume; the controller does that). */
@@ -1 +1 @@
1
- {"version":3,"file":"InitiativeService.d.ts","sourceRoot":"","sources":["../../../src/modules/initiative/InitiativeService.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,eAAe,EACf,KAAK,EACL,qBAAqB,EACrB,uBAAuB,EACvB,WAAW,EACX,UAAU,EACV,oBAAoB,EACpB,mBAAmB,EACpB,MAAM,qBAAqB,CAAA;AAe5B,MAAM,WAAW,6BAA6B;IAC5C,mBAAmB,EAAE,mBAAmB,CAAA;IACxC,eAAe,EAAE,eAAe,CAAA;IAChC,oBAAoB,EAAE,oBAAoB,CAAA;IAC1C,MAAM,EAAE,uBAAuB,CAAA;IAC/B,KAAK,EAAE,KAAK,CAAA;IACZ,WAAW,EAAE,WAAW,CAAA;CACzB;AAKD;;;;;;GAMG;AACH,qBAAa,iBAAiB;IAChB,OAAO,CAAC,QAAQ,CAAC,IAAI;IAAjC,YAA6B,IAAI,EAAE,6BAA6B,EAAI;IAEpE;;;;;OAKG;IACG,MAAM,CACV,WAAW,EAAE,MAAM,EACnB,KAAK,EAAE,qBAAqB,GAC3B,OAAO,CAAC;QAAE,UAAU,EAAE,UAAU,CAAC;QAAC,KAAK,EAAE,KAAK,CAAA;KAAE,CAAC,CAmEnD;IAED,IAAI,CAAC,WAAW,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,EAAE,CAAC,CAE/C;IAEK,GAAG,CAAC,WAAW,EAAE,MAAM,EAAE,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAE9D;IAED,UAAU,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAE3E;IAED;;;;;;;;OAQG;IACG,UAAU,CACd,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,QAAQ,EAAE,OAAO,GAChB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAM5B;IAED;;;;;OAKG;IACG,aAAa,CACjB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,GAAG,EAAE;QAAE,OAAO,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,MAAM,CAAA;KAAE,GAAG,IAAI,GAC5C,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAS5B;IAQD,4FAA4F;IACtF,wBAAwB,CAC5B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,SAAS,EAAE,MAAM,EAAE,GAClB,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAI5B;IAED,mGAAmG;IAC7F,qBAAqB,CACzB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAI5B;IAED,qGAAqG;IAC/F,sBAAsB,CAC1B,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE;QAAE,IAAI,EAAE,MAAM,CAAC;QAAC,WAAW,EAAE,MAAM,EAAE,CAAC;QAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;KAAE,GACnE,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAE5B;IAED,uEAAuE;IACjE,cAAc,CAClB,WAAW,EAAE,MAAM,EACnB,OAAO,EAAE,MAAM,EACf,OAAO,EAAE,MAAM,GACd,OAAO,CAAC,UAAU,GAAG,IAAI,CAAC,CAE5B;IAED;;;;OAIG;YACW,MAAM;CAwBrB"}
1
+ {"version":3,"file":"InitiativeService.d.ts","sourceRoot":"","sources":["../../../src/modules/initiative/InitiativeService.ts"],"names":[],"mappings":"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"}
@@ -105,8 +105,31 @@ export class InitiativeService {
105
105
  async ingestPlan(workspaceId, blockId, rawDraft) {
106
106
  const draft = parseInitiativePlanDraft(rawDraft);
107
107
  validatePlanDraft(draft);
108
+ await this.assertPipelinesExist(workspaceId, draft);
108
109
  return this.mutate(workspaceId, blockId, (current) => applyPlanDraft(current, draft, this.deps.clock.now()));
109
110
  }
111
+ /**
112
+ * Fail a plan ingest whose policy names a pipeline that doesn't exist (the default, or a
113
+ * rule/item override) — a plan the loop could never execute. No-op when no pipeline
114
+ * repository is wired (tests/conformance). The loop still guards a pipeline deleted AFTER
115
+ * ingest at spawn time (a deviation + notification, never a throw inside the sweep).
116
+ */
117
+ async assertPipelinesExist(workspaceId, draft) {
118
+ const repo = this.deps.pipelineRepository;
119
+ if (!repo)
120
+ return;
121
+ const ids = new Set([draft.policy.defaultPipelineId]);
122
+ for (const rule of draft.policy.rules ?? [])
123
+ ids.add(rule.pipelineId);
124
+ for (const item of draft.items)
125
+ if (item.pipelineId)
126
+ ids.add(item.pipelineId);
127
+ for (const id of ids) {
128
+ if (!(await repo.get(workspaceId, id))) {
129
+ throw new ValidationError(`Plan references unknown pipeline '${id}'`);
130
+ }
131
+ }
132
+ }
110
133
  /**
111
134
  * Flip an initiative to `executing` (the committer step ran: the plan is
112
135
  * approved and the tracker mirror committed), stamping the repo-doc
@@ -122,6 +145,36 @@ export class InitiativeService {
122
145
  ...(doc ? { doc: { ...doc, committedAt: this.deps.clock.now() } } : {}),
123
146
  }));
124
147
  }
148
+ // ---- Execution loop (slice 3) -------------------------------------------
149
+ // The loop drives the entity through the same CAS `mutate` path. `update` is the generic
150
+ // transform seam the loop passes its (pure) item-lifecycle closures to; the lifecycle
151
+ // transitions below are the human-driven controls (pause / resume / cancel).
152
+ /**
153
+ * Apply a CAS-guarded transform to the block's initiative — the execution loop's write
154
+ * path. A content-identical transform short-circuits to no write (replay/idempotency);
155
+ * a lost CAS reloads and retries a bounded number of times. Returns the persisted entity,
156
+ * or null when the block has no initiative.
157
+ */
158
+ update(workspaceId, blockId, transform) {
159
+ return this.mutate(workspaceId, blockId, transform);
160
+ }
161
+ /** Pause an executing initiative (the sweep skips it; in-flight tasks finish naturally). */
162
+ pause(workspaceId, blockId) {
163
+ return this.mutate(workspaceId, blockId, (current) => current.status === 'executing' ? { ...current, status: 'paused' } : current);
164
+ }
165
+ /** Resume a paused initiative back to `executing` (the next sweep picks it up). */
166
+ resume(workspaceId, blockId) {
167
+ return this.mutate(workspaceId, blockId, (current) => current.status === 'paused' ? { ...current, status: 'executing' } : current);
168
+ }
169
+ /**
170
+ * Cancel an initiative: stop spawning further work. Terminal from the loop's view. In-flight
171
+ * spawned tasks are left to finish on their own (cascading their teardown is slice 4).
172
+ */
173
+ cancel(workspaceId, blockId) {
174
+ return this.mutate(workspaceId, blockId, (current) => current.status === 'done' || current.status === 'cancelled'
175
+ ? current
176
+ : { ...current, status: 'cancelled' });
177
+ }
125
178
  // ---- Interactive planning interview (slice 2) ---------------------------
126
179
  // Each write goes through the CAS `mutate` (single-writer, replay-safe) and emits the
127
180
  // live `initiative` event so an open planning window refreshes. The interviewer LLM +
@@ -1 +1 @@
1
- {"version":3,"file":"InitiativeService.js","sourceRoot":"","sources":["../../../src/modules/initiative/InitiativeService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InitiativeService.js","sourceRoot":"","sources":["../../../src/modules/initiative/InitiativeService.ts"],"names":[],"mappings":"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"}
@@ -1,4 +1,4 @@
1
- import type { Block, Initiative, InitiativePhase, InitiativePlanDraft } from '@cat-factory/kernel';
1
+ import type { Block, Initiative, InitiativeExecutionPolicy, InitiativeItem, InitiativePhase, InitiativePlanDraft } from '@cat-factory/kernel';
2
2
  /** Turn a title into a stable, filesystem/URL-safe slug (the tracker folder name). */
3
3
  export declare function initiativeSlug(title: string): string;
4
4
  /**
@@ -89,4 +89,61 @@ export declare function applyInterviewOutcome(initiative: Initiative, outcome: {
89
89
  export declare function interviewAtCap(initiative: Initiative): boolean;
90
90
  /** Fold the analyst's codebase-analysis prose onto the entity. */
91
91
  export declare function applyAnalysis(initiative: Initiative, summary: string): Initiative;
92
+ /** How many of the initiative's items currently hold a concurrency slot (a running/PR task). */
93
+ export declare function activeItemCount(initiative: Initiative): number;
94
+ /** Whether every item is settled (done/skipped) — the initiative's work is complete. */
95
+ export declare function allItemsSettled(initiative: Initiative): boolean;
96
+ /**
97
+ * A phase is HALTED when it holds a `blocked` item: the loop stops spawning NEW work in
98
+ * it until a human retries/skips the failure (the "halt the phase, notify" policy). Since
99
+ * `blocked` is non-terminal, {@link deriveCurrentPhase} also keeps a halted phase current,
100
+ * so the initiative never advances past it either.
101
+ */
102
+ export declare function phaseIsHalted(initiative: Initiative, phaseId: string): boolean;
103
+ /**
104
+ * The effective concurrency cap for a phase: the phase's own tighter cap (when set) clamped
105
+ * by the policy-wide cap. No policy ⇒ 1 (fail-safe to serial).
106
+ */
107
+ export declare function effectiveMaxConcurrent(initiative: Initiative, phase: InitiativePhase | null): number;
108
+ /**
109
+ * Whether all of an item's intra-initiative dependencies are settled (done/skipped). A
110
+ * dependency that no longer exists (a re-plan dropped it) counts as satisfied.
111
+ */
112
+ export declare function itemDependenciesMet(initiative: Initiative, item: InitiativeItem): boolean;
113
+ /**
114
+ * The items eligible to spawn RIGHT NOW: `pending`, in the derived current phase, that
115
+ * phase not halted by a blocked sibling, with every dependency met. Declared order is
116
+ * preserved. The caller applies the concurrency cap (this returns the full eligible set,
117
+ * not a cap-sliced one) so it can account for slots already taken by in-flight items.
118
+ */
119
+ export declare function eligibleItemsToSpawn(initiative: Initiative): InitiativeItem[];
120
+ /**
121
+ * Pick the pipeline a spawned item should run: an explicit `item.pipelineId` wins; else the
122
+ * first policy rule whose thresholds the estimate meets (OR across axes — the
123
+ * `shouldRunGatedStep` semantics: risk ≥ minRisk OR impact ≥ minImpact OR complexity ≥
124
+ * minComplexity; a rule with no thresholds never matches); else the policy default. An item
125
+ * with NO estimate follows `onMissingEstimate`: `default` ⇒ `defaultPipelineId`, `strongest`
126
+ * ⇒ the last (weakest-first-ordered) rule's pipeline, fail-safe to thoroughness.
127
+ */
128
+ export declare function selectInitiativePipeline(item: Pick<InitiativeItem, 'estimate' | 'pipelineId'>, policy: InitiativeExecutionPolicy): string;
129
+ /**
130
+ * Reconcile ONE item from its spawned block's current state. Only actively-spawned items
131
+ * (`in_progress`/`pr_open`) are touched — a settled/blocked/un-spawned item is left alone,
132
+ * which is what makes reconcile idempotent across durable-driver replays (the first pass
133
+ * already moved a finished item out of the active set). An active item whose block is GONE is
134
+ * an orphaned claim (a prior tick crashed between the CAS claim and the block insert, or the
135
+ * block was deleted out from under us): it is reverted to `pending` with its dead link dropped,
136
+ * so the next spawn re-materialises it. Leaving it `in_progress` would hold a concurrency slot
137
+ * forever and the phase/initiative could never complete.
138
+ */
139
+ export declare function reconcileItem(item: InitiativeItem, block: Block | undefined): InitiativeItem;
140
+ /** Claim a `pending` item for spawning: flip it to `in_progress` with the pre-generated block id.
141
+ * A no-op when the item is not `pending` (already claimed/settled), so a concurrent ticker that
142
+ * lost the CAS observes the winner's claim and abandons. */
143
+ export declare function applySpawnClaim(initiative: Initiative, itemId: string, spawnedBlockId: string): Initiative;
144
+ /** Revert a claim we own (matched by our block id) back to `pending` — used when the run failed
145
+ * to start (e.g. the per-service task limit was hit; leave the item for the next sweep). */
146
+ export declare function applyRevertClaim(initiative: Initiative, itemId: string, spawnedBlockId: string): Initiative;
147
+ /** Whether an item currently holds an active concurrency slot. Exported for the loop's math. */
148
+ export declare function itemIsActive(item: InitiativeItem): boolean;
92
149
  //# sourceMappingURL=initiative.logic.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"initiative.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/initiative/initiative.logic.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,KAAK,EACL,UAAU,EAEV,eAAe,EACf,mBAAmB,EAEpB,MAAM,qBAAqB,CAAA;AAW5B,sFAAsF;AACtF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,MAAM,CAOpD;AAED;;;;;;GAMG;AACH,wBAAgB,4BAA4B,CAAC,KAAK,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAY9F;AAED;;;;;;;GAOG;AACH,wBAAgB,iBAAiB,CAAC,KAAK,EAAE,mBAAmB,GAAG,IAAI,CAwClE;AAYD;;;;;;;;;;;;;GAaG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,mBAAmB,EAC1B,GAAG,EAAE,MAAM,GACV,UAAU,CAkFZ;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG,eAAe,GAAG,IAAI,CASjF;AAED,mFAAmF;AACnF,wBAAgB,kBAAkB,CAAC,UAAU,EAAE,UAAU,GAAG;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,CAM1F;AASD,8EAA8E;AAC9E,eAAO,MAAM,+BAA+B,IAAI,CAAA;AAChD,iGAAiG;AACjG,eAAO,MAAM,kCAAkC,IAAI,CAAA;AAInD,gGAAgG;AAChG,MAAM,MAAM,eAAe,GACvB;IAAE,IAAI,EAAE,WAAW,CAAC;IAAC,SAAS,EAAE,MAAM,EAAE,CAAA;CAAE,GAC1C;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,CAAA;AAE7E;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,MAAM,EAAE,OAAO,EACf,IAAI,EAAE;IAAE,QAAQ,EAAE,OAAO,CAAA;CAAE,GAC1B,eAAe,CAyBjB;AAOD;;;;GAIG;AACH,wBAAgB,uBAAuB,CACrC,UAAU,EAAE,UAAU,EACtB,SAAS,EAAE,MAAM,EAAE,EACnB,MAAM,EAAE,MAAM,MAAM,GACnB,UAAU,CAeZ;AAED,2FAA2F;AAC3F,wBAAgB,oBAAoB,CAClC,UAAU,EAAE,UAAU,EACtB,UAAU,EAAE,MAAM,EAClB,MAAM,EAAE,MAAM,GACb,UAAU,CAOZ;AAED;;;;;GAKG;AACH,wBAAgB,qBAAqB,CACnC,UAAU,EAAE,UAAU,EACtB,OAAO,EAAE;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,EAAE,CAAC;IAAC,QAAQ,EAAE,MAAM,EAAE,CAAA;CAAE,GACnE,UAAU,CAaZ;AAED,gGAAgG;AAChG,wBAAgB,cAAc,CAAC,UAAU,EAAE,UAAU,GAAG,OAAO,CAI9D;AAED,kEAAkE;AAClE,wBAAgB,aAAa,CAAC,UAAU,EAAE,UAAU,EAAE,OAAO,EAAE,MAAM,GAAG,UAAU,CAEjF"}
1
+ {"version":3,"file":"initiative.logic.d.ts","sourceRoot":"","sources":["../../../src/modules/initiative/initiative.logic.ts"],"names":[],"mappings":"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"}