@mc1global/opencode-jarvis 0.1.1 → 0.3.1

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 (299) hide show
  1. package/dist/application/agent-registry/dtos.d.ts +66 -0
  2. package/dist/application/agent-registry/dtos.d.ts.map +1 -0
  3. package/dist/application/agent-registry/dtos.js +11 -0
  4. package/dist/application/agent-registry/dtos.js.map +1 -0
  5. package/dist/application/agent-registry/use-cases.d.ts +39 -0
  6. package/dist/application/agent-registry/use-cases.d.ts.map +1 -0
  7. package/dist/application/agent-registry/use-cases.js +222 -0
  8. package/dist/application/agent-registry/use-cases.js.map +1 -0
  9. package/dist/application/azure-sync/dtos.d.ts +210 -0
  10. package/dist/application/azure-sync/dtos.d.ts.map +1 -0
  11. package/dist/application/azure-sync/dtos.js +11 -0
  12. package/dist/application/azure-sync/dtos.js.map +1 -0
  13. package/dist/application/azure-sync/field-builders.d.ts +54 -0
  14. package/dist/application/azure-sync/field-builders.d.ts.map +1 -0
  15. package/dist/application/azure-sync/field-builders.js +166 -0
  16. package/dist/application/azure-sync/field-builders.js.map +1 -0
  17. package/dist/application/azure-sync/index.d.ts +16 -0
  18. package/dist/application/azure-sync/index.d.ts.map +1 -0
  19. package/dist/application/azure-sync/index.js +10 -0
  20. package/dist/application/azure-sync/index.js.map +1 -0
  21. package/dist/application/azure-sync/pr-use-cases.d.ts +39 -0
  22. package/dist/application/azure-sync/pr-use-cases.d.ts.map +1 -0
  23. package/dist/application/azure-sync/pr-use-cases.js +192 -0
  24. package/dist/application/azure-sync/pr-use-cases.js.map +1 -0
  25. package/dist/application/azure-sync/pull-use-cases.d.ts +43 -0
  26. package/dist/application/azure-sync/pull-use-cases.d.ts.map +1 -0
  27. package/dist/application/azure-sync/pull-use-cases.js +322 -0
  28. package/dist/application/azure-sync/pull-use-cases.js.map +1 -0
  29. package/dist/application/azure-sync/push-use-cases.d.ts +53 -0
  30. package/dist/application/azure-sync/push-use-cases.d.ts.map +1 -0
  31. package/dist/application/azure-sync/push-use-cases.js +341 -0
  32. package/dist/application/azure-sync/push-use-cases.js.map +1 -0
  33. package/dist/application/azure-sync/reverse-field-builder.d.ts +52 -0
  34. package/dist/application/azure-sync/reverse-field-builder.d.ts.map +1 -0
  35. package/dist/application/azure-sync/reverse-field-builder.js +130 -0
  36. package/dist/application/azure-sync/reverse-field-builder.js.map +1 -0
  37. package/dist/application/azure-sync/task-push-use-cases.d.ts +68 -0
  38. package/dist/application/azure-sync/task-push-use-cases.d.ts.map +1 -0
  39. package/dist/application/azure-sync/task-push-use-cases.js +162 -0
  40. package/dist/application/azure-sync/task-push-use-cases.js.map +1 -0
  41. package/dist/application/config/config-service.d.ts +64 -0
  42. package/dist/application/config/config-service.d.ts.map +1 -0
  43. package/dist/application/config/config-service.js +110 -0
  44. package/dist/application/config/config-service.js.map +1 -0
  45. package/dist/application/config/index.d.ts +5 -0
  46. package/dist/application/config/index.d.ts.map +1 -0
  47. package/dist/application/config/index.js +5 -0
  48. package/dist/application/config/index.js.map +1 -0
  49. package/dist/application/kanban/board-use-cases.d.ts.map +1 -1
  50. package/dist/application/kanban/board-use-cases.js +14 -0
  51. package/dist/application/kanban/board-use-cases.js.map +1 -1
  52. package/dist/application/kanban/card-use-cases.d.ts +21 -2
  53. package/dist/application/kanban/card-use-cases.d.ts.map +1 -1
  54. package/dist/application/kanban/card-use-cases.js +180 -1
  55. package/dist/application/kanban/card-use-cases.js.map +1 -1
  56. package/dist/application/kanban/dtos.d.ts +59 -0
  57. package/dist/application/kanban/dtos.d.ts.map +1 -1
  58. package/dist/application/mcp/index.d.ts +10 -0
  59. package/dist/application/mcp/index.d.ts.map +1 -0
  60. package/dist/application/mcp/index.js +8 -0
  61. package/dist/application/mcp/index.js.map +1 -0
  62. package/dist/application/mcp/middleware.d.ts +91 -0
  63. package/dist/application/mcp/middleware.d.ts.map +1 -0
  64. package/dist/application/mcp/middleware.js +84 -0
  65. package/dist/application/mcp/middleware.js.map +1 -0
  66. package/dist/application/mcp/tool-adapter.d.ts +72 -0
  67. package/dist/application/mcp/tool-adapter.d.ts.map +1 -0
  68. package/dist/application/mcp/tool-adapter.js +132 -0
  69. package/dist/application/mcp/tool-adapter.js.map +1 -0
  70. package/dist/application/pipeline/dtos.d.ts +135 -0
  71. package/dist/application/pipeline/dtos.d.ts.map +1 -0
  72. package/dist/application/pipeline/dtos.js +11 -0
  73. package/dist/application/pipeline/dtos.js.map +1 -0
  74. package/dist/application/pipeline/index.d.ts +8 -0
  75. package/dist/application/pipeline/index.d.ts.map +1 -0
  76. package/dist/application/pipeline/index.js +7 -0
  77. package/dist/application/pipeline/index.js.map +1 -0
  78. package/dist/application/pipeline/use-cases.d.ts +67 -0
  79. package/dist/application/pipeline/use-cases.d.ts.map +1 -0
  80. package/dist/application/pipeline/use-cases.js +413 -0
  81. package/dist/application/pipeline/use-cases.js.map +1 -0
  82. package/dist/application/rag/use-cases.d.ts +3 -0
  83. package/dist/application/rag/use-cases.d.ts.map +1 -1
  84. package/dist/application/rag/use-cases.js +112 -34
  85. package/dist/application/rag/use-cases.js.map +1 -1
  86. package/dist/domain/agent-registry/entities.d.ts +68 -0
  87. package/dist/domain/agent-registry/entities.d.ts.map +1 -0
  88. package/dist/domain/agent-registry/entities.js +177 -0
  89. package/dist/domain/agent-registry/entities.js.map +1 -0
  90. package/dist/domain/agent-registry/repositories.d.ts +56 -0
  91. package/dist/domain/agent-registry/repositories.d.ts.map +1 -0
  92. package/dist/domain/agent-registry/repositories.js +12 -0
  93. package/dist/domain/agent-registry/repositories.js.map +1 -0
  94. package/dist/domain/agent-registry/services.d.ts +87 -0
  95. package/dist/domain/agent-registry/services.d.ts.map +1 -0
  96. package/dist/domain/agent-registry/services.js +188 -0
  97. package/dist/domain/agent-registry/services.js.map +1 -0
  98. package/dist/domain/agent-registry/value-objects.d.ts +145 -0
  99. package/dist/domain/agent-registry/value-objects.d.ts.map +1 -0
  100. package/dist/domain/agent-registry/value-objects.js +339 -0
  101. package/dist/domain/agent-registry/value-objects.js.map +1 -0
  102. package/dist/domain/azure-sync/entities.d.ts +165 -0
  103. package/dist/domain/azure-sync/entities.d.ts.map +1 -0
  104. package/dist/domain/azure-sync/entities.js +203 -0
  105. package/dist/domain/azure-sync/entities.js.map +1 -0
  106. package/dist/domain/azure-sync/index.d.ts +16 -0
  107. package/dist/domain/azure-sync/index.d.ts.map +1 -0
  108. package/dist/domain/azure-sync/index.js +14 -0
  109. package/dist/domain/azure-sync/index.js.map +1 -0
  110. package/dist/domain/azure-sync/ports.d.ts +117 -0
  111. package/dist/domain/azure-sync/ports.d.ts.map +1 -0
  112. package/dist/domain/azure-sync/ports.js +13 -0
  113. package/dist/domain/azure-sync/ports.js.map +1 -0
  114. package/dist/domain/azure-sync/repositories.d.ts +53 -0
  115. package/dist/domain/azure-sync/repositories.d.ts.map +1 -0
  116. package/dist/domain/azure-sync/repositories.js +11 -0
  117. package/dist/domain/azure-sync/repositories.js.map +1 -0
  118. package/dist/domain/azure-sync/services.d.ts +107 -0
  119. package/dist/domain/azure-sync/services.d.ts.map +1 -0
  120. package/dist/domain/azure-sync/services.js +316 -0
  121. package/dist/domain/azure-sync/services.js.map +1 -0
  122. package/dist/domain/azure-sync/value-objects.d.ts +129 -0
  123. package/dist/domain/azure-sync/value-objects.d.ts.map +1 -0
  124. package/dist/domain/azure-sync/value-objects.js +343 -0
  125. package/dist/domain/azure-sync/value-objects.js.map +1 -0
  126. package/dist/domain/config/index.d.ts +9 -0
  127. package/dist/domain/config/index.d.ts.map +1 -0
  128. package/dist/domain/config/index.js +7 -0
  129. package/dist/domain/config/index.js.map +1 -0
  130. package/dist/domain/config/repositories.d.ts +36 -0
  131. package/dist/domain/config/repositories.d.ts.map +1 -0
  132. package/dist/domain/config/repositories.js +12 -0
  133. package/dist/domain/config/repositories.js.map +1 -0
  134. package/dist/domain/config/value-objects.d.ts +112 -0
  135. package/dist/domain/config/value-objects.d.ts.map +1 -0
  136. package/dist/domain/config/value-objects.js +93 -0
  137. package/dist/domain/config/value-objects.js.map +1 -0
  138. package/dist/domain/governance/policies.d.ts.map +1 -1
  139. package/dist/domain/governance/policies.js +70 -0
  140. package/dist/domain/governance/policies.js.map +1 -1
  141. package/dist/domain/kanban/entities.d.ts +67 -15
  142. package/dist/domain/kanban/entities.d.ts.map +1 -1
  143. package/dist/domain/kanban/entities.js +177 -14
  144. package/dist/domain/kanban/entities.js.map +1 -1
  145. package/dist/domain/kanban/grooming.d.ts +27 -7
  146. package/dist/domain/kanban/grooming.d.ts.map +1 -1
  147. package/dist/domain/kanban/grooming.js +50 -12
  148. package/dist/domain/kanban/grooming.js.map +1 -1
  149. package/dist/domain/kanban/services.d.ts +16 -2
  150. package/dist/domain/kanban/services.d.ts.map +1 -1
  151. package/dist/domain/kanban/services.js +29 -2
  152. package/dist/domain/kanban/services.js.map +1 -1
  153. package/dist/domain/kanban/value-objects.d.ts +48 -0
  154. package/dist/domain/kanban/value-objects.d.ts.map +1 -1
  155. package/dist/domain/kanban/value-objects.js +53 -0
  156. package/dist/domain/kanban/value-objects.js.map +1 -1
  157. package/dist/domain/pipeline/gate.d.ts +75 -0
  158. package/dist/domain/pipeline/gate.d.ts.map +1 -0
  159. package/dist/domain/pipeline/gate.js +158 -0
  160. package/dist/domain/pipeline/gate.js.map +1 -0
  161. package/dist/domain/pipeline/index.d.ts +13 -0
  162. package/dist/domain/pipeline/index.d.ts.map +1 -0
  163. package/dist/domain/pipeline/index.js +14 -0
  164. package/dist/domain/pipeline/index.js.map +1 -0
  165. package/dist/domain/pipeline/pipeline.d.ts +99 -0
  166. package/dist/domain/pipeline/pipeline.d.ts.map +1 -0
  167. package/dist/domain/pipeline/pipeline.js +257 -0
  168. package/dist/domain/pipeline/pipeline.js.map +1 -0
  169. package/dist/domain/pipeline/ports.d.ts +120 -0
  170. package/dist/domain/pipeline/ports.d.ts.map +1 -0
  171. package/dist/domain/pipeline/ports.js +12 -0
  172. package/dist/domain/pipeline/ports.js.map +1 -0
  173. package/dist/domain/pipeline/repositories.d.ts +66 -0
  174. package/dist/domain/pipeline/repositories.d.ts.map +1 -0
  175. package/dist/domain/pipeline/repositories.js +11 -0
  176. package/dist/domain/pipeline/repositories.js.map +1 -0
  177. package/dist/domain/pipeline/services.d.ts +77 -0
  178. package/dist/domain/pipeline/services.d.ts.map +1 -0
  179. package/dist/domain/pipeline/services.js +156 -0
  180. package/dist/domain/pipeline/services.js.map +1 -0
  181. package/dist/domain/pipeline/value-objects.d.ts +117 -0
  182. package/dist/domain/pipeline/value-objects.d.ts.map +1 -0
  183. package/dist/domain/pipeline/value-objects.js +313 -0
  184. package/dist/domain/pipeline/value-objects.js.map +1 -0
  185. package/dist/domain/rag/value-objects.d.ts +9 -2
  186. package/dist/domain/rag/value-objects.d.ts.map +1 -1
  187. package/dist/domain/rag/value-objects.js +8 -2
  188. package/dist/domain/rag/value-objects.js.map +1 -1
  189. package/dist/hooks/event-handlers.d.ts +3 -0
  190. package/dist/hooks/event-handlers.d.ts.map +1 -1
  191. package/dist/hooks/event-handlers.js +4 -2
  192. package/dist/hooks/event-handlers.js.map +1 -1
  193. package/dist/hooks/logger.d.ts +46 -0
  194. package/dist/hooks/logger.d.ts.map +1 -0
  195. package/dist/hooks/logger.js +79 -0
  196. package/dist/hooks/logger.js.map +1 -0
  197. package/dist/index.d.ts.map +1 -1
  198. package/dist/index.js +152 -108
  199. package/dist/index.js.map +1 -1
  200. package/dist/infrastructure/agent-registry/agent-profile-repository.d.ts +29 -0
  201. package/dist/infrastructure/agent-registry/agent-profile-repository.d.ts.map +1 -0
  202. package/dist/infrastructure/agent-registry/agent-profile-repository.js +109 -0
  203. package/dist/infrastructure/agent-registry/agent-profile-repository.js.map +1 -0
  204. package/dist/infrastructure/agent-registry/agent-session-adapter.d.ts +28 -0
  205. package/dist/infrastructure/agent-registry/agent-session-adapter.d.ts.map +1 -0
  206. package/dist/infrastructure/agent-registry/agent-session-adapter.js +61 -0
  207. package/dist/infrastructure/agent-registry/agent-session-adapter.js.map +1 -0
  208. package/dist/infrastructure/agent-registry/built-in-profiles.d.ts +19 -0
  209. package/dist/infrastructure/agent-registry/built-in-profiles.d.ts.map +1 -0
  210. package/dist/infrastructure/agent-registry/built-in-profiles.js +210 -0
  211. package/dist/infrastructure/agent-registry/built-in-profiles.js.map +1 -0
  212. package/dist/infrastructure/azure-sync/azure-auth.d.ts +40 -0
  213. package/dist/infrastructure/azure-sync/azure-auth.d.ts.map +1 -0
  214. package/dist/infrastructure/azure-sync/azure-auth.js +94 -0
  215. package/dist/infrastructure/azure-sync/azure-auth.js.map +1 -0
  216. package/dist/infrastructure/azure-sync/azure-devops-client.d.ts +43 -0
  217. package/dist/infrastructure/azure-sync/azure-devops-client.d.ts.map +1 -0
  218. package/dist/infrastructure/azure-sync/azure-devops-client.js +296 -0
  219. package/dist/infrastructure/azure-sync/azure-devops-client.js.map +1 -0
  220. package/dist/infrastructure/azure-sync/index.d.ts +9 -0
  221. package/dist/infrastructure/azure-sync/index.d.ts.map +1 -0
  222. package/dist/infrastructure/azure-sync/index.js +12 -0
  223. package/dist/infrastructure/azure-sync/index.js.map +1 -0
  224. package/dist/infrastructure/azure-sync/sqlite-sync-repository.d.ts +39 -0
  225. package/dist/infrastructure/azure-sync/sqlite-sync-repository.d.ts.map +1 -0
  226. package/dist/infrastructure/azure-sync/sqlite-sync-repository.js +202 -0
  227. package/dist/infrastructure/azure-sync/sqlite-sync-repository.js.map +1 -0
  228. package/dist/infrastructure/config/index.d.ts +5 -0
  229. package/dist/infrastructure/config/index.d.ts.map +1 -0
  230. package/dist/infrastructure/config/index.js +5 -0
  231. package/dist/infrastructure/config/index.js.map +1 -0
  232. package/dist/infrastructure/config/yaml-config-repository.d.ts +22 -0
  233. package/dist/infrastructure/config/yaml-config-repository.d.ts.map +1 -0
  234. package/dist/infrastructure/config/yaml-config-repository.js +68 -0
  235. package/dist/infrastructure/config/yaml-config-repository.js.map +1 -0
  236. package/dist/infrastructure/domain-map/llm-prompt-factory.d.ts +21 -0
  237. package/dist/infrastructure/domain-map/llm-prompt-factory.d.ts.map +1 -0
  238. package/dist/infrastructure/domain-map/llm-prompt-factory.js +49 -0
  239. package/dist/infrastructure/domain-map/llm-prompt-factory.js.map +1 -0
  240. package/dist/infrastructure/kanban/card-repository.d.ts +6 -0
  241. package/dist/infrastructure/kanban/card-repository.d.ts.map +1 -1
  242. package/dist/infrastructure/kanban/card-repository.js +79 -7
  243. package/dist/infrastructure/kanban/card-repository.js.map +1 -1
  244. package/dist/infrastructure/pipeline/dagger-adapter.d.ts +50 -0
  245. package/dist/infrastructure/pipeline/dagger-adapter.d.ts.map +1 -0
  246. package/dist/infrastructure/pipeline/dagger-adapter.js +153 -0
  247. package/dist/infrastructure/pipeline/dagger-adapter.js.map +1 -0
  248. package/dist/infrastructure/pipeline/dagger-scaffold-generator.d.ts +35 -0
  249. package/dist/infrastructure/pipeline/dagger-scaffold-generator.d.ts.map +1 -0
  250. package/dist/infrastructure/pipeline/dagger-scaffold-generator.js +132 -0
  251. package/dist/infrastructure/pipeline/dagger-scaffold-generator.js.map +1 -0
  252. package/dist/infrastructure/pipeline/index.d.ts +20 -0
  253. package/dist/infrastructure/pipeline/index.d.ts.map +1 -0
  254. package/dist/infrastructure/pipeline/index.js +19 -0
  255. package/dist/infrastructure/pipeline/index.js.map +1 -0
  256. package/dist/infrastructure/pipeline/pipeline-template-registry.d.ts +23 -0
  257. package/dist/infrastructure/pipeline/pipeline-template-registry.d.ts.map +1 -0
  258. package/dist/infrastructure/pipeline/pipeline-template-registry.js +63 -0
  259. package/dist/infrastructure/pipeline/pipeline-template-registry.js.map +1 -0
  260. package/dist/infrastructure/pipeline/scaffold-templates-extra.d.ts +17 -0
  261. package/dist/infrastructure/pipeline/scaffold-templates-extra.d.ts.map +1 -0
  262. package/dist/infrastructure/pipeline/scaffold-templates-extra.js +467 -0
  263. package/dist/infrastructure/pipeline/scaffold-templates-extra.js.map +1 -0
  264. package/dist/infrastructure/pipeline/scaffold-templates.d.ts +23 -0
  265. package/dist/infrastructure/pipeline/scaffold-templates.d.ts.map +1 -0
  266. package/dist/infrastructure/pipeline/scaffold-templates.js +476 -0
  267. package/dist/infrastructure/pipeline/scaffold-templates.js.map +1 -0
  268. package/dist/infrastructure/pipeline/sqlite-pipeline-repository.d.ts +32 -0
  269. package/dist/infrastructure/pipeline/sqlite-pipeline-repository.d.ts.map +1 -0
  270. package/dist/infrastructure/pipeline/sqlite-pipeline-repository.js +197 -0
  271. package/dist/infrastructure/pipeline/sqlite-pipeline-repository.js.map +1 -0
  272. package/dist/mcp-server.d.ts +3 -0
  273. package/dist/mcp-server.d.ts.map +1 -0
  274. package/dist/mcp-server.js +300 -0
  275. package/dist/mcp-server.js.map +1 -0
  276. package/dist/tools/agent-registry-tools.d.ts +11 -0
  277. package/dist/tools/agent-registry-tools.d.ts.map +1 -0
  278. package/dist/tools/agent-registry-tools.js +208 -0
  279. package/dist/tools/agent-registry-tools.js.map +1 -0
  280. package/dist/tools/azure-sync-tools.d.ts +15 -0
  281. package/dist/tools/azure-sync-tools.d.ts.map +1 -0
  282. package/dist/tools/azure-sync-tools.js +332 -0
  283. package/dist/tools/azure-sync-tools.js.map +1 -0
  284. package/dist/tools/kanban-card-tools.d.ts.map +1 -1
  285. package/dist/tools/kanban-card-tools.js +41 -16
  286. package/dist/tools/kanban-card-tools.js.map +1 -1
  287. package/dist/tools/kanban-gate-tools.d.ts +7 -0
  288. package/dist/tools/kanban-gate-tools.d.ts.map +1 -0
  289. package/dist/tools/kanban-gate-tools.js +106 -0
  290. package/dist/tools/kanban-gate-tools.js.map +1 -0
  291. package/dist/tools/kanban-grooming-tools.d.ts +7 -0
  292. package/dist/tools/kanban-grooming-tools.d.ts.map +1 -0
  293. package/dist/tools/kanban-grooming-tools.js +180 -0
  294. package/dist/tools/kanban-grooming-tools.js.map +1 -0
  295. package/dist/tools/pipeline-tools.d.ts +15 -0
  296. package/dist/tools/pipeline-tools.d.ts.map +1 -0
  297. package/dist/tools/pipeline-tools.js +424 -0
  298. package/dist/tools/pipeline-tools.js.map +1 -0
  299. package/package.json +7 -2
