@cleocode/core 2026.4.6 → 2026.4.9

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 (647) hide show
  1. package/package.json +7 -7
  2. package/dist/cant/approval.d.ts +0 -110
  3. package/dist/cant/approval.d.ts.map +0 -1
  4. package/dist/cant/context-builder.d.ts +0 -79
  5. package/dist/cant/context-builder.d.ts.map +0 -1
  6. package/dist/cant/discretion.d.ts +0 -95
  7. package/dist/cant/discretion.d.ts.map +0 -1
  8. package/dist/cant/index.d.ts +0 -25
  9. package/dist/cant/index.d.ts.map +0 -1
  10. package/dist/cant/parallel-runner.d.ts +0 -38
  11. package/dist/cant/parallel-runner.d.ts.map +0 -1
  12. package/dist/cant/types.d.ts +0 -127
  13. package/dist/cant/types.d.ts.map +0 -1
  14. package/dist/cant/workflow-executor.d.ts +0 -105
  15. package/dist/cant/workflow-executor.d.ts.map +0 -1
  16. package/src/__tests__/audit-prune.test.d.ts.map +0 -1
  17. package/src/__tests__/audit-prune.test.js +0 -162
  18. package/src/__tests__/audit-prune.test.js.map +0 -1
  19. package/src/__tests__/caamp-skill-install.test.d.ts.map +0 -1
  20. package/src/__tests__/caamp-skill-install.test.js +0 -147
  21. package/src/__tests__/caamp-skill-install.test.js.map +0 -1
  22. package/src/__tests__/cli-parity.test.d.ts.map +0 -1
  23. package/src/__tests__/cli-parity.test.js +0 -209
  24. package/src/__tests__/cli-parity.test.js.map +0 -1
  25. package/src/__tests__/config.test.d.ts.map +0 -1
  26. package/src/__tests__/config.test.js +0 -144
  27. package/src/__tests__/config.test.js.map +0 -1
  28. package/src/__tests__/core-parity.test.d.ts.map +0 -1
  29. package/src/__tests__/core-parity.test.js +0 -645
  30. package/src/__tests__/core-parity.test.js.map +0 -1
  31. package/src/__tests__/error-catalog.test.d.ts.map +0 -1
  32. package/src/__tests__/error-catalog.test.js +0 -127
  33. package/src/__tests__/error-catalog.test.js.map +0 -1
  34. package/src/__tests__/golden-parity.test.d.ts.map +0 -1
  35. package/src/__tests__/golden-parity.test.js +0 -212
  36. package/src/__tests__/golden-parity.test.js.map +0 -1
  37. package/src/__tests__/hooks.test.d.ts.map +0 -1
  38. package/src/__tests__/hooks.test.js +0 -201
  39. package/src/__tests__/hooks.test.js.map +0 -1
  40. package/src/__tests__/human-output.test.d.ts.map +0 -1
  41. package/src/__tests__/human-output.test.js +0 -158
  42. package/src/__tests__/human-output.test.js.map +0 -1
  43. package/src/__tests__/index-api-compat.test.d.ts.map +0 -1
  44. package/src/__tests__/index-api-compat.test.js +0 -16
  45. package/src/__tests__/index-api-compat.test.js.map +0 -1
  46. package/src/__tests__/init-e2e.test.d.ts.map +0 -1
  47. package/src/__tests__/init-e2e.test.js +0 -221
  48. package/src/__tests__/init-e2e.test.js.map +0 -1
  49. package/src/__tests__/injection-chain.test.d.ts.map +0 -1
  50. package/src/__tests__/injection-chain.test.js +0 -234
  51. package/src/__tests__/injection-chain.test.js.map +0 -1
  52. package/src/__tests__/injection-mvi-tiers.test.d.ts.map +0 -1
  53. package/src/__tests__/injection-mvi-tiers.test.js +0 -116
  54. package/src/__tests__/injection-mvi-tiers.test.js.map +0 -1
  55. package/src/__tests__/injection-shared.test.d.ts.map +0 -1
  56. package/src/__tests__/injection-shared.test.js +0 -194
  57. package/src/__tests__/injection-shared.test.js.map +0 -1
  58. package/src/__tests__/lafs-conformance.test.d.ts.map +0 -1
  59. package/src/__tests__/lafs-conformance.test.js +0 -786
  60. package/src/__tests__/lafs-conformance.test.js.map +0 -1
  61. package/src/__tests__/logger.test.d.ts.map +0 -1
  62. package/src/__tests__/logger.test.js +0 -75
  63. package/src/__tests__/logger.test.js.map +0 -1
  64. package/src/__tests__/paths.test.d.ts.map +0 -1
  65. package/src/__tests__/paths.test.js +0 -327
  66. package/src/__tests__/paths.test.js.map +0 -1
  67. package/src/__tests__/project-info.test.d.ts.map +0 -1
  68. package/src/__tests__/project-info.test.js +0 -156
  69. package/src/__tests__/project-info.test.js.map +0 -1
  70. package/src/__tests__/rcsd-pipeline-e2e.test.d.ts.map +0 -1
  71. package/src/__tests__/rcsd-pipeline-e2e.test.js +0 -263
  72. package/src/__tests__/rcsd-pipeline-e2e.test.js.map +0 -1
  73. package/src/__tests__/remote.test.d.ts.map +0 -1
  74. package/src/__tests__/remote.test.js +0 -149
  75. package/src/__tests__/remote.test.js.map +0 -1
  76. package/src/__tests__/scaffold.test.d.ts.map +0 -1
  77. package/src/__tests__/scaffold.test.js +0 -474
  78. package/src/__tests__/scaffold.test.js.map +0 -1
  79. package/src/__tests__/schema-management.test.d.ts.map +0 -1
  80. package/src/__tests__/schema-management.test.js +0 -287
  81. package/src/__tests__/schema-management.test.js.map +0 -1
  82. package/src/__tests__/schema.test.d.ts.map +0 -1
  83. package/src/__tests__/schema.test.js +0 -51
  84. package/src/__tests__/schema.test.js.map +0 -1
  85. package/src/__tests__/sharing.test.d.ts.map +0 -1
  86. package/src/__tests__/sharing.test.js +0 -160
  87. package/src/__tests__/sharing.test.js.map +0 -1
  88. package/src/__tests__/snapshot.test.d.ts.map +0 -1
  89. package/src/__tests__/snapshot.test.js +0 -72
  90. package/src/__tests__/snapshot.test.js.map +0 -1
  91. package/src/__tests__/upgrade.test.d.ts.map +0 -1
  92. package/src/__tests__/upgrade.test.js +0 -321
  93. package/src/__tests__/upgrade.test.js.map +0 -1
  94. package/src/adapters/__tests__/discovery.test.d.ts.map +0 -1
  95. package/src/adapters/__tests__/discovery.test.js +0 -56
  96. package/src/adapters/__tests__/discovery.test.js.map +0 -1
  97. package/src/adapters/__tests__/manager.test.d.ts.map +0 -1
  98. package/src/adapters/__tests__/manager.test.js +0 -260
  99. package/src/adapters/__tests__/manager.test.js.map +0 -1
  100. package/src/agents/__tests__/agent-registry.test.d.ts.map +0 -1
  101. package/src/agents/__tests__/agent-registry.test.js +0 -262
  102. package/src/agents/__tests__/agent-registry.test.js.map +0 -1
  103. package/src/agents/__tests__/capacity.test.d.ts.map +0 -1
  104. package/src/agents/__tests__/capacity.test.js +0 -173
  105. package/src/agents/__tests__/capacity.test.js.map +0 -1
  106. package/src/agents/__tests__/execution-learning.test.d.ts.map +0 -1
  107. package/src/agents/__tests__/execution-learning.test.js +0 -533
  108. package/src/agents/__tests__/execution-learning.test.js.map +0 -1
  109. package/src/agents/__tests__/health-monitor.test.d.ts.map +0 -1
  110. package/src/agents/__tests__/health-monitor.test.js +0 -259
  111. package/src/agents/__tests__/health-monitor.test.js.map +0 -1
  112. package/src/agents/__tests__/registry.test.d.ts.map +0 -1
  113. package/src/agents/__tests__/registry.test.js +0 -373
  114. package/src/agents/__tests__/registry.test.js.map +0 -1
  115. package/src/agents/__tests__/retry.test.d.ts.map +0 -1
  116. package/src/agents/__tests__/retry.test.js +0 -225
  117. package/src/agents/__tests__/retry.test.js.map +0 -1
  118. package/src/cant/__tests__/cant-agent-parse.test.d.ts.map +0 -1
  119. package/src/cant/__tests__/cant-agent-parse.test.js +0 -77
  120. package/src/cant/__tests__/cant-agent-parse.test.js.map +0 -1
  121. package/src/cant/__tests__/cant-agent-parse.test.ts +0 -94
  122. package/src/cant/approval.ts +0 -218
  123. package/src/cant/context-builder.ts +0 -135
  124. package/src/cant/discretion.ts +0 -149
  125. package/src/cant/index.ts +0 -58
  126. package/src/cant/parallel-runner.ts +0 -205
  127. package/src/cant/types.ts +0 -158
  128. package/src/cant/workflow-executor.ts +0 -618
  129. package/src/compliance/__tests__/sync.test.d.ts.map +0 -1
  130. package/src/compliance/__tests__/sync.test.js +0 -119
  131. package/src/compliance/__tests__/sync.test.js.map +0 -1
  132. package/src/conduit/__tests__/local-credential-flow.test.d.ts.map +0 -1
  133. package/src/conduit/__tests__/local-credential-flow.test.js +0 -185
  134. package/src/conduit/__tests__/local-credential-flow.test.js.map +0 -1
  135. package/src/conduit/__tests__/local-transport.test.d.ts.map +0 -1
  136. package/src/conduit/__tests__/local-transport.test.js +0 -404
  137. package/src/conduit/__tests__/local-transport.test.js.map +0 -1
  138. package/src/conduit/__tests__/sse-transport.test.d.ts.map +0 -1
  139. package/src/conduit/__tests__/sse-transport.test.js +0 -291
  140. package/src/conduit/__tests__/sse-transport.test.js.map +0 -1
  141. package/src/hooks/__tests__/provider-hooks.test.d.ts.map +0 -1
  142. package/src/hooks/__tests__/provider-hooks.test.js +0 -33
  143. package/src/hooks/__tests__/provider-hooks.test.js.map +0 -1
  144. package/src/hooks/__tests__/registry.test.d.ts.map +0 -1
  145. package/src/hooks/__tests__/registry.test.js +0 -37
  146. package/src/hooks/__tests__/registry.test.js.map +0 -1
  147. package/src/hooks/handlers/__tests__/error-hooks.test.d.ts.map +0 -1
  148. package/src/hooks/handlers/__tests__/error-hooks.test.js +0 -90
  149. package/src/hooks/handlers/__tests__/error-hooks.test.js.map +0 -1
  150. package/src/hooks/handlers/__tests__/file-hooks.test.d.ts.map +0 -1
  151. package/src/hooks/handlers/__tests__/file-hooks.test.js +0 -128
  152. package/src/hooks/handlers/__tests__/file-hooks.test.js.map +0 -1
  153. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.d.ts.map +0 -1
  154. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js +0 -503
  155. package/src/hooks/handlers/__tests__/hook-automation-e2e.test.js.map +0 -1
  156. package/src/hooks/handlers/__tests__/session-hooks.test.d.ts.map +0 -1
  157. package/src/hooks/handlers/__tests__/session-hooks.test.js +0 -54
  158. package/src/hooks/handlers/__tests__/session-hooks.test.js.map +0 -1
  159. package/src/hooks/handlers/__tests__/task-hooks.test.d.ts.map +0 -1
  160. package/src/hooks/handlers/__tests__/task-hooks.test.js +0 -77
  161. package/src/hooks/handlers/__tests__/task-hooks.test.js.map +0 -1
  162. package/src/intelligence/__tests__/adaptive-validation.test.d.ts.map +0 -1
  163. package/src/intelligence/__tests__/adaptive-validation.test.js +0 -517
  164. package/src/intelligence/__tests__/adaptive-validation.test.js.map +0 -1
  165. package/src/intelligence/__tests__/impact.test.d.ts.map +0 -1
  166. package/src/intelligence/__tests__/impact.test.js +0 -515
  167. package/src/intelligence/__tests__/impact.test.js.map +0 -1
  168. package/src/intelligence/__tests__/patterns.test.d.ts.map +0 -1
  169. package/src/intelligence/__tests__/patterns.test.js +0 -370
  170. package/src/intelligence/__tests__/patterns.test.js.map +0 -1
  171. package/src/intelligence/__tests__/prediction.test.d.ts.map +0 -1
  172. package/src/intelligence/__tests__/prediction.test.js +0 -314
  173. package/src/intelligence/__tests__/prediction.test.js.map +0 -1
  174. package/src/lib/__tests__/retry.test.d.ts.map +0 -1
  175. package/src/lib/__tests__/retry.test.js +0 -225
  176. package/src/lib/__tests__/retry.test.js.map +0 -1
  177. package/src/lifecycle/__tests__/chain-store.test.d.ts.map +0 -1
  178. package/src/lifecycle/__tests__/chain-store.test.js +0 -243
  179. package/src/lifecycle/__tests__/chain-store.test.js.map +0 -1
  180. package/src/lifecycle/__tests__/consolidate-rcasd.test.d.ts.map +0 -1
  181. package/src/lifecycle/__tests__/consolidate-rcasd.test.js +0 -210
  182. package/src/lifecycle/__tests__/consolidate-rcasd.test.js.map +0 -1
  183. package/src/lifecycle/__tests__/default-chain.test.d.ts.map +0 -1
  184. package/src/lifecycle/__tests__/default-chain.test.js +0 -74
  185. package/src/lifecycle/__tests__/default-chain.test.js.map +0 -1
  186. package/src/lifecycle/__tests__/frontmatter.test.d.ts.map +0 -1
  187. package/src/lifecycle/__tests__/frontmatter.test.js +0 -229
  188. package/src/lifecycle/__tests__/frontmatter.test.js.map +0 -1
  189. package/src/lifecycle/__tests__/lifecycle.test.d.ts.map +0 -1
  190. package/src/lifecycle/__tests__/lifecycle.test.js +0 -126
  191. package/src/lifecycle/__tests__/lifecycle.test.js.map +0 -1
  192. package/src/lifecycle/__tests__/pipeline.integration.test.d.ts.map +0 -1
  193. package/src/lifecycle/__tests__/pipeline.integration.test.js +0 -977
  194. package/src/lifecycle/__tests__/pipeline.integration.test.js.map +0 -1
  195. package/src/lifecycle/__tests__/rcasd-paths.test.d.ts.map +0 -1
  196. package/src/lifecycle/__tests__/rcasd-paths.test.js +0 -206
  197. package/src/lifecycle/__tests__/rcasd-paths.test.js.map +0 -1
  198. package/src/lifecycle/__tests__/resume-schema-contract.test.d.ts.map +0 -1
  199. package/src/lifecycle/__tests__/resume-schema-contract.test.js +0 -246
  200. package/src/lifecycle/__tests__/resume-schema-contract.test.js.map +0 -1
  201. package/src/lifecycle/__tests__/stage-record-provenance.integration.test.d.ts.map +0 -1
  202. package/src/lifecycle/__tests__/stage-record-provenance.integration.test.js +0 -95
  203. package/src/lifecycle/__tests__/stage-record-provenance.integration.test.js.map +0 -1
  204. package/src/lifecycle/__tests__/tessera-engine.test.d.ts.map +0 -1
  205. package/src/lifecycle/__tests__/tessera-engine.test.js +0 -392
  206. package/src/lifecycle/__tests__/tessera-engine.test.js.map +0 -1
  207. package/src/memory/__tests__/auto-extract.test.d.ts.map +0 -1
  208. package/src/memory/__tests__/auto-extract.test.js +0 -197
  209. package/src/memory/__tests__/auto-extract.test.js.map +0 -1
  210. package/src/memory/__tests__/brain-automation.test.d.ts.map +0 -1
  211. package/src/memory/__tests__/brain-automation.test.js +0 -730
  212. package/src/memory/__tests__/brain-automation.test.js.map +0 -1
  213. package/src/memory/__tests__/brain-embedding.test.d.ts.map +0 -1
  214. package/src/memory/__tests__/brain-embedding.test.js +0 -92
  215. package/src/memory/__tests__/brain-embedding.test.js.map +0 -1
  216. package/src/memory/__tests__/brain-links.test.d.ts.map +0 -1
  217. package/src/memory/__tests__/brain-links.test.js +0 -221
  218. package/src/memory/__tests__/brain-links.test.js.map +0 -1
  219. package/src/memory/__tests__/brain-migration.test.d.ts.map +0 -1
  220. package/src/memory/__tests__/brain-migration.test.js +0 -180
  221. package/src/memory/__tests__/brain-migration.test.js.map +0 -1
  222. package/src/memory/__tests__/brain-retrieval.test.d.ts.map +0 -1
  223. package/src/memory/__tests__/brain-retrieval.test.js +0 -701
  224. package/src/memory/__tests__/brain-retrieval.test.js.map +0 -1
  225. package/src/memory/__tests__/brain-search.test.d.ts.map +0 -1
  226. package/src/memory/__tests__/brain-search.test.js +0 -180
  227. package/src/memory/__tests__/brain-search.test.js.map +0 -1
  228. package/src/memory/__tests__/claude-mem-migration.test.d.ts.map +0 -1
  229. package/src/memory/__tests__/claude-mem-migration.test.js +0 -424
  230. package/src/memory/__tests__/claude-mem-migration.test.js.map +0 -1
  231. package/src/memory/__tests__/decisions.test.d.ts.map +0 -1
  232. package/src/memory/__tests__/decisions.test.js +0 -253
  233. package/src/memory/__tests__/decisions.test.js.map +0 -1
  234. package/src/memory/__tests__/engine-compat.test.d.ts.map +0 -1
  235. package/src/memory/__tests__/engine-compat.test.js +0 -331
  236. package/src/memory/__tests__/engine-compat.test.js.map +0 -1
  237. package/src/memory/__tests__/memory-bridge.test.d.ts.map +0 -1
  238. package/src/memory/__tests__/memory-bridge.test.js +0 -231
  239. package/src/memory/__tests__/memory-bridge.test.js.map +0 -1
  240. package/src/memory/__tests__/pipeline-manifest-sqlite.test.d.ts.map +0 -1
  241. package/src/memory/__tests__/pipeline-manifest-sqlite.test.js +0 -516
  242. package/src/memory/__tests__/pipeline-manifest-sqlite.test.js.map +0 -1
  243. package/src/memory/__tests__/session-memory.test.d.ts.map +0 -1
  244. package/src/memory/__tests__/session-memory.test.js +0 -387
  245. package/src/memory/__tests__/session-memory.test.js.map +0 -1
  246. package/src/metrics/__tests__/model-provider-registry.test.d.ts.map +0 -1
  247. package/src/metrics/__tests__/model-provider-registry.test.js +0 -45
  248. package/src/metrics/__tests__/model-provider-registry.test.js.map +0 -1
  249. package/src/metrics/__tests__/provider-detection.test.d.ts.map +0 -1
  250. package/src/metrics/__tests__/provider-detection.test.js +0 -123
  251. package/src/metrics/__tests__/provider-detection.test.js.map +0 -1
  252. package/src/migration/__tests__/checksum.test.d.ts.map +0 -1
  253. package/src/migration/__tests__/checksum.test.js +0 -216
  254. package/src/migration/__tests__/checksum.test.js.map +0 -1
  255. package/src/migration/__tests__/logger.test.d.ts.map +0 -1
  256. package/src/migration/__tests__/logger.test.js +0 -256
  257. package/src/migration/__tests__/logger.test.js.map +0 -1
  258. package/src/migration/__tests__/migration-failure.integration.test.d.ts.map +0 -1
  259. package/src/migration/__tests__/migration-failure.integration.test.js +0 -515
  260. package/src/migration/__tests__/migration-failure.integration.test.js.map +0 -1
  261. package/src/migration/__tests__/migration.test.d.ts.map +0 -1
  262. package/src/migration/__tests__/migration.test.js +0 -82
  263. package/src/migration/__tests__/migration.test.js.map +0 -1
  264. package/src/migration/__tests__/state.test.d.ts.map +0 -1
  265. package/src/migration/__tests__/state.test.js +0 -330
  266. package/src/migration/__tests__/state.test.js.map +0 -1
  267. package/src/migration/__tests__/validate.test.d.ts.map +0 -1
  268. package/src/migration/__tests__/validate.test.js +0 -258
  269. package/src/migration/__tests__/validate.test.js.map +0 -1
  270. package/src/nexus/__tests__/deps.test.d.ts.map +0 -1
  271. package/src/nexus/__tests__/deps.test.js +0 -283
  272. package/src/nexus/__tests__/deps.test.js.map +0 -1
  273. package/src/nexus/__tests__/nexus-e2e.test.d.ts.map +0 -1
  274. package/src/nexus/__tests__/nexus-e2e.test.js +0 -1220
  275. package/src/nexus/__tests__/nexus-e2e.test.js.map +0 -1
  276. package/src/nexus/__tests__/permissions.test.d.ts.map +0 -1
  277. package/src/nexus/__tests__/permissions.test.js +0 -119
  278. package/src/nexus/__tests__/permissions.test.js.map +0 -1
  279. package/src/nexus/__tests__/query.test.d.ts.map +0 -1
  280. package/src/nexus/__tests__/query.test.js +0 -168
  281. package/src/nexus/__tests__/query.test.js.map +0 -1
  282. package/src/nexus/__tests__/reconcile.test.d.ts.map +0 -1
  283. package/src/nexus/__tests__/reconcile.test.js +0 -135
  284. package/src/nexus/__tests__/reconcile.test.js.map +0 -1
  285. package/src/nexus/__tests__/registry.test.d.ts.map +0 -1
  286. package/src/nexus/__tests__/registry.test.js +0 -229
  287. package/src/nexus/__tests__/registry.test.js.map +0 -1
  288. package/src/nexus/__tests__/transfer.test.d.ts.map +0 -1
  289. package/src/nexus/__tests__/transfer.test.js +0 -372
  290. package/src/nexus/__tests__/transfer.test.js.map +0 -1
  291. package/src/observability/__tests__/index.test.d.ts.map +0 -1
  292. package/src/observability/__tests__/index.test.js +0 -288
  293. package/src/observability/__tests__/index.test.js.map +0 -1
  294. package/src/observability/__tests__/log-filter.test.d.ts.map +0 -1
  295. package/src/observability/__tests__/log-filter.test.js +0 -151
  296. package/src/observability/__tests__/log-filter.test.js.map +0 -1
  297. package/src/observability/__tests__/log-parser.test.d.ts.map +0 -1
  298. package/src/observability/__tests__/log-parser.test.js +0 -170
  299. package/src/observability/__tests__/log-parser.test.js.map +0 -1
  300. package/src/observability/__tests__/log-reader.test.d.ts.map +0 -1
  301. package/src/observability/__tests__/log-reader.test.js +0 -150
  302. package/src/observability/__tests__/log-reader.test.js.map +0 -1
  303. package/src/orchestration/__tests__/autonomous-spec.test.d.ts.map +0 -1
  304. package/src/orchestration/__tests__/autonomous-spec.test.js +0 -419
  305. package/src/orchestration/__tests__/autonomous-spec.test.js.map +0 -1
  306. package/src/orchestration/__tests__/orchestration.test.d.ts.map +0 -1
  307. package/src/orchestration/__tests__/orchestration.test.js +0 -205
  308. package/src/orchestration/__tests__/orchestration.test.js.map +0 -1
  309. package/src/orchestration/__tests__/protocol-validators.test.d.ts.map +0 -1
  310. package/src/orchestration/__tests__/protocol-validators.test.js +0 -602
  311. package/src/orchestration/__tests__/protocol-validators.test.js.map +0 -1
  312. package/src/phases/__tests__/deps.test.d.ts.map +0 -1
  313. package/src/phases/__tests__/deps.test.js +0 -210
  314. package/src/phases/__tests__/deps.test.js.map +0 -1
  315. package/src/phases/__tests__/phases.test.d.ts.map +0 -1
  316. package/src/phases/__tests__/phases.test.js +0 -215
  317. package/src/phases/__tests__/phases.test.js.map +0 -1
  318. package/src/release/__tests__/artifacts.test.d.ts.map +0 -1
  319. package/src/release/__tests__/artifacts.test.js +0 -65
  320. package/src/release/__tests__/artifacts.test.js.map +0 -1
  321. package/src/release/__tests__/cancel-release.test.d.ts.map +0 -1
  322. package/src/release/__tests__/cancel-release.test.js +0 -154
  323. package/src/release/__tests__/cancel-release.test.js.map +0 -1
  324. package/src/release/__tests__/changelog-writer.test.d.ts.map +0 -1
  325. package/src/release/__tests__/changelog-writer.test.js +0 -132
  326. package/src/release/__tests__/changelog-writer.test.js.map +0 -1
  327. package/src/release/__tests__/push-policy.test.d.ts.map +0 -1
  328. package/src/release/__tests__/push-policy.test.js +0 -142
  329. package/src/release/__tests__/push-policy.test.js.map +0 -1
  330. package/src/release/__tests__/release.test.d.ts.map +0 -1
  331. package/src/release/__tests__/release.test.js +0 -25
  332. package/src/release/__tests__/release.test.js.map +0 -1
  333. package/src/sequence/__tests__/allocate.test.d.ts.map +0 -1
  334. package/src/sequence/__tests__/allocate.test.js +0 -113
  335. package/src/sequence/__tests__/allocate.test.js.map +0 -1
  336. package/src/sessions/__tests__/briefing-blocked.test.d.ts.map +0 -1
  337. package/src/sessions/__tests__/briefing-blocked.test.js +0 -117
  338. package/src/sessions/__tests__/briefing-blocked.test.js.map +0 -1
  339. package/src/sessions/__tests__/briefing.test.d.ts.map +0 -1
  340. package/src/sessions/__tests__/briefing.test.js +0 -336
  341. package/src/sessions/__tests__/briefing.test.js.map +0 -1
  342. package/src/sessions/__tests__/handoff-integration.test.d.ts.map +0 -1
  343. package/src/sessions/__tests__/handoff-integration.test.js +0 -264
  344. package/src/sessions/__tests__/handoff-integration.test.js.map +0 -1
  345. package/src/sessions/__tests__/handoff.test.d.ts.map +0 -1
  346. package/src/sessions/__tests__/handoff.test.js +0 -435
  347. package/src/sessions/__tests__/handoff.test.js.map +0 -1
  348. package/src/sessions/__tests__/index.test.d.ts.map +0 -1
  349. package/src/sessions/__tests__/index.test.js +0 -82
  350. package/src/sessions/__tests__/index.test.js.map +0 -1
  351. package/src/sessions/__tests__/session-cleanup.test.d.ts.map +0 -1
  352. package/src/sessions/__tests__/session-cleanup.test.js +0 -201
  353. package/src/sessions/__tests__/session-cleanup.test.js.map +0 -1
  354. package/src/sessions/__tests__/session-edge-cases.test.d.ts.map +0 -1
  355. package/src/sessions/__tests__/session-edge-cases.test.js +0 -251
  356. package/src/sessions/__tests__/session-edge-cases.test.js.map +0 -1
  357. package/src/sessions/__tests__/session-find.test.d.ts.map +0 -1
  358. package/src/sessions/__tests__/session-find.test.js +0 -210
  359. package/src/sessions/__tests__/session-find.test.js.map +0 -1
  360. package/src/sessions/__tests__/session-grade.integration.test.d.ts.map +0 -1
  361. package/src/sessions/__tests__/session-grade.integration.test.js +0 -287
  362. package/src/sessions/__tests__/session-grade.integration.test.js.map +0 -1
  363. package/src/sessions/__tests__/session-grade.test.d.ts.map +0 -1
  364. package/src/sessions/__tests__/session-grade.test.js +0 -630
  365. package/src/sessions/__tests__/session-grade.test.js.map +0 -1
  366. package/src/sessions/__tests__/session-memory-bridge.test.d.ts.map +0 -1
  367. package/src/sessions/__tests__/session-memory-bridge.test.js +0 -52
  368. package/src/sessions/__tests__/session-memory-bridge.test.js.map +0 -1
  369. package/src/sessions/__tests__/sessions.test.d.ts.map +0 -1
  370. package/src/sessions/__tests__/sessions.test.js +0 -113
  371. package/src/sessions/__tests__/sessions.test.js.map +0 -1
  372. package/src/skills/__tests__/discovery.test.d.ts.map +0 -1
  373. package/src/skills/__tests__/discovery.test.js +0 -171
  374. package/src/skills/__tests__/discovery.test.js.map +0 -1
  375. package/src/skills/__tests__/dispatch.test.d.ts.map +0 -1
  376. package/src/skills/__tests__/dispatch.test.js +0 -99
  377. package/src/skills/__tests__/dispatch.test.js.map +0 -1
  378. package/src/skills/__tests__/dynamic-skill-generator.test.d.ts.map +0 -1
  379. package/src/skills/__tests__/dynamic-skill-generator.test.js +0 -77
  380. package/src/skills/__tests__/dynamic-skill-generator.test.js.map +0 -1
  381. package/src/skills/__tests__/manifests.test.d.ts.map +0 -1
  382. package/src/skills/__tests__/manifests.test.js +0 -121
  383. package/src/skills/__tests__/manifests.test.js.map +0 -1
  384. package/src/skills/__tests__/precedence.test.d.ts.map +0 -1
  385. package/src/skills/__tests__/precedence.test.js +0 -325
  386. package/src/skills/__tests__/precedence.test.js.map +0 -1
  387. package/src/skills/__tests__/routing-table.test.d.ts.map +0 -1
  388. package/src/skills/__tests__/routing-table.test.js +0 -91
  389. package/src/skills/__tests__/routing-table.test.js.map +0 -1
  390. package/src/skills/__tests__/skill-paths.test.d.ts.map +0 -1
  391. package/src/skills/__tests__/skill-paths.test.js +0 -71
  392. package/src/skills/__tests__/skill-paths.test.js.map +0 -1
  393. package/src/skills/__tests__/test-utility.test.d.ts.map +0 -1
  394. package/src/skills/__tests__/test-utility.test.js +0 -59
  395. package/src/skills/__tests__/test-utility.test.js.map +0 -1
  396. package/src/skills/__tests__/token.test.d.ts.map +0 -1
  397. package/src/skills/__tests__/token.test.js +0 -135
  398. package/src/skills/__tests__/token.test.js.map +0 -1
  399. package/src/skills/__tests__/validation.test.d.ts.map +0 -1
  400. package/src/skills/__tests__/validation.test.js +0 -108
  401. package/src/skills/__tests__/validation.test.js.map +0 -1
  402. package/src/skills/__tests__/version.test.d.ts.map +0 -1
  403. package/src/skills/__tests__/version.test.js +0 -71
  404. package/src/skills/__tests__/version.test.js.map +0 -1
  405. package/src/skills/injection/__tests__/subagent.test.d.ts.map +0 -1
  406. package/src/skills/injection/__tests__/subagent.test.js +0 -122
  407. package/src/skills/injection/__tests__/subagent.test.js.map +0 -1
  408. package/src/skills/orchestrator/__tests__/spawn-tier.test.d.ts.map +0 -1
  409. package/src/skills/orchestrator/__tests__/spawn-tier.test.js +0 -228
  410. package/src/skills/orchestrator/__tests__/spawn-tier.test.js.map +0 -1
  411. package/src/spawn/__tests__/adapter-registry.test.d.ts.map +0 -1
  412. package/src/spawn/__tests__/adapter-registry.test.js +0 -76
  413. package/src/spawn/__tests__/adapter-registry.test.js.map +0 -1
  414. package/src/stats/__tests__/stats.test.d.ts.map +0 -1
  415. package/src/stats/__tests__/stats.test.js +0 -374
  416. package/src/stats/__tests__/stats.test.js.map +0 -1
  417. package/src/sticky/__tests__/purge.test.d.ts.map +0 -1
  418. package/src/sticky/__tests__/purge.test.js +0 -64
  419. package/src/sticky/__tests__/purge.test.js.map +0 -1
  420. package/src/store/__tests__/atomic.test.d.ts.map +0 -1
  421. package/src/store/__tests__/atomic.test.js +0 -81
  422. package/src/store/__tests__/atomic.test.js.map +0 -1
  423. package/src/store/__tests__/backup.test.d.ts.map +0 -1
  424. package/src/store/__tests__/backup.test.js +0 -131
  425. package/src/store/__tests__/backup.test.js.map +0 -1
  426. package/src/store/__tests__/brain-accessor-pageindex.test.d.ts.map +0 -1
  427. package/src/store/__tests__/brain-accessor-pageindex.test.js +0 -179
  428. package/src/store/__tests__/brain-accessor-pageindex.test.js.map +0 -1
  429. package/src/store/__tests__/brain-accessor.test.d.ts.map +0 -1
  430. package/src/store/__tests__/brain-accessor.test.js +0 -398
  431. package/src/store/__tests__/brain-accessor.test.js.map +0 -1
  432. package/src/store/__tests__/brain-pageindex.test.d.ts.map +0 -1
  433. package/src/store/__tests__/brain-pageindex.test.js +0 -137
  434. package/src/store/__tests__/brain-pageindex.test.js.map +0 -1
  435. package/src/store/__tests__/brain-schema.test.d.ts.map +0 -1
  436. package/src/store/__tests__/brain-schema.test.js +0 -137
  437. package/src/store/__tests__/brain-schema.test.js.map +0 -1
  438. package/src/store/__tests__/brain-vec.test.d.ts.map +0 -1
  439. package/src/store/__tests__/brain-vec.test.js +0 -100
  440. package/src/store/__tests__/brain-vec.test.js.map +0 -1
  441. package/src/store/__tests__/collision-detection.test.d.ts.map +0 -1
  442. package/src/store/__tests__/collision-detection.test.js +0 -165
  443. package/src/store/__tests__/collision-detection.test.js.map +0 -1
  444. package/src/store/__tests__/data-safety-central.test.d.ts.map +0 -1
  445. package/src/store/__tests__/data-safety-central.test.js +0 -408
  446. package/src/store/__tests__/data-safety-central.test.js.map +0 -1
  447. package/src/store/__tests__/db-helpers.test.d.ts.map +0 -1
  448. package/src/store/__tests__/db-helpers.test.js +0 -101
  449. package/src/store/__tests__/db-helpers.test.js.map +0 -1
  450. package/src/store/__tests__/e2e-safety-integration.test.d.ts.map +0 -1
  451. package/src/store/__tests__/e2e-safety-integration.test.js +0 -402
  452. package/src/store/__tests__/e2e-safety-integration.test.js.map +0 -1
  453. package/src/store/__tests__/git-checkpoint.test.d.ts.map +0 -1
  454. package/src/store/__tests__/git-checkpoint.test.js +0 -133
  455. package/src/store/__tests__/git-checkpoint.test.js.map +0 -1
  456. package/src/store/__tests__/idempotent-migration.test.d.ts.map +0 -1
  457. package/src/store/__tests__/idempotent-migration.test.js +0 -172
  458. package/src/store/__tests__/idempotent-migration.test.js.map +0 -1
  459. package/src/store/__tests__/import-logging.test.d.ts.map +0 -1
  460. package/src/store/__tests__/import-logging.test.js +0 -92
  461. package/src/store/__tests__/import-logging.test.js.map +0 -1
  462. package/src/store/__tests__/import-sort.test.d.ts.map +0 -1
  463. package/src/store/__tests__/import-sort.test.js +0 -109
  464. package/src/store/__tests__/import-sort.test.js.map +0 -1
  465. package/src/store/__tests__/json.test.d.ts.map +0 -1
  466. package/src/store/__tests__/json.test.js +0 -98
  467. package/src/store/__tests__/json.test.js.map +0 -1
  468. package/src/store/__tests__/lifecycle-schema-parity.test.d.ts.map +0 -1
  469. package/src/store/__tests__/lifecycle-schema-parity.test.js +0 -90
  470. package/src/store/__tests__/lifecycle-schema-parity.test.js.map +0 -1
  471. package/src/store/__tests__/migration-integration.test.d.ts.map +0 -1
  472. package/src/store/__tests__/migration-integration.test.js +0 -238
  473. package/src/store/__tests__/migration-integration.test.js.map +0 -1
  474. package/src/store/__tests__/migration-retry.test.d.ts.map +0 -1
  475. package/src/store/__tests__/migration-retry.test.js +0 -178
  476. package/src/store/__tests__/migration-retry.test.js.map +0 -1
  477. package/src/store/__tests__/migration-safety.test.d.ts.map +0 -1
  478. package/src/store/__tests__/migration-safety.test.js +0 -756
  479. package/src/store/__tests__/migration-safety.test.js.map +0 -1
  480. package/src/store/__tests__/migration-sqlite.test.d.ts.map +0 -1
  481. package/src/store/__tests__/migration-sqlite.test.js +0 -544
  482. package/src/store/__tests__/migration-sqlite.test.js.map +0 -1
  483. package/src/store/__tests__/performance-safety.test.d.ts.map +0 -1
  484. package/src/store/__tests__/performance-safety.test.js +0 -157
  485. package/src/store/__tests__/performance-safety.test.js.map +0 -1
  486. package/src/store/__tests__/project-detect.test.d.ts.map +0 -1
  487. package/src/store/__tests__/project-detect.test.js +0 -609
  488. package/src/store/__tests__/project-detect.test.js.map +0 -1
  489. package/src/store/__tests__/project-registry.test.d.ts.map +0 -1
  490. package/src/store/__tests__/project-registry.test.js +0 -28
  491. package/src/store/__tests__/project-registry.test.js.map +0 -1
  492. package/src/store/__tests__/provider.test.d.ts.map +0 -1
  493. package/src/store/__tests__/provider.test.js +0 -15
  494. package/src/store/__tests__/provider.test.js.map +0 -1
  495. package/src/store/__tests__/relations.test.d.ts.map +0 -1
  496. package/src/store/__tests__/relations.test.js +0 -318
  497. package/src/store/__tests__/relations.test.js.map +0 -1
  498. package/src/store/__tests__/safety-accessor.test.d.ts.map +0 -1
  499. package/src/store/__tests__/safety-accessor.test.js +0 -219
  500. package/src/store/__tests__/safety-accessor.test.js.map +0 -1
  501. package/src/store/__tests__/sequence-validation.test.d.ts.map +0 -1
  502. package/src/store/__tests__/sequence-validation.test.js +0 -94
  503. package/src/store/__tests__/sequence-validation.test.js.map +0 -1
  504. package/src/store/__tests__/session-store.test.d.ts.map +0 -1
  505. package/src/store/__tests__/session-store.test.js +0 -463
  506. package/src/store/__tests__/session-store.test.js.map +0 -1
  507. package/src/store/__tests__/sqlite-backup.test.d.ts.map +0 -1
  508. package/src/store/__tests__/sqlite-backup.test.js +0 -72
  509. package/src/store/__tests__/sqlite-backup.test.js.map +0 -1
  510. package/src/store/__tests__/sqlite.test.d.ts.map +0 -1
  511. package/src/store/__tests__/sqlite.test.js +0 -256
  512. package/src/store/__tests__/sqlite.test.js.map +0 -1
  513. package/src/store/__tests__/task-store.test.d.ts.map +0 -1
  514. package/src/store/__tests__/task-store.test.js +0 -514
  515. package/src/store/__tests__/task-store.test.js.map +0 -1
  516. package/src/store/__tests__/test-db-helper.d.ts.map +0 -1
  517. package/src/store/__tests__/test-db-helper.js +0 -110
  518. package/src/store/__tests__/test-db-helper.js.map +0 -1
  519. package/src/store/__tests__/write-verification.test.d.ts.map +0 -1
  520. package/src/store/__tests__/write-verification.test.js +0 -185
  521. package/src/store/__tests__/write-verification.test.js.map +0 -1
  522. package/src/system/__tests__/cleanup.test.d.ts.map +0 -1
  523. package/src/system/__tests__/cleanup.test.js +0 -87
  524. package/src/system/__tests__/cleanup.test.js.map +0 -1
  525. package/src/system/__tests__/health.test.d.ts.map +0 -1
  526. package/src/system/__tests__/health.test.js +0 -55
  527. package/src/system/__tests__/health.test.js.map +0 -1
  528. package/src/task-work/__tests__/start-deps.test.d.ts.map +0 -1
  529. package/src/task-work/__tests__/start-deps.test.js +0 -152
  530. package/src/task-work/__tests__/start-deps.test.js.map +0 -1
  531. package/src/tasks/__tests__/add.test.d.ts.map +0 -1
  532. package/src/tasks/__tests__/add.test.js +0 -226
  533. package/src/tasks/__tests__/add.test.js.map +0 -1
  534. package/src/tasks/__tests__/archive.test.d.ts.map +0 -1
  535. package/src/tasks/__tests__/archive.test.js +0 -196
  536. package/src/tasks/__tests__/archive.test.js.map +0 -1
  537. package/src/tasks/__tests__/assignee.test.d.ts.map +0 -1
  538. package/src/tasks/__tests__/assignee.test.js +0 -125
  539. package/src/tasks/__tests__/assignee.test.js.map +0 -1
  540. package/src/tasks/__tests__/atomicity.test.d.ts.map +0 -1
  541. package/src/tasks/__tests__/atomicity.test.js +0 -192
  542. package/src/tasks/__tests__/atomicity.test.js.map +0 -1
  543. package/src/tasks/__tests__/cancel-ops.test.d.ts.map +0 -1
  544. package/src/tasks/__tests__/cancel-ops.test.js +0 -115
  545. package/src/tasks/__tests__/cancel-ops.test.js.map +0 -1
  546. package/src/tasks/__tests__/complete-unblocks.test.d.ts.map +0 -1
  547. package/src/tasks/__tests__/complete-unblocks.test.js +0 -151
  548. package/src/tasks/__tests__/complete-unblocks.test.js.map +0 -1
  549. package/src/tasks/__tests__/complete.test.d.ts.map +0 -1
  550. package/src/tasks/__tests__/complete.test.js +0 -230
  551. package/src/tasks/__tests__/complete.test.js.map +0 -1
  552. package/src/tasks/__tests__/delete.test.d.ts.map +0 -1
  553. package/src/tasks/__tests__/delete.test.js +0 -183
  554. package/src/tasks/__tests__/delete.test.js.map +0 -1
  555. package/src/tasks/__tests__/dependency-check.test.d.ts.map +0 -1
  556. package/src/tasks/__tests__/dependency-check.test.js +0 -293
  557. package/src/tasks/__tests__/dependency-check.test.js.map +0 -1
  558. package/src/tasks/__tests__/deps-ready.test.d.ts.map +0 -1
  559. package/src/tasks/__tests__/deps-ready.test.js +0 -68
  560. package/src/tasks/__tests__/deps-ready.test.js.map +0 -1
  561. package/src/tasks/__tests__/epic-enforcement.test.d.ts.map +0 -1
  562. package/src/tasks/__tests__/epic-enforcement.test.js +0 -669
  563. package/src/tasks/__tests__/epic-enforcement.test.js.map +0 -1
  564. package/src/tasks/__tests__/find.test.d.ts.map +0 -1
  565. package/src/tasks/__tests__/find.test.js +0 -163
  566. package/src/tasks/__tests__/find.test.js.map +0 -1
  567. package/src/tasks/__tests__/graph-ops.test.d.ts.map +0 -1
  568. package/src/tasks/__tests__/graph-ops.test.js +0 -174
  569. package/src/tasks/__tests__/graph-ops.test.js.map +0 -1
  570. package/src/tasks/__tests__/hierarchy-policy.test.d.ts.map +0 -1
  571. package/src/tasks/__tests__/hierarchy-policy.test.js +0 -399
  572. package/src/tasks/__tests__/hierarchy-policy.test.js.map +0 -1
  573. package/src/tasks/__tests__/hierarchy.test.d.ts.map +0 -1
  574. package/src/tasks/__tests__/hierarchy.test.js +0 -302
  575. package/src/tasks/__tests__/hierarchy.test.js.map +0 -1
  576. package/src/tasks/__tests__/id-generator.test.d.ts.map +0 -1
  577. package/src/tasks/__tests__/id-generator.test.js +0 -59
  578. package/src/tasks/__tests__/id-generator.test.js.map +0 -1
  579. package/src/tasks/__tests__/labels.test.d.ts.map +0 -1
  580. package/src/tasks/__tests__/labels.test.js +0 -173
  581. package/src/tasks/__tests__/labels.test.js.map +0 -1
  582. package/src/tasks/__tests__/list.test.d.ts.map +0 -1
  583. package/src/tasks/__tests__/list.test.js +0 -272
  584. package/src/tasks/__tests__/list.test.js.map +0 -1
  585. package/src/tasks/__tests__/minimal-test.test.d.ts.map +0 -1
  586. package/src/tasks/__tests__/minimal-test.test.js +0 -25
  587. package/src/tasks/__tests__/minimal-test.test.js.map +0 -1
  588. package/src/tasks/__tests__/phase-tracking.test.d.ts.map +0 -1
  589. package/src/tasks/__tests__/phase-tracking.test.js +0 -209
  590. package/src/tasks/__tests__/phase-tracking.test.js.map +0 -1
  591. package/src/tasks/__tests__/pipeline-stage.test.d.ts.map +0 -1
  592. package/src/tasks/__tests__/pipeline-stage.test.js +0 -277
  593. package/src/tasks/__tests__/pipeline-stage.test.js.map +0 -1
  594. package/src/tasks/__tests__/plan-priority.test.d.ts.map +0 -1
  595. package/src/tasks/__tests__/plan-priority.test.js +0 -133
  596. package/src/tasks/__tests__/plan-priority.test.js.map +0 -1
  597. package/src/tasks/__tests__/priority-normalization.test.d.ts.map +0 -1
  598. package/src/tasks/__tests__/priority-normalization.test.js +0 -117
  599. package/src/tasks/__tests__/priority-normalization.test.js.map +0 -1
  600. package/src/tasks/__tests__/relates.test.d.ts.map +0 -1
  601. package/src/tasks/__tests__/relates.test.js +0 -84
  602. package/src/tasks/__tests__/relates.test.js.map +0 -1
  603. package/src/tasks/__tests__/show-deps.test.d.ts.map +0 -1
  604. package/src/tasks/__tests__/show-deps.test.js +0 -182
  605. package/src/tasks/__tests__/show-deps.test.js.map +0 -1
  606. package/src/tasks/__tests__/show.test.d.ts.map +0 -1
  607. package/src/tasks/__tests__/show.test.js +0 -126
  608. package/src/tasks/__tests__/show.test.js.map +0 -1
  609. package/src/tasks/__tests__/staleness.test.d.ts.map +0 -1
  610. package/src/tasks/__tests__/staleness.test.js +0 -154
  611. package/src/tasks/__tests__/staleness.test.js.map +0 -1
  612. package/src/tasks/__tests__/task-ops-depends.test.d.ts.map +0 -1
  613. package/src/tasks/__tests__/task-ops-depends.test.js +0 -118
  614. package/src/tasks/__tests__/task-ops-depends.test.js.map +0 -1
  615. package/src/tasks/__tests__/update.test.d.ts.map +0 -1
  616. package/src/tasks/__tests__/update.test.js +0 -320
  617. package/src/tasks/__tests__/update.test.js.map +0 -1
  618. package/src/validation/__tests__/chain-validation.test.d.ts.map +0 -1
  619. package/src/validation/__tests__/chain-validation.test.js +0 -204
  620. package/src/validation/__tests__/chain-validation.test.js.map +0 -1
  621. package/src/validation/__tests__/compliance.test.d.ts.map +0 -1
  622. package/src/validation/__tests__/compliance.test.js +0 -83
  623. package/src/validation/__tests__/compliance.test.js.map +0 -1
  624. package/src/validation/__tests__/docs-sync.test.d.ts.map +0 -1
  625. package/src/validation/__tests__/docs-sync.test.js +0 -243
  626. package/src/validation/__tests__/docs-sync.test.js.map +0 -1
  627. package/src/validation/__tests__/doctor-gitignore.test.d.ts.map +0 -1
  628. package/src/validation/__tests__/doctor-gitignore.test.js +0 -154
  629. package/src/validation/__tests__/doctor-gitignore.test.js.map +0 -1
  630. package/src/validation/__tests__/doctor-injection.test.d.ts.map +0 -1
  631. package/src/validation/__tests__/doctor-injection.test.js +0 -230
  632. package/src/validation/__tests__/doctor-injection.test.js.map +0 -1
  633. package/src/validation/__tests__/doctor.test.d.ts.map +0 -1
  634. package/src/validation/__tests__/doctor.test.js +0 -202
  635. package/src/validation/__tests__/doctor.test.js.map +0 -1
  636. package/src/validation/__tests__/engine.test.d.ts.map +0 -1
  637. package/src/validation/__tests__/engine.test.js +0 -346
  638. package/src/validation/__tests__/engine.test.js.map +0 -1
  639. package/src/validation/__tests__/manifest.test.d.ts.map +0 -1
  640. package/src/validation/__tests__/manifest.test.js +0 -244
  641. package/src/validation/__tests__/manifest.test.js.map +0 -1
  642. package/src/validation/__tests__/protocol-common.test.d.ts.map +0 -1
  643. package/src/validation/__tests__/protocol-common.test.js +0 -112
  644. package/src/validation/__tests__/protocol-common.test.js.map +0 -1
  645. package/src/validation/__tests__/verification.test.d.ts.map +0 -1
  646. package/src/validation/__tests__/verification.test.js +0 -277
  647. package/src/validation/__tests__/verification.test.js.map +0 -1
