@telora/factory 0.4.5

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 (301) hide show
  1. package/dist/audit.d.ts +69 -0
  2. package/dist/audit.d.ts.map +1 -0
  3. package/dist/audit.js +376 -0
  4. package/dist/audit.js.map +1 -0
  5. package/dist/builder-completion.d.ts +35 -0
  6. package/dist/builder-completion.d.ts.map +1 -0
  7. package/dist/builder-completion.js +375 -0
  8. package/dist/builder-completion.js.map +1 -0
  9. package/dist/builder-spawner.d.ts +40 -0
  10. package/dist/builder-spawner.d.ts.map +1 -0
  11. package/dist/builder-spawner.js +493 -0
  12. package/dist/builder-spawner.js.map +1 -0
  13. package/dist/completion-gate.d.ts +52 -0
  14. package/dist/completion-gate.d.ts.map +1 -0
  15. package/dist/completion-gate.js +336 -0
  16. package/dist/completion-gate.js.map +1 -0
  17. package/dist/completion-report.d.ts +36 -0
  18. package/dist/completion-report.d.ts.map +1 -0
  19. package/dist/completion-report.js +348 -0
  20. package/dist/completion-report.js.map +1 -0
  21. package/dist/completion.d.ts +58 -0
  22. package/dist/completion.d.ts.map +1 -0
  23. package/dist/completion.js +287 -0
  24. package/dist/completion.js.map +1 -0
  25. package/dist/config.d.ts +16 -0
  26. package/dist/config.d.ts.map +1 -0
  27. package/dist/config.js +57 -0
  28. package/dist/config.js.map +1 -0
  29. package/dist/context-manager.d.ts +152 -0
  30. package/dist/context-manager.d.ts.map +1 -0
  31. package/dist/context-manager.js +421 -0
  32. package/dist/context-manager.js.map +1 -0
  33. package/dist/crash-detection.d.ts +70 -0
  34. package/dist/crash-detection.d.ts.map +1 -0
  35. package/dist/crash-detection.js +123 -0
  36. package/dist/crash-detection.js.map +1 -0
  37. package/dist/crash-recovery.d.ts +83 -0
  38. package/dist/crash-recovery.d.ts.map +1 -0
  39. package/dist/crash-recovery.js +522 -0
  40. package/dist/crash-recovery.js.map +1 -0
  41. package/dist/crash-resolution.d.ts +34 -0
  42. package/dist/crash-resolution.d.ts.map +1 -0
  43. package/dist/crash-resolution.js +382 -0
  44. package/dist/crash-resolution.js.map +1 -0
  45. package/dist/escalation.d.ts +150 -0
  46. package/dist/escalation.d.ts.map +1 -0
  47. package/dist/escalation.js +352 -0
  48. package/dist/escalation.js.map +1 -0
  49. package/dist/execution-target.d.ts +31 -0
  50. package/dist/execution-target.d.ts.map +1 -0
  51. package/dist/execution-target.js +71 -0
  52. package/dist/execution-target.js.map +1 -0
  53. package/dist/execution-unit-init.d.ts +28 -0
  54. package/dist/execution-unit-init.d.ts.map +1 -0
  55. package/dist/execution-unit-init.js +115 -0
  56. package/dist/execution-unit-init.js.map +1 -0
  57. package/dist/execution.d.ts +17 -0
  58. package/dist/execution.d.ts.map +1 -0
  59. package/dist/execution.js +20 -0
  60. package/dist/execution.js.map +1 -0
  61. package/dist/factory-engine.d.ts +100 -0
  62. package/dist/factory-engine.d.ts.map +1 -0
  63. package/dist/factory-engine.js +243 -0
  64. package/dist/factory-engine.js.map +1 -0
  65. package/dist/gap-detection.d.ts +43 -0
  66. package/dist/gap-detection.d.ts.map +1 -0
  67. package/dist/gap-detection.js +149 -0
  68. package/dist/gap-detection.js.map +1 -0
  69. package/dist/gate-context.d.ts +23 -0
  70. package/dist/gate-context.d.ts.map +1 -0
  71. package/dist/gate-context.js +63 -0
  72. package/dist/gate-context.js.map +1 -0
  73. package/dist/gate-engine.d.ts +55 -0
  74. package/dist/gate-engine.d.ts.map +1 -0
  75. package/dist/gate-engine.js +191 -0
  76. package/dist/gate-engine.js.map +1 -0
  77. package/dist/gates/adversarial.d.ts +59 -0
  78. package/dist/gates/adversarial.d.ts.map +1 -0
  79. package/dist/gates/adversarial.js +426 -0
  80. package/dist/gates/adversarial.js.map +1 -0
  81. package/dist/gates/adversary-spawner.d.ts +35 -0
  82. package/dist/gates/adversary-spawner.d.ts.map +1 -0
  83. package/dist/gates/adversary-spawner.js +286 -0
  84. package/dist/gates/adversary-spawner.js.map +1 -0
  85. package/dist/gates/adversary-test-dir.d.ts +41 -0
  86. package/dist/gates/adversary-test-dir.d.ts.map +1 -0
  87. package/dist/gates/adversary-test-dir.js +150 -0
  88. package/dist/gates/adversary-test-dir.js.map +1 -0
  89. package/dist/gates/behavioral-parser.d.ts +32 -0
  90. package/dist/gates/behavioral-parser.d.ts.map +1 -0
  91. package/dist/gates/behavioral-parser.js +190 -0
  92. package/dist/gates/behavioral-parser.js.map +1 -0
  93. package/dist/gates/behavioral-runner.d.ts +36 -0
  94. package/dist/gates/behavioral-runner.d.ts.map +1 -0
  95. package/dist/gates/behavioral-runner.js +306 -0
  96. package/dist/gates/behavioral-runner.js.map +1 -0
  97. package/dist/gates/behavioral.d.ts +37 -0
  98. package/dist/gates/behavioral.d.ts.map +1 -0
  99. package/dist/gates/behavioral.js +485 -0
  100. package/dist/gates/behavioral.js.map +1 -0
  101. package/dist/gates/deterministic.d.ts +24 -0
  102. package/dist/gates/deterministic.d.ts.map +1 -0
  103. package/dist/gates/deterministic.js +186 -0
  104. package/dist/gates/deterministic.js.map +1 -0
  105. package/dist/git-factory.d.ts +59 -0
  106. package/dist/git-factory.d.ts.map +1 -0
  107. package/dist/git-factory.js +102 -0
  108. package/dist/git-factory.js.map +1 -0
  109. package/dist/guard-evaluation.d.ts +48 -0
  110. package/dist/guard-evaluation.d.ts.map +1 -0
  111. package/dist/guard-evaluation.js +416 -0
  112. package/dist/guard-evaluation.js.map +1 -0
  113. package/dist/index.d.ts +30 -0
  114. package/dist/index.d.ts.map +1 -0
  115. package/dist/index.js +39 -0
  116. package/dist/index.js.map +1 -0
  117. package/dist/instance-completion.d.ts +34 -0
  118. package/dist/instance-completion.d.ts.map +1 -0
  119. package/dist/instance-completion.js +366 -0
  120. package/dist/instance-completion.js.map +1 -0
  121. package/dist/instance-lifecycle.d.ts +15 -0
  122. package/dist/instance-lifecycle.d.ts.map +1 -0
  123. package/dist/instance-lifecycle.js +18 -0
  124. package/dist/instance-lifecycle.js.map +1 -0
  125. package/dist/instance-phase-dispatch.d.ts +75 -0
  126. package/dist/instance-phase-dispatch.d.ts.map +1 -0
  127. package/dist/instance-phase-dispatch.js +674 -0
  128. package/dist/instance-phase-dispatch.js.map +1 -0
  129. package/dist/instance-poll-loop.d.ts +43 -0
  130. package/dist/instance-poll-loop.d.ts.map +1 -0
  131. package/dist/instance-poll-loop.js +360 -0
  132. package/dist/instance-poll-loop.js.map +1 -0
  133. package/dist/instance-state-machine.d.ts +52 -0
  134. package/dist/instance-state-machine.d.ts.map +1 -0
  135. package/dist/instance-state-machine.js +235 -0
  136. package/dist/instance-state-machine.js.map +1 -0
  137. package/dist/log-manager.d.ts +28 -0
  138. package/dist/log-manager.d.ts.map +1 -0
  139. package/dist/log-manager.js +71 -0
  140. package/dist/log-manager.js.map +1 -0
  141. package/dist/pipeline-evaluator.d.ts +61 -0
  142. package/dist/pipeline-evaluator.d.ts.map +1 -0
  143. package/dist/pipeline-evaluator.js +107 -0
  144. package/dist/pipeline-evaluator.js.map +1 -0
  145. package/dist/pipeline-metrics.d.ts +52 -0
  146. package/dist/pipeline-metrics.d.ts.map +1 -0
  147. package/dist/pipeline-metrics.js +40 -0
  148. package/dist/pipeline-metrics.js.map +1 -0
  149. package/dist/pipeline-traversal.d.ts +43 -0
  150. package/dist/pipeline-traversal.d.ts.map +1 -0
  151. package/dist/pipeline-traversal.js +68 -0
  152. package/dist/pipeline-traversal.js.map +1 -0
  153. package/dist/plan-parser.d.ts +76 -0
  154. package/dist/plan-parser.d.ts.map +1 -0
  155. package/dist/plan-parser.js +223 -0
  156. package/dist/plan-parser.js.map +1 -0
  157. package/dist/planning-phase.d.ts +52 -0
  158. package/dist/planning-phase.d.ts.map +1 -0
  159. package/dist/planning-phase.js +444 -0
  160. package/dist/planning-phase.js.map +1 -0
  161. package/dist/planning-prompt.d.ts +64 -0
  162. package/dist/planning-prompt.d.ts.map +1 -0
  163. package/dist/planning-prompt.js +251 -0
  164. package/dist/planning-prompt.js.map +1 -0
  165. package/dist/planning.d.ts +16 -0
  166. package/dist/planning.d.ts.map +1 -0
  167. package/dist/planning.js +17 -0
  168. package/dist/planning.js.map +1 -0
  169. package/dist/process-runner.d.ts +41 -0
  170. package/dist/process-runner.d.ts.map +1 -0
  171. package/dist/process-runner.js +81 -0
  172. package/dist/process-runner.js.map +1 -0
  173. package/dist/product-config.d.ts +34 -0
  174. package/dist/product-config.d.ts.map +1 -0
  175. package/dist/product-config.js +43 -0
  176. package/dist/product-config.js.map +1 -0
  177. package/dist/queries/cycle-evaluations.d.ts +23 -0
  178. package/dist/queries/cycle-evaluations.d.ts.map +1 -0
  179. package/dist/queries/cycle-evaluations.js +37 -0
  180. package/dist/queries/cycle-evaluations.js.map +1 -0
  181. package/dist/queries/escalations.d.ts +30 -0
  182. package/dist/queries/escalations.d.ts.map +1 -0
  183. package/dist/queries/escalations.js +42 -0
  184. package/dist/queries/escalations.js.map +1 -0
  185. package/dist/queries/execution-units.d.ts +76 -0
  186. package/dist/queries/execution-units.d.ts.map +1 -0
  187. package/dist/queries/execution-units.js +109 -0
  188. package/dist/queries/execution-units.js.map +1 -0
  189. package/dist/queries/gate-results.d.ts +32 -0
  190. package/dist/queries/gate-results.d.ts.map +1 -0
  191. package/dist/queries/gate-results.js +44 -0
  192. package/dist/queries/gate-results.js.map +1 -0
  193. package/dist/queries/instances.d.ts +51 -0
  194. package/dist/queries/instances.d.ts.map +1 -0
  195. package/dist/queries/instances.js +77 -0
  196. package/dist/queries/instances.js.map +1 -0
  197. package/dist/queries/sessions.d.ts +50 -0
  198. package/dist/queries/sessions.d.ts.map +1 -0
  199. package/dist/queries/sessions.js +81 -0
  200. package/dist/queries/sessions.js.map +1 -0
  201. package/dist/queries/shared.d.ts +38 -0
  202. package/dist/queries/shared.d.ts.map +1 -0
  203. package/dist/queries/shared.js +119 -0
  204. package/dist/queries/shared.js.map +1 -0
  205. package/dist/queries/specs.d.ts +12 -0
  206. package/dist/queries/specs.d.ts.map +1 -0
  207. package/dist/queries/specs.js +21 -0
  208. package/dist/queries/specs.js.map +1 -0
  209. package/dist/queries/strategies.d.ts +14 -0
  210. package/dist/queries/strategies.d.ts.map +1 -0
  211. package/dist/queries/strategies.js +18 -0
  212. package/dist/queries/strategies.js.map +1 -0
  213. package/dist/queries/work-units.d.ts +42 -0
  214. package/dist/queries/work-units.d.ts.map +1 -0
  215. package/dist/queries/work-units.js +57 -0
  216. package/dist/queries/work-units.js.map +1 -0
  217. package/dist/queries/workflows.d.ts +29 -0
  218. package/dist/queries/workflows.d.ts.map +1 -0
  219. package/dist/queries/workflows.js +103 -0
  220. package/dist/queries/workflows.js.map +1 -0
  221. package/dist/remediation-units.d.ts +40 -0
  222. package/dist/remediation-units.d.ts.map +1 -0
  223. package/dist/remediation-units.js +263 -0
  224. package/dist/remediation-units.js.map +1 -0
  225. package/dist/replanning.d.ts +72 -0
  226. package/dist/replanning.d.ts.map +1 -0
  227. package/dist/replanning.js +403 -0
  228. package/dist/replanning.js.map +1 -0
  229. package/dist/resource-limits.d.ts +62 -0
  230. package/dist/resource-limits.d.ts.map +1 -0
  231. package/dist/resource-limits.js +322 -0
  232. package/dist/resource-limits.js.map +1 -0
  233. package/dist/scheduler.d.ts +98 -0
  234. package/dist/scheduler.d.ts.map +1 -0
  235. package/dist/scheduler.js +203 -0
  236. package/dist/scheduler.js.map +1 -0
  237. package/dist/session-adapter.d.ts +89 -0
  238. package/dist/session-adapter.d.ts.map +1 -0
  239. package/dist/session-adapter.js +108 -0
  240. package/dist/session-adapter.js.map +1 -0
  241. package/dist/sop-generator.d.ts +29 -0
  242. package/dist/sop-generator.d.ts.map +1 -0
  243. package/dist/sop-generator.js +235 -0
  244. package/dist/sop-generator.js.map +1 -0
  245. package/dist/spec-profiles.d.ts +41 -0
  246. package/dist/spec-profiles.d.ts.map +1 -0
  247. package/dist/spec-profiles.js +131 -0
  248. package/dist/spec-profiles.js.map +1 -0
  249. package/dist/strategy-design-graph.d.ts +23 -0
  250. package/dist/strategy-design-graph.d.ts.map +1 -0
  251. package/dist/strategy-design-graph.js +205 -0
  252. package/dist/strategy-design-graph.js.map +1 -0
  253. package/dist/strategy-design-prompt.d.ts +28 -0
  254. package/dist/strategy-design-prompt.d.ts.map +1 -0
  255. package/dist/strategy-design-prompt.js +108 -0
  256. package/dist/strategy-design-prompt.js.map +1 -0
  257. package/dist/strategy-design-schema.d.ts +767 -0
  258. package/dist/strategy-design-schema.d.ts.map +1 -0
  259. package/dist/strategy-design-schema.js +126 -0
  260. package/dist/strategy-design-schema.js.map +1 -0
  261. package/dist/strategy-design.d.ts +69 -0
  262. package/dist/strategy-design.d.ts.map +1 -0
  263. package/dist/strategy-design.js +411 -0
  264. package/dist/strategy-design.js.map +1 -0
  265. package/dist/strategy-gating.d.ts +31 -0
  266. package/dist/strategy-gating.d.ts.map +1 -0
  267. package/dist/strategy-gating.js +276 -0
  268. package/dist/strategy-gating.js.map +1 -0
  269. package/dist/team-prompt-builder.d.ts +47 -0
  270. package/dist/team-prompt-builder.d.ts.map +1 -0
  271. package/dist/team-prompt-builder.js +362 -0
  272. package/dist/team-prompt-builder.js.map +1 -0
  273. package/dist/trace-engine.d.ts +40 -0
  274. package/dist/trace-engine.d.ts.map +1 -0
  275. package/dist/trace-engine.js +344 -0
  276. package/dist/trace-engine.js.map +1 -0
  277. package/dist/types.d.ts +612 -0
  278. package/dist/types.d.ts.map +1 -0
  279. package/dist/types.js +9 -0
  280. package/dist/types.js.map +1 -0
  281. package/dist/unit-session-lifecycle.d.ts +78 -0
  282. package/dist/unit-session-lifecycle.d.ts.map +1 -0
  283. package/dist/unit-session-lifecycle.js +141 -0
  284. package/dist/unit-session-lifecycle.js.map +1 -0
  285. package/dist/unit-session.d.ts +30 -0
  286. package/dist/unit-session.d.ts.map +1 -0
  287. package/dist/unit-session.js +370 -0
  288. package/dist/unit-session.js.map +1 -0
  289. package/dist/watchdogs.d.ts +33 -0
  290. package/dist/watchdogs.d.ts.map +1 -0
  291. package/dist/watchdogs.js +170 -0
  292. package/dist/watchdogs.js.map +1 -0
  293. package/dist/work-unit-scheduler.d.ts +34 -0
  294. package/dist/work-unit-scheduler.d.ts.map +1 -0
  295. package/dist/work-unit-scheduler.js +91 -0
  296. package/dist/work-unit-scheduler.js.map +1 -0
  297. package/dist/workflow-transition.d.ts +90 -0
  298. package/dist/workflow-transition.d.ts.map +1 -0
  299. package/dist/workflow-transition.js +340 -0
  300. package/dist/workflow-transition.js.map +1 -0
  301. package/package.json +65 -0
