edsger 0.50.0 → 0.52.0

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 (470) hide show
  1. package/.claude/settings.local.json +23 -3
  2. package/.env.local +12 -0
  3. package/README.md +25 -25
  4. package/dist/api/chat.d.ts +7 -7
  5. package/dist/api/chat.js +13 -13
  6. package/dist/api/cross-product.d.ts +10 -10
  7. package/dist/api/cross-product.js +30 -30
  8. package/dist/api/github.d.ts +5 -5
  9. package/dist/api/github.js +10 -10
  10. package/dist/api/intelligence.d.ts +3 -3
  11. package/dist/api/issues/approval-checker.d.ts +20 -0
  12. package/dist/api/{features → issues}/approval-checker.js +16 -16
  13. package/dist/api/issues/get-issue.d.ts +5 -0
  14. package/dist/api/issues/get-issue.js +21 -0
  15. package/dist/api/issues/index.d.ts +8 -0
  16. package/dist/api/issues/index.js +10 -0
  17. package/dist/api/issues/issue-utils.d.ts +23 -0
  18. package/dist/api/issues/issue-utils.js +80 -0
  19. package/dist/api/issues/status-updater.d.ts +41 -0
  20. package/dist/api/{features → issues}/status-updater.js +23 -23
  21. package/dist/api/{features → issues}/test-cases.d.ts +7 -7
  22. package/dist/api/{features → issues}/test-cases.js +12 -12
  23. package/dist/api/issues/update-issue.d.ts +20 -0
  24. package/dist/api/{features/update-feature.js → issues/update-issue.js} +22 -22
  25. package/dist/api/{features → issues}/user-stories.d.ts +5 -5
  26. package/dist/api/{features → issues}/user-stories.js +8 -8
  27. package/dist/api/products.d.ts +1 -1
  28. package/dist/api/tasks.d.ts +1 -1
  29. package/dist/api/test-reports.d.ts +2 -2
  30. package/dist/api/test-reports.js +4 -4
  31. package/dist/auth/login.js +1 -1
  32. package/dist/commands/agent-workflow/chat-worker.d.ts +7 -7
  33. package/dist/commands/agent-workflow/chat-worker.js +50 -50
  34. package/dist/commands/agent-workflow/index.d.ts +2 -2
  35. package/dist/commands/agent-workflow/index.js +3 -3
  36. package/dist/commands/agent-workflow/{feature-worker.d.ts → issue-worker.d.ts} +4 -4
  37. package/dist/commands/agent-workflow/{feature-worker.js → issue-worker.js} +12 -12
  38. package/dist/commands/agent-workflow/processor.d.ts +9 -9
  39. package/dist/commands/agent-workflow/processor.js +90 -90
  40. package/dist/commands/build/index.js +2 -2
  41. package/dist/commands/find-bugs/index.d.ts +11 -0
  42. package/dist/commands/find-bugs/index.js +39 -0
  43. package/dist/commands/find-features/index.d.ts +14 -0
  44. package/dist/commands/find-features/index.js +42 -0
  45. package/dist/commands/find-smells/index.d.ts +21 -0
  46. package/dist/commands/find-smells/index.js +65 -0
  47. package/dist/commands/init/prompts.js +1 -1
  48. package/dist/commands/init/templates.d.ts +1 -1
  49. package/dist/commands/init/templates.js +4 -4
  50. package/dist/commands/workflow/config/phase-configs.js +17 -17
  51. package/dist/commands/workflow/core/index.d.ts +1 -1
  52. package/dist/commands/workflow/core/index.js +2 -2
  53. package/dist/commands/workflow/core/issue-filter.d.ts +16 -0
  54. package/dist/commands/workflow/core/issue-filter.js +47 -0
  55. package/dist/commands/workflow/core/state-manager.d.ts +10 -10
  56. package/dist/commands/workflow/core/state-manager.js +10 -10
  57. package/dist/commands/workflow/core/workflow-logger.d.ts +9 -9
  58. package/dist/commands/workflow/core/workflow-logger.js +21 -21
  59. package/dist/commands/workflow/executors/phase-executor.d.ts +2 -2
  60. package/dist/commands/workflow/executors/phase-executor.js +32 -32
  61. package/dist/commands/workflow/issue-coordinator.d.ts +18 -0
  62. package/dist/commands/workflow/{feature-coordinator.js → issue-coordinator.js} +29 -29
  63. package/dist/commands/workflow/phase-orchestrator.d.ts +2 -2
  64. package/dist/commands/workflow/phase-orchestrator.js +82 -82
  65. package/dist/commands/workflow/processor.d.ts +7 -7
  66. package/dist/commands/workflow/processor.js +44 -44
  67. package/dist/config/{feature-status.d.ts → issue-status.d.ts} +14 -14
  68. package/dist/config/{feature-status.js → issue-status.js} +14 -14
  69. package/dist/errors/index.d.ts +6 -6
  70. package/dist/errors/index.js +11 -11
  71. package/dist/index.js +90 -1
  72. package/dist/phases/app-store-generation/context.js +6 -6
  73. package/dist/phases/app-store-generation/index.js +2 -2
  74. package/dist/phases/app-store-generation/prompts.js +2 -2
  75. package/dist/phases/autonomous/index.d.ts +3 -3
  76. package/dist/phases/autonomous/index.js +37 -37
  77. package/dist/phases/autonomous/prompts.d.ts +2 -2
  78. package/dist/phases/autonomous/prompts.js +4 -4
  79. package/dist/phases/branch-planning/context.d.ts +3 -3
  80. package/dist/phases/branch-planning/context.js +12 -12
  81. package/dist/phases/branch-planning/index.d.ts +3 -3
  82. package/dist/phases/branch-planning/index.js +32 -32
  83. package/dist/phases/branch-planning/outcome.d.ts +5 -5
  84. package/dist/phases/branch-planning/outcome.js +12 -12
  85. package/dist/phases/branch-planning/prompts.d.ts +3 -3
  86. package/dist/phases/branch-planning/prompts.js +13 -13
  87. package/dist/phases/bug-fixing/analyzer.d.ts +2 -2
  88. package/dist/phases/bug-fixing/analyzer.js +13 -13
  89. package/dist/phases/bug-fixing/context-fetcher.d.ts +3 -3
  90. package/dist/phases/bug-fixing/context-fetcher.js +18 -18
  91. package/dist/phases/bug-fixing/mcp-server.js +17 -18
  92. package/dist/phases/chat-processor/context.d.ts +5 -5
  93. package/dist/phases/chat-processor/context.js +17 -17
  94. package/dist/phases/chat-processor/index.d.ts +4 -4
  95. package/dist/phases/chat-processor/index.js +17 -17
  96. package/dist/phases/chat-processor/product-context.d.ts +3 -3
  97. package/dist/phases/chat-processor/product-context.js +16 -16
  98. package/dist/phases/chat-processor/product-prompts.d.ts +1 -1
  99. package/dist/phases/chat-processor/product-prompts.js +10 -10
  100. package/dist/phases/chat-processor/product-tools.d.ts +2 -2
  101. package/dist/phases/chat-processor/product-tools.js +33 -33
  102. package/dist/phases/chat-processor/prompts.d.ts +3 -3
  103. package/dist/phases/chat-processor/prompts.js +22 -22
  104. package/dist/phases/chat-processor/tools.js +46 -46
  105. package/dist/phases/code-implementation/branch-pr-creator.d.ts +3 -3
  106. package/dist/phases/code-implementation/branch-pr-creator.js +5 -5
  107. package/dist/phases/code-implementation/context.d.ts +3 -3
  108. package/dist/phases/code-implementation/context.js +18 -18
  109. package/dist/phases/code-implementation/index.d.ts +4 -4
  110. package/dist/phases/code-implementation/index.js +88 -88
  111. package/dist/phases/code-implementation/outcome.d.ts +3 -3
  112. package/dist/phases/code-implementation/outcome.js +6 -6
  113. package/dist/phases/code-implementation/prompts.d.ts +1 -1
  114. package/dist/phases/code-implementation/prompts.js +6 -6
  115. package/dist/phases/code-implementation-verification/agent.d.ts +3 -3
  116. package/dist/phases/code-implementation-verification/agent.js +5 -5
  117. package/dist/phases/code-implementation-verification/index.d.ts +3 -3
  118. package/dist/phases/code-implementation-verification/index.js +11 -11
  119. package/dist/phases/code-implementation-verification/prompts.d.ts +3 -3
  120. package/dist/phases/code-implementation-verification/prompts.js +7 -7
  121. package/dist/phases/code-refine/context.d.ts +8 -8
  122. package/dist/phases/code-refine/context.js +29 -29
  123. package/dist/phases/code-refine/index.d.ts +2 -2
  124. package/dist/phases/code-refine/index.js +20 -20
  125. package/dist/phases/code-refine/prompts.d.ts +1 -1
  126. package/dist/phases/code-refine/prompts.js +3 -3
  127. package/dist/phases/code-refine/refine-iteration.d.ts +1 -1
  128. package/dist/phases/code-refine/refine-iteration.js +4 -4
  129. package/dist/phases/code-refine/retry-handler.js +2 -2
  130. package/dist/phases/code-refine-verification/index.js +10 -10
  131. package/dist/phases/code-refine-verification/types.d.ts +2 -2
  132. package/dist/phases/code-review/context.d.ts +8 -8
  133. package/dist/phases/code-review/context.js +25 -25
  134. package/dist/phases/code-review/diff-utils.d.ts +1 -1
  135. package/dist/phases/code-review/diff-utils.js +1 -1
  136. package/dist/phases/code-review/index.d.ts +2 -2
  137. package/dist/phases/code-review/index.js +26 -26
  138. package/dist/phases/code-testing/analyzer.d.ts +2 -2
  139. package/dist/phases/code-testing/analyzer.js +18 -18
  140. package/dist/phases/code-testing/context-fetcher.d.ts +3 -3
  141. package/dist/phases/code-testing/context-fetcher.js +16 -16
  142. package/dist/phases/code-testing/prompts.d.ts +1 -1
  143. package/dist/phases/code-testing/prompts.js +5 -5
  144. package/dist/phases/find-bugs/index.d.ts +30 -0
  145. package/dist/phases/find-bugs/index.js +216 -0
  146. package/dist/phases/find-bugs/prompts.d.ts +22 -0
  147. package/dist/phases/find-bugs/prompts.js +101 -0
  148. package/dist/phases/find-bugs/state.d.ts +19 -0
  149. package/dist/phases/find-bugs/state.js +13 -0
  150. package/dist/phases/find-bugs/types.d.ts +21 -0
  151. package/dist/phases/find-bugs/types.js +16 -0
  152. package/dist/phases/find-features/index.d.ts +40 -0
  153. package/dist/phases/find-features/index.js +279 -0
  154. package/dist/phases/find-features/prompts.d.ts +43 -0
  155. package/dist/phases/find-features/prompts.js +138 -0
  156. package/dist/phases/find-features/state.d.ts +25 -0
  157. package/dist/phases/find-features/state.js +22 -0
  158. package/dist/phases/find-features/types.d.ts +27 -0
  159. package/dist/phases/find-features/types.js +16 -0
  160. package/dist/phases/find-shared/git.d.ts +24 -0
  161. package/dist/phases/find-shared/git.js +60 -0
  162. package/dist/phases/find-shared/mcp.d.ts +33 -0
  163. package/dist/phases/find-shared/mcp.js +69 -0
  164. package/dist/phases/find-shared/scan-state.d.ts +33 -0
  165. package/dist/phases/find-shared/scan-state.js +112 -0
  166. package/dist/phases/find-smells/index.d.ts +47 -0
  167. package/dist/phases/find-smells/index.js +278 -0
  168. package/dist/phases/find-smells/prompts.d.ts +30 -0
  169. package/dist/phases/find-smells/prompts.js +129 -0
  170. package/dist/phases/find-smells/state.d.ts +21 -0
  171. package/dist/phases/find-smells/state.js +17 -0
  172. package/dist/phases/find-smells/types.d.ts +51 -0
  173. package/dist/phases/find-smells/types.js +64 -0
  174. package/dist/phases/functional-testing/analyzer.d.ts +2 -2
  175. package/dist/phases/functional-testing/analyzer.js +40 -40
  176. package/dist/phases/functional-testing/context-fetcher.d.ts +3 -3
  177. package/dist/phases/functional-testing/context-fetcher.js +16 -16
  178. package/dist/phases/functional-testing/http-fallback.d.ts +2 -2
  179. package/dist/phases/functional-testing/http-fallback.js +9 -9
  180. package/dist/phases/functional-testing/mcp-server.js +23 -24
  181. package/dist/phases/functional-testing/prompts.d.ts +1 -1
  182. package/dist/phases/functional-testing/prompts.js +4 -4
  183. package/dist/phases/functional-testing/test-report-creator.d.ts +2 -2
  184. package/dist/phases/functional-testing/test-report-creator.js +10 -10
  185. package/dist/phases/functional-testing/test-retry-handler.js +3 -3
  186. package/dist/phases/growth-analysis/context.js +6 -6
  187. package/dist/phases/growth-analysis/index.js +2 -2
  188. package/dist/phases/growth-analysis/prompts.js +2 -2
  189. package/dist/phases/intelligence-analysis/context.js +7 -7
  190. package/dist/phases/intelligence-analysis/index.js +3 -3
  191. package/dist/phases/{feature-analysis → issue-analysis}/agent.js +1 -1
  192. package/dist/phases/issue-analysis/context.d.ts +24 -0
  193. package/dist/phases/{feature-analysis → issue-analysis}/context.js +30 -30
  194. package/dist/phases/issue-analysis/index.d.ts +8 -0
  195. package/dist/phases/{feature-analysis → issue-analysis}/index.js +29 -29
  196. package/dist/phases/issue-analysis/outcome.d.ts +40 -0
  197. package/dist/phases/{feature-analysis → issue-analysis}/outcome.js +17 -17
  198. package/dist/phases/{feature-analysis → issue-analysis}/prompts.d.ts +3 -3
  199. package/dist/phases/{feature-analysis → issue-analysis}/prompts.js +12 -12
  200. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/agent.d.ts +2 -2
  201. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/agent.js +1 -1
  202. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/index.d.ts +5 -5
  203. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/index.js +9 -9
  204. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/prompts.d.ts +2 -2
  205. package/dist/phases/{feature-analysis-verification → issue-analysis-verification}/prompts.js +7 -7
  206. package/dist/phases/output-contracts.js +37 -37
  207. package/dist/phases/pr-execution/context.d.ts +3 -3
  208. package/dist/phases/pr-execution/context.js +14 -14
  209. package/dist/phases/pr-execution/index.d.ts +2 -2
  210. package/dist/phases/pr-execution/index.js +22 -22
  211. package/dist/phases/pr-execution/outcome.d.ts +4 -4
  212. package/dist/phases/pr-execution/outcome.js +6 -6
  213. package/dist/phases/pr-execution/prompts.d.ts +4 -4
  214. package/dist/phases/pr-execution/prompts.js +6 -6
  215. package/dist/phases/pr-resolve/checklist-learner.js +2 -2
  216. package/dist/phases/pr-review/index.d.ts +1 -1
  217. package/dist/phases/pr-review/index.js +1 -1
  218. package/dist/phases/pr-review/prompts.d.ts +1 -1
  219. package/dist/phases/pr-review/prompts.js +1 -1
  220. package/dist/phases/pr-shared/context.d.ts +3 -3
  221. package/dist/phases/pr-shared/context.js +3 -3
  222. package/dist/phases/pr-splitting/context.d.ts +3 -3
  223. package/dist/phases/pr-splitting/context.js +16 -16
  224. package/dist/phases/pr-splitting/index.d.ts +4 -4
  225. package/dist/phases/pr-splitting/index.js +29 -29
  226. package/dist/phases/pr-splitting/outcome.d.ts +3 -3
  227. package/dist/phases/pr-splitting/outcome.js +7 -7
  228. package/dist/phases/pr-splitting/prompts.d.ts +3 -3
  229. package/dist/phases/pr-splitting/prompts.js +11 -11
  230. package/dist/phases/pull-request/creator.d.ts +4 -4
  231. package/dist/phases/pull-request/creator.js +25 -25
  232. package/dist/phases/pull-request/handler.d.ts +3 -3
  233. package/dist/phases/pull-request/handler.js +16 -16
  234. package/dist/phases/release-sync/index.js +2 -2
  235. package/dist/phases/run-sheet/agent.js +1 -2
  236. package/dist/phases/run-sheet/index.js +3 -3
  237. package/dist/phases/smoke-test/index.js +2 -2
  238. package/dist/phases/technical-design/context.d.ts +3 -3
  239. package/dist/phases/technical-design/context.js +11 -11
  240. package/dist/phases/technical-design/index.d.ts +2 -2
  241. package/dist/phases/technical-design/index.js +27 -27
  242. package/dist/phases/technical-design/outcome.d.ts +4 -4
  243. package/dist/phases/technical-design/outcome.js +6 -6
  244. package/dist/phases/technical-design/prompts.d.ts +2 -2
  245. package/dist/phases/technical-design/prompts.js +10 -10
  246. package/dist/phases/technical-design-verification/agent.d.ts +3 -3
  247. package/dist/phases/technical-design-verification/agent.js +4 -4
  248. package/dist/phases/technical-design-verification/index.d.ts +4 -4
  249. package/dist/phases/technical-design-verification/index.js +12 -12
  250. package/dist/phases/technical-design-verification/prompts.d.ts +3 -3
  251. package/dist/phases/technical-design-verification/prompts.js +6 -6
  252. package/dist/phases/test-cases-analysis/context.d.ts +5 -5
  253. package/dist/phases/test-cases-analysis/context.js +18 -18
  254. package/dist/phases/test-cases-analysis/formatters.js +7 -7
  255. package/dist/phases/test-cases-analysis/index.d.ts +1 -1
  256. package/dist/phases/test-cases-analysis/index.js +21 -21
  257. package/dist/phases/test-cases-analysis/outcome.d.ts +7 -7
  258. package/dist/phases/test-cases-analysis/outcome.js +13 -13
  259. package/dist/phases/test-cases-analysis/prompts.d.ts +3 -3
  260. package/dist/phases/test-cases-analysis/prompts.js +6 -6
  261. package/dist/phases/user-stories-analysis/context.d.ts +5 -5
  262. package/dist/phases/user-stories-analysis/context.js +18 -18
  263. package/dist/phases/user-stories-analysis/formatters.js +7 -7
  264. package/dist/phases/user-stories-analysis/index.d.ts +1 -1
  265. package/dist/phases/user-stories-analysis/index.js +21 -21
  266. package/dist/phases/user-stories-analysis/outcome.d.ts +7 -7
  267. package/dist/phases/user-stories-analysis/outcome.js +13 -13
  268. package/dist/phases/user-stories-analysis/prompts.d.ts +3 -3
  269. package/dist/phases/user-stories-analysis/prompts.js +10 -10
  270. package/dist/services/audit-logs.d.ts +10 -10
  271. package/dist/services/audit-logs.js +12 -12
  272. package/dist/services/branches.d.ts +6 -6
  273. package/dist/services/branches.js +16 -16
  274. package/dist/services/checklist.d.ts +3 -3
  275. package/dist/services/checklist.js +11 -11
  276. package/dist/services/coaching/coaching-agent.js +2 -2
  277. package/dist/services/coaching/coaching-loop.d.ts +1 -1
  278. package/dist/services/coaching/coaching-loop.js +2 -2
  279. package/dist/services/coaching/phase-coaching.d.ts +2 -2
  280. package/dist/services/coaching/phase-coaching.js +3 -3
  281. package/dist/services/coaching/self-rating.js +1 -1
  282. package/dist/services/feedbacks.d.ts +4 -4
  283. package/dist/services/feedbacks.js +8 -8
  284. package/dist/services/phase-hooks/bindings-fetcher.d.ts +4 -4
  285. package/dist/services/phase-hooks/bindings-fetcher.js +8 -8
  286. package/dist/services/phase-hooks/hook-executor.js +1 -1
  287. package/dist/services/phase-hooks/hook-logging.d.ts +2 -2
  288. package/dist/services/phase-hooks/hook-logging.js +4 -4
  289. package/dist/services/phase-hooks/hook-runner.d.ts +1 -1
  290. package/dist/services/phase-hooks/hook-runner.js +4 -4
  291. package/dist/services/phase-hooks/types.d.ts +3 -3
  292. package/dist/services/phase-ratings.d.ts +7 -7
  293. package/dist/services/phase-ratings.js +8 -8
  294. package/dist/services/pull-requests.d.ts +4 -4
  295. package/dist/services/pull-requests.js +11 -11
  296. package/dist/services/skill-resolver.d.ts +1 -1
  297. package/dist/services/skill-resolver.js +1 -1
  298. package/dist/skills/phase/app-store-generation/SKILL.md +9 -9
  299. package/dist/skills/phase/autonomous/SKILL.md +2 -2
  300. package/dist/skills/phase/branch-planning/SKILL.md +12 -12
  301. package/dist/skills/phase/bug-fixing/SKILL.md +1 -1
  302. package/dist/skills/phase/code-implementation/SKILL.md +6 -6
  303. package/dist/skills/phase/code-implementation-verification/SKILL.md +3 -3
  304. package/dist/skills/phase/code-testing/SKILL.md +5 -5
  305. package/dist/skills/phase/functional-testing/SKILL.md +3 -3
  306. package/dist/skills/phase/growth-analysis/SKILL.md +8 -8
  307. package/dist/skills/phase/incremental-sync/SKILL.md +6 -6
  308. package/dist/skills/phase/intelligence-analysis/SKILL.md +7 -7
  309. package/dist/skills/phase/{feature-analysis → issue-analysis}/SKILL.md +8 -8
  310. package/dist/skills/phase/pr-execution/SKILL.md +7 -7
  311. package/dist/skills/phase/pr-splitting/SKILL.md +14 -14
  312. package/dist/skills/phase/smoke-test/SKILL.md +1 -1
  313. package/dist/skills/phase/technical-design/SKILL.md +5 -5
  314. package/dist/skills/phase/test-cases-analysis/SKILL.md +4 -4
  315. package/dist/skills/phase/user-stories-analysis/SKILL.md +13 -13
  316. package/dist/system/session-manager.d.ts +3 -3
  317. package/dist/system/session-manager.js +3 -3
  318. package/dist/system/sleep-notification.js +2 -2
  319. package/dist/system/sleep-prevention.js +1 -1
  320. package/dist/types/index.d.ts +21 -21
  321. package/dist/types/{features.d.ts → issues.d.ts} +3 -3
  322. package/dist/types/pipeline.d.ts +4 -4
  323. package/dist/updater/auto-updater.d.ts +2 -2
  324. package/dist/updater/auto-updater.js +3 -3
  325. package/dist/utils/conflict-resolver.d.ts +1 -1
  326. package/dist/utils/conflict-resolver.js +5 -5
  327. package/dist/utils/formatters.d.ts +4 -4
  328. package/dist/utils/formatters.js +29 -29
  329. package/dist/utils/git-branch-manager-async.d.ts +6 -6
  330. package/dist/utils/git-branch-manager-async.js +41 -41
  331. package/dist/utils/git-branch-manager.d.ts +11 -11
  332. package/dist/utils/git-branch-manager.js +42 -42
  333. package/dist/utils/image-downloader.d.ts +4 -4
  334. package/dist/utils/image-downloader.js +17 -17
  335. package/dist/utils/pipeline-logger.d.ts +1 -1
  336. package/dist/utils/pipeline-logger.js +5 -5
  337. package/dist/workspace/workspace-manager.d.ts +17 -17
  338. package/dist/workspace/workspace-manager.js +21 -21
  339. package/package.json +1 -1
  340. package/vitest.config.ts +4 -0
  341. package/dist/api/__tests__/app-store.test.d.ts +0 -7
  342. package/dist/api/__tests__/app-store.test.js +0 -60
  343. package/dist/api/__tests__/intelligence.test.d.ts +0 -11
  344. package/dist/api/__tests__/intelligence.test.js +0 -315
  345. package/dist/api/features/__tests__/feature-utils.test.d.ts +0 -4
  346. package/dist/api/features/__tests__/feature-utils.test.js +0 -370
  347. package/dist/api/features/__tests__/status-updater.test.d.ts +0 -4
  348. package/dist/api/features/__tests__/status-updater.test.js +0 -88
  349. package/dist/api/features/approval-checker.d.ts +0 -20
  350. package/dist/api/features/feature-utils.d.ts +0 -23
  351. package/dist/api/features/feature-utils.js +0 -80
  352. package/dist/api/features/get-feature.d.ts +0 -5
  353. package/dist/api/features/get-feature.js +0 -21
  354. package/dist/api/features/index.d.ts +0 -8
  355. package/dist/api/features/index.js +0 -10
  356. package/dist/api/features/status-updater.d.ts +0 -41
  357. package/dist/api/features/update-feature.d.ts +0 -20
  358. package/dist/commands/build/__tests__/build.test.d.ts +0 -5
  359. package/dist/commands/build/__tests__/build.test.js +0 -206
  360. package/dist/commands/build/__tests__/detect-project.test.d.ts +0 -6
  361. package/dist/commands/build/__tests__/detect-project.test.js +0 -160
  362. package/dist/commands/build/__tests__/run-build.test.d.ts +0 -6
  363. package/dist/commands/build/__tests__/run-build.test.js +0 -433
  364. package/dist/commands/intelligence/__tests__/command.test.d.ts +0 -4
  365. package/dist/commands/intelligence/__tests__/command.test.js +0 -48
  366. package/dist/commands/workflow/core/__tests__/feature-filter.test.d.ts +0 -5
  367. package/dist/commands/workflow/core/__tests__/feature-filter.test.js +0 -316
  368. package/dist/commands/workflow/core/__tests__/pipeline-evaluator.test.d.ts +0 -4
  369. package/dist/commands/workflow/core/__tests__/pipeline-evaluator.test.js +0 -397
  370. package/dist/commands/workflow/core/__tests__/state-manager.test.d.ts +0 -4
  371. package/dist/commands/workflow/core/__tests__/state-manager.test.js +0 -384
  372. package/dist/commands/workflow/core/feature-filter.d.ts +0 -16
  373. package/dist/commands/workflow/core/feature-filter.js +0 -47
  374. package/dist/commands/workflow/feature-coordinator.d.ts +0 -18
  375. package/dist/config/__tests__/config.test.d.ts +0 -4
  376. package/dist/config/__tests__/config.test.js +0 -286
  377. package/dist/config/__tests__/feature-status.test.d.ts +0 -4
  378. package/dist/config/__tests__/feature-status.test.js +0 -111
  379. package/dist/errors/__tests__/index.test.d.ts +0 -4
  380. package/dist/errors/__tests__/index.test.js +0 -349
  381. package/dist/phases/app-store-generation/__tests__/agent.test.d.ts +0 -5
  382. package/dist/phases/app-store-generation/__tests__/agent.test.js +0 -142
  383. package/dist/phases/app-store-generation/__tests__/context.test.d.ts +0 -4
  384. package/dist/phases/app-store-generation/__tests__/context.test.js +0 -284
  385. package/dist/phases/app-store-generation/__tests__/prompts.test.d.ts +0 -4
  386. package/dist/phases/app-store-generation/__tests__/prompts.test.js +0 -122
  387. package/dist/phases/app-store-generation/__tests__/screenshot-composer.test.d.ts +0 -5
  388. package/dist/phases/app-store-generation/__tests__/screenshot-composer.test.js +0 -826
  389. package/dist/phases/code-review/__tests__/diff-utils.test.js +0 -101
  390. package/dist/phases/feature-analysis/context.d.ts +0 -24
  391. package/dist/phases/feature-analysis/index.d.ts +0 -8
  392. package/dist/phases/feature-analysis/outcome.d.ts +0 -40
  393. package/dist/phases/intelligence-analysis/__tests__/context.test.d.ts +0 -4
  394. package/dist/phases/intelligence-analysis/__tests__/context.test.js +0 -192
  395. package/dist/phases/intelligence-analysis/__tests__/matching.test.d.ts +0 -13
  396. package/dist/phases/intelligence-analysis/__tests__/matching.test.js +0 -154
  397. package/dist/phases/intelligence-analysis/__tests__/orchestration.test.d.ts +0 -5
  398. package/dist/phases/intelligence-analysis/__tests__/orchestration.test.js +0 -378
  399. package/dist/phases/intelligence-analysis/__tests__/prompts.test.d.ts +0 -4
  400. package/dist/phases/intelligence-analysis/__tests__/prompts.test.js +0 -33
  401. package/dist/phases/pr-execution/__tests__/file-assigner.test.d.ts +0 -1
  402. package/dist/phases/pr-execution/__tests__/file-assigner.test.js +0 -303
  403. package/dist/phases/pr-resolve/__tests__/checklist-learner.test.d.ts +0 -1
  404. package/dist/phases/pr-resolve/__tests__/checklist-learner.test.js +0 -157
  405. package/dist/phases/pr-resolve/__tests__/prompts.test.d.ts +0 -1
  406. package/dist/phases/pr-resolve/__tests__/prompts.test.js +0 -116
  407. package/dist/phases/pr-resolve/__tests__/resolve-mapping.test.d.ts +0 -1
  408. package/dist/phases/pr-resolve/__tests__/resolve-mapping.test.js +0 -138
  409. package/dist/phases/pr-resolve/__tests__/types.test.d.ts +0 -1
  410. package/dist/phases/pr-resolve/__tests__/types.test.js +0 -43
  411. package/dist/phases/pr-resolve/__tests__/workspace.test.d.ts +0 -1
  412. package/dist/phases/pr-resolve/__tests__/workspace.test.js +0 -111
  413. package/dist/phases/pr-review/__tests__/prompts.test.d.ts +0 -1
  414. package/dist/phases/pr-review/__tests__/prompts.test.js +0 -49
  415. package/dist/phases/pr-review/__tests__/review-comments.test.d.ts +0 -1
  416. package/dist/phases/pr-review/__tests__/review-comments.test.js +0 -110
  417. package/dist/phases/pr-shared/__tests__/agent-utils.test.d.ts +0 -1
  418. package/dist/phases/pr-shared/__tests__/agent-utils.test.js +0 -91
  419. package/dist/phases/pr-shared/__tests__/context.test.d.ts +0 -1
  420. package/dist/phases/pr-shared/__tests__/context.test.js +0 -94
  421. package/dist/phases/pr-splitting/__tests__/import-dep-validator.test.d.ts +0 -1
  422. package/dist/phases/pr-splitting/__tests__/import-dep-validator.test.js +0 -331
  423. package/dist/phases/run-sheet/render.d.ts +0 -60
  424. package/dist/phases/run-sheet/render.js +0 -297
  425. package/dist/phases/smoke-test/__tests__/agent.test.d.ts +0 -4
  426. package/dist/phases/smoke-test/__tests__/agent.test.js +0 -84
  427. package/dist/phases/smoke-test/__tests__/github.test.d.ts +0 -9
  428. package/dist/phases/smoke-test/__tests__/github.test.js +0 -120
  429. package/dist/phases/smoke-test/__tests__/snapshot.test.d.ts +0 -8
  430. package/dist/phases/smoke-test/__tests__/snapshot.test.js +0 -93
  431. package/dist/phases/smoke-test/github.d.ts +0 -54
  432. package/dist/phases/smoke-test/github.js +0 -101
  433. package/dist/phases/smoke-test/snapshot.d.ts +0 -27
  434. package/dist/phases/smoke-test/snapshot.js +0 -157
  435. package/dist/services/coaching/__tests__/coaching-agent.test.d.ts +0 -1
  436. package/dist/services/coaching/__tests__/coaching-agent.test.js +0 -74
  437. package/dist/services/coaching/__tests__/coaching-loop.test.d.ts +0 -1
  438. package/dist/services/coaching/__tests__/coaching-loop.test.js +0 -59
  439. package/dist/services/coaching/__tests__/self-rating.test.d.ts +0 -1
  440. package/dist/services/coaching/__tests__/self-rating.test.js +0 -188
  441. package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.d.ts +0 -4
  442. package/dist/services/lifecycle-agent/__tests__/phase-criteria.test.js +0 -133
  443. package/dist/services/lifecycle-agent/__tests__/transition-rules.test.d.ts +0 -4
  444. package/dist/services/lifecycle-agent/__tests__/transition-rules.test.js +0 -336
  445. package/dist/services/lifecycle-agent/index.d.ts +0 -24
  446. package/dist/services/lifecycle-agent/index.js +0 -25
  447. package/dist/services/lifecycle-agent/phase-criteria.d.ts +0 -57
  448. package/dist/services/lifecycle-agent/phase-criteria.js +0 -335
  449. package/dist/services/lifecycle-agent/transition-rules.d.ts +0 -60
  450. package/dist/services/lifecycle-agent/transition-rules.js +0 -184
  451. package/dist/services/lifecycle-agent/types.d.ts +0 -190
  452. package/dist/services/lifecycle-agent/types.js +0 -12
  453. package/dist/services/phase-hooks/__tests__/bindings-fetcher.test.d.ts +0 -1
  454. package/dist/services/phase-hooks/__tests__/bindings-fetcher.test.js +0 -122
  455. package/dist/services/phase-hooks/__tests__/hook-executor.test.d.ts +0 -1
  456. package/dist/services/phase-hooks/__tests__/hook-executor.test.js +0 -321
  457. package/dist/services/phase-hooks/__tests__/hook-runner.test.d.ts +0 -1
  458. package/dist/services/phase-hooks/__tests__/hook-runner.test.js +0 -261
  459. package/dist/services/phase-hooks/__tests__/plugin-loader.test.d.ts +0 -1
  460. package/dist/services/phase-hooks/__tests__/plugin-loader.test.js +0 -158
  461. package/dist/services/video/__tests__/video-pipeline.test.d.ts +0 -6
  462. package/dist/services/video/__tests__/video-pipeline.test.js +0 -249
  463. package/dist/types/features.js +0 -1
  464. package/dist/workspace/__tests__/workspace-manager.test.d.ts +0 -7
  465. package/dist/workspace/__tests__/workspace-manager.test.js +0 -52
  466. /package/dist/api/{features → issues}/batch-operations.d.ts +0 -0
  467. /package/dist/api/{features → issues}/batch-operations.js +0 -0
  468. /package/dist/phases/{feature-analysis → issue-analysis}/agent.d.ts +0 -0
  469. /package/dist/skills/phase/{feature-analysis-verification → issue-analysis-verification}/SKILL.md +0 -0
  470. /package/dist/{phases/code-review/__tests__/diff-utils.test.d.ts → types/issues.js} +0 -0
