@straiffi/archon 1.10.1 → 1.10.2

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 (170) hide show
  1. package/dist/client/assets/ActivityView-CdDT5tgr.js +1 -0
  2. package/dist/client/assets/{GitHubActionsDialog-BABPYwJP.js → GitHubActionsDialog-NdYtgMhg.js} +1 -1
  3. package/dist/client/assets/{VerificationDialog-LN87YY0r.js → VerificationDialog-BfIKtVjt.js} +1 -1
  4. package/dist/client/assets/{architectureDiagram-3BPJPVTR-DBXhcjPI.js → architectureDiagram-3BPJPVTR-C4zoWnXM.js} +1 -1
  5. package/dist/client/assets/{blockDiagram-GPEHLZMM-c3auwNH7.js → blockDiagram-GPEHLZMM-ZhRwV8ma.js} +1 -1
  6. package/dist/client/assets/{c4Diagram-AAUBKEIU-DH2YznEQ.js → c4Diagram-AAUBKEIU-CA2USxCJ.js} +1 -1
  7. package/dist/client/assets/channel-C4I-VlJu.js +1 -0
  8. package/dist/client/assets/{chunk-2J33WTMH-D0_MoyXZ.js → chunk-2J33WTMH-CY32Brnt.js} +1 -1
  9. package/dist/client/assets/{chunk-3OPIFGDE-DLvSp1DN.js → chunk-3OPIFGDE-H70UH7rH.js} +1 -1
  10. package/dist/client/assets/{chunk-5ZQYHXKU-B4sX8Htk.js → chunk-5ZQYHXKU-DC1dllSt.js} +1 -1
  11. package/dist/client/assets/{chunk-727SXJPM-CkdnShG1.js → chunk-727SXJPM-DVIgI7hM.js} +1 -1
  12. package/dist/client/assets/{chunk-AQP2D5EJ-BdPfgkcs.js → chunk-AQP2D5EJ-gwSYEPou.js} +1 -1
  13. package/dist/client/assets/{chunk-CSCIHK7Q-CK-DpVF6.js → chunk-CSCIHK7Q-Z1cfABPc.js} +1 -1
  14. package/dist/client/assets/{chunk-KSCS5N6A-DSbTWVl2.js → chunk-KSCS5N6A-DFoW6dtq.js} +1 -1
  15. package/dist/client/assets/{chunk-L5ZTLDWV-DuQ4EPLl.js → chunk-L5ZTLDWV-CmQbbP8b.js} +1 -1
  16. package/dist/client/assets/{chunk-LZXEDZCA-CtpoXWMY.js → chunk-LZXEDZCA-Ba16nX-R.js} +2 -2
  17. package/dist/client/assets/{chunk-ND2GUHAM-CDfNOP6o.js → chunk-ND2GUHAM-Bc7u1Zqm.js} +1 -1
  18. package/dist/client/assets/{chunk-NZK2D7GU-s6ReY4ev.js → chunk-NZK2D7GU-DNXYx7JX.js} +1 -1
  19. package/dist/client/assets/{chunk-O5CBEL6O-DxqYGKhS.js → chunk-O5CBEL6O-Ba00cuZ5.js} +1 -1
  20. package/dist/client/assets/{chunk-WU5MYG2G-BvrhxyV8.js → chunk-WU5MYG2G-SJ_ny5dU.js} +1 -1
  21. package/dist/client/assets/classDiagram-4FO5ZUOK-Ca3KxBnW.js +1 -0
  22. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-CSpMessw.js +1 -0
  23. package/dist/client/assets/{dagre-BM42HDAG-DEK_rftr.js → dagre-BM42HDAG-CL2dKbj9.js} +1 -1
  24. package/dist/client/assets/{diagram-2AECGRRQ-CpobcZnv.js → diagram-2AECGRRQ-DQq1qZ0l.js} +1 -1
  25. package/dist/client/assets/{diagram-5GNKFQAL-zL1D1L_8.js → diagram-5GNKFQAL-Zf0YQuRe.js} +1 -1
  26. package/dist/client/assets/{diagram-KO2AKTUF-gyW-Vc7c.js → diagram-KO2AKTUF-DcUxL9SG.js} +1 -1
  27. package/dist/client/assets/{diagram-LMA3HP47-DDEYc8sh.js → diagram-LMA3HP47-BAIixEu7.js} +1 -1
  28. package/dist/client/assets/{diagram-OG6HWLK6-BtUrfJnE.js → diagram-OG6HWLK6-Dhhjm84p.js} +1 -1
  29. package/dist/client/assets/{erDiagram-TEJ5UH35-qGrmpmmk.js → erDiagram-TEJ5UH35-BcQOacBP.js} +1 -1
  30. package/dist/client/assets/{flowDiagram-I6XJVG4X-DO1Nm1FA.js → flowDiagram-I6XJVG4X-BZIJqLp3.js} +1 -1
  31. package/dist/client/assets/{ganttDiagram-6RSMTGT7-DGuMVCAc.js → ganttDiagram-6RSMTGT7-DFC6qgrY.js} +1 -1
  32. package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CehPAc8-.js → gitGraphDiagram-PVQCEYII-Ds0nwSU0.js} +1 -1
  33. package/dist/client/assets/index-Bg3l17L3.css +2 -0
  34. package/dist/client/assets/index-D_KmViSu.js +276 -0
  35. package/dist/client/assets/{infoDiagram-5YYISTIA-BkRaMDId.js → infoDiagram-5YYISTIA-DfDrR5Mz.js} +1 -1
  36. package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-B45ubODJ.js → ishikawaDiagram-YF4QCWOH-B2v4Byji.js} +1 -1
  37. package/dist/client/assets/{journeyDiagram-JHISSGLW-BLxrlitK.js → journeyDiagram-JHISSGLW-CO6laklO.js} +1 -1
  38. package/dist/client/assets/{kanban-definition-UN3LZRKU-DmyeJDyy.js → kanban-definition-UN3LZRKU-BziFO199.js} +1 -1
  39. package/dist/client/assets/{line-BhwjsX6t.js → line-Vb0A8-Oe.js} +1 -1
  40. package/dist/client/assets/{mermaid-parser.core-CPvivy_u.js → mermaid-parser.core-Bm3Xv0Zt.js} +1 -1
  41. package/dist/client/assets/{mermaid.core-Dr0kld-g.js → mermaid.core-DXBRp0XG.js} +3 -3
  42. package/dist/client/assets/{mindmap-definition-RKZ34NQL-dfudPzBR.js → mindmap-definition-RKZ34NQL-4GueJvPT.js} +1 -1
  43. package/dist/client/assets/{pieDiagram-4H26LBE5-BhsIQVNX.js → pieDiagram-4H26LBE5-Djy0sVJR.js} +1 -1
  44. package/dist/client/assets/{quadrantDiagram-W4KKPZXB-CAKxScLD.js → quadrantDiagram-W4KKPZXB-3rWAi4K5.js} +1 -1
  45. package/dist/client/assets/{requirementDiagram-4Y6WPE33-Br6jIbke.js → requirementDiagram-4Y6WPE33-D7-WCnjH.js} +1 -1
  46. package/dist/client/assets/{sankeyDiagram-5OEKKPKP-BqujNgnY.js → sankeyDiagram-5OEKKPKP-B4-3BUQ2.js} +1 -1
  47. package/dist/client/assets/{sequenceDiagram-3UESZ5HK-Dr_VM_ei.js → sequenceDiagram-3UESZ5HK-DCWomuSc.js} +1 -1
  48. package/dist/client/assets/{stateDiagram-AJRCARHV-CDbSbbTW.js → stateDiagram-AJRCARHV-DpsWWFaO.js} +1 -1
  49. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BE_IAuYt.js +1 -0
  50. package/dist/client/assets/{timeline-definition-PNZ67QCA-CnuLuWDs.js → timeline-definition-PNZ67QCA-B0Mh4MHF.js} +1 -1
  51. package/dist/client/assets/{vennDiagram-CIIHVFJN-CVAhxdBZ.js → vennDiagram-CIIHVFJN-Dpxr8LTG.js} +1 -1
  52. package/dist/client/assets/{wardleyDiagram-YWT4CUSO-Dmczey27.js → wardleyDiagram-YWT4CUSO-BdAz5ERd.js} +1 -1
  53. package/dist/client/assets/{xychartDiagram-2RQKCTM6-Bl6JGLCU.js → xychartDiagram-2RQKCTM6-BV9Ah-jk.js} +1 -1
  54. package/dist/client/index.html +2 -2
  55. package/dist/server/db.js +640 -0
  56. package/dist/server/db.js.map +1 -1
  57. package/dist/server/index.js +787 -124
  58. package/dist/server/index.js.map +1 -1
  59. package/dist/server/lib/agentCatalog.js +35 -0
  60. package/dist/server/lib/agentCatalog.js.map +1 -0
  61. package/dist/server/lib/agentModelConfig.js +151 -0
  62. package/dist/server/lib/agentModelConfig.js.map +1 -0
  63. package/dist/server/lib/agentRuns.js +1 -0
  64. package/dist/server/lib/agentRuns.js.map +1 -1
  65. package/dist/server/lib/automationCheckGate.js +98 -9
  66. package/dist/server/lib/automationCheckGate.js.map +1 -1
  67. package/dist/server/lib/automationLoopAgentEvidence.js +42 -0
  68. package/dist/server/lib/automationLoopAgentEvidence.js.map +1 -0
  69. package/dist/server/lib/automationLoopProjection.js +339 -0
  70. package/dist/server/lib/automationLoopProjection.js.map +1 -0
  71. package/dist/server/lib/automationProgression.js +115 -6
  72. package/dist/server/lib/automationProgression.js.map +1 -1
  73. package/dist/server/lib/automationReconciliation.js +27 -11
  74. package/dist/server/lib/automationReconciliation.js.map +1 -1
  75. package/dist/server/lib/automationResumeDecision.js +55 -15
  76. package/dist/server/lib/automationResumeDecision.js.map +1 -1
  77. package/dist/server/lib/automationReviewGate.js +352 -26
  78. package/dist/server/lib/automationReviewGate.js.map +1 -1
  79. package/dist/server/lib/buildFlow.js +12 -0
  80. package/dist/server/lib/buildFlow.js.map +1 -1
  81. package/dist/server/lib/bundleReviewOperations.js +40 -23
  82. package/dist/server/lib/bundleReviewOperations.js.map +1 -1
  83. package/dist/server/lib/chatOperations.js +26 -4
  84. package/dist/server/lib/chatOperations.js.map +1 -1
  85. package/dist/server/lib/checkAutoFix.js +5 -4
  86. package/dist/server/lib/checkAutoFix.js.map +1 -1
  87. package/dist/server/lib/checkAutoFixDetails.js +54 -9
  88. package/dist/server/lib/checkAutoFixDetails.js.map +1 -1
  89. package/dist/server/lib/checkGateEvaluations.js +6 -1
  90. package/dist/server/lib/checkGateEvaluations.js.map +1 -1
  91. package/dist/server/lib/checkRepair.js +30 -0
  92. package/dist/server/lib/checkRepair.js.map +1 -1
  93. package/dist/server/lib/claudeAgentProvider.js +19 -0
  94. package/dist/server/lib/claudeAgentProvider.js.map +1 -1
  95. package/dist/server/lib/executionRuns.js +17 -3
  96. package/dist/server/lib/executionRuns.js.map +1 -1
  97. package/dist/server/lib/executionTimeline.js +3 -0
  98. package/dist/server/lib/executionTimeline.js.map +1 -1
  99. package/dist/server/lib/lightweightPrompt.js +13 -40
  100. package/dist/server/lib/lightweightPrompt.js.map +1 -1
  101. package/dist/server/lib/mobileAccess.js +47 -3
  102. package/dist/server/lib/mobileAccess.js.map +1 -1
  103. package/dist/server/lib/modelResolutionErrors.js +24 -0
  104. package/dist/server/lib/modelResolutionErrors.js.map +1 -0
  105. package/dist/server/lib/models.js +9 -9
  106. package/dist/server/lib/models.js.map +1 -1
  107. package/dist/server/lib/projectAutoConfig.js +15 -52
  108. package/dist/server/lib/projectAutoConfig.js.map +1 -1
  109. package/dist/server/lib/projectMemoryScan.js +15 -9
  110. package/dist/server/lib/projectMemoryScan.js.map +1 -1
  111. package/dist/server/lib/projects.js +59 -4
  112. package/dist/server/lib/projects.js.map +1 -1
  113. package/dist/server/lib/reviewRepairCompletion.js +126 -0
  114. package/dist/server/lib/reviewRepairCompletion.js.map +1 -0
  115. package/dist/server/lib/reviewRepairIterationRecords.js +149 -0
  116. package/dist/server/lib/reviewRepairIterationRecords.js.map +1 -0
  117. package/dist/server/lib/reviewRepairIterations.js +590 -0
  118. package/dist/server/lib/reviewRepairIterations.js.map +1 -0
  119. package/dist/server/lib/reviewRepairReconciliation.js +588 -0
  120. package/dist/server/lib/reviewRepairReconciliation.js.map +1 -0
  121. package/dist/server/lib/reviewerConfig.js +18 -7
  122. package/dist/server/lib/reviewerConfig.js.map +1 -1
  123. package/dist/server/lib/run.js +7 -2
  124. package/dist/server/lib/run.js.map +1 -1
  125. package/dist/server/lib/specArtifact.js +1 -1
  126. package/dist/server/lib/specArtifact.js.map +1 -1
  127. package/dist/server/lib/specGraphFeature.js +2 -2
  128. package/dist/server/lib/specGraphFeature.js.map +1 -1
  129. package/dist/server/lib/specOperations.js +26 -4
  130. package/dist/server/lib/specOperations.js.map +1 -1
  131. package/dist/server/lib/specRepositoryEvidenceFormatting.js +2 -2
  132. package/dist/server/lib/specRepositoryEvidenceFormatting.js.map +1 -1
  133. package/dist/server/lib/specRepositoryImpact.js +3 -3
  134. package/dist/server/lib/specRepositoryImpact.js.map +1 -1
  135. package/dist/server/lib/specReviewContext.js +7 -1
  136. package/dist/server/lib/specReviewContext.js.map +1 -1
  137. package/dist/server/lib/specReviewOperations.js +20 -7
  138. package/dist/server/lib/specReviewOperations.js.map +1 -1
  139. package/dist/server/lib/specSnapshotEvidence.js +3 -3
  140. package/dist/server/lib/specSnapshotEvidence.js.map +1 -1
  141. package/dist/server/lib/ticketAutomation.js +9 -11
  142. package/dist/server/lib/ticketAutomation.js.map +1 -1
  143. package/dist/server/lib/ticketAutomationCommit.js +21 -11
  144. package/dist/server/lib/ticketAutomationCommit.js.map +1 -1
  145. package/dist/server/lib/ticketFollowUpOperations.js +3 -1
  146. package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
  147. package/dist/server/lib/ticketSettingsOperations.js +9 -0
  148. package/dist/server/lib/ticketSettingsOperations.js.map +1 -1
  149. package/dist/server/lib/ticketWorkflowOperations.js +2 -6
  150. package/dist/server/lib/ticketWorkflowOperations.js.map +1 -1
  151. package/dist/server/lib/tickets.js +16 -6
  152. package/dist/server/lib/tickets.js.map +1 -1
  153. package/dist/server/lib/types.js +45 -0
  154. package/dist/server/lib/types.js.map +1 -1
  155. package/dist/server/workers/followUp.js +76 -1
  156. package/dist/server/workers/followUp.js.map +1 -1
  157. package/dist/server/workers/review.js +292 -60
  158. package/dist/server/workers/review.js.map +1 -1
  159. package/dist/server/workers/specReview.js +17 -8
  160. package/dist/server/workers/specReview.js.map +1 -1
  161. package/dist/server/workers/specSession.js +33 -23
  162. package/dist/server/workers/specSession.js.map +1 -1
  163. package/package.json +1 -1
  164. package/dist/client/assets/ActivityView-C5OrI0uK.js +0 -1
  165. package/dist/client/assets/channel-CYsnLOcX.js +0 -1
  166. package/dist/client/assets/classDiagram-4FO5ZUOK-CElk31Q4.js +0 -1
  167. package/dist/client/assets/classDiagram-v2-Q7XG4LA2-lnAahwmt.js +0 -1
  168. package/dist/client/assets/index-1CokwSFm.css +0 -2
  169. package/dist/client/assets/index-DtefHOHC.js +0 -276
  170. package/dist/client/assets/stateDiagram-v2-BHNVJYJU-p-kfFJi7.js +0 -1
