@straiffi/archon 1.7.1 → 1.7.3
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.
- package/dist/client/assets/ActivityView-DTEenQas.js +1 -0
- package/dist/client/assets/GitHubActionsDialog-BKWHonUS.js +1 -0
- package/dist/client/assets/TestsDialog-cBaoffCs.js +4 -0
- package/dist/client/assets/{architectureDiagram-3BPJPVTR-CJgwCv5O.js → architectureDiagram-3BPJPVTR-BzzGotac.js} +1 -1
- package/dist/client/assets/{blockDiagram-GPEHLZMM--xjes8FA.js → blockDiagram-GPEHLZMM-DIcqLHKg.js} +1 -1
- package/dist/client/assets/{c4Diagram-AAUBKEIU-DHnp82NG.js → c4Diagram-AAUBKEIU-Hc1Sqmhs.js} +1 -1
- package/dist/client/assets/channel-Cym17waa.js +1 -0
- package/dist/client/assets/{chunk-2J33WTMH-DAOyJCKy.js → chunk-2J33WTMH-CWSwjsgk.js} +1 -1
- package/dist/client/assets/{chunk-3OPIFGDE-C9YI_tk4.js → chunk-3OPIFGDE-BnX3DljN.js} +1 -1
- package/dist/client/assets/{chunk-5ZQYHXKU-BW9khkin.js → chunk-5ZQYHXKU-EyyJlI-d.js} +1 -1
- package/dist/client/assets/{chunk-727SXJPM-DL4t5Hpi.js → chunk-727SXJPM-Ci6CfxWj.js} +1 -1
- package/dist/client/assets/{chunk-AQP2D5EJ-C4VMKa_O.js → chunk-AQP2D5EJ-RKZNsJTm.js} +1 -1
- package/dist/client/assets/{chunk-CSCIHK7Q-DHP7zrZK.js → chunk-CSCIHK7Q-DBf0Euoj.js} +1 -1
- package/dist/client/assets/{chunk-KSCS5N6A-CqZWek3t.js → chunk-KSCS5N6A-BmLQI_2S.js} +1 -1
- package/dist/client/assets/{chunk-L5ZTLDWV-D3q55pCI.js → chunk-L5ZTLDWV-DKwVAb8G.js} +1 -1
- package/dist/client/assets/{chunk-LZXEDZCA-UDY_Lo6v.js → chunk-LZXEDZCA-axotKkbz.js} +2 -2
- package/dist/client/assets/{chunk-ND2GUHAM-ZCiOxkYV.js → chunk-ND2GUHAM-BBlJ4nXC.js} +1 -1
- package/dist/client/assets/{chunk-NZK2D7GU-CuryoBtd.js → chunk-NZK2D7GU-BKJGoZZt.js} +1 -1
- package/dist/client/assets/{chunk-O5CBEL6O-PnPsz2TB.js → chunk-O5CBEL6O-C-Ghigo1.js} +1 -1
- package/dist/client/assets/{chunk-WU5MYG2G-BzOopX-U.js → chunk-WU5MYG2G-CCzVWYcd.js} +1 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-BcigvvIC.js +1 -0
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-3AdSuE0N.js +1 -0
- package/dist/client/assets/{dagre-BM42HDAG-5LBwQ83I.js → dagre-BM42HDAG-rwIdPcjI.js} +1 -1
- package/dist/client/assets/{diagram-2AECGRRQ-_4pckiGR.js → diagram-2AECGRRQ-DJWxOQsg.js} +1 -1
- package/dist/client/assets/{diagram-5GNKFQAL-CqElv5rJ.js → diagram-5GNKFQAL-C-mQeFtd.js} +1 -1
- package/dist/client/assets/{diagram-KO2AKTUF-DKv4zS4F.js → diagram-KO2AKTUF-BAu6u4sR.js} +1 -1
- package/dist/client/assets/{diagram-LMA3HP47-iLmTH4UP.js → diagram-LMA3HP47-U6CbvBn0.js} +1 -1
- package/dist/client/assets/{diagram-OG6HWLK6-DpFYIa0o.js → diagram-OG6HWLK6-DNTwFcs1.js} +1 -1
- package/dist/client/assets/{erDiagram-TEJ5UH35-DnfbvbKs.js → erDiagram-TEJ5UH35-DaHX6Xw5.js} +1 -1
- package/dist/client/assets/{flowDiagram-I6XJVG4X-C2MN70Qv.js → flowDiagram-I6XJVG4X-B9hKqL2l.js} +1 -1
- package/dist/client/assets/{ganttDiagram-6RSMTGT7-yonpliOJ.js → ganttDiagram-6RSMTGT7-BQ1HPHVO.js} +1 -1
- package/dist/client/assets/{gitGraphDiagram-PVQCEYII-CaKDWx7y.js → gitGraphDiagram-PVQCEYII-BBRcsmMK.js} +1 -1
- package/dist/client/assets/index-CEMaJCPS.js +273 -0
- package/dist/client/assets/index-lWftq65U.css +2 -0
- package/dist/client/assets/{infoDiagram-5YYISTIA-82-8njnx.js → infoDiagram-5YYISTIA-DUoNiSGC.js} +1 -1
- package/dist/client/assets/{ishikawaDiagram-YF4QCWOH-BMiyLWwK.js → ishikawaDiagram-YF4QCWOH-DJN1y2w8.js} +1 -1
- package/dist/client/assets/{journeyDiagram-JHISSGLW-C1qBnR37.js → journeyDiagram-JHISSGLW-BxLLMT70.js} +1 -1
- package/dist/client/assets/{kanban-definition-UN3LZRKU-zByEuCzn.js → kanban-definition-UN3LZRKU-BdCPistJ.js} +1 -1
- package/dist/client/assets/{line-EpLqyzw7.js → line-4mIgXsZd.js} +1 -1
- package/dist/client/assets/{mermaid-parser.core-o124REPN.js → mermaid-parser.core-Pu1QGWJ-.js} +1 -1
- package/dist/client/assets/{mermaid.core-DgiAn2-k.js → mermaid.core-DnH9DrgZ.js} +3 -3
- package/dist/client/assets/{mindmap-definition-RKZ34NQL-UK6V0Bxq.js → mindmap-definition-RKZ34NQL-DqE4ba3C.js} +1 -1
- package/dist/client/assets/{pieDiagram-4H26LBE5-B2s9oGFl.js → pieDiagram-4H26LBE5-Crjy9ejf.js} +1 -1
- package/dist/client/assets/{quadrantDiagram-W4KKPZXB-d5H7-zcc.js → quadrantDiagram-W4KKPZXB-BUSZ2VB7.js} +1 -1
- package/dist/client/assets/{requirementDiagram-4Y6WPE33-DlwN9Vcv.js → requirementDiagram-4Y6WPE33-CBhFKEoV.js} +1 -1
- package/dist/client/assets/{sankeyDiagram-5OEKKPKP-9dGyAxu5.js → sankeyDiagram-5OEKKPKP-CgdbY41v.js} +1 -1
- package/dist/client/assets/{sequenceDiagram-3UESZ5HK-DKwRjEym.js → sequenceDiagram-3UESZ5HK-hkp_H7AE.js} +1 -1
- package/dist/client/assets/{stateDiagram-AJRCARHV-D_6cuqsX.js → stateDiagram-AJRCARHV-C6x45RWp.js} +1 -1
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-DVzPjRPN.js +1 -0
- package/dist/client/assets/{timeline-definition-PNZ67QCA-ChqD4j8I.js → timeline-definition-PNZ67QCA-CjnZWttQ.js} +1 -1
- package/dist/client/assets/{vennDiagram-CIIHVFJN-CSAZk0IW.js → vennDiagram-CIIHVFJN-DU5ZyYju.js} +1 -1
- package/dist/client/assets/{wardleyDiagram-YWT4CUSO-BUE6IF4q.js → wardleyDiagram-YWT4CUSO-CaCEnCB0.js} +1 -1
- package/dist/client/assets/{xychartDiagram-2RQKCTM6-MOkC53m_.js → xychartDiagram-2RQKCTM6-Ce3xa37U.js} +1 -1
- package/dist/client/index.html +2 -2
- package/dist/server/db.js +471 -39
- package/dist/server/db.js.map +1 -1
- package/dist/server/index.js +1267 -213
- package/dist/server/index.js.map +1 -1
- package/dist/server/lib/agent.js +281 -76
- package/dist/server/lib/agent.js.map +1 -1
- package/dist/server/lib/agentRuns.js +205 -38
- package/dist/server/lib/agentRuns.js.map +1 -1
- package/dist/server/lib/automationProgression.js +464 -0
- package/dist/server/lib/automationProgression.js.map +1 -0
- package/dist/server/lib/automationReconciliation.js +498 -0
- package/dist/server/lib/automationReconciliation.js.map +1 -0
- package/dist/server/lib/automationStageDetails.js +232 -0
- package/dist/server/lib/automationStageDetails.js.map +1 -0
- package/dist/server/lib/buildOpenQuestionOperations.js +223 -0
- package/dist/server/lib/buildOpenQuestionOperations.js.map +1 -0
- package/dist/server/lib/buildOpenQuestions.js +52 -0
- package/dist/server/lib/buildOpenQuestions.js.map +1 -1
- package/dist/server/lib/buildSequences.js +130 -46
- package/dist/server/lib/buildSequences.js.map +1 -1
- package/dist/server/lib/bundleReviewOperations.js +82 -9
- package/dist/server/lib/bundleReviewOperations.js.map +1 -1
- package/dist/server/lib/chatOperations.js +31 -0
- package/dist/server/lib/chatOperations.js.map +1 -1
- package/dist/server/lib/executionReconciliation.js +518 -0
- package/dist/server/lib/executionReconciliation.js.map +1 -0
- package/dist/server/lib/executionRunRetention.js +141 -0
- package/dist/server/lib/executionRunRetention.js.map +1 -0
- package/dist/server/lib/executionRuns.js +1264 -0
- package/dist/server/lib/executionRuns.js.map +1 -0
- package/dist/server/lib/git.js +385 -6
- package/dist/server/lib/git.js.map +1 -1
- package/dist/server/lib/integrations/github.js +43 -0
- package/dist/server/lib/integrations/github.js.map +1 -1
- package/dist/server/lib/integrations/githubActions.js +1 -0
- package/dist/server/lib/integrations/githubActions.js.map +1 -1
- package/dist/server/lib/integrations/githubActionsSessions.js +337 -114
- package/dist/server/lib/integrations/githubActionsSessions.js.map +1 -1
- package/dist/server/lib/projectMemorySelections.js +7 -3
- package/dist/server/lib/projectMemorySelections.js.map +1 -1
- package/dist/server/lib/shutdown.js +2 -2
- package/dist/server/lib/shutdown.js.map +1 -1
- package/dist/server/lib/specArtifact.js +3 -0
- package/dist/server/lib/specArtifact.js.map +1 -1
- package/dist/server/lib/specFormatting.js +1 -1
- package/dist/server/lib/specFormatting.js.map +1 -1
- package/dist/server/lib/specOperations.js +31 -0
- package/dist/server/lib/specOperations.js.map +1 -1
- package/dist/server/lib/specReviewContext.js +44 -14
- package/dist/server/lib/specReviewContext.js.map +1 -1
- package/dist/server/lib/specReviewDraft.js +3 -2
- package/dist/server/lib/specReviewDraft.js.map +1 -1
- package/dist/server/lib/specReviewOperations.js +44 -7
- package/dist/server/lib/specReviewOperations.js.map +1 -1
- package/dist/server/lib/specReviewValidation.js +217 -0
- package/dist/server/lib/specReviewValidation.js.map +1 -0
- package/dist/server/lib/specReviews.js +30 -2
- package/dist/server/lib/specReviews.js.map +1 -1
- package/dist/server/lib/specs.js +18 -1
- package/dist/server/lib/specs.js.map +1 -1
- package/dist/server/lib/stageSnapshots.js +197 -0
- package/dist/server/lib/stageSnapshots.js.map +1 -0
- package/dist/server/lib/testSessions.js +164 -19
- package/dist/server/lib/testSessions.js.map +1 -1
- package/dist/server/lib/ticketAutomation.js +80 -4
- package/dist/server/lib/ticketAutomation.js.map +1 -1
- package/dist/server/lib/ticketAutomationCommit.js +466 -91
- package/dist/server/lib/ticketAutomationCommit.js.map +1 -1
- package/dist/server/lib/ticketFollowUpOperations.js +214 -20
- package/dist/server/lib/ticketFollowUpOperations.js.map +1 -1
- package/dist/server/lib/ticketOpenQuestions.js +30 -14
- package/dist/server/lib/ticketOpenQuestions.js.map +1 -1
- package/dist/server/lib/ticketRunOperations.js +75 -7
- package/dist/server/lib/ticketRunOperations.js.map +1 -1
- package/dist/server/lib/ticketUndo.js +77 -168
- package/dist/server/lib/ticketUndo.js.map +1 -1
- package/dist/server/lib/ticketWorkflowOperations.js +132 -28
- package/dist/server/lib/ticketWorkflowOperations.js.map +1 -1
- package/dist/server/lib/tickets.js +46 -29
- package/dist/server/lib/tickets.js.map +1 -1
- package/dist/server/lib/transcriptRuns.js +3 -3
- package/dist/server/lib/transcriptRuns.js.map +1 -1
- package/dist/server/lib/turnExecutionErrors.js +12 -0
- package/dist/server/lib/turnExecutionErrors.js.map +1 -0
- package/dist/server/lib/types.js +57 -1
- package/dist/server/lib/types.js.map +1 -1
- package/dist/server/workers/build.js +596 -184
- package/dist/server/workers/build.js.map +1 -1
- package/dist/server/workers/chat.js +261 -130
- package/dist/server/workers/chat.js.map +1 -1
- package/dist/server/workers/followUp.js +720 -195
- package/dist/server/workers/followUp.js.map +1 -1
- package/dist/server/workers/plan.js +527 -188
- package/dist/server/workers/plan.js.map +1 -1
- package/dist/server/workers/planFollowUp.js +231 -69
- package/dist/server/workers/planFollowUp.js.map +1 -1
- package/dist/server/workers/review.js +796 -239
- package/dist/server/workers/review.js.map +1 -1
- package/dist/server/workers/specReview.js +211 -45
- package/dist/server/workers/specReview.js.map +1 -1
- package/dist/server/workers/specSession.js +425 -252
- package/dist/server/workers/specSession.js.map +1 -1
- package/package.json +1 -1
- package/dist/client/assets/GitHubActionsDialog-BrUq-zO1.js +0 -1
- package/dist/client/assets/TestsDialog-D9N4GD77.js +0 -4
- package/dist/client/assets/TicketChangesModal-bYHJSO6d.js +0 -1
- package/dist/client/assets/channel-B4kCvLCt.js +0 -1
- package/dist/client/assets/classDiagram-4FO5ZUOK-C-eRRNNj.js +0 -1
- package/dist/client/assets/classDiagram-v2-Q7XG4LA2-B3vxoc73.js +0 -1
- package/dist/client/assets/index-9q1GXkUw.js +0 -270
- package/dist/client/assets/index-BxTc5qQT.css +0 -2
- package/dist/client/assets/stateDiagram-v2-BHNVJYJU-BkMKz90T.js +0 -1
|
@@ -0,0 +1,518 @@
|
|
|
1
|
+
import db from '../db.js';
|
|
2
|
+
import { terminalizeAgentRunsForExecutionRun, terminalizeLegacyAgentRuns } from './agentRuns.js';
|
|
3
|
+
import { recoverInterruptedBuildOpenQuestionBatch } from './buildOpenQuestions.js';
|
|
4
|
+
import { reconcileActiveBuildSequences } from './buildSequences.js';
|
|
5
|
+
import { reconcileInterruptedTestRuns, withExecutionRunTransaction } from './executionRuns.js';
|
|
6
|
+
import { reconcileGitHubActionsRuns } from './integrations/githubActionsSessions.js';
|
|
7
|
+
import { reconcileInterruptedSpecReviewRuns } from './specReviews.js';
|
|
8
|
+
import { getWaitingOpenQuestionProgression, resolveProgressionForChild, waitAutomationProgression, } from './automationProgression.js';
|
|
9
|
+
import { getBundleAutomationState } from './ticketAutomation.js';
|
|
10
|
+
import { reconcileAutomationExecutions } from './automationReconciliation.js';
|
|
11
|
+
const ACTIVE_EXECUTION_STATUSES = "('queued', 'running', 'waiting')";
|
|
12
|
+
const RESTART_FAILURE_MESSAGE = 'Interrupted by server restart';
|
|
13
|
+
const directWorkflowPolicies = [
|
|
14
|
+
{
|
|
15
|
+
kind: 'build',
|
|
16
|
+
eventType: 'build_interrupted',
|
|
17
|
+
failureMessage: 'The server restarted while this Build run was active.',
|
|
18
|
+
domainParent: { sourceKind: 'ticket', table: 'tickets' },
|
|
19
|
+
},
|
|
20
|
+
{
|
|
21
|
+
kind: 'review',
|
|
22
|
+
eventType: 'review_interrupted',
|
|
23
|
+
failureMessage: 'The server restarted while this Review run was active.',
|
|
24
|
+
domainParent: { sourceKind: 'ticket', table: 'tickets' },
|
|
25
|
+
},
|
|
26
|
+
{
|
|
27
|
+
kind: 'build_follow_up',
|
|
28
|
+
eventType: 'build_follow_up_interrupted',
|
|
29
|
+
failureMessage: 'The server restarted while this Build follow-up was active.',
|
|
30
|
+
domainParent: { sourceKind: 'ticket', table: 'tickets' },
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
kind: 'plan',
|
|
34
|
+
eventType: 'plan_interrupted',
|
|
35
|
+
failureMessage: 'The server restarted while this Plan run was active.',
|
|
36
|
+
domainParent: { sourceKind: 'ticket', table: 'tickets' },
|
|
37
|
+
},
|
|
38
|
+
{
|
|
39
|
+
kind: 'plan_follow_up',
|
|
40
|
+
eventType: 'plan_follow_up_interrupted',
|
|
41
|
+
failureMessage: 'The server restarted while this Plan follow-up was active.',
|
|
42
|
+
domainParent: { sourceKind: 'ticket', table: 'tickets' },
|
|
43
|
+
},
|
|
44
|
+
{
|
|
45
|
+
kind: 'planning_agent',
|
|
46
|
+
eventType: 'planning_agent_interrupted',
|
|
47
|
+
failureMessage: 'The server restarted while this planning-agent run was active.',
|
|
48
|
+
},
|
|
49
|
+
{
|
|
50
|
+
kind: 'chat_turn',
|
|
51
|
+
eventType: 'chat_turn_interrupted',
|
|
52
|
+
failureMessage: 'The server restarted while this Chat turn was active.',
|
|
53
|
+
domainParent: { sourceKind: 'chat_session', table: 'chat_sessions' },
|
|
54
|
+
},
|
|
55
|
+
{
|
|
56
|
+
kind: 'spec_turn',
|
|
57
|
+
eventType: 'spec_turn_interrupted',
|
|
58
|
+
failureMessage: 'The server restarted while this Spec turn was active.',
|
|
59
|
+
domainParent: { sourceKind: 'spec_session', table: 'spec_sessions' },
|
|
60
|
+
},
|
|
61
|
+
];
|
|
62
|
+
const getBuildOpenQuestionBatchId = (metadataJson) => {
|
|
63
|
+
if (!metadataJson) {
|
|
64
|
+
return null;
|
|
65
|
+
}
|
|
66
|
+
try {
|
|
67
|
+
const metadata = JSON.parse(metadataJson);
|
|
68
|
+
if (!metadata || typeof metadata !== 'object' || Array.isArray(metadata)) {
|
|
69
|
+
return null;
|
|
70
|
+
}
|
|
71
|
+
const batchId = metadata.build_open_question_batch_id;
|
|
72
|
+
return typeof batchId === 'string' && batchId.length > 0 ? batchId : null;
|
|
73
|
+
}
|
|
74
|
+
catch {
|
|
75
|
+
return null;
|
|
76
|
+
}
|
|
77
|
+
};
|
|
78
|
+
const ownsBuildOpenQuestionBatch = (run, batch) => {
|
|
79
|
+
if (run.project_id !== batch.project_id || run.source_kind !== 'ticket' || !run.source_id || run.initiated_by !== 'user') {
|
|
80
|
+
return false;
|
|
81
|
+
}
|
|
82
|
+
const ownership = db.prepare(`
|
|
83
|
+
SELECT 1
|
|
84
|
+
FROM tickets
|
|
85
|
+
WHERE tickets.id = ?
|
|
86
|
+
AND tickets.project_id = ?
|
|
87
|
+
AND tickets.worktree_bundle_id = ?
|
|
88
|
+
AND EXISTS (
|
|
89
|
+
SELECT 1 FROM execution_run_links
|
|
90
|
+
WHERE execution_run_id = ? AND project_id = ?
|
|
91
|
+
AND entity_type = 'ticket' AND entity_id = tickets.id AND relationship = 'primary'
|
|
92
|
+
)
|
|
93
|
+
AND EXISTS (
|
|
94
|
+
SELECT 1 FROM execution_run_links
|
|
95
|
+
WHERE execution_run_id = ? AND project_id = ?
|
|
96
|
+
AND entity_type = 'bundle' AND entity_id = ? AND relationship = 'context'
|
|
97
|
+
)
|
|
98
|
+
AND EXISTS (
|
|
99
|
+
SELECT 1
|
|
100
|
+
FROM execution_run_links trigger_link
|
|
101
|
+
JOIN ticket_messages trigger_message ON trigger_message.id = trigger_link.entity_id
|
|
102
|
+
WHERE trigger_link.execution_run_id = ? AND trigger_link.project_id = ?
|
|
103
|
+
AND trigger_link.entity_type = 'ticket_message' AND trigger_link.relationship = 'trigger'
|
|
104
|
+
AND trigger_message.ticket_id = tickets.id
|
|
105
|
+
)
|
|
106
|
+
`).get(run.source_id, batch.project_id, batch.worktree_bundle_id, run.id, batch.project_id, run.id, batch.project_id, batch.worktree_bundle_id, run.id, batch.project_id);
|
|
107
|
+
return Boolean(ownership);
|
|
108
|
+
};
|
|
109
|
+
const interruptBuildOpenQuestionRun = (transaction, run) => {
|
|
110
|
+
transaction.transitionExecutionRun({
|
|
111
|
+
projectId: run.project_id,
|
|
112
|
+
runId: run.id,
|
|
113
|
+
status: 'interrupted',
|
|
114
|
+
domainStatus: 'interrupted',
|
|
115
|
+
failure: {
|
|
116
|
+
code: 'server_restarted',
|
|
117
|
+
message: 'The server restarted while this Build open question follow-up was active.',
|
|
118
|
+
},
|
|
119
|
+
eventType: 'build_follow_up_interrupted',
|
|
120
|
+
eventMessage: 'The server restarted while this Build open question follow-up was active.',
|
|
121
|
+
});
|
|
122
|
+
const terminalized = terminalizeAgentRunsForExecutionRun(run.id, 'error', RESTART_FAILURE_MESSAGE);
|
|
123
|
+
const errored = run.source_kind === 'ticket' && run.source_id
|
|
124
|
+
? db.prepare(`
|
|
125
|
+
UPDATE tickets SET agent_status = 'error'
|
|
126
|
+
WHERE id = ? AND project_id = ? AND agent_status = 'running'
|
|
127
|
+
`).run(run.source_id, run.project_id).changes
|
|
128
|
+
: 0;
|
|
129
|
+
return { terminalized, errored };
|
|
130
|
+
};
|
|
131
|
+
const reconcileBuildOpenQuestionBatches = () => {
|
|
132
|
+
const batches = db.prepare(`
|
|
133
|
+
SELECT id, project_id, worktree_bundle_id
|
|
134
|
+
FROM build_open_question_batches
|
|
135
|
+
WHERE status IN ('pending', 'running')
|
|
136
|
+
ORDER BY created_at ASC, id ASC
|
|
137
|
+
`).all();
|
|
138
|
+
const runs = db.prepare(`
|
|
139
|
+
SELECT id, project_id, source_kind, source_id, metadata_json, initiated_by
|
|
140
|
+
FROM execution_runs
|
|
141
|
+
WHERE kind = 'build_follow_up' AND status IN ${ACTIVE_EXECUTION_STATUSES}
|
|
142
|
+
ORDER BY created_at ASC, id ASC
|
|
143
|
+
`).all();
|
|
144
|
+
let adoptedInterrupted = 0;
|
|
145
|
+
let legacyRecovered = 0;
|
|
146
|
+
let childRowsTerminalized = 0;
|
|
147
|
+
let ticketsErrored = 0;
|
|
148
|
+
let questionsReopened = 0;
|
|
149
|
+
let automationPaused = 0;
|
|
150
|
+
let inconsistentBatchesRecovered = 0;
|
|
151
|
+
const createLegacyRecoveryProgression = (batch) => {
|
|
152
|
+
const state = getBundleAutomationState(batch.project_id, batch.worktree_bundle_id);
|
|
153
|
+
if (!state?.automation_progression_run_id
|
|
154
|
+
&& !state?.automation_pause_reason_code
|
|
155
|
+
&& (!state?.automation_paused_reason || state.automation_paused_code === 'open_questions')) {
|
|
156
|
+
return getWaitingOpenQuestionProgression({
|
|
157
|
+
projectId: batch.project_id,
|
|
158
|
+
bundleId: batch.worktree_bundle_id,
|
|
159
|
+
});
|
|
160
|
+
}
|
|
161
|
+
return null;
|
|
162
|
+
};
|
|
163
|
+
for (const batch of batches) {
|
|
164
|
+
const referencedRuns = runs.filter(run => getBuildOpenQuestionBatchId(run.metadata_json) === batch.id);
|
|
165
|
+
const ownedRuns = referencedRuns.filter(run => {
|
|
166
|
+
if (!ownsBuildOpenQuestionBatch(run, batch)) {
|
|
167
|
+
return false;
|
|
168
|
+
}
|
|
169
|
+
try {
|
|
170
|
+
resolveProgressionForChild({
|
|
171
|
+
projectId: batch.project_id,
|
|
172
|
+
bundleId: batch.worktree_bundle_id,
|
|
173
|
+
childRunId: run.id,
|
|
174
|
+
});
|
|
175
|
+
return true;
|
|
176
|
+
}
|
|
177
|
+
catch {
|
|
178
|
+
return false;
|
|
179
|
+
}
|
|
180
|
+
});
|
|
181
|
+
if (referencedRuns.length > 0 && (referencedRuns.length !== 1 || ownedRuns.length !== 1)) {
|
|
182
|
+
createLegacyRecoveryProgression(batch);
|
|
183
|
+
const recovered = withExecutionRunTransaction(transaction => {
|
|
184
|
+
let terminalized = 0;
|
|
185
|
+
let errored = 0;
|
|
186
|
+
for (const referencedRun of referencedRuns) {
|
|
187
|
+
const interrupted = interruptBuildOpenQuestionRun(transaction, referencedRun);
|
|
188
|
+
terminalized += interrupted.terminalized;
|
|
189
|
+
errored += interrupted.errored;
|
|
190
|
+
}
|
|
191
|
+
return {
|
|
192
|
+
terminalized,
|
|
193
|
+
errored,
|
|
194
|
+
batchRecovery: recoverInterruptedBuildOpenQuestionBatch(batch.id),
|
|
195
|
+
};
|
|
196
|
+
});
|
|
197
|
+
inconsistentBatchesRecovered += recovered.batchRecovery.batch_recovered;
|
|
198
|
+
childRowsTerminalized += recovered.terminalized;
|
|
199
|
+
ticketsErrored += recovered.errored;
|
|
200
|
+
questionsReopened += recovered.batchRecovery.questions_reopened;
|
|
201
|
+
automationPaused += recovered.batchRecovery.automation_paused;
|
|
202
|
+
continue;
|
|
203
|
+
}
|
|
204
|
+
const [ownedRun] = ownedRuns;
|
|
205
|
+
if (ownedRun) {
|
|
206
|
+
const progression = resolveProgressionForChild({
|
|
207
|
+
projectId: batch.project_id,
|
|
208
|
+
bundleId: batch.worktree_bundle_id,
|
|
209
|
+
childRunId: ownedRun.id,
|
|
210
|
+
});
|
|
211
|
+
const recovered = withExecutionRunTransaction(transaction => {
|
|
212
|
+
const interrupted = interruptBuildOpenQuestionRun(transaction, ownedRun);
|
|
213
|
+
const batchRecovery = recoverInterruptedBuildOpenQuestionBatch(batch.id);
|
|
214
|
+
waitAutomationProgression({
|
|
215
|
+
projectId: batch.project_id,
|
|
216
|
+
bundleId: batch.worktree_bundle_id,
|
|
217
|
+
progressionRunId: progression.id,
|
|
218
|
+
pauseCode: 'open_questions',
|
|
219
|
+
pauseReason: 'Build open question follow-up was interrupted by a server restart',
|
|
220
|
+
reasonCode: 'server_restart',
|
|
221
|
+
pausedStageRunId: ownedRun.id,
|
|
222
|
+
});
|
|
223
|
+
return { ...interrupted, batchRecovery };
|
|
224
|
+
});
|
|
225
|
+
adoptedInterrupted += recovered.batchRecovery.batch_recovered;
|
|
226
|
+
childRowsTerminalized += recovered.terminalized;
|
|
227
|
+
ticketsErrored += recovered.errored;
|
|
228
|
+
questionsReopened += recovered.batchRecovery.questions_reopened;
|
|
229
|
+
automationPaused += recovered.batchRecovery.automation_paused;
|
|
230
|
+
continue;
|
|
231
|
+
}
|
|
232
|
+
createLegacyRecoveryProgression(batch);
|
|
233
|
+
const recovered = db.transaction(() => recoverInterruptedBuildOpenQuestionBatch(batch.id))();
|
|
234
|
+
legacyRecovered += recovered.batch_recovered;
|
|
235
|
+
questionsReopened += recovered.questions_reopened;
|
|
236
|
+
automationPaused += recovered.automation_paused;
|
|
237
|
+
}
|
|
238
|
+
return {
|
|
239
|
+
adopted_interrupted: adoptedInterrupted,
|
|
240
|
+
legacy_recovered: legacyRecovered,
|
|
241
|
+
child_rows_terminalized: childRowsTerminalized,
|
|
242
|
+
tickets_errored: ticketsErrored,
|
|
243
|
+
questions_reopened: questionsReopened,
|
|
244
|
+
automation_paused: automationPaused,
|
|
245
|
+
inconsistent_batches_recovered: inconsistentBatchesRecovered,
|
|
246
|
+
};
|
|
247
|
+
};
|
|
248
|
+
const interruptSequenceBuild = (input) => {
|
|
249
|
+
const rows = db.prepare(`
|
|
250
|
+
SELECT execution_runs.id, execution_runs.project_id
|
|
251
|
+
FROM execution_runs
|
|
252
|
+
INNER JOIN execution_run_links sequence_link
|
|
253
|
+
ON sequence_link.execution_run_id = execution_runs.id
|
|
254
|
+
AND sequence_link.project_id = execution_runs.project_id
|
|
255
|
+
AND sequence_link.entity_type = 'build_sequence'
|
|
256
|
+
AND sequence_link.entity_id = ?
|
|
257
|
+
AND sequence_link.relationship = 'context'
|
|
258
|
+
INNER JOIN execution_run_links ticket_link
|
|
259
|
+
ON ticket_link.execution_run_id = execution_runs.id
|
|
260
|
+
AND ticket_link.project_id = execution_runs.project_id
|
|
261
|
+
AND ticket_link.entity_type = 'ticket'
|
|
262
|
+
AND ticket_link.entity_id = ?
|
|
263
|
+
AND ticket_link.relationship = 'primary'
|
|
264
|
+
WHERE execution_runs.project_id = ?
|
|
265
|
+
AND execution_runs.kind = 'build'
|
|
266
|
+
AND execution_runs.status IN ${ACTIVE_EXECUTION_STATUSES}
|
|
267
|
+
`).all(input.sequenceId, input.ticketId, input.projectId);
|
|
268
|
+
if (rows.length > 1) {
|
|
269
|
+
return false;
|
|
270
|
+
}
|
|
271
|
+
if (rows.length === 0) {
|
|
272
|
+
db.prepare(`
|
|
273
|
+
UPDATE tickets SET agent_status = 'error'
|
|
274
|
+
WHERE id = ? AND project_id = ? AND (agent_status = 'running' OR agent_status IS NULL)
|
|
275
|
+
`).run(input.ticketId, input.projectId);
|
|
276
|
+
return true;
|
|
277
|
+
}
|
|
278
|
+
const [run] = rows;
|
|
279
|
+
withExecutionRunTransaction(transaction => {
|
|
280
|
+
transaction.transitionExecutionRun({
|
|
281
|
+
projectId: run.project_id,
|
|
282
|
+
runId: run.id,
|
|
283
|
+
status: 'interrupted',
|
|
284
|
+
domainStatus: 'interrupted',
|
|
285
|
+
failure: { code: 'server_restarted', message: 'The server restarted while this sequenced Build run was active.' },
|
|
286
|
+
eventType: 'build_interrupted',
|
|
287
|
+
eventMessage: 'The server restarted while this sequenced Build run was active.',
|
|
288
|
+
});
|
|
289
|
+
terminalizeAgentRunsForExecutionRun(run.id, 'error', RESTART_FAILURE_MESSAGE);
|
|
290
|
+
db.prepare(`
|
|
291
|
+
UPDATE tickets SET agent_status = 'error'
|
|
292
|
+
WHERE id = ? AND project_id = ? AND (agent_status = 'running' OR agent_status IS NULL)
|
|
293
|
+
`).run(input.ticketId, input.projectId);
|
|
294
|
+
});
|
|
295
|
+
return true;
|
|
296
|
+
};
|
|
297
|
+
const reconcileSpecReviews = () => {
|
|
298
|
+
const rows = db.prepare(`
|
|
299
|
+
SELECT id, project_id
|
|
300
|
+
FROM execution_runs
|
|
301
|
+
WHERE kind = 'spec_review' AND status IN ${ACTIVE_EXECUTION_STATUSES}
|
|
302
|
+
ORDER BY created_at ASC, id ASC
|
|
303
|
+
`).all();
|
|
304
|
+
let childRowsTerminalized = 0;
|
|
305
|
+
let domainRunsErrored = 0;
|
|
306
|
+
for (const row of rows) {
|
|
307
|
+
withExecutionRunTransaction(transaction => {
|
|
308
|
+
domainRunsErrored += db.prepare(`
|
|
309
|
+
UPDATE spec_review_runs
|
|
310
|
+
SET agent_status = 'error',
|
|
311
|
+
response_text = COALESCE(response_text, ?),
|
|
312
|
+
streaming_response = NULL,
|
|
313
|
+
completed_at = CURRENT_TIMESTAMP
|
|
314
|
+
WHERE agent_status = 'running'
|
|
315
|
+
AND id IN (
|
|
316
|
+
SELECT entity_id
|
|
317
|
+
FROM execution_run_links
|
|
318
|
+
WHERE execution_run_id = ?
|
|
319
|
+
AND entity_type = 'spec_review_run'
|
|
320
|
+
AND relationship = 'result'
|
|
321
|
+
)
|
|
322
|
+
`).run(RESTART_FAILURE_MESSAGE, row.id).changes;
|
|
323
|
+
childRowsTerminalized += terminalizeAgentRunsForExecutionRun(row.id, 'error', RESTART_FAILURE_MESSAGE);
|
|
324
|
+
transaction.transitionExecutionRun({
|
|
325
|
+
projectId: row.project_id,
|
|
326
|
+
runId: row.id,
|
|
327
|
+
status: 'interrupted',
|
|
328
|
+
domainStatus: 'error',
|
|
329
|
+
failure: { code: 'server_restarted', message: 'The server restarted while this Spec Review was active.' },
|
|
330
|
+
eventType: 'spec_review_interrupted',
|
|
331
|
+
eventMessage: 'The server restarted while this Spec Review was active.',
|
|
332
|
+
});
|
|
333
|
+
});
|
|
334
|
+
}
|
|
335
|
+
const legacyRunsErrored = reconcileInterruptedSpecReviewRuns();
|
|
336
|
+
return {
|
|
337
|
+
interrupted: rows.length,
|
|
338
|
+
child_rows_terminalized: childRowsTerminalized,
|
|
339
|
+
domain_runs_errored: domainRunsErrored,
|
|
340
|
+
legacy_runs_errored: legacyRunsErrored,
|
|
341
|
+
};
|
|
342
|
+
};
|
|
343
|
+
const reconcileDirectWorkflow = (policy) => {
|
|
344
|
+
const rows = db.prepare(`
|
|
345
|
+
SELECT id, project_id, source_kind, source_id
|
|
346
|
+
FROM execution_runs
|
|
347
|
+
WHERE kind = ? AND status IN ${ACTIVE_EXECUTION_STATUSES}
|
|
348
|
+
AND NOT EXISTS (
|
|
349
|
+
SELECT 1 FROM execution_runs parent
|
|
350
|
+
WHERE parent.id = execution_runs.parent_run_id
|
|
351
|
+
AND parent.project_id = execution_runs.project_id
|
|
352
|
+
AND parent.kind IN ('automation_progression', 'automation_review_fix')
|
|
353
|
+
)
|
|
354
|
+
ORDER BY created_at ASC, id ASC
|
|
355
|
+
`).all(policy.kind);
|
|
356
|
+
let childRowsTerminalized = 0;
|
|
357
|
+
let domainParentsErrored = 0;
|
|
358
|
+
const interruptRun = (row) => {
|
|
359
|
+
withExecutionRunTransaction(transaction => {
|
|
360
|
+
transaction.transitionExecutionRun({
|
|
361
|
+
projectId: row.project_id,
|
|
362
|
+
runId: row.id,
|
|
363
|
+
status: 'interrupted',
|
|
364
|
+
domainStatus: 'interrupted',
|
|
365
|
+
failure: {
|
|
366
|
+
code: 'server_restarted',
|
|
367
|
+
message: policy.failureMessage,
|
|
368
|
+
},
|
|
369
|
+
eventType: policy.eventType,
|
|
370
|
+
eventMessage: policy.failureMessage,
|
|
371
|
+
});
|
|
372
|
+
childRowsTerminalized += terminalizeAgentRunsForExecutionRun(row.id, 'error', RESTART_FAILURE_MESSAGE);
|
|
373
|
+
if (policy.domainParent && row.source_kind === policy.domainParent.sourceKind && row.source_id) {
|
|
374
|
+
const parentStatusCondition = policy.kind === 'review' || policy.kind === 'build'
|
|
375
|
+
? "(agent_status = 'running' OR agent_status IS NULL)"
|
|
376
|
+
: "agent_status = 'running'";
|
|
377
|
+
domainParentsErrored += db.prepare(`
|
|
378
|
+
UPDATE ${policy.domainParent.table}
|
|
379
|
+
SET agent_status = 'error'
|
|
380
|
+
WHERE id = ? AND project_id = ? AND ${parentStatusCondition}
|
|
381
|
+
`).run(row.source_id, row.project_id).changes;
|
|
382
|
+
}
|
|
383
|
+
});
|
|
384
|
+
};
|
|
385
|
+
for (const row of rows) {
|
|
386
|
+
interruptRun(row);
|
|
387
|
+
}
|
|
388
|
+
if (policy.domainParent) {
|
|
389
|
+
domainParentsErrored += db.prepare(`
|
|
390
|
+
UPDATE ${policy.domainParent.table}
|
|
391
|
+
SET agent_status = 'error'
|
|
392
|
+
WHERE agent_status = 'running'
|
|
393
|
+
AND NOT EXISTS (
|
|
394
|
+
SELECT 1
|
|
395
|
+
FROM execution_run_links owner_link
|
|
396
|
+
JOIN execution_runs owner_run ON owner_run.id = owner_link.execution_run_id
|
|
397
|
+
WHERE owner_link.project_id = ${policy.domainParent.table}.project_id
|
|
398
|
+
AND owner_link.entity_type = ?
|
|
399
|
+
AND owner_link.entity_id = ${policy.domainParent.table}.id
|
|
400
|
+
AND owner_link.relationship = 'primary'
|
|
401
|
+
AND owner_run.status IN ${ACTIVE_EXECUTION_STATUSES}
|
|
402
|
+
)
|
|
403
|
+
`).run(policy.domainParent.sourceKind).changes;
|
|
404
|
+
}
|
|
405
|
+
return {
|
|
406
|
+
interrupted: rows.length,
|
|
407
|
+
child_rows_terminalized: childRowsTerminalized,
|
|
408
|
+
domain_parents_errored: domainParentsErrored,
|
|
409
|
+
};
|
|
410
|
+
};
|
|
411
|
+
export const createExecutionReconciliationPolicies = (input) => [
|
|
412
|
+
{
|
|
413
|
+
key: 'automation',
|
|
414
|
+
workLocality: 'durable_orchestration',
|
|
415
|
+
startupStrategy: 'reconcile',
|
|
416
|
+
terminalStatus: null,
|
|
417
|
+
failureCode: null,
|
|
418
|
+
updatesDomainRecords: true,
|
|
419
|
+
pausesAutomation: true,
|
|
420
|
+
reconcile: reconcileAutomationExecutions,
|
|
421
|
+
},
|
|
422
|
+
{
|
|
423
|
+
key: 'test',
|
|
424
|
+
workLocality: 'local_process',
|
|
425
|
+
startupStrategy: 'interrupt',
|
|
426
|
+
terminalStatus: 'interrupted',
|
|
427
|
+
failureCode: 'server_restarted',
|
|
428
|
+
updatesDomainRecords: false,
|
|
429
|
+
pausesAutomation: false,
|
|
430
|
+
reconcile: () => ({ interrupted: reconcileInterruptedTestRuns() }),
|
|
431
|
+
},
|
|
432
|
+
{
|
|
433
|
+
key: 'build_sequence',
|
|
434
|
+
workLocality: 'durable_orchestration',
|
|
435
|
+
startupStrategy: 'reconcile',
|
|
436
|
+
terminalStatus: 'interrupted',
|
|
437
|
+
failureCode: 'server_restarted',
|
|
438
|
+
updatesDomainRecords: true,
|
|
439
|
+
pausesAutomation: false,
|
|
440
|
+
reconcile: () => reconcileActiveBuildSequences({ interruptActiveChild: interruptSequenceBuild }),
|
|
441
|
+
},
|
|
442
|
+
{
|
|
443
|
+
key: 'build_open_question_batch',
|
|
444
|
+
workLocality: 'durable_orchestration',
|
|
445
|
+
startupStrategy: 'reconcile',
|
|
446
|
+
terminalStatus: 'interrupted',
|
|
447
|
+
failureCode: 'server_restarted',
|
|
448
|
+
updatesDomainRecords: true,
|
|
449
|
+
pausesAutomation: true,
|
|
450
|
+
reconcile: reconcileBuildOpenQuestionBatches,
|
|
451
|
+
},
|
|
452
|
+
...directWorkflowPolicies.map(policy => ({
|
|
453
|
+
key: policy.kind,
|
|
454
|
+
workLocality: 'local_process',
|
|
455
|
+
startupStrategy: 'interrupt',
|
|
456
|
+
terminalStatus: 'interrupted',
|
|
457
|
+
failureCode: 'server_restarted',
|
|
458
|
+
updatesDomainRecords: Boolean(policy.domainParent),
|
|
459
|
+
pausesAutomation: false,
|
|
460
|
+
reconcile: () => reconcileDirectWorkflow(policy),
|
|
461
|
+
})),
|
|
462
|
+
{
|
|
463
|
+
key: 'spec_review',
|
|
464
|
+
workLocality: 'local_process',
|
|
465
|
+
startupStrategy: 'interrupt',
|
|
466
|
+
terminalStatus: 'interrupted',
|
|
467
|
+
failureCode: 'server_restarted',
|
|
468
|
+
updatesDomainRecords: true,
|
|
469
|
+
pausesAutomation: false,
|
|
470
|
+
reconcile: reconcileSpecReviews,
|
|
471
|
+
},
|
|
472
|
+
{
|
|
473
|
+
key: 'github_actions',
|
|
474
|
+
workLocality: 'externally_observable',
|
|
475
|
+
startupStrategy: 'reconcile',
|
|
476
|
+
terminalStatus: null,
|
|
477
|
+
failureCode: null,
|
|
478
|
+
updatesDomainRecords: false,
|
|
479
|
+
pausesAutomation: false,
|
|
480
|
+
reconcile: () => reconcileGitHubActionsRuns({
|
|
481
|
+
getConfig: input.getGitHubConfig,
|
|
482
|
+
startPolling: false,
|
|
483
|
+
}),
|
|
484
|
+
},
|
|
485
|
+
];
|
|
486
|
+
export const reconcileStartupExecutions = async (input) => {
|
|
487
|
+
const policies = input.policies ?? createExecutionReconciliationPolicies(input);
|
|
488
|
+
const summary = {};
|
|
489
|
+
const failures = [];
|
|
490
|
+
const policyKeys = new Set();
|
|
491
|
+
for (const policy of policies) {
|
|
492
|
+
if (policyKeys.has(policy.key)) {
|
|
493
|
+
throw new Error(`Duplicate startup reconciliation policy key: ${policy.key}`);
|
|
494
|
+
}
|
|
495
|
+
policyKeys.add(policy.key);
|
|
496
|
+
}
|
|
497
|
+
const legacyRowsTerminalized = terminalizeLegacyAgentRuns('error', RESTART_FAILURE_MESSAGE);
|
|
498
|
+
summary.legacy_agent_runs = { terminalized: legacyRowsTerminalized };
|
|
499
|
+
for (const policy of policies) {
|
|
500
|
+
try {
|
|
501
|
+
summary[policy.key] = await policy.reconcile();
|
|
502
|
+
}
|
|
503
|
+
catch (error) {
|
|
504
|
+
const failure = error instanceof Error ? error : new Error(String(error));
|
|
505
|
+
summary[policy.key] = { policy_failed: 1 };
|
|
506
|
+
failures.push(new Error(`${policy.key}: ${failure.message}`, { cause: failure }));
|
|
507
|
+
}
|
|
508
|
+
}
|
|
509
|
+
console.info('[execution-reconciliation] Startup reconciliation summary', {
|
|
510
|
+
policies: policies.map(({ reconcile: _reconcile, ...policy }) => policy),
|
|
511
|
+
outcomes: summary,
|
|
512
|
+
});
|
|
513
|
+
if (failures.length > 0) {
|
|
514
|
+
throw new AggregateError(failures, `Startup execution reconciliation failed for ${failures.length} policy/policies`);
|
|
515
|
+
}
|
|
516
|
+
return summary;
|
|
517
|
+
};
|
|
518
|
+
//# sourceMappingURL=executionReconciliation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"executionReconciliation.js","sourceRoot":"","sources":["../../../server/lib/executionReconciliation.ts"],"names":[],"mappings":"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"}
|