codex-orchestrator 2.0.10 → 2.0.12

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 (279) hide show
  1. package/CHANGELOG.md +52 -0
  2. package/README.md +29 -30
  3. package/dist/src/index.d.ts +4 -9
  4. package/dist/src/index.d.ts.map +1 -1
  5. package/dist/src/index.js +2 -5
  6. package/dist/src/index.js.map +1 -1
  7. package/dist/src/v2/acceptance-proof.d.ts +53 -25
  8. package/dist/src/v2/acceptance-proof.d.ts.map +1 -1
  9. package/dist/src/v2/acceptance-proof.js +189 -197
  10. package/dist/src/v2/acceptance-proof.js.map +1 -1
  11. package/dist/src/v2/active-attempt.d.ts +94 -0
  12. package/dist/src/v2/active-attempt.d.ts.map +1 -0
  13. package/dist/src/v2/active-attempt.js +200 -0
  14. package/dist/src/v2/active-attempt.js.map +1 -0
  15. package/dist/src/v2/adapters/command.d.ts +7 -0
  16. package/dist/src/v2/adapters/command.d.ts.map +1 -1
  17. package/dist/src/v2/adapters/command.js +44 -3
  18. package/dist/src/v2/adapters/command.js.map +1 -1
  19. package/dist/src/v2/adapters/gh-pull-request-adapter.js +1 -0
  20. package/dist/src/v2/adapters/gh-pull-request-adapter.js.map +1 -1
  21. package/dist/src/v2/adapters/pull-requests.d.ts +1 -0
  22. package/dist/src/v2/adapters/pull-requests.d.ts.map +1 -1
  23. package/dist/src/v2/adapters/pull-requests.js +1 -0
  24. package/dist/src/v2/adapters/pull-requests.js.map +1 -1
  25. package/dist/src/v2/adapters/worktree.js +3 -3
  26. package/dist/src/v2/adapters/worktree.js.map +1 -1
  27. package/dist/src/v2/atomic-store.d.ts +15 -0
  28. package/dist/src/v2/atomic-store.d.ts.map +1 -1
  29. package/dist/src/v2/atomic-store.js +55 -8
  30. package/dist/src/v2/atomic-store.js.map +1 -1
  31. package/dist/src/v2/candidate.d.ts +136 -0
  32. package/dist/src/v2/candidate.d.ts.map +1 -0
  33. package/dist/src/v2/candidate.js +107 -0
  34. package/dist/src/v2/candidate.js.map +1 -0
  35. package/dist/src/v2/checked-change.d.ts +39 -7
  36. package/dist/src/v2/checked-change.d.ts.map +1 -1
  37. package/dist/src/v2/checked-change.js +73 -1
  38. package/dist/src/v2/checked-change.js.map +1 -1
  39. package/dist/src/v2/cli-contract.d.ts +1 -1
  40. package/dist/src/v2/cli-contract.d.ts.map +1 -1
  41. package/dist/src/v2/cli-contract.js +4 -6
  42. package/dist/src/v2/cli-contract.js.map +1 -1
  43. package/dist/src/v2/cli.d.ts +14 -0
  44. package/dist/src/v2/cli.d.ts.map +1 -1
  45. package/dist/src/v2/cli.js +70 -21
  46. package/dist/src/v2/cli.js.map +1 -1
  47. package/dist/src/v2/code-review-report.d.ts +10 -18
  48. package/dist/src/v2/code-review-report.d.ts.map +1 -1
  49. package/dist/src/v2/code-review-report.js +63 -60
  50. package/dist/src/v2/code-review-report.js.map +1 -1
  51. package/dist/src/v2/codex-process.d.ts +6 -1
  52. package/dist/src/v2/codex-process.d.ts.map +1 -1
  53. package/dist/src/v2/codex-process.js +36 -9
  54. package/dist/src/v2/codex-process.js.map +1 -1
  55. package/dist/src/v2/config.d.ts +0 -2
  56. package/dist/src/v2/config.d.ts.map +1 -1
  57. package/dist/src/v2/config.js +3 -6
  58. package/dist/src/v2/config.js.map +1 -1
  59. package/dist/src/v2/contained-report-operation.d.ts +17 -6
  60. package/dist/src/v2/contained-report-operation.d.ts.map +1 -1
  61. package/dist/src/v2/contained-report-operation.js +11 -24
  62. package/dist/src/v2/contained-report-operation.js.map +1 -1
  63. package/dist/src/v2/containment.d.ts +1 -0
  64. package/dist/src/v2/containment.d.ts.map +1 -1
  65. package/dist/src/v2/containment.js +12 -2
  66. package/dist/src/v2/containment.js.map +1 -1
  67. package/dist/src/v2/delivery-authority.d.ts +26 -0
  68. package/dist/src/v2/delivery-authority.d.ts.map +1 -0
  69. package/dist/src/v2/delivery-authority.js +44 -0
  70. package/dist/src/v2/delivery-authority.js.map +1 -0
  71. package/dist/src/v2/direct-delivery.d.ts +19 -57
  72. package/dist/src/v2/direct-delivery.d.ts.map +1 -1
  73. package/dist/src/v2/direct-delivery.js +154 -211
  74. package/dist/src/v2/direct-delivery.js.map +1 -1
  75. package/dist/src/v2/immutable-workflow-publisher.d.ts.map +1 -1
  76. package/dist/src/v2/immutable-workflow-publisher.js +3 -1
  77. package/dist/src/v2/immutable-workflow-publisher.js.map +1 -1
  78. package/dist/src/v2/implementation-report.d.ts +3 -1
  79. package/dist/src/v2/implementation-report.d.ts.map +1 -1
  80. package/dist/src/v2/implementation-report.js +17 -4
  81. package/dist/src/v2/implementation-report.js.map +1 -1
  82. package/dist/src/v2/implementation-reviewer.d.ts +22 -13
  83. package/dist/src/v2/implementation-reviewer.d.ts.map +1 -1
  84. package/dist/src/v2/implementation-reviewer.js +96 -30
  85. package/dist/src/v2/implementation-reviewer.js.map +1 -1
  86. package/dist/src/v2/owner-control-lock.d.ts +13 -1
  87. package/dist/src/v2/owner-control-lock.d.ts.map +1 -1
  88. package/dist/src/v2/owner-control-lock.js +66 -7
  89. package/dist/src/v2/owner-control-lock.js.map +1 -1
  90. package/dist/src/v2/pending-effect-settlement.d.ts +44 -0
  91. package/dist/src/v2/pending-effect-settlement.d.ts.map +1 -0
  92. package/dist/src/v2/pending-effect-settlement.js +69 -0
  93. package/dist/src/v2/pending-effect-settlement.js.map +1 -0
  94. package/dist/src/v2/process-identity.d.ts +45 -0
  95. package/dist/src/v2/process-identity.d.ts.map +1 -0
  96. package/dist/src/v2/process-identity.js +118 -0
  97. package/dist/src/v2/process-identity.js.map +1 -0
  98. package/dist/src/v2/proof-report.d.ts +4 -2
  99. package/dist/src/v2/proof-report.d.ts.map +1 -1
  100. package/dist/src/v2/proof-report.js +16 -44
  101. package/dist/src/v2/proof-report.js.map +1 -1
  102. package/dist/src/v2/review-feedback-coordinator.d.ts +8 -2
  103. package/dist/src/v2/review-feedback-coordinator.d.ts.map +1 -1
  104. package/dist/src/v2/review-feedback-coordinator.js +98 -71
  105. package/dist/src/v2/review-feedback-coordinator.js.map +1 -1
  106. package/dist/src/v2/review-feedback.d.ts +14 -38
  107. package/dist/src/v2/review-feedback.d.ts.map +1 -1
  108. package/dist/src/v2/review-feedback.js +48 -115
  109. package/dist/src/v2/review-feedback.js.map +1 -1
  110. package/dist/src/v2/run-issue.d.ts +139 -60
  111. package/dist/src/v2/run-issue.d.ts.map +1 -1
  112. package/dist/src/v2/run-issue.js +2236 -1974
  113. package/dist/src/v2/run-issue.js.map +1 -1
  114. package/dist/src/v2/run-state-projections.d.ts +84 -0
  115. package/dist/src/v2/run-state-projections.d.ts.map +1 -0
  116. package/dist/src/v2/run-state-projections.js +142 -0
  117. package/dist/src/v2/run-state-projections.js.map +1 -0
  118. package/dist/src/v2/run-store.d.ts +114 -82
  119. package/dist/src/v2/run-store.d.ts.map +1 -1
  120. package/dist/src/v2/run-store.js +308 -224
  121. package/dist/src/v2/run-store.js.map +1 -1
  122. package/dist/src/v2/runtime-assets.d.ts +3 -0
  123. package/dist/src/v2/runtime-assets.d.ts.map +1 -1
  124. package/dist/src/v2/runtime-assets.js +104 -0
  125. package/dist/src/v2/runtime-assets.js.map +1 -1
  126. package/dist/src/v2/runtime.d.ts +52 -15
  127. package/dist/src/v2/runtime.d.ts.map +1 -1
  128. package/dist/src/v2/runtime.js +818 -348
  129. package/dist/src/v2/runtime.js.map +1 -1
  130. package/dist/src/v2/setup.js +0 -2
  131. package/dist/src/v2/setup.js.map +1 -1
  132. package/dist/src/v2/validation-progression.d.ts +70 -0
  133. package/dist/src/v2/validation-progression.d.ts.map +1 -0
  134. package/dist/src/v2/validation-progression.js +247 -0
  135. package/dist/src/v2/validation-progression.js.map +1 -0
  136. package/dist/src/v2/workflow-assets.d.ts +9 -3
  137. package/dist/src/v2/workflow-assets.d.ts.map +1 -1
  138. package/dist/src/v2/workflow-assets.js +256 -43
  139. package/dist/src/v2/workflow-assets.js.map +1 -1
  140. package/docs/deep-dive.md +52 -14
  141. package/internal-workflow/docs/agents/bug-workflow-routing.md +9 -7
  142. package/internal-workflow/docs/agents/coding-skill-routing.md +170 -120
  143. package/internal-workflow/docs/agents/tool-usage.md +23 -12
  144. package/internal-workflow/manifest.json +1 -1
  145. package/internal-workflow/operations/code-review/SKILL.md +34 -15
  146. package/internal-workflow/operations/implementation/SKILL.md +21 -16
  147. package/internal-workflow/profiles/implementer.toml +9 -0
  148. package/internal-workflow/profiles/review_coordinator.toml +9 -0
  149. package/internal-workflow/profiles/spec_reviewer.toml +9 -0
  150. package/internal-workflow/profiles/standards_reviewer.toml +9 -0
  151. package/internal-workflow/schemas/code-review-v1.json +1 -1
  152. package/internal-workflow/schemas/implementation-report-v1.json +1 -1
  153. package/internal-workflow/schemas/proof-report-v1.json +1 -1
  154. package/internal-workflow/skills/bug-root-cause-explainer/SKILL.md +114 -0
  155. package/internal-workflow/skills/bug-root-cause-explainer/agents/openai.yaml +7 -0
  156. package/internal-workflow/skills/bug-root-cause-explainer/evals/evals.json +18 -0
  157. package/internal-workflow/skills/code-review/SKILL.md +84 -288
  158. package/internal-workflow/skills/code-review/agents/openai.yaml +5 -3
  159. package/internal-workflow/skills/code-review/evals/evals.json +83 -0
  160. package/internal-workflow/skills/code-review/references/standards-smells.md +41 -0
  161. package/internal-workflow/skills/diagnosing-bugs/SKILL.md +69 -32
  162. package/internal-workflow/skills/diagnosing-bugs/agents/openai.yaml +2 -2
  163. package/internal-workflow/skills/diagnosing-bugs/evals/evals.json +63 -0
  164. package/internal-workflow/skills/grilling/SKILL.md +51 -0
  165. package/internal-workflow/skills/grilling/agents/openai.yaml +6 -0
  166. package/internal-workflow/skills/grilling/evals/evals.json +47 -0
  167. package/internal-workflow/skills/implement/SKILL.md +135 -0
  168. package/internal-workflow/skills/implement/agents/openai.yaml +6 -0
  169. package/internal-workflow/skills/implement/evals/evals.json +150 -0
  170. package/internal-workflow/skills/plan/SKILL.md +59 -0
  171. package/internal-workflow/skills/plan/agents/openai.yaml +6 -0
  172. package/internal-workflow/skills/plan/evals/evals.json +36 -0
  173. package/internal-workflow/skills/prototype/LOGIC.md +130 -0
  174. package/internal-workflow/skills/prototype/SKILL.md +69 -0
  175. package/internal-workflow/skills/prototype/UI.md +157 -0
  176. package/internal-workflow/skills/prototype/agents/openai.yaml +6 -0
  177. package/internal-workflow/skills/prototype/evals/evals.json +67 -0
  178. package/internal-workflow/skills/research/SKILL.md +110 -0
  179. package/internal-workflow/skills/research/agents/openai.yaml +6 -0
  180. package/internal-workflow/skills/research/evals/evals.json +49 -0
  181. package/internal-workflow/skills/tdd/SKILL.md +72 -67
  182. package/internal-workflow/skills/tdd/agents/openai.yaml +2 -2
  183. package/internal-workflow/skills/tdd/evals/evals.json +12 -0
  184. package/internal-workflow/skills/tdd/mocking.md +48 -1
  185. package/internal-workflow/skills/tdd/refactoring.md +3 -3
  186. package/internal-workflow/skills/tickets-orchestrator/SKILL.md +199 -0
  187. package/internal-workflow/skills/tickets-orchestrator/agents/openai.yaml +6 -0
  188. package/internal-workflow/skills/tickets-orchestrator/evals/evals.json +126 -0
  189. package/internal-workflow/skills/tickets-orchestrator/references/delegate-integrate.md +83 -0
  190. package/internal-workflow/skills/tickets-orchestrator/references/finish-delivery.md +69 -0
  191. package/internal-workflow/skills/tickets-orchestrator/references/stop-completion.md +63 -0
  192. package/internal-workflow/skills/to-spec/SKILL.md +133 -0
  193. package/internal-workflow/skills/to-spec/agents/openai.yaml +6 -0
  194. package/internal-workflow/skills/to-spec/evals/evals.json +24 -0
  195. package/internal-workflow/skills/to-tickets/SKILL.md +189 -0
  196. package/internal-workflow/skills/to-tickets/agents/openai.yaml +6 -0
  197. package/internal-workflow/skills/to-tickets/evals/evals.json +79 -0
  198. package/internal-workflow/skills/to-tickets/references/publishing-details.md +117 -0
  199. package/package.json +1 -1
  200. package/dist/src/v2/proof-store.d.ts +0 -42
  201. package/dist/src/v2/proof-store.d.ts.map +0 -1
  202. package/dist/src/v2/proof-store.js +0 -180
  203. package/dist/src/v2/proof-store.js.map +0 -1
  204. package/dist/src/v2/route-continuations.d.ts +0 -32
  205. package/dist/src/v2/route-continuations.d.ts.map +0 -1
  206. package/dist/src/v2/route-continuations.js +0 -2
  207. package/dist/src/v2/route-continuations.js.map +0 -1
  208. package/dist/src/v2/route-coordinator.d.ts +0 -77
  209. package/dist/src/v2/route-coordinator.d.ts.map +0 -1
  210. package/dist/src/v2/route-coordinator.js +0 -370
  211. package/dist/src/v2/route-coordinator.js.map +0 -1
  212. package/dist/src/v2/route-decision.d.ts +0 -129
  213. package/dist/src/v2/route-decision.d.ts.map +0 -1
  214. package/dist/src/v2/route-decision.js +0 -400
  215. package/dist/src/v2/route-decision.js.map +0 -1
  216. package/dist/src/v2/spec-coordinator.d.ts +0 -85
  217. package/dist/src/v2/spec-coordinator.d.ts.map +0 -1
  218. package/dist/src/v2/spec-coordinator.js +0 -88
  219. package/dist/src/v2/spec-coordinator.js.map +0 -1
  220. package/dist/src/v2/spec-delivery.d.ts +0 -143
  221. package/dist/src/v2/spec-delivery.d.ts.map +0 -1
  222. package/dist/src/v2/spec-delivery.js +0 -401
  223. package/dist/src/v2/spec-delivery.js.map +0 -1
  224. package/dist/src/v2/triage-route.d.ts +0 -68
  225. package/dist/src/v2/triage-route.d.ts.map +0 -1
  226. package/dist/src/v2/triage-route.js +0 -223
  227. package/dist/src/v2/triage-route.js.map +0 -1
  228. package/dist/src/v2/waiting-human-coordinator.d.ts +0 -49
  229. package/dist/src/v2/waiting-human-coordinator.d.ts.map +0 -1
  230. package/dist/src/v2/waiting-human-coordinator.js +0 -509
  231. package/dist/src/v2/waiting-human-coordinator.js.map +0 -1
  232. package/dist/src/v2/waiting-human.d.ts +0 -143
  233. package/dist/src/v2/waiting-human.d.ts.map +0 -1
  234. package/dist/src/v2/waiting-human.js +0 -408
  235. package/dist/src/v2/waiting-human.js.map +0 -1
  236. package/internal-workflow/docs/agents/contract-test-ledger.md +0 -71
  237. package/internal-workflow/docs/agents/review-gates.md +0 -42
  238. package/internal-workflow/docs/agents/review-protocol.md +0 -98
  239. package/internal-workflow/evals/coding-skill-evals.json +0 -332
  240. package/internal-workflow/operations/ambiguity-review/SKILL.md +0 -5
  241. package/internal-workflow/operations/qualification-repair/SKILL.md +0 -17
  242. package/internal-workflow/operations/spec-author/SKILL.md +0 -12
  243. package/internal-workflow/operations/spec-review/SKILL.md +0 -12
  244. package/internal-workflow/operations/triage/SKILL.md +0 -12
  245. package/internal-workflow/profiles/analyst_deep.toml +0 -9
  246. package/internal-workflow/profiles/implementer_standard.toml +0 -9
  247. package/internal-workflow/profiles/proof_agent.toml +0 -8
  248. package/internal-workflow/profiles/reviewer_deep.toml +0 -9
  249. package/internal-workflow/profiles/reviewer_standard.toml +0 -9
  250. package/internal-workflow/schemas/ambiguity-review-v1.json +0 -1
  251. package/internal-workflow/schemas/spec-author-v1.json +0 -1
  252. package/internal-workflow/schemas/spec-review-v1.json +0 -30
  253. package/internal-workflow/schemas/triage-route-v1.json +0 -1
  254. package/internal-workflow/skills/agent-auto/SKILL.md +0 -19
  255. package/internal-workflow/skills/agent-auto/agents/openai.yaml +0 -6
  256. package/internal-workflow/skills/code-debugger/SKILL.md +0 -122
  257. package/internal-workflow/skills/code-debugger/agents/openai.yaml +0 -7
  258. package/internal-workflow/skills/code-review/references/bug-classes.md +0 -56
  259. package/internal-workflow/skills/code-review/references/cleanup-lens.md +0 -52
  260. package/internal-workflow/skills/code-review/references/framework-lenses.md +0 -34
  261. package/internal-workflow/skills/code-review/references/targeted-recipes.md +0 -49
  262. package/internal-workflow/skills/implementation-spec-maker/SKILL.md +0 -107
  263. package/internal-workflow/skills/implementation-spec-maker/agents/openai.yaml +0 -6
  264. package/internal-workflow/skills/implementation-spec-maker/references/source-modes.md +0 -32
  265. package/internal-workflow/skills/implementation-spec-maker/references/spec-template.md +0 -146
  266. package/internal-workflow/skills/implementation-spec-review/SKILL.md +0 -131
  267. package/internal-workflow/skills/implementation-spec-review/agents/openai.yaml +0 -6
  268. package/internal-workflow/skills/implementation-spec-review/evals/evals.json +0 -78
  269. package/internal-workflow/skills/implementation-spec-review/references/review-loop.md +0 -121
  270. package/internal-workflow/skills/small-task-implementer/SKILL.md +0 -112
  271. package/internal-workflow/skills/small-task-implementer/agents/openai.yaml +0 -6
  272. package/internal-workflow/skills/spec-implementer/SKILL.md +0 -126
  273. package/internal-workflow/skills/spec-implementer/agents/openai.yaml +0 -6
  274. package/internal-workflow/skills/spec-implementer/evals/evals.json +0 -30
  275. package/internal-workflow/skills/spec-implementer/references/review-loop.md +0 -100
  276. package/internal-workflow/skills/triage/AGENT-BRIEF.md +0 -192
  277. package/internal-workflow/skills/triage/OUT-OF-SCOPE.md +0 -101
  278. package/internal-workflow/skills/triage/SKILL.md +0 -134
  279. package/internal-workflow/skills/triage/agents/openai.yaml +0 -6
