rafcode 1.0.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 (370) hide show
  1. package/.claude/settings.local.json +32 -0
  2. package/CLAUDE.md +187 -0
  3. package/LICENSE +21 -0
  4. package/RAF/001-raf-task-improvements/input.md +9 -0
  5. package/RAF/001-raf-task-improvements/outcomes/001-add-decisions-folder.md +21 -0
  6. package/RAF/001-raf-task-improvements/outcomes/002-fix-write-error-on-shutdown.md +22 -0
  7. package/RAF/001-raf-task-improvements/outcomes/003-stash-changes-on-failure.md +34 -0
  8. package/RAF/001-raf-task-improvements/outcomes/004-add-project-name-to-commits.md +28 -0
  9. package/RAF/001-raf-task-improvements/outcomes/005-add-running-time-display.md +36 -0
  10. package/RAF/001-raf-task-improvements/outcomes/006-add-task-name-to-logs.md +22 -0
  11. package/RAF/001-raf-task-improvements/outcomes/007-show-model-at-task-start.md +52 -0
  12. package/RAF/001-raf-task-improvements/outcomes/009-remove-editor-placeholder-text.md +20 -0
  13. package/RAF/001-raf-task-improvements/outcomes/SUMMARY.md +83 -0
  14. package/RAF/001-raf-task-improvements/plans/001-add-decisions-folder.md +38 -0
  15. package/RAF/001-raf-task-improvements/plans/002-fix-write-error-on-shutdown.md +33 -0
  16. package/RAF/001-raf-task-improvements/plans/003-stash-changes-on-failure.md +37 -0
  17. package/RAF/001-raf-task-improvements/plans/004-add-project-name-to-commits.md +34 -0
  18. package/RAF/001-raf-task-improvements/plans/005-add-running-time-display.md +39 -0
  19. package/RAF/001-raf-task-improvements/plans/006-add-task-name-to-logs.md +37 -0
  20. package/RAF/001-raf-task-improvements/plans/009-remove-editor-placeholder-text.md +34 -0
  21. package/RAF/002-raf-task-improvements-execution/decisions/DECISIONS.md +13 -0
  22. package/RAF/002-raf-task-improvements-execution/input.md +3 -0
  23. package/RAF/002-raf-task-improvements-execution/outcomes/001-commit-show-model-at-task-start.md +17 -0
  24. package/RAF/002-raf-task-improvements-execution/outcomes/002-delete-skipped-plan.md +23 -0
  25. package/RAF/002-raf-task-improvements-execution/outcomes/SUMMARY.md +32 -0
  26. package/RAF/002-raf-task-improvements-execution/plans/001-commit-show-model-at-task-start.md +37 -0
  27. package/RAF/002-raf-task-improvements-execution/plans/002-delete-skipped-plan.md +23 -0
  28. package/RAF/003-multi-project-execution/decisions/DECISIONS.md +68 -0
  29. package/RAF/003-multi-project-execution/input.md +6 -0
  30. package/RAF/003-multi-project-execution/outcomes/001-remove-state-json.md +52 -0
  31. package/RAF/003-multi-project-execution/outcomes/002-update-raf-status.md +50 -0
  32. package/RAF/003-multi-project-execution/outcomes/003-simplify-git-logic.md +35 -0
  33. package/RAF/003-multi-project-execution/outcomes/004-auto-commit-planning.md +43 -0
  34. package/RAF/003-multi-project-execution/outcomes/005-rerun-failed-tasks.md +43 -0
  35. package/RAF/003-multi-project-execution/outcomes/006-multi-project-execution.md +42 -0
  36. package/RAF/003-multi-project-execution/outcomes/007-verify-timeout.md +54 -0
  37. package/RAF/003-multi-project-execution/outcomes/008-move-decisions-file.md +38 -0
  38. package/RAF/003-multi-project-execution/outcomes/SUMMARY.md +79 -0
  39. package/RAF/003-multi-project-execution/plans/001-remove-state-json.md +71 -0
  40. package/RAF/003-multi-project-execution/plans/002-update-raf-status.md +65 -0
  41. package/RAF/003-multi-project-execution/plans/003-simplify-git-logic.md +74 -0
  42. package/RAF/003-multi-project-execution/plans/004-auto-commit-planning.md +57 -0
  43. package/RAF/003-multi-project-execution/plans/005-rerun-failed-tasks.md +69 -0
  44. package/RAF/003-multi-project-execution/plans/006-multi-project-execution.md +81 -0
  45. package/RAF/003-multi-project-execution/plans/007-verify-timeout.md +63 -0
  46. package/RAF/003-multi-project-execution/plans/008-move-decisions-file.md +78 -0
  47. package/RAF/004-task-naming-optimization/decisions.md +22 -0
  48. package/RAF/004-task-naming-optimization/input.md +6 -0
  49. package/RAF/004-task-naming-optimization/outcomes/001-remove-summary-file.md +17 -0
  50. package/RAF/004-task-naming-optimization/outcomes/002-base36-project-numbering.md +32 -0
  51. package/RAF/004-task-naming-optimization/outcomes/003-improve-haiku-prompt.md +20 -0
  52. package/RAF/004-task-naming-optimization/outcomes/SUMMARY.md +28 -0
  53. package/RAF/004-task-naming-optimization/plans/001-remove-summary-file.md +34 -0
  54. package/RAF/004-task-naming-optimization/plans/002-base36-project-numbering.md +56 -0
  55. package/RAF/004-task-naming-optimization/plans/003-improve-haiku-prompt.md +50 -0
  56. package/RAF/005-task-naming-improvements/decisions.md +60 -0
  57. package/RAF/005-task-naming-improvements/input.md +2 -0
  58. package/RAF/005-task-naming-improvements/outcomes/001-enhance-identifier-resolution.md +42 -0
  59. package/RAF/005-task-naming-improvements/outcomes/002-add-identifier-support-to-status.md +38 -0
  60. package/RAF/005-task-naming-improvements/outcomes/003-update-do-for-full-folder-names.md +44 -0
  61. package/RAF/005-task-naming-improvements/outcomes/004-implement-amend-flag-for-plan.md +55 -0
  62. package/RAF/005-task-naming-improvements/outcomes/005-commit-outcomes-on-complete.md +47 -0
  63. package/RAF/005-task-naming-improvements/outcomes/006-update-execution-prompt-commit-schema.md +40 -0
  64. package/RAF/005-task-naming-improvements/outcomes/007-allow-pending-task-amendments.md +38 -0
  65. package/RAF/005-task-naming-improvements/outcomes/008-fix-timeout-label.md +24 -0
  66. package/RAF/005-task-naming-improvements/plans/001-enhance-identifier-resolution.md +46 -0
  67. package/RAF/005-task-naming-improvements/plans/002-add-identifier-support-to-status.md +36 -0
  68. package/RAF/005-task-naming-improvements/plans/003-update-do-for-full-folder-names.md +38 -0
  69. package/RAF/005-task-naming-improvements/plans/004-implement-amend-flag-for-plan.md +67 -0
  70. package/RAF/005-task-naming-improvements/plans/005-commit-outcomes-on-complete.md +86 -0
  71. package/RAF/005-task-naming-improvements/plans/006-update-execution-prompt-commit-schema.md +60 -0
  72. package/RAF/005-task-naming-improvements/plans/007-allow-pending-task-amendments.md +60 -0
  73. package/RAF/005-task-naming-improvements/plans/008-fix-timeout-label.md +31 -0
  74. package/RAF/006-fix-double-summary-headers/decisions.md +28 -0
  75. package/RAF/006-fix-double-summary-headers/input.md +3 -0
  76. package/RAF/006-fix-double-summary-headers/outcomes/001-fix-double-summary-headers.md +29 -0
  77. package/RAF/006-fix-double-summary-headers/outcomes/002-update-readme-for-npm.md +31 -0
  78. package/RAF/006-fix-double-summary-headers/outcomes/003-npm-publish-instructions.md +30 -0
  79. package/RAF/006-fix-double-summary-headers/outcomes/004-flexible-project-lookup.md +47 -0
  80. package/RAF/006-fix-double-summary-headers/plans/001-fix-double-summary-headers.md +42 -0
  81. package/RAF/006-fix-double-summary-headers/plans/002-update-readme-for-npm.md +44 -0
  82. package/RAF/006-fix-double-summary-headers/plans/003-npm-publish-instructions.md +45 -0
  83. package/RAF/006-fix-double-summary-headers/plans/004-flexible-project-lookup.md +40 -0
  84. package/RAF/007-improve-outcome-format/decisions.md +28 -0
  85. package/RAF/007-improve-outcome-format/input.md +2 -0
  86. package/RAF/007-improve-outcome-format/outcomes/001-update-execution-prompt.md +10 -0
  87. package/RAF/007-improve-outcome-format/outcomes/002-update-state-derivation.md +17 -0
  88. package/RAF/007-improve-outcome-format/outcomes/003-update-do-command-outcome-handling.md +16 -0
  89. package/RAF/007-improve-outcome-format/outcomes/004-implement-failure-analysis.md +16 -0
  90. package/RAF/007-improve-outcome-format/outcomes/005-update-documentation.md +15 -0
  91. package/RAF/007-improve-outcome-format/plans/001-update-execution-prompt.md +36 -0
  92. package/RAF/007-improve-outcome-format/plans/002-update-state-derivation.md +35 -0
  93. package/RAF/007-improve-outcome-format/plans/003-update-do-command-outcome-handling.md +37 -0
  94. package/RAF/007-improve-outcome-format/plans/004-implement-failure-analysis.md +44 -0
  95. package/RAF/007-improve-outcome-format/plans/005-update-documentation.md +33 -0
  96. package/RAF/008-beautiful-do/decisions.md +31 -0
  97. package/RAF/008-beautiful-do/input.md +1 -0
  98. package/RAF/008-beautiful-do/outcomes/001-terminal-symbols.md +55 -0
  99. package/RAF/008-beautiful-do/outcomes/002-refactor-do-output.md +95 -0
  100. package/RAF/008-beautiful-do/outcomes/003-refactor-status-output.md +71 -0
  101. package/RAF/008-beautiful-do/outcomes/004-simplify-logger.md +53 -0
  102. package/RAF/008-beautiful-do/outcomes/005-add-tests.md +41 -0
  103. package/RAF/008-beautiful-do/plans/001-terminal-symbols.md +41 -0
  104. package/RAF/008-beautiful-do/plans/002-refactor-do-output.md +44 -0
  105. package/RAF/008-beautiful-do/plans/003-refactor-status-output.md +37 -0
  106. package/RAF/008-beautiful-do/plans/004-simplify-logger.md +32 -0
  107. package/RAF/008-beautiful-do/plans/005-add-tests.md +40 -0
  108. package/RAF/009-system-promt-ammend/decisions.md +13 -0
  109. package/RAF/009-system-promt-ammend/input.md +9 -0
  110. package/RAF/009-system-promt-ammend/outcomes/001-model-override.md +79 -0
  111. package/RAF/009-system-promt-ammend/outcomes/002-system-prompt-append.md +51 -0
  112. package/RAF/009-system-promt-ammend/outcomes/003-retry-context.md +60 -0
  113. package/RAF/009-system-promt-ammend/plans/001-model-override.md +61 -0
  114. package/RAF/009-system-promt-ammend/plans/002-system-prompt-append.md +56 -0
  115. package/RAF/009-system-promt-ammend/plans/003-retry-context.md +76 -0
  116. package/RAF/010-outcome-marker-fallback/decisions.md +19 -0
  117. package/RAF/010-outcome-marker-fallback/input.md +1 -0
  118. package/RAF/010-outcome-marker-fallback/outcomes/001-outcome-file-marker-fallback.md +35 -0
  119. package/RAF/010-outcome-marker-fallback/outcomes/002-creative-project-naming.md +47 -0
  120. package/RAF/010-outcome-marker-fallback/plans/001-outcome-file-marker-fallback.md +58 -0
  121. package/RAF/010-outcome-marker-fallback/plans/002-creative-project-naming.md +68 -0
  122. package/RAF/011-do-task-in-commit/decisions.md +22 -0
  123. package/RAF/011-do-task-in-commit/input.md +1 -0
  124. package/RAF/011-do-task-in-commit/outcomes/001-update-execution-prompt.md +54 -0
  125. package/RAF/011-do-task-in-commit/outcomes/002-update-tests.md +61 -0
  126. package/RAF/011-do-task-in-commit/outcomes/003-update-documentation.md +51 -0
  127. package/RAF/011-do-task-in-commit/plans/001-update-execution-prompt.md +46 -0
  128. package/RAF/011-do-task-in-commit/plans/002-update-tests.md +51 -0
  129. package/RAF/011-do-task-in-commit/plans/003-update-documentation.md +45 -0
  130. package/RAF/012-name-picker-buffet/decisions.md +40 -0
  131. package/RAF/012-name-picker-buffet/input.md +6 -0
  132. package/RAF/012-name-picker-buffet/outcomes/001-name-picker-for-raf-plan.md +49 -0
  133. package/RAF/012-name-picker-buffet/outcomes/002-interactive-project-picker-for-raf-do.md +49 -0
  134. package/RAF/012-name-picker-buffet/outcomes/003-raf-status-truncation.md +55 -0
  135. package/RAF/012-name-picker-buffet/outcomes/004-failure-reason-details.md +65 -0
  136. package/RAF/012-name-picker-buffet/outcomes/005-remove-raf-commits.md +57 -0
  137. package/RAF/012-name-picker-buffet/outcomes/006-update-execution-prompt-for-commits.md +47 -0
  138. package/RAF/012-name-picker-buffet/outcomes/007-fix-plan-mode-user-prompt.md +83 -0
  139. package/RAF/012-name-picker-buffet/outcomes/008-add-auto-flag-for-plan-mode.md +77 -0
  140. package/RAF/012-name-picker-buffet/plans/001-name-picker-for-raf-plan.md +47 -0
  141. package/RAF/012-name-picker-buffet/plans/002-interactive-project-picker-for-raf-do.md +43 -0
  142. package/RAF/012-name-picker-buffet/plans/003-raf-status-truncation.md +36 -0
  143. package/RAF/012-name-picker-buffet/plans/004-failure-reason-details.md +46 -0
  144. package/RAF/012-name-picker-buffet/plans/005-remove-raf-commits.md +42 -0
  145. package/RAF/012-name-picker-buffet/plans/006-update-execution-prompt-for-commits.md +47 -0
  146. package/RAF/012-name-picker-buffet/plans/007-fix-plan-mode-user-prompt.md +55 -0
  147. package/RAF/012-name-picker-buffet/plans/008-add-auto-flag-for-plan-mode.md +49 -0
  148. package/RAF/013-dependencies-watchdog/decisions.md +37 -0
  149. package/RAF/013-dependencies-watchdog/input.md +1 -0
  150. package/RAF/013-dependencies-watchdog/outcomes/001-define-dependency-syntax.md +56 -0
  151. package/RAF/013-dependencies-watchdog/outcomes/002-update-planning-prompts.md +60 -0
  152. package/RAF/013-dependencies-watchdog/outcomes/003-parse-dependencies-update-state.md +81 -0
  153. package/RAF/013-dependencies-watchdog/outcomes/004-implement-dependency-checking-in-do.md +116 -0
  154. package/RAF/013-dependencies-watchdog/outcomes/005-update-execution-prompts.md +75 -0
  155. package/RAF/013-dependencies-watchdog/outcomes/006-add-tests.md +100 -0
  156. package/RAF/013-dependencies-watchdog/outcomes/007-add-act-alias.md +46 -0
  157. package/RAF/013-dependencies-watchdog/outcomes/008-add-exit-message.md +52 -0
  158. package/RAF/013-dependencies-watchdog/plans/001-define-dependency-syntax.md +32 -0
  159. package/RAF/013-dependencies-watchdog/plans/002-update-planning-prompts.md +38 -0
  160. package/RAF/013-dependencies-watchdog/plans/003-parse-dependencies-update-state.md +46 -0
  161. package/RAF/013-dependencies-watchdog/plans/004-implement-dependency-checking-in-do.md +48 -0
  162. package/RAF/013-dependencies-watchdog/plans/005-update-execution-prompts.md +44 -0
  163. package/RAF/013-dependencies-watchdog/plans/006-add-tests.md +54 -0
  164. package/RAF/013-dependencies-watchdog/plans/007-add-act-alias.md +26 -0
  165. package/RAF/013-dependencies-watchdog/plans/008-add-exit-message.md +31 -0
  166. package/RAF/014-watchdog/decisions.md +16 -0
  167. package/RAF/014-watchdog/input.md +2 -0
  168. package/RAF/014-watchdog/outcomes/001-amend-flag-position.md +50 -0
  169. package/RAF/014-watchdog/outcomes/002-details-only-on-failure.md +58 -0
  170. package/RAF/014-watchdog/plans/001-amend-flag-position.md +34 -0
  171. package/RAF/014-watchdog/plans/002-details-only-on-failure.md +46 -0
  172. package/RAF/015-name-lottery/decisions.md +14 -0
  173. package/RAF/015-name-lottery/input.md +3 -0
  174. package/RAF/015-name-lottery/outcomes/001-auto-pick-project-name.md +31 -0
  175. package/RAF/015-name-lottery/outcomes/002-mention-plan-files-in-commit.md +23 -0
  176. package/RAF/015-name-lottery/outcomes/003-fix-input-md-in-amend-flow.md +44 -0
  177. package/RAF/015-name-lottery/plans/001-auto-pick-project-name.md +38 -0
  178. package/RAF/015-name-lottery/plans/002-mention-plan-files-in-commit.md +32 -0
  179. package/RAF/015-name-lottery/plans/003-fix-input-md-in-amend-flow.md +44 -0
  180. package/README.md +116 -0
  181. package/dist/commands/do.d.ts +12 -0
  182. package/dist/commands/do.d.ts.map +1 -0
  183. package/dist/commands/do.js +684 -0
  184. package/dist/commands/do.js.map +1 -0
  185. package/dist/commands/plan.d.ts +3 -0
  186. package/dist/commands/plan.d.ts.map +1 -0
  187. package/dist/commands/plan.js +345 -0
  188. package/dist/commands/plan.js.map +1 -0
  189. package/dist/commands/status.d.ts +3 -0
  190. package/dist/commands/status.d.ts.map +1 -0
  191. package/dist/commands/status.js +117 -0
  192. package/dist/commands/status.js.map +1 -0
  193. package/dist/core/claude-runner.d.ts +78 -0
  194. package/dist/core/claude-runner.d.ts.map +1 -0
  195. package/dist/core/claude-runner.js +297 -0
  196. package/dist/core/claude-runner.js.map +1 -0
  197. package/dist/core/editor.d.ts +10 -0
  198. package/dist/core/editor.d.ts.map +1 -0
  199. package/dist/core/editor.js +77 -0
  200. package/dist/core/editor.js.map +1 -0
  201. package/dist/core/failure-analyzer.d.ts +28 -0
  202. package/dist/core/failure-analyzer.d.ts.map +1 -0
  203. package/dist/core/failure-analyzer.js +305 -0
  204. package/dist/core/failure-analyzer.js.map +1 -0
  205. package/dist/core/git.d.ts +42 -0
  206. package/dist/core/git.d.ts.map +1 -0
  207. package/dist/core/git.js +148 -0
  208. package/dist/core/git.js.map +1 -0
  209. package/dist/core/project-manager.d.ts +72 -0
  210. package/dist/core/project-manager.d.ts.map +1 -0
  211. package/dist/core/project-manager.js +193 -0
  212. package/dist/core/project-manager.js.map +1 -0
  213. package/dist/core/retry-handler.d.ts +19 -0
  214. package/dist/core/retry-handler.d.ts.map +1 -0
  215. package/dist/core/retry-handler.js +51 -0
  216. package/dist/core/retry-handler.js.map +1 -0
  217. package/dist/core/shutdown-handler.d.ts +30 -0
  218. package/dist/core/shutdown-handler.d.ts.map +1 -0
  219. package/dist/core/shutdown-handler.js +79 -0
  220. package/dist/core/shutdown-handler.js.map +1 -0
  221. package/dist/core/state-derivation.d.ts +82 -0
  222. package/dist/core/state-derivation.d.ts.map +1 -0
  223. package/dist/core/state-derivation.js +271 -0
  224. package/dist/core/state-derivation.js.map +1 -0
  225. package/dist/core/state-manager.d.ts +54 -0
  226. package/dist/core/state-manager.d.ts.map +1 -0
  227. package/dist/core/state-manager.js +198 -0
  228. package/dist/core/state-manager.js.map +1 -0
  229. package/dist/index.d.ts +3 -0
  230. package/dist/index.d.ts.map +1 -0
  231. package/dist/index.js +16 -0
  232. package/dist/index.js.map +1 -0
  233. package/dist/parsers/output-parser.d.ts +19 -0
  234. package/dist/parsers/output-parser.d.ts.map +1 -0
  235. package/dist/parsers/output-parser.js +137 -0
  236. package/dist/parsers/output-parser.js.map +1 -0
  237. package/dist/prompts/amend.d.ts +20 -0
  238. package/dist/prompts/amend.d.ts.map +1 -0
  239. package/dist/prompts/amend.js +166 -0
  240. package/dist/prompts/amend.js.map +1 -0
  241. package/dist/prompts/execution.d.ts +30 -0
  242. package/dist/prompts/execution.d.ts.map +1 -0
  243. package/dist/prompts/execution.js +179 -0
  244. package/dist/prompts/execution.js.map +1 -0
  245. package/dist/prompts/planning.d.ts +15 -0
  246. package/dist/prompts/planning.d.ts.map +1 -0
  247. package/dist/prompts/planning.js +163 -0
  248. package/dist/prompts/planning.js.map +1 -0
  249. package/dist/types/config.d.ts +26 -0
  250. package/dist/types/config.d.ts.map +1 -0
  251. package/dist/types/config.js +7 -0
  252. package/dist/types/config.js.map +1 -0
  253. package/dist/types/state.d.ts +33 -0
  254. package/dist/types/state.d.ts.map +1 -0
  255. package/dist/types/state.js +28 -0
  256. package/dist/types/state.js.map +1 -0
  257. package/dist/ui/name-picker-subprocess.d.ts +11 -0
  258. package/dist/ui/name-picker-subprocess.d.ts.map +1 -0
  259. package/dist/ui/name-picker-subprocess.js +83 -0
  260. package/dist/ui/name-picker-subprocess.js.map +1 -0
  261. package/dist/ui/name-picker.d.ts +19 -0
  262. package/dist/ui/name-picker.d.ts.map +1 -0
  263. package/dist/ui/name-picker.js +173 -0
  264. package/dist/ui/name-picker.js.map +1 -0
  265. package/dist/ui/project-picker.d.ts +27 -0
  266. package/dist/ui/project-picker.d.ts.map +1 -0
  267. package/dist/ui/project-picker.js +58 -0
  268. package/dist/ui/project-picker.js.map +1 -0
  269. package/dist/utils/config.d.ts +24 -0
  270. package/dist/utils/config.d.ts.map +1 -0
  271. package/dist/utils/config.js +63 -0
  272. package/dist/utils/config.js.map +1 -0
  273. package/dist/utils/logger.d.ts +32 -0
  274. package/dist/utils/logger.d.ts.map +1 -0
  275. package/dist/utils/logger.js +60 -0
  276. package/dist/utils/logger.js.map +1 -0
  277. package/dist/utils/name-generator.d.ts +20 -0
  278. package/dist/utils/name-generator.d.ts.map +1 -0
  279. package/dist/utils/name-generator.js +183 -0
  280. package/dist/utils/name-generator.js.map +1 -0
  281. package/dist/utils/paths.d.ts +132 -0
  282. package/dist/utils/paths.d.ts.map +1 -0
  283. package/dist/utils/paths.js +412 -0
  284. package/dist/utils/paths.js.map +1 -0
  285. package/dist/utils/status-line.d.ts +14 -0
  286. package/dist/utils/status-line.d.ts.map +1 -0
  287. package/dist/utils/status-line.js +36 -0
  288. package/dist/utils/status-line.js.map +1 -0
  289. package/dist/utils/terminal-symbols.d.ts +50 -0
  290. package/dist/utils/terminal-symbols.d.ts.map +1 -0
  291. package/dist/utils/terminal-symbols.js +97 -0
  292. package/dist/utils/terminal-symbols.js.map +1 -0
  293. package/dist/utils/timer.d.ts +17 -0
  294. package/dist/utils/timer.d.ts.map +1 -0
  295. package/dist/utils/timer.js +56 -0
  296. package/dist/utils/timer.js.map +1 -0
  297. package/dist/utils/validation.d.ts +17 -0
  298. package/dist/utils/validation.d.ts.map +1 -0
  299. package/dist/utils/validation.js +106 -0
  300. package/dist/utils/validation.js.map +1 -0
  301. package/dist/utils/version.d.ts +2 -0
  302. package/dist/utils/version.d.ts.map +1 -0
  303. package/dist/utils/version.js +12 -0
  304. package/dist/utils/version.js.map +1 -0
  305. package/jest.config.ts +30 -0
  306. package/package.json +55 -0
  307. package/src/commands/do.ts +829 -0
  308. package/src/commands/plan.ts +422 -0
  309. package/src/commands/status.ts +146 -0
  310. package/src/core/claude-runner.ts +374 -0
  311. package/src/core/editor.ts +85 -0
  312. package/src/core/failure-analyzer.ts +372 -0
  313. package/src/core/git.ts +166 -0
  314. package/src/core/project-manager.ts +243 -0
  315. package/src/core/retry-handler.ts +72 -0
  316. package/src/core/shutdown-handler.ts +93 -0
  317. package/src/core/state-derivation.ts +343 -0
  318. package/src/index.ts +20 -0
  319. package/src/parsers/output-parser.ts +164 -0
  320. package/src/prompts/amend.ts +194 -0
  321. package/src/prompts/execution.ts +223 -0
  322. package/src/prompts/planning.ts +175 -0
  323. package/src/types/config.ts +35 -0
  324. package/src/ui/name-picker-subprocess.ts +96 -0
  325. package/src/ui/name-picker.ts +198 -0
  326. package/src/ui/project-picker.ts +80 -0
  327. package/src/utils/config.ts +69 -0
  328. package/src/utils/logger.ts +81 -0
  329. package/src/utils/name-generator.ts +211 -0
  330. package/src/utils/paths.ts +497 -0
  331. package/src/utils/status-line.ts +45 -0
  332. package/src/utils/terminal-symbols.ts +124 -0
  333. package/src/utils/timer.ts +64 -0
  334. package/src/utils/validation.ts +132 -0
  335. package/src/utils/version.ts +12 -0
  336. package/tests/unit/claude-runner-interactive.test.ts +343 -0
  337. package/tests/unit/claude-runner.test.ts +629 -0
  338. package/tests/unit/command-output.test.ts +295 -0
  339. package/tests/unit/config.test.ts +72 -0
  340. package/tests/unit/dependency-integration.test.ts +559 -0
  341. package/tests/unit/do-blocked-tasks.test.ts +323 -0
  342. package/tests/unit/do-command.test.ts +198 -0
  343. package/tests/unit/do-multiproject.test.ts +270 -0
  344. package/tests/unit/do-rerun.test.ts +270 -0
  345. package/tests/unit/execution-prompt.test.ts +406 -0
  346. package/tests/unit/failure-analyzer.test.ts +276 -0
  347. package/tests/unit/failure-history.test.ts +143 -0
  348. package/tests/unit/git-stash.test.ts +138 -0
  349. package/tests/unit/git.test.ts +80 -0
  350. package/tests/unit/logger.test.ts +132 -0
  351. package/tests/unit/name-generator.test.ts +283 -0
  352. package/tests/unit/name-picker.test.ts +179 -0
  353. package/tests/unit/outcome-content.test.ts +166 -0
  354. package/tests/unit/output-parser.test.ts +178 -0
  355. package/tests/unit/paths.test.ts +741 -0
  356. package/tests/unit/plan-command-amend-flag.test.ts +115 -0
  357. package/tests/unit/plan-command-amend-input.test.ts +156 -0
  358. package/tests/unit/plan-command-auto-flag.test.ts +112 -0
  359. package/tests/unit/plan-command.test.ts +580 -0
  360. package/tests/unit/planning-prompt.test.ts +137 -0
  361. package/tests/unit/project-manager.test.ts +265 -0
  362. package/tests/unit/project-picker.test.ts +338 -0
  363. package/tests/unit/retry-handler.test.ts +89 -0
  364. package/tests/unit/state-derivation.test.ts +714 -0
  365. package/tests/unit/status-command.test.ts +271 -0
  366. package/tests/unit/status-line.test.ts +92 -0
  367. package/tests/unit/terminal-symbols.test.ts +214 -0
  368. package/tests/unit/timer.test.ts +102 -0
  369. package/tests/unit/validation.test.ts +118 -0
  370. package/tsconfig.json +26 -0
