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,6 +1,6 @@
1
1
  /**
2
2
  * Pull Request Creator for the development workflow
3
- * Creates pull requests from feature branches after successful testing
3
+ * Creates pull requests from issue branches after successful testing
4
4
  */
5
5
  import { Octokit } from '@octokit/rest';
6
6
  import { execFileSync, execSync } from 'child_process';
@@ -9,7 +9,7 @@ import { logDebug } from '../../utils/logger.js';
9
9
  // GitHub PR title best practice: keep under 72 characters
10
10
  const MAX_PR_TITLE_LENGTH = 72;
11
11
  const PR_TITLE_PREFIX = 'feat: ';
12
- const MAX_FEATURE_NAME_LENGTH = MAX_PR_TITLE_LENGTH - PR_TITLE_PREFIX.length;
12
+ const MAX_ISSUE_NAME_LENGTH = MAX_PR_TITLE_LENGTH - PR_TITLE_PREFIX.length;
13
13
  /**
14
14
  * Truncate text to a maximum length, adding ellipsis if truncated
15
15
  */
@@ -123,14 +123,14 @@ const switchToMainBranch = (mainBranch = 'main', verbose) => {
123
123
  }
124
124
  };
125
125
  /**
126
- * Generate pull request title from feature name
126
+ * Generate pull request title from issue name
127
127
  * Truncates to keep under 72 characters (GitHub best practice)
128
128
  */