@@ -0,0 +1,158 @@
1
+ /**
2
+ * Pipeline Domain — Gate (Child Entity)
3
+ *
4
+ * A single quality checkpoint within a Pipeline.
5
+ * Gates progress through: pending -> running -> passed|failed|skipped.
6
+ * Failed gates can be retried (failed -> pending).
7
+ *
8
+ * SOLID: SRP — Gate manages gate-level state transitions
9
+ * DDD: Child entity — no identity outside its Pipeline aggregate
10
+ */
11
+ import { Timestamp } from "../shared/value-objects.js";
12
+ import { DaggerFunctionRef, GateOutput, GATE_TRANSITIONS, isSuccessGateStatus, isTerminalGateStatus, } from "./value-objects.js";
13
+ /**
14
+ * Gate — a single quality checkpoint within a Pipeline.
15
+ *
16
+ * Gates progress through: pending -> running -> passed|failed|skipped
17
+ * Failed gates can be retried (failed -> pending).
18
+ * Skipping requires policy validation (done at Pipeline/service level).
19
+ */
20
+ export class Gate {
21
+ id;
22
+ type;
23
+ order;
24
+ daggerFunction;
25
+ skipPolicy;
26
+ command;
27
+ _status;
28
+ _output;
29
+ _skippedReason;
30
+ _approvedBy;
31
+ _startedAt;
32
+ _completedAt;
33
+ constructor(id, type, order, daggerFunction, skipPolicy, command, status, output, skippedReason, approvedBy, startedAt, completedAt) {
34
+ this.id = id;
35
+ this.type = type;
36
+ this.order = order;
37
+ this.daggerFunction = daggerFunction;
38
+ this.skipPolicy = skipPolicy;
39
+ this.command = command;
40
+ this._status = status;
41
+ this._output = output;
42
+ this._skippedReason = skippedReason;
43
+ this._approvedBy = approvedBy;
44
+ this._startedAt = startedAt;
45
+ this._completedAt = completedAt;
46
+ }
47
+ /** Create a new gate in pending status. */
48
+ static create(id, type, order, daggerFunction, skipPolicy, command) {
49
+ return new Gate(id, type, order, daggerFunction, skipPolicy, command, "pending", undefined, undefined, undefined, undefined, undefined);
50
+ }
51
+ /** Reconstitute from persisted data. */
52
+ static reconstitute(props) {
53
+ return new Gate(props.id, props.type, props.order, props.daggerFunction, props.skipPolicy, props.command, props.status, props.output, props.skippedReason, props.approvedBy, props.startedAt, props.completedAt);
54
+ }
55
+ // ─── Getters ──────────────────────────────────────────────────────────
56
+ get status() {
57
+ return this._status;
58
+ }
59
+ get output() {
60
+ return this._output;
61
+ }
62
+ get skippedReason() {
63
+ return this._skippedReason;
64
+ }
65
+ get approvedBy() {
66
+ return this._approvedBy;
67
+ }
68
+ get startedAt() {
69
+ return this._startedAt;
70
+ }
71
+ get completedAt() {
72
+ return this._completedAt;
73
+ }
74
+ get isTerminal() {
75
+ return isTerminalGateStatus(this._status);
76
+ }
77
+ get isSuccess() {
78
+ return isSuccessGateStatus(this._status);
79
+ }
80
+ // ─── State Transitions ────────────────────────────────────────────────
81
+ /** Start execution of this gate. */
82
+ start() {
83
+ this.assertTransition("running");
84
+ this._status = "running";
85
+ this._startedAt = Timestamp.now();
86
+ }
87
+ /** Mark gate as passed with optional output. */
88
+ pass(output) {
89
+ this.assertTransition("passed");
90
+ this._status = "passed";
91
+ this._completedAt = Timestamp.now();
92
+ if (output !== undefined) {
93
+ this._output = GateOutput.create(output);
94
+ }
95
+ }
96
+ /** Mark gate as failed with optional output. */
97
+ fail(output) {
98
+ this.assertTransition("failed");
99
+ this._status = "failed";
100
+ this._completedAt = Timestamp.now();
101
+ if (output !== undefined) {
102
+ this._output = GateOutput.create(output);
103
+ }
104
+ }
105
+ /** Skip gate with reason (policy check done at Pipeline level). */
106
+ skip(reason, approvedBy) {
107
+ this.assertTransition("skipped");
108
+ if (!reason || reason.trim().length === 0) {
109
+ throw new Error(`Gate ${this.id}: skip reason cannot be empty`);
110
+ }
111
+ this._status = "skipped";
112
+ this._skippedReason = reason.trim();
113
+ if (approvedBy !== undefined) {
114
+ this._approvedBy = approvedBy.trim();
115
+ }
116
+ this._completedAt = Timestamp.now();
117
+ }
118
+ /** Retry a failed gate (resets to pending). */
119
+ retry() {
120
+ this.assertTransition("pending");
121
+ this._status = "pending";
122
+ this._output = undefined;
123
+ this._startedAt = undefined;
124
+ this._completedAt = undefined;
125
+ }
126
+ /** Export gate state for persistence. */
127
+ toProps() {
128
+ return {
129
+ id: this.id,
130
+ type: this.type,
131
+ status: this._status,
132
+ order: this.order,
133
+ daggerFunction: this.daggerFunction,
134
+ skipPolicy: this.skipPolicy,
135
+ ...(this.command !== undefined ? { command: this.command } : {}),
136
+ ...(this._output !== undefined ? { output: this._output } : {}),
137
+ ...(this._skippedReason !== undefined
138
+ ? { skippedReason: this._skippedReason }
139
+ : {}),
140
+ ...(this._approvedBy !== undefined
141
+ ? { approvedBy: this._approvedBy }
142
+ : {}),
143
+ ...(this._startedAt !== undefined
144
+ ? { startedAt: this._startedAt }
145
+ : {}),
146
+ ...(this._completedAt !== undefined
147
+ ? { completedAt: this._completedAt }
148
+ : {}),
149
+ };
150
+ }
151
+ assertTransition(target) {
152
+ const allowed = GATE_TRANSITIONS[this._status];
153
+ if (!allowed.includes(target)) {
154
+ throw new Error(`Gate ${this.id}: cannot transition from "${this._status}" to "${target}"`);
155
+ }
156
+ }
157
+ }
158
+ //# sourceMappingURL=gate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"gate.js","sourceRoot":"","sources":["../../../src/domain/pipeline/gate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,13 @@
1
+ /**
2
+ * Pipeline Bounded Context — Domain Layer
3
+ *
4
+ * Exports all domain types for the pipeline governance system.
5
+ * "Flight checklist" CI/CD model with sequential gate enforcement.
6
+ */
7
+ export { PipelineId, GateId, type GateType, GATE_TYPES, BRANCH_GATE_TYPES, RELEASE_GATE_TYPES, gateTypeOrder, isValidGateType, type GateStatus, GATE_STATUSES, GATE_TRANSITIONS, isTerminalGateStatus, isSuccessGateStatus, type PipelineStatus, PIPELINE_STATUSES, PIPELINE_TRANSITIONS, isTerminalPipelineStatus, type PipelineScope, PIPELINE_SCOPES, isValidPipelineScope, type SkipPolicy, SKIP_POLICIES, isValidSkipPolicy, type StackTemplate, STACK_TEMPLATES, isValidStackTemplate, DaggerFunctionRef, SemanticVersion, GateOutput, DEFAULT_SKIP_POLICIES, DEFAULT_DAGGER_FUNCTIONS, } from "./value-objects.js";
8
+ export { Gate, type GateProps } from "./gate.js";
9
+ export { Pipeline, type PipelineProps } from "./pipeline.js";
10
+ export type { PipelineRepository, PipelineTemplateRepository, PipelineTemplateConfig, GateTemplateConfig, } from "./repositories.js";
11
+ export { PipelineFactory, GateEnforcer, type CreatePipelineRequest, } from "./services.js";
12
+ export type { ContainerRuntime, DaggerEnvironmentInfo, DaggerRunRequest, DaggerRunResult, DaggerPort, ScaffoldFile, ScaffoldOutput, ScaffoldPort, } from "./ports.js";
13
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/domain/pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAGH,OAAO,EACL,UAAU,EACV,MAAM,EACN,KAAK,QAAQ,EACb,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,eAAe,EACf,KAAK,UAAU,EACf,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EACnB,KAAK,cAAc,EACnB,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EACxB,KAAK,aAAa,EAClB,eAAe,EACf,oBAAoB,EACpB,KAAK,UAAU,EACf,aAAa,EACb,iBAAiB,EACjB,KAAK,aAAa,EAClB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAG5B,OAAO,EAAE,IAAI,EAAE,KAAK,SAAS,EAAE,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAE,KAAK,aAAa,EAAE,MAAM,eAAe,CAAC;AAG7D,YAAY,EACV,kBAAkB,EAClB,0BAA0B,EAC1B,sBAAsB,EACtB,kBAAkB,GACnB,MAAM,mBAAmB,CAAC;AAG3B,OAAO,EACL,eAAe,EACf,YAAY,EACZ,KAAK,qBAAqB,GAC3B,MAAM,eAAe,CAAC;AAGvB,YAAY,EACV,gBAAgB,EAChB,qBAAqB,EACrB,gBAAgB,EAChB,eAAe,EACf,UAAU,EACV,YAAY,EACZ,cAAc,EACd,YAAY,GACb,MAAM,YAAY,CAAC"}
@@ -0,0 +1,14 @@
1
+ /**
2
+ * Pipeline Bounded Context — Domain Layer
3
+ *
4
+ * Exports all domain types for the pipeline governance system.
5
+ * "Flight checklist" CI/CD model with sequential gate enforcement.
6
+ */
7
+ // Value Objects
8
+ export { PipelineId, GateId, GATE_TYPES, BRANCH_GATE_TYPES, RELEASE_GATE_TYPES, gateTypeOrder, isValidGateType, GATE_STATUSES, GATE_TRANSITIONS, isTerminalGateStatus, isSuccessGateStatus, PIPELINE_STATUSES, PIPELINE_TRANSITIONS, isTerminalPipelineStatus, PIPELINE_SCOPES, isValidPipelineScope, SKIP_POLICIES, isValidSkipPolicy, STACK_TEMPLATES, isValidStackTemplate, DaggerFunctionRef, SemanticVersion, GateOutput, DEFAULT_SKIP_POLICIES, DEFAULT_DAGGER_FUNCTIONS, } from "./value-objects.js";
9
+ // Entities
10
+ export { Gate } from "./gate.js";
11
+ export { Pipeline } from "./pipeline.js";
12
+ // Domain Services
13
+ export { PipelineFactory, GateEnforcer, } from "./services.js";
14
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/domain/pipeline/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,gBAAgB;AAChB,OAAO,EACL,UAAU,EACV,MAAM,EAEN,UAAU,EACV,iBAAiB,EACjB,kBAAkB,EAClB,aAAa,EACb,eAAe,EAEf,aAAa,EACb,gBAAgB,EAChB,oBAAoB,EACpB,mBAAmB,EAEnB,iBAAiB,EACjB,oBAAoB,EACpB,wBAAwB,EAExB,eAAe,EACf,oBAAoB,EAEpB,aAAa,EACb,iBAAiB,EAEjB,eAAe,EACf,oBAAoB,EACpB,iBAAiB,EACjB,eAAe,EACf,UAAU,EACV,qBAAqB,EACrB,wBAAwB,GACzB,MAAM,oBAAoB,CAAC;AAE5B,WAAW;AACX,OAAO,EAAE,IAAI,EAAkB,MAAM,WAAW,CAAC;AACjD,OAAO,EAAE,QAAQ,EAAsB,MAAM,eAAe,CAAC;AAU7D,kBAAkB;AAClB,OAAO,EACL,eAAe,EACf,YAAY,GAEb,MAAM,eAAe,CAAC"}
@@ -0,0 +1,99 @@
1
+ /**
2
+ * Pipeline Domain — Pipeline (Aggregate Root)
3
+ *
4
+ * Manages an ordered list of Gate child entities.
5
+ * Enforces gate ordering: gate N+1 cannot start until gate N succeeds.
6
+ * Pipeline-level state reflects overall gate progression.
7
+ *
8
+ * SOLID: SRP — Pipeline manages aggregate invariants and gate orchestration
9
+ * DDD: Aggregate root — only entry point for gate mutations
10
+ */
11
+ import type { WorkspaceId } from "../shared/value-objects.js";
12
+ import { Timestamp } from "../shared/value-objects.js";
13
+ import { type PipelineId, type GateId, type PipelineStatus, type PipelineScope, type StackTemplate, SemanticVersion } from "./value-objects.js";
14
+ import { Gate, type GateProps } from "./gate.js";
15
+ /** Data shape for Pipeline reconstitution. */
16
+ export interface PipelineProps {
17
+ readonly id: PipelineId;
18
+ readonly workspaceId: WorkspaceId;
19
+ readonly templateId: StackTemplate;
20
+ readonly scope: PipelineScope;
21
+ readonly status: PipelineStatus;
22
+ readonly version: SemanticVersion;
23
+ readonly gates: readonly GateProps[];
24
+ readonly createdAt: Timestamp;
25
+ readonly activatedAt?: Timestamp;
26
+ readonly completedAt?: Timestamp;
27
+ readonly cardId?: string;
28
+ }
29
+ /**
30
+ * Pipeline — aggregate root for the flight-checklist CI/CD model.
31
+ *
32
+ * Manages an ordered list of Gate child entities.
33
+ * Enforces gate ordering: gate N+1 cannot start until gate N succeeds.
34
+ * Pipeline-level state reflects overall gate progression.
35
+ */
36
+ export declare class Pipeline {
37
+ readonly id: PipelineId;
38
+ readonly workspaceId: WorkspaceId;
39
+ readonly templateId: StackTemplate;
40
+ readonly scope: PipelineScope;
41
+ readonly version: SemanticVersion;
42
+ readonly createdAt: Timestamp;
43
+ private _status;
44
+ private readonly _gates;
45
+ private _activatedAt;
46
+ private _completedAt;
47
+ private _cardId;
48
+ private constructor();
49
+ /** Create a new pipeline in draft status. */
50
+ static create(id: PipelineId, workspaceId: WorkspaceId, templateId: StackTemplate, scope: PipelineScope, version: SemanticVersion, gates: Gate[], cardId?: string): Pipeline;
51
+ /** Reconstitute from persisted data. */
52
+ static reconstitute(props: PipelineProps): Pipeline;
53
+ get status(): PipelineStatus;
54
+ get gates(): readonly Gate[];
55
+ get activatedAt(): Timestamp | undefined;
56
+ get completedAt(): Timestamp | undefined;
57
+ get isTerminal(): boolean;
58
+ get gateCount(): number;
59
+ /** Optional linked kanban card identifier. */
60
+ get cardId(): string | undefined;
61
+ /** Link this pipeline to a kanban card. */
62
+ linkCard(cardId: string): void;
63
+ /** Returns the current (first non-terminal) gate, or undefined if all done. */
64
+ get currentGate(): Gate | undefined;
65
+ /** Returns the next gate that can be started (first pending after all prior succeed). */
66
+ get nextGate(): Gate | undefined;
67
+ /** Activate pipeline (draft -> active). */
68
+ activate(): void;
69
+ /** Cancel pipeline (draft|active -> cancelled). */
70
+ cancel(): void;
71
+ /** Retry a failed pipeline (failed -> active, resets failed gate). */
72
+ retry(): void;
73
+ /** Find a gate by ID within this pipeline. */
74
+ findGate(gateId: GateId): Gate | undefined;
75
+ /** Start a gate. Validates ordering: all prior gates must have succeeded. */
76
+ startGate(gateId: GateId): void;
77
+ /** Pass a gate with optional output. May complete the pipeline. */
78
+ passGate(gateId: GateId, output?: string): void;
79
+ /** Fail a gate. Fails the pipeline. */
80
+ failGate(gateId: GateId, output?: string): void;
81
+ /**
82
+ * Skip a gate. Validates skip policy:
83
+ * - blocked: cannot skip
84
+ * - justification: requires non-empty reason
85
+ * - approval_required: requires reason + approvedBy
86
+ */
87
+ skipGate(gateId: GateId, reason: string, approvedBy?: string): void;
88
+ /** Retry a specific failed gate. Reactivates the pipeline if it was failed. */
89
+ retryGate(gateId: GateId): void;
90
+ /** Export pipeline state for persistence. */
91
+ toProps(): PipelineProps;
92
+ private assertTransition;
93
+ private assertActive;
94
+ private requireGate;
95
+ private assertGateOrdering;
96
+ private validateSkipPolicy;
97
+ private checkCompletion;
98
+ }
99
+ //# sourceMappingURL=pipeline.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.d.ts","sourceRoot":"","sources":["../../../src/domain/pipeline/pipeline.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,257 @@
1
+ /**
2
+ * Pipeline Domain — Pipeline (Aggregate Root)
3
+ *
4
+ * Manages an ordered list of Gate child entities.
5
+ * Enforces gate ordering: gate N+1 cannot start until gate N succeeds.
6
+ * Pipeline-level state reflects overall gate progression.
7
+ *
8
+ * SOLID: SRP — Pipeline manages aggregate invariants and gate orchestration
9
+ * DDD: Aggregate root — only entry point for gate mutations
10
+ */
11
+ import { Timestamp } from "../shared/value-objects.js";
12
+ import { SemanticVersion, PIPELINE_TRANSITIONS, isTerminalPipelineStatus, } from "./value-objects.js";
13
+ import { Gate } from "./gate.js";
14
+ /**
15
+ * Pipeline — aggregate root for the flight-checklist CI/CD model.
16
+ *
17
+ * Manages an ordered list of Gate child entities.
18
+ * Enforces gate ordering: gate N+1 cannot start until gate N succeeds.
19
+ * Pipeline-level state reflects overall gate progression.
20
+ */
21
+ export class Pipeline {
22
+ id;
23
+ workspaceId;
24
+ templateId;
25
+ scope;
26
+ version;
27
+ createdAt;
28
+ _status;
29
+ _gates;
30
+ _activatedAt;
31
+ _completedAt;
32
+ _cardId;
33
+ constructor(id, workspaceId, templateId, scope, version, createdAt, status, gates, activatedAt, completedAt, cardId) {
34
+ this.id = id;
35
+ this.workspaceId = workspaceId;
36
+ this.templateId = templateId;
37
+ this.scope = scope;
38
+ this.version = version;
39
+ this.createdAt = createdAt;
40
+ this._status = status;
41
+ this._gates = gates;
42
+ this._activatedAt = activatedAt;
43
+ this._completedAt = completedAt;
44
+ this._cardId = cardId;
45
+ }
46
+ /** Create a new pipeline in draft status. */
47
+ static create(id, workspaceId, templateId, scope, version, gates, cardId) {
48
+ if (gates.length === 0) {
49
+ throw new Error("Pipeline: must have at least one gate");
50
+ }
51
+ return new Pipeline(id, workspaceId, templateId, scope, version, Timestamp.now(), "draft", gates, undefined, undefined, cardId);
52
+ }
53
+ /** Reconstitute from persisted data. */
54
+ static reconstitute(props) {
55
+ const gates = props.gates.map((g) => Gate.reconstitute(g));
56
+ return new Pipeline(props.id, props.workspaceId, props.templateId, props.scope, props.version, props.createdAt, props.status, gates, props.activatedAt, props.completedAt, props.cardId);
57
+ }
58
+ // ─── Getters ──────────────────────────────────────────────────────────
59
+ get status() {
60
+ return this._status;
61
+ }
62
+ get gates() {
63
+ return this._gates;
64
+ }
65
+ get activatedAt() {
66
+ return this._activatedAt;
67
+ }
68
+ get completedAt() {
69
+ return this._completedAt;
70
+ }
71
+ get isTerminal() {
72
+ return isTerminalPipelineStatus(this._status);
73
+ }
74
+ get gateCount() {
75
+ return this._gates.length;
76
+ }
77
+ /** Optional linked kanban card identifier. */
78
+ get cardId() {
79
+ return this._cardId;
80
+ }
81
+ /** Link this pipeline to a kanban card. */
82
+ linkCard(cardId) {
83
+ this._cardId = cardId;
84
+ }
85
+ /** Returns the current (first non-terminal) gate, or undefined if all done. */
86
+ get currentGate() {
87
+ return this._gates.find((g) => !g.isTerminal);
88
+ }
89
+ /** Returns the next gate that can be started (first pending after all prior succeed). */
90
+ get nextGate() {
91
+ for (let i = 0; i < this._gates.length; i++) {
92
+ const gate = this._gates[i];
93
+ if (gate.status === "pending") {
94
+ const allPriorSuccess = this._gates
95
+ .slice(0, i)
96
+ .every((g) => g.isSuccess);
97
+ if (allPriorSuccess)
98
+ return gate;
99
+ return undefined;
100
+ }
101
+ if (gate.status === "running" || gate.status === "failed") {
102
+ return undefined;
103
+ }
104
+ }
105
+ return undefined;
106
+ }
107
+ // ─── Pipeline State Transitions ───────────────────────────────────────
108
+ /** Activate pipeline (draft -> active). */
109
+ activate() {
110
+ this.assertTransition("active");
111
+ this._status = "active";
112
+ this._activatedAt = Timestamp.now();
113
+ }
114
+ /** Cancel pipeline (draft|active -> cancelled). */
115
+ cancel() {
116
+ this.assertTransition("cancelled");
117
+ this._status = "cancelled";
118
+ this._completedAt = Timestamp.now();
119
+ }
120
+ /** Retry a failed pipeline (failed -> active, resets failed gate). */
121
+ retry() {
122
+ this.assertTransition("active");
123
+ const failedGate = this._gates.find((g) => g.status === "failed");
124
+ if (failedGate) {
125
+ failedGate.retry();
126
+ }
127
+ this._status = "active";
128
+ this._completedAt = undefined;
129
+ }
130
+ // ─── Gate Operations (delegated through aggregate root) ───────────────
131
+ /** Find a gate by ID within this pipeline. */
132
+ findGate(gateId) {
133
+ return this._gates.find((g) => g.id.equals(gateId));
134
+ }
135
+ /** Start a gate. Validates ordering: all prior gates must have succeeded. */
136
+ startGate(gateId) {
137
+ this.assertActive();
138
+ const gate = this.requireGate(gateId);
139
+ this.assertGateOrdering(gate);
140
+ gate.start();
141
+ }
142
+ /** Pass a gate with optional output. May complete the pipeline. */
143
+ passGate(gateId, output) {
144
+ this.assertActive();
145
+ const gate = this.requireGate(gateId);
146
+ gate.pass(output);
147
+ this.checkCompletion();
148
+ }
149
+ /** Fail a gate. Fails the pipeline. */
150
+ failGate(gateId, output) {
151
+ this.assertActive();
152
+ const gate = this.requireGate(gateId);
153
+ gate.fail(output);
154
+ this._status = "failed";
155
+ this._completedAt = Timestamp.now();
156
+ }
157
+ /**
158
+ * Skip a gate. Validates skip policy:
159
+ * - blocked: cannot skip
160
+ * - justification: requires non-empty reason
161
+ * - approval_required: requires reason + approvedBy
162
+ */
163
+ skipGate(gateId, reason, approvedBy) {
164
+ this.assertActive();
165
+ const gate = this.requireGate(gateId);
166
+ this.assertGateOrdering(gate);
167
+ this.validateSkipPolicy(gate, reason, approvedBy);
168
+ gate.skip(reason, approvedBy);
169
+ this.checkCompletion();
170
+ }
171
+ /** Retry a specific failed gate. Reactivates the pipeline if it was failed. */
172
+ retryGate(gateId) {
173
+ const gate = this.requireGate(gateId);
174
+ if (gate.status !== "failed") {
175
+ throw new Error(`Pipeline ${this.id}: gate ${gateId} is not failed (status: ${gate.status})`);
176
+ }
177
+ gate.retry();
178
+ if (this._status === "failed") {
179
+ this._status = "active";
180
+ this._completedAt = undefined;
181
+ }
182
+ }
183
+ /** Export pipeline state for persistence. */
184
+ toProps() {
185
+ return {
186
+ id: this.id,
187
+ workspaceId: this.workspaceId,
188
+ templateId: this.templateId,
189
+ scope: this.scope,
190
+ status: this._status,
191
+ version: this.version,
192
+ gates: this._gates.map((g) => g.toProps()),
193
+ createdAt: this.createdAt,
194
+ ...(this._activatedAt !== undefined
195
+ ? { activatedAt: this._activatedAt }
196
+ : {}),
197
+ ...(this._completedAt !== undefined
198
+ ? { completedAt: this._completedAt }
199
+ : {}),
200
+ ...(this._cardId !== undefined ? { cardId: this._cardId } : {}),
201
+ };
202
+ }
203
+ // ─── Private Helpers ──────────────────────────────────────────────────
204
+ assertTransition(target) {
205
+ const allowed = PIPELINE_TRANSITIONS[this._status];
206
+ if (!allowed.includes(target)) {
207
+ throw new Error(`Pipeline ${this.id}: cannot transition from "${this._status}" to "${target}"`);
208
+ }
209
+ }
210
+ assertActive() {
211
+ if (this._status !== "active") {
212
+ throw new Error(`Pipeline ${this.id}: pipeline must be active (current: ${this._status})`);
213
+ }
214
+ }
215
+ requireGate(gateId) {
216
+ const gate = this.findGate(gateId);
217
+ if (!gate) {
218
+ throw new Error(`Pipeline ${this.id}: gate ${gateId} not found`);
219
+ }
220
+ return gate;
221
+ }
222
+ assertGateOrdering(gate) {
223
+ const priorGates = this._gates.filter((g) => g.order < gate.order);
224
+ const allPriorSuccess = priorGates.every((g) => g.isSuccess);
225
+ if (!allPriorSuccess) {
226
+ const blocking = priorGates.find((g) => !g.isSuccess);
227
+ throw new Error(`Pipeline ${this.id}: gate ${gate.id} (${gate.type}) blocked by prior gate ${blocking?.id} (${blocking?.type}, status: ${blocking?.status})`);
228
+ }
229
+ }
230
+ validateSkipPolicy(gate, reason, approvedBy) {
231
+ switch (gate.skipPolicy) {
232
+ case "blocked":
233
+ throw new Error(`Pipeline ${this.id}: gate ${gate.id} (${gate.type}) has skip policy "blocked" — cannot be skipped`);
234
+ case "justification":
235
+ if (!reason || reason.trim().length === 0) {
236
+ throw new Error(`Pipeline ${this.id}: gate ${gate.id} (${gate.type}) requires a justification to skip`);
237
+ }
238
+ break;
239
+ case "approval_required":
240
+ if (!reason || reason.trim().length === 0) {
241
+ throw new Error(`Pipeline ${this.id}: gate ${gate.id} (${gate.type}) requires a justification to skip`);
242
+ }
243
+ if (!approvedBy || approvedBy.trim().length === 0) {
244
+ throw new Error(`Pipeline ${this.id}: gate ${gate.id} (${gate.type}) requires approvedBy for skip approval`);
245
+ }
246
+ break;
247
+ }
248
+ }
249
+ checkCompletion() {
250
+ const allSuccess = this._gates.every((g) => g.isSuccess);
251
+ if (allSuccess) {
252
+ this._status = "completed";
253
+ this._completedAt = Timestamp.now();
254
+ }
255
+ }
256
+ }
257
+ //# sourceMappingURL=pipeline.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"pipeline.js","sourceRoot":"","sources":["../../../src/domain/pipeline/pipeline.ts"],"names":[],"mappings":"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"}