@@ -1,400 +0,0 @@
1
- import { canonicalJson, sha256 } from './containment.js';
2
- import { validateTriageRoute } from './triage-route.js';
3
- const SHA256_PATTERN = /^[0-9a-f]{64}$/;
4
- const MAX_STRING_LENGTH = 16 * 1024;
5
- const MAX_ARRAY_LENGTH = 256;
6
- const TRIAGE_ARTIFACT_DOMAIN = 'codex-orchestrator-triage-artifact-v1';
7
- const AMBIGUITY_REVIEW_DOMAIN = 'codex-orchestrator-ambiguity-review-v1';
8
- const ROUTE_DECISION_DOMAIN = 'codex-orchestrator-route-decision-v1';
9
- export function hashTriageArtifact(value) {
10
- return hashDomain(TRIAGE_ARTIFACT_DOMAIN, validateTriageRoute(value));
11
- }
12
- export function hashAmbiguityReviewArtifact(value) {
13
- return hashDomain(AMBIGUITY_REVIEW_DOMAIN, validateAmbiguityReviewArtifact(value));
14
- }
15
- export function hashRouteDecision(value) {
16
- const receipt = validateRouteReceiptCore(value, undefined, false);
17
- return hashDomain(ROUTE_DECISION_DOMAIN, { ...receipt, decisionSha256: '' });
18
- }
19
- export function validateAmbiguityReviewArtifact(value) {
20
- assertExactObject(value, [
21
- 'version', 'candidateSha256', 'verdict', 'evidenceReviewed', 'findings', 'recommendation',
22
- ], 'ambiguity review artifact');
23
- if (value.version !== 1)
24
- throw new Error('ambiguity review artifact.version must be 1');
25
- assertSha256(value.candidateSha256, 'ambiguity review artifact.candidateSha256');
26
- if (!['approved', 'rejected', 'blocked'].includes(value.verdict)) {
27
- throw new Error('ambiguity review artifact.verdict is invalid');
28
- }
29
- assertStringArray(value.evidenceReviewed, 'ambiguity review artifact.evidenceReviewed', 0);
30
- assertUnique(value.evidenceReviewed, 'ambiguity review artifact.evidenceReviewed');
31
- assertStringArray(value.findings, 'ambiguity review artifact.findings', 0);
32
- assertUnique(value.findings, 'ambiguity review artifact.findings');
33
- assertString(value.recommendation, 'ambiguity review artifact.recommendation');
34
- return value;
35
- }
36
- export function validateRouteArtifactRef(value, expectedGenerationHash) {
37
- assertExactObject(value, ['operation', 'attemptId', 'artifactSha256', 'generationHash'], 'route triage ref');
38
- if (value.operation !== 'triage')
39
- throw new Error('route triage ref.operation must be triage');
40
- assertString(value.attemptId, 'route triage ref.attemptId');
41
- assertSha256(value.artifactSha256, 'route triage ref.artifactSha256');
42
- assertGeneration(value.generationHash, expectedGenerationHash, 'route triage ref.generationHash');
43
- return value;
44
- }
45
- export function validateAmbiguityReviewRef(value, expectedGenerationHash) {
46
- assertExactObject(value, [
47
- 'operation', 'attemptId', 'candidateSha256', 'artifactSha256', 'verdict', 'generationHash',
48
- ], 'ambiguity review ref');
49
- if (value.operation !== 'ambiguity-review')
50
- throw new Error('ambiguity review ref.operation must be ambiguity-review');
51
- assertString(value.attemptId, 'ambiguity review ref.attemptId');
52
- assertSha256(value.candidateSha256, 'ambiguity review ref.candidateSha256');
53
- assertSha256(value.artifactSha256, 'ambiguity review ref.artifactSha256');
54
- if (value.verdict !== 'approved' && value.verdict !== 'rejected')
55
- throw new Error('ambiguity review ref.verdict is invalid');
56
- assertGeneration(value.generationHash, expectedGenerationHash, 'ambiguity review ref.generationHash');
57
- return value;
58
- }
59
- export function validateRouteReceipt(value, expectedGenerationHash) {
60
- return validateRouteReceiptCore(value, expectedGenerationHash, true);
61
- }
62
- function validateRouteReceiptCore(value, expectedGenerationHash, verifyDecisionHash) {
63
- assertExactObject(value, [
64
- 'version', 'route', 'triage', 'review', 'artifact', 'decisionSha256', 'decidedAt', 'assumptions',
65
- ], 'route receipt');
66
- if (value.version !== 1)
67
- throw new Error('route receipt.version must be 1');
68
- if (!['direct', 'spec-required', 'awaiting-user'].includes(value.route)) {
69
- throw new Error('route receipt.route is invalid');
70
- }
71
- const triage = validateRouteArtifactRef(value.triage, expectedGenerationHash);
72
- const artifact = validateTriageRoute(value.artifact);
73
- if (artifact.status === 'blocked' || artifact.status !== value.route) {
74
- throw new Error('route receipt.route does not match artifact status');
75
- }
76
- const artifactSha256 = hashTriageArtifact(artifact);
77
- if (triage.artifactSha256 !== artifactSha256)
78
- throw new Error('route receipt artifact hash mismatch');
79
- let review;
80
- if (value.review === null) {
81
- review = null;
82
- }
83
- else {
84
- review = validateAmbiguityReviewRef(value.review, expectedGenerationHash ?? triage.generationHash);
85
- if (review.generationHash !== triage.generationHash)
86
- throw new Error('route receipt review generation mismatch');
87
- }
88
- if (value.route === 'awaiting-user') {
89
- if (review === null || review.verdict !== 'approved')
90
- throw new Error('awaiting-user route requires an approved review');
91
- if (review.candidateSha256 !== triage.artifactSha256)
92
- throw new Error('awaiting-user review candidate hash mismatch');
93
- if (review.attemptId === triage.attemptId)
94
- throw new Error('triage and ambiguity review attempt IDs must be distinct');
95
- }
96
- else if (review !== null) {
97
- throw new Error(`${String(value.route)} route requires review null`);
98
- }
99
- if (verifyDecisionHash || value.decisionSha256 !== '') {
100
- assertSha256(value.decisionSha256, 'route receipt.decisionSha256');
101
- }
102
- assertTimestamp(value.decidedAt, 'route receipt.decidedAt');
103
- assertStringArray(value.assumptions, 'route receipt.assumptions', 0);
104
- assertUnique(value.assumptions, 'route receipt.assumptions');
105
- if (canonicalJson(value.assumptions) !== canonicalJson(artifact.assumptions)) {
106
- throw new Error('route receipt assumptions must equal artifact assumptions');
107
- }
108
- const receipt = value;
109
- const expectedDecisionSha256 = hashDomain(ROUTE_DECISION_DOMAIN, { ...receipt, decisionSha256: '' });
110
- if (verifyDecisionHash && value.decisionSha256 !== expectedDecisionSha256) {
111
- throw new Error('route receipt decision hash mismatch');
112
- }
113
- return receipt;
114
- }
115
- export function validateRouteExecution(value, expectedGenerationHash) {
116
- assertRecord(value, 'route execution');
117
- validateBudgets(value);
118
- const budgetKeys = [
119
- 'version', 'triageRepairs', 'triageTransportRetries', 'ambiguityTransportRetries', 'candidateReviews',
120
- ];
121
- if (value.phase === 'triage-ready') {
122
- assertExactObject(value, [...budgetKeys, 'phase', 'previousAttemptId'], 'route execution');
123
- if (value.previousAttemptId !== null)
124
- assertString(value.previousAttemptId, 'route execution.previousAttemptId');
125
- }
126
- else if (value.phase === 'triage-in-flight') {
127
- assertExactObject(value, [...budgetKeys, 'phase', 'attemptId', 'startedAt'], 'route execution');
128
- assertAttemptAndTimestamp(value);
129
- }
130
- else if (value.phase === 'candidate-ready') {
131
- assertExactObject(value, [...budgetKeys, 'phase', 'candidate', 'triage'], 'route execution');
132
- validateWaitingCandidate(value.candidate, value.triage, expectedGenerationHash);
133
- if (value.candidateReviews !== 0)
134
- throw new Error('candidate-ready candidateReviews must be 0');
135
- }
136
- else if (value.phase === 'review-in-flight') {
137
- assertExactObject(value, [...budgetKeys, 'phase', 'attemptId', 'startedAt', 'candidate', 'triage'], 'route execution');
138
- assertAttemptAndTimestamp(value);
139
- const triage = validateWaitingCandidate(value.candidate, value.triage, expectedGenerationHash);
140
- if (value.attemptId === triage.attemptId)
141
- throw new Error('review attempt ID must be distinct from triage attempt ID');
142
- if (value.candidateReviews !== 0)
143
- throw new Error('review-in-flight candidateReviews must be 0');
144
- }
145
- else if (value.phase === 'malformed-repair-ready') {
146
- assertExactObject(value, [...budgetKeys, 'phase', 'findings'], 'route execution');
147
- validateFindings(value.findings, 'route execution.findings');
148
- assertRepairConsumed(value);
149
- }
150
- else if (value.phase === 'candidate-repair-ready') {
151
- assertExactObject(value, [...budgetKeys, 'phase', 'candidate', 'triage', 'review', 'findings'], 'route execution');
152
- validateRejectedCandidate(value.candidate, value.triage, value.review, value.findings, expectedGenerationHash);
153
- assertRejectedRepairBudgets(value);
154
- }
155
- else if (value.phase === 'repair-in-flight') {
156
- assertExactObject(value, [...budgetKeys, 'phase', 'attemptId', 'startedAt', 'repairInput'], 'route execution');
157
- assertAttemptAndTimestamp(value);
158
- validateRepairInput(value.repairInput, expectedGenerationHash);
159
- assertRepairConsumed(value);
160
- if (value.repairInput.kind === 'rejected-candidate') {
161
- if (value.candidateReviews !== 1)
162
- throw new Error('rejected-candidate repair requires candidateReviews 1');
163
- }
164
- else if (value.candidateReviews !== 0) {
165
- throw new Error('malformed repair requires candidateReviews 0');
166
- }
167
- }
168
- else if (value.phase === 'route-complete') {
169
- assertExactObject(value, [...budgetKeys, 'phase', 'triage', 'review'], 'route execution');
170
- const triage = validateRouteArtifactRef(value.triage, expectedGenerationHash);
171
- if (value.review !== null) {
172
- const review = validateAmbiguityReviewRef(value.review, expectedGenerationHash ?? triage.generationHash);
173
- validateReviewBinding(triage, review);
174
- if (review.verdict !== 'approved')
175
- throw new Error('route-complete review must be approved');
176
- if (value.candidateReviews !== 1)
177
- throw new Error('reviewed route-complete requires candidateReviews 1');
178
- }
179
- }
180
- else {
181
- throw new Error('route execution.phase is invalid');
182
- }
183
- return value;
184
- }
185
- export function validateRouteStateInvariant(input) {
186
- assertSha256(input.generationHash, 'route state.generationHash');
187
- if (!ROUTE_LIFECYCLES.includes(input.lifecycle))
188
- throw new Error('route state lifecycle is invalid');
189
- const hasExecution = input.routeExecution !== undefined;
190
- const hasReceipt = input.routeReceipt !== undefined;
191
- if (input.lifecycle === 'claimed') {
192
- if (hasExecution || hasReceipt)
193
- throw new Error('claimed route state requires routeExecution and routeReceipt absent');
194
- return;
195
- }
196
- if (input.lifecycle === 'triaging') {
197
- if (!hasExecution || hasReceipt)
198
- throw new Error('triaging route state requires routeExecution and routeReceipt absent');
199
- const execution = validateRouteExecution(input.routeExecution, input.generationHash);
200
- if (execution.phase === 'route-complete')
201
- throw new Error('triaging route execution cannot be route-complete');
202
- return;
203
- }
204
- if (input.lifecycle === 'safe-halt' && hasExecution && !hasReceipt) {
205
- const execution = validateRouteExecution(input.routeExecution, input.generationHash);
206
- if (!['triage-in-flight', 'repair-in-flight', 'review-in-flight'].includes(execution.phase)) {
207
- throw new Error('pre-route safe-halt requires an in-flight route execution');
208
- }
209
- return;
210
- }
211
- if (TERMINAL_LIFECYCLES.includes(input.lifecycle) && !hasExecution && !hasReceipt)
212
- return;
213
- if (!hasExecution || !hasReceipt)
214
- throw new Error(`${input.lifecycle} route execution and receipt are required as an exact pair`);
215
- const execution = validateRouteExecution(input.routeExecution, input.generationHash);
216
- if (execution.phase !== 'route-complete')
217
- throw new Error(`${input.lifecycle} route execution must be route-complete`);
218
- const receipt = validateRouteReceipt(input.routeReceipt, input.generationHash);
219
- if (canonicalJson(execution.triage) !== canonicalJson(receipt.triage)
220
- || canonicalJson(execution.review) !== canonicalJson(receipt.review)) {
221
- throw new Error('route-complete refs must equal route receipt refs');
222
- }
223
- if (input.lifecycle === 'implementing' && receipt.route !== 'direct') {
224
- throw new Error('implementing lifecycle requires direct route');
225
- }
226
- if (input.lifecycle === 'spec-authoring' && receipt.route !== 'spec-required') {
227
- throw new Error('direct route dispatch requires implementing lifecycle');
228
- }
229
- if (input.lifecycle === 'waiting-human' && receipt.route !== 'awaiting-user') {
230
- throw new Error('waiting-human lifecycle requires awaiting-user route');
231
- }
232
- }
233
- export function downstreamLifecycleForRoute(receiptValue, expectedGenerationHash) {
234
- const receipt = validateRouteReceipt(receiptValue, expectedGenerationHash);
235
- if (receipt.route === 'direct')
236
- return 'implementing';
237
- if (receipt.route === 'spec-required')
238
- return 'spec-authoring';
239
- return 'waiting-human';
240
- }
241
- export function validateRouteTransition(previous, next) {
242
- validateRouteStateInvariant(previous);
243
- validateRouteStateInvariant(next);
244
- if (previous.generationHash !== next.generationHash)
245
- throw new Error('route transition generation is immutable');
246
- if (previous.routeReceipt !== undefined) {
247
- if (next.routeReceipt === undefined
248
- || canonicalJson(previous.routeReceipt) !== canonicalJson(next.routeReceipt)) {
249
- throw new Error('route receipt is immutable after routing');
250
- }
251
- }
252
- if (previous.lifecycle === 'routed' && next.lifecycle !== 'routed') {
253
- const expected = downstreamLifecycleForRoute(previous.routeReceipt, previous.generationHash);
254
- if (next.lifecycle !== expected)
255
- throw new Error(`routed ${String(previous.routeReceipt.route)} must dispatch to ${expected}`);
256
- }
257
- }
258
- export function validateTrustedAnswerResumeTransition(previous, next, waitingHuman) {
259
- validateRouteStateInvariant(previous);
260
- validateRouteStateInvariant(next);
261
- if (previous.lifecycle !== 'waiting-human' || previous.routeReceipt.route !== 'awaiting-user') {
262
- throw new Error('trusted answer resume requires waiting-human awaiting-user authority');
263
- }
264
- if (waitingHuman.phase !== 'resume-ready')
265
- throw new Error('trusted answer resume requires resume-ready evidence');
266
- if (next.lifecycle !== 'triaging' || next.routeReceipt !== undefined)
267
- throw new Error('trusted answer resume must restart triage without a receipt');
268
- const execution = validateRouteExecution(next.routeExecution, next.generationHash);
269
- if (execution.phase !== 'triage-ready' || execution.previousAttemptId !== null
270
- || execution.triageRepairs !== 0 || execution.triageTransportRetries !== 0
271
- || execution.ambiguityTransportRetries !== 0 || execution.candidateReviews !== 0) {
272
- throw new Error('trusted answer resume requires initial route execution');
273
- }
274
- }
275
- const ROUTE_LIFECYCLES = [
276
- 'claimed', 'triaging', 'routed', 'implementing', 'waiting-human', 'spec-authoring', 'reworking', 'checking',
277
- 'proving', 'publishing', 'safe-halt', 'review-ready', 'blocked', 'transport-failed', 'cancelled', 'internal-error',
278
- ];
279
- const TERMINAL_LIFECYCLES = [
280
- 'review-ready', 'blocked', 'transport-failed', 'cancelled', 'internal-error',
281
- ];
282
- function validateBudgets(value) {
283
- if (value.version !== 1)
284
- throw new Error('route execution.version must be 1');
285
- for (const key of [
286
- 'triageRepairs', 'triageTransportRetries', 'ambiguityTransportRetries', 'candidateReviews',
287
- ]) {
288
- if (value[key] !== 0 && value[key] !== 1)
289
- throw new Error(`route execution.${key} must be 0 or 1`);
290
- }
291
- }
292
- function validateWaitingCandidate(candidateValue, triageValue, expectedGenerationHash) {
293
- const candidate = validateTriageRoute(candidateValue);
294
- if (candidate.status !== 'awaiting-user')
295
- throw new Error('route execution candidate must be awaiting-user');
296
- const triage = validateRouteArtifactRef(triageValue, expectedGenerationHash);
297
- if (triage.artifactSha256 !== hashTriageArtifact(candidate))
298
- throw new Error('route execution candidate artifact hash mismatch');
299
- return triage;
300
- }
301
- function validateRejectedCandidate(candidate, triageValue, reviewValue, findings, expectedGenerationHash) {
302
- const triage = validateWaitingCandidate(candidate, triageValue, expectedGenerationHash);
303
- const review = validateAmbiguityReviewRef(reviewValue, expectedGenerationHash ?? triage.generationHash);
304
- validateReviewBinding(triage, review);
305
- if (review.verdict !== 'rejected')
306
- throw new Error('candidate repair review must be rejected');
307
- validateFindings(findings, 'route execution findings');
308
- }
309
- function validateRepairInput(value, expectedGenerationHash) {
310
- assertRecord(value, 'route execution.repairInput');
311
- if (value.kind === 'malformed') {
312
- assertExactObject(value, ['kind', 'findings'], 'route execution.repairInput');
313
- validateFindings(value.findings, 'route execution.repairInput.findings');
314
- return;
315
- }
316
- if (value.kind === 'rejected-candidate') {
317
- assertExactObject(value, ['kind', 'candidate', 'triage', 'review', 'findings'], 'route execution.repairInput');
318
- validateRejectedCandidate(value.candidate, value.triage, value.review, value.findings, expectedGenerationHash);
319
- return;
320
- }
321
- throw new Error('route execution.repairInput.kind is invalid');
322
- }
323
- function validateReviewBinding(triage, review) {
324
- if (review.generationHash !== triage.generationHash)
325
- throw new Error('ambiguity review generation mismatch');
326
- if (review.candidateSha256 !== triage.artifactSha256)
327
- throw new Error('ambiguity review candidate hash mismatch');
328
- if (review.attemptId === triage.attemptId)
329
- throw new Error('ambiguity review attempt must be distinct from triage attempt');
330
- }
331
- function assertRepairConsumed(value) {
332
- if (value.triageRepairs !== 1)
333
- throw new Error('repair phase requires triageRepairs 1');
334
- }
335
- function assertRejectedRepairBudgets(value) {
336
- assertRepairConsumed(value);
337
- if (value.candidateReviews !== 1)
338
- throw new Error('rejected candidate requires candidateReviews 1');
339
- }
340
- function validateFindings(value, field) {
341
- assertStringArray(value, field, 1);
342
- assertUnique(value, field);
343
- }
344
- function assertAttemptAndTimestamp(value) {
345
- assertString(value.attemptId, 'route execution.attemptId');
346
- assertTimestamp(value.startedAt, 'route execution.startedAt');
347
- }
348
- function hashDomain(domain, value) {
349
- return sha256(Buffer.concat([
350
- Buffer.from(domain, 'ascii'),
351
- Buffer.from([0]),
352
- Buffer.from(canonicalJson(value), 'utf8'),
353
- ]));
354
- }
355
- function assertGeneration(value, expected, field) {
356
- assertSha256(value, field);
357
- if (expected !== undefined) {
358
- assertSha256(expected, 'expected generation hash');
359
- if (value !== expected)
360
- throw new Error(`${field} generation mismatch`);
361
- }
362
- }
363
- function assertTimestamp(value, field) {
364
- if (typeof value !== 'string' || Number.isNaN(Date.parse(value)) || new Date(value).toISOString() !== value) {
365
- throw new Error(`${field} must be an ISO timestamp`);
366
- }
367
- }
368
- function assertSha256(value, field) {
369
- if (typeof value !== 'string' || !SHA256_PATTERN.test(value))
370
- throw new Error(`${field} must be lowercase SHA-256`);
371
- }
372
- function assertStringArray(value, field, minItems) {
373
- if (!Array.isArray(value) || value.length < minItems || value.length > MAX_ARRAY_LENGTH) {
374
- throw new Error(`${field} has invalid cardinality`);
375
- }
376
- for (const item of value)
377
- assertString(item, `${field} entry`);
378
- }
379
- function assertUnique(values, field) {
380
- if (new Set(values).size !== values.length)
381
- throw new Error(`${field} must be unique`);
382
- }
383
- function assertString(value, field) {
384
- if (typeof value !== 'string' || value.length === 0 || value.length > MAX_STRING_LENGTH) {
385
- throw new Error(`${field} must be a bounded non-empty string`);
386
- }
387
- }
388
- function assertRecord(value, field) {
389
- if (typeof value !== 'object' || value === null || Array.isArray(value))
390
- throw new Error(`${field} must be an object`);
391
- }
392
- function assertExactObject(value, keys, field) {
393
- assertRecord(value, field);
394
- const actual = Object.keys(value).sort();
395
- const expected = [...keys].sort();
396
- if (actual.length !== expected.length || actual.some((key, index) => key !== expected[index])) {
397
- throw new Error(`${field} has unknown or missing keys`);
398
- }
399
- }
400
- //# sourceMappingURL=route-decision.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"route-decision.js","sourceRoot":"","sources":["../../../src/v2/route-decision.ts"],"names":[],"mappings":"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"}
@@ -1,85 +0,0 @@
1
- import { type FrozenSpecReceiptV1, type SpecDeliveryV1, type SpecReviewReportV1, type SpecRevisionV1 } from './spec-delivery.js';
2
- import type { RoutedRunContext } from './route-continuations.js';
3
- export interface SpecDeliveryState {
4
- read(): Promise<SpecDeliveryV1 | undefined>;
5
- compareAndSwap(expected: SpecDeliveryV1 | undefined, next: SpecDeliveryV1): Promise<boolean>;
6
- }
7
- export type SpecOperationResult<T> = {
8
- status: 'completed';
9
- value: T;
10
- reportSha256?: string;
11
- } | {
12
- status: 'retryable';
13
- code: string;
14
- } | {
15
- status: 'blocked';
16
- kind: 'external' | 'safety' | 'exhausted';
17
- code: string;
18
- } | {
19
- status: 'cancelled';
20
- };
21
- export interface SpecDeliveryOperation {
22
- author(input: {
23
- context: RoutedRunContext;
24
- state: SpecDeliveryV1;
25
- mode: 'author' | 'repair';
26
- signal: AbortSignal;
27
- onPrepared(actor: {
28
- attemptId: string;
29
- sessionId: string;
30
- reportPath?: string;
31
- revisionPath?: string;
32
- }): Promise<void>;
33
- onLaunched(actor: {
34
- attemptId: string;
35
- sessionId: string;
36
- pid: number;
37
- processGroupId: number;
38
- }): Promise<void>;
39
- }): Promise<SpecOperationResult<SpecRevisionV1>>;
40
- review(input: {
41
- context: RoutedRunContext;
42
- state: SpecDeliveryV1;
43
- mode: 'full' | 'closure';
44
- signal: AbortSignal;
45
- onPrepared(actor: {
46
- attemptId: string;
47
- sessionId: string;
48
- reportPath?: string;
49
- }): Promise<void>;
50
- onLaunched(actor: {
51
- attemptId: string;
52
- sessionId: string;
53
- pid: number;
54
- processGroupId: number;
55
- }): Promise<void>;
56
- }): Promise<SpecOperationResult<SpecReviewReportV1>>;
57
- recover(input: {
58
- context: RoutedRunContext;
59
- state: SpecDeliveryV1;
60
- signal: AbortSignal;
61
- }): Promise<SpecOperationResult<SpecRevisionV1 | SpecReviewReportV1>>;
62
- }
63
- export type SpecCoordinatorResult = {
64
- status: 'completed';
65
- receipt: FrozenSpecReceiptV1;
66
- } | {
67
- status: 'retryable';
68
- code: string;
69
- } | {
70
- status: 'blocked';
71
- kind: 'external' | 'safety' | 'exhausted';
72
- code: string;
73
- evidence: string[];
74
- } | {
75
- status: 'cancelled';
76
- };
77
- export declare class SpecCoordinator {
78
- private readonly dependencies;
79
- constructor(dependencies: {
80
- state: SpecDeliveryState;
81
- operation: SpecDeliveryOperation;
82
- });
83
- run(context: RoutedRunContext, signal: AbortSignal): Promise<SpecCoordinatorResult>;
84
- }
85
- //# sourceMappingURL=spec-coordinator.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-coordinator.d.ts","sourceRoot":"","sources":["../../../src/v2/spec-coordinator.ts"],"names":[],"mappings":"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"}
@@ -1,88 +0,0 @@
1
- import { acceptSpecReview, acceptSpecRevision, createInitialSpecDelivery, freezeApprovedSpec, launchSpecInvocation, prepareSpecInvocation, recoverMalformedSpecReport, recoverSpecInvocation, } from './spec-delivery.js';
2
- export class SpecCoordinator {
3
- dependencies;
4
- constructor(dependencies) {
5
- this.dependencies = dependencies;
6
- }
7
- async run(context, signal) {
8
- const observed = await this.dependencies.state.read();
9
- let current;
10
- if (!observed) {
11
- const initial = createInitialSpecDelivery({
12
- issueNumber: context.issue.number, runId: context.runId,
13
- workflowGenerationSha256: context.workflowGeneration.generationHash,
14
- });
15
- if (!await this.dependencies.state.compareAndSwap(undefined, initial))
16
- return { status: 'retryable', code: 'spec-state-conflict' };
17
- current = initial;
18
- }
19
- else
20
- current = observed;
21
- while (true) {
22
- if (signal.aborted)
23
- return { status: 'cancelled' };
24
- if (current.stage === 'frozen')
25
- return { status: 'completed', receipt: current.frozen };
26
- if (current.stage === 'rejected' || current.stage === 'exhausted') {
27
- return { status: 'blocked', kind: current.stage === 'rejected' ? 'safety' : 'exhausted', code: `spec-${current.stage}`, evidence: [] };
28
- }
29
- if (current.stage === 'approved') {
30
- const frozen = freezeApprovedSpec(current);
31
- if (!await this.dependencies.state.compareAndSwap(current, frozen))
32
- return { status: 'retryable', code: 'spec-freeze-state-conflict' };
33
- current = frozen;
34
- continue;
35
- }
36
- const author = current.invocation ? current.invocation.purpose === 'author' : current.stage === 'authoring' || current.stage === 'author-repair';
37
- const mode = current.invocation?.mode ?? (author ? (current.stage === 'authoring' ? 'author' : 'repair') : (current.stage === 'review-full' ? 'full' : 'closure'));
38
- let active = current;
39
- const onPrepared = async (actor) => {
40
- const next = prepareSpecInvocation(active, { purpose: author ? 'author' : 'review', mode, ...actor });
41
- if (!await this.dependencies.state.compareAndSwap(active, next))
42
- throw new Error('spec prepared state conflict');
43
- active = next;
44
- };
45
- const onLaunched = async (actor) => {
46
- if (active.invocation?.attemptId !== actor.attemptId || active.invocation.sessionId !== actor.sessionId)
47
- throw new Error('spec launch actor mismatch');
48
- const next = launchSpecInvocation(active, actor);
49
- if (!await this.dependencies.state.compareAndSwap(active, next))
50
- throw new Error('spec launched state conflict');
51
- active = next;
52
- };
53
- const result = current.invocation
54
- ? await this.dependencies.operation.recover({ context, state: current, signal })
55
- : author
56
- ? await this.dependencies.operation.author({ context, state: current, mode: mode, signal, onPrepared, onLaunched })
57
- : await this.dependencies.operation.review({ context, state: current, mode: mode, signal, onPrepared, onLaunched });
58
- if (result.status === 'retryable') {
59
- try {
60
- const owner = author ? 'author' : 'review';
61
- const recovered = result.code.includes('report-invalid')
62
- ? recoverMalformedSpecReport(active, owner)
63
- : recoverSpecInvocation(active, { attemptId: active.invocation.attemptId, processGroupAbsent: true });
64
- if (!await this.dependencies.state.compareAndSwap(active, recovered))
65
- return { status: 'retryable', code: 'spec-recovery-state-conflict' };
66
- current = recovered;
67
- continue;
68
- }
69
- catch {
70
- const exhausted = { ...structuredClone(active), stage: 'exhausted' };
71
- delete exhausted.invocation;
72
- if (!await this.dependencies.state.compareAndSwap(active, exhausted))
73
- return { status: 'retryable', code: 'spec-exhaustion-state-conflict' };
74
- return { status: 'blocked', kind: 'exhausted', code: 'spec-retry-budget-exhausted', evidence: [] };
75
- }
76
- }
77
- if (result.status !== 'completed')
78
- return result.status === 'blocked' ? { ...result, evidence: [] } : result;
79
- const next = author
80
- ? acceptSpecRevision(active, result.value)
81
- : acceptSpecReview(active, result.value, result.reportSha256 ?? '0'.repeat(64));
82
- if (!await this.dependencies.state.compareAndSwap(active, next))
83
- return { status: 'retryable', code: 'spec-result-state-conflict' };
84
- current = next;
85
- }
86
- }
87
- }
88
- //# sourceMappingURL=spec-coordinator.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"spec-coordinator.js","sourceRoot":"","sources":["../../../src/v2/spec-coordinator.ts"],"names":[],"mappings":"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"}