129
- const generatePRTitle = (featureName) => {
130
- // Remove feature ID prefix if present (e.g., "FEAT-123: Feature Name" -> "Feature Name")
131
- const cleanName = featureName.replace(/^[A-Z]+-\d+:\s*/, '');
129
+ const generatePRTitle = (issueName) => {
130
+ // Remove issue ID prefix if present (e.g., "FEAT-123: Issue Name" -> "Issue Name")
131
+ const cleanName = issueName.replace(/^[A-Z]+-\d+:\s*/, '');
132
132
  // Truncate to keep total title under 72 chars
133
- const truncatedName = truncateText(cleanName.toLowerCase(), MAX_FEATURE_NAME_LENGTH);
133
+ const truncatedName = truncateText(cleanName.toLowerCase(), MAX_ISSUE_NAME_LENGTH);
134
134
  return `${PR_TITLE_PREFIX}${truncatedName}`;
135
135
  };
136
136
  const findExistingPullRequest = async (opts) => {
@@ -162,55 +162,55 @@ const findExistingPullRequest = async (opts) => {
162
162
  }
163
163
  };
164
164
  /**
165
- * Generate pull request body with feature details
165
+ * Generate pull request body with issue details
166
166
  */
167
- const generatePRBody = (feature) => {
167
+ const generatePRBody = (issue) => {
168
168
  const sections = [];
169
- // Feature URL section
169
+ // Issue URL section
170
170
  const appUrl = process.env.NEXTAUTH_URL || process.env.APP_URL || 'http://localhost:3000';
171
- if (feature.productId) {
172
- sections.push('## Feature Details');
173
- sections.push(`📋 [View Feature Details](${appUrl}/products/${feature.productId}/features/${feature.id})`);
171
+ if (issue.productId) {
172
+ sections.push('## Issue Details');
173
+ sections.push(`📋 [View Issue Details](${appUrl}/products/${issue.productId}/issues/${issue.id})`);
174
174
  sections.push('');
175
175
  }
176
176
  // Test Report section (if available)
177
- if (feature.testReportUrl) {
177
+ if (issue.testReportUrl) {
178
178
  sections.push('## Test Report');
179
- sections.push(`🧪 [View Detailed Test Report](${feature.testReportUrl})`);
179
+ sections.push(`🧪 [View Detailed Test Report](${issue.testReportUrl})`);
180
180
  sections.push('');
181
181
  }
182
182
  // Metadata
183
183
  sections.push('---');
184
- sections.push(`Feature ID: ${feature.id}`);
184
+ sections.push(`Issue ID: ${issue.id}`);
185
185
  sections.push(`Created by: Automated Workflow`);
186
186
  return sections.join('\n');
187
187
  };
188
188
  /**
189
- * Create a pull request for the feature
189
+ * Create a pull request for the issue
190
190
  */
191
- export async function createPullRequest(config, feature) {
191
+ export async function createPullRequest(config, issue) {
192
192
  const { githubToken, owner, repo, baseBranch = 'main', verbose } = config;
193
193
  try {
194
194
  // Initialize Octokit with personal access token
195
195
  const octokit = new Octokit({
196
196
  auth: githubToken,
197
197
  });
198
- // Get current branch (should be dev/feature-id)
198
+ // Get current branch (should be dev/issue-id)
199
199
  let currentBranch = getCurrentBranch();
200
200
  logDebug(`Current branch: ${currentBranch}`, verbose);
201
201
  // If we're on the base branch, switch to dev branch (should already exist)
202
202
  // Default behavior now checks remote if not found locally (multi-clone scenario)
203
203
  if (currentBranch === baseBranch) {
204
- const devBranch = `dev/${feature.id}`;
204
+ const devBranch = `dev/${issue.id}`;
205
205
  logDebug(`Currently on ${baseBranch} branch, switching to ${devBranch}`, verbose);
206
206
  switchToBranch(devBranch, verbose, githubToken);
207
207
  currentBranch = devBranch;
208
208
  }
209
- // Extract feature ID from current branch (dev/feature-id)
209
+ // Extract issue ID from current branch (dev/issue-id)
210
210
  let targetBranch = baseBranch;
211
211
  if (currentBranch.startsWith('dev/')) {
212
- const featureId = currentBranch.replace('dev/', '');
213
- targetBranch = `feat/${featureId}`;
212
+ const issueId = currentBranch.replace('dev/', '');
213
+ targetBranch = `feat/${issueId}`;
214
214
  // Create the feat/ branch from base branch (main)
215
215
  logDebug(`Creating target branch: ${targetBranch} from ${baseBranch}`, verbose);
216
216
  try {
@@ -259,8 +259,8 @@ export async function createPullRequest(config, feature) {
259
259
  }
260
260
  }
261
261
  // Generate PR title and body
262
- const title = generatePRTitle(feature.name);
263
- const body = generatePRBody(feature);
262
+ const title = generatePRTitle(issue.name);
263
+ const body = generatePRBody(issue);
264
264
  // Check if PR already exists
265
265
  const existingPR = await findExistingPullRequest({
266
266
  octokit,
@@ -3,13 +3,13 @@
3
3
  */
4
4
  import { type PipelineResult } from '../../types/pipeline.js';
5
5
  export interface PullRequestHandlerOptions {
6
- featureId: string;
6
+ issueId: string;
7
7
  results: readonly PipelineResult[];
8
8
  testingResult?: PipelineResult;
9
9
  verbose?: boolean;
10
10
  }
11
11
  /**
12
- * Create pull request for successful feature implementation
12
+ * Create pull request for successful issue implementation
13
13
  * Returns true if PR was successfully created, false otherwise
14
14
  */
15
- export declare function handlePullRequestCreation({ featureId, results, testingResult, verbose, }: PullRequestHandlerOptions): Promise<boolean>;
15
+ export declare function handlePullRequestCreation({ issueId, results, testingResult, verbose, }: PullRequestHandlerOptions): Promise<boolean>;
@@ -1,31 +1,31 @@
1
1
  /**
2
2
  * Pull request creation handler for pipeline execution
3
3
  */
4
- import { getFeature } from '../../api/features/index.js';
5
4
  import { getGitHubConfig } from '../../api/github.js';
5
+ import { getIssue } from '../../api/issues/index.js';
6
6
  import { getCurrentBranch, updateBranch, } from '../../services/branches.js';
7
7
  import { logDebug } from '../../utils/logger.js';
8
8
  import { createPullRequest } from './creator.js';
9
9
  /**
10
- * Create pull request for successful feature implementation
10
+ * Create pull request for successful issue implementation
11
11
  * Returns true if PR was successfully created, false otherwise
12
12
  */
13
13
  // eslint-disable-next-line complexity -- orchestration function with branch detection, PR creation, and status updates
14
- export async function handlePullRequestCreation({ featureId, results, testingResult, verbose, }) {
15
- logDebug('Creating pull request for successful feature...', verbose);
16
- // Get feature details for PR creation
17
- const feature = await getFeature(featureId, verbose);
18
- if (!feature) {
19
- logDebug('Could not fetch feature details for pull request creation', verbose);
14
+ export async function handlePullRequestCreation({ issueId, results, testingResult, verbose, }) {
15
+ logDebug('Creating pull request for successful issue...', verbose);
16
+ // Get issue details for PR creation
17
+ const issue = await getIssue(issueId, verbose);
18
+ if (!issue) {
19
+ logDebug('Could not fetch issue details for pull request creation', verbose);
20
20
  return false;
21
21
  }
22
- // Get current branch for the feature
22
+ // Get current branch for the issue
23
23
  let currentBranch = null;
24
24
  try {
25
- currentBranch = await getCurrentBranch({ featureId, verbose });
25
+ currentBranch = await getCurrentBranch({ issueId, verbose });
26
26
  }
27
27
  catch (error) {
28
- logDebug(`Could not fetch branch for feature: ${error}`, verbose);
28
+ logDebug(`Could not fetch branch for issue: ${error}`, verbose);
29
29
  }
30
30
  // Check if PR already exists on the branch
31
31
  if (currentBranch?.pull_request_url) {
@@ -34,7 +34,7 @@ export async function handlePullRequestCreation({ featureId, results, testingRes
34
34
  return true;
35
35
  }
36
36
  // Get GitHub configuration from product developer settings
37
- const githubConfig = await getGitHubConfig(featureId, verbose);
37
+ const githubConfig = await getGitHubConfig(issueId, verbose);
38
38
  if (!githubConfig.configured ||
39
39
  !githubConfig.token ||
40
40
  !githubConfig.owner ||
@@ -52,10 +52,10 @@ export async function handlePullRequestCreation({ featureId, results, testingRes
52
52
  baseBranch: 'main',
53
53
  verbose,
54
54
  }, {
55
- id: feature.id,
56
- name: feature.name,
57
- description: feature.description || '',
58
- productId: feature.product_id,
55
+ id: issue.id,
56
+ name: issue.name,
57
+ description: issue.description || '',
58
+ productId: issue.product_id,
59
59
  // Get technical design and test result from previous phases (if available)
60
60
  technicalDesign: results.find((r) => r.phase === 'technical-design')?.data?.technicalDesign,
61
61
  testResult: testingResult
@@ -8,7 +8,7 @@
8
8
  import { getGitHubConfigByProduct } from '../../api/github.js';
9
9
  import { getReleaseByTag, upsertRelease, } from '../../api/releases.js';
10
10
  import { logInfo, logSuccess, logWarning } from '../../utils/logger.js';
11
- import { cloneFeatureRepo, ensureWorkspaceDir, syncRepoToRef, } from '../../workspace/workspace-manager.js';
11
+ import { cloneIssueRepo, ensureWorkspaceDir, syncRepoToRef, } from '../../workspace/workspace-manager.js';
12
12
  import { fetchLatestTwoReleases, getDefaultBranchHead, } from './github.js';
13
13
  import { detectSnapshotVersion, isPlausibleSnapshotTag } from './snapshot.js';
14
14
  /**
@@ -95,7 +95,7 @@ export async function runReleaseSync(options, _config) {
95
95
  let cwd;
96
96
  try {
97
97
  const workspaceRoot = ensureWorkspaceDir();
98
- const { repoPath } = cloneFeatureRepo(workspaceRoot, `release-sync-${productId}`, gh.owner, gh.repo, gh.token);
98
+ const { repoPath } = cloneIssueRepo(workspaceRoot, `release-sync-${productId}`, gh.owner, gh.repo, gh.token);
99
99
  cwd = repoPath;
100
100
  }
101
101
  catch (err) {
@@ -34,7 +34,7 @@ Bash safety rules (strict):
34
34
  Output rules:
35
35
  1. Output ONLY the final run-sheet Markdown. No preamble ("Here is..."), no trailing commentary, no wrapping code fence around the whole document.
36
36
  2. Follow the structure of the TEMPLATE exactly — same section headings in the same order. If the template is free-form prose, infer sensible sections from it.
37
- 3. Ground every claim in the repo. Do not invent features, APIs, or risks that are not evidenced by the diff or code.
37
+ 3. Ground every claim in the repo. Do not invent issues, APIs, or risks that are not evidenced by the diff or code.
38
38
  4. If the release is marked DRAFT, include a short "Draft" note near the top explaining the tag is not yet cut.
39
39
  5. Prefer concise bullet points over long paragraphs for actionable items. Aim for under 600 lines of Markdown total — be specific, not exhaustive.
40
40
  6. If the diff is empty or there is no previous ref to compare against, state that plainly rather than fabricating content.`;
@@ -96,7 +96,6 @@ function summariseToolUse(name, input, turn) {
96
96
  const desc = typeof descRaw === 'string' ? descRaw : 'Running...';
97
97
  return `[Turn ${turn}] ${name}: ${desc.slice(0, 160)}`;
98
98
  }
99
- // eslint-disable-next-line complexity -- agent loop with message type handling
100
99
  export async function generateRunSheetWithAgent(input) {
101
100
  const { repoDir } = input;
102
101
  let assistantText = '';
@@ -18,7 +18,7 @@ import { getProduct } from '../../api/products.js';
18
18
  import { getRelease } from '../../api/releases.js';
19
19
  import { getRunSheetByRelease, upsertRunSheet, } from '../../api/run-sheets.js';
20
20
  import { logError, logInfo, logSuccess, logWarning, } from '../../utils/logger.js';
21
- import { cloneFeatureRepo, ensureWorkspaceDir, getFeatureRepoPath, isSafeGitRef, syncRepoToRef, } from '../../workspace/workspace-manager.js';
21
+ import { cloneIssueRepo, ensureWorkspaceDir, getIssueRepoPath, isSafeGitRef, syncRepoToRef, } from '../../workspace/workspace-manager.js';
22
22
  import { getDefaultBranchHead } from '../release-sync/github.js';
23
23
  import { generateRunSheetWithAgent } from './agent.js';
24
24
  // Stale locks (e.g. left behind by a crashed or SIGKILLed CLI) are
@@ -261,7 +261,7 @@ export async function runRunSheet(options) {
261
261
  logInfo(`Pruned ${pruned.removed.length} stale run-sheet workspace(s).`);
262
262
  }
263
263
  const workspaceName = `run-sheet-${release.id}`;
264
- const repoPathAhead = getFeatureRepoPath(workspaceRoot, workspaceName);
264
+ const repoPathAhead = getIssueRepoPath(workspaceRoot, workspaceName);
265
265
  lockPath = `${repoPathAhead}.lock`;
266
266
  if (!tryAcquireFileLock(lockPath)) {
267
267
  return {
@@ -272,7 +272,7 @@ export async function runRunSheet(options) {
272
272
  };
273
273
  }
274
274
  try {
275
- const { repoPath } = cloneFeatureRepo(workspaceRoot, workspaceName, owner, repo, token);
275
+ const { repoPath } = cloneIssueRepo(workspaceRoot, workspaceName, owner, repo, token);
276
276
  repoDir = repoPath;
277
277
  // SNAPSHOT releases have no GitHub release object backing them, so
278
278
  // `published_at` is null. Use that as a free local signal to skip
@@ -10,7 +10,7 @@ import { getProduct } from '../../api/products.js';
10
10
  import { clearReleaseTestCases, createReleaseTestCases, } from '../../api/release-test-cases.js';
11
11
  import { getRelease, updateRelease } from '../../api/releases.js';
12
12
  import { logError, logInfo, logSuccess, logWarning, } from '../../utils/logger.js';
13
- import { cloneFeatureRepo, ensureWorkspaceDir, syncRepoToRef, } from '../../workspace/workspace-manager.js';
13
+ import { cloneIssueRepo, ensureWorkspaceDir, syncRepoToRef, } from '../../workspace/workspace-manager.js';
14
14
  import { buildDiffDigest, fetchCompare, getDefaultBranchHead, summariseStats, } from '../release-sync/github.js';
15
15
  import { executeSmokeTestQuery } from './agent.js';
16
16
  import { buildSmokeTestUserPrompt, createSmokeTestSystemPrompt, } from './prompts.js';
@@ -104,7 +104,7 @@ async function runSmokeTestInner(ctx) {
104
104
  let cwd;
105
105
  try {
106
106
  const workspaceRoot = ensureWorkspaceDir();
107
- const { repoPath } = cloneFeatureRepo(workspaceRoot, `release-${release.product_id}`, ghResolved.owner, ghResolved.repo, ghResolved.token);
107
+ const { repoPath } = cloneIssueRepo(workspaceRoot, `release-${release.product_id}`, ghResolved.owner, ghResolved.repo, ghResolved.token);
108
108
  cwd = repoPath;
109
109
  }
110
110
  catch (err) {
@@ -1,7 +1,7 @@
1
1
  import { type ProductInfo } from '../../api/products.js';
2
- import type { FeatureInfo, TestCase, UserStory } from '../../types/features.js';
2
+ import type { IssueInfo, TestCase, UserStory } from '../../types/issues.js';
3
3
  export interface TechnicalDesignContext {
4
- feature: FeatureInfo;
4
+ issue: IssueInfo;
5
5
  product: ProductInfo;
6
6
  user_stories: UserStory[];
7
7
  test_cases: TestCase[];
@@ -9,4 +9,4 @@ export interface TechnicalDesignContext {
9
9
  /**
10
10
  * Fetch all technical design context information via MCP endpoints
11
11
  */
12
- export declare function fetchTechnicalDesignContext(featureId: string, verbose?: boolean): Promise<TechnicalDesignContext>;
12
+ export declare function fetchTechnicalDesignContext(issueId: string, verbose?: boolean): Promise<TechnicalDesignContext>;
@@ -1,31 +1,31 @@
1
- import { getFeature, getTestCases, getUserStories, } from '../../api/features/index.js';
1
+ import { getIssue, getTestCases, getUserStories, } from '../../api/issues/index.js';
2
2
  import { getProduct } from '../../api/products.js';
3
3
  import { logError, logInfo } from '../../utils/logger.js';
4
4
  /**
5
5
  * Fetch all technical design context information via MCP endpoints
6
6
  */
7
- export async function fetchTechnicalDesignContext(featureId, verbose) {
7
+ export async function fetchTechnicalDesignContext(issueId, verbose) {
8
8
  try {
9
9
  if (verbose) {
10
- logInfo(`Fetching complete technical design context for feature: ${featureId}`);
10
+ logInfo(`Fetching complete technical design context for issue: ${issueId}`);
11
11
  }
12
12
  // Fetch all required data in parallel for better performance
13
- const [feature, userStories, testCases] = await Promise.all([
14
- getFeature(featureId, verbose),
15
- getUserStories(featureId, verbose),
16
- getTestCases(featureId, verbose),
13
+ const [issue, userStories, testCases] = await Promise.all([
14
+ getIssue(issueId, verbose),
15
+ getUserStories(issueId, verbose),
16
+ getTestCases(issueId, verbose),
17
17
  ]);
18
- const product = await getProduct(feature.product_id, verbose);
18
+ const product = await getProduct(issue.product_id, verbose);
19
19
  if (verbose) {
20
20
  logInfo(`✅ Technical design context fetched successfully:`);
21
- logInfo(` Feature: ${feature.name}`);
21
+ logInfo(` Issue: ${issue.name}`);
22
22
  logInfo(` Product: ${product.name}`);
23
23
  logInfo(` User Stories: ${userStories.length}`);
24
24
  logInfo(` Test Cases: ${testCases.length} (${testCases.filter((tc) => tc.is_critical).length} critical)`);
25
- logInfo(` Existing Technical Design: ${feature.technical_design ? 'Yes' : 'No'}`);
25
+ logInfo(` Existing Technical Design: ${issue.technical_design ? 'Yes' : 'No'}`);
26
26
  }
27
27
  return {
28
- feature,
28
+ issue,
29
29
  product,
30
30
  user_stories: userStories,
31
31
  test_cases: testCases,
@@ -1,12 +1,12 @@
1
1
  import { type ChecklistPhaseContext } from '../../services/checklist.js';
2
2
  import { type ChecklistItemResult, type EdsgerConfig, type VerificationResult } from '../../types/index.js';
3
3
  export interface TechnicalDesignOptions {
4
- featureId: string;
4
+ issueId: string;
5
5
  verbose?: boolean;
6
6
  maxVerificationIterations?: number;
7
7
  }
8
8
  export interface TechnicalDesignResult {
9
- featureId: string;
9
+ issueId: string;
10
10
  technicalDesign: string | null;
11
11
  status: 'success' | 'error';
12
12
  summary: string;
@@ -1,7 +1,7 @@
1
1
  import { query } from '@anthropic-ai/claude-agent-sdk';
2
- import { updateTechnicalDesign } from '../../api/features/index.js';
2
+ import { updateTechnicalDesign } from '../../api/issues/index.js';
3
3
  import { DEFAULT_MODEL } from '../../constants.js';
4
- import { logFeaturePhaseEvent } from '../../services/audit-logs.js';
4
+ import { logIssuePhaseEvent } from '../../services/audit-logs.js';
5
5
  import { formatChecklistsForContext, } from '../../services/checklist.js';
6
6
  import { extractChecklistItems, runPhaseCoaching, } from '../../services/coaching/index.js';
7
7
  import { formatFeedbacksForContext, getFeedbacksForPhase, } from '../../services/feedbacks.js';
@@ -26,14 +26,14 @@ async function* prompt(analysisPrompt) {
26
26
  }
27
27
  // eslint-disable-next-line complexity
28
28
  export const generateTechnicalDesign = async (options, config, checklistContext) => {
29
- const { featureId, verbose } = options;
29
+ const { issueId, verbose } = options;
30
30
  if (verbose) {
31
- logInfo(`Starting technical design generation for feature ID: ${featureId}`);
31
+ logInfo(`Starting technical design generation for issue ID: ${issueId}`);
32
32
  }
33
33
  try {
34
34
  // Fetch and prepare context
35
- const context = await prepareDesignContext(featureId, checklistContext, verbose);
36
- const systemPrompt = await createTechnicalDesignSystemPrompt(config, featureId);
35
+ const context = await prepareDesignContext(issueId, checklistContext, verbose);
36
+ const systemPrompt = await createTechnicalDesignSystemPrompt(config, issueId);
37
37
  const initialDesignPrompt = context.designPrompt;
38
38
  const maxIterations = options.maxVerificationIterations || 10;
39
39
  let currentIteration = 0;
@@ -53,8 +53,8 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
53
53
  }
54
54
  // Log iteration start (for iterations after the first)
55
55
  if (currentIteration > 1) {
56
- await logFeaturePhaseEvent({
57
- featureId,
56
+ await logIssuePhaseEvent({
57
+ issueId,
58
58
  eventType: 'phase_started',
59
59
  phase: 'technical_design',
60
60
  result: 'info',
@@ -80,8 +80,8 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
80
80
  // Update with new design result
81
81
  structuredDesignResult = queryResult.data;
82
82
  // Log design completion for this iteration
83
- await logFeaturePhaseEvent({
84
- featureId,
83
+ await logIssuePhaseEvent({
84
+ issueId,
85
85
  eventType: 'phase_completed',
86
86
  phase: 'technical_design',
87
87
  result: 'success',
@@ -97,10 +97,10 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
97
97
  if (verbose) {
98
98
  logInfo(`💾 Saving technical design (iteration ${currentIteration})...`);
99
99
  }
100
- await updateTechnicalDesign(featureId, structuredDesignResult.technical_design, verbose);
100
+ await updateTechnicalDesign(issueId, structuredDesignResult.technical_design, verbose);
101
101
  // Coaching loop: self-rate → coach → improve → repeat (between execute and verify)
102
102
  const coaching = await runPhaseCoaching({
103
- featureId,
103
+ issueId,
104
104
  phase: 'technical_design',
105
105
  phaseResult: { execution_session_id: executionSessionId },
106
106
  checklistItems: extractChecklistItems(checklistContext),
@@ -114,7 +114,7 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
114
114
  if (design && typeof design === 'string') {
115
115
  // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
116
116
  structuredDesignResult.technical_design = design;
117
- await updateTechnicalDesign(featureId, design, verbose);
117
+ await updateTechnicalDesign(issueId, design, verbose);
118
118
  }
119
119
  else {
120
120
  logError('Coaching improvement response missing technical_design field. Keeping previous design.');
@@ -132,9 +132,9 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
132
132
  technicalDesign: structuredDesignResult.technical_design,
133
133
  checklistContext: checklistContext || null,
134
134
  feedbacksContext: context.feedbacksContext,
135
- featureId,
136
- featureName: context.featureName,
137
- featureDescription: context.featureDescription,
135
+ issueId,
136
+ issueName: context.issueName,
137
+ issueDescription: context.issueDescription,
138
138
  config,
139
139
  currentIteration,
140
140
  maxIterations,
@@ -174,7 +174,7 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
174
174
  }
175
175
  // Handle results
176
176
  if (!structuredDesignResult?.technical_design) {
177
- return buildNoResultsError(featureId);
177
+ return buildNoResultsError(issueId);
178
178
  }
179
179
  // Check if verification failed after all iterations
180
180
  if (verificationResult &&
@@ -183,10 +183,10 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
183
183
  checklistContext.checklists.length > 0) {
184
184
  logError(`❌ Final result: Checklist verification FAILED after ${currentIteration} iterations`);
185
185
  logError(` Technical design saved for manual review`);
186
- return buildVerificationFailureResult(featureId, structuredDesignResult.technical_design, verificationResult, currentIteration);
186
+ return buildVerificationFailureResult(issueId, structuredDesignResult.technical_design, verificationResult, currentIteration);
187
187
  }
188
188
  // Return success result with session ID for coaching at phase-executor level
189
- const result = buildDesignResult(featureId, structuredDesignResult.technical_design, structuredDesignResult.summary ||
189
+ const result = buildDesignResult(issueId, structuredDesignResult.technical_design, structuredDesignResult.summary ||
190
190
  'Technical design generated successfully', currentIteration);
191
191
  return {
192
192
  ...result,
@@ -199,7 +199,7 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
199
199
  catch (error) {
200
200
  logError(`Technical design generation failed: ${error instanceof Error ? error.message : String(error)}`);
201
201
  return {
202
- featureId,
202
+ issueId,
203
203
  technicalDesign: null,
204
204
  status: 'error',
205
205
  summary: `Generation failed: ${error instanceof Error ? error.message : String(error)}`,
@@ -210,11 +210,11 @@ export const generateTechnicalDesign = async (options, config, checklistContext)
210
210
  * Prepare all context information needed for design
211
211
  */
212
212
  // eslint-disable-next-line complexity -- assembles context from many data sources with fallback handling
213
- async function prepareDesignContext(featureId, checklistContext, verbose) {
213
+ async function prepareDesignContext(issueId, checklistContext, verbose) {
214
214
  if (verbose) {
215
215
  logInfo('Fetching technical design context via MCP endpoints...');
216
216
  }
217
- const context = await fetchTechnicalDesignContext(featureId, verbose);
217
+ const context = await fetchTechnicalDesignContext(issueId, verbose);
218
218
  const { content: contextInfo, downloadedImages } = await formatTechnicalDesignContext(context);
219
219
  if (verbose && downloadedImages.length > 0) {
220
220
  logInfo(`Downloaded ${downloadedImages.length} images for Claude Code:`);
@@ -226,7 +226,7 @@ async function prepareDesignContext(featureId, checklistContext, verbose) {
226
226
  let hasFeedbacks = false;
227
227
  let feedbacksContext = null;
228
228
  // Check if there's existing technical design
229
- const existingTechnicalDesign = context.feature.technical_design;
229
+ const existingTechnicalDesign = context.issue.technical_design;
230
230
  const hasExistingDesign = !!existingTechnicalDesign && existingTechnicalDesign.trim().length > 0;
231
231
  // Add existing technical design to context if it exists
232
232
  if (hasExistingDesign && verbose) {
@@ -234,7 +234,7 @@ async function prepareDesignContext(featureId, checklistContext, verbose) {
234
234
  }
235
235
  // Add feedbacks context to the design prompt
236
236
  try {
237
- feedbacksContext = await getFeedbacksForPhase({ featureId, verbose }, 'technical-design');
237
+ feedbacksContext = await getFeedbacksForPhase({ issueId, verbose }, 'technical-design');
238
238
  if (verbose) {
239
239
  logInfo(`📋 Feedbacks fetched successfully: ${feedbacksContext.feedbacks.length} feedbacks found`);
240
240
  if (feedbacksContext.feedbacks.length > 0) {
@@ -311,10 +311,10 @@ async function prepareDesignContext(featureId, checklistContext, verbose) {
311
311
  });
312
312
  }
313
313
  }
314
- const designPrompt = createTechnicalDesignPromptWithContext(featureId, finalContextInfo, existingTechnicalDesign, isIncrementalUpdate);
314
+ const designPrompt = createTechnicalDesignPromptWithContext(issueId, finalContextInfo, existingTechnicalDesign, isIncrementalUpdate);
315
315
  return {
316
- featureName: context.feature.name,
317
- featureDescription: context.feature.description || undefined,
316
+ issueName: context.issue.name,
317
+ issueDescription: context.issue.description || undefined,
318
318
  designPrompt,
319
319
  hasExistingDesign,
320
320
  hasFeedbacks,
@@ -1,6 +1,6 @@
1
1
  import { type ChecklistVerificationResult } from '../technical-design-verification/agent.js';
2
2
  export interface TechnicalDesignResult {
3
- featureId: string;
3
+ issueId: string;
4
4
  technicalDesign: string | null;
5
5
  status: 'success' | 'error';
6
6
  summary: string;
@@ -14,12 +14,12 @@ export interface TechnicalDesignResult {
14
14
  /**
15
15
  * Build successful design result
16
16
  */
17
- export declare function buildDesignResult(featureId: string, technicalDesign: string, summary: string, iterations: number, checklistItemResults?: any[]): TechnicalDesignResult;
17
+ export declare function buildDesignResult(issueId: string, technicalDesign: string, summary: string, iterations: number, checklistItemResults?: any[]): TechnicalDesignResult;
18
18
  /**
19
19
  * Build verification failure result
20
20
  */
21
- export declare function buildVerificationFailureResult(featureId: string, technicalDesign: string, verificationResult: ChecklistVerificationResult, iterations: number): TechnicalDesignResult;
21
+ export declare function buildVerificationFailureResult(issueId: string, technicalDesign: string, verificationResult: ChecklistVerificationResult, iterations: number): TechnicalDesignResult;
22
22
  /**
23
23
  * Build error result when no design was generated
24
24
  */
25
- export declare function buildNoResultsError(featureId: string): TechnicalDesignResult;
25
+ export declare function buildNoResultsError(issueId: string): TechnicalDesignResult;
@@ -1,11 +1,11 @@
1
1
  /**
2
2
  * Build successful design result
3
3
  */
4
- export function buildDesignResult(featureId, technicalDesign, summary, iterations,
4
+ export function buildDesignResult(issueId, technicalDesign, summary, iterations,
5
5
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
6
6
  checklistItemResults) {
7
7
  return {
8
- featureId,
8
+ issueId,
9
9
  technicalDesign,
10
10
  status: 'success',
11
11
  summary,
@@ -18,9 +18,9 @@ checklistItemResults) {
18
18
  /**
19
19
  * Build verification failure result
20
20
  */
21
- export function buildVerificationFailureResult(featureId, technicalDesign, verificationResult, iterations) {
21
+ export function buildVerificationFailureResult(issueId, technicalDesign, verificationResult, iterations) {
22
22
  return {
23
- featureId,
23
+ issueId,
24
24
  technicalDesign,
25
25
  status: 'error',
26
26
  summary: `Checklist verification failed after ${iterations} iterations: ${verificationResult.summary}`,
@@ -31,9 +31,9 @@ export function buildVerificationFailureResult(featureId, technicalDesign, verif
31
31
  /**
32
32
  * Build error result when no design was generated
33
33
  */
34
- export function buildNoResultsError(featureId) {
34
+ export function buildNoResultsError(issueId) {
35
35
  return {
36
- featureId,
36
+ issueId,
37
37
  technicalDesign: null,
38
38
  status: 'error',
39
39
  summary: 'Failed to generate technical design - no valid result received',
@@ -1,7 +1,7 @@
1
1
  import { type EdsgerConfig } from '../../types/index.js';
2
2
  import { type ChecklistVerificationResult } from '../technical-design-verification/agent.js';
3
- export declare const createTechnicalDesignSystemPrompt: (_config: EdsgerConfig, mcpServerUrl?: string, mcpToken?: string, featureId?: string, projectDir?: string) => Promise<string>;
4
- export declare const createTechnicalDesignPromptWithContext: (featureId: string, contextInfo: string, existingTechnicalDesign?: string | null, isIncrementalUpdate?: boolean) => string;
3
+ export declare const createTechnicalDesignSystemPrompt: (_config: EdsgerConfig, mcpServerUrl?: string, mcpToken?: string, issueId?: string, projectDir?: string) => Promise<string>;
4
+ export declare const createTechnicalDesignPromptWithContext: (issueId: string, contextInfo: string, existingTechnicalDesign?: string | null, isIncrementalUpdate?: boolean) => string;
5
5
  /**
6
6
  * Create a prompt for the technical design agent to improve based on verification feedback
7
7
  */