@cat-factory/orchestration 0.150.0 → 0.151.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 (43) hide show
  1. package/dist/modules/brainstorm/BrainstormService.d.ts.map +1 -1
  2. package/dist/modules/brainstorm/BrainstormService.js +3 -2
  3. package/dist/modules/brainstorm/BrainstormService.js.map +1 -1
  4. package/dist/modules/execution/AgentContextBuilder.d.ts +1 -0
  5. package/dist/modules/execution/AgentContextBuilder.d.ts.map +1 -1
  6. package/dist/modules/execution/AgentContextBuilder.js +9 -1
  7. package/dist/modules/execution/AgentContextBuilder.js.map +1 -1
  8. package/dist/modules/execution/ExecutionService.d.ts +8 -6
  9. package/dist/modules/execution/ExecutionService.d.ts.map +1 -1
  10. package/dist/modules/execution/ExecutionService.js +23 -8
  11. package/dist/modules/execution/ExecutionService.js.map +1 -1
  12. package/dist/modules/execution/GateHelperDispatcher.d.ts.map +1 -1
  13. package/dist/modules/execution/GateHelperDispatcher.js +2 -2
  14. package/dist/modules/execution/GateHelperDispatcher.js.map +1 -1
  15. package/dist/modules/execution/HumanTestController.d.ts.map +1 -1
  16. package/dist/modules/execution/HumanTestController.js +2 -2
  17. package/dist/modules/execution/HumanTestController.js.map +1 -1
  18. package/dist/modules/execution/RalphController.d.ts.map +1 -1
  19. package/dist/modules/execution/RalphController.js +2 -2
  20. package/dist/modules/execution/RalphController.js.map +1 -1
  21. package/dist/modules/execution/RunDispatcher.d.ts.map +1 -1
  22. package/dist/modules/execution/RunDispatcher.js +16 -3
  23. package/dist/modules/execution/RunDispatcher.js.map +1 -1
  24. package/dist/modules/execution/TesterController.d.ts.map +1 -1
  25. package/dist/modules/execution/TesterController.js +3 -4
  26. package/dist/modules/execution/TesterController.js.map +1 -1
  27. package/dist/modules/execution/VisualConfirmationController.d.ts.map +1 -1
  28. package/dist/modules/execution/VisualConfirmationController.js +2 -2
  29. package/dist/modules/execution/VisualConfirmationController.js.map +1 -1
  30. package/dist/modules/execution/gate-window-controllers.d.ts +4 -0
  31. package/dist/modules/execution/gate-window-controllers.d.ts.map +1 -1
  32. package/dist/modules/execution/step-fold.logic.d.ts +13 -1
  33. package/dist/modules/execution/step-fold.logic.d.ts.map +1 -1
  34. package/dist/modules/execution/step-fold.logic.js +23 -2
  35. package/dist/modules/execution/step-fold.logic.js.map +1 -1
  36. package/dist/modules/requirements/RequirementReviewService.d.ts.map +1 -1
  37. package/dist/modules/requirements/RequirementReviewService.js +85 -73
  38. package/dist/modules/requirements/RequirementReviewService.js.map +1 -1
  39. package/dist/modules/review/IterativeReviewService.d.ts +43 -3
  40. package/dist/modules/review/IterativeReviewService.d.ts.map +1 -1
  41. package/dist/modules/review/IterativeReviewService.js +107 -34
  42. package/dist/modules/review/IterativeReviewService.js.map +1 -1
  43. package/package.json +11 -11