@@ -0,0 +1,588 @@
1
+ import db from '../db.js';
2
+ import { completeAutomationReviewFixActionInTransaction, completeAutomationProgressionInTransaction, createAutomationReviewFixInTransaction, waitAutomationProgressionInTransaction, } from './automationProgression.js';
3
+ import { getExecutionRun, withExecutionRunTransaction } from './executionRuns.js';
4
+ import { compareAndSetReviewRepairIterationPhaseInTransaction, appendReviewRepairIterationDecisionInTransaction, attachReviewRepairActionInTransaction, attachReviewRepairActionEnvelopeInTransaction, attachReviewRepairResultInTransaction, claimReviewRepairIterationInTransaction, getActiveReviewRepairIteration, getReviewRepairIteration, pauseReviewRepairIterationInTransaction, terminalizeReviewRepairIterationInTransaction, } from './reviewRepairIterations.js';
5
+ import { buildAutomationFixInstruction, countBlockingFindings, depthAtLeast, resetBundleAutomationLoop, resolveAutomationConfig } from './ticketAutomation.js';
6
+ import { getProjectById } from './projects.js';
7
+ import { getCheckGateEvaluation } from './checkGateEvaluations.js';
8
+ import { validateWorkflowContext } from './types.js';
9
+ const ACTIVE_STATUSES = new Set(['queued', 'running', 'waiting']);
10
+ const MAX_LEGACY_COUNTER = 10_000;
11
+ const MAX_LEGACY_CHILDREN = 20;
12
+ const LEGACY_PAUSE_REASON = 'Legacy Review repair was paused during startup reconciliation.';
13
+ const reconciliationEmitter = { emit: (_event, _payload) => undefined };
14
+ export const getReviewRepairIterationCurrentRunId = (iteration) => (iteration.resulting_review_execution_run_id
15
+ ?? iteration.gate_batch_run_id
16
+ ?? iteration.action_run_id
17
+ ?? iteration.action_envelope_run_id);
18
+ export const getRecoveredReviewRepairWorkflowContext = (iteration, reviewSeverity) => validateWorkflowContext({
19
+ review_finding_run_id: iteration.triggering_review_run_id,
20
+ review_severity: reviewSeverity,
21
+ });
22
+ export const decideReviewRepairReconciliation = (iteration, currentRun, hasValidGateAdmission = false) => {
23
+ if (iteration.phase === 'paused' || iteration.phase === 'terminal') {
24
+ return { kind: 'none' };
25
+ }
26
+ const expectedRunId = iteration.resulting_review_execution_run_id
27
+ ?? iteration.gate_batch_run_id
28
+ ?? iteration.action_run_id
29
+ ?? iteration.action_envelope_run_id;
30
+ if (expectedRunId && currentRun?.id !== expectedRunId) {
31
+ return { kind: 'pause', currentRunId: expectedRunId, reason: 'invalid_lineage' };
32
+ }
33
+ if (iteration.phase === 'action_claimed') {
34
+ return { kind: 'dispatch_action' };
35
+ }
36
+ if (currentRun && ACTIVE_STATUSES.has(currentRun.status)) {
37
+ return { kind: 'pause', currentRunId: currentRun.id, reason: 'interrupted' };
38
+ }
39
+ if (iteration.phase === 'observed') {
40
+ return { kind: 'dispatch_action' };
41
+ }
42
+ if (iteration.phase === 'action_active') {
43
+ return currentRun?.status === 'completed' && iteration.action_run_id
44
+ ? { kind: 'recover_action_completion', actionRunId: iteration.action_run_id }
45
+ : { kind: 'pause', currentRunId: expectedRunId, reason: 'invalid_lineage' };
46
+ }
47
+ if (iteration.phase === 'gate_pending') {
48
+ return { kind: 'dispatch_gate' };
49
+ }
50
+ if (iteration.phase === 'gate_active') {
51
+ return hasValidGateAdmission && (!currentRun || !ACTIVE_STATUSES.has(currentRun.status))
52
+ ? { kind: 'advance_gate', gateBatchRunId: iteration.gate_batch_run_id }
53
+ : { kind: 'pause', currentRunId: expectedRunId, reason: 'invalid_lineage' };
54
+ }
55
+ if (iteration.phase === 'verification_pending') {
56
+ return { kind: 'dispatch_verification' };
57
+ }
58
+ if (iteration.phase === 'verification_active') {
59
+ return currentRun?.status === 'completed' && iteration.resulting_review_execution_run_id
60
+ ? { kind: 'recover_verification_completion', verificationRunId: iteration.resulting_review_execution_run_id }
61
+ : { kind: 'pause', currentRunId: expectedRunId, reason: 'invalid_lineage' };
62
+ }
63
+ return { kind: 'none' };
64
+ };
65
+ const hasValidGateAdmission = (iteration) => {
66
+ if (iteration.gate_evaluation_id) {
67
+ const evaluation = getCheckGateEvaluation(iteration.project_id, iteration.gate_evaluation_id);
68
+ return Boolean(evaluation
69
+ && evaluation.decision === 'passed'
70
+ && evaluation.progression
71
+ && evaluation.progression.runId === iteration.automation_progression_run_id
72
+ && evaluation.boundaryKind === 'automation_review'
73
+ && evaluation.target.targetKind === 'bundle'
74
+ && evaluation.target.targetBundleId === iteration.worktree_bundle_id
75
+ && evaluation.sourceBatchRunId === iteration.gate_source_batch_run_id);
76
+ }
77
+ const evidence = iteration.workspace_evidence;
78
+ return evidence?.checksNotRequired === true
79
+ && typeof evidence.policyFingerprint === 'string'
80
+ && evidence.selectedBatchRunId === null
81
+ && evidence.finalSourceBatchRunId === null
82
+ && evidence.gateEvaluationId === null;
83
+ };
84
+ export const classifyLegacyReviewRepairState = ({ hasLedgerIteration, progressionOwned, progressionStatus, reviewIterationCount, fixLoopActive, unfinishedChildRunIds, }) => {
85
+ if (hasLedgerIteration
86
+ || !progressionOwned
87
+ || !progressionStatus
88
+ || !ACTIVE_STATUSES.has(progressionStatus)
89
+ || (reviewIterationCount <= 0 && !fixLoopActive && unfinishedChildRunIds.length === 0)) {
90
+ return null;
91
+ }
92
+ return {
93
+ reviewIterationCount: Math.min(Math.max(0, Math.trunc(reviewIterationCount)), MAX_LEGACY_COUNTER),
94
+ fixLoopActive,
95
+ unfinishedChildRunIds: unfinishedChildRunIds.slice(0, MAX_LEGACY_CHILDREN),
96
+ unfinishedChildCount: unfinishedChildRunIds.length,
97
+ };
98
+ };
99
+ export const isLegacyReviewRepairMigrationPause = (projectId, bundleId, progressionRunId) => Boolean(progressionRunId && db.prepare(`
100
+ SELECT 1
101
+ FROM lifecycle_events event
102
+ JOIN execution_run_links bundle_link ON bundle_link.execution_run_id = event.execution_run_id
103
+ AND bundle_link.project_id = event.project_id AND bundle_link.entity_type = 'bundle'
104
+ AND bundle_link.entity_id = ? AND bundle_link.relationship = 'primary'
105
+ WHERE event.project_id = ? AND event.execution_run_id = ?
106
+ AND event.event_type = 'automation_legacy_review_repair_paused'
107
+ LIMIT 1
108
+ `).get(bundleId, projectId, progressionRunId));
109
+ const quarantineLegacyReviewRepairs = () => {
110
+ const candidates = db.prepare(`
111
+ SELECT state.project_id, state.worktree_bundle_id, state.automation_progression_run_id,
112
+ state.review_iteration_count, state.fix_loop_active, progression.status
113
+ FROM bundle_automation_state state
114
+ JOIN execution_runs progression ON progression.id = state.automation_progression_run_id
115
+ AND progression.project_id = state.project_id AND progression.kind = 'automation_progression'
116
+ JOIN execution_run_links bundle_link ON bundle_link.execution_run_id = progression.id
117
+ AND bundle_link.project_id = progression.project_id AND bundle_link.entity_type = 'bundle'
118
+ AND bundle_link.entity_id = state.worktree_bundle_id AND bundle_link.relationship = 'primary'
119
+ WHERE progression.status IN ('queued', 'running', 'waiting')
120
+ AND NOT EXISTS (
121
+ SELECT 1 FROM review_repair_iterations iteration
122
+ WHERE iteration.automation_progression_run_id = progression.id
123
+ )
124
+ AND NOT EXISTS (
125
+ SELECT 1 FROM lifecycle_events event
126
+ WHERE event.execution_run_id = progression.id
127
+ AND event.event_type = 'automation_legacy_review_repair_paused'
128
+ )
129
+ `).all();
130
+ let quarantined = 0;
131
+ for (const candidate of candidates) {
132
+ const childRows = db.prepare(`
133
+ WITH RECURSIVE descendants(id, kind, status, parent_run_id) AS (
134
+ SELECT id, kind, status, parent_run_id FROM execution_runs WHERE project_id = ? AND parent_run_id = ?
135
+ UNION ALL
136
+ SELECT child.id, child.kind, child.status, child.parent_run_id FROM execution_runs child
137
+ JOIN descendants parent ON child.parent_run_id = parent.id
138
+ WHERE child.project_id = ?
139
+ )
140
+ SELECT descendant.id FROM descendants descendant
141
+ LEFT JOIN execution_runs parent ON parent.id = descendant.parent_run_id
142
+ AND parent.project_id = ?
143
+ WHERE descendant.status <> 'completed'
144
+ AND (
145
+ descendant.kind = 'automation_review_fix'
146
+ OR (descendant.kind = 'build_follow_up' AND parent.kind = 'automation_review_fix')
147
+ )
148
+ ORDER BY descendant.id
149
+ `).all(candidate.project_id, candidate.automation_progression_run_id, candidate.project_id, candidate.project_id);
150
+ const evidence = classifyLegacyReviewRepairState({
151
+ hasLedgerIteration: false,
152
+ progressionOwned: true,
153
+ progressionStatus: candidate.status,
154
+ reviewIterationCount: candidate.review_iteration_count,
155
+ fixLoopActive: candidate.fix_loop_active === 1,
156
+ unfinishedChildRunIds: childRows.map(row => row.id),
157
+ });
158
+ if (!evidence) {
159
+ continue;
160
+ }
161
+ withExecutionRunTransaction(transaction => {
162
+ waitAutomationProgressionInTransaction(transaction, {
163
+ projectId: candidate.project_id,
164
+ bundleId: candidate.worktree_bundle_id,
165
+ progressionRunId: candidate.automation_progression_run_id,
166
+ pauseCode: 'review',
167
+ pauseReason: LEGACY_PAUSE_REASON,
168
+ reasonCode: 'reconciliation_failed',
169
+ pausedStageRunId: null,
170
+ });
171
+ transaction.appendLifecycleEvent({
172
+ projectId: candidate.project_id,
173
+ runId: candidate.automation_progression_run_id,
174
+ eventType: 'automation_legacy_review_repair_paused',
175
+ metadata: {
176
+ legacy_review_iteration_count: evidence.reviewIterationCount,
177
+ legacy_fix_loop_active: evidence.fixLoopActive,
178
+ legacy_reconciliation_reason: 'unledgered_active_review_repair',
179
+ legacy_child_run_ids: evidence.unfinishedChildRunIds,
180
+ legacy_child_run_count: evidence.unfinishedChildCount,
181
+ },
182
+ });
183
+ db.prepare(`
184
+ UPDATE bundle_automation_state
185
+ SET review_iteration_count = 0, fix_loop_active = 0, updated_at = CURRENT_TIMESTAMP
186
+ WHERE project_id = ? AND worktree_bundle_id = ?
187
+ AND automation_progression_run_id = ?
188
+ `).run(candidate.project_id, candidate.worktree_bundle_id, candidate.automation_progression_run_id);
189
+ }, undefined, 'immediate');
190
+ quarantined += 1;
191
+ }
192
+ return quarantined;
193
+ };
194
+ const pauseIteration = (iteration, currentRunId, invalid) => {
195
+ withExecutionRunTransaction(transaction => {
196
+ const pausedStageRunId = currentRunId && getExecutionRun(iteration.project_id, currentRunId)
197
+ ? currentRunId
198
+ : null;
199
+ waitAutomationProgressionInTransaction(transaction, {
200
+ projectId: iteration.project_id,
201
+ bundleId: iteration.worktree_bundle_id,
202
+ progressionRunId: iteration.automation_progression_run_id,
203
+ pauseCode: 'review',
204
+ pauseReason: invalid
205
+ ? 'Review repair ledger evidence is inconsistent after restart.'
206
+ : 'Review repair work was interrupted by a server restart.',
207
+ reasonCode: invalid ? 'reconciliation_failed' : 'server_restart',
208
+ pausedStageRunId,
209
+ });
210
+ pauseReviewRepairIterationInTransaction(transaction, {
211
+ projectId: iteration.project_id,
212
+ iterationId: iteration.id,
213
+ expectedPhase: iteration.phase,
214
+ expectedCurrentRunId: currentRunId,
215
+ stopReason: invalid ? 'invalid_lineage' : 'interrupted',
216
+ });
217
+ }, undefined, 'immediate');
218
+ };
219
+ const dispatchReviewRepairAction = async (iteration) => {
220
+ const [{ getTicket }, { submitTicketFollowUp }] = await Promise.all([
221
+ import('./tickets.js'),
222
+ import('./ticketFollowUpOperations.js'),
223
+ ]);
224
+ const ticket = getTicket(iteration.owner_ticket_id);
225
+ const project = getProjectById(iteration.project_id);
226
+ const bundle = db.prepare(`
227
+ SELECT * FROM worktree_bundles WHERE id = ? AND project_id = ?
228
+ `).get(iteration.worktree_bundle_id, iteration.project_id);
229
+ if (!ticket || !project || !bundle) {
230
+ throw new Error('Review repair action owner is unavailable');
231
+ }
232
+ const config = resolveAutomationConfig(bundle, project);
233
+ const workflowContext = getRecoveredReviewRepairWorkflowContext(iteration, config.reviewSeverity);
234
+ if (iteration.phase === 'observed') {
235
+ const findings = db.prepare(`
236
+ SELECT severity FROM review_findings WHERE review_run_id = ? ORDER BY id
237
+ `).all(iteration.triggering_review_run_id);
238
+ if (!config.reviewFixEnabled
239
+ || countBlockingFindings(findings, config) === 0
240
+ || iteration.ordinal > config.reviewMaxIterations) {
241
+ throw new Error('Review repair action is no longer authorized by live policy');
242
+ }
243
+ }
244
+ let actionEnvelopeRunId = iteration.action_envelope_run_id;
245
+ if (!actionEnvelopeRunId) {
246
+ actionEnvelopeRunId = withExecutionRunTransaction(transaction => {
247
+ const reviewFix = createAutomationReviewFixInTransaction(transaction, {
248
+ projectId: iteration.project_id,
249
+ bundleId: iteration.worktree_bundle_id,
250
+ ticketId: ticket.id,
251
+ ticketTitle: ticket.title,
252
+ progressionRunId: iteration.automation_progression_run_id,
253
+ workflowContext,
254
+ triggeringReviewRunId: iteration.triggering_review_execution_run_id,
255
+ reviewFindingRunId: iteration.triggering_review_run_id,
256
+ reviewSeverity: config.reviewSeverity,
257
+ });
258
+ attachReviewRepairActionEnvelopeInTransaction(transaction, {
259
+ projectId: iteration.project_id,
260
+ iterationId: iteration.id,
261
+ expectedPhase: 'observed',
262
+ runId: reviewFix.runId,
263
+ });
264
+ return reviewFix.runId;
265
+ }, undefined, 'immediate');
266
+ }
267
+ const started = submitTicketFollowUp({
268
+ ticketId: ticket.id,
269
+ requestedProjectId: iteration.project_id,
270
+ payload: { instruction: buildAutomationFixInstruction(config.reviewSeverity), mode: 'build' },
271
+ broadcaster: reconciliationEmitter,
272
+ persistTriggerMessage: false,
273
+ initiation: {
274
+ initiator: 'automation',
275
+ causalParentRunId: actionEnvelopeRunId,
276
+ workflowContext,
277
+ },
278
+ onExecutionCreated: (executionContext, transaction) => {
279
+ attachReviewRepairActionInTransaction(transaction, {
280
+ projectId: iteration.project_id,
281
+ iterationId: iteration.id,
282
+ expectedPhase: 'action_claimed',
283
+ runId: executionContext.runId,
284
+ });
285
+ },
286
+ onExecutionCompleted: (executionContext, transaction) => {
287
+ const liveProject = getProjectById(iteration.project_id) ?? project;
288
+ const liveBundle = db.prepare(`
289
+ SELECT * FROM worktree_bundles WHERE id = ? AND project_id = ?
290
+ `).get(iteration.worktree_bundle_id, iteration.project_id);
291
+ completeAutomationReviewFixActionInTransaction(transaction, {
292
+ projectId: iteration.project_id,
293
+ actionRunId: executionContext.runId,
294
+ effectiveAutomationConfig: resolveAutomationConfig(liveBundle ?? bundle, liveProject),
295
+ });
296
+ },
297
+ });
298
+ if (!started.ok) {
299
+ throw new Error(started.error);
300
+ }
301
+ };
302
+ const dispatchReviewRepairGate = async (iteration) => {
303
+ const { runAutomationReviewGate } = await import('./automationReviewGate.js');
304
+ const dispatched = await runAutomationReviewGate({
305
+ projectId: iteration.project_id,
306
+ bundleId: iteration.worktree_bundle_id,
307
+ progressionRunId: iteration.automation_progression_run_id,
308
+ broadcaster: reconciliationEmitter,
309
+ pausedStageRunId: iteration.action_run_id,
310
+ iterationId: iteration.id,
311
+ });
312
+ if (!dispatched) {
313
+ throw new Error('Review repair gate could not be dispatched');
314
+ }
315
+ };
316
+ const reconcileLedgerIterations = async () => {
317
+ const rows = db.prepare(`
318
+ SELECT project_id, id FROM review_repair_iterations
319
+ WHERE phase NOT IN ('paused', 'terminal')
320
+ ORDER BY created_at, id
321
+ `).all();
322
+ let paused = 0;
323
+ let advanced = 0;
324
+ for (const row of rows) {
325
+ const iteration = getReviewRepairIteration(row.project_id, row.id);
326
+ if (!iteration || iteration.phase === 'paused' || iteration.phase === 'terminal') {
327
+ continue;
328
+ }
329
+ const currentRunId = getReviewRepairIterationCurrentRunId(iteration);
330
+ const run = currentRunId ? getExecutionRun(iteration.project_id, currentRunId) : null;
331
+ const decision = decideReviewRepairReconciliation(iteration, run ? { id: run.id, status: run.status } : null, hasValidGateAdmission(iteration));
332
+ if (decision.kind === 'dispatch_action') {
333
+ try {
334
+ await dispatchReviewRepairAction(iteration);
335
+ advanced += 1;
336
+ }
337
+ catch {
338
+ const current = getReviewRepairIteration(iteration.project_id, iteration.id);
339
+ if (current && current.phase !== 'paused' && current.phase !== 'terminal') {
340
+ pauseIteration(current, getReviewRepairIterationCurrentRunId(current), true);
341
+ }
342
+ paused += 1;
343
+ }
344
+ continue;
345
+ }
346
+ if (decision.kind === 'dispatch_gate' || decision.kind === 'dispatch_verification') {
347
+ try {
348
+ await dispatchReviewRepairGate(iteration);
349
+ advanced += 1;
350
+ }
351
+ catch {
352
+ const current = getReviewRepairIteration(iteration.project_id, iteration.id);
353
+ if (current && current.phase !== 'paused' && current.phase !== 'terminal') {
354
+ pauseIteration(current, getReviewRepairIterationCurrentRunId(current), true);
355
+ }
356
+ paused += 1;
357
+ }
358
+ continue;
359
+ }
360
+ if (decision.kind === 'recover_action_completion') {
361
+ const project = getProjectById(iteration.project_id);
362
+ const bundle = db.prepare(`
363
+ SELECT * FROM worktree_bundles WHERE id = ? AND project_id = ?
364
+ `).get(iteration.worktree_bundle_id, iteration.project_id);
365
+ if (!project || !bundle) {
366
+ pauseIteration(iteration, currentRunId, true);
367
+ paused += 1;
368
+ continue;
369
+ }
370
+ withExecutionRunTransaction(transaction => {
371
+ completeAutomationReviewFixActionInTransaction(transaction, {
372
+ projectId: iteration.project_id,
373
+ actionRunId: decision.actionRunId,
374
+ effectiveAutomationConfig: resolveAutomationConfig(bundle, project),
375
+ });
376
+ }, undefined, 'immediate');
377
+ const current = getReviewRepairIteration(iteration.project_id, iteration.id);
378
+ if (current && current.phase !== 'terminal') {
379
+ try {
380
+ await dispatchReviewRepairGate(current);
381
+ }
382
+ catch {
383
+ const latest = getReviewRepairIteration(iteration.project_id, iteration.id);
384
+ if (latest && latest.phase !== 'paused' && latest.phase !== 'terminal') {
385
+ pauseIteration(latest, latest.gate_batch_run_id ?? latest.action_run_id, true);
386
+ paused += 1;
387
+ }
388
+ }
389
+ }
390
+ advanced += 1;
391
+ continue;
392
+ }
393
+ if (decision.kind === 'advance_gate') {
394
+ withExecutionRunTransaction(transaction => {
395
+ compareAndSetReviewRepairIterationPhaseInTransaction(transaction, {
396
+ projectId: iteration.project_id,
397
+ iterationId: iteration.id,
398
+ expectedPhase: 'gate_active',
399
+ nextPhase: 'verification_pending',
400
+ expectedGateBatchRunId: decision.gateBatchRunId,
401
+ });
402
+ }, undefined, 'immediate');
403
+ const current = getReviewRepairIteration(iteration.project_id, iteration.id);
404
+ if (current) {
405
+ try {
406
+ await dispatchReviewRepairGate(current);
407
+ }
408
+ catch {
409
+ const latest = getReviewRepairIteration(iteration.project_id, iteration.id);
410
+ if (latest && latest.phase !== 'paused' && latest.phase !== 'terminal') {
411
+ pauseIteration(latest, latest.resulting_review_execution_run_id ?? latest.gate_batch_run_id ?? latest.action_run_id, true);
412
+ paused += 1;
413
+ }
414
+ }
415
+ }
416
+ advanced += 1;
417
+ continue;
418
+ }
419
+ if (decision.kind === 'recover_verification_completion') {
420
+ const project = getProjectById(iteration.project_id);
421
+ const bundle = db.prepare(`
422
+ SELECT * FROM worktree_bundles WHERE id = ? AND project_id = ?
423
+ `).get(iteration.worktree_bundle_id, iteration.project_id);
424
+ const { getTicket } = await import('./tickets.js');
425
+ const ticket = getTicket(iteration.owner_ticket_id);
426
+ const resultingReview = db.prepare(`
427
+ SELECT review.id
428
+ FROM review_runs review
429
+ JOIN execution_run_links result_link ON result_link.execution_run_id = ?
430
+ AND result_link.project_id = review.project_id
431
+ AND result_link.entity_type = 'review_run'
432
+ AND result_link.entity_id = review.id AND result_link.relationship = 'result'
433
+ WHERE review.project_id = ? AND review.ticket_id = ?
434
+ AND review.worktree_bundle_id = ? AND review.status = 'completed'
435
+ AND review.id <> ?
436
+ LIMIT 1
437
+ `).get(decision.verificationRunId, iteration.project_id, iteration.owner_ticket_id, iteration.worktree_bundle_id, iteration.triggering_review_run_id);
438
+ const verificationRun = getExecutionRun(iteration.project_id, decision.verificationRunId);
439
+ if (!ticket || !project || !bundle || !resultingReview || !verificationRun) {
440
+ pauseIteration(iteration, decision.verificationRunId, true);
441
+ paused += 1;
442
+ continue;
443
+ }
444
+ const findings = db.prepare(`
445
+ SELECT severity FROM review_findings WHERE review_run_id = ? ORDER BY id
446
+ `).all(resultingReview.id);
447
+ const config = resolveAutomationConfig(bundle, project);
448
+ const blockingCount = countBlockingFindings(findings, config);
449
+ const shouldContinue = config.depth !== 'manual'
450
+ && config.reviewFixEnabled
451
+ && blockingCount > 0
452
+ && iteration.ordinal < config.reviewMaxIterations;
453
+ withExecutionRunTransaction(transaction => {
454
+ attachReviewRepairResultInTransaction(transaction, {
455
+ projectId: iteration.project_id,
456
+ iterationId: iteration.id,
457
+ expectedPhase: 'verification_active',
458
+ expectedVerificationRunId: verificationRun.id,
459
+ resultingReviewRunId: resultingReview.id,
460
+ });
461
+ appendReviewRepairIterationDecisionInTransaction(transaction, {
462
+ projectId: iteration.project_id,
463
+ iterationId: iteration.id,
464
+ decisionPoint: 'verification_completion',
465
+ effectiveAutomationConfig: config,
466
+ decisionCode: 'verification_reconciled_on_startup',
467
+ operationRunId: verificationRun.id,
468
+ });
469
+ terminalizeReviewRepairIterationInTransaction(transaction, {
470
+ projectId: iteration.project_id,
471
+ iterationId: iteration.id,
472
+ expectedPhase: 'verification_active',
473
+ expectedCurrentRunId: verificationRun.id,
474
+ outcome: shouldContinue
475
+ ? 'continuing'
476
+ : blockingCount === 0
477
+ ? 'repaired'
478
+ : config.depth === 'manual'
479
+ ? 'interrupted'
480
+ : config.reviewFixEnabled
481
+ ? 'exhausted'
482
+ : 'interrupted',
483
+ stopReason: shouldContinue
484
+ ? null
485
+ : blockingCount === 0
486
+ ? 'no_blocking_findings'
487
+ : config.depth === 'manual'
488
+ ? 'configuration_changed'
489
+ : config.reviewFixEnabled
490
+ ? 'max_iterations'
491
+ : 'automation_disabled',
492
+ resultingBlockingCount: blockingCount,
493
+ });
494
+ if (config.depth === 'manual') {
495
+ completeAutomationProgressionInTransaction(transaction, {
496
+ projectId: iteration.project_id,
497
+ bundleId: iteration.worktree_bundle_id,
498
+ progressionRunId: iteration.automation_progression_run_id,
499
+ domainStatus: 'manual_boundary_reached',
500
+ });
501
+ }
502
+ if (shouldContinue) {
503
+ claimReviewRepairIterationInTransaction(transaction, {
504
+ projectId: iteration.project_id,
505
+ worktreeBundleId: iteration.worktree_bundle_id,
506
+ ownerTicketId: iteration.owner_ticket_id,
507
+ automationProgressionRunId: iteration.automation_progression_run_id,
508
+ triggeringReviewExecutionRunId: verificationRun.id,
509
+ triggeringReviewRunId: resultingReview.id,
510
+ triggeringBlockingCount: blockingCount,
511
+ effectiveAutomationConfig: config,
512
+ decisionCode: 'startup_verification_repair_admitted',
513
+ });
514
+ }
515
+ }, undefined, 'immediate');
516
+ if (shouldContinue) {
517
+ const nextIteration = getActiveReviewRepairIteration(iteration.project_id, iteration.automation_progression_run_id);
518
+ if (nextIteration) {
519
+ try {
520
+ await dispatchReviewRepairAction(nextIteration);
521
+ }
522
+ catch {
523
+ const current = getReviewRepairIteration(iteration.project_id, nextIteration.id);
524
+ if (current && current.phase !== 'paused' && current.phase !== 'terminal') {
525
+ pauseIteration(current, current.action_envelope_run_id, true);
526
+ paused += 1;
527
+ }
528
+ }
529
+ }
530
+ }
531
+ else if (blockingCount === 0) {
532
+ resetBundleAutomationLoop(iteration.project_id, iteration.worktree_bundle_id);
533
+ if (depthAtLeast(config.depth, 'auto_commit')) {
534
+ const { runAutomationCommitChain } = await import('./ticketAutomationCommit.js');
535
+ await runAutomationCommitChain(ticket, project, bundle, config, reconciliationEmitter, iteration.automation_progression_run_id, undefined, verificationRun.id);
536
+ }
537
+ else if (config.depth !== 'manual') {
538
+ withExecutionRunTransaction(transaction => {
539
+ completeAutomationProgressionInTransaction(transaction, {
540
+ projectId: iteration.project_id,
541
+ bundleId: iteration.worktree_bundle_id,
542
+ progressionRunId: iteration.automation_progression_run_id,
543
+ domainStatus: 'completed',
544
+ });
545
+ }, undefined, 'immediate');
546
+ }
547
+ }
548
+ else if (config.depth !== 'manual') {
549
+ withExecutionRunTransaction(transaction => {
550
+ waitAutomationProgressionInTransaction(transaction, {
551
+ projectId: iteration.project_id,
552
+ bundleId: iteration.worktree_bundle_id,
553
+ progressionRunId: iteration.automation_progression_run_id,
554
+ pauseCode: 'review',
555
+ pauseReason: 'Blocking Review findings remain after repair verification.',
556
+ reasonCode: 'precondition_failed',
557
+ pausedStageRunId: verificationRun.id,
558
+ });
559
+ }, undefined, 'immediate');
560
+ }
561
+ advanced += 1;
562
+ continue;
563
+ }
564
+ if (decision.kind === 'pause') {
565
+ pauseIteration(iteration, decision.currentRunId, decision.reason === 'invalid_lineage');
566
+ paused += 1;
567
+ continue;
568
+ }
569
+ if (decision.kind !== 'none') {
570
+ pauseIteration(iteration, currentRunId, false);
571
+ paused += 1;
572
+ }
573
+ }
574
+ return { paused, advanced };
575
+ };
576
+ export const reconcileReviewRepairExecutions = async () => {
577
+ const hasLedger = db.prepare(`
578
+ SELECT 1 FROM sqlite_master WHERE type = 'table' AND name = 'review_repair_iterations'
579
+ `).get();
580
+ if (!hasLedger) {
581
+ return { legacyQuarantined: 0, paused: 0, advanced: 0 };
582
+ }
583
+ return {
584
+ legacyQuarantined: quarantineLegacyReviewRepairs(),
585
+ ...await reconcileLedgerIterations(),
586
+ };
587
+ };
588
+ //# sourceMappingURL=reviewRepairReconciliation.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reviewRepairReconciliation.js","sourceRoot":"","sources":["../../../server/lib/reviewRepairReconciliation.ts"],"names":[],"mappings":"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"}
@@ -1,15 +1,26 @@
1
- export const resolveReviewerConfig = (bundle, project, fallback = null) => {
2
- if (bundle?.reviewer_model) {
1
+ import { parseStoredAgentModelConfig } from './agentModelConfig.js';
2
+ export const resolveReviewerConfig = (bundle, project, fallback = null, agent = 'opencode') => {
3
+ const hasBundleModels = bundle?.reviewer_models !== undefined || bundle?.reviewer_models_json != null;
4
+ const hasProjectModels = project?.reviewer_models_json != null;
5
+ const bundleModels = bundle?.reviewer_models ?? parseStoredAgentModelConfig(bundle?.reviewer_models_json);
6
+ const projectModels = parseStoredAgentModelConfig(project?.reviewer_models_json);
7
+ const bundleEntry = bundleModels[agent] ?? (!hasBundleModels && agent === 'opencode' && bundle?.reviewer_model
8
+ ? { model: bundle.reviewer_model, variant: bundle.reviewer_variant ?? null }
9
+ : null);
10
+ const projectEntry = projectModels[agent] ?? (!hasProjectModels && agent === 'opencode' && project?.reviewer_model
11
+ ? { model: project.reviewer_model, variant: project.reviewer_variant ?? null }
12
+ : null);
13
+ if (bundleEntry?.model) {
3
14
  return {
4
- model: bundle.reviewer_model,
5
- variant: bundle.reviewer_variant ?? null,
15
+ model: bundleEntry.model,
16
+ variant: bundleEntry.variant,
6
17
  source: 'bundle',
7
18
  };
8
19
  }
9
- if (project?.reviewer_model) {
20
+ if (projectEntry?.model) {
10
21
  return {
11
- model: project.reviewer_model,
12
- variant: project.reviewer_variant ?? null,
22
+ model: projectEntry.model,
23
+ variant: projectEntry.variant,
13
24
  source: 'project',
14
25
  };
15
26
  }