@@ -1,316 +0,0 @@
1
- /**
2
- * Unit tests for feature-filter module
3
- * Pure functions for filtering and selecting features for processing
4
- */
5
- import assert from 'node:assert';
6
- import { describe, it } from 'node:test';
7
- import { filterAvailableFeatures, filterCompletedFeatures, filterFailedFeatures, filterProcessingFeatures, findNextFeature, hasReachedMaxRetries, isFeatureCompleted, isFeatureFailed, isFeatureProcessing, shouldProcessFeature, } from '../feature-filter.js';
8
- // ---- Helpers ----
9
- function makeFeature(overrides = {}) {
10
- return {
11
- id: 'feat-1',
12
- name: 'Test Feature',
13
- status: 'ready_for_ai',
14
- product_id: 'prod-1',
15
- ...overrides,
16
- };
17
- }
18
- function makeState(overrides = {}) {
19
- return {
20
- featureId: 'feat-1',
21
- retryCount: 0,
22
- lastAttempt: new Date('2025-01-01T00:00:00Z'),
23
- status: 'processing',
24
- ...overrides,
25
- };
26
- }
27
- function makeStates(...entries) {
28
- const map = new Map();
29
- for (const entry of entries) {
30
- map.set(entry.featureId, entry);
31
- }
32
- return map;
33
- }
34
- // ---- shouldProcessFeature ----
35
- void describe('shouldProcessFeature', () => {
36
- const maxRetries = 3;
37
- const check = shouldProcessFeature(maxRetries);
38
- void it('should return true when feature has never been processed', () => {
39
- const feature = makeFeature();
40
- const states = makeStates();
41
- assert.strictEqual(check(feature, states), true);
42
- });
43
- void it('should return false when feature is completed', () => {
44
- const feature = makeFeature();
45
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'completed' }));
46
- assert.strictEqual(check(feature, states), false);
47
- });
48
- void it('should return false when feature is currently processing', () => {
49
- const feature = makeFeature();
50
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'processing' }));
51
- assert.strictEqual(check(feature, states), false);
52
- });
53
- void it('should return true when feature failed and retries are within limit', () => {
54
- const feature = makeFeature();
55
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'failed', retryCount: 2 }));
56
- assert.strictEqual(check(feature, states), true);
57
- });
58
- void it('should return false when feature failed and retries exceed limit', () => {
59
- const feature = makeFeature();
60
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'failed', retryCount: 3 }));
61
- assert.strictEqual(check(feature, states), false);
62
- });
63
- void it('should return false when feature failed and retries are above limit', () => {
64
- const feature = makeFeature();
65
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'failed', retryCount: 5 }));
66
- assert.strictEqual(check(feature, states), false);
67
- });
68
- void it('should return true when feature was updated after last attempt', () => {
69
- const feature = makeFeature({
70
- updated_at: '2025-06-01T00:00:00Z',
71
- });
72
- const states = makeStates(makeState({
73
- featureId: 'feat-1',
74
- status: 'completed',
75
- lastAttempt: new Date('2025-01-01T00:00:00Z'),
76
- }));
77
- assert.strictEqual(check(feature, states), true);
78
- });
79
- void it('should return false when feature was updated before last attempt and is completed', () => {
80
- const feature = makeFeature({
81
- updated_at: '2024-01-01T00:00:00Z',
82
- });
83
- const states = makeStates(makeState({
84
- featureId: 'feat-1',
85
- status: 'completed',
86
- lastAttempt: new Date('2025-01-01T00:00:00Z'),
87
- }));
88
- assert.strictEqual(check(feature, states), false);
89
- });
90
- void it('should return true when feature has no updated_at, was never processed', () => {
91
- const feature = makeFeature({ updated_at: undefined });
92
- const states = makeStates();
93
- assert.strictEqual(check(feature, states), true);
94
- });
95
- void it('should return false when feature has no updated_at and is completed', () => {
96
- const feature = makeFeature({ updated_at: undefined });
97
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'completed' }));
98
- assert.strictEqual(check(feature, states), false);
99
- });
100
- void it('should use the provided maxRetries value', () => {
101
- const strictCheck = shouldProcessFeature(0);
102
- const feature = makeFeature();
103
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'failed', retryCount: 0 }));
104
- assert.strictEqual(strictCheck(feature, states), false);
105
- });
106
- });
107
- // ---- findNextFeature ----
108
- void describe('findNextFeature', () => {
109
- const maxRetries = 3;
110
- void it('should return undefined for an empty feature list', () => {
111
- const result = findNextFeature([], makeStates(), maxRetries);
112
- assert.strictEqual(result, undefined);
113
- });
114
- void it('should return undefined when all features are completed', () => {
115
- const features = [makeFeature({ id: 'a' }), makeFeature({ id: 'b' })];
116
- const states = makeStates(makeState({ featureId: 'a', status: 'completed' }), makeState({ featureId: 'b', status: 'completed' }));
117
- const result = findNextFeature(features, states, maxRetries);
118
- assert.strictEqual(result, undefined);
119
- });
120
- void it('should return the first available feature', () => {
121
- const features = [
122
- makeFeature({ id: 'a' }),
123
- makeFeature({ id: 'b' }),
124
- makeFeature({ id: 'c' }),
125
- ];
126
- const states = makeStates(makeState({ featureId: 'a', status: 'completed' }));
127
- const result = findNextFeature(features, states, maxRetries);
128
- assert.strictEqual(result?.id, 'b');
129
- });
130
- void it('should return a failed feature that can be retried', () => {
131
- const features = [makeFeature({ id: 'a' })];
132
- const states = makeStates(makeState({ featureId: 'a', status: 'failed', retryCount: 1 }));
133
- const result = findNextFeature(features, states, maxRetries);
134
- assert.strictEqual(result?.id, 'a');
135
- });
136
- void it('should skip processing features and find next available', () => {
137
- const features = [makeFeature({ id: 'a' }), makeFeature({ id: 'b' })];
138
- const states = makeStates(makeState({ featureId: 'a', status: 'processing' }));
139
- const result = findNextFeature(features, states, maxRetries);
140
- assert.strictEqual(result?.id, 'b');
141
- });
142
- });
143
- // ---- isFeatureProcessing ----
144
- void describe('isFeatureProcessing', () => {
145
- void it('should return true when feature status is processing', () => {
146
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'processing' }));
147
- assert.strictEqual(isFeatureProcessing('feat-1', states), true);
148
- });
149
- void it('should return false when feature status is completed', () => {
150
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'completed' }));
151
- assert.strictEqual(isFeatureProcessing('feat-1', states), false);
152
- });
153
- void it('should return false when feature status is failed', () => {
154
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'failed' }));
155
- assert.strictEqual(isFeatureProcessing('feat-1', states), false);
156
- });
157
- void it('should return false when feature is not in states', () => {
158
- const states = makeStates();
159
- assert.strictEqual(isFeatureProcessing('unknown', states), false);
160
- });
161
- });
162
- // ---- isFeatureCompleted ----
163
- void describe('isFeatureCompleted', () => {
164
- void it('should return true when feature status is completed', () => {
165
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'completed' }));
166
- assert.strictEqual(isFeatureCompleted('feat-1', states), true);
167
- });
168
- void it('should return false when feature status is processing', () => {
169
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'processing' }));
170
- assert.strictEqual(isFeatureCompleted('feat-1', states), false);
171
- });
172
- void it('should return false when feature is not in states', () => {
173
- const states = makeStates();
174
- assert.strictEqual(isFeatureCompleted('unknown', states), false);
175
- });
176
- });
177
- // ---- isFeatureFailed ----
178
- void describe('isFeatureFailed', () => {
179
- void it('should return true when feature status is failed', () => {
180
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'failed' }));
181
- assert.strictEqual(isFeatureFailed('feat-1', states), true);
182
- });
183
- void it('should return false when feature status is processing', () => {
184
- const states = makeStates(makeState({ featureId: 'feat-1', status: 'processing' }));
185
- assert.strictEqual(isFeatureFailed('feat-1', states), false);
186
- });
187
- void it('should return false when feature is not in states', () => {
188
- const states = makeStates();
189
- assert.strictEqual(isFeatureFailed('unknown', states), false);
190
- });
191
- });
192
- // ---- hasReachedMaxRetries ----
193
- void describe('hasReachedMaxRetries', () => {
194
- void it('should return true when retryCount equals maxRetries', () => {
195
- const states = makeStates(makeState({ featureId: 'feat-1', retryCount: 3 }));
196
- assert.strictEqual(hasReachedMaxRetries('feat-1', states, 3), true);
197
- });
198
- void it('should return true when retryCount exceeds maxRetries', () => {
199
- const states = makeStates(makeState({ featureId: 'feat-1', retryCount: 5 }));
200
- assert.strictEqual(hasReachedMaxRetries('feat-1', states, 3), true);
201
- });
202
- void it('should return false when retryCount is below maxRetries', () => {
203
- const states = makeStates(makeState({ featureId: 'feat-1', retryCount: 1 }));
204
- assert.strictEqual(hasReachedMaxRetries('feat-1', states, 3), false);
205
- });
206
- void it('should return false when feature is not in states', () => {
207
- const states = makeStates();
208
- assert.strictEqual(hasReachedMaxRetries('unknown', states, 3), false);
209
- });
210
- void it('should return true when maxRetries is 0 and retryCount is 0', () => {
211
- const states = makeStates(makeState({ featureId: 'feat-1', retryCount: 0 }));
212
- assert.strictEqual(hasReachedMaxRetries('feat-1', states, 0), true);
213
- });
214
- });
215
- // ---- filterProcessingFeatures ----
216
- void describe('filterProcessingFeatures', () => {
217
- void it('should return empty array for empty feature list', () => {
218
- const result = filterProcessingFeatures([], makeStates());
219
- assert.deepStrictEqual(result, []);
220
- });
221
- void it('should return only processing features', () => {
222
- const features = [
223
- makeFeature({ id: 'a' }),
224
- makeFeature({ id: 'b' }),
225
- makeFeature({ id: 'c' }),
226
- ];
227
- const states = makeStates(makeState({ featureId: 'a', status: 'processing' }), makeState({ featureId: 'b', status: 'completed' }), makeState({ featureId: 'c', status: 'processing' }));
228
- const result = filterProcessingFeatures(features, states);
229
- assert.strictEqual(result.length, 2);
230
- assert.strictEqual(result[0].id, 'a');
231
- assert.strictEqual(result[1].id, 'c');
232
- });
233
- void it('should return empty array when no features are processing', () => {
234
- const features = [makeFeature({ id: 'a' })];
235
- const states = makeStates(makeState({ featureId: 'a', status: 'completed' }));
236
- const result = filterProcessingFeatures(features, states);
237
- assert.deepStrictEqual(result, []);
238
- });
239
- });
240
- // ---- filterCompletedFeatures ----
241
- void describe('filterCompletedFeatures', () => {
242
- void it('should return empty array for empty feature list', () => {
243
- const result = filterCompletedFeatures([], makeStates());
244
- assert.deepStrictEqual(result, []);
245
- });
246
- void it('should return only completed features', () => {
247
- const features = [
248
- makeFeature({ id: 'a' }),
249
- makeFeature({ id: 'b' }),
250
- makeFeature({ id: 'c' }),
251
- ];
252
- const states = makeStates(makeState({ featureId: 'a', status: 'completed' }), makeState({ featureId: 'b', status: 'failed' }), makeState({ featureId: 'c', status: 'completed' }));
253
- const result = filterCompletedFeatures(features, states);
254
- assert.strictEqual(result.length, 2);
255
- assert.strictEqual(result[0].id, 'a');
256
- assert.strictEqual(result[1].id, 'c');
257
- });
258
- });
259
- // ---- filterFailedFeatures ----
260
- void describe('filterFailedFeatures', () => {
261
- void it('should return empty array for empty feature list', () => {
262
- const result = filterFailedFeatures([], makeStates());
263
- assert.deepStrictEqual(result, []);
264
- });
265
- void it('should return only failed features', () => {
266
- const features = [
267
- makeFeature({ id: 'a' }),
268
- makeFeature({ id: 'b' }),
269
- makeFeature({ id: 'c' }),
270
- ];
271
- const states = makeStates(makeState({ featureId: 'a', status: 'failed' }), makeState({ featureId: 'b', status: 'processing' }), makeState({ featureId: 'c', status: 'failed' }));
272
- const result = filterFailedFeatures(features, states);
273
- assert.strictEqual(result.length, 2);
274
- assert.strictEqual(result[0].id, 'a');
275
- assert.strictEqual(result[1].id, 'c');
276
- });
277
- });
278
- // ---- filterAvailableFeatures ----
279
- void describe('filterAvailableFeatures', () => {
280
- const maxRetries = 3;
281
- void it('should return empty array for empty feature list', () => {
282
- const result = filterAvailableFeatures([], makeStates(), maxRetries);
283
- assert.deepStrictEqual(result, []);
284
- });
285
- void it('should return features that have never been processed', () => {
286
- const features = [makeFeature({ id: 'a' }), makeFeature({ id: 'b' })];
287
- const states = makeStates();
288
- const result = filterAvailableFeatures(features, states, maxRetries);
289
- assert.strictEqual(result.length, 2);
290
- });
291
- void it('should include retryable failed features and exclude completed/processing', () => {
292
- const features = [
293
- makeFeature({ id: 'a' }),
294
- makeFeature({ id: 'b' }),
295
- makeFeature({ id: 'c' }),
296
- makeFeature({ id: 'd' }),
297
- ];
298
- const states = makeStates(makeState({ featureId: 'a', status: 'completed' }), makeState({ featureId: 'b', status: 'processing' }), makeState({ featureId: 'c', status: 'failed', retryCount: 1 }), makeState({ featureId: 'd', status: 'failed', retryCount: 5 }));
299
- const result = filterAvailableFeatures(features, states, maxRetries);
300
- assert.strictEqual(result.length, 1);
301
- assert.strictEqual(result[0].id, 'c');
302
- });
303
- void it('should include features updated after last attempt regardless of status', () => {
304
- const features = [
305
- makeFeature({ id: 'a', updated_at: '2025-12-01T00:00:00Z' }),
306
- ];
307
- const states = makeStates(makeState({
308
- featureId: 'a',
309
- status: 'completed',
310
- lastAttempt: new Date('2025-01-01T00:00:00Z'),
311
- }));
312
- const result = filterAvailableFeatures(features, states, maxRetries);
313
- assert.strictEqual(result.length, 1);
314
- assert.strictEqual(result[0].id, 'a');
315
- });
316
- });
@@ -1,4 +0,0 @@
1
- /**
2
- * Unit tests for pipeline result evaluation utilities
3
- */
4
- export {};