rafcode 1.2.0 → 2.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 (398) hide show
  1. package/CLAUDE.md +118 -22
  2. package/RAF/aaaabt-verbose-chronicle/decisions.md +25 -0
  3. package/RAF/aaaabt-verbose-chronicle/input.md +3 -0
  4. package/RAF/aaaabt-verbose-chronicle/outcomes/01-amend-iteration-references.md +25 -0
  5. package/RAF/aaaabt-verbose-chronicle/outcomes/02-verbose-task-name-display.md +31 -0
  6. package/RAF/aaaabt-verbose-chronicle/outcomes/03-verbose-streaming-fix.md +48 -0
  7. package/RAF/aaaabt-verbose-chronicle/outcomes/04-commit-verification-before-halt.md +56 -0
  8. package/RAF/aaaabt-verbose-chronicle/plans/01-amend-iteration-references.md +35 -0
  9. package/RAF/aaaabt-verbose-chronicle/plans/02-verbose-task-name-display.md +38 -0
  10. package/RAF/aaaabt-verbose-chronicle/plans/03-verbose-streaming-fix.md +45 -0
  11. package/RAF/aaaabt-verbose-chronicle/plans/04-commit-verification-before-halt.md +62 -0
  12. package/RAF/aaaacu-worktree-weaver/decisions.md +88 -0
  13. package/RAF/aaaacu-worktree-weaver/input.md +27 -0
  14. package/RAF/aaaacu-worktree-weaver/outcomes/01-git-worktree-utilities.md +41 -0
  15. package/RAF/aaaacu-worktree-weaver/outcomes/02-worktree-plan-command.md +44 -0
  16. package/RAF/aaaacu-worktree-weaver/outcomes/03-worktree-do-command.md +58 -0
  17. package/RAF/aaaacu-worktree-weaver/outcomes/04-auto-merge-and-cleanup.md +40 -0
  18. package/RAF/aaaacu-worktree-weaver/outcomes/05-worktree-tests.md +43 -0
  19. package/RAF/aaaacu-worktree-weaver/outcomes/06-update-documentation.md +33 -0
  20. package/RAF/aaaacu-worktree-weaver/plans/01-git-worktree-utilities.md +51 -0
  21. package/RAF/aaaacu-worktree-weaver/plans/02-worktree-plan-command.md +93 -0
  22. package/RAF/aaaacu-worktree-weaver/plans/03-worktree-do-command.md +81 -0
  23. package/RAF/aaaacu-worktree-weaver/plans/04-auto-merge-and-cleanup.md +51 -0
  24. package/RAF/aaaacu-worktree-weaver/plans/05-worktree-tests.md +52 -0
  25. package/RAF/aaaacu-worktree-weaver/plans/06-update-documentation.md +55 -0
  26. package/RAF/aaaacv-trim-the-fat/decisions.md +34 -0
  27. package/RAF/aaaacv-trim-the-fat/input.md +5 -0
  28. package/RAF/aaaacv-trim-the-fat/outcomes/01-add-worktree-support-to-status.md +43 -0
  29. package/RAF/aaaacv-trim-the-fat/outcomes/02-remove-multi-project-from-do.md +50 -0
  30. package/RAF/aaaacv-trim-the-fat/outcomes/03-commit-artifacts-on-amend.md +35 -0
  31. package/RAF/aaaacv-trim-the-fat/outcomes/04-worktree-aware-exit-messages.md +36 -0
  32. package/RAF/aaaacv-trim-the-fat/plans/01-add-worktree-support-to-status.md +43 -0
  33. package/RAF/aaaacv-trim-the-fat/plans/02-remove-multi-project-from-do.md +44 -0
  34. package/RAF/aaaacv-trim-the-fat/plans/03-commit-artifacts-on-amend.md +38 -0
  35. package/RAF/aaaacv-trim-the-fat/plans/04-worktree-aware-exit-messages.md +38 -0
  36. package/RAF/aaaacw-prune-cycle/decisions.md +25 -0
  37. package/RAF/aaaacw-prune-cycle/input.md +5 -0
  38. package/RAF/aaaacw-prune-cycle/outcomes/01-create-worktree-from-branch.md +32 -0
  39. package/RAF/aaaacw-prune-cycle/outcomes/02-cleanup-worktree-on-success.md +33 -0
  40. package/RAF/aaaacw-prune-cycle/outcomes/03-amend-recreate-worktree.md +40 -0
  41. package/RAF/aaaacw-prune-cycle/plans/01-create-worktree-from-branch.md +31 -0
  42. package/RAF/aaaacw-prune-cycle/plans/02-cleanup-worktree-on-success.md +38 -0
  43. package/RAF/aaaacw-prune-cycle/plans/03-amend-recreate-worktree.md +50 -0
  44. package/RAF/aaaacx-epoch-shift/decisions.md +25 -0
  45. package/RAF/aaaacx-epoch-shift/input.md +1 -0
  46. package/RAF/aaaacx-epoch-shift/outcomes/01-epoch-id-generation.md +34 -0
  47. package/RAF/aaaacx-epoch-shift/outcomes/02-update-pattern-matching.md +32 -0
  48. package/RAF/aaaacx-epoch-shift/outcomes/03-update-tests.md +59 -0
  49. package/RAF/aaaacx-epoch-shift/outcomes/04-update-documentation.md +30 -0
  50. package/RAF/aaaacx-epoch-shift/plans/01-epoch-id-generation.md +40 -0
  51. package/RAF/aaaacx-epoch-shift/plans/02-update-pattern-matching.md +60 -0
  52. package/RAF/aaaacx-epoch-shift/plans/03-update-tests.md +48 -0
  53. package/RAF/aaaacx-epoch-shift/plans/04-update-documentation.md +44 -0
  54. package/RAF/ahmpro-merge-guardian/decisions.md +25 -0
  55. package/RAF/ahmpro-merge-guardian/input.md +4 -0
  56. package/RAF/ahmpro-merge-guardian/outcomes/001-fix-amend-worktree-commit.md +45 -0
  57. package/RAF/ahmpro-merge-guardian/outcomes/002-base36-task-ids.md +55 -0
  58. package/RAF/ahmpro-merge-guardian/outcomes/003-worktree-pr-creation.md +41 -0
  59. package/RAF/ahmpro-merge-guardian/outcomes/004-post-execution-picker.md +53 -0
  60. package/RAF/ahmpro-merge-guardian/plans/001-fix-amend-worktree-commit.md +39 -0
  61. package/RAF/ahmpro-merge-guardian/plans/002-base36-task-ids.md +43 -0
  62. package/RAF/ahmpro-merge-guardian/plans/003-worktree-pr-creation.md +43 -0
  63. package/RAF/ahmpro-merge-guardian/plans/004-post-execution-picker.md +51 -0
  64. package/RAF/ahnbcu-letterjam/decisions.md +13 -0
  65. package/RAF/ahnbcu-letterjam/input.md +3 -0
  66. package/RAF/ahnbcu-letterjam/outcomes/01-base26-encoding.md +42 -0
  67. package/RAF/ahnbcu-letterjam/outcomes/02-update-tests.md +38 -0
  68. package/RAF/ahnbcu-letterjam/outcomes/03-migrate-command.md +51 -0
  69. package/RAF/ahnbcu-letterjam/outcomes/04-update-documentation.md +29 -0
  70. package/RAF/ahnbcu-letterjam/plans/01-base26-encoding.md +36 -0
  71. package/RAF/ahnbcu-letterjam/plans/02-update-tests.md +37 -0
  72. package/RAF/ahnbcu-letterjam/plans/03-migrate-command.md +49 -0
  73. package/RAF/ahnbcu-letterjam/plans/04-update-documentation.md +39 -0
  74. package/RAF/ahnwrk-worktree-weaver/decisions.md +19 -0
  75. package/RAF/ahnwrk-worktree-weaver/input.md +4 -0
  76. package/RAF/ahnwrk-worktree-weaver/outcomes/01-remove-co-authored-by.md +20 -0
  77. package/RAF/ahnwrk-worktree-weaver/outcomes/02-update-task-status-format.md +21 -0
  78. package/RAF/ahnwrk-worktree-weaver/outcomes/03-worktree-auto-discovery.md +34 -0
  79. package/RAF/ahnwrk-worktree-weaver/outcomes/04-fix-pr-description.md +30 -0
  80. package/RAF/ahnwrk-worktree-weaver/plans/01-remove-co-authored-by.md +26 -0
  81. package/RAF/ahnwrk-worktree-weaver/plans/02-update-task-status-format.md +27 -0
  82. package/RAF/ahnwrk-worktree-weaver/plans/03-worktree-auto-discovery.md +37 -0
  83. package/RAF/ahnwrk-worktree-weaver/plans/04-fix-pr-description.md +50 -0
  84. package/README.md +56 -10
  85. package/dist/commands/do.d.ts +15 -0
  86. package/dist/commands/do.d.ts.map +1 -1
  87. package/dist/commands/do.js +400 -131
  88. package/dist/commands/do.js.map +1 -1
  89. package/dist/commands/migrate.d.ts +14 -0
  90. package/dist/commands/migrate.d.ts.map +1 -0
  91. package/dist/commands/migrate.js +228 -0
  92. package/dist/commands/migrate.js.map +1 -0
  93. package/dist/commands/plan.d.ts.map +1 -1
  94. package/dist/commands/plan.js +237 -40
  95. package/dist/commands/plan.js.map +1 -1
  96. package/dist/commands/status.d.ts.map +1 -1
  97. package/dist/commands/status.js +221 -47
  98. package/dist/commands/status.js.map +1 -1
  99. package/dist/core/claude-runner.d.ts +52 -1
  100. package/dist/core/claude-runner.d.ts.map +1 -1
  101. package/dist/core/claude-runner.js +195 -17
  102. package/dist/core/claude-runner.js.map +1 -1
  103. package/dist/core/git.d.ts +29 -5
  104. package/dist/core/git.d.ts.map +1 -1
  105. package/dist/core/git.js +95 -18
  106. package/dist/core/git.js.map +1 -1
  107. package/dist/core/project-manager.d.ts.map +1 -1
  108. package/dist/core/project-manager.js +2 -2
  109. package/dist/core/project-manager.js.map +1 -1
  110. package/dist/core/pull-request.d.ts +84 -0
  111. package/dist/core/pull-request.d.ts.map +1 -0
  112. package/dist/core/pull-request.js +414 -0
  113. package/dist/core/pull-request.js.map +1 -0
  114. package/dist/core/state-derivation.d.ts +3 -3
  115. package/dist/core/state-derivation.d.ts.map +1 -1
  116. package/dist/core/state-derivation.js +18 -14
  117. package/dist/core/state-derivation.js.map +1 -1
  118. package/dist/core/worktree.d.ts +120 -0
  119. package/dist/core/worktree.d.ts.map +1 -0
  120. package/dist/core/worktree.js +322 -0
  121. package/dist/core/worktree.js.map +1 -0
  122. package/dist/index.js +2 -0
  123. package/dist/index.js.map +1 -1
  124. package/dist/parsers/stream-renderer.d.ts +42 -0
  125. package/dist/parsers/stream-renderer.d.ts.map +1 -0
  126. package/dist/parsers/stream-renderer.js +100 -0
  127. package/dist/parsers/stream-renderer.js.map +1 -0
  128. package/dist/prompts/amend.d.ts +1 -0
  129. package/dist/prompts/amend.d.ts.map +1 -1
  130. package/dist/prompts/amend.js +25 -10
  131. package/dist/prompts/amend.js.map +1 -1
  132. package/dist/prompts/execution.js +5 -5
  133. package/dist/prompts/execution.js.map +1 -1
  134. package/dist/prompts/planning.d.ts +1 -0
  135. package/dist/prompts/planning.d.ts.map +1 -1
  136. package/dist/prompts/planning.js +11 -10
  137. package/dist/prompts/planning.js.map +1 -1
  138. package/dist/types/config.d.ts +5 -0
  139. package/dist/types/config.d.ts.map +1 -1
  140. package/dist/ui/project-picker.d.ts +34 -3
  141. package/dist/ui/project-picker.d.ts.map +1 -1
  142. package/dist/ui/project-picker.js +78 -10
  143. package/dist/ui/project-picker.js.map +1 -1
  144. package/dist/utils/paths.d.ts +38 -43
  145. package/dist/utils/paths.d.ts.map +1 -1
  146. package/dist/utils/paths.js +123 -193
  147. package/dist/utils/paths.js.map +1 -1
  148. package/dist/utils/terminal-symbols.d.ts +2 -2
  149. package/dist/utils/terminal-symbols.js +3 -3
  150. package/dist/utils/terminal-symbols.js.map +1 -1
  151. package/dist/utils/validation.d.ts.map +1 -1
  152. package/dist/utils/validation.js +2 -8
  153. package/dist/utils/validation.js.map +1 -1
  154. package/package.json +1 -1
  155. package/src/commands/do.ts +471 -142
  156. package/src/commands/migrate.ts +269 -0
  157. package/src/commands/plan.ts +264 -40
  158. package/src/commands/status.ts +252 -45
  159. package/src/core/claude-runner.ts +270 -17
  160. package/src/core/git.ts +99 -19
  161. package/src/core/project-manager.ts +2 -1
  162. package/src/core/pull-request.ts +480 -0
  163. package/src/core/state-derivation.ts +18 -14
  164. package/src/core/worktree.ts +357 -0
  165. package/src/index.ts +2 -0
  166. package/src/parsers/stream-renderer.ts +139 -0
  167. package/src/prompts/amend.ts +27 -9
  168. package/src/prompts/execution.ts +5 -5
  169. package/src/prompts/planning.ts +12 -10
  170. package/src/types/config.ts +6 -0
  171. package/src/ui/project-picker.ts +110 -10
  172. package/src/utils/paths.ts +129 -214
  173. package/src/utils/terminal-symbols.ts +3 -3
  174. package/src/utils/validation.ts +2 -9
  175. package/tests/unit/amend-prompt.test.ts +85 -0
  176. package/tests/unit/claude-runner.test.ts +567 -1
  177. package/tests/unit/commit-planning-artifacts-worktree.test.ts +327 -0
  178. package/tests/unit/commit-planning-artifacts.test.ts +303 -35
  179. package/tests/unit/dependency-integration.test.ts +95 -95
  180. package/tests/unit/do-blocked-tasks.test.ts +53 -53
  181. package/tests/unit/do-command.test.ts +39 -132
  182. package/tests/unit/do-rerun.test.ts +65 -65
  183. package/tests/unit/do-worktree-cleanup.test.ts +151 -0
  184. package/tests/unit/execution-prompt.test.ts +71 -60
  185. package/tests/unit/failure-history.test.ts +19 -19
  186. package/tests/unit/git-commit-helpers.test.ts +103 -0
  187. package/tests/unit/git-stash.test.ts +4 -4
  188. package/tests/unit/migrate-command.test.ts +197 -0
  189. package/tests/unit/outcome-content.test.ts +20 -20
  190. package/tests/unit/paths.test.ts +269 -467
  191. package/tests/unit/plan-amend-worktree-recreate.test.ts +246 -0
  192. package/tests/unit/plan-command.test.ts +144 -93
  193. package/tests/unit/planning-prompt.test.ts +41 -4
  194. package/tests/unit/post-execution-picker.test.ts +251 -0
  195. package/tests/unit/project-manager.test.ts +20 -8
  196. package/tests/unit/project-picker.test.ts +425 -42
  197. package/tests/unit/pull-request.test.ts +852 -0
  198. package/tests/unit/state-derivation.test.ts +138 -137
  199. package/tests/unit/status-command.test.ts +344 -76
  200. package/tests/unit/stream-renderer.test.ts +286 -0
  201. package/tests/unit/terminal-symbols.test.ts +4 -4
  202. package/tests/unit/worktree-integration.test.ts +405 -0
  203. package/tests/unit/worktree.test.ts +523 -0
  204. package/tests/unit/do-multiproject.test.ts +0 -270
  205. /package/RAF/{001-raf-task-improvements → aaaaab-raf-task-improvements}/input.md +0 -0
  206. /package/RAF/{001-raf-task-improvements/outcomes/001-add-decisions-folder.md → aaaaab-raf-task-improvements/outcomes/01-add-decisions-folder.md} +0 -0
  207. /package/RAF/{001-raf-task-improvements/outcomes/002-fix-write-error-on-shutdown.md → aaaaab-raf-task-improvements/outcomes/02-fix-write-error-on-shutdown.md} +0 -0
  208. /package/RAF/{001-raf-task-improvements/outcomes/003-stash-changes-on-failure.md → aaaaab-raf-task-improvements/outcomes/03-stash-changes-on-failure.md} +0 -0
  209. /package/RAF/{001-raf-task-improvements/outcomes/004-add-project-name-to-commits.md → aaaaab-raf-task-improvements/outcomes/04-add-project-name-to-commits.md} +0 -0
  210. /package/RAF/{001-raf-task-improvements/outcomes/005-add-running-time-display.md → aaaaab-raf-task-improvements/outcomes/05-add-running-time-display.md} +0 -0
  211. /package/RAF/{001-raf-task-improvements/outcomes/006-add-task-name-to-logs.md → aaaaab-raf-task-improvements/outcomes/06-add-task-name-to-logs.md} +0 -0
  212. /package/RAF/{001-raf-task-improvements/outcomes/007-show-model-at-task-start.md → aaaaab-raf-task-improvements/outcomes/07-show-model-at-task-start.md} +0 -0
  213. /package/RAF/{001-raf-task-improvements/outcomes/009-remove-editor-placeholder-text.md → aaaaab-raf-task-improvements/outcomes/09-remove-editor-placeholder-text.md} +0 -0
  214. /package/RAF/{001-raf-task-improvements → aaaaab-raf-task-improvements}/outcomes/SUMMARY.md +0 -0
  215. /package/RAF/{001-raf-task-improvements/plans/001-add-decisions-folder.md → aaaaab-raf-task-improvements/plans/01-add-decisions-folder.md} +0 -0
  216. /package/RAF/{001-raf-task-improvements/plans/002-fix-write-error-on-shutdown.md → aaaaab-raf-task-improvements/plans/02-fix-write-error-on-shutdown.md} +0 -0
  217. /package/RAF/{001-raf-task-improvements/plans/003-stash-changes-on-failure.md → aaaaab-raf-task-improvements/plans/03-stash-changes-on-failure.md} +0 -0
  218. /package/RAF/{001-raf-task-improvements/plans/004-add-project-name-to-commits.md → aaaaab-raf-task-improvements/plans/04-add-project-name-to-commits.md} +0 -0
  219. /package/RAF/{001-raf-task-improvements/plans/005-add-running-time-display.md → aaaaab-raf-task-improvements/plans/05-add-running-time-display.md} +0 -0
  220. /package/RAF/{001-raf-task-improvements/plans/006-add-task-name-to-logs.md → aaaaab-raf-task-improvements/plans/06-add-task-name-to-logs.md} +0 -0
  221. /package/RAF/{001-raf-task-improvements/plans/009-remove-editor-placeholder-text.md → aaaaab-raf-task-improvements/plans/09-remove-editor-placeholder-text.md} +0 -0
  222. /package/RAF/{002-raf-task-improvements-execution → aaaaac-raf-task-improvements-execution}/decisions/DECISIONS.md +0 -0
  223. /package/RAF/{002-raf-task-improvements-execution → aaaaac-raf-task-improvements-execution}/input.md +0 -0
  224. /package/RAF/{002-raf-task-improvements-execution/outcomes/001-commit-show-model-at-task-start.md → aaaaac-raf-task-improvements-execution/outcomes/01-commit-show-model-at-task-start.md} +0 -0
  225. /package/RAF/{002-raf-task-improvements-execution/outcomes/002-delete-skipped-plan.md → aaaaac-raf-task-improvements-execution/outcomes/02-delete-skipped-plan.md} +0 -0
  226. /package/RAF/{002-raf-task-improvements-execution → aaaaac-raf-task-improvements-execution}/outcomes/SUMMARY.md +0 -0
  227. /package/RAF/{002-raf-task-improvements-execution/plans/001-commit-show-model-at-task-start.md → aaaaac-raf-task-improvements-execution/plans/01-commit-show-model-at-task-start.md} +0 -0
  228. /package/RAF/{002-raf-task-improvements-execution/plans/002-delete-skipped-plan.md → aaaaac-raf-task-improvements-execution/plans/02-delete-skipped-plan.md} +0 -0
  229. /package/RAF/{003-multi-project-execution → aaaaad-multi-project-execution}/decisions/DECISIONS.md +0 -0
  230. /package/RAF/{003-multi-project-execution → aaaaad-multi-project-execution}/input.md +0 -0
  231. /package/RAF/{003-multi-project-execution/outcomes/001-remove-state-json.md → aaaaad-multi-project-execution/outcomes/01-remove-state-json.md} +0 -0
  232. /package/RAF/{003-multi-project-execution/outcomes/002-update-raf-status.md → aaaaad-multi-project-execution/outcomes/02-update-raf-status.md} +0 -0
  233. /package/RAF/{003-multi-project-execution/outcomes/003-simplify-git-logic.md → aaaaad-multi-project-execution/outcomes/03-simplify-git-logic.md} +0 -0
  234. /package/RAF/{003-multi-project-execution/outcomes/004-auto-commit-planning.md → aaaaad-multi-project-execution/outcomes/04-auto-commit-planning.md} +0 -0
  235. /package/RAF/{003-multi-project-execution/outcomes/005-rerun-failed-tasks.md → aaaaad-multi-project-execution/outcomes/05-rerun-failed-tasks.md} +0 -0
  236. /package/RAF/{003-multi-project-execution/outcomes/006-multi-project-execution.md → aaaaad-multi-project-execution/outcomes/06-multi-project-execution.md} +0 -0
  237. /package/RAF/{003-multi-project-execution/outcomes/007-verify-timeout.md → aaaaad-multi-project-execution/outcomes/07-verify-timeout.md} +0 -0
  238. /package/RAF/{003-multi-project-execution/outcomes/008-move-decisions-file.md → aaaaad-multi-project-execution/outcomes/08-move-decisions-file.md} +0 -0
  239. /package/RAF/{003-multi-project-execution → aaaaad-multi-project-execution}/outcomes/SUMMARY.md +0 -0
  240. /package/RAF/{003-multi-project-execution/plans/001-remove-state-json.md → aaaaad-multi-project-execution/plans/01-remove-state-json.md} +0 -0
  241. /package/RAF/{003-multi-project-execution/plans/002-update-raf-status.md → aaaaad-multi-project-execution/plans/02-update-raf-status.md} +0 -0
  242. /package/RAF/{003-multi-project-execution/plans/003-simplify-git-logic.md → aaaaad-multi-project-execution/plans/03-simplify-git-logic.md} +0 -0
  243. /package/RAF/{003-multi-project-execution/plans/004-auto-commit-planning.md → aaaaad-multi-project-execution/plans/04-auto-commit-planning.md} +0 -0
  244. /package/RAF/{003-multi-project-execution/plans/005-rerun-failed-tasks.md → aaaaad-multi-project-execution/plans/05-rerun-failed-tasks.md} +0 -0
  245. /package/RAF/{003-multi-project-execution/plans/006-multi-project-execution.md → aaaaad-multi-project-execution/plans/06-multi-project-execution.md} +0 -0
  246. /package/RAF/{003-multi-project-execution/plans/007-verify-timeout.md → aaaaad-multi-project-execution/plans/07-verify-timeout.md} +0 -0
  247. /package/RAF/{003-multi-project-execution/plans/008-move-decisions-file.md → aaaaad-multi-project-execution/plans/08-move-decisions-file.md} +0 -0
  248. /package/RAF/{004-task-naming-optimization → aaaaae-task-naming-optimization}/decisions.md +0 -0
  249. /package/RAF/{004-task-naming-optimization → aaaaae-task-naming-optimization}/input.md +0 -0
  250. /package/RAF/{004-task-naming-optimization/outcomes/001-remove-summary-file.md → aaaaae-task-naming-optimization/outcomes/01-remove-summary-file.md} +0 -0
  251. /package/RAF/{004-task-naming-optimization/outcomes/002-base36-project-numbering.md → aaaaae-task-naming-optimization/outcomes/02-base36-project-numbering.md} +0 -0
  252. /package/RAF/{004-task-naming-optimization/outcomes/003-improve-haiku-prompt.md → aaaaae-task-naming-optimization/outcomes/03-improve-haiku-prompt.md} +0 -0
  253. /package/RAF/{004-task-naming-optimization → aaaaae-task-naming-optimization}/outcomes/SUMMARY.md +0 -0
  254. /package/RAF/{004-task-naming-optimization/plans/001-remove-summary-file.md → aaaaae-task-naming-optimization/plans/01-remove-summary-file.md} +0 -0
  255. /package/RAF/{004-task-naming-optimization/plans/002-base36-project-numbering.md → aaaaae-task-naming-optimization/plans/02-base36-project-numbering.md} +0 -0
  256. /package/RAF/{004-task-naming-optimization/plans/003-improve-haiku-prompt.md → aaaaae-task-naming-optimization/plans/03-improve-haiku-prompt.md} +0 -0
  257. /package/RAF/{005-task-naming-improvements → aaaaaf-task-naming-improvements}/decisions.md +0 -0
  258. /package/RAF/{005-task-naming-improvements → aaaaaf-task-naming-improvements}/input.md +0 -0
  259. /package/RAF/{005-task-naming-improvements/outcomes/001-enhance-identifier-resolution.md → aaaaaf-task-naming-improvements/outcomes/01-enhance-identifier-resolution.md} +0 -0
  260. /package/RAF/{005-task-naming-improvements/outcomes/002-add-identifier-support-to-status.md → aaaaaf-task-naming-improvements/outcomes/02-add-identifier-support-to-status.md} +0 -0
  261. /package/RAF/{005-task-naming-improvements/outcomes/003-update-do-for-full-folder-names.md → aaaaaf-task-naming-improvements/outcomes/03-update-do-for-full-folder-names.md} +0 -0
  262. /package/RAF/{005-task-naming-improvements/outcomes/004-implement-amend-flag-for-plan.md → aaaaaf-task-naming-improvements/outcomes/04-implement-amend-flag-for-plan.md} +0 -0
  263. /package/RAF/{005-task-naming-improvements/outcomes/005-commit-outcomes-on-complete.md → aaaaaf-task-naming-improvements/outcomes/05-commit-outcomes-on-complete.md} +0 -0
  264. /package/RAF/{005-task-naming-improvements/outcomes/006-update-execution-prompt-commit-schema.md → aaaaaf-task-naming-improvements/outcomes/06-update-execution-prompt-commit-schema.md} +0 -0
  265. /package/RAF/{005-task-naming-improvements/outcomes/007-allow-pending-task-amendments.md → aaaaaf-task-naming-improvements/outcomes/07-allow-pending-task-amendments.md} +0 -0
  266. /package/RAF/{005-task-naming-improvements/outcomes/008-fix-timeout-label.md → aaaaaf-task-naming-improvements/outcomes/08-fix-timeout-label.md} +0 -0
  267. /package/RAF/{005-task-naming-improvements/plans/001-enhance-identifier-resolution.md → aaaaaf-task-naming-improvements/plans/01-enhance-identifier-resolution.md} +0 -0
  268. /package/RAF/{005-task-naming-improvements/plans/002-add-identifier-support-to-status.md → aaaaaf-task-naming-improvements/plans/02-add-identifier-support-to-status.md} +0 -0
  269. /package/RAF/{005-task-naming-improvements/plans/003-update-do-for-full-folder-names.md → aaaaaf-task-naming-improvements/plans/03-update-do-for-full-folder-names.md} +0 -0
  270. /package/RAF/{005-task-naming-improvements/plans/004-implement-amend-flag-for-plan.md → aaaaaf-task-naming-improvements/plans/04-implement-amend-flag-for-plan.md} +0 -0
  271. /package/RAF/{005-task-naming-improvements/plans/005-commit-outcomes-on-complete.md → aaaaaf-task-naming-improvements/plans/05-commit-outcomes-on-complete.md} +0 -0
  272. /package/RAF/{005-task-naming-improvements/plans/006-update-execution-prompt-commit-schema.md → aaaaaf-task-naming-improvements/plans/06-update-execution-prompt-commit-schema.md} +0 -0
  273. /package/RAF/{005-task-naming-improvements/plans/007-allow-pending-task-amendments.md → aaaaaf-task-naming-improvements/plans/07-allow-pending-task-amendments.md} +0 -0
  274. /package/RAF/{005-task-naming-improvements/plans/008-fix-timeout-label.md → aaaaaf-task-naming-improvements/plans/08-fix-timeout-label.md} +0 -0
  275. /package/RAF/{006-fix-double-summary-headers → aaaaag-fix-double-summary-headers}/decisions.md +0 -0
  276. /package/RAF/{006-fix-double-summary-headers → aaaaag-fix-double-summary-headers}/input.md +0 -0
  277. /package/RAF/{006-fix-double-summary-headers/outcomes/001-fix-double-summary-headers.md → aaaaag-fix-double-summary-headers/outcomes/01-fix-double-summary-headers.md} +0 -0
  278. /package/RAF/{006-fix-double-summary-headers/outcomes/002-update-readme-for-npm.md → aaaaag-fix-double-summary-headers/outcomes/02-update-readme-for-npm.md} +0 -0
  279. /package/RAF/{006-fix-double-summary-headers/outcomes/003-npm-publish-instructions.md → aaaaag-fix-double-summary-headers/outcomes/03-npm-publish-instructions.md} +0 -0
  280. /package/RAF/{006-fix-double-summary-headers/outcomes/004-flexible-project-lookup.md → aaaaag-fix-double-summary-headers/outcomes/04-flexible-project-lookup.md} +0 -0
  281. /package/RAF/{006-fix-double-summary-headers/plans/001-fix-double-summary-headers.md → aaaaag-fix-double-summary-headers/plans/01-fix-double-summary-headers.md} +0 -0
  282. /package/RAF/{006-fix-double-summary-headers/plans/002-update-readme-for-npm.md → aaaaag-fix-double-summary-headers/plans/02-update-readme-for-npm.md} +0 -0
  283. /package/RAF/{006-fix-double-summary-headers/plans/003-npm-publish-instructions.md → aaaaag-fix-double-summary-headers/plans/03-npm-publish-instructions.md} +0 -0
  284. /package/RAF/{006-fix-double-summary-headers/plans/004-flexible-project-lookup.md → aaaaag-fix-double-summary-headers/plans/04-flexible-project-lookup.md} +0 -0
  285. /package/RAF/{007-improve-outcome-format → aaaaah-improve-outcome-format}/decisions.md +0 -0
  286. /package/RAF/{007-improve-outcome-format → aaaaah-improve-outcome-format}/input.md +0 -0
  287. /package/RAF/{007-improve-outcome-format/outcomes/001-update-execution-prompt.md → aaaaah-improve-outcome-format/outcomes/01-update-execution-prompt.md} +0 -0
  288. /package/RAF/{007-improve-outcome-format/outcomes/002-update-state-derivation.md → aaaaah-improve-outcome-format/outcomes/02-update-state-derivation.md} +0 -0
  289. /package/RAF/{007-improve-outcome-format/outcomes/003-update-do-command-outcome-handling.md → aaaaah-improve-outcome-format/outcomes/03-update-do-command-outcome-handling.md} +0 -0
  290. /package/RAF/{007-improve-outcome-format/outcomes/004-implement-failure-analysis.md → aaaaah-improve-outcome-format/outcomes/04-implement-failure-analysis.md} +0 -0
  291. /package/RAF/{007-improve-outcome-format/outcomes/005-update-documentation.md → aaaaah-improve-outcome-format/outcomes/05-update-documentation.md} +0 -0
  292. /package/RAF/{007-improve-outcome-format/plans/001-update-execution-prompt.md → aaaaah-improve-outcome-format/plans/01-update-execution-prompt.md} +0 -0
  293. /package/RAF/{007-improve-outcome-format/plans/002-update-state-derivation.md → aaaaah-improve-outcome-format/plans/02-update-state-derivation.md} +0 -0
  294. /package/RAF/{007-improve-outcome-format/plans/003-update-do-command-outcome-handling.md → aaaaah-improve-outcome-format/plans/03-update-do-command-outcome-handling.md} +0 -0
  295. /package/RAF/{007-improve-outcome-format/plans/004-implement-failure-analysis.md → aaaaah-improve-outcome-format/plans/04-implement-failure-analysis.md} +0 -0
  296. /package/RAF/{007-improve-outcome-format/plans/005-update-documentation.md → aaaaah-improve-outcome-format/plans/05-update-documentation.md} +0 -0
  297. /package/RAF/{008-beautiful-do → aaaaai-beautiful-do}/decisions.md +0 -0
  298. /package/RAF/{008-beautiful-do → aaaaai-beautiful-do}/input.md +0 -0
  299. /package/RAF/{008-beautiful-do/outcomes/001-terminal-symbols.md → aaaaai-beautiful-do/outcomes/01-terminal-symbols.md} +0 -0
  300. /package/RAF/{008-beautiful-do/outcomes/002-refactor-do-output.md → aaaaai-beautiful-do/outcomes/02-refactor-do-output.md} +0 -0
  301. /package/RAF/{008-beautiful-do/outcomes/003-refactor-status-output.md → aaaaai-beautiful-do/outcomes/03-refactor-status-output.md} +0 -0
  302. /package/RAF/{008-beautiful-do/outcomes/004-simplify-logger.md → aaaaai-beautiful-do/outcomes/04-simplify-logger.md} +0 -0
  303. /package/RAF/{008-beautiful-do/outcomes/005-add-tests.md → aaaaai-beautiful-do/outcomes/05-add-tests.md} +0 -0
  304. /package/RAF/{008-beautiful-do/plans/001-terminal-symbols.md → aaaaai-beautiful-do/plans/01-terminal-symbols.md} +0 -0
  305. /package/RAF/{008-beautiful-do/plans/002-refactor-do-output.md → aaaaai-beautiful-do/plans/02-refactor-do-output.md} +0 -0
  306. /package/RAF/{008-beautiful-do/plans/003-refactor-status-output.md → aaaaai-beautiful-do/plans/03-refactor-status-output.md} +0 -0
  307. /package/RAF/{008-beautiful-do/plans/004-simplify-logger.md → aaaaai-beautiful-do/plans/04-simplify-logger.md} +0 -0
  308. /package/RAF/{008-beautiful-do/plans/005-add-tests.md → aaaaai-beautiful-do/plans/05-add-tests.md} +0 -0
  309. /package/RAF/{009-system-promt-ammend → aaaaaj-system-promt-ammend}/decisions.md +0 -0
  310. /package/RAF/{009-system-promt-ammend → aaaaaj-system-promt-ammend}/input.md +0 -0
  311. /package/RAF/{009-system-promt-ammend/outcomes/001-model-override.md → aaaaaj-system-promt-ammend/outcomes/01-model-override.md} +0 -0
  312. /package/RAF/{009-system-promt-ammend/outcomes/002-system-prompt-append.md → aaaaaj-system-promt-ammend/outcomes/02-system-prompt-append.md} +0 -0
  313. /package/RAF/{009-system-promt-ammend/outcomes/003-retry-context.md → aaaaaj-system-promt-ammend/outcomes/03-retry-context.md} +0 -0
  314. /package/RAF/{009-system-promt-ammend/plans/001-model-override.md → aaaaaj-system-promt-ammend/plans/01-model-override.md} +0 -0
  315. /package/RAF/{009-system-promt-ammend/plans/002-system-prompt-append.md → aaaaaj-system-promt-ammend/plans/02-system-prompt-append.md} +0 -0
  316. /package/RAF/{009-system-promt-ammend/plans/003-retry-context.md → aaaaaj-system-promt-ammend/plans/03-retry-context.md} +0 -0
  317. /package/RAF/{010-outcome-marker-fallback → aaaabk-outcome-marker-fallback}/decisions.md +0 -0
  318. /package/RAF/{010-outcome-marker-fallback → aaaabk-outcome-marker-fallback}/input.md +0 -0
  319. /package/RAF/{010-outcome-marker-fallback/outcomes/001-outcome-file-marker-fallback.md → aaaabk-outcome-marker-fallback/outcomes/01-outcome-file-marker-fallback.md} +0 -0
  320. /package/RAF/{010-outcome-marker-fallback/outcomes/002-creative-project-naming.md → aaaabk-outcome-marker-fallback/outcomes/02-creative-project-naming.md} +0 -0
  321. /package/RAF/{010-outcome-marker-fallback/plans/001-outcome-file-marker-fallback.md → aaaabk-outcome-marker-fallback/plans/01-outcome-file-marker-fallback.md} +0 -0
  322. /package/RAF/{010-outcome-marker-fallback/plans/002-creative-project-naming.md → aaaabk-outcome-marker-fallback/plans/02-creative-project-naming.md} +0 -0
  323. /package/RAF/{011-do-task-in-commit → aaaabl-do-task-in-commit}/decisions.md +0 -0
  324. /package/RAF/{011-do-task-in-commit → aaaabl-do-task-in-commit}/input.md +0 -0
  325. /package/RAF/{011-do-task-in-commit/outcomes/001-update-execution-prompt.md → aaaabl-do-task-in-commit/outcomes/01-update-execution-prompt.md} +0 -0
  326. /package/RAF/{011-do-task-in-commit/outcomes/002-update-tests.md → aaaabl-do-task-in-commit/outcomes/02-update-tests.md} +0 -0
  327. /package/RAF/{011-do-task-in-commit/outcomes/003-update-documentation.md → aaaabl-do-task-in-commit/outcomes/03-update-documentation.md} +0 -0
  328. /package/RAF/{011-do-task-in-commit/plans/001-update-execution-prompt.md → aaaabl-do-task-in-commit/plans/01-update-execution-prompt.md} +0 -0
  329. /package/RAF/{011-do-task-in-commit/plans/002-update-tests.md → aaaabl-do-task-in-commit/plans/02-update-tests.md} +0 -0
  330. /package/RAF/{011-do-task-in-commit/plans/003-update-documentation.md → aaaabl-do-task-in-commit/plans/03-update-documentation.md} +0 -0
  331. /package/RAF/{012-name-picker-buffet → aaaabm-name-picker-buffet}/decisions.md +0 -0
  332. /package/RAF/{012-name-picker-buffet → aaaabm-name-picker-buffet}/input.md +0 -0
  333. /package/RAF/{012-name-picker-buffet/outcomes/001-name-picker-for-raf-plan.md → aaaabm-name-picker-buffet/outcomes/01-name-picker-for-raf-plan.md} +0 -0
  334. /package/RAF/{012-name-picker-buffet/outcomes/002-interactive-project-picker-for-raf-do.md → aaaabm-name-picker-buffet/outcomes/02-interactive-project-picker-for-raf-do.md} +0 -0
  335. /package/RAF/{012-name-picker-buffet/outcomes/003-raf-status-truncation.md → aaaabm-name-picker-buffet/outcomes/03-raf-status-truncation.md} +0 -0
  336. /package/RAF/{012-name-picker-buffet/outcomes/004-failure-reason-details.md → aaaabm-name-picker-buffet/outcomes/04-failure-reason-details.md} +0 -0
  337. /package/RAF/{012-name-picker-buffet/outcomes/005-remove-raf-commits.md → aaaabm-name-picker-buffet/outcomes/05-remove-raf-commits.md} +0 -0
  338. /package/RAF/{012-name-picker-buffet/outcomes/006-update-execution-prompt-for-commits.md → aaaabm-name-picker-buffet/outcomes/06-update-execution-prompt-for-commits.md} +0 -0
  339. /package/RAF/{012-name-picker-buffet/outcomes/007-fix-plan-mode-user-prompt.md → aaaabm-name-picker-buffet/outcomes/07-fix-plan-mode-user-prompt.md} +0 -0
  340. /package/RAF/{012-name-picker-buffet/outcomes/008-add-auto-flag-for-plan-mode.md → aaaabm-name-picker-buffet/outcomes/08-add-auto-flag-for-plan-mode.md} +0 -0
  341. /package/RAF/{012-name-picker-buffet/plans/001-name-picker-for-raf-plan.md → aaaabm-name-picker-buffet/plans/01-name-picker-for-raf-plan.md} +0 -0
  342. /package/RAF/{012-name-picker-buffet/plans/002-interactive-project-picker-for-raf-do.md → aaaabm-name-picker-buffet/plans/02-interactive-project-picker-for-raf-do.md} +0 -0
  343. /package/RAF/{012-name-picker-buffet/plans/003-raf-status-truncation.md → aaaabm-name-picker-buffet/plans/03-raf-status-truncation.md} +0 -0
  344. /package/RAF/{012-name-picker-buffet/plans/004-failure-reason-details.md → aaaabm-name-picker-buffet/plans/04-failure-reason-details.md} +0 -0
  345. /package/RAF/{012-name-picker-buffet/plans/005-remove-raf-commits.md → aaaabm-name-picker-buffet/plans/05-remove-raf-commits.md} +0 -0
  346. /package/RAF/{012-name-picker-buffet/plans/006-update-execution-prompt-for-commits.md → aaaabm-name-picker-buffet/plans/06-update-execution-prompt-for-commits.md} +0 -0
  347. /package/RAF/{012-name-picker-buffet/plans/007-fix-plan-mode-user-prompt.md → aaaabm-name-picker-buffet/plans/07-fix-plan-mode-user-prompt.md} +0 -0
  348. /package/RAF/{012-name-picker-buffet/plans/008-add-auto-flag-for-plan-mode.md → aaaabm-name-picker-buffet/plans/08-add-auto-flag-for-plan-mode.md} +0 -0
  349. /package/RAF/{013-dependencies-watchdog → aaaabn-dependencies-watchdog}/decisions.md +0 -0
  350. /package/RAF/{013-dependencies-watchdog → aaaabn-dependencies-watchdog}/input.md +0 -0
  351. /package/RAF/{013-dependencies-watchdog/outcomes/001-define-dependency-syntax.md → aaaabn-dependencies-watchdog/outcomes/01-define-dependency-syntax.md} +0 -0
  352. /package/RAF/{013-dependencies-watchdog/outcomes/002-update-planning-prompts.md → aaaabn-dependencies-watchdog/outcomes/02-update-planning-prompts.md} +0 -0
  353. /package/RAF/{013-dependencies-watchdog/outcomes/003-parse-dependencies-update-state.md → aaaabn-dependencies-watchdog/outcomes/03-parse-dependencies-update-state.md} +0 -0
  354. /package/RAF/{013-dependencies-watchdog/outcomes/004-implement-dependency-checking-in-do.md → aaaabn-dependencies-watchdog/outcomes/04-implement-dependency-checking-in-do.md} +0 -0
  355. /package/RAF/{013-dependencies-watchdog/outcomes/005-update-execution-prompts.md → aaaabn-dependencies-watchdog/outcomes/05-update-execution-prompts.md} +0 -0
  356. /package/RAF/{013-dependencies-watchdog/outcomes/006-add-tests.md → aaaabn-dependencies-watchdog/outcomes/06-add-tests.md} +0 -0
  357. /package/RAF/{013-dependencies-watchdog/outcomes/007-add-act-alias.md → aaaabn-dependencies-watchdog/outcomes/07-add-act-alias.md} +0 -0
  358. /package/RAF/{013-dependencies-watchdog/outcomes/008-add-exit-message.md → aaaabn-dependencies-watchdog/outcomes/08-add-exit-message.md} +0 -0
  359. /package/RAF/{013-dependencies-watchdog/plans/001-define-dependency-syntax.md → aaaabn-dependencies-watchdog/plans/01-define-dependency-syntax.md} +0 -0
  360. /package/RAF/{013-dependencies-watchdog/plans/002-update-planning-prompts.md → aaaabn-dependencies-watchdog/plans/02-update-planning-prompts.md} +0 -0
  361. /package/RAF/{013-dependencies-watchdog/plans/003-parse-dependencies-update-state.md → aaaabn-dependencies-watchdog/plans/03-parse-dependencies-update-state.md} +0 -0
  362. /package/RAF/{013-dependencies-watchdog/plans/004-implement-dependency-checking-in-do.md → aaaabn-dependencies-watchdog/plans/04-implement-dependency-checking-in-do.md} +0 -0
  363. /package/RAF/{013-dependencies-watchdog/plans/005-update-execution-prompts.md → aaaabn-dependencies-watchdog/plans/05-update-execution-prompts.md} +0 -0
  364. /package/RAF/{013-dependencies-watchdog/plans/006-add-tests.md → aaaabn-dependencies-watchdog/plans/06-add-tests.md} +0 -0
  365. /package/RAF/{013-dependencies-watchdog/plans/007-add-act-alias.md → aaaabn-dependencies-watchdog/plans/07-add-act-alias.md} +0 -0
  366. /package/RAF/{013-dependencies-watchdog/plans/008-add-exit-message.md → aaaabn-dependencies-watchdog/plans/08-add-exit-message.md} +0 -0
  367. /package/RAF/{014-watchdog → aaaabo-watchdog}/decisions.md +0 -0
  368. /package/RAF/{014-watchdog → aaaabo-watchdog}/input.md +0 -0
  369. /package/RAF/{014-watchdog/outcomes/001-amend-flag-position.md → aaaabo-watchdog/outcomes/01-amend-flag-position.md} +0 -0
  370. /package/RAF/{014-watchdog/outcomes/002-details-only-on-failure.md → aaaabo-watchdog/outcomes/02-details-only-on-failure.md} +0 -0
  371. /package/RAF/{014-watchdog/plans/001-amend-flag-position.md → aaaabo-watchdog/plans/01-amend-flag-position.md} +0 -0
  372. /package/RAF/{014-watchdog/plans/002-details-only-on-failure.md → aaaabo-watchdog/plans/02-details-only-on-failure.md} +0 -0
  373. /package/RAF/{015-name-lottery → aaaabp-name-lottery}/decisions.md +0 -0
  374. /package/RAF/{015-name-lottery → aaaabp-name-lottery}/input.md +0 -0
  375. /package/RAF/{015-name-lottery/outcomes/001-auto-pick-project-name.md → aaaabp-name-lottery/outcomes/01-auto-pick-project-name.md} +0 -0
  376. /package/RAF/{015-name-lottery/outcomes/002-mention-plan-files-in-commit.md → aaaabp-name-lottery/outcomes/02-mention-plan-files-in-commit.md} +0 -0
  377. /package/RAF/{015-name-lottery/outcomes/003-fix-input-md-in-amend-flow.md → aaaabp-name-lottery/outcomes/03-fix-input-md-in-amend-flow.md} +0 -0
  378. /package/RAF/{015-name-lottery/plans/001-auto-pick-project-name.md → aaaabp-name-lottery/plans/01-auto-pick-project-name.md} +0 -0
  379. /package/RAF/{015-name-lottery/plans/002-mention-plan-files-in-commit.md → aaaabp-name-lottery/plans/02-mention-plan-files-in-commit.md} +0 -0
  380. /package/RAF/{015-name-lottery/plans/003-fix-input-md-in-amend-flow.md → aaaabp-name-lottery/plans/03-fix-input-md-in-amend-flow.md} +0 -0
  381. /package/RAF/{016-planning-scalpel → aaaabq-planning-scalpel}/decisions.md +0 -0
  382. /package/RAF/{016-planning-scalpel → aaaabq-planning-scalpel}/input.md +0 -0
  383. /package/RAF/{016-planning-scalpel/outcomes/001-update-git-commit-instructions.md → aaaabq-planning-scalpel/outcomes/01-update-git-commit-instructions.md} +0 -0
  384. /package/RAF/{016-planning-scalpel/plans/001-update-git-commit-instructions.md → aaaabq-planning-scalpel/plans/01-update-git-commit-instructions.md} +0 -0
  385. /package/RAF/{017-decision-vault → aaaabr-decision-vault}/decisions.md +0 -0
  386. /package/RAF/{017-decision-vault → aaaabr-decision-vault}/input.md +0 -0
  387. /package/RAF/{017-decision-vault/outcomes/001-create-git-commit-utility.md → aaaabr-decision-vault/outcomes/01-create-git-commit-utility.md} +0 -0
  388. /package/RAF/{017-decision-vault/outcomes/002-integrate-commit-into-plan.md → aaaabr-decision-vault/outcomes/02-integrate-commit-into-plan.md} +0 -0
  389. /package/RAF/{017-decision-vault/outcomes/003-add-tests-for-planning-commit.md → aaaabr-decision-vault/outcomes/03-add-tests-for-planning-commit.md} +0 -0
  390. /package/RAF/{017-decision-vault/plans/001-create-git-commit-utility.md → aaaabr-decision-vault/plans/01-create-git-commit-utility.md} +0 -0
  391. /package/RAF/{017-decision-vault/plans/002-integrate-commit-into-plan.md → aaaabr-decision-vault/plans/02-integrate-commit-into-plan.md} +0 -0
  392. /package/RAF/{017-decision-vault/plans/003-add-tests-for-planning-commit.md → aaaabr-decision-vault/plans/03-add-tests-for-planning-commit.md} +0 -0
  393. /package/RAF/{018-workflow-forge → aaaabs-workflow-forge}/decisions.md +0 -0
  394. /package/RAF/{018-workflow-forge → aaaabs-workflow-forge}/input.md +0 -0
  395. /package/RAF/{018-workflow-forge/outcomes/001-add-task-number-progress.md → aaaabs-workflow-forge/outcomes/01-add-task-number-progress.md} +0 -0
  396. /package/RAF/{018-workflow-forge/outcomes/002-update-plan-do-prompts.md → aaaabs-workflow-forge/outcomes/02-update-plan-do-prompts.md} +0 -0
  397. /package/RAF/{018-workflow-forge/plans/001-add-task-number-progress.md → aaaabs-workflow-forge/plans/01-add-task-number-progress.md} +0 -0
  398. /package/RAF/{018-workflow-forge/plans/002-update-plan-do-prompts.md → aaaabs-workflow-forge/plans/02-update-plan-do-prompts.md} +0 -0
