codex-orchestrator 0.1.47 → 0.1.49

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 (180) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/dist/src/config/schema.d.ts +5 -1
  3. package/dist/src/config/schema.d.ts.map +1 -1
  4. package/dist/src/config/schema.js +16 -0
  5. package/dist/src/config/schema.js.map +1 -1
  6. package/dist/src/github/gh-issue-adapter.d.ts +3 -1
  7. package/dist/src/github/gh-issue-adapter.d.ts.map +1 -1
  8. package/dist/src/github/gh-issue-adapter.js +44 -6
  9. package/dist/src/github/gh-issue-adapter.js.map +1 -1
  10. package/dist/src/github/gh-pull-request-adapter.d.ts +3 -1
  11. package/dist/src/github/gh-pull-request-adapter.d.ts.map +1 -1
  12. package/dist/src/github/gh-pull-request-adapter.js +74 -0
  13. package/dist/src/github/gh-pull-request-adapter.js.map +1 -1
  14. package/dist/src/github/issues.d.ts +4 -0
  15. package/dist/src/github/issues.d.ts.map +1 -1
  16. package/dist/src/github/issues.js +6 -0
  17. package/dist/src/github/issues.js.map +1 -1
  18. package/dist/src/github/pull-requests.d.ts +9 -0
  19. package/dist/src/github/pull-requests.d.ts.map +1 -1
  20. package/dist/src/github/pull-requests.js +13 -0
  21. package/dist/src/github/pull-requests.js.map +1 -1
  22. package/dist/src/runner/command-utils.d.ts.map +1 -1
  23. package/dist/src/runner/command-utils.js +1 -0
  24. package/dist/src/runner/command-utils.js.map +1 -1
  25. package/dist/src/runner/local-execution-session.d.ts.map +1 -1
  26. package/dist/src/runner/local-execution-session.js +5 -2
  27. package/dist/src/runner/local-execution-session.js.map +1 -1
  28. package/dist/src/runner/mission-activation.d.ts +29 -0
  29. package/dist/src/runner/mission-activation.d.ts.map +1 -0
  30. package/dist/src/runner/mission-activation.js +54 -0
  31. package/dist/src/runner/mission-activation.js.map +1 -0
  32. package/dist/src/runner/mission-agent-broker.d.ts +53 -0
  33. package/dist/src/runner/mission-agent-broker.d.ts.map +1 -0
  34. package/dist/src/runner/mission-agent-broker.js +182 -0
  35. package/dist/src/runner/mission-agent-broker.js.map +1 -0
  36. package/dist/src/runner/mission-cancellation.d.ts +77 -0
  37. package/dist/src/runner/mission-cancellation.d.ts.map +1 -0
  38. package/dist/src/runner/mission-cancellation.js +180 -0
  39. package/dist/src/runner/mission-cancellation.js.map +1 -0
  40. package/dist/src/runner/mission-canonical-path.d.ts +34 -0
  41. package/dist/src/runner/mission-canonical-path.d.ts.map +1 -0
  42. package/dist/src/runner/mission-canonical-path.js +121 -0
  43. package/dist/src/runner/mission-canonical-path.js.map +1 -0
  44. package/dist/src/runner/mission-capability-kernel.d.ts +34 -0
  45. package/dist/src/runner/mission-capability-kernel.d.ts.map +1 -0
  46. package/dist/src/runner/mission-capability-kernel.js +158 -0
  47. package/dist/src/runner/mission-capability-kernel.js.map +1 -0
  48. package/dist/src/runner/mission-check-policy.d.ts +17 -0
  49. package/dist/src/runner/mission-check-policy.d.ts.map +1 -0
  50. package/dist/src/runner/mission-check-policy.js +31 -0
  51. package/dist/src/runner/mission-check-policy.js.map +1 -0
  52. package/dist/src/runner/mission-coordinator-lock.d.ts +16 -0
  53. package/dist/src/runner/mission-coordinator-lock.d.ts.map +1 -0
  54. package/dist/src/runner/mission-coordinator-lock.js +170 -0
  55. package/dist/src/runner/mission-coordinator-lock.js.map +1 -0
  56. package/dist/src/runner/mission-deployment.d.ts +21 -0
  57. package/dist/src/runner/mission-deployment.d.ts.map +1 -0
  58. package/dist/src/runner/mission-deployment.js +108 -0
  59. package/dist/src/runner/mission-deployment.js.map +1 -0
  60. package/dist/src/runner/mission-evaluation.d.ts +61 -0
  61. package/dist/src/runner/mission-evaluation.d.ts.map +1 -0
  62. package/dist/src/runner/mission-evaluation.js +183 -0
  63. package/dist/src/runner/mission-evaluation.js.map +1 -0
  64. package/dist/src/runner/mission-executor-probe.d.ts +10 -0
  65. package/dist/src/runner/mission-executor-probe.d.ts.map +1 -0
  66. package/dist/src/runner/mission-executor-probe.js +180 -0
  67. package/dist/src/runner/mission-executor-probe.js.map +1 -0
  68. package/dist/src/runner/mission-git-contracts.d.ts +75 -0
  69. package/dist/src/runner/mission-git-contracts.d.ts.map +1 -0
  70. package/dist/src/runner/mission-git-contracts.js +201 -0
  71. package/dist/src/runner/mission-git-contracts.js.map +1 -0
  72. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts +13 -0
  73. package/dist/src/runner/mission-git-runtime-owner-ref.d.ts.map +1 -0
  74. package/dist/src/runner/mission-git-runtime-owner-ref.js +111 -0
  75. package/dist/src/runner/mission-git-runtime-owner-ref.js.map +1 -0
  76. package/dist/src/runner/mission-git-transaction.d.ts +97 -0
  77. package/dist/src/runner/mission-git-transaction.d.ts.map +1 -0
  78. package/dist/src/runner/mission-git-transaction.js +1009 -0
  79. package/dist/src/runner/mission-git-transaction.js.map +1 -0
  80. package/dist/src/runner/mission-identifiers.d.ts +31 -0
  81. package/dist/src/runner/mission-identifiers.d.ts.map +1 -0
  82. package/dist/src/runner/mission-identifiers.js +75 -0
  83. package/dist/src/runner/mission-identifiers.js.map +1 -0
  84. package/dist/src/runner/mission-input-snapshot.d.ts +21 -0
  85. package/dist/src/runner/mission-input-snapshot.d.ts.map +1 -0
  86. package/dist/src/runner/mission-input-snapshot.js +63 -0
  87. package/dist/src/runner/mission-input-snapshot.js.map +1 -0
  88. package/dist/src/runner/mission-ownership.d.ts +38 -0
  89. package/dist/src/runner/mission-ownership.d.ts.map +1 -0
  90. package/dist/src/runner/mission-ownership.js +88 -0
  91. package/dist/src/runner/mission-ownership.js.map +1 -0
  92. package/dist/src/runner/mission-patch-audit.d.ts +21 -0
  93. package/dist/src/runner/mission-patch-audit.d.ts.map +1 -0
  94. package/dist/src/runner/mission-patch-audit.js +186 -0
  95. package/dist/src/runner/mission-patch-audit.js.map +1 -0
  96. package/dist/src/runner/mission-path-language.d.ts +6 -0
  97. package/dist/src/runner/mission-path-language.d.ts.map +1 -0
  98. package/dist/src/runner/mission-path-language.js +106 -0
  99. package/dist/src/runner/mission-path-language.js.map +1 -0
  100. package/dist/src/runner/mission-permit-authority.d.ts +26 -0
  101. package/dist/src/runner/mission-permit-authority.d.ts.map +1 -0
  102. package/dist/src/runner/mission-permit-authority.js +145 -0
  103. package/dist/src/runner/mission-permit-authority.js.map +1 -0
  104. package/dist/src/runner/mission-plan-parent-coordinator.d.ts +87 -0
  105. package/dist/src/runner/mission-plan-parent-coordinator.d.ts.map +1 -0
  106. package/dist/src/runner/mission-plan-parent-coordinator.js +441 -0
  107. package/dist/src/runner/mission-plan-parent-coordinator.js.map +1 -0
  108. package/dist/src/runner/mission-plan-parent.d.ts +156 -0
  109. package/dist/src/runner/mission-plan-parent.d.ts.map +1 -0
  110. package/dist/src/runner/mission-plan-parent.js +589 -0
  111. package/dist/src/runner/mission-plan-parent.js.map +1 -0
  112. package/dist/src/runner/mission-process-executor.d.ts +25 -0
  113. package/dist/src/runner/mission-process-executor.d.ts.map +1 -0
  114. package/dist/src/runner/mission-process-executor.js +182 -0
  115. package/dist/src/runner/mission-process-executor.js.map +1 -0
  116. package/dist/src/runner/mission-publication-git.d.ts +21 -0
  117. package/dist/src/runner/mission-publication-git.d.ts.map +1 -0
  118. package/dist/src/runner/mission-publication-git.js +61 -0
  119. package/dist/src/runner/mission-publication-git.js.map +1 -0
  120. package/dist/src/runner/mission-publication.d.ts +192 -0
  121. package/dist/src/runner/mission-publication.d.ts.map +1 -0
  122. package/dist/src/runner/mission-publication.js +1001 -0
  123. package/dist/src/runner/mission-publication.js.map +1 -0
  124. package/dist/src/runner/mission-quarantine-patch-executor.d.ts +29 -0
  125. package/dist/src/runner/mission-quarantine-patch-executor.d.ts.map +1 -0
  126. package/dist/src/runner/mission-quarantine-patch-executor.js +121 -0
  127. package/dist/src/runner/mission-quarantine-patch-executor.js.map +1 -0
  128. package/dist/src/runner/mission-repository-executor.d.ts +54 -0
  129. package/dist/src/runner/mission-repository-executor.d.ts.map +1 -0
  130. package/dist/src/runner/mission-repository-executor.js +192 -0
  131. package/dist/src/runner/mission-repository-executor.js.map +1 -0
  132. package/dist/src/runner/mission-repository-observer.d.ts +8 -0
  133. package/dist/src/runner/mission-repository-observer.d.ts.map +1 -0
  134. package/dist/src/runner/mission-repository-observer.js +24 -0
  135. package/dist/src/runner/mission-repository-observer.js.map +1 -0
  136. package/dist/src/runner/mission-reservations.d.ts +15 -0
  137. package/dist/src/runner/mission-reservations.d.ts.map +1 -0
  138. package/dist/src/runner/mission-reservations.js +116 -0
  139. package/dist/src/runner/mission-reservations.js.map +1 -0
  140. package/dist/src/runner/mission-resolution-loop.d.ts +172 -0
  141. package/dist/src/runner/mission-resolution-loop.d.ts.map +1 -0
  142. package/dist/src/runner/mission-resolution-loop.js +318 -0
  143. package/dist/src/runner/mission-resolution-loop.js.map +1 -0
  144. package/dist/src/runner/mission-runtime-owner.d.ts +36 -0
  145. package/dist/src/runner/mission-runtime-owner.d.ts.map +1 -0
  146. package/dist/src/runner/mission-runtime-owner.js +174 -0
  147. package/dist/src/runner/mission-runtime-owner.js.map +1 -0
  148. package/dist/src/runner/mission-safe-executor.d.ts +96 -0
  149. package/dist/src/runner/mission-safe-executor.d.ts.map +1 -0
  150. package/dist/src/runner/mission-safe-executor.js +288 -0
  151. package/dist/src/runner/mission-safe-executor.js.map +1 -0
  152. package/dist/src/runner/mission-sandbox.d.ts +16 -0
  153. package/dist/src/runner/mission-sandbox.d.ts.map +1 -0
  154. package/dist/src/runner/mission-sandbox.js +91 -0
  155. package/dist/src/runner/mission-sandbox.js.map +1 -0
  156. package/dist/src/runner/mission-scheduler.d.ts +57 -0
  157. package/dist/src/runner/mission-scheduler.d.ts.map +1 -0
  158. package/dist/src/runner/mission-scheduler.js +205 -0
  159. package/dist/src/runner/mission-scheduler.js.map +1 -0
  160. package/dist/src/runner/mission-scope-expansion.d.ts +47 -0
  161. package/dist/src/runner/mission-scope-expansion.d.ts.map +1 -0
  162. package/dist/src/runner/mission-scope-expansion.js +147 -0
  163. package/dist/src/runner/mission-scope-expansion.js.map +1 -0
  164. package/dist/src/runner/mission-state-machine.d.ts +118 -0
  165. package/dist/src/runner/mission-state-machine.d.ts.map +1 -0
  166. package/dist/src/runner/mission-state-machine.js +316 -0
  167. package/dist/src/runner/mission-state-machine.js.map +1 -0
  168. package/dist/src/runner/mission-state-store.d.ts +70 -0
  169. package/dist/src/runner/mission-state-store.d.ts.map +1 -0
  170. package/dist/src/runner/mission-state-store.js +916 -0
  171. package/dist/src/runner/mission-state-store.js.map +1 -0
  172. package/dist/src/runner/rework-policy.d.ts +2 -1
  173. package/dist/src/runner/rework-policy.d.ts.map +1 -1
  174. package/dist/src/runner/rework-policy.js +3 -0
  175. package/dist/src/runner/rework-policy.js.map +1 -1
  176. package/dist/src/setup/project-config.d.ts.map +1 -1
  177. package/dist/src/setup/project-config.js +5 -0
  178. package/dist/src/setup/project-config.js.map +1 -1
  179. package/docs/deep-dive.md +25 -16
  180. package/package.json +1 -1