@@ -0,0 +1,263 @@
1
+ /**
2
+ * Remediation unit generation for factory re-planning.
3
+ *
4
+ * Generates new work units to address detected gaps after a build cycle
5
+ * fails the completion gate. Contains:
6
+ * - Re-planning prompt builder (original spec + fresh audit + cycle history)
7
+ * - Re-planning phase orchestrator (audit, plan generation, unit creation)
8
+ */
9
+ import { generateFactorySOP } from './sop-generator.js';
10
+ import { runCodebaseAudit, formatAuditReport } from './audit.js';
11
+ import { generateAndValidateWorkPlan, buildRetryPrompt, mapTempIdsToUuids, } from './planning.js';
12
+ import { getCycleEvaluations } from './queries/cycle-evaluations.js';
13
+ import { getInstanceWorkUnits, createWorkUnits } from './queries/work-units.js';
14
+ import { updateStrategyExecutionStatus } from './queries/strategies.js';
15
+ import { formatGateContext } from './gate-context.js';
16
+ import { formatPriorCycleContext, matchWorkUnitToStrategy } from './gap-detection.js';
17
+ // ============================================================================
18
+ // Constants
19
+ // ============================================================================
20
+ /** Maximum number of retry attempts for re-plan generation. */
21
+ const MAX_REPLANNING_RETRIES = 2;
22
+ /** Log prefix for this module. */
23
+ const LOG_PREFIX = '[replanning]';
24
+ // ============================================================================
25
+ // Re-planning prompt builder (TEL-3)
26
+ // ============================================================================
27
+ /**
28
+ * Build the re-planning prompt that instructs Claude Code to generate work
29
+ * units for remaining gaps in a multi-cycle factory run.
30
+ *
31
+ * Key differences from buildPlanningPrompt():
32
+ * - Explicitly states this is iteration N (not a fresh start)
33
+ * - Includes prior cycle evaluation history
34
+ * - Includes a fresh codebase audit against the current state
35
+ * - Instructs the planner to only generate work for remaining gaps
36
+ */
37
+ export function buildReplanningPrompt(specification, blueprint, auditReport, priorCycleContext, cycleNumber, gateContext) {
38
+ const parts = [
39
+ 'You are a re-planning agent for a software factory system.',
40
+ `This is ITERATION ${cycleNumber} of a multi-cycle factory run.`,
41
+ 'Previous cycles have already built and committed code. Your task is to analyze',
42
+ 'what is STILL MISSING and generate work units ONLY for remaining gaps.',
43
+ '',
44
+ '## Blueprint',
45
+ `Name: ${blueprint.name}`,
46
+ ];
47
+ if (blueprint.operationalNotes) {
48
+ parts.push('', '## Operational Notes', blueprint.operationalNotes);
49
+ }
50
+ if (blueprint.specConstraints) {
51
+ parts.push('', '## Blueprint Infrastructure Requirements', 'The following requirements are mandated by the factory blueprint and take precedence', 'over spec requirements. Do NOT generate work units that would remove or modify items', 'covered by these requirements, even if the specification appears to prohibit them.', '', blueprint.specConstraints);
52
+ }
53
+ // Resource limits
54
+ const limits = [];
55
+ if (blueprint.maxWorkUnits !== null) {
56
+ limits.push(`- Maximum work units: ${blueprint.maxWorkUnits}`);
57
+ }
58
+ if (blueprint.maxIterationsPerWorkUnit !== null) {
59
+ limits.push(`- Maximum iterations per work unit: ${blueprint.maxIterationsPerWorkUnit}`);
60
+ }
61
+ if (blueprint.maxTokenBudget !== null) {
62
+ limits.push(`- Token budget for entire instance: ${blueprint.maxTokenBudget}`);
63
+ }
64
+ if (blueprint.maxWallClockHours !== null) {
65
+ limits.push(`- Wall-clock time limit: ${blueprint.maxWallClockHours} hours`);
66
+ }
67
+ if (limits.length > 0) {
68
+ parts.push('', '## Resource Limits', ...limits);
69
+ }
70
+ // Pipeline SOP (generated from promise contracts)
71
+ const sop = generateFactorySOP(blueprint.pipelineGraph);
72
+ if (sop) {
73
+ parts.push('', sop);
74
+ }
75
+ parts.push('', '## Original Specification', specification);
76
+ // Prior cycle history (evaluations + completed work)
77
+ if (priorCycleContext) {
78
+ parts.push('', priorCycleContext);
79
+ }
80
+ // Fresh audit results
81
+ if (auditReport) {
82
+ parts.push('', '## Fresh Codebase Audit (current state)', '', 'The following audit was performed against the CURRENT codebase state,', 'which includes all code committed by prior cycles.', '', auditReport);
83
+ }
84
+ if (gateContext) {
85
+ parts.push('', gateContext);
86
+ }
87
+ // Infrastructure gate ownership context
88
+ parts.push('', '## Infrastructure-Owned Gate Verification', '', 'The factory engine pre-creates a "Gate verification" work unit per strategy.', 'This unit is infrastructure-owned and resolved automatically by the gate engine.', 'Do NOT generate work units for gate verification, build validation, typecheck,', 'lint, or test execution -- these are handled by the factory infrastructure.');
89
+ parts.push('', '## Instructions', '', `This is iteration ${cycleNumber}. Prior cycles have already built code and committed it.`, 'The completion gate evaluated each cycle and found remaining gaps (listed above).', 'A fresh codebase audit has been performed against the current state.', '', 'Your task:', '1. Review the original specification', '2. Review what prior cycles built and what gaps the completion gate found', '3. Review the fresh codebase audit to understand what currently exists', '4. Generate work units ONLY for what is STILL MISSING', '', 'CRITICAL RULES:', '- Do NOT duplicate work that prior cycles already completed', '- Do NOT create work units for features the fresh audit shows as already implemented', '- Focus on UNIMPLEMENTED FUNCTIONAL REQUIREMENTS from the specification', '- If the fresh audit contradicts the gate evaluation, trust the fresh audit', '- Each work unit should represent a distinct functional capability the specification requires', '- Each work unit is something to BUILD. Writing and running tests is part of implementing', ' a feature, not a separate deliverable. Do NOT create work units whose sole purpose is', ' to run tests, confirm builds succeed, or verify commands execute.', '- Do NOT create work units for test coverage, type safety, build validity, or', ' runtime behavioral testing -- these are validated by the factory gate system,', ' not by work units. If the gates passed, those dimensions are already verified.', '', '## Output Format', 'Return ONLY a JSON object (no markdown fencing, no commentary) with this exact structure:', '```', '{', ' "workUnits": [', ' {', ' "tempId": "wu-0",', ' "title": "Short descriptive title",', ' "description": "Detailed description of what this work unit implements",', ' "sortOrder": 0,', ' "blockedBy": []', ' }', ' ]', '}', '```', '', 'Rules:', '- Each tempId must be unique (e.g. "wu-0", "wu-1", "wu-2", ...)', '- sortOrder must start at 0 and increment by 1', '- blockedBy must only reference tempIds of other work units in the plan', '- Every work unit must have a non-empty title and description', '- Return at least one work unit');
90
+ if (blueprint.maxWorkUnits !== null) {
91
+ parts.push(`- You MUST produce no more than ${blueprint.maxWorkUnits} work units`);
92
+ }
93
+ parts.push('- Return ONLY the JSON object, nothing else');
94
+ return parts.join('\n');
95
+ }
96
+ // ============================================================================
97
+ // Re-planning phase orchestrator (TEL-4)
98
+ // ============================================================================
99
+ /**
100
+ * Run a full re-planning phase for a factory instance.
101
+ *
102
+ * This is the fresh-context equivalent of runPlanningPhase() but skips
103
+ * worktree/branch creation (already exists from cycle 1). Steps:
104
+ * 1. Fetch all prior cycle evaluations
105
+ * 2. Fetch all work units, filter to completed
106
+ * 3. Run fresh codebase audit against current worktree state
107
+ * 4. Format prior cycle context
108
+ * 5. Build re-planning prompt
109
+ * 6. Generate and validate work plan (with retries)
110
+ * 7. Map tempIds to UUIDs and create work units with correct cycle_number
111
+ */
112
+ export async function runReplanningPhase(state, config, governor) {
113
+ const cycleNumber = state.completionGateIterations + 1;
114
+ console.log(`${LOG_PREFIX} Starting re-planning phase for instance ${state.instanceId} ` +
115
+ `(cycle ${cycleNumber})`);
116
+ // Guard: must have worktree and specification
117
+ if (!state.worktreePath || !state.specification) {
118
+ const error = 'Missing worktree path or specification for re-planning';
119
+ console.error(`${LOG_PREFIX} ${error}`);
120
+ return { success: false, error, workUnitsCreated: 0 };
121
+ }
122
+ // Step 1: Fetch prior cycle evaluations
123
+ let evaluations;
124
+ try {
125
+ evaluations = await getCycleEvaluations(state.instanceId);
126
+ console.log(`${LOG_PREFIX} Fetched ${evaluations.length} prior cycle evaluation(s)`);
127
+ }
128
+ catch (err) {
129
+ const error = `Failed to fetch cycle evaluations: ${err instanceof Error ? err.message : String(err)}`;
130
+ console.error(`${LOG_PREFIX} ${error}`);
131
+ return { success: false, error, workUnitsCreated: 0 };
132
+ }
133
+ // Step 2: Fetch completed work units
134
+ let allWorkUnits;
135
+ try {
136
+ allWorkUnits = await getInstanceWorkUnits(state.instanceId);
137
+ }
138
+ catch (err) {
139
+ const error = `Failed to fetch work units: ${err instanceof Error ? err.message : String(err)}`;
140
+ console.error(`${LOG_PREFIX} ${error}`);
141
+ return { success: false, error, workUnitsCreated: 0 };
142
+ }
143
+ const completedUnits = allWorkUnits.filter((wu) => wu.status === 'completed' && !wu.infrastructureOwned);
144
+ console.log(`${LOG_PREFIX} ${completedUnits.length} completed work unit(s) from prior cycles`);
145
+ // Step 3: Run fresh codebase audit (best-effort)
146
+ let auditReportText = null;
147
+ try {
148
+ const auditReport = await runCodebaseAudit(state.worktreePath, state.specification, state.blueprint, config, governor);
149
+ if (auditReport) {
150
+ auditReportText = formatAuditReport(auditReport, state.blueprint);
151
+ console.log(`${LOG_PREFIX} Fresh audit completed: ` +
152
+ `${auditReport.existingImplementations.length} existing, ` +
153
+ `${auditReport.partialImplementations.length} partial, ` +
154
+ `${auditReport.gaps.length} gaps`);
155
+ }
156
+ }
157
+ catch (err) {
158
+ console.warn(`${LOG_PREFIX} Fresh audit failed (non-fatal): ` +
159
+ `${err instanceof Error ? err.message : String(err)}`);
160
+ }
161
+ // Step 4: Format prior cycle context
162
+ const priorContext = formatPriorCycleContext(evaluations, completedUnits);
163
+ // Step 5: Build re-planning prompt -- include gate context so planner doesn't create
164
+ // work units for dimensions the gate layer already validates
165
+ const gateContext = formatGateContext(state.blueprint);
166
+ const originalPrompt = buildReplanningPrompt(state.specification, state.blueprint, auditReportText, priorContext, cycleNumber, gateContext);
167
+ // Step 6: Generate and validate work plan (with retries)
168
+ let currentPrompt = originalPrompt;
169
+ let workPlan = null;
170
+ let lastError = '';
171
+ for (let attempt = 0; attempt <= MAX_REPLANNING_RETRIES; attempt++) {
172
+ if (attempt > 0) {
173
+ console.log(`${LOG_PREFIX} Retry ${attempt}/${MAX_REPLANNING_RETRIES} -- previous error: ${lastError}`);
174
+ currentPrompt = buildRetryPrompt(originalPrompt, lastError);
175
+ }
176
+ if (governor)
177
+ await governor.acquireSlot('factory');
178
+ let planResult;
179
+ try {
180
+ planResult = await generateAndValidateWorkPlan(currentPrompt, config, state.worktreePath, state.blueprint);
181
+ }
182
+ finally {
183
+ if (governor)
184
+ governor.releaseSlot('factory');
185
+ }
186
+ if (planResult.success) {
187
+ workPlan = planResult.workPlan;
188
+ if (attempt > 0) {
189
+ console.log(`${LOG_PREFIX} Re-plan generation succeeded on retry ${attempt}`);
190
+ }
191
+ break;
192
+ }
193
+ lastError = planResult.error;
194
+ console.error(`${LOG_PREFIX} Re-plan generation attempt ${attempt + 1} failed: ${lastError}`);
195
+ }
196
+ if (workPlan === null) {
197
+ const error = `Re-plan generation failed after ${MAX_REPLANNING_RETRIES + 1} attempt(s): ${lastError}`;
198
+ console.error(`${LOG_PREFIX} ${error}`);
199
+ return { success: false, error, workUnitsCreated: 0 };
200
+ }
201
+ // Check maxWorkUnits limit including existing units
202
+ if (state.blueprint.maxWorkUnits !== null) {
203
+ const totalAfter = allWorkUnits.length + workPlan.workUnits.length;
204
+ if (totalAfter > state.blueprint.maxWorkUnits) {
205
+ const error = `Re-plan would create ${workPlan.workUnits.length} work units, ` +
206
+ `but total (${allWorkUnits.length} existing + ${workPlan.workUnits.length} new) ` +
207
+ `exceeds maxWorkUnits limit (${state.blueprint.maxWorkUnits})`;
208
+ console.warn(`${LOG_PREFIX} ${error}`);
209
+ return { success: false, error, workUnitsCreated: 0 };
210
+ }
211
+ }
212
+ // Step 7: Fetch strategies for strategy-aware tagging (best-effort)
213
+ let strategies = [];
214
+ try {
215
+ const { getStrategiesByFactoryInstance } = await import('./strategy-design.js');
216
+ strategies = await getStrategiesByFactoryInstance(state.instanceId);
217
+ }
218
+ catch {
219
+ // Non-fatal: re-planning works without strategy tagging
220
+ }
221
+ // Step 8: Map tempIds to UUIDs and create work units
222
+ const maxSortOrder = allWorkUnits.reduce((max, wu) => Math.max(max, wu.sortOrder), -1);
223
+ let mappedUnits;
224
+ try {
225
+ mappedUnits = mapTempIdsToUuids(workPlan.workUnits).map((u, i) => ({
226
+ ...u,
227
+ sortOrder: maxSortOrder + 1 + i,
228
+ cycleNumber,
229
+ strategyId: matchWorkUnitToStrategy(u.title, u.description, strategies),
230
+ }));
231
+ }
232
+ catch (err) {
233
+ const error = `Failed to map tempIds to UUIDs: ${err instanceof Error ? err.message : String(err)}`;
234
+ console.error(`${LOG_PREFIX} ${error}`);
235
+ return { success: false, error, workUnitsCreated: 0 };
236
+ }
237
+ let created;
238
+ try {
239
+ created = await createWorkUnits(state.instanceId, mappedUnits);
240
+ console.log(`${LOG_PREFIX} Re-planning cycle ${cycleNumber}: created ${created.length} work unit(s)`);
241
+ }
242
+ catch (err) {
243
+ const error = `Failed to create work units: ${err instanceof Error ? err.message : String(err)}`;
244
+ console.error(`${LOG_PREFIX} ${error}`);
245
+ return { success: false, error, workUnitsCreated: 0 };
246
+ }
247
+ // Reset only the strategies that received new work units back to 'pending'
248
+ // so the scheduler picks them up. Strategies with no new work assigned
249
+ // stay completed -- resetting them would cause unnecessary re-execution.
250
+ const assignedStrategyIds = new Set(mappedUnits
251
+ .map((u) => u.strategyId)
252
+ .filter((id) => id !== undefined));
253
+ if (assignedStrategyIds.size > 0 && strategies.length > 0) {
254
+ const toReset = strategies.filter((s) => assignedStrategyIds.has(s.id) && s.executionStatus === 'completed');
255
+ if (toReset.length > 0) {
256
+ await Promise.all(toReset.map((s) => updateStrategyExecutionStatus(s.id, 'pending')));
257
+ console.log(`${LOG_PREFIX} Reset ${toReset.length} strategy/strategies to 'pending' ` +
258
+ `for re-planning cycle ${cycleNumber}`);
259
+ }
260
+ }
261
+ return { success: true, workUnitsCreated: created.length };
262
+ }
263
+ //# sourceMappingURL=remediation-units.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remediation-units.js","sourceRoot":"","sources":["../src/remediation-units.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,72 @@
1
+ /**
2
+ * Fresh context re-planning module.
3
+ *
4
+ * When the completion gate finds critical gaps after a build cycle, this
5
+ * module orchestrates a full re-planning cycle with fresh context:
6
+ * 1. Fetch prior cycle evaluations and completed work units
7
+ * 2. Run a fresh codebase audit against the current worktree state
8
+ * 3. Format prior cycle history as concise context
9
+ * 4. Build a re-planning prompt (original spec + fresh audit + cycle history)
10
+ * 5. Generate and validate a new work plan in a fresh Claude Code session
11
+ * 6. Create work units with the correct cycle_number
12
+ *
13
+ * This replaces the shallow gap-to-work-unit approach of
14
+ * generateRemediationWorkUnits() with full-context AI reasoning.
15
+ */
16
+ import type { ResourceGovernor } from '@telora/daemon-core';
17
+ import type { FactoryBlueprint, FactoryConfig, FactoryCycleEvaluation, FactoryInstanceState, FactoryWorkUnit } from './types.js';
18
+ /**
19
+ * Filter completion gate gaps to only include those describing absent
20
+ * functional capabilities. Strips verification-related gaps (test execution,
21
+ * build confirmation, etc.) that are not spec requirements.
22
+ */
23
+ export declare function filterFunctionalGaps(gaps: Array<{
24
+ area: string;
25
+ description: string;
26
+ severity: string;
27
+ }>): Array<{
28
+ area: string;
29
+ description: string;
30
+ severity: string;
31
+ }>;
32
+ /**
33
+ * Format prior cycle evaluations and completed work units into a concise
34
+ * markdown string for injection into the re-planning prompt.
35
+ *
36
+ * Rules:
37
+ * - Work unit descriptions truncated to ~100 chars to save context
38
+ * - Only completed work units included (not failed/pending)
39
+ * - Gap descriptions kept in full (they are the signal for what is missing)
40
+ * - Total output capped at MAX_PRIOR_CONTEXT_CHARS
41
+ */
42
+ export declare function formatPriorCycleContext(evaluations: FactoryCycleEvaluation[], completedWorkUnits: FactoryWorkUnit[]): string;
43
+ /**
44
+ * Build the re-planning prompt that instructs Claude Code to generate work
45
+ * units for remaining gaps in a multi-cycle factory run.
46
+ *
47
+ * Key differences from buildPlanningPrompt():
48
+ * - Explicitly states this is iteration N (not a fresh start)
49
+ * - Includes prior cycle evaluation history
50
+ * - Includes a fresh codebase audit against the current state
51
+ * - Instructs the planner to only generate work for remaining gaps
52
+ */
53
+ export declare function buildReplanningPrompt(specification: string, blueprint: FactoryBlueprint, auditReport: string | null, priorCycleContext: string, cycleNumber: number, gateContext?: string): string;
54
+ /**
55
+ * Run a full re-planning phase for a factory instance.
56
+ *
57
+ * This is the fresh-context equivalent of runPlanningPhase() but skips
58
+ * worktree/branch creation (already exists from cycle 1). Steps:
59
+ * 1. Fetch all prior cycle evaluations
60
+ * 2. Fetch all work units, filter to completed
61
+ * 3. Run fresh codebase audit against current worktree state
62
+ * 4. Format prior cycle context
63
+ * 5. Build re-planning prompt
64
+ * 6. Generate and validate work plan (with retries)
65
+ * 7. Map tempIds to UUIDs and create work units with correct cycle_number
66
+ */
67
+ export declare function runReplanningPhase(state: FactoryInstanceState, config: FactoryConfig, governor?: ResourceGovernor | null): Promise<{
68
+ success: boolean;
69
+ error?: string;
70
+ workUnitsCreated: number;
71
+ }>;
72
+ //# sourceMappingURL=replanning.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"replanning.d.ts","sourceRoot":"","sources":["../src/replanning.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;GAcG;AAEH,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,qBAAqB,CAAC;AAa5D,OAAO,KAAK,EACV,gBAAgB,EAChB,aAAa,EACb,sBAAsB,EACtB,oBAAoB,EACpB,eAAe,EAEhB,MAAM,YAAY,CAAC;AA6CpB;;;;GAIG;AACH,wBAAgB,oBAAoB,CAClC,IAAI,EAAE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,GACnE,KAAK,CAAC;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,WAAW,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAUhE;AAMD;;;;;;;;;GASG;AACH,wBAAgB,uBAAuB,CACrC,WAAW,EAAE,sBAAsB,EAAE,EACrC,kBAAkB,EAAE,eAAe,EAAE,GACpC,MAAM,CA6DR;AAMD;;;;;;;;;GASG;AACH,wBAAgB,qBAAqB,CACnC,aAAa,EAAE,MAAM,EACrB,SAAS,EAAE,gBAAgB,EAC3B,WAAW,EAAE,MAAM,GAAG,IAAI,EAC1B,iBAAiB,EAAE,MAAM,EACzB,WAAW,EAAE,MAAM,EACnB,WAAW,CAAC,EAAE,MAAM,GACnB,MAAM,CAqJR;AAMD;;;;;;;;;;;;GAYG;AACH,wBAAsB,kBAAkB,CACtC,KAAK,EAAE,oBAAoB,EAC3B,MAAM,EAAE,aAAa,EACrB,QAAQ,CAAC,EAAE,gBAAgB,GAAG,IAAI,GACjC,OAAO,CAAC;IAAE,OAAO,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAC;IAAC,gBAAgB,EAAE,MAAM,CAAA;CAAE,CAAC,CAqNzE"}