@@ -2,21 +2,21 @@ import { getExecutionPrompt, ExecutionPromptParams, summarizeOutcome } from '../
2
2
 
3
3
  describe('Execution Prompt', () => {
4
4
  const baseParams: ExecutionPromptParams = {
5
- projectPath: '/Users/test/RAF/005-task-naming-improvements',
6
- planPath: '/Users/test/RAF/005-task-naming-improvements/plans/001-enhance-identifier-resolution.md',
7
- taskId: '001',
5
+ projectPath: '/Users/test/RAF/aaabmm-task-naming-improvements',
6
+ planPath: '/Users/test/RAF/aaabmm-task-naming-improvements/plans/01-enhance-identifier-resolution.md',
7
+ taskId: '01',
8
8
  taskNumber: 1,
9
9
  totalTasks: 5,
10
10
  previousOutcomes: [],
11
11
  autoCommit: true,
12
- projectNumber: '005',
13
- outcomeFilePath: '/Users/test/RAF/005-task-naming-improvements/outcomes/001-enhance-identifier-resolution.md',
12
+ projectNumber: 'aaabmm',
13
+ outcomeFilePath: '/Users/test/RAF/aaabmm-task-naming-improvements/outcomes/01-enhance-identifier-resolution.md',
14
14
  };
15
15
 
16
16
  describe('Commit Message Format', () => {
17
17
  it('should include RAF commit schema format with description placeholder in prompt', () => {
18
18
  const prompt = getExecutionPrompt(baseParams);
19
- expect(prompt).toContain('RAF[005:001] <description>');
19
+ expect(prompt).toContain('RAF[aaabmm:01] <description>');
20
20
  });
21
21
 
22
22
  it('should instruct to write meaningful description', () => {
@@ -28,25 +28,25 @@ describe('Execution Prompt', () => {
28
28
  it('should zero-pad single digit task numbers', () => {
29
29
  const params = { ...baseParams, taskNumber: 1 };
30
30
  const prompt = getExecutionPrompt(params);
31
- expect(prompt).toContain('RAF[005:001]');
31
+ expect(prompt).toContain('RAF[aaabmm:01]');
32
32
  });
33
33
 
34
34
  it('should zero-pad double digit task numbers', () => {
35
35
  const params = { ...baseParams, taskNumber: 12 };
36
36
  const prompt = getExecutionPrompt(params);
37
- expect(prompt).toContain('RAF[005:012]');
37
+ expect(prompt).toContain('RAF[aaabmm:0c]');
38
38
  });
39
39
 
40
- it('should not pad triple digit task numbers', () => {
40
+ it('should encode large task numbers in base36', () => {
41
41
  const params = { ...baseParams, taskNumber: 123 };
42
42
  const prompt = getExecutionPrompt(params);
43
- expect(prompt).toContain('RAF[005:123]');
43
+ expect(prompt).toContain('RAF[aaabmm:3f]');
44
44
  });
45
45
 
46
- it('should include project number from base36 prefix', () => {
47
- const params = { ...baseParams, projectNumber: 'a05' };
46
+ it('should include project number from base26 prefix', () => {
47
+ const params = { ...baseParams, projectNumber: 'abcdef' };
48
48
  const prompt = getExecutionPrompt(params);
49
- expect(prompt).toContain('RAF[a05:001]');
49
+ expect(prompt).toContain('RAF[abcdef:01]');
50
50
  });
51
51
 
52
52
  it('should not include commit instructions when autoCommit is false', () => {
@@ -69,55 +69,66 @@ describe('Execution Prompt', () => {
69
69
  expect(prompt).not.toContain('On Failure');
70
70
  expect(prompt).not.toContain('do NOT commit');
71
71
  });
72
+
73
+ it('should instruct not to add Co-Authored-By or other trailers', () => {
74
+ const prompt = getExecutionPrompt(baseParams);
75
+ expect(prompt).toContain('Do NOT add Co-Authored-By or any other trailers');
76
+ });
77
+
78
+ it('should specify commit message must be a single line', () => {
79
+ const prompt = getExecutionPrompt(baseParams);
80
+ expect(prompt).toContain('SINGLE LINE');
81
+ expect(prompt).toContain('no body, no trailers');
82
+ });
72
83
  });
73
84
 
74
85
  describe('Complete Commit Message', () => {
75
86
  it('should generate correct commit message format for task 006', () => {
76
87
  const params: ExecutionPromptParams = {
77
- projectPath: '/Users/test/RAF/005-task-naming-improvements',
78
- planPath: '/Users/test/RAF/005-task-naming-improvements/plans/006-update-execution-prompt.md',
79
- taskId: '006',
88
+ projectPath: '/Users/test/RAF/aaabmm-task-naming-improvements',
89
+ planPath: '/Users/test/RAF/aaabmm-task-naming-improvements/plans/06-update-execution-prompt.md',
90
+ taskId: '06',
80
91
  taskNumber: 6,
81
92
  totalTasks: 7,
82
93
  previousOutcomes: [],
83
94
  autoCommit: true,
84
- projectNumber: '005',
85
- outcomeFilePath: '/Users/test/RAF/005-task-naming-improvements/outcomes/006-update-execution-prompt.md',
95
+ projectNumber: 'aaabmm',
96
+ outcomeFilePath: '/Users/test/RAF/aaabmm-task-naming-improvements/outcomes/06-update-execution-prompt.md',
86
97
  };
87
98
  const prompt = getExecutionPrompt(params);
88
- expect(prompt).toContain('RAF[005:006] <description>');
99
+ expect(prompt).toContain('RAF[aaabmm:06] <description>');
89
100
  });
90
101
 
91
102
  it('should generate correct commit message format for first task', () => {
92
103
  const params: ExecutionPromptParams = {
93
- projectPath: '/Users/test/RAF/001-fix-bug',
94
- planPath: '/Users/test/RAF/001-fix-bug/plans/001-identify-issue.md',
95
- taskId: '001',
104
+ projectPath: '/Users/test/RAF/aaaaab-fix-bug',
105
+ planPath: '/Users/test/RAF/aaaaab-fix-bug/plans/01-identify-issue.md',
106
+ taskId: '01',
96
107
  taskNumber: 1,
97
108
  totalTasks: 3,
98
109
  previousOutcomes: [],
99
110
  autoCommit: true,
100
- projectNumber: '001',
101
- outcomeFilePath: '/Users/test/RAF/001-fix-bug/outcomes/001-identify-issue.md',
111
+ projectNumber: 'aaaaab',
112
+ outcomeFilePath: '/Users/test/RAF/aaaaab-fix-bug/outcomes/01-identify-issue.md',
102
113
  };
103
114
  const prompt = getExecutionPrompt(params);
104
- expect(prompt).toContain('RAF[001:001] <description>');
115
+ expect(prompt).toContain('RAF[aaaaab:01] <description>');
105
116
  });
106
117
 
107
- it('should generate correct commit message format for base36 project', () => {
118
+ it('should generate correct commit message format for base26 project', () => {
108
119
  const params: ExecutionPromptParams = {
109
- projectPath: '/Users/test/RAF/a0b-feature-branch',
110
- planPath: '/Users/test/RAF/a0b-feature-branch/plans/002-implement-feature.md',
111
- taskId: '002',
120
+ projectPath: '/Users/test/RAF/abcdef-feature-branch',
121
+ planPath: '/Users/test/RAF/abcdef-feature-branch/plans/02-implement-feature.md',
122
+ taskId: '02',
112
123
  taskNumber: 2,
113
124
  totalTasks: 4,
114
125
  previousOutcomes: [],
115
126
  autoCommit: true,
116
- projectNumber: 'a0b',
117
- outcomeFilePath: '/Users/test/RAF/a0b-feature-branch/outcomes/002-implement-feature.md',
127
+ projectNumber: 'abcdef',
128
+ outcomeFilePath: '/Users/test/RAF/abcdef-feature-branch/outcomes/02-implement-feature.md',
118
129
  };
119
130
  const prompt = getExecutionPrompt(params);
120
- expect(prompt).toContain('RAF[a0b:002] <description>');
131
+ expect(prompt).toContain('RAF[abcdef:02] <description>');
121
132
  });
122
133
  });
123
134
 
@@ -129,17 +140,17 @@ describe('Execution Prompt', () => {
129
140
 
130
141
  it('should include task ID', () => {
131
142
  const prompt = getExecutionPrompt(baseParams);
132
- expect(prompt).toContain('Task ID: 001');
143
+ expect(prompt).toContain('Task ID: 01');
133
144
  });
134
145
 
135
146
  it('should include project path', () => {
136
147
  const prompt = getExecutionPrompt(baseParams);
137
- expect(prompt).toContain('Project folder: /Users/test/RAF/005-task-naming-improvements');
148
+ expect(prompt).toContain('Project folder: /Users/test/RAF/aaabmm-task-naming-improvements');
138
149
  });
139
150
 
140
151
  it('should include plan path', () => {
141
152
  const prompt = getExecutionPrompt(baseParams);
142
- expect(prompt).toContain('plans/001-enhance-identifier-resolution.md');
153
+ expect(prompt).toContain('plans/01-enhance-identifier-resolution.md');
143
154
  });
144
155
  });
145
156
 
@@ -197,12 +208,12 @@ describe('Execution Prompt', () => {
197
208
  const params = {
198
209
  ...baseParams,
199
210
  previousOutcomes: [
200
- { taskId: '001', content: '## Status: SUCCESS\n\nTask completed successfully.' },
211
+ { taskId: '01', content: '## Status: SUCCESS\n\nTask completed successfully.' },
201
212
  ],
202
213
  };
203
214
  const prompt = getExecutionPrompt(params);
204
215
  expect(prompt).toContain('Previous Task Outcomes');
205
- expect(prompt).toContain('### Task 001');
216
+ expect(prompt).toContain('### Task 01');
206
217
  expect(prompt).toContain('## Status: SUCCESS');
207
218
  });
208
219
 
@@ -232,12 +243,12 @@ describe('Execution Prompt', () => {
232
243
  const params = {
233
244
  ...baseParams,
234
245
  attemptNumber: 2,
235
- previousOutcomeFile: '/Users/test/RAF/005-task-naming-improvements/outcomes/001-enhance-identifier-resolution.md',
246
+ previousOutcomeFile: '/Users/test/RAF/aaabmm-task-naming-improvements/outcomes/01-enhance-identifier-resolution.md',
236
247
  };
237
248
  const prompt = getExecutionPrompt(params);
238
249
  expect(prompt).toContain('## Retry Context');
239
250
  expect(prompt).toContain('This is attempt 2');
240
- expect(prompt).toContain('**Previous outcome file**: /Users/test/RAF/005-task-naming-improvements/outcomes/001-enhance-identifier-resolution.md');
251
+ expect(prompt).toContain('**Previous outcome file**: /Users/test/RAF/aaabmm-task-naming-improvements/outcomes/01-enhance-identifier-resolution.md');
241
252
  });
242
253
 
243
254
  it('should include retry context on third attempt', () => {
@@ -293,7 +304,7 @@ describe('Execution Prompt', () => {
293
304
  it('should not include dependency context when dependencyOutcomes is empty', () => {
294
305
  const params = {
295
306
  ...baseParams,
296
- dependencyIds: ['001'],
307
+ dependencyIds: ['01'],
297
308
  dependencyOutcomes: [],
298
309
  };
299
310
  const prompt = getExecutionPrompt(params);
@@ -303,47 +314,47 @@ describe('Execution Prompt', () => {
303
314
  it('should include dependency context when task has dependencies with outcomes', () => {
304
315
  const params = {
305
316
  ...baseParams,
306
- taskId: '002',
317
+ taskId: '02',
307
318
  taskNumber: 2,
308
- dependencyIds: ['001'],
319
+ dependencyIds: ['01'],
309
320
  dependencyOutcomes: [
310
- { taskId: '001', content: '## Summary\n\nImplemented the base feature.\n\n<promise>COMPLETE</promise>' },
321
+ { taskId: '01', content: '## Summary\n\nImplemented the base feature.\n\n<promise>COMPLETE</promise>' },
311
322
  ],
312
323
  };
313
324
  const prompt = getExecutionPrompt(params);
314
325
  expect(prompt).toContain('## Dependency Context');
315
- expect(prompt).toContain('**Dependencies**: 001');
316
- expect(prompt).toContain('### Task 001');
326
+ expect(prompt).toContain('**Dependencies**: 01');
327
+ expect(prompt).toContain('### Task 01');
317
328
  expect(prompt).toContain('Implemented the base feature');
318
329
  });
319
330
 
320
331
  it('should include multiple dependency outcomes', () => {
321
332
  const params = {
322
333
  ...baseParams,
323
- taskId: '003',
334
+ taskId: '03',
324
335
  taskNumber: 3,
325
- dependencyIds: ['001', '002'],
336
+ dependencyIds: ['01', '02'],
326
337
  dependencyOutcomes: [
327
- { taskId: '001', content: '## Summary\n\nFirst task done.\n\n<promise>COMPLETE</promise>' },
328
- { taskId: '002', content: '## Summary\n\nSecond task done.\n\n<promise>COMPLETE</promise>' },
338
+ { taskId: '01', content: '## Summary\n\nFirst task done.\n\n<promise>COMPLETE</promise>' },
339
+ { taskId: '02', content: '## Summary\n\nSecond task done.\n\n<promise>COMPLETE</promise>' },
329
340
  ],
330
341
  };
331
342
  const prompt = getExecutionPrompt(params);
332
- expect(prompt).toContain('**Dependencies**: 001, 002');
333
- expect(prompt).toContain('### Task 001');
343
+ expect(prompt).toContain('**Dependencies**: 01, 02');
344
+ expect(prompt).toContain('### Task 01');
334
345
  expect(prompt).toContain('First task done');
335
- expect(prompt).toContain('### Task 002');
346
+ expect(prompt).toContain('### Task 02');
336
347
  expect(prompt).toContain('Second task done');
337
348
  });
338
349
 
339
350
  it('should explain purpose of dependency context', () => {
340
351
  const params = {
341
352
  ...baseParams,
342
- taskId: '002',
353
+ taskId: '02',
343
354
  taskNumber: 2,
344
- dependencyIds: ['001'],
355
+ dependencyIds: ['01'],
345
356
  dependencyOutcomes: [
346
- { taskId: '001', content: '## Summary\n\nDone.\n\n<promise>COMPLETE</promise>' },
357
+ { taskId: '01', content: '## Summary\n\nDone.\n\n<promise>COMPLETE</promise>' },
347
358
  ],
348
359
  };
349
360
  const prompt = getExecutionPrompt(params);
@@ -355,15 +366,15 @@ describe('Execution Prompt', () => {
355
366
  it('should place dependency context before previous outcomes section', () => {
356
367
  const params = {
357
368
  ...baseParams,
358
- taskId: '003',
369
+ taskId: '03',
359
370
  taskNumber: 3,
360
371
  previousOutcomes: [
361
- { taskId: '001', content: 'Previous outcome 1' },
362
- { taskId: '002', content: 'Previous outcome 2' },
372
+ { taskId: '01', content: 'Previous outcome 1' },
373
+ { taskId: '02', content: 'Previous outcome 2' },
363
374
  ],
364
- dependencyIds: ['001'],
375
+ dependencyIds: ['01'],
365
376
  dependencyOutcomes: [
366
- { taskId: '001', content: '## Summary\n\nDependency work.\n\n<promise>COMPLETE</promise>' },
377
+ { taskId: '01', content: '## Summary\n\nDependency work.\n\n<promise>COMPLETE</promise>' },
367
378
  ],
368
379
  };
369
380
  const prompt = getExecutionPrompt(params);
@@ -9,15 +9,15 @@ import { formatRetryHistoryForConsole } from '../../src/commands/do.js';
9
9
  describe('Retry History Formatting', () => {
10
10
  describe('formatRetryHistoryForConsole', () => {
11
11
  it('should return empty string when no failures occurred', () => {
12
- const result = formatRetryHistoryForConsole('001', 'my-task', [], 1, true);
12
+ const result = formatRetryHistoryForConsole('01', 'my-task', [], 1, true);
13
13
  expect(result).toBe('');
14
14
  });
15
15
 
16
16
  it('should format single failure followed by success', () => {
17
17
  const failureHistory = [{ attempt: 1, reason: 'Task timed out' }];
18
- const result = formatRetryHistoryForConsole('001', 'my-task', failureHistory, 2, true);
18
+ const result = formatRetryHistoryForConsole('01', 'my-task', failureHistory, 2, true);
19
19
 
20
- expect(result).toContain('Task 001 (my-task):');
20
+ expect(result).toContain('Task 01 (my-task):');
21
21
  expect(result).toContain('Attempt 1: Failed - Task timed out');
22
22
  expect(result).toContain('Attempt 2: Succeeded');
23
23
  });
@@ -27,9 +27,9 @@ describe('Retry History Formatting', () => {
27
27
  { attempt: 1, reason: 'Context overflow - task too large' },
28
28
  { attempt: 2, reason: 'API rate limit exceeded' },
29
29
  ];
30
- const result = formatRetryHistoryForConsole('001', 'my-task', failureHistory, 3, true);
30
+ const result = formatRetryHistoryForConsole('01', 'my-task', failureHistory, 3, true);
31
31
 
32
- expect(result).toContain('Task 001 (my-task):');
32
+ expect(result).toContain('Task 01 (my-task):');
33
33
  expect(result).toContain('Attempt 1: Failed - Context overflow - task too large');
34
34
  expect(result).toContain('Attempt 2: Failed - API rate limit exceeded');
35
35
  expect(result).toContain('Attempt 3: Succeeded');
@@ -41,9 +41,9 @@ describe('Retry History Formatting', () => {
41
41
  { attempt: 2, reason: 'Task timed out' },
42
42
  { attempt: 3, reason: 'Context overflow' },
43
43
  ];
44
- const result = formatRetryHistoryForConsole('001', 'my-task', failureHistory, 3, false);
44
+ const result = formatRetryHistoryForConsole('01', 'my-task', failureHistory, 3, false);
45
45
 
46
- expect(result).toContain('Task 001 (my-task):');
46
+ expect(result).toContain('Task 01 (my-task):');
47
47
  expect(result).toContain('Attempt 1: Failed - Task timed out');
48
48
  expect(result).toContain('Attempt 2: Failed - Task timed out');
49
49
  expect(result).toContain('Attempt 3: Failed - Context overflow');
@@ -54,18 +54,18 @@ describe('Retry History Formatting', () => {
54
54
  const failureHistory = [
55
55
  { attempt: 1, reason: 'No completion marker found in output or outcome file' },
56
56
  ];
57
- const result = formatRetryHistoryForConsole('001', 'my-task', failureHistory, 2, true);
57
+ const result = formatRetryHistoryForConsole('01', 'my-task', failureHistory, 2, true);
58
58
 
59
59
  expect(result).toContain('Attempt 1: Failed - No completion marker found in output or outcome file');
60
60
  });
61
61
 
62
62
  it('should handle task name same as task id', () => {
63
63
  const failureHistory = [{ attempt: 1, reason: 'Test failure' }];
64
- const result = formatRetryHistoryForConsole('001', '001', failureHistory, 2, true);
64
+ const result = formatRetryHistoryForConsole('01', '01', failureHistory, 2, true);
65
65
 
66
66
  // When taskName equals taskId, should just show taskId without parentheses
67
- expect(result).toContain('Task 001:');
68
- expect(result).not.toContain('Task 001 (001):');
67
+ expect(result).toContain('Task 01:');
68
+ expect(result).not.toContain('Task 01 (01):');
69
69
  });
70
70
 
71
71
  it('should have proper indentation structure', () => {
@@ -73,7 +73,7 @@ describe('Retry History Formatting', () => {
73
73
  { attempt: 1, reason: 'First failure' },
74
74
  { attempt: 2, reason: 'Second failure' },
75
75
  ];
76
- const result = formatRetryHistoryForConsole('001', 'my-task', failureHistory, 3, true);
76
+ const result = formatRetryHistoryForConsole('01', 'my-task', failureHistory, 3, true);
77
77
  const lines = result.split('\n');
78
78
 
79
79
  // First line should be task header with minimal indentation
@@ -86,11 +86,11 @@ describe('Retry History Formatting', () => {
86
86
 
87
87
  it('should handle single failure with immediate success on retry', () => {
88
88
  const failureHistory = [{ attempt: 1, reason: 'Rate limit exceeded' }];
89
- const result = formatRetryHistoryForConsole('001', 'my-task', failureHistory, 2, true);
89
+ const result = formatRetryHistoryForConsole('01', 'my-task', failureHistory, 2, true);
90
90
 
91
91
  const lines = result.split('\n');
92
92
  expect(lines).toHaveLength(3);
93
- expect(lines[0]).toContain('Task 001 (my-task):');
93
+ expect(lines[0]).toContain('Task 01 (my-task):');
94
94
  expect(lines[1]).toContain('Attempt 1: Failed - Rate limit exceeded');
95
95
  expect(lines[2]).toContain('Attempt 2: Succeeded');
96
96
  });
@@ -101,11 +101,11 @@ describe('Retry History Formatting', () => {
101
101
  { attempt: 2, reason: 'API error' },
102
102
  { attempt: 3, reason: 'API error' },
103
103
  ];
104
- const result = formatRetryHistoryForConsole('001', 'my-task', failureHistory, 3, false);
104
+ const result = formatRetryHistoryForConsole('01', 'my-task', failureHistory, 3, false);
105
105
 
106
106
  const lines = result.split('\n');
107
107
  expect(lines).toHaveLength(4);
108
- expect(lines[0]).toContain('Task 001 (my-task):');
108
+ expect(lines[0]).toContain('Task 01 (my-task):');
109
109
  expect(lines[1]).toContain('Attempt 1: Failed - API error');
110
110
  expect(lines[2]).toContain('Attempt 2: Failed - API error');
111
111
  expect(lines[3]).toContain('Attempt 3: Failed - API error');
@@ -115,13 +115,13 @@ describe('Retry History Formatting', () => {
115
115
  describe('integration scenarios', () => {
116
116
  it('should work for clean success (no failures)', () => {
117
117
  // On first attempt success, no retry history
118
- const result = formatRetryHistoryForConsole('001', 'my-task', [], 1, true);
118
+ const result = formatRetryHistoryForConsole('01', 'my-task', [], 1, true);
119
119
  expect(result).toBe('');
120
120
  });
121
121
 
122
122
  it('should work for retry after timeout then success', () => {
123
123
  const failureHistory = [{ attempt: 1, reason: 'Task timed out' }];
124
- const result = formatRetryHistoryForConsole('001', 'my-task', failureHistory, 2, true);
124
+ const result = formatRetryHistoryForConsole('01', 'my-task', failureHistory, 2, true);
125
125
 
126
126
  expect(result).toContain('Attempt 1');
127
127
  expect(result).toContain('Task timed out');
@@ -133,7 +133,7 @@ describe('Retry History Formatting', () => {
133
133
  const failureHistory = [
134
134
  { attempt: 1, reason: 'Context overflow - task too large' },
135
135
  ];
136
- const result = formatRetryHistoryForConsole('001', 'my-task', failureHistory, 1, false);
136
+ const result = formatRetryHistoryForConsole('01', 'my-task', failureHistory, 1, false);
137
137
 
138
138
  expect(result).toContain('Attempt 1');
139
139
  expect(result).toContain('Context overflow');
@@ -0,0 +1,103 @@
1
+ import { jest } from '@jest/globals';
2
+
3
+ const mockExecSync = jest.fn();
4
+
5
+ jest.unstable_mockModule('node:child_process', () => ({
6
+ execSync: mockExecSync,
7
+ }));
8
+
9
+ const { getHeadCommitHash, getHeadCommitMessage, isFileCommittedInHead } = await import('../../src/core/git.js');
10
+
11
+ describe('git commit helper functions', () => {
12
+ beforeEach(() => {
13
+ jest.clearAllMocks();
14
+ });
15
+
16
+ describe('getHeadCommitHash', () => {
17
+ it('should return the current HEAD hash', () => {
18
+ mockExecSync.mockReturnValue('abc123def456\n');
19
+ expect(getHeadCommitHash()).toBe('abc123def456');
20
+ });
21
+
22
+ it('should return null if not in a git repo', () => {
23
+ mockExecSync.mockImplementation(() => {
24
+ throw new Error('not a git repository');
25
+ });
26
+ expect(getHeadCommitHash()).toBeNull();
27
+ });
28
+
29
+ it('should return null for empty output', () => {
30
+ mockExecSync.mockReturnValue('');
31
+ expect(getHeadCommitHash()).toBeNull();
32
+ });
33
+
34
+ it('should trim whitespace from hash', () => {
35
+ mockExecSync.mockReturnValue(' abc123 \n');
36
+ expect(getHeadCommitHash()).toBe('abc123');
37
+ });
38
+ });
39
+
40
+ describe('getHeadCommitMessage', () => {
41
+ it('should return the HEAD commit message', () => {
42
+ mockExecSync.mockReturnValue('RAF[005:01] Add validation\n');
43
+ expect(getHeadCommitMessage()).toBe('RAF[005:01] Add validation');
44
+ });
45
+
46
+ it('should return null if not in a git repo', () => {
47
+ mockExecSync.mockImplementation(() => {
48
+ throw new Error('not a git repository');
49
+ });
50
+ expect(getHeadCommitMessage()).toBeNull();
51
+ });
52
+
53
+ it('should return null for empty output', () => {
54
+ mockExecSync.mockReturnValue('');
55
+ expect(getHeadCommitMessage()).toBeNull();
56
+ });
57
+ });
58
+
59
+ describe('isFileCommittedInHead', () => {
60
+ it('should return true when file exists in HEAD', () => {
61
+ mockExecSync.mockImplementation((cmd: string) => {
62
+ if (typeof cmd === 'string' && cmd.includes('--show-toplevel')) {
63
+ return '/project\n';
64
+ }
65
+ if (typeof cmd === 'string' && cmd.includes('ls-tree')) {
66
+ return '100644 blob abc123\tRAF/outcomes/01-task.md\n';
67
+ }
68
+ return '';
69
+ });
70
+ expect(isFileCommittedInHead('/project/RAF/outcomes/01-task.md')).toBe(true);
71
+ });
72
+
73
+ it('should return false when file does not exist in HEAD', () => {
74
+ mockExecSync.mockImplementation((cmd: string) => {
75
+ if (typeof cmd === 'string' && cmd.includes('--show-toplevel')) {
76
+ return '/project\n';
77
+ }
78
+ if (typeof cmd === 'string' && cmd.includes('ls-tree')) {
79
+ return '';
80
+ }
81
+ return '';
82
+ });
83
+ expect(isFileCommittedInHead('/project/RAF/outcomes/01-task.md')).toBe(false);
84
+ });
85
+
86
+ it('should return false if not in a git repo', () => {
87
+ mockExecSync.mockImplementation(() => {
88
+ throw new Error('not a git repository');
89
+ });
90
+ expect(isFileCommittedInHead('/any/path')).toBe(false);
91
+ });
92
+
93
+ it('should return false on git command failure', () => {
94
+ mockExecSync.mockImplementation((cmd: string) => {
95
+ if (typeof cmd === 'string' && cmd.includes('--show-toplevel')) {
96
+ return '/project\n';
97
+ }
98
+ throw new Error('git ls-tree failed');
99
+ });
100
+ expect(isFileCommittedInHead('/project/file.ts')).toBe(false);
101
+ });
102
+ });
103
+ });
@@ -63,10 +63,10 @@ describe('stashChanges', () => {
63
63
  return '';
64
64
  });
65
65
 
66
- const result = stashChanges('raf-001-task-3-failed');
66
+ const result = stashChanges('raf-aaaaab-task-3-failed');
67
67
  expect(result).toBe(true);
68
68
  expect(mockExecSync).toHaveBeenCalledWith(
69
- 'git stash push -m "raf-001-task-3-failed"',
69
+ 'git stash push -m "raf-aaaaab-task-3-failed"',
70
70
  expect.any(Object)
71
71
  );
72
72
  });
@@ -128,10 +128,10 @@ describe('stashChanges', () => {
128
128
  return '';
129
129
  });
130
130
 
131
- const result = stashChanges('raf-002-task-5-failed');
131
+ const result = stashChanges('raf-aaaaac-task-5-failed');
132
132
  expect(result).toBe(true);
133
133
  expect(mockExecSync).toHaveBeenCalledWith(
134
- 'git stash push -m "raf-002-task-5-failed"',
134
+ 'git stash push -m "raf-aaaaac-task-5-failed"',
135
135
  expect.any(Object)
136
136
  );
137
137
  });