@@ -0,0 +1,589 @@
1
+ import { createHash } from 'node:crypto';
2
+ import { childMissionId } from './mission-identifiers.js';
3
+ import { validatePlanGraph } from './issue-tree.js';
4
+ export const planParentStates = [
5
+ 'created', 'wave-running', 'wave-waiting', 'wave-prepared', 'integrating',
6
+ 'recovery-waiting', 'wave-validating', 'checkpointing', 'next-wave',
7
+ 'final-validating', 'publication-prepared', 'cancelling',
8
+ 'external-input-required', 'safety-stop', 'cancelled', 'completed',
9
+ ];
10
+ export const planParentEventTypes = [
11
+ 'wave-linked', 'wave-prepared', 'integration-started', 'integration-completed',
12
+ 'integration-conflict', 'recovery-ready', 'validation-failed',
13
+ 'validation-recovery-ready', 'validation-passed', 'checkpoint-committed',
14
+ 'final-validation-passed', 'publication-review-ready', 'publication-cancelled', 'label-transition-recorded',
15
+ 'transient-failure', 'resume-eligible', 'cancel-requested',
16
+ 'cancellation-integration-reconciled', 'cancellation-reconciled',
17
+ 'external-input-required', 'safety-stop',
18
+ ];
19
+ const planParentEventsAreExhaustive = true;
20
+ void planParentEventsAreExhaustive;
21
+ export function createPlanParent(input) {
22
+ requireText(input.id, 'Plan Parent id');
23
+ requireText(input.repository, 'Plan Parent repository');
24
+ if (!Number.isSafeInteger(input.issueNumber) || input.issueNumber <= 0) {
25
+ throw new Error('Plan Parent issueNumber must be a positive integer.');
26
+ }
27
+ digest(input.configHash, 'Plan Parent configHash');
28
+ objectId(input.baseCommit, 'Plan Parent baseCommit');
29
+ objectId(input.baseTree, 'Plan Parent baseTree');
30
+ const validation = validatePlanGraph(input.graph);
31
+ if (!validation.ok)
32
+ throw new Error(`Plan Parent graph is invalid: ${validation.errors.join('; ')}`);
33
+ const graph = structuredClone(input.graph);
34
+ const waves = computeWaves(graph);
35
+ return {
36
+ id: input.id,
37
+ revision: 1,
38
+ state: 'created',
39
+ repository: input.repository,
40
+ issueNumber: input.issueNumber,
41
+ configHash: input.configHash,
42
+ baseCommit: input.baseCommit,
43
+ baseTree: input.baseTree,
44
+ graph,
45
+ graphHash: sha256(canonicalJson(graph)),
46
+ waves,
47
+ currentWave: 0,
48
+ checkpoint: { commitSha: input.baseCommit, treeSha: input.baseTree },
49
+ children: {},
50
+ integrationCursor: 0,
51
+ integratedCommit: input.baseCommit,
52
+ integratedTree: input.baseTree,
53
+ integrationHistory: [],
54
+ validationReceiptIds: [],
55
+ validationHistory: [],
56
+ labelTransitions: [],
57
+ };
58
+ }
59
+ export function transitionPlanParent(record, event) {
60
+ const next = structuredClone(record);
61
+ if (event.type === 'label-transition-recorded' && !terminal(record.state)) {
62
+ validateLabelTransition(event.transition);
63
+ if (!next.labelTransitions.some((entry) => entry.receiptId === event.transition.receiptId)) {
64
+ next.labelTransitions.push(structuredClone(event.transition));
65
+ next.revision += 1;
66
+ }
67
+ return next;
68
+ }
69
+ if (event.type === 'cancel-requested' && !terminal(record.state) && record.state !== 'cancelling') {
70
+ validateCancellation(event.cancellation);
71
+ revokeTransient(next);
72
+ next.state = 'cancelling';
73
+ next.cancellation = structuredClone(event.cancellation);
74
+ next.revision += 1;
75
+ return next;
76
+ }
77
+ if (record.state === 'cancelling' && event.type === 'cancellation-reconciled') {
78
+ revokeTransient(next);
79
+ delete next.integrationIntent;
80
+ delete next.claim;
81
+ next.state = 'cancelled';
82
+ next.revision += 1;
83
+ return next;
84
+ }
85
+ if (record.state === 'cancelling' && event.type === 'cancellation-integration-reconciled') {
86
+ if (!record.integrationIntent)
87
+ throw new Error('Plan Parent cancellation has no integration intent.');
88
+ if (event.applied) {
89
+ if (!next.integrationHistory.some((entry) => entry.actionKey === record.integrationIntent.actionKey)) {
90
+ next.integrationHistory.push(structuredClone(record.integrationIntent));
91
+ }
92
+ next.integratedCommit = record.integrationIntent.expectedNewCommit;
93
+ next.integratedTree = record.integrationIntent.expectedNewTree;
94
+ next.integrationCursor = Math.max(next.integrationCursor, record.integrationIntent.cursor + 1);
95
+ }
96
+ delete next.integrationIntent;
97
+ next.revision += 1;
98
+ return next;
99
+ }
100
+ if ((event.type === 'external-input-required' || event.type === 'safety-stop')
101
+ && !terminal(record.state)) {
102
+ revokeTransient(next);
103
+ delete next.claim;
104
+ next.state = event.type;
105
+ next.revision += 1;
106
+ return next;
107
+ }
108
+ if (event.type === 'transient-failure' && transientAllowed(record.state, event.resumeTarget)) {
109
+ exactTimestamp(event.nextEligibleAt, 'Plan Parent nextEligibleAt');
110
+ requireText(event.actionKey, 'Plan Parent actionKey');
111
+ requireText(event.reason, 'Plan Parent resumable reason');
112
+ requireText(event.requiredPredicate, 'Plan Parent required predicate');
113
+ revokeTransient(next);
114
+ delete next.claim;
115
+ next.state = 'wave-waiting';
116
+ next.resumeTarget = event.resumeTarget;
117
+ next.nextEligibleAt = event.nextEligibleAt;
118
+ next.resumableReason = event.reason;
119
+ next.requiredPredicate = event.requiredPredicate;
120
+ next.actionKey = event.actionKey;
121
+ next.revision += 1;
122
+ return next;
123
+ }
124
+ if (record.state === 'wave-waiting' && event.type === 'resume-eligible') {
125
+ exactTimestamp(event.now, 'Plan Parent resume time');
126
+ if (!record.resumeTarget || !record.nextEligibleAt || event.now < record.nextEligibleAt) {
127
+ throw new Error('Plan Parent is not eligible to resume.');
128
+ }
129
+ next.state = record.resumeTarget;
130
+ revokeTransient(next);
131
+ next.revision += 1;
132
+ return next;
133
+ }
134
+ if ((record.state === 'created' || record.state === 'next-wave') && event.type === 'wave-linked') {
135
+ next.state = 'wave-running';
136
+ next.revision += 1;
137
+ return next;
138
+ }
139
+ if (record.state === 'wave-running' && event.type === 'wave-prepared') {
140
+ const expected = record.waves[record.currentWave] ?? [];
141
+ if (event.descriptors.length !== expected.length)
142
+ throw new Error('Plan Parent wave descriptors are incomplete.');
143
+ for (const descriptor of event.descriptors) {
144
+ validateDescriptor(descriptor, record);
145
+ const child = next.children[descriptor.stableId];
146
+ if (!child || child.wave !== record.currentWave
147
+ || descriptor.baseCheckpointCommit !== child.baseCheckpointCommit) {
148
+ throw new Error(`Plan Parent descriptor does not match child ${descriptor.stableId}.`);
149
+ }
150
+ child.descriptor = structuredClone(descriptor);
151
+ }
152
+ if (expected.some((stableId) => !next.children[stableId]?.descriptor)) {
153
+ throw new Error('Plan Parent wave descriptors do not cover the deterministic wave.');
154
+ }
155
+ next.integrationCursor = 0;
156
+ next.integratedCommit = record.checkpoint.commitSha;
157
+ next.integratedTree = record.checkpoint.treeSha;
158
+ next.state = 'wave-prepared';
159
+ next.revision += 1;
160
+ return next;
161
+ }
162
+ if (record.state === 'wave-prepared' && event.type === 'integration-started') {
163
+ validateIntent(event.intent, record);
164
+ next.integrationIntent = structuredClone(event.intent);
165
+ next.state = 'integrating';
166
+ next.actionKey = event.intent.actionKey;
167
+ next.revision += 1;
168
+ return next;
169
+ }
170
+ if (record.state === 'integrating' && event.type === 'integration-started') {
171
+ validateIntent(event.intent, record);
172
+ if (canonicalJson(record.integrationIntent) !== canonicalJson(event.intent)) {
173
+ throw new Error('Plan Parent integration replay does not match durable intent.');
174
+ }
175
+ return record;
176
+ }
177
+ if (record.state === 'integrating' && event.type === 'integration-completed') {
178
+ if (!record.integrationIntent || record.integrationIntent.actionKey !== event.actionKey) {
179
+ throw new Error('Plan Parent integration intent does not match completion.');
180
+ }
181
+ next.integrationHistory.push(structuredClone(record.integrationIntent));
182
+ next.integratedCommit = record.integrationIntent.expectedNewCommit;
183
+ next.integratedTree = record.integrationIntent.expectedNewTree;
184
+ next.integrationCursor += 1;
185
+ delete next.integrationIntent;
186
+ delete next.actionKey;
187
+ next.state = next.integrationCursor === (record.waves[record.currentWave]?.length ?? 0)
188
+ ? 'wave-validating' : 'wave-prepared';
189
+ next.revision += 1;
190
+ return next;
191
+ }
192
+ if ((record.state === 'wave-prepared' || record.state === 'integrating')
193
+ && event.type === 'integration-conflict') {
194
+ requireText(event.recoveryMissionId, 'Plan Parent recoveryMissionId');
195
+ next.recoveryMissionId = event.recoveryMissionId;
196
+ next.state = 'recovery-waiting';
197
+ next.revision += 1;
198
+ return next;
199
+ }
200
+ if (record.state === 'recovery-waiting' && event.type === 'recovery-ready') {
201
+ validateDescriptor(event.descriptor, record);
202
+ if (event.descriptor.stableId !== record.waves[record.currentWave]?.[record.integrationCursor]) {
203
+ throw new Error('Plan Parent recovery descriptor does not match the integration cursor.');
204
+ }
205
+ const child = next.children[event.descriptor.stableId];
206
+ if (!child)
207
+ throw new Error('Plan Parent recovery descriptor child is missing.');
208
+ child.descriptor = structuredClone(event.descriptor);
209
+ delete next.recoveryMissionId;
210
+ delete next.recoveryTarget;
211
+ delete next.integrationIntent;
212
+ next.state = 'wave-prepared';
213
+ next.revision += 1;
214
+ return next;
215
+ }
216
+ if ((record.state === 'wave-validating' || record.state === 'final-validating')
217
+ && event.type === 'validation-failed' && event.recoveryTarget === record.state) {
218
+ requireText(event.recoveryMissionId, 'Plan Parent validation recoveryMissionId');
219
+ next.recoveryMissionId = event.recoveryMissionId;
220
+ next.recoveryTarget = event.recoveryTarget;
221
+ next.state = 'recovery-waiting';
222
+ next.revision += 1;
223
+ return next;
224
+ }
225
+ if (record.state === 'recovery-waiting' && event.type === 'validation-recovery-ready') {
226
+ if (!record.recoveryMissionId || !record.recoveryTarget) {
227
+ throw new Error('Plan Parent validation recovery context is missing.');
228
+ }
229
+ next.state = record.recoveryTarget;
230
+ delete next.recoveryMissionId;
231
+ delete next.recoveryTarget;
232
+ next.revision += 1;
233
+ return next;
234
+ }
235
+ if (record.state === 'wave-validating' && event.type === 'validation-passed') {
236
+ validateStrings(event.receiptIds, 'Plan Parent validation receipts');
237
+ next.validationReceiptIds = [...event.receiptIds];
238
+ next.state = 'checkpointing';
239
+ next.revision += 1;
240
+ return next;
241
+ }
242
+ if (record.state === 'checkpointing' && event.type === 'checkpoint-committed') {
243
+ validateCheckpoint(event.checkpoint);
244
+ if (event.checkpoint.commitSha !== record.integratedCommit
245
+ || event.checkpoint.treeSha !== record.integratedTree) {
246
+ throw new Error('Plan Parent checkpoint does not match integrated identity.');
247
+ }
248
+ next.checkpoint = structuredClone(event.checkpoint);
249
+ next.validationHistory.push(...record.validationReceiptIds);
250
+ next.validationReceiptIds = [];
251
+ next.integrationCursor = 0;
252
+ if (record.currentWave + 1 < record.waves.length) {
253
+ next.currentWave += 1;
254
+ next.state = 'next-wave';
255
+ }
256
+ else {
257
+ next.state = 'final-validating';
258
+ }
259
+ next.revision += 1;
260
+ return next;
261
+ }
262
+ if (record.state === 'final-validating' && event.type === 'final-validation-passed') {
263
+ validateStrings(event.receiptIds, 'Plan Parent final validation receipts');
264
+ requireText(event.publicationId, 'Plan Parent publicationId');
265
+ next.validationHistory.push(...event.receiptIds);
266
+ next.publicationId = event.publicationId;
267
+ next.state = 'publication-prepared';
268
+ next.revision += 1;
269
+ return next;
270
+ }
271
+ if (record.state === 'publication-prepared' && event.type === 'publication-review-ready') {
272
+ delete next.claim;
273
+ next.state = 'completed';
274
+ next.revision += 1;
275
+ return next;
276
+ }
277
+ if (record.state === 'publication-prepared' && event.type === 'publication-cancelled') {
278
+ delete next.claim;
279
+ next.state = 'cancelled';
280
+ next.revision += 1;
281
+ return next;
282
+ }
283
+ throw new Error(`Plan Parent transition is not allowed: ${record.state} + ${event.type}`);
284
+ }
285
+ export function planParentScheduleKey(id) {
286
+ requireText(id, 'Plan Parent schedule id');
287
+ return `plan-parent:${id}`;
288
+ }
289
+ export function assertPlanParentRecord(value, path = 'Plan Parent') {
290
+ if (!value || typeof value !== 'object' || Array.isArray(value)) {
291
+ throw new Error(`${path} must be an object.`);
292
+ }
293
+ const record = value;
294
+ exactKeys(value, [
295
+ 'id', 'revision', 'state', 'repository', 'issueNumber', 'configHash', 'baseCommit',
296
+ 'baseTree', 'graph', 'graphHash', 'waves', 'currentWave', 'checkpoint', 'children',
297
+ 'integrationCursor', 'integratedCommit', 'integratedTree', 'integrationIntent',
298
+ 'integrationHistory', 'validationReceiptIds', 'validationHistory', 'labelTransitions',
299
+ 'recoveryMissionId', 'recoveryTarget', 'publicationId', 'resumeTarget', 'nextEligibleAt',
300
+ 'resumableReason', 'requiredPredicate', 'actionKey', 'claim', 'cancellation',
301
+ ], path);
302
+ requireText(record.id, `${path}.id`);
303
+ requireText(record.repository, `${path}.repository`);
304
+ if (!Number.isSafeInteger(record.revision) || record.revision < 1)
305
+ throw new Error(`${path}.revision is invalid.`);
306
+ if (!planParentStates.includes(record.state))
307
+ throw new Error(`${path}.state is invalid.`);
308
+ if (!Number.isSafeInteger(record.issueNumber) || record.issueNumber <= 0)
309
+ throw new Error(`${path}.issueNumber is invalid.`);
310
+ digest(record.configHash, `${path}.configHash`);
311
+ objectId(record.baseCommit, `${path}.baseCommit`);
312
+ objectId(record.baseTree, `${path}.baseTree`);
313
+ const baseline = createPlanParent({
314
+ id: record.id, repository: record.repository, issueNumber: record.issueNumber,
315
+ configHash: record.configHash, baseCommit: record.baseCommit, baseTree: record.baseTree,
316
+ graph: record.graph,
317
+ });
318
+ if (record.graphHash !== baseline.graphHash || canonicalJson(record.waves) !== canonicalJson(baseline.waves)) {
319
+ throw new Error(`${path} graph hash or deterministic waves do not match.`);
320
+ }
321
+ if (!Number.isSafeInteger(record.currentWave) || record.currentWave < 0
322
+ || record.currentWave >= record.waves.length)
323
+ throw new Error(`${path}.currentWave is invalid.`);
324
+ validateCheckpoint(record.checkpoint);
325
+ objectId(record.integratedCommit, `${path}.integratedCommit`);
326
+ objectId(record.integratedTree, `${path}.integratedTree`);
327
+ if (!Number.isSafeInteger(record.integrationCursor) || record.integrationCursor < 0
328
+ || record.integrationCursor > (record.waves[record.currentWave]?.length ?? 0)) {
329
+ throw new Error(`${path}.integrationCursor is invalid.`);
330
+ }
331
+ if (!record.children || typeof record.children !== 'object' || Array.isArray(record.children)) {
332
+ throw new Error(`${path}.children must be an object.`);
333
+ }
334
+ for (const [stableId, child] of Object.entries(record.children)) {
335
+ exactKeys(child, [
336
+ 'stableId', 'missionId', 'wave', 'baseCheckpointCommit', 'baseCheckpointTree', 'descriptor',
337
+ ], `${path}.children.${stableId}`);
338
+ if (child.stableId !== stableId
339
+ || child.missionId !== childMissionId({ parentId: record.id, nodeId: stableId })
340
+ || !Number.isSafeInteger(child.wave) || child.wave < 0 || child.wave >= record.waves.length
341
+ || !record.waves[child.wave]?.includes(stableId)) {
342
+ throw new Error(`${path}.children.${stableId} identity is invalid.`);
343
+ }
344
+ objectId(child.baseCheckpointCommit, `${path}.children.${stableId}.baseCheckpointCommit`);
345
+ objectId(child.baseCheckpointTree, `${path}.children.${stableId}.baseCheckpointTree`);
346
+ if (child.descriptor)
347
+ validateDescriptor(child.descriptor, record);
348
+ }
349
+ if (!Array.isArray(record.integrationHistory) || !Array.isArray(record.validationReceiptIds)
350
+ || !Array.isArray(record.validationHistory) || !Array.isArray(record.labelTransitions)) {
351
+ throw new Error(`${path} histories must be arrays.`);
352
+ }
353
+ record.integrationHistory.forEach((intent) => validateStoredIntent(intent, record));
354
+ if (record.integrationIntent)
355
+ validateStoredIntent(record.integrationIntent, record);
356
+ if (new Set(record.integrationHistory.map((intent) => intent.actionKey)).size
357
+ !== record.integrationHistory.length)
358
+ throw new Error(`${path}.integrationHistory contains duplicates.`);
359
+ if (record.state === 'integrating' && !record.integrationIntent) {
360
+ throw new Error(`${path} integrating state requires an integration intent.`);
361
+ }
362
+ if (record.integrationIntent && ![
363
+ 'integrating', 'wave-waiting', 'recovery-waiting', 'cancelling',
364
+ 'external-input-required', 'safety-stop',
365
+ ].includes(record.state))
366
+ throw new Error(`${path}.integrationIntent is invalid in ${record.state}.`);
367
+ record.labelTransitions.forEach(validateLabelTransition);
368
+ validateOptionalStrings(record.validationReceiptIds, `${path}.validationReceiptIds`);
369
+ validateOptionalStrings(record.validationHistory, `${path}.validationHistory`);
370
+ if (record.state === 'wave-waiting') {
371
+ if (!record.resumeTarget || !record.nextEligibleAt || !record.resumableReason
372
+ || !record.requiredPredicate || !record.actionKey) {
373
+ throw new Error(`${path} wave-waiting requires complete resume metadata.`);
374
+ }
375
+ exactTimestamp(record.nextEligibleAt, `${path}.nextEligibleAt`);
376
+ if (record.resumeTarget === 'integrating' && !record.integrationIntent) {
377
+ throw new Error(`${path} integrating resume requires its durable intent.`);
378
+ }
379
+ }
380
+ else if (record.resumeTarget || record.nextEligibleAt || record.resumableReason || record.requiredPredicate) {
381
+ throw new Error(`${path} resume metadata is allowed only in wave-waiting.`);
382
+ }
383
+ if (record.cancellation)
384
+ validateCancellation(record.cancellation);
385
+ if (record.cancellation && record.state !== 'cancelling' && record.state !== 'cancelled'
386
+ && record.state !== 'safety-stop')
387
+ throw new Error(`${path}.cancellation state is invalid.`);
388
+ if (record.claim)
389
+ validateParentClaim(record.claim, path);
390
+ if (record.claim && terminal(record.state))
391
+ throw new Error(`${path}.claim is forbidden in terminal state.`);
392
+ if (record.state !== 'created' && record.state !== 'next-wave') {
393
+ for (const stableId of record.waves[record.currentWave] ?? []) {
394
+ if (!record.children[stableId])
395
+ throw new Error(`${path} current wave child ${stableId} is missing.`);
396
+ }
397
+ }
398
+ if (record.state === 'publication-prepared' && !record.publicationId) {
399
+ throw new Error(`${path} publication-prepared requires publicationId.`);
400
+ }
401
+ if (record.recoveryTarget && record.state !== 'recovery-waiting') {
402
+ throw new Error(`${path}.recoveryTarget is allowed only in recovery-waiting.`);
403
+ }
404
+ if (record.state === 'recovery-waiting' && !record.recoveryMissionId) {
405
+ throw new Error(`${path} recovery-waiting requires recoveryMissionId.`);
406
+ }
407
+ }
408
+ export function linkWaveChildren(record) {
409
+ if (record.state !== 'created' && record.state !== 'next-wave') {
410
+ throw new Error(`Plan Parent cannot link children from state ${record.state}.`);
411
+ }
412
+ const next = structuredClone(record);
413
+ for (const stableId of record.waves[record.currentWave] ?? []) {
414
+ if (next.children[stableId])
415
+ continue;
416
+ next.children[stableId] = {
417
+ stableId,
418
+ missionId: childMissionId({ parentId: record.id, nodeId: stableId }),
419
+ wave: record.currentWave,
420
+ baseCheckpointCommit: record.checkpoint.commitSha,
421
+ baseCheckpointTree: record.checkpoint.treeSha,
422
+ };
423
+ }
424
+ return transitionPlanParent(next, { type: 'wave-linked' });
425
+ }
426
+ function computeWaves(graph) {
427
+ const dependencies = new Map(graph.nodes.map((node) => [node.stableId, new Set(node.dependsOn)]));
428
+ for (const edge of graph.edges)
429
+ dependencies.get(edge.to)?.add(edge.from);
430
+ const waves = [];
431
+ while (dependencies.size > 0) {
432
+ const ready = [...dependencies].filter(([, deps]) => deps.size === 0)
433
+ .map(([id]) => id).sort();
434
+ if (ready.length === 0)
435
+ throw new Error('Plan Parent graph contains a dependency cycle.');
436
+ waves.push(ready);
437
+ for (const id of ready)
438
+ dependencies.delete(id);
439
+ for (const deps of dependencies.values())
440
+ ready.forEach((id) => deps.delete(id));
441
+ }
442
+ return waves;
443
+ }
444
+ function validateDescriptor(value, parent) {
445
+ requireText(value.stableId, 'Plan Parent descriptor stableId');
446
+ objectId(value.childCommit, 'Plan Parent descriptor childCommit');
447
+ objectId(value.childTree, 'Plan Parent descriptor childTree');
448
+ objectId(value.baseCheckpointCommit, 'Plan Parent descriptor base checkpoint');
449
+ digest(value.configHash, 'Plan Parent descriptor configHash');
450
+ digest(value.reservationFingerprint, 'Plan Parent descriptor reservationFingerprint');
451
+ requireText(value.executorVersion, 'Plan Parent descriptor executorVersion');
452
+ validateStrings(value.changedPaths, 'Plan Parent descriptor changedPaths');
453
+ validateStrings(value.validationReceiptIds, 'Plan Parent descriptor validation receipts');
454
+ if (value.configHash !== parent.configHash)
455
+ throw new Error('Plan Parent descriptor config hash mismatch.');
456
+ }
457
+ function validateIntent(value, parent) {
458
+ if (value.version !== 1 || value.wave !== parent.currentWave
459
+ || value.cursor !== parent.integrationCursor
460
+ || value.stableId !== parent.waves[parent.currentWave]?.[parent.integrationCursor]) {
461
+ throw new Error('Plan Parent integration intent cursor does not match deterministic order.');
462
+ }
463
+ requireText(value.actionKey, 'Plan Parent integration actionKey');
464
+ objectId(value.expectedOldCommit, 'Plan Parent integration old commit');
465
+ objectId(value.expectedNewCommit, 'Plan Parent integration new commit');
466
+ objectId(value.expectedNewTree, 'Plan Parent integration new tree');
467
+ if (value.expectedOldCommit !== parent.integratedCommit) {
468
+ throw new Error('Plan Parent integration intent old identity mismatch.');
469
+ }
470
+ }
471
+ function validateStoredIntent(value, parent) {
472
+ if (value.version !== 1 || !Number.isSafeInteger(value.wave) || value.wave < 0
473
+ || value.wave >= parent.waves.length || !Number.isSafeInteger(value.cursor) || value.cursor < 0
474
+ || value.stableId !== parent.waves[value.wave]?.[value.cursor]) {
475
+ throw new Error('Plan Parent stored integration intent is invalid.');
476
+ }
477
+ requireText(value.actionKey, 'Plan Parent stored integration actionKey');
478
+ objectId(value.expectedOldCommit, 'Plan Parent stored integration old commit');
479
+ objectId(value.expectedNewCommit, 'Plan Parent stored integration new commit');
480
+ objectId(value.expectedNewTree, 'Plan Parent stored integration new tree');
481
+ }
482
+ function validateCheckpoint(value) {
483
+ objectId(value.commitSha, 'Plan Parent checkpoint commit');
484
+ objectId(value.treeSha, 'Plan Parent checkpoint tree');
485
+ }
486
+ function validateLabelTransition(value) {
487
+ requireText(value.stableId, 'Plan Parent label stableId');
488
+ requireText(value.from, 'Plan Parent label from');
489
+ requireText(value.to, 'Plan Parent label to');
490
+ requireText(value.receiptId, 'Plan Parent label receiptId');
491
+ }
492
+ function validateCancellation(value) {
493
+ exactTimestamp(value.requestedAt, 'Plan Parent cancellation requestedAt');
494
+ requireText(value.requestedBy, 'Plan Parent cancellation requestedBy');
495
+ }
496
+ function transientAllowed(state, target) {
497
+ return state === target || (state === 'integrating' && target === 'wave-prepared')
498
+ || (state === 'publication-prepared' && target === 'publication-prepared')
499
+ || (state === 'recovery-waiting' && target === 'recovery-waiting');
500
+ }
501
+ function revokeTransient(record) {
502
+ delete record.resumeTarget;
503
+ delete record.nextEligibleAt;
504
+ delete record.resumableReason;
505
+ delete record.requiredPredicate;
506
+ delete record.actionKey;
507
+ }
508
+ function terminal(state) {
509
+ return ['external-input-required', 'safety-stop', 'cancelled', 'completed'].includes(state);
510
+ }
511
+ function validateStrings(values, field) {
512
+ if (!Array.isArray(values) || values.length === 0)
513
+ throw new Error(`${field} must be non-empty.`);
514
+ values.forEach((value) => requireText(value, field));
515
+ if (new Set(values).size !== values.length)
516
+ throw new Error(`${field} must not contain duplicates.`);
517
+ }
518
+ function validateOptionalStrings(values, field) {
519
+ if (!Array.isArray(values))
520
+ throw new Error(`${field} must be an array.`);
521
+ values.forEach((value) => requireText(value, field));
522
+ if (new Set(values).size !== values.length)
523
+ throw new Error(`${field} must not contain duplicates.`);
524
+ }
525
+ function validateParentClaim(claim, path) {
526
+ if (claim.version !== 1 || !Number.isSafeInteger(claim.fencingEpoch) || claim.fencingEpoch <= 0) {
527
+ throw new Error(`${path}.claim is invalid.`);
528
+ }
529
+ [claim.token, claim.daemonId, claim.hostId, claim.bootNonce].forEach((value) => requireText(value, `${path}.claim identity`));
530
+ exactTimestamp(claim.claimedAt, `${path}.claim.claimedAt`);
531
+ exactTimestamp(claim.leaseUntil, `${path}.claim.leaseUntil`);
532
+ if (claim.leaseUntil <= claim.claimedAt)
533
+ throw new Error(`${path}.claim lease is invalid.`);
534
+ if (!Array.isArray(claim.processes))
535
+ throw new Error(`${path}.claim.processes must be an array.`);
536
+ const identities = new Set();
537
+ for (const process of claim.processes) {
538
+ requireText(process.actionKey, `${path}.claim.process.actionKey`);
539
+ if (!Number.isSafeInteger(process.pid) || process.pid <= 0) {
540
+ throw new Error(`${path}.claim.process.pid is invalid.`);
541
+ }
542
+ if (process.hostId !== claim.hostId || process.bootNonce !== claim.bootNonce) {
543
+ throw new Error(`${path}.claim process host or boot identity is invalid.`);
544
+ }
545
+ exactTimestamp(process.startedAt, `${path}.claim.process.startedAt`);
546
+ const identity = `${process.hostId}:${process.bootNonce}:${process.pid}:${process.actionKey}`;
547
+ if (identities.has(identity))
548
+ throw new Error(`${path}.claim contains duplicate process identity.`);
549
+ identities.add(identity);
550
+ }
551
+ }
552
+ function exactKeys(record, allowed, path) {
553
+ const allowedSet = new Set(allowed);
554
+ for (const key of Object.keys(record)) {
555
+ if (!allowedSet.has(key))
556
+ throw new Error(`${path} has unexpected field ${key}.`);
557
+ }
558
+ }
559
+ function requireText(value, field) {
560
+ if (typeof value !== 'string' || value.trim().length === 0)
561
+ throw new Error(`${field} must be non-empty.`);
562
+ }
563
+ function objectId(value, field) {
564
+ if (!/^[a-f0-9]{40}(?:[a-f0-9]{24})?$/u.test(value))
565
+ throw new Error(`${field} must be a Git object ID.`);
566
+ }
567
+ function digest(value, field) {
568
+ if (!/^sha256:[a-f0-9]{64}$/u.test(value))
569
+ throw new Error(`${field} must be a SHA-256 digest.`);
570
+ }
571
+ function exactTimestamp(value, field) {
572
+ const milliseconds = Date.parse(value);
573
+ if (!Number.isFinite(milliseconds) || new Date(milliseconds).toISOString() !== value) {
574
+ throw new Error(`${field} must be an exact UTC ISO timestamp.`);
575
+ }
576
+ }
577
+ function sha256(value) {
578
+ return `sha256:${createHash('sha256').update(value, 'utf8').digest('hex')}`;
579
+ }
580
+ function canonicalJson(value) {
581
+ if (Array.isArray(value))
582
+ return `[${value.map(canonicalJson).join(',')}]`;
583
+ if (value && typeof value === 'object') {
584
+ return `{${Object.entries(value).sort(([a], [b]) => a.localeCompare(b))
585
+ .map(([key, child]) => `${JSON.stringify(key)}:${canonicalJson(child)}`).join(',')}}`;
586
+ }
587
+ return JSON.stringify(value);
588
+ }
589
+ //# sourceMappingURL=mission-plan-parent.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"mission-plan-parent.js","sourceRoot":"","sources":["../../../src/runner/mission-plan-parent.ts"],"names":[],"mappings":"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"}