@@ -1 +1 @@
1
- {"version":3,"file":"RequirementReviewService.d.ts","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RequirementReviewService.d.ts","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewService.ts"],"names":[],"mappings":"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"}
@@ -115,42 +115,42 @@ export class RequirementReviewService extends IterativeReviewService {
115
115
  */
116
116
  async prepareRecommendations(workspaceId, reviewId, items, opts = {}) {
117
117
  const noteByItem = new Map(items.map((i) => [i.itemId, i.note?.trim() || null]));
118
- const review = assertFound(await this.repository.get(workspaceId, reviewId), this.entityName, reviewId);
119
- const now = this.deps.clock.now();
120
- const recommendations = [...review.recommendations];
121
- let changed = false;
122
- for (const item of review.items) {
123
- if (!noteByItem.has(item.id) || item.status === 'dismissed')
124
- continue;
125
- if (item.status !== 'recommend_requested') {
126
- item.status = 'recommend_requested';
127
- item.updatedAt = now;
118
+ // Rev-guarded: a second "recommend something" click, or a human answering a different
119
+ // finding in the same breath, would otherwise write its whole stale `items` +
120
+ // `recommendations` arrays over this one (race-audit 2.5). The idempotence check rides
121
+ // inside the mutation so it is re-evaluated against the winning snapshot on a retry.
122
+ return this.mutateReview(workspaceId, reviewId, (review, now) => {
123
+ const recommendations = review.recommendations;
124
+ let changed = false;
125
+ for (const item of review.items) {
126
+ if (!noteByItem.has(item.id) || item.status === 'dismissed')
127
+ continue;
128
+ if (item.status !== 'recommend_requested') {
129
+ item.status = 'recommend_requested';
130
+ item.updatedAt = now;
131
+ changed = true;
132
+ }
133
+ // Don't queue a second placeholder for a finding the Writer is already working on. Keyed
134
+ // on the finding id so two findings that share an identical title+detail still each get
135
+ // their own placeholder.
136
+ const alreadyPending = recommendations.some((r) => r.status === 'pending' && r.sourceFinding.itemId === item.id);
137
+ if (alreadyPending)
138
+ continue;
139
+ recommendations.push({
140
+ id: this.deps.idGenerator.next('rec'),
141
+ sourceFinding: { title: item.title, detail: item.detail, itemId: item.id },
142
+ recommendedText: '',
143
+ ...(opts.auto ? { auto: true } : {}),
144
+ status: 'pending',
145
+ note: noteByItem.get(item.id) ?? null,
146
+ groundedInFragment: null,
147
+ createdAt: now,
148
+ updatedAt: now,
149
+ });
128
150
  changed = true;
129
151
  }
130
- // Don't queue a second placeholder for a finding the Writer is already working on. Keyed
131
- // on the finding id so two findings that share an identical title+detail still each get
132
- // their own placeholder.
133
- const alreadyPending = recommendations.some((r) => r.status === 'pending' && r.sourceFinding.itemId === item.id);
134
- if (alreadyPending)
135
- continue;
136
- recommendations.push({
137
- id: this.deps.idGenerator.next('rec'),
138
- sourceFinding: { title: item.title, detail: item.detail, itemId: item.id },
139
- recommendedText: '',
140
- ...(opts.auto ? { auto: true } : {}),
141
- status: 'pending',
142
- note: noteByItem.get(item.id) ?? null,
143
- groundedInFragment: null,
144
- createdAt: now,
145
- updatedAt: now,
146
- });
147
- changed = true;
148
- }
149
- if (!changed)
150
- return review;
151
- const updated = { ...review, recommendations, updatedAt: now };
152
- await this.repository.upsert(workspaceId, updated);
153
- return updated;
152
+ return changed;
153
+ });
154
154
  }
155
155
  /**
156
156
  * Fill every `pending` recommendation on a review by running the Requirement Writer over
@@ -240,18 +240,25 @@ export class RequirementReviewService extends IterativeReviewService {
240
240
  const suggestions = liveFindings.length
241
241
  ? await this.runWriterForChunk(workspaceId, { model, ref }, context, liveFindings, note, grounding)
242
242
  : new Map();
243
- // Re-read fresh before applying: the human may have acted during the Writer call.
244
- const review = assertFound(await this.repository.get(workspaceId, reviewId), this.entityName, reviewId);
245
- const now = this.deps.clock.now();
246
- for (const target of targets) {
247
- const outcome = this.applyRecommendationToTarget(target, review, suggestions, fragmentById, now);
248
- if (outcome.produced)
249
- produced += 1;
250
- if (outcome.readyForReview)
251
- readyForReview += 1;
252
- }
253
- review.updatedAt = now;
254
- await this.repository.upsert(workspaceId, review);
243
+ // Re-read fresh before applying the human may have acted during the Writer call — and
244
+ // write under CAS, so an answer that lands between that read and this write survives
245
+ // instead of being overwritten by this chunk's whole-row snapshot (race-audit 2.5).
246
+ // The tallies are recomputed per attempt so a reload can't double-count them.
247
+ let chunkProduced = 0;
248
+ let chunkReadyForReview = 0;
249
+ const review = await this.mutateReview(workspaceId, reviewId, (fresh, now) => {
250
+ chunkProduced = 0;
251
+ chunkReadyForReview = 0;
252
+ for (const target of targets) {
253
+ const outcome = this.applyRecommendationToTarget(target, fresh, suggestions, fragmentById, now);
254
+ if (outcome.produced)
255
+ chunkProduced += 1;
256
+ if (outcome.readyForReview)
257
+ chunkReadyForReview += 1;
258
+ }
259
+ });
260
+ produced += chunkProduced;
261
+ readyForReview += chunkReadyForReview;
255
262
  await opts.onProgress?.(review);
256
263
  }
257
264
  }
@@ -309,24 +316,29 @@ export class RequirementReviewService extends IterativeReviewService {
309
316
  * hand instead of a wedged "generating…" state. Best-effort: emits progress after the cleanup.
310
317
  */
311
318
  async dropPendingRecommendations(workspaceId, reviewId, onProgress) {
312
- const review = await this.repository.get(workspaceId, reviewId);
313
- if (!review)
314
- return;
315
- const pending = review.recommendations.filter((r) => r.status === 'pending');
316
- if (pending.length === 0)
317
- return;
318
- const now = this.deps.clock.now();
319
- review.recommendations = review.recommendations.filter((r) => r.status !== 'pending');
320
- for (const placeholder of pending) {
321
- const item = findSourceItem(review.items, placeholder.sourceFinding);
322
- if (item && item.status === 'recommend_requested') {
323
- item.status = 'open';
324
- item.updatedAt = now;
319
+ // `IfPresent`, because this is the DEGRADATION path: it runs when the Writer can't be
320
+ // resolved, and it must not itself throw. A review that vanished (a fresh review run replaced
321
+ // it) leaves nothing to clean up — and the absence is re-checked on every retry, so it can't
322
+ // surface as a `NotFoundError` from a window between a pre-check and the load either.
323
+ // Rev-guarded, and the pending set is re-derived per attempt: a human accepting one
324
+ // recommendation while this cleanup runs must not have their answer dropped.
325
+ let dropped = false;
326
+ const review = await this.mutateReviewIfPresent(workspaceId, reviewId, (fresh, now) => {
327
+ const pending = fresh.recommendations.filter((r) => r.status === 'pending');
328
+ dropped = pending.length > 0;
329
+ if (!dropped)
330
+ return false;
331
+ fresh.recommendations = fresh.recommendations.filter((r) => r.status !== 'pending');
332
+ for (const placeholder of pending) {
333
+ const item = findSourceItem(fresh.items, placeholder.sourceFinding);
334
+ if (item && item.status === 'recommend_requested') {
335
+ item.status = 'open';
336
+ item.updatedAt = now;
337
+ }
325
338
  }
326
- }
327
- review.updatedAt = now;
328
- await this.repository.upsert(workspaceId, review);
329
- await onProgress?.(review);
339
+ });
340
+ if (dropped && review)
341
+ await onProgress?.(review);
330
342
  }
331
343
  /**
332
344
  * Flip a settled recommendation back to `pending` with a fresh "do it differently" note and
@@ -425,16 +437,16 @@ export class RequirementReviewService extends IterativeReviewService {
425
437
  }
426
438
  }
427
439
  async mutateRecommendation(workspaceId, reviewId, recId, mutate) {
428
- const review = assertFound(await this.repository.get(workspaceId, reviewId), this.entityName, reviewId);
429
- const rec = review.recommendations.find((r) => r.id === recId);
430
- if (!rec)
431
- throw new ValidationError(`Recommendation '${recId}' not found`);
432
- const now = this.deps.clock.now();
433
- mutate(rec, review, now);
434
- rec.updatedAt = now;
435
- review.updatedAt = now;
436
- await this.repository.upsert(workspaceId, review);
437
- return review;
440
+ return this.mutateReview(workspaceId, reviewId, (review, now) => {
441
+ // Re-resolved per attempt: the Writer's fill pass drops a placeholder it couldn't answer,
442
+ // so a recommendation that vanished under a retry must fail rather than be re-applied to
443
+ // a stale copy of the array.
444
+ const rec = review.recommendations.find((r) => r.id === recId);
445
+ if (!rec)
446
+ throw new ValidationError(`Recommendation '${recId}' not found`);
447
+ mutate(rec, review, now);
448
+ rec.updatedAt = now;
449
+ });
438
450
  }
439
451
  /**
440
452
  * Read the in-repo `spec/`/`tech-spec/` overviews (via RepoFiles when wired) the Writer
@@ -1 +1 @@
1
- {"version":3,"file":"RequirementReviewService.js","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"RequirementReviewService.js","sourceRoot":"","sources":["../../../src/modules/requirements/RequirementReviewService.ts"],"names":[],"mappings":"AAYA,OAAO,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,qBAAqB,CAAA;AAClE,OAAO,EAAE,YAAY,EAAE,MAAM,IAAI,CAAA;AACjC,OAAO,EACL,uBAAuB,EACvB,sBAAsB,EACtB,oBAAoB,EACpB,oBAAoB,EACpB,oBAAoB,GACrB,MAAM,qBAAqB,CAAA;AAC5B,OAAO,EAEL,sBAAsB,GAGvB,MAAM,qCAAqC,CAAA;AAC5C,OAAO,EAKL,yBAAyB,EACzB,iBAAiB,EACjB,iBAAiB,EACjB,0BAA0B,EAC1B,0BAA0B,EAC1B,WAAW,EACX,cAAc,GACf,MAAM,yBAAyB,CAAA;AAEhC;;;;GAIG;AACH,MAAM,yBAAyB,GAAG,CAAC,CAAA;AAkCnC;;;;;;GAMG;AACH,MAAM,OAAO,wBAAyB,SAAQ,sBAG7C;IACoB,UAAU,CAAqC;IACjD,kBAAkB,CAAqB;IACvC,cAAc,CAAiB;IAC/B,qBAAqB,CAAwB;IAC7C,qBAAqB,CAGL;IAChB,SAAS,CAAwE;IACjF,0BAA0B,CAGX;IAEhC,YAAY,IAA0C;QACpD,KAAK,CAAC,IAAI,CAAC,CAAA;QACX,IAAI,CAAC,UAAU,GAAG,IAAI,CAAC,2BAA2B,CAAA;QAClD,IAAI,CAAC,kBAAkB,GAAG,IAAI,CAAC,kBAAkB,CAAA;QACjD,IAAI,CAAC,cAAc,GAAG,IAAI,CAAC,cAAc,CAAA;QACzC,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAA;QACvD,IAAI,CAAC,qBAAqB,GAAG,IAAI,CAAC,qBAAqB,CAAA;QACvD,IAAI,CAAC,SAAS,GAAG,IAAI,CAAC,SAAS,CAAA;QAC/B,IAAI,CAAC,0BAA0B,GAAG,IAAI,CAAC,0BAA0B,CAAA;IACnE,CAAC;IAEkB,UAAU,GAAG,oBAAoB,CAAA;IACjC,aAAa,GAAG,uBAAuB,CAAA;IACvC,eAAe,GAAG,qBAAqB,CAAA;IACvC,eAAe,GAAG,qBAAqB,CAAA;IACvC,kBAAkB,GAAG,oBAAoB,CAAA;IACzC,kBAAkB,GAAG,oBAAoB,CAAA;IACzC,cAAc,GAAG,KAAK,CAAA;IACtB,YAAY,GAAG,KAAK,CAAA;IACpB,WAAW,GAAG,sBAAsB,CAAA;IACpC,iBAAiB,GAClC,+EAA+E;QAC/E,0EAA0E,CAAA;IACzD,gBAAgB,GAAG,oBAA6B,CAAA;IAChD,mBAAmB,GAAG,cAAc,CAAA;IAE7C,iBAAiB,CAAC,KAAY;QACtC,OAAO,wBAAwB,KAAK,CAAC,KAAK,EAAE,CAAA;IAC9C,CAAC;IAES,iBAAiB,CAAC,GAAwB;QAClD,OAAO,iBAAiB,CAAC,GAAG,CAAC,CAAA;IAC/B,CAAC;IAES,iBAAiB,CAAC,GAAwB,EAAE,KAA8B;QAClF,OAAO,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAA;IACtC,CAAC;IAES,oBAAoB,CAAC,GAAwB,EAAE,GAAW;QAClE,GAAG,CAAC,eAAe,GAAG,GAAG,CAAA;IAC3B,CAAC;IAES,aAAa,CAAC,GAAwB,EAAE,QAAgB;QAChE,GAAG,CAAC,cAAc,GAAG,QAAQ,CAAA;IAC/B,CAAC;IAES,OAAO,CAAC,MAAyB;QACzC,OAAO,MAAM,CAAC,wBAAwB,CAAA;IACxC,CAAC;IAES,OAAO,CAAC,MAAyB,EAAE,GAAW;QACtD,OAAO,EAAE,GAAG,MAAM,EAAE,wBAAwB,EAAE,GAAG,EAAE,CAAA;IACrD,CAAC;IAES,SAAS,CAAC,MAAoB;QACtC,OAAO,EAAE,GAAG,MAAM,EAAE,wBAAwB,EAAE,IAAI,EAAE,eAAe,EAAE,EAAE,EAAE,CAAA;IAC3E,CAAC;IAED,uFAAuF;IAEvF,oEAAoE;IACpE,IAAI,aAAa;QACf,OAAO,IAAI,CAAC,OAAO,CAAA;IACrB,CAAC;IAED;;;;;;;;;;;;;;OAcG;IACH,KAAK,CAAC,aAAa,CACjB,WAAmB,EACnB,QAAgB,EAChB,IAAI,GAAkE,EAAE;QAExE,MAAM,MAAM,GAAG,WAAW,CACxB,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,EAChD,IAAI,CAAC,UAAU,EACf,QAAQ,CACT,CAAA;QACD,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK;aACvB,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,cAAc,KAAK,IAAI,IAAI,CAAC,CAAC,MAAM,KAAK,MAAM,CAAC;aAC/D,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAA;QACjC,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,MAAM,CAAA;QACrC,MAAM,IAAI,CAAC,sBAAsB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;QAC/E,MAAM,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,CAAA;QAClE,OAAO,WAAW,CAAC,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,QAAQ,CAAC,CAAA;IACjG,CAAC;IAED;;;;;;;;;;OAUG;IACH,KAAK,CAAC,sBAAsB,CAC1B,WAAmB,EACnB,QAAgB,EAChB,KAAkC,EAClC,IAAI,GAAuB,EAAE;QAE7B,MAAM,UAAU,GAAG,IAAI,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,MAAM,EAAE,CAAC,CAAC,IAAI,EAAE,IAAI,EAAE,IAAI,IAAI,CAAC,CAAC,CAAC,CAAA;QAChF,sFAAsF;QACtF,8EAA8E;QAC9E,uFAAuF;QACvF,qFAAqF;QACrF,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC9D,MAAM,eAAe,GAAG,MAAM,CAAC,eAAe,CAAA;YAC9C,IAAI,OAAO,GAAG,KAAK,CAAA;YACnB,KAAK,MAAM,IAAI,IAAI,MAAM,CAAC,KAAK,EAAE,CAAC;gBAChC,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW;oBAAE,SAAQ;gBACrE,IAAI,IAAI,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;oBAC1C,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAA;oBACnC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;oBACpB,OAAO,GAAG,IAAI,CAAA;gBAChB,CAAC;gBACD,yFAAyF;gBACzF,wFAAwF;gBACxF,yBAAyB;gBACzB,MAAM,cAAc,GAAG,eAAe,CAAC,IAAI,CACzC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,IAAI,CAAC,CAAC,aAAa,CAAC,MAAM,KAAK,IAAI,CAAC,EAAE,CACpE,CAAA;gBACD,IAAI,cAAc;oBAAE,SAAQ;gBAC5B,eAAe,CAAC,IAAI,CAAC;oBACnB,EAAE,EAAE,IAAI,CAAC,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC;oBACrC,aAAa,EAAE,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,MAAM,EAAE,IAAI,CAAC,MAAM,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,EAAE;oBAC1E,eAAe,EAAE,EAAE;oBACnB,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;oBACpC,MAAM,EAAE,SAAS;oBACjB,IAAI,EAAE,UAAU,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,IAAI;oBACrC,kBAAkB,EAAE,IAAI;oBACxB,SAAS,EAAE,GAAG;oBACd,SAAS,EAAE,GAAG;iBACf,CAAC,CAAA;gBACF,OAAO,GAAG,IAAI,CAAA;YAChB,CAAC;YACD,OAAO,OAAO,CAAA;QAChB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;;;;;;;OAaG;IACH,KAAK,CAAC,0BAA0B,CAC9B,WAAmB,EACnB,QAAgB,EAChB,IAAI,GAAkE,EAAE;QAExE,MAAM,OAAO,GAAG,WAAW,CACzB,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,EAChD,IAAI,CAAC,UAAU,EACf,QAAQ,CACT,CAAA;QACD,MAAM,OAAO,GAAG,OAAO,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;QAC7E,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;QAEhD,MAAM,KAAK,GAAG,WAAW,CACvB,MAAM,IAAI,CAAC,IAAI,CAAC,eAAe,CAAC,GAAG,CAAC,WAAW,EAAE,OAAO,CAAC,OAAO,CAAC,EACjE,OAAO,EACP,OAAO,CAAC,OAAO,CAChB,CAAA;QACD,IAAI,KAA2C,CAAA;QAC/C,IAAI,GAAa,CAAA;QACjB,IAAI,CAAC;YACH,MAAM,QAAQ,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;YAC5D,GAAG,GAAG,QAAQ,CAAC,GAAG,CAAA;YAClB,KAAK,GAAG,QAAQ,CAAC,aAAa,CAAC,OAAO,CAAC,GAAG,CAAC,CAAA;QAC7C,CAAC;QAAC,MAAM,CAAC;YACP,4FAA4F;YAC5F,qFAAqF;YACrF,wFAAwF;YACxF,6FAA6F;YAC7F,0FAA0F;YAC1F,wFAAwF;YACxF,MAAM,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,QAAQ,EAAE,IAAI,CAAC,UAAU,CAAC,CAAA;YAC7E,OAAO,EAAE,QAAQ,EAAE,CAAC,EAAE,CAAA;QACxB,CAAC;QACD,MAAM,OAAO,GAAG,MAAM,IAAI,CAAC,aAAa,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QAC5D,MAAM,SAAS,GAAG,CAAC,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,IAAI,EAAE,CAAA;QACnF,MAAM,YAAY,GAAG,IAAI,GAAG,CAAC,SAAS,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAA;QAC7D,0FAA0F;QAC1F,2FAA2F;QAC3F,MAAM,kBAAkB,GAAG,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,EAAE,KAAK,CAAC,CAAA;QAC5E,MAAM,gBAAgB,GAAG,MAAM,IAAI,CAAC,gBAAgB,CAClD,WAAW,EACX,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAC1C,CAAA;QACD,+FAA+F;QAC/F,MAAM,SAAS,GAA4B;YACzC,SAAS;YACT,YAAY,EAAE,kBAAkB;YAChC,UAAU,EAAE,gBAAgB;SAC7B,CAAA;QAED,yFAAyF;QACzF,sFAAsF;QACtF,mGAAmG;QACnG,MAAM,MAAM,GAAG,IAAI,GAAG,EAAuC,CAAA;QAC7D,KAAK,MAAM,EAAE,IAAI,OAAO,EAAE,CAAC;YACzB,MAAM,GAAG,GAAG,EAAE,CAAC,IAAI,IAAI,EAAE,CAAA;YACzB,MAAM,GAAG,GAAG,MAAM,CAAC,GAAG,CAAC,GAAG,CAAC,CAAA;YAC3B,IAAI,GAAG;gBAAE,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;;gBAChB,MAAM,CAAC,GAAG,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAA;QAC5B,CAAC;QAED,IAAI,QAAQ,GAAG,CAAC,CAAA;QAChB,0FAA0F;QAC1F,yFAAyF;QACzF,2FAA2F;QAC3F,0FAA0F;QAC1F,IAAI,cAAc,GAAG,CAAC,CAAA;QACtB,KAAK,MAAM,KAAK,IAAI,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC;YACpC,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,IAAI,yBAAyB,EAAE,CAAC;gBACjE,MAAM,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,GAAG,yBAAyB,CAAC,CAAA;gBAC3D,2FAA2F;gBAC3F,4FAA4F;gBAC5F,uFAAuF;gBACvF,MAAM,MAAM,GAAG,WAAW,CACxB,MAAM,IAAI,CAAC,UAAU,CAAC,GAAG,CAAC,WAAW,EAAE,QAAQ,CAAC,EAChD,IAAI,CAAC,UAAU,EACf,QAAQ,CACT,CAAA;gBACD,MAAM,OAAO,GAAG,KAAK;qBAClB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,EAAE,MAAM,KAAK,SAAS,CAAC;qBACxF,GAAG,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,EAAE,CAAC,CAAC,CAAA;gBACjF,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC;oBAAE,SAAQ,CAAC,+CAA+C;gBAClF,MAAM,YAAY,GAAG,OAAO;qBACzB,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;qBACrB,MAAM,CAAC,CAAC,CAAC,EAA8B,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAA;gBACjD,8DAA8D;gBAC9D,MAAM,IAAI,GAAG,KAAK,CAAC,CAAC,CAAC,EAAE,IAAI,IAAI,SAAS,CAAA;gBACxC,MAAM,WAAW,GAAG,YAAY,CAAC,MAAM;oBACrC,CAAC,CAAC,MAAM,IAAI,CAAC,iBAAiB,CAC1B,WAAW,EACX,EAAE,KAAK,EAAE,GAAG,EAAE,EACd,OAAO,EACP,YAAY,EACZ,IAAI,EACJ,SAAS,CACV;oBACH,CAAC,CAAC,IAAI,GAAG,EAAmE,CAAA;gBAC9E,wFAAwF;gBACxF,qFAAqF;gBACrF,oFAAoF;gBACpF,8EAA8E;gBAC9E,IAAI,aAAa,GAAG,CAAC,CAAA;gBACrB,IAAI,mBAAmB,GAAG,CAAC,CAAA;gBAC3B,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;oBAC3E,aAAa,GAAG,CAAC,CAAA;oBACjB,mBAAmB,GAAG,CAAC,CAAA;oBACvB,KAAK,MAAM,MAAM,IAAI,OAAO,EAAE,CAAC;wBAC7B,MAAM,OAAO,GAAG,IAAI,CAAC,2BAA2B,CAC9C,MAAM,EACN,KAAK,EACL,WAAW,EACX,YAAY,EACZ,GAAG,CACJ,CAAA;wBACD,IAAI,OAAO,CAAC,QAAQ;4BAAE,aAAa,IAAI,CAAC,CAAA;wBACxC,IAAI,OAAO,CAAC,cAAc;4BAAE,mBAAmB,IAAI,CAAC,CAAA;oBACtD,CAAC;gBACH,CAAC,CAAC,CAAA;gBACF,QAAQ,IAAI,aAAa,CAAA;gBACzB,cAAc,IAAI,mBAAmB,CAAA;gBACrC,MAAM,IAAI,CAAC,UAAU,EAAE,CAAC,MAAM,CAAC,CAAA;YACjC,CAAC;QACH,CAAC;QACD,IAAI,cAAc,GAAG,CAAC;YACpB,MAAM,IAAI,CAAC,0BAA0B,CAAC,WAAW,EAAE,KAAK,EAAE,cAAc,CAAC,CAAA;QAC3E,OAAO,EAAE,QAAQ,EAAE,CAAA;IACrB,CAAC;IAED;;;;;OAKG;IACK,2BAA2B,CACjC,MAAqF,EACrF,MAAyB,EACzB,WAAiF,EACjF,YAA4C,EAC5C,GAAW;QAEX,MAAM,EAAE,EAAE,EAAE,OAAO,EAAE,GAAG,MAAM,CAAA;QAC9B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;QAC9D,IAAI,CAAC,GAAG,IAAI,GAAG,CAAC,MAAM,KAAK,SAAS;YAAE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAA;QACvF,MAAM,UAAU,GAAG,OAAO,CAAC,CAAC,CAAC,WAAW,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QACpE,IAAI,CAAC,UAAU,EAAE,CAAC;YAChB,uFAAuF;YACvF,6DAA6D;YAC7D,MAAM,CAAC,eAAe,GAAG,MAAM,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,EAAE,CAAC,CAAA;YAC7E,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,CAAA;YAC3D,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;gBAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;gBACpB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;YACtB,CAAC;YACD,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,cAAc,EAAE,KAAK,EAAE,CAAA;QACnD,CAAC;QACD,MAAM,QAAQ,GAAG,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,GAAG,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;QAChG,GAAG,CAAC,eAAe,GAAG,UAAU,CAAC,cAAc,CAAA;QAC/C,GAAG,CAAC,kBAAkB,GAAG,QAAQ,CAAC,CAAC,CAAC,EAAE,EAAE,EAAE,QAAQ,CAAC,EAAE,EAAE,KAAK,EAAE,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC,CAAC,IAAI,CAAA;QACrF,GAAG,CAAC,SAAS,GAAG,GAAG,CAAA;QACnB,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,GAAG,CAAC,MAAM,GAAG,OAAO,CAAA;YACpB,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,IAAI,EAAE,CAAA;QACjD,CAAC;QACD,2FAA2F;QAC3F,oFAAoF;QACpF,uEAAuE;QACvE,GAAG,CAAC,MAAM,GAAG,UAAU,CAAA;QACvB,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,EAAE,CAAC,aAAa,CAAC,CAAA;QAC3D,IAAI,IAAI,EAAE,CAAC;YACT,IAAI,CAAC,KAAK,GAAG,UAAU,CAAC,cAAc,CAAA;YACtC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;YACxB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;QACtB,CAAC;QACD,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,cAAc,EAAE,KAAK,EAAE,CAAA;IAClD,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,0BAA0B,CACtC,WAAmB,EACnB,QAAgB,EAChB,UAAyD;QAEzD,sFAAsF;QACtF,8FAA8F;QAC9F,6FAA6F;QAC7F,sFAAsF;QACtF,oFAAoF;QACpF,6EAA6E;QAC7E,IAAI,OAAO,GAAG,KAAK,CAAA;QACnB,MAAM,MAAM,GAAG,MAAM,IAAI,CAAC,qBAAqB,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;YACpF,MAAM,OAAO,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;YAC3E,OAAO,GAAG,OAAO,CAAC,MAAM,GAAG,CAAC,CAAA;YAC5B,IAAI,CAAC,OAAO;gBAAE,OAAO,KAAK,CAAA;YAC1B,KAAK,CAAC,eAAe,GAAG,KAAK,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAA;YACnF,KAAK,MAAM,WAAW,IAAI,OAAO,EAAE,CAAC;gBAClC,MAAM,IAAI,GAAG,cAAc,CAAC,KAAK,CAAC,KAAK,EAAE,WAAW,CAAC,aAAa,CAAC,CAAA;gBACnE,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;oBAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;oBACpB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;gBACtB,CAAC;YACH,CAAC;QACH,CAAC,CAAC,CAAA;QACF,IAAI,OAAO,IAAI,MAAM;YAAE,MAAM,UAAU,EAAE,CAAC,MAAM,CAAC,CAAA;IACnD,CAAC;IAED;;;;;;OAMG;IACH,KAAK,CAAC,yBAAyB,CAC7B,WAAmB,EACnB,QAAgB,EAChB,KAAa,EACb,IAAY;QAEZ,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAClF,GAAG,CAAC,MAAM,GAAG,SAAS,CAAA;YACtB,GAAG,CAAC,eAAe,GAAG,EAAE,CAAA;YACxB,GAAG,CAAC,kBAAkB,GAAG,IAAI,CAAA;YAC7B,GAAG,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,EAAE,IAAI,IAAI,CAAA;YAC9B,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;YAC5D,IAAI,CAAC,IAAI,EAAE,CAAC;gBACV,MAAM,IAAI,eAAe,CAAC,0DAA0D,CAAC,CAAA;YACvF,CAAC;YACD,IAAI,IAAI,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;gBAC1C,IAAI,CAAC,MAAM,GAAG,qBAAqB,CAAA;gBACnC,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;YACtB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CACxB,WAAmB,EACnB,QAAgB,EAChB,KAAa;QAEb,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAClF,GAAG,CAAC,MAAM,GAAG,UAAU,CAAA;YACvB,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;YAC5D,IAAI,IAAI,EAAE,CAAC;gBACT,IAAI,CAAC,KAAK,GAAG,GAAG,CAAC,eAAe,CAAA;gBAChC,IAAI,CAAC,MAAM,GAAG,UAAU,CAAA;gBACxB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;YACtB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACH,KAAK,CAAC,oBAAoB,CACxB,WAAmB,EACnB,QAAgB,EAChB,KAAa;QAEb,OAAO,IAAI,CAAC,oBAAoB,CAAC,WAAW,EAAE,QAAQ,EAAE,KAAK,EAAE,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,EAAE,EAAE;YAClF,GAAG,CAAC,MAAM,GAAG,UAAU,CAAA;YACvB,MAAM,IAAI,GAAG,cAAc,CAAC,MAAM,CAAC,KAAK,EAAE,GAAG,CAAC,aAAa,CAAC,CAAA;YAC5D,IAAI,IAAI,IAAI,IAAI,CAAC,MAAM,KAAK,qBAAqB,EAAE,CAAC;gBAClD,IAAI,CAAC,MAAM,GAAG,MAAM,CAAA;gBACpB,IAAI,CAAC,SAAS,GAAG,GAAG,CAAA;YACtB,CAAC;QACH,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;;;;OAOG;IACK,KAAK,CAAC,iBAAiB,CAC7B,WAAmB,EACnB,QAAwE,EACxE,OAA4B,EAC5B,QAAiC,EACjC,IAAwB,EACxB,SAAkC;QAElC,MAAM,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,QAAQ,CAAA;QAC/B,IAAI,CAAC;YACH,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC;gBAChC,KAAK;gBACL,MAAM,EAAE,oBAAoB;gBAC5B,MAAM,EAAE,yBAAyB,CAAC,OAAO,EAAE,QAAQ,EAAE,SAAS,EAAE,IAAI,CAAC;gBACrE,WAAW,EAAE,GAAG;gBAChB,0FAA0F;gBAC1F,6FAA6F;gBAC7F,4FAA4F;gBAC5F,eAAe,EAAE,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,MAAM,EAAE,yBAAyB,CAAC;gBAC5E,gFAAgF;gBAChF,iFAAiF;gBACjF,GAAG,CAAC,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC;oBACtC,CAAC,CAAC,EAAE,KAAK,EAAE,sBAAsB,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE;oBACjD,CAAC,CAAC,EAAE,CAAC;gBACP,eAAe,EAAE,uBAAuB,CAAC,EAAE,SAAS,EAAE,qBAAqB,EAAE,WAAW,EAAE,CAAC;aAC5F,CAAC,CAAA;YACF,MAAM,MAAM,GAAG,WAAW,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;YACvC,MAAM,IAAI,GAAG,QAAQ,CAAC,MAAM,KAAK,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,CAAA;YAC5D,IAAI,IAAI,EAAE,CAAC;gBACT,yFAAyF;gBACzF,uFAAuF;gBACvF,MAAM,MAAM,GAAG,0BAA0B,CAAC,MAAM,EAAE,IAAI,CAAC,EAAE,CAAC,CAAA;gBAC1D,OAAO,MAAM,CAAC,CAAC,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,IAAI,GAAG,EAAE,CAAA;YAC1D,CAAC;YACD,OAAO,0BAA0B,CAAC,MAAM,EAAE,QAAQ,CAAC,CAAA;QACrD,CAAC;QAAC,MAAM,CAAC;YACP,gGAAgG;YAChG,OAAO,IAAI,GAAG,EAAE,CAAA;QAClB,CAAC;IACH,CAAC;IAEO,KAAK,CAAC,oBAAoB,CAChC,WAAmB,EACnB,QAAgB,EAChB,KAAa,EACb,MAAwF;QAExF,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,QAAQ,EAAE,CAAC,MAAM,EAAE,GAAG,EAAE,EAAE;YAC9D,0FAA0F;YAC1F,yFAAyF;YACzF,6BAA6B;YAC7B,MAAM,GAAG,GAAG,MAAM,CAAC,eAAe,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,CAAA;YAC9D,IAAI,CAAC,GAAG;gBAAE,MAAM,IAAI,eAAe,CAAC,mBAAmB,KAAK,aAAa,CAAC,CAAA;YAC1E,MAAM,CAAC,GAAG,EAAE,MAAM,EAAE,GAAG,CAAC,CAAA;YACxB,GAAG,CAAC,SAAS,GAAG,GAAG,CAAA;QACrB,CAAC,CAAC,CAAA;IACJ,CAAC;IAED;;;;OAIG;IACK,KAAK,CAAC,kBAAkB,CAAC,WAAmB,EAAE,KAAY;QAChE,MAAM,YAAY,GAAa,EAAE,CAAA;QACjC,IAAI,CAAC;YACH,MAAM,GAAG,GAAG,MAAM,IAAI,CAAC,qBAAqB,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;YACrE,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,MAAM,IAAI,IAAI,CAAC,kBAAkB,EAAE,uBAAuB,CAAC,EAAE,CAAC;oBACjE,MAAM,IAAI,GAAG,MAAM,GAAG,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,EAAE,GAAG,CAAC,UAAU,CAAC,CAAA;oBACzD,IAAI,IAAI,EAAE,OAAO;wBAAE,YAAY,CAAC,IAAI,CAAC,QAAQ,IAAI,KAAK,IAAI,CAAC,OAAO,EAAE,CAAC,CAAA;gBACvE,CAAC;YACH,CAAC;QACH,CAAC;QAAC,MAAM,CAAC;YACP,wBAAwB;QAC1B,CAAC;QACD,OAAO,YAAY,CAAA;IACrB,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,gBAAgB,CAC5B,WAAmB,EACnB,aAAuB;QAEvB,IAAI,CAAC,IAAI,CAAC,SAAS,IAAI,aAAa,CAAC,MAAM,KAAK,CAAC;YAAE,OAAO,EAAE,CAAA;QAC5D,IAAI,CAAC;YACH,OAAO,MAAM,IAAI,CAAC,SAAS,CAAC,WAAW,EAAE,aAAa,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAA;QACpE,CAAC;QAAC,MAAM,CAAC;YACP,OAAO,EAAE,CAAA;QACX,CAAC;IACH,CAAC;IAED;;;;;OAKG;IACK,KAAK,CAAC,0BAA0B,CACtC,WAAmB,EACnB,KAAY,EACZ,KAAa;QAEb,IAAI,KAAK,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,mBAAmB;YAAE,OAAM;QACxD,IAAI,CAAC;YACH,MAAM,IAAI,CAAC,IAAI,CAAC,mBAAmB,CAAC,KAAK,CAAC,WAAW,EAAE;gBACrD,IAAI,EAAE,oBAAoB;gBAC1B,OAAO,EAAE,KAAK,CAAC,EAAE;gBACjB,wFAAwF;gBACxF,qEAAqE;gBACrE,WAAW,EAAE,KAAK,CAAC,WAAW,IAAI,IAAI;gBACtC,KAAK,EAAE,iCAAiC,KAAK,CAAC,KAAK,EAAE;gBACrD,IAAI,EAAE,mCAAmC,KAAK,kBAC5C,KAAK,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GACrB,aAAa;gBACb,OAAO,EAAE;oBACP,YAAY,EAAE,KAAK;oBACnB,GAAG,CAAC,KAAK,CAAC,wBAAwB;wBAChC,CAAC,CAAC,EAAE,YAAY,EAAE,KAAK,CAAC,wBAAwB,EAAE;wBAClD,CAAC,CAAC,EAAE,CAAC;iBACR;aACF,CAAC,CAAA;QACJ,CAAC;QAAC,MAAM,CAAC;YACP,0DAA0D;QAC5D,CAAC;IACH,CAAC;IAED,4EAA4E;IAClE,KAAK,CAAC,aAAa,CAAC,WAAmB,EAAE,KAAY;QAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,kBAAkB;YAClC,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,kBAAkB,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBAC7E,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,GAAG,EAAE,CAAC,CAAC,GAAG;gBACV,OAAO,EAAE,CAAC,CAAC,OAAO;aACnB,CAAC,CAAC;YACL,CAAC,CAAC,EAAE,CAAA;QACN,MAAM,KAAK,GAAG,IAAI,CAAC,cAAc;YAC/B,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,cAAc,CAAC,WAAW,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;gBACzE,GAAG,EAAE,CAAC,CAAC,UAAU;gBACjB,KAAK,EAAE,CAAC,CAAC,KAAK;gBACd,MAAM,EAAE,CAAC,CAAC,MAAM;gBAChB,IAAI,EAAE,CAAC,CAAC,IAAI;gBACZ,WAAW,EAAE,CAAC,CAAC,WAAW;aAC3B,CAAC,CAAC;YACL,CAAC,CAAC,EAAE,CAAA;QACN,0FAA0F;QAC1F,6FAA6F;QAC7F,8DAA8D;QAC9D,MAAM,mBAAmB,GAAG,MAAM,IAAI,CAAC,0BAA0B,EAAE,CAAC,WAAW,EAAE,KAAK,CAAC,EAAE,CAAC,CAAA;QAC1F,OAAO;YACL,KAAK,EAAE;gBACL,KAAK,EAAE,KAAK,CAAC,KAAK;gBAClB,IAAI,EAAE,KAAK,CAAC,IAAI;gBAChB,WAAW,EAAE,mBAAmB,EAAE,IAAI,EAAE,IAAI,KAAK,CAAC,WAAW;aAC9D;YACD,IAAI;YACJ,KAAK;SACN,CAAA;IACH,CAAC;CACF"}
@@ -10,15 +10,25 @@ export interface ReviewCommon {
10
10
  model: string | null;
11
11
  iteration: number;
12
12
  maxIterations: number;
13
+ /** Optimistic-concurrency token; see the contracts' `rev`. A fresh review starts at 0. */
14
+ rev: number;
13
15
  createdAt: number;
14
16
  updatedAt: number;
15
17
  }
16
- /** The structural persistence port both review repositories satisfy. */
18
+ /**
19
+ * The structural persistence port both review repositories satisfy. Deliberately NARROWER than
20
+ * the kernel ports: the force-write `upsert` is not on it, because no path in this service may
21
+ * use one — a whole-row write from a stale read is the bug this concurrency model exists to
22
+ * prevent, and a fresh review is published through `replaceForBlock`. The kernel ports keep
23
+ * `upsert` for the seeding/RPC surfaces that legitimately own the row outright.
24
+ */
17
25
  export interface ReviewRepository<TReview> {
18
26
  getByBlock(workspaceId: string, blockId: string): Promise<TReview | null>;
19
27
  get(workspaceId: string, id: string): Promise<TReview | null>;
20
- upsert(workspaceId: string, review: TReview): Promise<void>;
21
- deleteByBlock(workspaceId: string, blockId: string): Promise<void>;
28
+ /** Rev-guarded conditional update; false ⇒ another writer moved (or deleted) the row. */
29
+ compareAndSwap(workspaceId: string, review: TReview): Promise<boolean>;
30
+ /** Atomically make this the block's (and, for brainstorm, the stage's) one live review. */
31
+ replaceForBlock(workspaceId: string, review: TReview): Promise<void>;
22
32
  }
23
33
  /** The runtime dependencies shared by every iterative-review service. */
24
34
  export interface IterativeReviewDeps {
@@ -202,6 +212,36 @@ export declare abstract class IterativeReviewService<TReview extends ReviewCommo
202
212
  */
203
213
  protected notifyFindings(workspaceId: string, block: Block, findingCount: number): Promise<void>;
204
214
  private load;
215
+ /**
216
+ * Apply a pure in-memory mutation to a review under OPTIMISTIC CONCURRENCY: load it, run
217
+ * `mutate`, then `compareAndSwap`. A review is ONE JSON blob holding every finding, so two
218
+ * writers that each load it, edit a DIFFERENT item and write the whole row back would leave
219
+ * only the last writer's edit — and because `incorporate` refuses to run while any finding is
220
+ * still `open`, a lost dismissal blocks incorporation on a phantom open item (race-audit 2.5).
221
+ * On a lost race this reloads and re-applies `mutate` on the winning snapshot (bounded
222
+ * retries) rather than force-writing over it.
223
+ *
224
+ * `mutate` MUST be idempotent w.r.t. external systems — it can run several times, so do all
225
+ * non-idempotent work (notifications, driver signals, emits) AFTER this resolves, on the
226
+ * returned review. A domain error thrown from `mutate` (the fresh state no longer admits the
227
+ * action) propagates immediately and is NOT retried. `updatedAt` is stamped centrally, so a
228
+ * mutation never has to remember to. Returning `false` from `mutate` means "the fresh state
229
+ * already satisfies this" — no write happens at all, so an idempotent re-request doesn't
230
+ * churn `updatedAt` (and the live event it drives).
231
+ *
232
+ * Giving up throws {@link ReviewContendedError}, which is BOTH a 409 for an HTTP caller and the
233
+ * durable driver's re-drive signal — the driver owns the two paths whose mutation carries
234
+ * paid-for LLM output (`incorporate`, `reReview`), and failing the run there would throw that
235
+ * work away for good rather than re-deriving it on fresh state.
236
+ */
237
+ protected mutateReview(workspaceId: string, reviewId: string, mutate: (review: TReview, now: number) => boolean | void): Promise<TReview>;
238
+ /**
239
+ * {@link mutateReview} for a caller to whom a review that is GONE is an ordinary outcome rather
240
+ * than a 404 — resolving to null instead of throwing. The absence is re-checked on every
241
+ * attempt, so a fresh review run replacing the row mid-retry settles as "gone" rather than
242
+ * surfacing as a `NotFoundError` from a path that must not throw.
243
+ */
244
+ protected mutateReviewIfPresent(workspaceId: string, reviewId: string, mutate: (review: TReview, now: number) => boolean | void): Promise<TReview | null>;
205
245
  protected patchReview(workspaceId: string, reviewId: string, patch: (review: TReview) => TReview): Promise<TReview>;
206
246
  private mutateItem;
207
247
  }
@@ -1 +1 @@
1
- {"version":3,"file":"IterativeReviewService.d.ts","sourceRoot":"","sources":["../../../src/modules/review/IterativeReviewService.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"IterativeReviewService.d.ts","sourceRoot":"","sources":["../../../src/modules/review/IterativeReviewService.ts"],"names":[],"mappings":"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"}
@@ -1,8 +1,16 @@
1
1
  import { generateText } from 'ai';
2
- import { assertFound, DEFAULT_MAX_REQUIREMENT_ITERATIONS, inlineModelRef, resolveScopedModelProvider, ValidationError, } from '@cat-factory/kernel';
2
+ import { assertFound, ReviewContendedError, DEFAULT_MAX_REQUIREMENT_ITERATIONS, inlineModelRef, resolveScopedModelProvider, ValidationError, } from '@cat-factory/kernel';
3
3
  import { catFactoryObservability } from '@cat-factory/agents';
4
4
  import { scopeForBlockRun } from '../../inlineScope.js';
5
5
  import { coerceReviewItems, disposeReview, extractJson, } from '../requirements/requirements.logic.js';
6
+ /**
7
+ * How many times a contended {@link IterativeReviewService.mutateReview} reloads and re-applies
8
+ * before giving up with a {@link ReviewContendedError}. Matches the engine's
9
+ * `RunStateMachine.mutateInstance` budget: the contending writers here are human clicks and one
10
+ * durable-driver pass, so a handful of retries covers real contention while still failing loudly
11
+ * on a pathological hot row.
12
+ */
13
+ const MAX_MUTATE_ATTEMPTS = 8;
6
14
  /** Output budget for the rework generation (a full standard-format document). */
7
15
  const REWORK_MAX_OUTPUT_TOKENS = 16_000;
8
16
  /** An item still needs a human while `open`. */
@@ -83,11 +91,16 @@ export class IterativeReviewService {
83
91
  model,
84
92
  iteration: 1,
85
93
  maxIterations: opts.maxIterations,
94
+ // A fresh review; the store re-stamps this on insert.
95
+ rev: 0,
86
96
  createdAt: now,
87
97
  updatedAt: now,
88
98
  });
89
- await this.repository.deleteByBlock(workspaceId, block.id);
90
- await this.repository.upsert(workspaceId, review);
99
+ // ATOMIC replace, never delete-then-insert: two review runs for one block (a double-submit,
100
+ // or a manual run racing the engine's gate) would otherwise interleave their delete/insert
101
+ // pairs and leave the block with TWO live reviews — the window then loads one while the
102
+ // parked run's decision keys to the other (race-audit 2.5).
103
+ await this.repository.replaceForBlock(workspaceId, review);
91
104
  if (disposition !== 'auto-pass')
92
105
  await this.notifyFindings(workspaceId, block, items.length);
93
106
  return review;
@@ -108,20 +121,29 @@ export class IterativeReviewService {
108
121
  if (doc)
109
122
  this.applyIncorporatedDoc(context, doc);
110
123
  const { ref, items } = await this.runReviewer(workspaceId, block, context);
111
- const now = this.deps.clock.now();
112
- const iteration = (review.iteration ?? 1) + 1;
113
- const maxIterations = review.maxIterations ?? DEFAULT_MAX_REQUIREMENT_ITERATIONS;
114
- const disposition = disposeReview(items, { iteration, maxIterations, concernThreshold });
115
- const updated = {
116
- ...review,
117
- status: statusForDisposition(disposition),
118
- items,
119
- model: `${ref.provider}:${ref.model}`,
120
- iteration,
121
- maxIterations,
122
- updatedAt: now,
123
- };
124
- await this.repository.upsert(workspaceId, updated);
124
+ // The reviewer call is slow, so the snapshot loaded above is stale by the time it returns
125
+ // (a human can grant an extra round, or answer an item that this pass is about to replace).
126
+ // Re-derive the counters from the FRESH review under CAS rather than writing the pre-call
127
+ // snapshot back a retry recomputes them against whichever snapshot it lands on.
128
+ const updated = await this.mutateReview(workspaceId, reviewId, (fresh) => {
129
+ const iteration = (fresh.iteration ?? 1) + 1;
130
+ const maxIterations = fresh.maxIterations ?? DEFAULT_MAX_REQUIREMENT_ITERATIONS;
131
+ Object.assign(fresh, {
132
+ status: statusForDisposition(disposeReview(items, { iteration, maxIterations, concernThreshold })),
133
+ items,
134
+ model: `${ref.provider}:${ref.model}`,
135
+ iteration,
136
+ maxIterations,
137
+ });
138
+ });
139
+ // Re-derived from what was actually PERSISTED, not smuggled out of the mutation on a closure
140
+ // variable: `disposeReview` is pure, so reading the committed counters back cannot disagree
141
+ // with the status the winning attempt wrote.
142
+ const disposition = disposeReview(updated.items, {
143
+ iteration: updated.iteration,
144
+ maxIterations: updated.maxIterations,
145
+ concernThreshold,
146
+ });
125
147
  if (disposition !== 'auto-pass')
126
148
  await this.notifyFindings(workspaceId, block, items.length);
127
149
  return updated;
@@ -194,11 +216,14 @@ export class IterativeReviewService {
194
216
  if (finishReason === 'length') {
195
217
  throw new ValidationError(this.truncationMessage);
196
218
  }
197
- const now = this.deps.clock.now();
198
219
  // `merged`: the document is produced and awaits the human's re-review / redo. It is NOT
199
- // yet the final accepted document (that is `incorporated`, set on converge).
200
- const updated = { ...this.withDoc(review, revised), status: 'merged', updatedAt: now };
201
- await this.repository.upsert(workspaceId, updated);
220
+ // yet the final accepted document (that is `incorporated`, set on converge). The snapshot
221
+ // read at the top of this method is stale the incorporation LLM call is the longest
222
+ // window in the whole loop, and a human dismissal landing inside it was previously
223
+ // clobbered (race-audit 2.5) — so fold the document onto the FRESH review under CAS.
224
+ const updated = await this.mutateReview(workspaceId, reviewId, (fresh) => {
225
+ Object.assign(fresh, this.withDoc(fresh, revised), { status: 'merged' });
226
+ });
202
227
  return { review: updated };
203
228
  }
204
229
  /**
@@ -332,22 +357,70 @@ export class IterativeReviewService {
332
357
  async load(workspaceId, reviewId) {
333
358
  return assertFound(await this.repository.get(workspaceId, reviewId), this.entityName, reviewId);
334
359
  }
360
+ /**
361
+ * Apply a pure in-memory mutation to a review under OPTIMISTIC CONCURRENCY: load it, run
362
+ * `mutate`, then `compareAndSwap`. A review is ONE JSON blob holding every finding, so two
363
+ * writers that each load it, edit a DIFFERENT item and write the whole row back would leave
364
+ * only the last writer's edit — and because `incorporate` refuses to run while any finding is
365
+ * still `open`, a lost dismissal blocks incorporation on a phantom open item (race-audit 2.5).
366
+ * On a lost race this reloads and re-applies `mutate` on the winning snapshot (bounded
367
+ * retries) rather than force-writing over it.
368
+ *
369
+ * `mutate` MUST be idempotent w.r.t. external systems — it can run several times, so do all
370
+ * non-idempotent work (notifications, driver signals, emits) AFTER this resolves, on the
371
+ * returned review. A domain error thrown from `mutate` (the fresh state no longer admits the
372
+ * action) propagates immediately and is NOT retried. `updatedAt` is stamped centrally, so a
373
+ * mutation never has to remember to. Returning `false` from `mutate` means "the fresh state
374
+ * already satisfies this" — no write happens at all, so an idempotent re-request doesn't
375
+ * churn `updatedAt` (and the live event it drives).
376
+ *
377
+ * Giving up throws {@link ReviewContendedError}, which is BOTH a 409 for an HTTP caller and the
378
+ * durable driver's re-drive signal — the driver owns the two paths whose mutation carries
379
+ * paid-for LLM output (`incorporate`, `reReview`), and failing the run there would throw that
380
+ * work away for good rather than re-deriving it on fresh state.
381
+ */
382
+ async mutateReview(workspaceId, reviewId, mutate) {
383
+ return assertFound(await this.mutateReviewIfPresent(workspaceId, reviewId, mutate), this.entityName, reviewId);
384
+ }
385
+ /**
386
+ * {@link mutateReview} for a caller to whom a review that is GONE is an ordinary outcome rather
387
+ * than a 404 — resolving to null instead of throwing. The absence is re-checked on every
388
+ * attempt, so a fresh review run replacing the row mid-retry settles as "gone" rather than
389
+ * surfacing as a `NotFoundError` from a path that must not throw.
390
+ */
391
+ async mutateReviewIfPresent(workspaceId, reviewId, mutate) {
392
+ for (let attempt = 0; attempt < MAX_MUTATE_ATTEMPTS; attempt++) {
393
+ const review = await this.repository.get(workspaceId, reviewId);
394
+ if (!review)
395
+ return null;
396
+ const now = this.deps.clock.now();
397
+ if (mutate(review, now) === false)
398
+ return review;
399
+ review.updatedAt = now;
400
+ if (await this.repository.compareAndSwap(workspaceId, review))
401
+ return review;
402
+ }
403
+ throw new ReviewContendedError(this.entityName, reviewId);
404
+ }
335
405
  async patchReview(workspaceId, reviewId, patch) {
336
- const review = await this.load(workspaceId, reviewId);
337
- const updated = { ...patch(review), updatedAt: this.deps.clock.now() };
338
- await this.repository.upsert(workspaceId, updated);
339
- return updated;
406
+ // The patch is expressed as a copy, so fold it back onto the loaded instance the CAS guards.
407
+ // NOTE: this OVERLAYS the copy's fields — a patch that returns an object with a field OMITTED
408
+ // does not delete it (unlike replacing the object wholesale). Patches here set fields; one
409
+ // that needs to clear a field must set it explicitly (to null/undefined), not drop the key.
410
+ return this.mutateReview(workspaceId, reviewId, (review) => {
411
+ Object.assign(review, patch(review));
412
+ });
340
413
  }
341
414
  async mutateItem(workspaceId, reviewId, itemId, mutate) {
342
- const review = await this.load(workspaceId, reviewId);
343
- const item = review.items.find((i) => i.id === itemId);
344
- if (!item)
345
- throw new ValidationError(`Review item '${itemId}' not found`);
346
- const now = this.deps.clock.now();
347
- mutate(item, now);
348
- review.updatedAt = now;
349
- await this.repository.upsert(workspaceId, review);
350
- return review;
415
+ return this.mutateReview(workspaceId, reviewId, (review, now) => {
416
+ const item = review.items.find((i) => i.id === itemId);
417
+ // Re-resolved on every attempt: a concurrent re-review replaces the item list wholesale,
418
+ // so an answer aimed at a finding that no longer exists must fail rather than be re-applied
419
+ // to a stale copy of the array.
420
+ if (!item)
421
+ throw new ValidationError(`Review item '${itemId}' not found`);
422
+ mutate(item, now);
423
+ });
351
424
  }
352
425
  }
353
426
  //# sourceMappingURL=IterativeReviewService.js.map