@@ -0,0 +1,54 @@
1
+ # Task 001: Update Execution Prompt
2
+
3
+ ## Summary
4
+
5
+ Updated the execution prompt to instruct Claude to write meaningful commit messages describing what was accomplished, instead of using a fixed project-name + task-name format.
6
+
7
+ ## Changes Made
8
+
9
+ ### Files Modified
10
+
11
+ 1. **src/prompts/execution.ts**
12
+ - Removed `projectName` and `taskName` from `ExecutionPromptParams` interface
13
+ - Removed `projectName` and `taskName` from destructuring in `getExecutionPrompt()`
14
+ - Updated commit instructions to use `<description>` placeholder with guidance to write meaningful descriptions
15
+
16
+ 2. **src/commands/do.ts**
17
+ - Removed `projectName` and `taskName` parameters from the `getExecutionPrompt()` call
18
+
19
+ 3. **tests/unit/execution-prompt.test.ts**
20
+ - Updated `baseParams` to remove `projectName` and `taskName`
21
+ - Updated test expectations to check for new `<description>` format
22
+ - Removed tests that checked for project/task name in commit message
23
+ - Added new test to verify instructions for meaningful descriptions
24
+
25
+ ### New Commit Message Format
26
+
27
+ Old format:
28
+ ```
29
+ RAF[005:001] project-name task-name
30
+ ```
31
+
32
+ New format:
33
+ ```
34
+ RAF[005:001] <description>
35
+ - Write a concise description of what was accomplished
36
+ - Focus on the actual change, not the task name
37
+ ```
38
+
39
+ ## Acceptance Criteria Verification
40
+
41
+ - [x] Commit instructions tell Claude to write meaningful descriptions
42
+ - [x] RAF prefix `RAF[project:task]` is preserved in the format
43
+ - [x] `projectName` and `taskName` parameters removed from interface
44
+ - [x] TypeScript compiles without errors (`npm run build` passes)
45
+ - [x] No changes to other prompt sections (outcome file, retry context, etc.)
46
+ - [x] All 543 tests pass
47
+
48
+ <promise>COMPLETE</promise>
49
+
50
+
51
+ ## Details
52
+ - Attempts: 2
53
+ - Elapsed time: 3m 50s
54
+ - Completed at: 2026-01-31T12:35:09.297Z
@@ -0,0 +1,61 @@
1
+ # Task 002: Update Tests
2
+
3
+ ## Summary
4
+
5
+ Verified that the execution prompt unit tests have been updated to reflect the new commit message format. The test changes were already completed as part of Task 001, so this task involved verification rather than implementation.
6
+
7
+ ## Verification Results
8
+
9
+ ### Acceptance Criteria Status
10
+
11
+ - [x] All tests pass with `npm test` - 543 tests pass
12
+ - [x] Tests verify RAF prefix format is preserved - Tests check for `RAF[005:001]`, `RAF[a05:001]`, etc.
13
+ - [x] Tests verify task number padding still works - Tests for single (001), double (012), and triple (123) digit padding
14
+ - [x] Tests verify instruction for meaningful description is present - Test checks for "Write a concise description of what was accomplished"
15
+ - [x] No tests checking for exact `projectName taskName` format - All tests now use `<description>` format
16
+ - [x] Test coverage maintained for commit-related functionality - 27 tests in execution-prompt.test.ts
17
+
18
+ ### Test Changes (from Task 001)
19
+
20
+ The following changes were made to `tests/unit/execution-prompt.test.ts`:
21
+
22
+ 1. **baseParams fixture updated** - Removed `projectName` and `taskName` properties
23
+ 2. **Commit Message Format tests updated**:
24
+ - Changed from checking exact `projectName taskName` format to `<description>` placeholder
25
+ - Added test `should instruct to write meaningful description`
26
+ - Kept all padding tests (001, 012, 123)
27
+ - Kept base36 project number test
28
+ - Kept autoCommit=false test
29
+ 3. **Complete Commit Message tests updated**:
30
+ - All tests now check for `<description>` instead of literal project/task names
31
+
32
+ ### Tests Verified
33
+
34
+ ```
35
+ Commit Message Format
36
+ ✓ should include RAF commit schema format with description placeholder in prompt
37
+ ✓ should instruct to write meaningful description
38
+ ✓ should zero-pad single digit task numbers
39
+ ✓ should zero-pad double digit task numbers
40
+ ✓ should not pad triple digit task numbers
41
+ ✓ should include project number from base36 prefix
42
+ ✓ should not include commit instructions when autoCommit is false
43
+
44
+ Complete Commit Message
45
+ ✓ should generate correct commit message format for task 006
46
+ ✓ should generate correct commit message format for first task
47
+ ✓ should generate correct commit message format for base36 project
48
+ ```
49
+
50
+ ## Notes
51
+
52
+ - No code changes were needed for this task as the test updates were included in Task 001
53
+ - This task served as a verification checkpoint to ensure test coverage is maintained
54
+
55
+ <promise>COMPLETE</promise>
56
+
57
+
58
+ ## Details
59
+ - Attempts: 2
60
+ - Elapsed time: 3m 6s
61
+ - Completed at: 2026-01-31T12:38:15.976Z
@@ -0,0 +1,51 @@
1
+ # Task 003: Update Documentation
2
+
3
+ ## Summary
4
+
5
+ Updated CLAUDE.md to document the new commit message format where Claude writes meaningful descriptions instead of the fixed project-name + task-name format.
6
+
7
+ ## Changes Made
8
+
9
+ ### File Modified
10
+
11
+ **CLAUDE.md** - Git Commit Schema section (lines 113-136)
12
+
13
+ ### Documentation Updates
14
+
15
+ 1. **Separated commit types** - Split the schema into two clearly labeled sections:
16
+ - "RAF-generated commits" (fixed format) - for plan and outcome commits
17
+ - "Claude-generated commits" (during task execution) - for task commits
18
+
19
+ 2. **Updated task commit format** - Changed from:
20
+ ```
21
+ RAF[<project-number>:<task>] - Claude commits during task execution
22
+ ```
23
+ To:
24
+ ```
25
+ RAF[<project-number>:<task>] <description>
26
+ ```
27
+
28
+ 3. **Added explanation** - Added clarification that "Claude writes a concise description of what was accomplished, focusing on the actual change rather than the task name."
29
+
30
+ 4. **Added examples** - Included three realistic commit message examples:
31
+ ```
32
+ RAF[005:001] Add validation for user input fields
33
+ RAF[005:002] Fix null pointer in auth handler
34
+ RAF[a01:003] Refactor database connection pooling
35
+ ```
36
+
37
+ ## Acceptance Criteria Verification
38
+
39
+ - [x] Git Commit Schema section updated with new format
40
+ - [x] Clear explanation that Claude writes the description
41
+ - [x] Example provided showing realistic commit message
42
+ - [x] Distinction between RAF commits and Claude commits maintained
43
+ - [x] No changes to other sections of CLAUDE.md
44
+
45
+ <promise>COMPLETE</promise>
46
+
47
+
48
+ ## Details
49
+ - Attempts: 2
50
+ - Elapsed time: 1m 42s
51
+ - Completed at: 2026-01-31T12:39:58.591Z
@@ -0,0 +1,46 @@
1
+ # Task: Update Execution Prompt
2
+
3
+ ## Objective
4
+ Modify the execution prompt to instruct Claude to write meaningful commit messages describing what the task accomplished, instead of using a fixed project-name + task-name format.
5
+
6
+ ## Context
7
+ Currently, the execution prompt in `src/prompts/execution.ts` tells Claude to commit with a fixed message format:
8
+ ```
9
+ RAF[005:001] project-name task-name
10
+ ```
11
+
12
+ This format is not descriptive of what was actually done. We want Claude to write commit messages with a concise task description, without the project name.
13
+
14
+ ## Requirements
15
+ - Keep the `RAF[project:task]` prefix format (e.g., `RAF[005:001]`)
16
+ - Remove both `projectName` and `taskName` from the commit message
17
+ - Instruct Claude to write a concise description of what was accomplished
18
+ - Do NOT include project name in commit message
19
+ - Provide minimal guidance (not strict rules like conventional commits)
20
+ - Only change commit instructions when `autoCommit` is true
21
+
22
+ Example new format:
23
+ ```
24
+ RAF[005:001] Add validation for user input fields
25
+ RAF[005:002] Fix null pointer in auth handler
26
+ ```
27
+
28
+ ## Implementation Steps
29
+ 1. Read `src/prompts/execution.ts` to understand the current implementation
30
+ 2. Modify the `commitInstructions` section (lines 48-56) to:
31
+ - Keep the RAF prefix format: `RAF[${projectNumber}:${paddedTaskNumber}]`
32
+ - Replace fixed message with instruction to write a meaningful description
33
+ 3. Remove `projectName` and `taskName` parameters from the interface and function since they're no longer needed for commit messages
34
+ 4. Update the `ExecutionPromptParams` interface to remove unused parameters
35
+ 5. Build and verify TypeScript compiles without errors
36
+
37
+ ## Acceptance Criteria
38
+ - [ ] Commit instructions tell Claude to write meaningful descriptions
39
+ - [ ] RAF prefix `RAF[project:task]` is preserved in the format
40
+ - [ ] `projectName` and `taskName` parameters removed from interface (if unused elsewhere)
41
+ - [ ] TypeScript compiles without errors
42
+ - [ ] No changes to other prompt sections (outcome file, retry context, etc.)
43
+
44
+ ## Notes
45
+ - The `projectName` and `taskName` might still be used elsewhere in the prompt or codebase - check before removing from interface
46
+ - The commit message format change only affects the instructions given to Claude, not any RAF code that generates commits
@@ -0,0 +1,51 @@
1
+ # Task: Update Tests
2
+
3
+ ## Objective
4
+ Update the execution prompt unit tests to reflect the new commit message format that instructs Claude to write meaningful descriptions.
5
+
6
+ ## Context
7
+ The test file `tests/unit/execution-prompt.test.ts` has tests that verify the old commit message format:
8
+ - `should include RAF commit schema format in prompt` - checks for exact format like `RAF[005:001] task-naming-improvements enhance-identifier-resolution`
9
+ - `should include task name in commit message` - checks for task name
10
+ - `should include project name in commit message` - checks for project name
11
+ - `Complete Commit Message` describe block - multiple tests checking exact commit message format
12
+
13
+ These tests need to be updated to reflect the new behavior.
14
+
15
+ ## Requirements
16
+ - Update tests to verify the new commit message format
17
+ - Tests should verify:
18
+ - RAF prefix is still present (e.g., `RAF[005:001]`)
19
+ - Task number zero-padding still works
20
+ - Instruction to write concise description is present
21
+ - Git Instructions section is present when autoCommit is true
22
+ - Git Instructions section is absent when autoCommit is false
23
+ - Project name is NOT in the commit message instruction
24
+ - Remove tests that check for exact `projectName taskName` format
25
+ - Update `baseParams` if `projectName`/`taskName` are removed from interface
26
+
27
+ ## Implementation Steps
28
+ 1. Read `tests/unit/execution-prompt.test.ts` to understand current test structure
29
+ 2. Update the `Commit Message Format` describe block:
30
+ - Modify test for exact format to check for new instruction style
31
+ - Keep tests for zero-padding (001, 012, 123)
32
+ - Keep test for base36 project numbers
33
+ - Update or remove tests checking for taskName and projectName in commit message
34
+ 3. Update the `Complete Commit Message` describe block:
35
+ - Remove tests that check for exact `projectName taskName` format
36
+ - Add tests that verify meaningful description instruction is present
37
+ 4. Update `baseParams` fixture if interface changed
38
+ 5. Run tests to verify they pass
39
+
40
+ ## Acceptance Criteria
41
+ - [ ] All tests pass with `npm test`
42
+ - [ ] Tests verify RAF prefix format is preserved
43
+ - [ ] Tests verify task number padding still works
44
+ - [ ] Tests verify instruction for meaningful description is present
45
+ - [ ] No tests checking for exact `projectName taskName` format
46
+ - [ ] Test coverage maintained for commit-related functionality
47
+
48
+ ## Notes
49
+ - Depends on Task 001 being completed first
50
+ - Some tests may need to be removed entirely if they tested specific format that no longer exists
51
+ - Consider adding a test that verifies the wording of the new instruction
@@ -0,0 +1,45 @@
1
+ # Task: Update Documentation
2
+
3
+ ## Objective
4
+ Update CLAUDE.md to reflect the new commit message format where Claude writes meaningful descriptions instead of fixed project-name + task-name.
5
+
6
+ ## Context
7
+ CLAUDE.md documents the Git Commit Schema in the "Architectural Decisions" section (around line 113-121). The current documentation shows:
8
+ ```
9
+ RAF[<project-number>:plan] - After planning phase completes
10
+ RAF[<project-number>:outcome] - After all tasks complete
11
+ RAF[<project-number>:<task>] - Claude commits during task execution
12
+ ```
13
+
14
+ This needs to be updated to reflect that task commits now include meaningful descriptions written by Claude.
15
+
16
+ ## Requirements
17
+ - Update the Git Commit Schema section to show the new format
18
+ - Explain that Claude writes a concise description of what was accomplished
19
+ - Note that project name is NOT included in task commits (only in RAF-generated plan/outcome commits)
20
+ - Keep documentation of `plan` and `outcome` commits unchanged (those are made by RAF, not Claude)
21
+ - Add examples showing realistic commit messages:
22
+ ```
23
+ RAF[005:001] Add validation for user input fields
24
+ RAF[005:002] Fix null pointer in auth handler
25
+ ```
26
+
27
+ ## Implementation Steps
28
+ 1. Read CLAUDE.md and locate the Git Commit Schema section
29
+ 2. Update the task-level commit format to show it includes a description
30
+ 3. Add an example showing what a real commit message might look like
31
+ 4. Ensure the documentation distinguishes between:
32
+ - RAF-generated commits (plan, outcome) - fixed format
33
+ - Claude-generated commits (task) - meaningful description
34
+
35
+ ## Acceptance Criteria
36
+ - [ ] Git Commit Schema section updated with new format
37
+ - [ ] Clear explanation that Claude writes the description
38
+ - [ ] Example provided showing realistic commit message
39
+ - [ ] Distinction between RAF commits and Claude commits maintained
40
+ - [ ] No changes to other sections of CLAUDE.md
41
+
42
+ ## Notes
43
+ - This is documentation only, no code changes
44
+ - The plan and outcome commit formats remain unchanged
45
+ - Only the task-level commits (made by Claude during execution) are affected
@@ -0,0 +1,40 @@
1
+ # Project Decisions
2
+
3
+ ## For the name picker feature: When generating project names, should the name-generating model also have access to the project description (input.md content) to make relevant suggestions?
4
+ Yes, use full context - Claude sees the project description to suggest relevant names.
5
+
6
+ ## How should the name selection UI work?
7
+ Arrow key navigation - Interactive menu with arrow keys to select.
8
+
9
+ ## For the `raf do` project picker: How should pending projects be displayed when no project name is given?
10
+ List all pending with arrow selection - Show all pending projects, user navigates with arrows.
11
+
12
+ ## For `raf status` truncation: When showing only the last 10 projects, how should older projects be indicated?
13
+ "... and N more" at top - Shows count of hidden older projects.
14
+
15
+ ## For failure reason details: Should the bullet points show ALL previous failure attempts, or just the most recent one?
16
+ All attempts - Show bullet point for each failed attempt with reason.
17
+
18
+ ## For the name generation model: Which model should generate project name suggestions?
19
+ Claude Sonnet - More capable model for creative naming.
20
+
21
+ ## For arrow key selection UI (both name picker and project picker): Which library should be used?
22
+ Use a library that supports navigation with arrow keys + custom input option. Options considered:
23
+ - `inquirer-list-input` plugin - allows list selection with arbitrary user input
24
+ - Standard `@inquirer/prompts` with chained prompts (list + conditional input for "Other")
25
+ Recommendation: Use `@inquirer/prompts` (modern inquirer) with "Other (enter custom name)" as a choice that triggers an input prompt.
26
+
27
+ ## Should RAF commit at any point, or should Claude handle all commits?
28
+ Claude handles ALL commits. One task = one commit (code changes + outcome file together). RAF should NOT make any commits - neither after planning nor after project completion. The execution prompt needs to include file location instructions so Claude knows where to write the outcome file.
29
+
30
+ ## Should Claude commit the outcome file in the same commit as code changes, or separately?
31
+ Same commit as code - one commit contains both the code changes and the outcome file.
32
+
33
+ ## How should name generation handle projects with many unrelated tasks?
34
+ When the project description has many unrelated/disconnected tasks, prefer more abstract, metaphorical, or fun names instead of trying to be descriptive. A name like "spring-cleaning" or "grab-bag" is better than trying to describe all the unrelated tasks.
35
+
36
+ ## [Amendment] For the plan mode fix: Should the user's project description from input.md be passed as the user message (with instructions in system prompt)?
37
+ Project description as user message - Pass the input.md content as user message, keep planning instructions in system prompt.
38
+
39
+ ## [Amendment] For the dangerously-skip-permissions flag in plan mode: What should the CLI flag be named?
40
+ CLI flag --auto or -y - A shorter flag name that implies auto-approve, matching common CLI conventions.
@@ -0,0 +1,6 @@
1
+ - [ ] generate several name for project name (3-5) and let user pick or provide own name if user didn't specified name in "raf plan", instruct the name generating model to have variety in style for names (fun, metaphor, descriptive, somewhat related and fun etc)
2
+ - [ ] raf do without project name allows you to pick form pending projects
3
+ - [ ] raf status shows list of 10 last projects (with note on top what list was cut - ...)
4
+ - [ ] in outcome details section add short description for failure reasons (with bullet point for each failed attempt)
5
+ - [ ] don't do output commit since claude does it within the task
6
+ - [ ] instruct claude to do output file commit alongside the code and only after that produce <promise>COMPLETE</promise>
@@ -0,0 +1,49 @@
1
+ # Outcome: Name Picker for `raf plan`
2
+
3
+ ## Summary
4
+
5
+ Implemented an interactive name picker that generates 3-5 creative project name suggestions using Claude Sonnet and allows users to select from them using arrow-key navigation or provide a custom name.
6
+
7
+ ## Key Changes
8
+
9
+ ### New Files
10
+ - **src/ui/name-picker.ts**: Interactive UI component using `@inquirer/prompts` for arrow-key selection
11
+ - **tests/unit/name-picker.test.ts**: Comprehensive tests for the name picker (13 tests)
12
+
13
+ ### Modified Files
14
+ - **package.json**: Added `@inquirer/prompts` as a dependency
15
+ - **src/utils/name-generator.ts**: Added `generateProjectNames()` function that returns 3-5 names with varied styles (metaphorical, fun/playful, action-oriented, abstract, cultural reference)
16
+ - **src/commands/plan.ts**: Updated to use the new multi-name generation and picker flow
17
+ - **tests/unit/name-generator.test.ts**: Added tests for multi-name generation (21 new tests)
18
+
19
+ ## Features Implemented
20
+
21
+ 1. **Multi-name generation**: Claude Sonnet generates 5 names with different styles:
22
+ - Metaphorical (e.g., 'phoenix', 'lighthouse')
23
+ - Fun/Playful (e.g., 'turbo-boost', 'magic-beans')
24
+ - Action-oriented (e.g., 'bug-squasher', 'speed-demon')
25
+ - Abstract (e.g., 'horizon', 'cascade')
26
+ - Cultural reference (e.g., 'atlas', 'merlin')
27
+
28
+ 2. **Interactive selection**: Users can navigate with arrow keys and press Enter to select
29
+
30
+ 3. **Custom name option**: "Other (enter custom name)" option triggers text input with validation
31
+
32
+ 4. **Robust fallback**: Falls back to single word-extraction name if API fails
33
+
34
+ ## Acceptance Criteria Met
35
+
36
+ - ✅ Running `raf plan` without a name shows 3-5 generated names
37
+ - ✅ Names have variety in style (not all the same pattern)
38
+ - ✅ User can select with arrow keys and Enter
39
+ - ✅ User can choose "Other" and type custom name
40
+ - ✅ Selected name is used for project folder creation
41
+ - ✅ All tests pass (577 total)
42
+
43
+ <promise>COMPLETE</promise>
44
+
45
+
46
+ ## Details
47
+ - Attempts: 1
48
+ - Elapsed time: 3m 45s
49
+ - Completed at: 2026-01-31T14:01:55.680Z
@@ -0,0 +1,49 @@
1
+ # Outcome: Interactive Project Picker for `raf do`
2
+
3
+ ## Summary
4
+
5
+ Implemented an interactive project picker that allows users to run `raf do` without specifying a project name. When no arguments are provided, the command displays a list of pending projects with arrow-key navigation for selection.
6
+
7
+ ## Key Changes
8
+
9
+ ### New Files
10
+ - **src/ui/project-picker.ts**: Interactive UI component for selecting pending projects
11
+ - `getPendingProjects()`: Filters projects to only show those with pending/failed tasks
12
+ - `formatProjectChoice()`: Formats project display as "001 fix-auth-bug (2/5 tasks)"
13
+ - `pickPendingProject()`: Shows interactive selection using `@inquirer/prompts`
14
+ - **tests/unit/project-picker.test.ts**: Comprehensive tests for the project picker (14 tests)
15
+
16
+ ### Modified Files
17
+ - **src/commands/do.ts**: Updated to support optional project argument
18
+ - Changed `<projects...>` to `[projects...]` making the argument optional
19
+ - Added interactive picker flow when no arguments provided
20
+ - Shows "No pending projects found" message when list is empty
21
+ - Handles Ctrl+C gracefully for cancellation
22
+
23
+ ## Features Implemented
24
+
25
+ 1. **Pending project detection**: Scans RAF directory for projects with pending or failed tasks
26
+ 2. **Task progress display**: Shows completion status like "(2/5 tasks)" for each project
27
+ 3. **Arrow-key navigation**: Uses `@inquirer/prompts` select for interactive selection
28
+ 4. **Sorted by project number**: Projects shown oldest first (by number)
29
+ 5. **Graceful handling**:
30
+ - Empty list shows friendly message
31
+ - Ctrl+C exits cleanly without error
32
+
33
+ ## Acceptance Criteria Met
34
+
35
+ - [x] Running `raf do` without arguments shows pending projects list
36
+ - [x] Projects show number, name, and progress (X/Y tasks)
37
+ - [x] User can navigate with arrow keys and select with Enter
38
+ - [x] Selected project is executed
39
+ - [x] Empty list shows friendly message "No pending projects found"
40
+ - [x] Ctrl+C exits gracefully
41
+ - [x] All tests pass (591 total)
42
+
43
+ <promise>COMPLETE</promise>
44
+
45
+
46
+ ## Details
47
+ - Attempts: 1
48
+ - Elapsed time: 3m 25s
49
+ - Completed at: 2026-01-31T14:05:20.699Z
@@ -0,0 +1,55 @@
1
+ # Outcome: Enhanced `raf status` with Last 10 Projects Truncation
2
+
3
+ ## Summary
4
+
5
+ Implemented truncation of `raf status` output to show only the last 10 projects by default, with a dimmed indicator at the top showing how many more projects exist.
6
+
7
+ ## Key Changes
8
+
9
+ ### Modified Files
10
+ - **src/commands/status.ts**:
11
+ - Added `MAX_DISPLAYED_PROJECTS = 10` constant
12
+ - Modified `listAllProjects()` to slice to last N projects when total exceeds max
13
+ - Added truncation indicator at top: "... and N more project(s)" in dim text
14
+ - JSON output remains unchanged (returns all projects)
15
+
16
+ - **src/utils/logger.ts**:
17
+ - Added `dim()` method for visually distinct truncation indicator (uses ANSI dim escape code)
18
+
19
+ - **tests/unit/status-command.test.ts**:
20
+ - Added new test suite "Status Command - Truncation Behavior" with 8 tests covering:
21
+ - Projects below max (no truncation)
22
+ - Projects at exactly max
23
+ - Projects above max (truncation)
24
+ - Correct slicing behavior (last N projects)
25
+ - Correct hidden count calculation
26
+ - Ascending order preserved after slicing
27
+ - Edge case: exactly max + 1 projects
28
+
29
+ ## Acceptance Criteria Met
30
+
31
+ - [x] `raf status` shows max 10 projects
32
+ - [x] When > 10 projects exist, shows "... and N more projects" at top
33
+ - [x] Projects are sorted by number (ascending) with newest at bottom
34
+ - [x] When <= 10 projects, no truncation indicator shown
35
+ - [x] Individual project status (`raf status <id>`) unchanged
36
+ - [x] All tests pass (599 total)
37
+
38
+ ## Example Output
39
+
40
+ When there are 15 projects:
41
+ ```
42
+ ... and 5 more projects
43
+ 006 project-f ●○○ (0/3)
44
+ 007 project-g ✓✓● (2/3)
45
+ ...
46
+ 015 project-o ✓✓✓ (3/3)
47
+ ```
48
+
49
+ <promise>COMPLETE</promise>
50
+
51
+
52
+ ## Details
53
+ - Attempts: 1
54
+ - Elapsed time: 2m 7s
55
+ - Completed at: 2026-01-31T14:07:27.762Z
@@ -0,0 +1,65 @@
1
+ # Outcome: Failure Reason Details in Outcome Files
2
+
3
+ ## Summary
4
+
5
+ Added a "Failure History" section to outcome files that lists all previous failure attempts with bullet points for each failure reason, showing the journey from failed attempts to eventual success (or final failure).
6
+
7
+ ## Key Changes
8
+
9
+ ### New Files
10
+ - **tests/unit/failure-history.test.ts**: Comprehensive tests for the `formatFailureHistory` function (12 tests)
11
+
12
+ ### Modified Files
13
+ - **src/commands/do.ts**:
14
+ - Added `formatFailureHistory()` function that formats failure history as a markdown section
15
+ - Added `failureHistory` array to track all failure reasons across retry attempts
16
+ - Updated all failure paths (timeout, context overflow, parsed failure, outcome file failure, no marker) to record failures
17
+ - Integrated failure history into both success and failure outcome generation
18
+ - For success: inserts failure history before `<promise>COMPLETE</promise>` marker
19
+ - For failure: inserts failure history before `<promise>FAILED</promise>` marker
20
+
21
+ ## Features Implemented
22
+
23
+ 1. **Failure tracking**: All failed attempts are recorded with their attempt number and reason
24
+ 2. **Success tracking**: Final successful attempt is shown when preceded by failures
25
+ 3. **Clean runs**: No failure history section is added when there are no failures
26
+ 4. **Proper placement**: Failure history appears before the `<promise>` marker as specified
27
+
28
+ ## Example Output
29
+
30
+ When task fails twice then succeeds:
31
+ ```markdown
32
+ ## Failure History
33
+ - **Attempt 1**: Context overflow detected after 45 minutes
34
+ - **Attempt 2**: API rate limit exceeded
35
+ - **Attempt 3**: Success
36
+
37
+ <promise>COMPLETE</promise>
38
+ ```
39
+
40
+ When task fails all retries:
41
+ ```markdown
42
+ ## Failure History
43
+ - **Attempt 1**: Task timed out
44
+ - **Attempt 2**: Task timed out
45
+ - **Attempt 3**: Context overflow - task too large
46
+
47
+ <promise>FAILED</promise>
48
+ ```
49
+
50
+ ## Acceptance Criteria Met
51
+
52
+ - [x] Outcome files include failure history when any attempts failed
53
+ - [x] Each failed attempt shows attempt number and short reason
54
+ - [x] Successful final attempt also shows in history (if preceded by failures)
55
+ - [x] Clean runs (no failures) don't show failure history section
56
+ - [x] Failure reasons are concise (1-2 sentences)
57
+ - [x] All tests pass (611 total, 12 new for failure history)
58
+
59
+ <promise>COMPLETE</promise>
60
+
61
+
62
+ ## Details
63
+ - Attempts: 1
64
+ - Elapsed time: 3m 29s
65
+ - Completed at: 2026-01-31T14:10:57.686Z
@@ -0,0 +1,57 @@
1
+ # Outcome: Remove All RAF-Side Git Commits
2
+
3
+ ## Summary
4
+
5
+ Removed all git commit operations from RAF. Claude now handles all commits during task execution - one commit per task containing both code changes and the outcome file.
6
+
7
+ ## Key Changes
8
+
9
+ ### Files Modified
10
+
11
+ - **src/commands/plan.ts**:
12
+ - Removed import of `commitProjectFolder`
13
+ - Removed import of `extractProjectNumber` (no longer needed)
14
+ - Removed commit logic after planning phase completes
15
+ - Removed commit logic after amendment phase completes
16
+
17
+ - **src/commands/do.ts**:
18
+ - Removed import of `commitProjectFolder`
19
+ - Removed commit logic when project completes (`isProjectComplete`)
20
+ - Kept `stashChanges` and `hasUncommittedChanges` for failure handling
21
+
22
+ - **src/core/git.ts**:
23
+ - Removed `CommitResult` interface
24
+ - Removed `CommitType` type
25
+ - Removed `commitProjectFolder` function
26
+ - Kept utility functions: `isGitRepo`, `getGitStatus`, `hasUncommittedChanges`, `parseGitStatus`, `getChangedFiles`, `stashChanges`
27
+
28
+ - **CLAUDE.md**:
29
+ - Updated "Git Commit Schema" section
30
+ - Removed "RAF-generated commits" section (`RAF[NNN:plan]`, `RAF[NNN:outcome]`)
31
+ - Updated to reflect that all commits are now Claude-generated during task execution
32
+ - Added note that code changes and outcome file are committed together
33
+
34
+ ### Files Deleted
35
+
36
+ - **tests/unit/git-commit-project.test.ts**: Removed tests for the deleted `commitProjectFolder` function (11 tests)
37
+
38
+ ## Acceptance Criteria Met
39
+
40
+ - [x] `raf plan` does not create any git commits
41
+ - [x] `raf do` does not create any git commits
42
+ - [x] Git stashing on failure still works
43
+ - [x] No errors when running in non-git directories
44
+ - [x] CLAUDE.md updated to reflect new workflow
45
+ - [x] All tests pass (600 total after removing 11 commit tests)
46
+
47
+ ## Notes
48
+
49
+ This is a simplification of the codebase - less code, clearer responsibility. Claude handles all commits during task execution, making the workflow more straightforward and giving Claude full control over what gets committed and when.
50
+
51
+ <promise>COMPLETE</promise>
52
+
53
+
54
+ ## Details
55
+ - Attempts: 1
56
+ - Elapsed time: 2m 55s
57
+ - Completed at: 2026-01-31T14:13:53.207Z