@@ -1,669 +0,0 @@
1
- /**
2
- * Tests for epic lifecycle pipeline enforcement (T062).
3
- *
4
- * Covers:
5
- * - validateEpicCreation: min-5 AC, description required, mode gating
6
- * - validateChildStageCeiling: child stage must not exceed epic's stage
7
- * - validateEpicStageAdvancement: epic blocked by in-flight children
8
- * - findEpicAncestor: correct ancestor traversal
9
- * - Integration via addTask / updateTask
10
- *
11
- * @task T062
12
- * @epic T056
13
- */
14
- import { unlink, writeFile } from 'node:fs/promises';
15
- import { join } from 'node:path';
16
- import { afterAll, afterEach, beforeAll, beforeEach, describe, expect, it } from 'vitest';
17
- import { createTestDb } from '../../store/__tests__/test-db-helper.js';
18
- // Epic enforcement tests NEED enforcement active — temporarily clear VITEST
19
- const savedVitest = process.env.VITEST;
20
- beforeAll(() => {
21
- delete process.env.VITEST;
22
- });
23
- afterAll(() => {
24
- if (savedVitest)
25
- process.env.VITEST = savedVitest;
26
- });
27
- import { addTask } from '../add.js';
28
- import { EPIC_MIN_AC, findEpicAncestor, getLifecycleMode, validateChildStageCeiling, validateEpicCreation, validateEpicStageAdvancement, } from '../epic-enforcement.js';
29
- import { updateTask } from '../update.js';
30
- // ---------------------------------------------------------------------------
31
- // Config helpers
32
- // ---------------------------------------------------------------------------
33
- /** Config that disables session and acceptance enforcement for test isolation. */
34
- function makeConfig(lifecycleMode = 'strict') {
35
- return JSON.stringify({
36
- lifecycle: { mode: lifecycleMode },
37
- enforcement: {
38
- session: { requiredForMutate: false },
39
- acceptance: { mode: 'off' },
40
- },
41
- verification: { enabled: false },
42
- });
43
- }
44
- // ---------------------------------------------------------------------------
45
- // Unit: EPIC_MIN_AC
46
- // ---------------------------------------------------------------------------
47
- describe('EPIC_MIN_AC constant', () => {
48
- it('is 5', () => {
49
- expect(EPIC_MIN_AC).toBe(5);
50
- });
51
- });
52
- // ---------------------------------------------------------------------------
53
- // Unit: getLifecycleMode
54
- // ---------------------------------------------------------------------------
55
- describe('getLifecycleMode', () => {
56
- let env;
57
- beforeEach(async () => {
58
- env = await createTestDb();
59
- });
60
- afterEach(async () => {
61
- await env.cleanup();
62
- });
63
- it('returns strict by default when no config', async () => {
64
- // Remove the config.json written by createTestDb() so getLifecycleMode
65
- // sees no project config and falls back to the 'strict' default.
66
- await unlink(join(env.cleoDir, 'config.json'));
67
- const mode = await getLifecycleMode(env.tempDir);
68
- expect(mode).toBe('strict');
69
- });
70
- it('returns advisory from config', async () => {
71
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('advisory'));
72
- const mode = await getLifecycleMode(env.tempDir);
73
- expect(mode).toBe('advisory');
74
- });
75
- it('returns off from config', async () => {
76
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('off'));
77
- const mode = await getLifecycleMode(env.tempDir);
78
- expect(mode).toBe('off');
79
- });
80
- });
81
- // ---------------------------------------------------------------------------
82
- // Unit: validateEpicCreation
83
- // ---------------------------------------------------------------------------
84
- describe('validateEpicCreation (strict mode)', () => {
85
- let env;
86
- beforeEach(async () => {
87
- env = await createTestDb();
88
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('strict'));
89
- });
90
- afterEach(async () => {
91
- await env.cleanup();
92
- });
93
- it('accepts when 5 AC items and description are present', async () => {
94
- const result = await validateEpicCreation({
95
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4', 'ac5'],
96
- description: 'Some completion criteria',
97
- }, env.tempDir);
98
- expect(result.valid).toBe(true);
99
- expect(result.warning).toBeUndefined();
100
- });
101
- it('throws when fewer than 5 AC items', async () => {
102
- await expect(validateEpicCreation({
103
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4'],
104
- description: 'Some completion criteria',
105
- }, env.tempDir)).rejects.toThrow(/5 acceptance criteria/);
106
- });
107
- it('throws when description is empty', async () => {
108
- await expect(validateEpicCreation({
109
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4', 'ac5'],
110
- description: '',
111
- }, env.tempDir)).rejects.toThrow(/non-empty description/);
112
- });
113
- it('throws when both AC count and description are insufficient', async () => {
114
- await expect(validateEpicCreation({ acceptance: [], description: ' ' }, env.tempDir)).rejects.toThrow();
115
- });
116
- });
117
- describe('validateEpicCreation (advisory mode)', () => {
118
- let env;
119
- beforeEach(async () => {
120
- env = await createTestDb();
121
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('advisory'));
122
- });
123
- afterEach(async () => {
124
- await env.cleanup();
125
- });
126
- it('does not throw on violation, returns warning', async () => {
127
- const result = await validateEpicCreation({ acceptance: ['ac1'], description: 'OK' }, env.tempDir);
128
- expect(result.valid).toBe(true);
129
- expect(result.warning).toMatch(/5 acceptance criteria/);
130
- });
131
- });
132
- describe('validateEpicCreation (off mode)', () => {
133
- let env;
134
- beforeEach(async () => {
135
- env = await createTestDb();
136
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('off'));
137
- });
138
- afterEach(async () => {
139
- await env.cleanup();
140
- });
141
- it('skips all checks and returns valid', async () => {
142
- const result = await validateEpicCreation({ acceptance: [], description: '' }, env.tempDir);
143
- expect(result.valid).toBe(true);
144
- expect(result.warning).toBeUndefined();
145
- });
146
- });
147
- // ---------------------------------------------------------------------------
148
- // Unit: validateChildStageCeiling
149
- // ---------------------------------------------------------------------------
150
- describe('validateChildStageCeiling (strict)', () => {
151
- let env;
152
- let accessor;
153
- beforeEach(async () => {
154
- env = await createTestDb();
155
- accessor = env.accessor;
156
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('strict'));
157
- });
158
- afterEach(async () => {
159
- await env.cleanup();
160
- });
161
- async function seedEpicAtStage(stage) {
162
- const now = new Date().toISOString();
163
- await accessor.upsertSingleTask({
164
- id: 'T001',
165
- title: 'Epic',
166
- description: 'Epic description',
167
- status: 'pending',
168
- priority: 'medium',
169
- type: 'epic',
170
- pipelineStage: stage,
171
- createdAt: now,
172
- updatedAt: now,
173
- });
174
- return 'T001';
175
- }
176
- it('allows child stage equal to epic stage', async () => {
177
- const epicId = await seedEpicAtStage('specification');
178
- const result = await validateChildStageCeiling({ childStage: 'specification', epicId }, accessor, env.tempDir);
179
- expect(result.valid).toBe(true);
180
- });
181
- it('allows child stage below epic stage', async () => {
182
- const epicId = await seedEpicAtStage('implementation');
183
- const result = await validateChildStageCeiling({ childStage: 'research', epicId }, accessor, env.tempDir);
184
- expect(result.valid).toBe(true);
185
- });
186
- it('throws when child stage exceeds epic stage', async () => {
187
- const epicId = await seedEpicAtStage('research');
188
- await expect(validateChildStageCeiling({ childStage: 'implementation', epicId }, accessor, env.tempDir)).rejects.toThrow(/cannot be at pipeline stage/);
189
- });
190
- it('skips check when epic ID does not exist', async () => {
191
- const result = await validateChildStageCeiling({ childStage: 'testing', epicId: 'T999' }, accessor, env.tempDir);
192
- expect(result.valid).toBe(true);
193
- });
194
- });
195
- describe('validateChildStageCeiling (advisory)', () => {
196
- let env;
197
- let accessor;
198
- beforeEach(async () => {
199
- env = await createTestDb();
200
- accessor = env.accessor;
201
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('advisory'));
202
- });
203
- afterEach(async () => {
204
- await env.cleanup();
205
- });
206
- it('returns warning instead of throwing', async () => {
207
- const now = new Date().toISOString();
208
- await accessor.upsertSingleTask({
209
- id: 'T001',
210
- title: 'Epic',
211
- description: 'desc',
212
- status: 'pending',
213
- priority: 'medium',
214
- type: 'epic',
215
- pipelineStage: 'research',
216
- createdAt: now,
217
- updatedAt: now,
218
- });
219
- const result = await validateChildStageCeiling({ childStage: 'testing', epicId: 'T001' }, accessor, env.tempDir);
220
- expect(result.valid).toBe(true);
221
- expect(result.warning).toMatch(/cannot be at pipeline stage/);
222
- });
223
- });
224
- // ---------------------------------------------------------------------------
225
- // Unit: validateEpicStageAdvancement
226
- // ---------------------------------------------------------------------------
227
- describe('validateEpicStageAdvancement (strict)', () => {
228
- let env;
229
- let accessor;
230
- beforeEach(async () => {
231
- env = await createTestDb();
232
- accessor = env.accessor;
233
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('strict'));
234
- });
235
- afterEach(async () => {
236
- await env.cleanup();
237
- });
238
- it('allows advancement when no children exist', async () => {
239
- const result = await validateEpicStageAdvancement({ epicId: 'T001', currentStage: 'research', newStage: 'implementation' }, accessor, env.tempDir);
240
- expect(result.valid).toBe(true);
241
- });
242
- it('allows advancement when all children are done', async () => {
243
- const now = new Date().toISOString();
244
- // Seed epic
245
- await accessor.upsertSingleTask({
246
- id: 'T001',
247
- title: 'Epic',
248
- description: 'Epic',
249
- status: 'pending',
250
- priority: 'medium',
251
- type: 'epic',
252
- pipelineStage: 'research',
253
- createdAt: now,
254
- updatedAt: now,
255
- });
256
- // Seed done child at research
257
- await accessor.upsertSingleTask({
258
- id: 'T002',
259
- title: 'Child',
260
- description: 'Child',
261
- status: 'done',
262
- priority: 'medium',
263
- type: 'task',
264
- parentId: 'T001',
265
- pipelineStage: 'research',
266
- createdAt: now,
267
- updatedAt: now,
268
- });
269
- const result = await validateEpicStageAdvancement({ epicId: 'T001', currentStage: 'research', newStage: 'implementation' }, accessor, env.tempDir);
270
- expect(result.valid).toBe(true);
271
- });
272
- it('throws when child is in-flight at current stage', async () => {
273
- const now = new Date().toISOString();
274
- await accessor.upsertSingleTask({
275
- id: 'T001',
276
- title: 'Epic',
277
- description: 'Epic',
278
- status: 'pending',
279
- priority: 'medium',
280
- type: 'epic',
281
- pipelineStage: 'research',
282
- createdAt: now,
283
- updatedAt: now,
284
- });
285
- await accessor.upsertSingleTask({
286
- id: 'T002',
287
- title: 'Child',
288
- description: 'Child',
289
- status: 'active',
290
- priority: 'medium',
291
- type: 'task',
292
- parentId: 'T001',
293
- pipelineStage: 'research',
294
- createdAt: now,
295
- updatedAt: now,
296
- });
297
- await expect(validateEpicStageAdvancement({ epicId: 'T001', currentStage: 'research', newStage: 'implementation' }, accessor, env.tempDir)).rejects.toThrow(/cannot advance/);
298
- });
299
- it('ignores children at a different (later) stage', async () => {
300
- const now = new Date().toISOString();
301
- await accessor.upsertSingleTask({
302
- id: 'T001',
303
- title: 'Epic',
304
- description: 'Epic',
305
- status: 'pending',
306
- priority: 'medium',
307
- type: 'epic',
308
- pipelineStage: 'research',
309
- createdAt: now,
310
- updatedAt: now,
311
- });
312
- // Child is at implementation (not at current stage 'research')
313
- await accessor.upsertSingleTask({
314
- id: 'T002',
315
- title: 'Child',
316
- description: 'Child',
317
- status: 'active',
318
- priority: 'medium',
319
- type: 'task',
320
- parentId: 'T001',
321
- pipelineStage: 'implementation',
322
- createdAt: now,
323
- updatedAt: now,
324
- });
325
- const result = await validateEpicStageAdvancement({ epicId: 'T001', currentStage: 'research', newStage: 'implementation' }, accessor, env.tempDir);
326
- expect(result.valid).toBe(true);
327
- });
328
- it('ignores cancelled children at current stage', async () => {
329
- const now = new Date().toISOString();
330
- await accessor.upsertSingleTask({
331
- id: 'T001',
332
- title: 'Epic',
333
- description: 'Epic',
334
- status: 'pending',
335
- priority: 'medium',
336
- type: 'epic',
337
- pipelineStage: 'research',
338
- createdAt: now,
339
- updatedAt: now,
340
- });
341
- await accessor.upsertSingleTask({
342
- id: 'T002',
343
- title: 'Child',
344
- description: 'Child',
345
- status: 'cancelled',
346
- priority: 'medium',
347
- type: 'task',
348
- parentId: 'T001',
349
- pipelineStage: 'research',
350
- createdAt: now,
351
- updatedAt: now,
352
- });
353
- const result = await validateEpicStageAdvancement({ epicId: 'T001', currentStage: 'research', newStage: 'implementation' }, accessor, env.tempDir);
354
- expect(result.valid).toBe(true);
355
- });
356
- it('is no-op for same-stage (no advancement)', async () => {
357
- const result = await validateEpicStageAdvancement({ epicId: 'T001', currentStage: 'research', newStage: 'research' }, accessor, env.tempDir);
358
- expect(result.valid).toBe(true);
359
- });
360
- });
361
- describe('validateEpicStageAdvancement (advisory)', () => {
362
- let env;
363
- let accessor;
364
- beforeEach(async () => {
365
- env = await createTestDb();
366
- accessor = env.accessor;
367
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('advisory'));
368
- });
369
- afterEach(async () => {
370
- await env.cleanup();
371
- });
372
- it('returns warning instead of throwing when blocked', async () => {
373
- const now = new Date().toISOString();
374
- await accessor.upsertSingleTask({
375
- id: 'T001',
376
- title: 'Epic',
377
- description: 'Epic',
378
- status: 'pending',
379
- priority: 'medium',
380
- type: 'epic',
381
- pipelineStage: 'research',
382
- createdAt: now,
383
- updatedAt: now,
384
- });
385
- await accessor.upsertSingleTask({
386
- id: 'T002',
387
- title: 'Child',
388
- description: 'Child',
389
- status: 'pending',
390
- priority: 'medium',
391
- type: 'task',
392
- parentId: 'T001',
393
- pipelineStage: 'research',
394
- createdAt: now,
395
- updatedAt: now,
396
- });
397
- const result = await validateEpicStageAdvancement({ epicId: 'T001', currentStage: 'research', newStage: 'implementation' }, accessor, env.tempDir);
398
- expect(result.valid).toBe(true);
399
- expect(result.warning).toMatch(/cannot advance/);
400
- });
401
- });
402
- // ---------------------------------------------------------------------------
403
- // Unit: findEpicAncestor
404
- // ---------------------------------------------------------------------------
405
- describe('findEpicAncestor', () => {
406
- let env;
407
- let accessor;
408
- beforeEach(async () => {
409
- env = await createTestDb();
410
- accessor = env.accessor;
411
- });
412
- afterEach(async () => {
413
- await env.cleanup();
414
- });
415
- it('returns null when task has no ancestors', async () => {
416
- const result = await findEpicAncestor('T999', accessor);
417
- expect(result).toBeNull();
418
- });
419
- it('finds a direct epic parent', async () => {
420
- const now = new Date().toISOString();
421
- await accessor.upsertSingleTask({
422
- id: 'T001',
423
- title: 'Epic',
424
- description: 'Epic',
425
- status: 'pending',
426
- priority: 'medium',
427
- type: 'epic',
428
- pipelineStage: 'research',
429
- createdAt: now,
430
- updatedAt: now,
431
- });
432
- await accessor.upsertSingleTask({
433
- id: 'T002',
434
- title: 'Child',
435
- description: 'Child',
436
- status: 'pending',
437
- priority: 'medium',
438
- type: 'task',
439
- parentId: 'T001',
440
- pipelineStage: 'research',
441
- createdAt: now,
442
- updatedAt: now,
443
- });
444
- // findEpicAncestor takes the task whose ancestors to walk.
445
- // For T002's parent T001, we pass T001 to check its ancestors, OR
446
- // we pass T002 to check ancestors of T002 (which includes T001).
447
- const epic = await findEpicAncestor('T001', accessor);
448
- // T001 has no ancestors (root level), so no epic ancestor
449
- expect(epic).toBeNull();
450
- // For T002's parent: we already know T001 is the epic, so we pass parentId=T001
451
- // and check if T001 itself is an epic — that's handled in add.ts separately.
452
- // findEpicAncestor walks ancestors of the supplied ID.
453
- const fromChild = await findEpicAncestor('T002', accessor);
454
- // T002's ancestor is T001 (epic) — should be found
455
- expect(fromChild?.id).toBe('T001');
456
- });
457
- it('returns null when no epic in ancestor chain', async () => {
458
- const now = new Date().toISOString();
459
- await accessor.upsertSingleTask({
460
- id: 'T001',
461
- title: 'Parent task',
462
- description: 'desc',
463
- status: 'pending',
464
- priority: 'medium',
465
- type: 'task',
466
- pipelineStage: 'research',
467
- createdAt: now,
468
- updatedAt: now,
469
- });
470
- await accessor.upsertSingleTask({
471
- id: 'T002',
472
- title: 'Child subtask',
473
- description: 'desc',
474
- status: 'pending',
475
- priority: 'medium',
476
- type: 'subtask',
477
- parentId: 'T001',
478
- pipelineStage: 'research',
479
- createdAt: now,
480
- updatedAt: now,
481
- });
482
- const epic = await findEpicAncestor('T002', accessor);
483
- expect(epic).toBeNull();
484
- });
485
- });
486
- // ---------------------------------------------------------------------------
487
- // Integration: addTask epic creation enforcement
488
- // ---------------------------------------------------------------------------
489
- describe('addTask epic creation enforcement (strict)', () => {
490
- let env;
491
- let accessor;
492
- beforeEach(async () => {
493
- env = await createTestDb();
494
- accessor = env.accessor;
495
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('strict'));
496
- });
497
- afterEach(async () => {
498
- await env.cleanup();
499
- });
500
- it('creates an epic when 5 AC and description are provided', async () => {
501
- const result = await addTask({
502
- title: 'My epic',
503
- description: 'Completion criteria: all features shipped',
504
- type: 'epic',
505
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4', 'ac5'],
506
- }, env.tempDir, accessor);
507
- expect(result.task.type).toBe('epic');
508
- expect(result.task.acceptance?.length).toBe(5);
509
- });
510
- it('blocks epic creation with fewer than 5 AC', async () => {
511
- await expect(addTask({
512
- title: 'Bad epic',
513
- description: 'Completion criteria here',
514
- type: 'epic',
515
- acceptance: ['ac1', 'ac2', 'ac3'],
516
- }, env.tempDir, accessor)).rejects.toThrow(/5 acceptance criteria/);
517
- });
518
- });
519
- describe('addTask child stage ceiling (strict)', () => {
520
- let env;
521
- let accessor;
522
- beforeEach(async () => {
523
- env = await createTestDb();
524
- accessor = env.accessor;
525
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('strict'));
526
- });
527
- afterEach(async () => {
528
- await env.cleanup();
529
- });
530
- it('allows child at same stage as epic', async () => {
531
- // Create epic at research
532
- const epicResult = await addTask({
533
- title: 'Epic',
534
- description: 'Epic desc',
535
- type: 'epic',
536
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4', 'ac5'],
537
- pipelineStage: 'research',
538
- }, env.tempDir, accessor);
539
- const epicId = epicResult.task.id;
540
- const childResult = await addTask({
541
- title: 'Child',
542
- description: 'Child task',
543
- parentId: epicId,
544
- pipelineStage: 'research',
545
- }, env.tempDir, accessor);
546
- expect(childResult.task.pipelineStage).toBe('research');
547
- });
548
- it('blocks child at stage beyond epic stage', async () => {
549
- const epicResult = await addTask({
550
- title: 'Epic',
551
- description: 'Epic desc',
552
- type: 'epic',
553
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4', 'ac5'],
554
- pipelineStage: 'research',
555
- }, env.tempDir, accessor);
556
- const epicId = epicResult.task.id;
557
- await expect(addTask({
558
- title: 'Child',
559
- description: 'Child task',
560
- parentId: epicId,
561
- pipelineStage: 'implementation',
562
- }, env.tempDir, accessor)).rejects.toThrow(/cannot be at pipeline stage/);
563
- });
564
- });
565
- // ---------------------------------------------------------------------------
566
- // Integration: updateTask epic stage advancement gate
567
- // ---------------------------------------------------------------------------
568
- describe('updateTask epic stage advancement gate (strict)', () => {
569
- let env;
570
- let accessor;
571
- beforeEach(async () => {
572
- env = await createTestDb();
573
- accessor = env.accessor;
574
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('strict'));
575
- });
576
- afterEach(async () => {
577
- await env.cleanup();
578
- });
579
- it('allows advancing epic stage when no in-flight children at current stage', async () => {
580
- // Create epic at research with 5 AC
581
- const epicResult = await addTask({
582
- title: 'Epic',
583
- description: 'Epic desc',
584
- type: 'epic',
585
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4', 'ac5'],
586
- pipelineStage: 'research',
587
- }, env.tempDir, accessor);
588
- const epicId = epicResult.task.id;
589
- // Advance epic to implementation — no children
590
- const updateResult = await updateTask({ taskId: epicId, pipelineStage: 'implementation' }, env.tempDir, accessor);
591
- expect(updateResult.task.pipelineStage).toBe('implementation');
592
- });
593
- it('blocks advancing epic when child is in-flight at current stage', async () => {
594
- // Create epic at research
595
- const epicResult = await addTask({
596
- title: 'Epic',
597
- description: 'Epic desc',
598
- type: 'epic',
599
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4', 'ac5'],
600
- pipelineStage: 'research',
601
- }, env.tempDir, accessor);
602
- const epicId = epicResult.task.id;
603
- // Create in-flight child at research stage
604
- await addTask({
605
- title: 'Child',
606
- description: 'Child task',
607
- parentId: epicId,
608
- pipelineStage: 'research',
609
- }, env.tempDir, accessor);
610
- // Attempt to advance epic — should be blocked
611
- await expect(updateTask({ taskId: epicId, pipelineStage: 'implementation' }, env.tempDir, accessor)).rejects.toThrow(/cannot advance/);
612
- });
613
- });
614
- describe('updateTask child stage ceiling on update (strict)', () => {
615
- let env;
616
- let accessor;
617
- beforeEach(async () => {
618
- env = await createTestDb();
619
- accessor = env.accessor;
620
- await writeFile(join(env.cleoDir, 'config.json'), makeConfig('strict'));
621
- });
622
- afterEach(async () => {
623
- await env.cleanup();
624
- });
625
- it('blocks updating child to a stage beyond epic', async () => {
626
- // Create epic at research
627
- const epicResult = await addTask({
628
- title: 'Epic',
629
- description: 'Epic desc',
630
- type: 'epic',
631
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4', 'ac5'],
632
- pipelineStage: 'research',
633
- }, env.tempDir, accessor);
634
- const epicId = epicResult.task.id;
635
- // Create child at research
636
- const childResult = await addTask({
637
- title: 'Child',
638
- description: 'Child task',
639
- parentId: epicId,
640
- pipelineStage: 'research',
641
- }, env.tempDir, accessor);
642
- const childId = childResult.task.id;
643
- // Attempt to update child to implementation (beyond epic's research)
644
- await expect(updateTask({ taskId: childId, pipelineStage: 'implementation' }, env.tempDir, accessor)).rejects.toThrow(/cannot be at pipeline stage/);
645
- });
646
- it('allows updating child to a stage equal to epic', async () => {
647
- // Create epic at implementation
648
- const epicResult = await addTask({
649
- title: 'Epic',
650
- description: 'Epic desc',
651
- type: 'epic',
652
- acceptance: ['ac1', 'ac2', 'ac3', 'ac4', 'ac5'],
653
- pipelineStage: 'implementation',
654
- }, env.tempDir, accessor);
655
- const epicId = epicResult.task.id;
656
- // Create child at research
657
- const childResult = await addTask({
658
- title: 'Child',
659
- description: 'Child task',
660
- parentId: epicId,
661
- pipelineStage: 'research',
662
- }, env.tempDir, accessor);
663
- const childId = childResult.task.id;
664
- // Update child to implementation (same as epic)
665
- const updateResult = await updateTask({ taskId: childId, pipelineStage: 'implementation' }, env.tempDir, accessor);
666
- expect(updateResult.task.pipelineStage).toBe('implementation');
667
- });
668
- });
669
- //# sourceMappingURL=epic-enforcement.test.js.map