rafcode 1.3.2 → 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 (391) hide show
  1. package/CLAUDE.md +118 -22
  2. package/RAF/aaaacu-worktree-weaver/decisions.md +88 -0
  3. package/RAF/aaaacu-worktree-weaver/input.md +27 -0
  4. package/RAF/aaaacu-worktree-weaver/outcomes/01-git-worktree-utilities.md +41 -0
  5. package/RAF/aaaacu-worktree-weaver/outcomes/02-worktree-plan-command.md +44 -0
  6. package/RAF/aaaacu-worktree-weaver/outcomes/03-worktree-do-command.md +58 -0
  7. package/RAF/aaaacu-worktree-weaver/outcomes/04-auto-merge-and-cleanup.md +40 -0
  8. package/RAF/aaaacu-worktree-weaver/outcomes/05-worktree-tests.md +43 -0
  9. package/RAF/aaaacu-worktree-weaver/outcomes/06-update-documentation.md +33 -0
  10. package/RAF/aaaacu-worktree-weaver/plans/01-git-worktree-utilities.md +51 -0
  11. package/RAF/aaaacu-worktree-weaver/plans/02-worktree-plan-command.md +93 -0
  12. package/RAF/aaaacu-worktree-weaver/plans/03-worktree-do-command.md +81 -0
  13. package/RAF/aaaacu-worktree-weaver/plans/04-auto-merge-and-cleanup.md +51 -0
  14. package/RAF/aaaacu-worktree-weaver/plans/05-worktree-tests.md +52 -0
  15. package/RAF/aaaacu-worktree-weaver/plans/06-update-documentation.md +55 -0
  16. package/RAF/aaaacv-trim-the-fat/decisions.md +34 -0
  17. package/RAF/aaaacv-trim-the-fat/input.md +5 -0
  18. package/RAF/aaaacv-trim-the-fat/outcomes/01-add-worktree-support-to-status.md +43 -0
  19. package/RAF/aaaacv-trim-the-fat/outcomes/02-remove-multi-project-from-do.md +50 -0
  20. package/RAF/aaaacv-trim-the-fat/outcomes/03-commit-artifacts-on-amend.md +35 -0
  21. package/RAF/aaaacv-trim-the-fat/outcomes/04-worktree-aware-exit-messages.md +36 -0
  22. package/RAF/aaaacv-trim-the-fat/plans/01-add-worktree-support-to-status.md +43 -0
  23. package/RAF/aaaacv-trim-the-fat/plans/02-remove-multi-project-from-do.md +44 -0
  24. package/RAF/aaaacv-trim-the-fat/plans/03-commit-artifacts-on-amend.md +38 -0
  25. package/RAF/aaaacv-trim-the-fat/plans/04-worktree-aware-exit-messages.md +38 -0
  26. package/RAF/aaaacw-prune-cycle/decisions.md +25 -0
  27. package/RAF/aaaacw-prune-cycle/input.md +5 -0
  28. package/RAF/aaaacw-prune-cycle/outcomes/01-create-worktree-from-branch.md +32 -0
  29. package/RAF/aaaacw-prune-cycle/outcomes/02-cleanup-worktree-on-success.md +33 -0
  30. package/RAF/aaaacw-prune-cycle/outcomes/03-amend-recreate-worktree.md +40 -0
  31. package/RAF/aaaacw-prune-cycle/plans/01-create-worktree-from-branch.md +31 -0
  32. package/RAF/aaaacw-prune-cycle/plans/02-cleanup-worktree-on-success.md +38 -0
  33. package/RAF/aaaacw-prune-cycle/plans/03-amend-recreate-worktree.md +50 -0
  34. package/RAF/aaaacx-epoch-shift/decisions.md +25 -0
  35. package/RAF/aaaacx-epoch-shift/input.md +1 -0
  36. package/RAF/aaaacx-epoch-shift/outcomes/01-epoch-id-generation.md +34 -0
  37. package/RAF/aaaacx-epoch-shift/outcomes/02-update-pattern-matching.md +32 -0
  38. package/RAF/aaaacx-epoch-shift/outcomes/03-update-tests.md +59 -0
  39. package/RAF/aaaacx-epoch-shift/outcomes/04-update-documentation.md +30 -0
  40. package/RAF/aaaacx-epoch-shift/plans/01-epoch-id-generation.md +40 -0
  41. package/RAF/aaaacx-epoch-shift/plans/02-update-pattern-matching.md +60 -0
  42. package/RAF/aaaacx-epoch-shift/plans/03-update-tests.md +48 -0
  43. package/RAF/aaaacx-epoch-shift/plans/04-update-documentation.md +44 -0
  44. package/RAF/ahmpro-merge-guardian/decisions.md +25 -0
  45. package/RAF/ahmpro-merge-guardian/input.md +4 -0
  46. package/RAF/ahmpro-merge-guardian/outcomes/001-fix-amend-worktree-commit.md +45 -0
  47. package/RAF/ahmpro-merge-guardian/outcomes/002-base36-task-ids.md +55 -0
  48. package/RAF/ahmpro-merge-guardian/outcomes/003-worktree-pr-creation.md +41 -0
  49. package/RAF/ahmpro-merge-guardian/outcomes/004-post-execution-picker.md +53 -0
  50. package/RAF/ahmpro-merge-guardian/plans/001-fix-amend-worktree-commit.md +39 -0
  51. package/RAF/ahmpro-merge-guardian/plans/002-base36-task-ids.md +43 -0
  52. package/RAF/ahmpro-merge-guardian/plans/003-worktree-pr-creation.md +43 -0
  53. package/RAF/ahmpro-merge-guardian/plans/004-post-execution-picker.md +51 -0
  54. package/RAF/ahnbcu-letterjam/decisions.md +13 -0
  55. package/RAF/ahnbcu-letterjam/input.md +3 -0
  56. package/RAF/ahnbcu-letterjam/outcomes/01-base26-encoding.md +42 -0
  57. package/RAF/ahnbcu-letterjam/outcomes/02-update-tests.md +38 -0
  58. package/RAF/ahnbcu-letterjam/outcomes/03-migrate-command.md +51 -0
  59. package/RAF/ahnbcu-letterjam/outcomes/04-update-documentation.md +29 -0
  60. package/RAF/ahnbcu-letterjam/plans/01-base26-encoding.md +36 -0
  61. package/RAF/ahnbcu-letterjam/plans/02-update-tests.md +37 -0
  62. package/RAF/ahnbcu-letterjam/plans/03-migrate-command.md +49 -0
  63. package/RAF/ahnbcu-letterjam/plans/04-update-documentation.md +39 -0
  64. package/RAF/ahnwrk-worktree-weaver/decisions.md +19 -0
  65. package/RAF/ahnwrk-worktree-weaver/input.md +4 -0
  66. package/RAF/ahnwrk-worktree-weaver/outcomes/01-remove-co-authored-by.md +20 -0
  67. package/RAF/ahnwrk-worktree-weaver/outcomes/02-update-task-status-format.md +21 -0
  68. package/RAF/ahnwrk-worktree-weaver/outcomes/03-worktree-auto-discovery.md +34 -0
  69. package/RAF/ahnwrk-worktree-weaver/outcomes/04-fix-pr-description.md +30 -0
  70. package/RAF/ahnwrk-worktree-weaver/plans/01-remove-co-authored-by.md +26 -0
  71. package/RAF/ahnwrk-worktree-weaver/plans/02-update-task-status-format.md +27 -0
  72. package/RAF/ahnwrk-worktree-weaver/plans/03-worktree-auto-discovery.md +37 -0
  73. package/RAF/ahnwrk-worktree-weaver/plans/04-fix-pr-description.md +50 -0
  74. package/README.md +56 -10
  75. package/dist/commands/do.d.ts +15 -0
  76. package/dist/commands/do.d.ts.map +1 -1
  77. package/dist/commands/do.js +384 -123
  78. package/dist/commands/do.js.map +1 -1
  79. package/dist/commands/migrate.d.ts +14 -0
  80. package/dist/commands/migrate.d.ts.map +1 -0
  81. package/dist/commands/migrate.js +228 -0
  82. package/dist/commands/migrate.js.map +1 -0
  83. package/dist/commands/plan.d.ts.map +1 -1
  84. package/dist/commands/plan.js +237 -40
  85. package/dist/commands/plan.js.map +1 -1
  86. package/dist/commands/status.d.ts.map +1 -1
  87. package/dist/commands/status.js +221 -47
  88. package/dist/commands/status.js.map +1 -1
  89. package/dist/core/claude-runner.d.ts +2 -2
  90. package/dist/core/claude-runner.d.ts.map +1 -1
  91. package/dist/core/git.d.ts +15 -6
  92. package/dist/core/git.d.ts.map +1 -1
  93. package/dist/core/git.js +53 -20
  94. package/dist/core/git.js.map +1 -1
  95. package/dist/core/project-manager.d.ts.map +1 -1
  96. package/dist/core/project-manager.js +2 -2
  97. package/dist/core/project-manager.js.map +1 -1
  98. package/dist/core/pull-request.d.ts +84 -0
  99. package/dist/core/pull-request.d.ts.map +1 -0
  100. package/dist/core/pull-request.js +414 -0
  101. package/dist/core/pull-request.js.map +1 -0
  102. package/dist/core/state-derivation.d.ts +3 -3
  103. package/dist/core/state-derivation.d.ts.map +1 -1
  104. package/dist/core/state-derivation.js +18 -14
  105. package/dist/core/state-derivation.js.map +1 -1
  106. package/dist/core/worktree.d.ts +120 -0
  107. package/dist/core/worktree.d.ts.map +1 -0
  108. package/dist/core/worktree.js +322 -0
  109. package/dist/core/worktree.js.map +1 -0
  110. package/dist/index.js +2 -0
  111. package/dist/index.js.map +1 -1
  112. package/dist/prompts/amend.d.ts +1 -0
  113. package/dist/prompts/amend.d.ts.map +1 -1
  114. package/dist/prompts/amend.js +14 -10
  115. package/dist/prompts/amend.js.map +1 -1
  116. package/dist/prompts/execution.d.ts.map +1 -1
  117. package/dist/prompts/execution.js +4 -2
  118. package/dist/prompts/execution.js.map +1 -1
  119. package/dist/prompts/planning.d.ts +1 -0
  120. package/dist/prompts/planning.d.ts.map +1 -1
  121. package/dist/prompts/planning.js +9 -8
  122. package/dist/prompts/planning.js.map +1 -1
  123. package/dist/types/config.d.ts +5 -0
  124. package/dist/types/config.d.ts.map +1 -1
  125. package/dist/ui/project-picker.d.ts +34 -3
  126. package/dist/ui/project-picker.d.ts.map +1 -1
  127. package/dist/ui/project-picker.js +78 -10
  128. package/dist/ui/project-picker.js.map +1 -1
  129. package/dist/utils/paths.d.ts +38 -43
  130. package/dist/utils/paths.d.ts.map +1 -1
  131. package/dist/utils/paths.js +123 -193
  132. package/dist/utils/paths.js.map +1 -1
  133. package/dist/utils/terminal-symbols.d.ts +2 -2
  134. package/dist/utils/terminal-symbols.js +3 -3
  135. package/dist/utils/terminal-symbols.js.map +1 -1
  136. package/dist/utils/validation.d.ts.map +1 -1
  137. package/dist/utils/validation.js +2 -8
  138. package/dist/utils/validation.js.map +1 -1
  139. package/package.json +1 -1
  140. package/src/commands/do.ts +454 -134
  141. package/src/commands/migrate.ts +269 -0
  142. package/src/commands/plan.ts +264 -40
  143. package/src/commands/status.ts +252 -45
  144. package/src/core/claude-runner.ts +2 -2
  145. package/src/core/git.ts +57 -21
  146. package/src/core/project-manager.ts +2 -1
  147. package/src/core/pull-request.ts +480 -0
  148. package/src/core/state-derivation.ts +18 -14
  149. package/src/core/worktree.ts +357 -0
  150. package/src/index.ts +2 -0
  151. package/src/prompts/amend.ts +15 -9
  152. package/src/prompts/execution.ts +4 -2
  153. package/src/prompts/planning.ts +10 -8
  154. package/src/types/config.ts +6 -0
  155. package/src/ui/project-picker.ts +110 -10
  156. package/src/utils/paths.ts +129 -214
  157. package/src/utils/terminal-symbols.ts +3 -3
  158. package/src/utils/validation.ts +2 -9
  159. package/tests/unit/amend-prompt.test.ts +85 -0
  160. package/tests/unit/claude-runner.test.ts +9 -9
  161. package/tests/unit/commit-planning-artifacts-worktree.test.ts +327 -0
  162. package/tests/unit/commit-planning-artifacts.test.ts +303 -35
  163. package/tests/unit/dependency-integration.test.ts +95 -95
  164. package/tests/unit/do-blocked-tasks.test.ts +53 -53
  165. package/tests/unit/do-command.test.ts +39 -132
  166. package/tests/unit/do-rerun.test.ts +65 -65
  167. package/tests/unit/do-worktree-cleanup.test.ts +151 -0
  168. package/tests/unit/execution-prompt.test.ts +71 -60
  169. package/tests/unit/failure-history.test.ts +19 -19
  170. package/tests/unit/git-commit-helpers.test.ts +5 -5
  171. package/tests/unit/git-stash.test.ts +4 -4
  172. package/tests/unit/migrate-command.test.ts +197 -0
  173. package/tests/unit/outcome-content.test.ts +20 -20
  174. package/tests/unit/paths.test.ts +269 -467
  175. package/tests/unit/plan-amend-worktree-recreate.test.ts +246 -0
  176. package/tests/unit/plan-command.test.ts +103 -103
  177. package/tests/unit/planning-prompt.test.ts +41 -4
  178. package/tests/unit/post-execution-picker.test.ts +251 -0
  179. package/tests/unit/project-manager.test.ts +20 -8
  180. package/tests/unit/project-picker.test.ts +425 -42
  181. package/tests/unit/pull-request.test.ts +852 -0
  182. package/tests/unit/state-derivation.test.ts +138 -137
  183. package/tests/unit/status-command.test.ts +344 -76
  184. package/tests/unit/terminal-symbols.test.ts +4 -4
  185. package/tests/unit/worktree-integration.test.ts +405 -0
  186. package/tests/unit/worktree.test.ts +523 -0
  187. package/tests/unit/do-multiproject.test.ts +0 -270
  188. /package/RAF/{001-raf-task-improvements → aaaaab-raf-task-improvements}/input.md +0 -0
  189. /package/RAF/{001-raf-task-improvements/outcomes/001-add-decisions-folder.md → aaaaab-raf-task-improvements/outcomes/01-add-decisions-folder.md} +0 -0
  190. /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
  191. /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
  192. /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
  193. /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
  194. /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
  195. /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
  196. /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
  197. /package/RAF/{001-raf-task-improvements → aaaaab-raf-task-improvements}/outcomes/SUMMARY.md +0 -0
  198. /package/RAF/{001-raf-task-improvements/plans/001-add-decisions-folder.md → aaaaab-raf-task-improvements/plans/01-add-decisions-folder.md} +0 -0
  199. /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
  200. /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
  201. /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
  202. /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
  203. /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
  204. /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
  205. /package/RAF/{002-raf-task-improvements-execution → aaaaac-raf-task-improvements-execution}/decisions/DECISIONS.md +0 -0
  206. /package/RAF/{002-raf-task-improvements-execution → aaaaac-raf-task-improvements-execution}/input.md +0 -0
  207. /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
  208. /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
  209. /package/RAF/{002-raf-task-improvements-execution → aaaaac-raf-task-improvements-execution}/outcomes/SUMMARY.md +0 -0
  210. /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
  211. /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
  212. /package/RAF/{003-multi-project-execution → aaaaad-multi-project-execution}/decisions/DECISIONS.md +0 -0
  213. /package/RAF/{003-multi-project-execution → aaaaad-multi-project-execution}/input.md +0 -0
  214. /package/RAF/{003-multi-project-execution/outcomes/001-remove-state-json.md → aaaaad-multi-project-execution/outcomes/01-remove-state-json.md} +0 -0
  215. /package/RAF/{003-multi-project-execution/outcomes/002-update-raf-status.md → aaaaad-multi-project-execution/outcomes/02-update-raf-status.md} +0 -0
  216. /package/RAF/{003-multi-project-execution/outcomes/003-simplify-git-logic.md → aaaaad-multi-project-execution/outcomes/03-simplify-git-logic.md} +0 -0
  217. /package/RAF/{003-multi-project-execution/outcomes/004-auto-commit-planning.md → aaaaad-multi-project-execution/outcomes/04-auto-commit-planning.md} +0 -0
  218. /package/RAF/{003-multi-project-execution/outcomes/005-rerun-failed-tasks.md → aaaaad-multi-project-execution/outcomes/05-rerun-failed-tasks.md} +0 -0
  219. /package/RAF/{003-multi-project-execution/outcomes/006-multi-project-execution.md → aaaaad-multi-project-execution/outcomes/06-multi-project-execution.md} +0 -0
  220. /package/RAF/{003-multi-project-execution/outcomes/007-verify-timeout.md → aaaaad-multi-project-execution/outcomes/07-verify-timeout.md} +0 -0
  221. /package/RAF/{003-multi-project-execution/outcomes/008-move-decisions-file.md → aaaaad-multi-project-execution/outcomes/08-move-decisions-file.md} +0 -0
  222. /package/RAF/{003-multi-project-execution → aaaaad-multi-project-execution}/outcomes/SUMMARY.md +0 -0
  223. /package/RAF/{003-multi-project-execution/plans/001-remove-state-json.md → aaaaad-multi-project-execution/plans/01-remove-state-json.md} +0 -0
  224. /package/RAF/{003-multi-project-execution/plans/002-update-raf-status.md → aaaaad-multi-project-execution/plans/02-update-raf-status.md} +0 -0
  225. /package/RAF/{003-multi-project-execution/plans/003-simplify-git-logic.md → aaaaad-multi-project-execution/plans/03-simplify-git-logic.md} +0 -0
  226. /package/RAF/{003-multi-project-execution/plans/004-auto-commit-planning.md → aaaaad-multi-project-execution/plans/04-auto-commit-planning.md} +0 -0
  227. /package/RAF/{003-multi-project-execution/plans/005-rerun-failed-tasks.md → aaaaad-multi-project-execution/plans/05-rerun-failed-tasks.md} +0 -0
  228. /package/RAF/{003-multi-project-execution/plans/006-multi-project-execution.md → aaaaad-multi-project-execution/plans/06-multi-project-execution.md} +0 -0
  229. /package/RAF/{003-multi-project-execution/plans/007-verify-timeout.md → aaaaad-multi-project-execution/plans/07-verify-timeout.md} +0 -0
  230. /package/RAF/{003-multi-project-execution/plans/008-move-decisions-file.md → aaaaad-multi-project-execution/plans/08-move-decisions-file.md} +0 -0
  231. /package/RAF/{004-task-naming-optimization → aaaaae-task-naming-optimization}/decisions.md +0 -0
  232. /package/RAF/{004-task-naming-optimization → aaaaae-task-naming-optimization}/input.md +0 -0
  233. /package/RAF/{004-task-naming-optimization/outcomes/001-remove-summary-file.md → aaaaae-task-naming-optimization/outcomes/01-remove-summary-file.md} +0 -0
  234. /package/RAF/{004-task-naming-optimization/outcomes/002-base36-project-numbering.md → aaaaae-task-naming-optimization/outcomes/02-base36-project-numbering.md} +0 -0
  235. /package/RAF/{004-task-naming-optimization/outcomes/003-improve-haiku-prompt.md → aaaaae-task-naming-optimization/outcomes/03-improve-haiku-prompt.md} +0 -0
  236. /package/RAF/{004-task-naming-optimization → aaaaae-task-naming-optimization}/outcomes/SUMMARY.md +0 -0
  237. /package/RAF/{004-task-naming-optimization/plans/001-remove-summary-file.md → aaaaae-task-naming-optimization/plans/01-remove-summary-file.md} +0 -0
  238. /package/RAF/{004-task-naming-optimization/plans/002-base36-project-numbering.md → aaaaae-task-naming-optimization/plans/02-base36-project-numbering.md} +0 -0
  239. /package/RAF/{004-task-naming-optimization/plans/003-improve-haiku-prompt.md → aaaaae-task-naming-optimization/plans/03-improve-haiku-prompt.md} +0 -0
  240. /package/RAF/{005-task-naming-improvements → aaaaaf-task-naming-improvements}/decisions.md +0 -0
  241. /package/RAF/{005-task-naming-improvements → aaaaaf-task-naming-improvements}/input.md +0 -0
  242. /package/RAF/{005-task-naming-improvements/outcomes/001-enhance-identifier-resolution.md → aaaaaf-task-naming-improvements/outcomes/01-enhance-identifier-resolution.md} +0 -0
  243. /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
  244. /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
  245. /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
  246. /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
  247. /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
  248. /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
  249. /package/RAF/{005-task-naming-improvements/outcomes/008-fix-timeout-label.md → aaaaaf-task-naming-improvements/outcomes/08-fix-timeout-label.md} +0 -0
  250. /package/RAF/{005-task-naming-improvements/plans/001-enhance-identifier-resolution.md → aaaaaf-task-naming-improvements/plans/01-enhance-identifier-resolution.md} +0 -0
  251. /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
  252. /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
  253. /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
  254. /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
  255. /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
  256. /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
  257. /package/RAF/{005-task-naming-improvements/plans/008-fix-timeout-label.md → aaaaaf-task-naming-improvements/plans/08-fix-timeout-label.md} +0 -0
  258. /package/RAF/{006-fix-double-summary-headers → aaaaag-fix-double-summary-headers}/decisions.md +0 -0
  259. /package/RAF/{006-fix-double-summary-headers → aaaaag-fix-double-summary-headers}/input.md +0 -0
  260. /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
  261. /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
  262. /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
  263. /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
  264. /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
  265. /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
  266. /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
  267. /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
  268. /package/RAF/{007-improve-outcome-format → aaaaah-improve-outcome-format}/decisions.md +0 -0
  269. /package/RAF/{007-improve-outcome-format → aaaaah-improve-outcome-format}/input.md +0 -0
  270. /package/RAF/{007-improve-outcome-format/outcomes/001-update-execution-prompt.md → aaaaah-improve-outcome-format/outcomes/01-update-execution-prompt.md} +0 -0
  271. /package/RAF/{007-improve-outcome-format/outcomes/002-update-state-derivation.md → aaaaah-improve-outcome-format/outcomes/02-update-state-derivation.md} +0 -0
  272. /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
  273. /package/RAF/{007-improve-outcome-format/outcomes/004-implement-failure-analysis.md → aaaaah-improve-outcome-format/outcomes/04-implement-failure-analysis.md} +0 -0
  274. /package/RAF/{007-improve-outcome-format/outcomes/005-update-documentation.md → aaaaah-improve-outcome-format/outcomes/05-update-documentation.md} +0 -0
  275. /package/RAF/{007-improve-outcome-format/plans/001-update-execution-prompt.md → aaaaah-improve-outcome-format/plans/01-update-execution-prompt.md} +0 -0
  276. /package/RAF/{007-improve-outcome-format/plans/002-update-state-derivation.md → aaaaah-improve-outcome-format/plans/02-update-state-derivation.md} +0 -0
  277. /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
  278. /package/RAF/{007-improve-outcome-format/plans/004-implement-failure-analysis.md → aaaaah-improve-outcome-format/plans/04-implement-failure-analysis.md} +0 -0
  279. /package/RAF/{007-improve-outcome-format/plans/005-update-documentation.md → aaaaah-improve-outcome-format/plans/05-update-documentation.md} +0 -0
  280. /package/RAF/{008-beautiful-do → aaaaai-beautiful-do}/decisions.md +0 -0
  281. /package/RAF/{008-beautiful-do → aaaaai-beautiful-do}/input.md +0 -0
  282. /package/RAF/{008-beautiful-do/outcomes/001-terminal-symbols.md → aaaaai-beautiful-do/outcomes/01-terminal-symbols.md} +0 -0
  283. /package/RAF/{008-beautiful-do/outcomes/002-refactor-do-output.md → aaaaai-beautiful-do/outcomes/02-refactor-do-output.md} +0 -0
  284. /package/RAF/{008-beautiful-do/outcomes/003-refactor-status-output.md → aaaaai-beautiful-do/outcomes/03-refactor-status-output.md} +0 -0
  285. /package/RAF/{008-beautiful-do/outcomes/004-simplify-logger.md → aaaaai-beautiful-do/outcomes/04-simplify-logger.md} +0 -0
  286. /package/RAF/{008-beautiful-do/outcomes/005-add-tests.md → aaaaai-beautiful-do/outcomes/05-add-tests.md} +0 -0
  287. /package/RAF/{008-beautiful-do/plans/001-terminal-symbols.md → aaaaai-beautiful-do/plans/01-terminal-symbols.md} +0 -0
  288. /package/RAF/{008-beautiful-do/plans/002-refactor-do-output.md → aaaaai-beautiful-do/plans/02-refactor-do-output.md} +0 -0
  289. /package/RAF/{008-beautiful-do/plans/003-refactor-status-output.md → aaaaai-beautiful-do/plans/03-refactor-status-output.md} +0 -0
  290. /package/RAF/{008-beautiful-do/plans/004-simplify-logger.md → aaaaai-beautiful-do/plans/04-simplify-logger.md} +0 -0
  291. /package/RAF/{008-beautiful-do/plans/005-add-tests.md → aaaaai-beautiful-do/plans/05-add-tests.md} +0 -0
  292. /package/RAF/{009-system-promt-ammend → aaaaaj-system-promt-ammend}/decisions.md +0 -0
  293. /package/RAF/{009-system-promt-ammend → aaaaaj-system-promt-ammend}/input.md +0 -0
  294. /package/RAF/{009-system-promt-ammend/outcomes/001-model-override.md → aaaaaj-system-promt-ammend/outcomes/01-model-override.md} +0 -0
  295. /package/RAF/{009-system-promt-ammend/outcomes/002-system-prompt-append.md → aaaaaj-system-promt-ammend/outcomes/02-system-prompt-append.md} +0 -0
  296. /package/RAF/{009-system-promt-ammend/outcomes/003-retry-context.md → aaaaaj-system-promt-ammend/outcomes/03-retry-context.md} +0 -0
  297. /package/RAF/{009-system-promt-ammend/plans/001-model-override.md → aaaaaj-system-promt-ammend/plans/01-model-override.md} +0 -0
  298. /package/RAF/{009-system-promt-ammend/plans/002-system-prompt-append.md → aaaaaj-system-promt-ammend/plans/02-system-prompt-append.md} +0 -0
  299. /package/RAF/{009-system-promt-ammend/plans/003-retry-context.md → aaaaaj-system-promt-ammend/plans/03-retry-context.md} +0 -0
  300. /package/RAF/{010-outcome-marker-fallback → aaaabk-outcome-marker-fallback}/decisions.md +0 -0
  301. /package/RAF/{010-outcome-marker-fallback → aaaabk-outcome-marker-fallback}/input.md +0 -0
  302. /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
  303. /package/RAF/{010-outcome-marker-fallback/outcomes/002-creative-project-naming.md → aaaabk-outcome-marker-fallback/outcomes/02-creative-project-naming.md} +0 -0
  304. /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
  305. /package/RAF/{010-outcome-marker-fallback/plans/002-creative-project-naming.md → aaaabk-outcome-marker-fallback/plans/02-creative-project-naming.md} +0 -0
  306. /package/RAF/{011-do-task-in-commit → aaaabl-do-task-in-commit}/decisions.md +0 -0
  307. /package/RAF/{011-do-task-in-commit → aaaabl-do-task-in-commit}/input.md +0 -0
  308. /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
  309. /package/RAF/{011-do-task-in-commit/outcomes/002-update-tests.md → aaaabl-do-task-in-commit/outcomes/02-update-tests.md} +0 -0
  310. /package/RAF/{011-do-task-in-commit/outcomes/003-update-documentation.md → aaaabl-do-task-in-commit/outcomes/03-update-documentation.md} +0 -0
  311. /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
  312. /package/RAF/{011-do-task-in-commit/plans/002-update-tests.md → aaaabl-do-task-in-commit/plans/02-update-tests.md} +0 -0
  313. /package/RAF/{011-do-task-in-commit/plans/003-update-documentation.md → aaaabl-do-task-in-commit/plans/03-update-documentation.md} +0 -0
  314. /package/RAF/{012-name-picker-buffet → aaaabm-name-picker-buffet}/decisions.md +0 -0
  315. /package/RAF/{012-name-picker-buffet → aaaabm-name-picker-buffet}/input.md +0 -0
  316. /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
  317. /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
  318. /package/RAF/{012-name-picker-buffet/outcomes/003-raf-status-truncation.md → aaaabm-name-picker-buffet/outcomes/03-raf-status-truncation.md} +0 -0
  319. /package/RAF/{012-name-picker-buffet/outcomes/004-failure-reason-details.md → aaaabm-name-picker-buffet/outcomes/04-failure-reason-details.md} +0 -0
  320. /package/RAF/{012-name-picker-buffet/outcomes/005-remove-raf-commits.md → aaaabm-name-picker-buffet/outcomes/05-remove-raf-commits.md} +0 -0
  321. /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
  322. /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
  323. /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
  324. /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
  325. /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
  326. /package/RAF/{012-name-picker-buffet/plans/003-raf-status-truncation.md → aaaabm-name-picker-buffet/plans/03-raf-status-truncation.md} +0 -0
  327. /package/RAF/{012-name-picker-buffet/plans/004-failure-reason-details.md → aaaabm-name-picker-buffet/plans/04-failure-reason-details.md} +0 -0
  328. /package/RAF/{012-name-picker-buffet/plans/005-remove-raf-commits.md → aaaabm-name-picker-buffet/plans/05-remove-raf-commits.md} +0 -0
  329. /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
  330. /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
  331. /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
  332. /package/RAF/{013-dependencies-watchdog → aaaabn-dependencies-watchdog}/decisions.md +0 -0
  333. /package/RAF/{013-dependencies-watchdog → aaaabn-dependencies-watchdog}/input.md +0 -0
  334. /package/RAF/{013-dependencies-watchdog/outcomes/001-define-dependency-syntax.md → aaaabn-dependencies-watchdog/outcomes/01-define-dependency-syntax.md} +0 -0
  335. /package/RAF/{013-dependencies-watchdog/outcomes/002-update-planning-prompts.md → aaaabn-dependencies-watchdog/outcomes/02-update-planning-prompts.md} +0 -0
  336. /package/RAF/{013-dependencies-watchdog/outcomes/003-parse-dependencies-update-state.md → aaaabn-dependencies-watchdog/outcomes/03-parse-dependencies-update-state.md} +0 -0
  337. /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
  338. /package/RAF/{013-dependencies-watchdog/outcomes/005-update-execution-prompts.md → aaaabn-dependencies-watchdog/outcomes/05-update-execution-prompts.md} +0 -0
  339. /package/RAF/{013-dependencies-watchdog/outcomes/006-add-tests.md → aaaabn-dependencies-watchdog/outcomes/06-add-tests.md} +0 -0
  340. /package/RAF/{013-dependencies-watchdog/outcomes/007-add-act-alias.md → aaaabn-dependencies-watchdog/outcomes/07-add-act-alias.md} +0 -0
  341. /package/RAF/{013-dependencies-watchdog/outcomes/008-add-exit-message.md → aaaabn-dependencies-watchdog/outcomes/08-add-exit-message.md} +0 -0
  342. /package/RAF/{013-dependencies-watchdog/plans/001-define-dependency-syntax.md → aaaabn-dependencies-watchdog/plans/01-define-dependency-syntax.md} +0 -0
  343. /package/RAF/{013-dependencies-watchdog/plans/002-update-planning-prompts.md → aaaabn-dependencies-watchdog/plans/02-update-planning-prompts.md} +0 -0
  344. /package/RAF/{013-dependencies-watchdog/plans/003-parse-dependencies-update-state.md → aaaabn-dependencies-watchdog/plans/03-parse-dependencies-update-state.md} +0 -0
  345. /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
  346. /package/RAF/{013-dependencies-watchdog/plans/005-update-execution-prompts.md → aaaabn-dependencies-watchdog/plans/05-update-execution-prompts.md} +0 -0
  347. /package/RAF/{013-dependencies-watchdog/plans/006-add-tests.md → aaaabn-dependencies-watchdog/plans/06-add-tests.md} +0 -0
  348. /package/RAF/{013-dependencies-watchdog/plans/007-add-act-alias.md → aaaabn-dependencies-watchdog/plans/07-add-act-alias.md} +0 -0
  349. /package/RAF/{013-dependencies-watchdog/plans/008-add-exit-message.md → aaaabn-dependencies-watchdog/plans/08-add-exit-message.md} +0 -0
  350. /package/RAF/{014-watchdog → aaaabo-watchdog}/decisions.md +0 -0
  351. /package/RAF/{014-watchdog → aaaabo-watchdog}/input.md +0 -0
  352. /package/RAF/{014-watchdog/outcomes/001-amend-flag-position.md → aaaabo-watchdog/outcomes/01-amend-flag-position.md} +0 -0
  353. /package/RAF/{014-watchdog/outcomes/002-details-only-on-failure.md → aaaabo-watchdog/outcomes/02-details-only-on-failure.md} +0 -0
  354. /package/RAF/{014-watchdog/plans/001-amend-flag-position.md → aaaabo-watchdog/plans/01-amend-flag-position.md} +0 -0
  355. /package/RAF/{014-watchdog/plans/002-details-only-on-failure.md → aaaabo-watchdog/plans/02-details-only-on-failure.md} +0 -0
  356. /package/RAF/{015-name-lottery → aaaabp-name-lottery}/decisions.md +0 -0
  357. /package/RAF/{015-name-lottery → aaaabp-name-lottery}/input.md +0 -0
  358. /package/RAF/{015-name-lottery/outcomes/001-auto-pick-project-name.md → aaaabp-name-lottery/outcomes/01-auto-pick-project-name.md} +0 -0
  359. /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
  360. /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
  361. /package/RAF/{015-name-lottery/plans/001-auto-pick-project-name.md → aaaabp-name-lottery/plans/01-auto-pick-project-name.md} +0 -0
  362. /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
  363. /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
  364. /package/RAF/{016-planning-scalpel → aaaabq-planning-scalpel}/decisions.md +0 -0
  365. /package/RAF/{016-planning-scalpel → aaaabq-planning-scalpel}/input.md +0 -0
  366. /package/RAF/{016-planning-scalpel/outcomes/001-update-git-commit-instructions.md → aaaabq-planning-scalpel/outcomes/01-update-git-commit-instructions.md} +0 -0
  367. /package/RAF/{016-planning-scalpel/plans/001-update-git-commit-instructions.md → aaaabq-planning-scalpel/plans/01-update-git-commit-instructions.md} +0 -0
  368. /package/RAF/{017-decision-vault → aaaabr-decision-vault}/decisions.md +0 -0
  369. /package/RAF/{017-decision-vault → aaaabr-decision-vault}/input.md +0 -0
  370. /package/RAF/{017-decision-vault/outcomes/001-create-git-commit-utility.md → aaaabr-decision-vault/outcomes/01-create-git-commit-utility.md} +0 -0
  371. /package/RAF/{017-decision-vault/outcomes/002-integrate-commit-into-plan.md → aaaabr-decision-vault/outcomes/02-integrate-commit-into-plan.md} +0 -0
  372. /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
  373. /package/RAF/{017-decision-vault/plans/001-create-git-commit-utility.md → aaaabr-decision-vault/plans/01-create-git-commit-utility.md} +0 -0
  374. /package/RAF/{017-decision-vault/plans/002-integrate-commit-into-plan.md → aaaabr-decision-vault/plans/02-integrate-commit-into-plan.md} +0 -0
  375. /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
  376. /package/RAF/{018-workflow-forge → aaaabs-workflow-forge}/decisions.md +0 -0
  377. /package/RAF/{018-workflow-forge → aaaabs-workflow-forge}/input.md +0 -0
  378. /package/RAF/{018-workflow-forge/outcomes/001-add-task-number-progress.md → aaaabs-workflow-forge/outcomes/01-add-task-number-progress.md} +0 -0
  379. /package/RAF/{018-workflow-forge/outcomes/002-update-plan-do-prompts.md → aaaabs-workflow-forge/outcomes/02-update-plan-do-prompts.md} +0 -0
  380. /package/RAF/{018-workflow-forge/plans/001-add-task-number-progress.md → aaaabs-workflow-forge/plans/01-add-task-number-progress.md} +0 -0
  381. /package/RAF/{018-workflow-forge/plans/002-update-plan-do-prompts.md → aaaabs-workflow-forge/plans/02-update-plan-do-prompts.md} +0 -0
  382. /package/RAF/{019-verbose-chronicle → aaaabt-verbose-chronicle}/decisions.md +0 -0
  383. /package/RAF/{019-verbose-chronicle → aaaabt-verbose-chronicle}/input.md +0 -0
  384. /package/RAF/{019-verbose-chronicle/outcomes/001-amend-iteration-references.md → aaaabt-verbose-chronicle/outcomes/01-amend-iteration-references.md} +0 -0
  385. /package/RAF/{019-verbose-chronicle/outcomes/002-verbose-task-name-display.md → aaaabt-verbose-chronicle/outcomes/02-verbose-task-name-display.md} +0 -0
  386. /package/RAF/{019-verbose-chronicle/outcomes/003-verbose-streaming-fix.md → aaaabt-verbose-chronicle/outcomes/03-verbose-streaming-fix.md} +0 -0
  387. /package/RAF/{019-verbose-chronicle/outcomes/004-commit-verification-before-halt.md → aaaabt-verbose-chronicle/outcomes/04-commit-verification-before-halt.md} +0 -0
  388. /package/RAF/{019-verbose-chronicle/plans/001-amend-iteration-references.md → aaaabt-verbose-chronicle/plans/01-amend-iteration-references.md} +0 -0
  389. /package/RAF/{019-verbose-chronicle/plans/002-verbose-task-name-display.md → aaaabt-verbose-chronicle/plans/02-verbose-task-name-display.md} +0 -0
  390. /package/RAF/{019-verbose-chronicle/plans/003-verbose-streaming-fix.md → aaaabt-verbose-chronicle/plans/03-verbose-streaming-fix.md} +0 -0
  391. /package/RAF/{019-verbose-chronicle/plans/004-commit-verification-before-halt.md → aaaabt-verbose-chronicle/plans/04-commit-verification-before-halt.md} +0 -0
@@ -36,8 +36,8 @@ function truncate(str: string, maxLength: number): string {
36
36
  * @param status - Task status
37
37
  * @param name - Task name
38
38
  * @param elapsedMs - Optional elapsed time in milliseconds
39
- * @param taskId - Optional task ID for [NNN] prefix display
40
- * @returns Formatted string like "● [001] auth-login 1:23" or "✓ [001] auth-login 1/5"
39
+ * @param taskId - Optional task ID prefix display
40
+ * @returns Formatted string like "● 001-auth-login 1:23" or "✓ 001-auth-login 1/5"
41
41
  */
42
42
  export function formatTaskProgress(
43
43
  current: number,
@@ -49,7 +49,7 @@ export function formatTaskProgress(
49
49
  ): string {
50
50
  const symbol = SYMBOLS[status];
51
51
  const displayName = truncate(name || 'task', 40);
52
- const idPrefix = taskId ? `[${taskId}] ` : '';
52
+ const idPrefix = taskId ? `${taskId}-` : '';
53
53
 
54
54
  // Show elapsed time for running tasks, completed tasks, and failed tasks
55
55
  if (elapsedMs !== undefined) {
@@ -58,15 +58,8 @@ export function validateProjectExists(rafDir: string, projectName: string): stri
58
58
 
59
59
  for (const entry of entries) {
60
60
  if (entry.isDirectory()) {
61
- // Match numeric pattern like "001-project-name" (or legacy 01-project-name)
62
- const numericMatch = entry.name.match(/^\d{2,3}-(.+)$/);
63
- if (numericMatch && numericMatch[1] === projectName) {
64
- return path.join(rafDir, entry.name);
65
- }
66
-
67
- // Match base36 pattern like "a00-project-name"
68
- const base36Match = entry.name.match(/^[a-z][0-9a-z]{2}-(.+)$/i);
69
- if (base36Match && base36Match[1] === projectName) {
61
+ const match = entry.name.match(/^[a-z]{6}-(.+)$/i);
62
+ if (match && match[1] === projectName) {
70
63
  return path.join(rafDir, entry.name);
71
64
  }
72
65
  }
@@ -0,0 +1,85 @@
1
+ import { getAmendPrompt, AmendPromptParams } from '../../src/prompts/amend.js';
2
+
3
+ describe('Amend Prompt', () => {
4
+ const baseParams: AmendPromptParams = {
5
+ projectPath: '/test/project',
6
+ existingTasks: [
7
+ {
8
+ id: '01',
9
+ status: 'completed',
10
+ planFile: 'plans/01-setup.md',
11
+ taskName: 'setup',
12
+ },
13
+ {
14
+ id: '02',
15
+ status: 'pending',
16
+ planFile: 'plans/02-feature.md',
17
+ taskName: 'feature',
18
+ },
19
+ ],
20
+ nextTaskNumber: 3,
21
+ newTaskDescription: 'Add a new feature',
22
+ };
23
+
24
+ describe('getAmendPrompt', () => {
25
+ it('should return systemPrompt and userMessage', () => {
26
+ const result = getAmendPrompt(baseParams);
27
+
28
+ expect(result).toHaveProperty('systemPrompt');
29
+ expect(result).toHaveProperty('userMessage');
30
+ expect(typeof result.systemPrompt).toBe('string');
31
+ expect(typeof result.userMessage).toBe('string');
32
+ });
33
+
34
+ it('should include project path in system prompt', () => {
35
+ const { systemPrompt } = getAmendPrompt(baseParams);
36
+
37
+ expect(systemPrompt).toContain('/test/project');
38
+ });
39
+
40
+ it('should include existing tasks in system prompt', () => {
41
+ const { systemPrompt } = getAmendPrompt(baseParams);
42
+
43
+ expect(systemPrompt).toContain('Task 01');
44
+ expect(systemPrompt).toContain('Task 02');
45
+ expect(systemPrompt).toContain('[COMPLETED]');
46
+ expect(systemPrompt).toContain('[PENDING]');
47
+ });
48
+
49
+ it('should show raf do without --worktree when worktreeMode is false', () => {
50
+ const params: AmendPromptParams = {
51
+ ...baseParams,
52
+ worktreeMode: false,
53
+ };
54
+
55
+ const { systemPrompt } = getAmendPrompt(params);
56
+
57
+ expect(systemPrompt).toContain('raf do <project>');
58
+ expect(systemPrompt).not.toContain('--worktree');
59
+ });
60
+
61
+ it('should show raf do without --worktree when worktreeMode is undefined', () => {
62
+ const { systemPrompt } = getAmendPrompt(baseParams);
63
+
64
+ expect(systemPrompt).toContain('raf do <project>');
65
+ expect(systemPrompt).not.toContain('--worktree');
66
+ });
67
+
68
+ it('should show raf do with --worktree when worktreeMode is true', () => {
69
+ const params: AmendPromptParams = {
70
+ ...baseParams,
71
+ worktreeMode: true,
72
+ };
73
+
74
+ const { systemPrompt } = getAmendPrompt(params);
75
+
76
+ expect(systemPrompt).toContain('raf do <project> --worktree');
77
+ });
78
+
79
+ it('should include new task description in user message', () => {
80
+ const { userMessage } = getAmendPrompt(baseParams);
81
+
82
+ expect(userMessage).toContain('Add a new feature');
83
+ });
84
+ });
85
+ });
@@ -854,7 +854,7 @@ describe('ClaudeRunner', () => {
854
854
  const mockProc = createMockProcess();
855
855
  mockSpawn.mockReturnValue(mockProc);
856
856
 
857
- const outcomePath = '/test/project/outcomes/001-task.md';
857
+ const outcomePath = '/test/project/outcomes/01-task.md';
858
858
 
859
859
  // Outcome file doesn't exist initially
860
860
  mockExistsSync.mockReturnValue(false);
@@ -893,7 +893,7 @@ describe('ClaudeRunner', () => {
893
893
  mockProc.kill = jest.fn();
894
894
  mockSpawn.mockReturnValue(mockProc);
895
895
 
896
- const outcomePath = '/test/project/outcomes/001-task.md';
896
+ const outcomePath = '/test/project/outcomes/01-task.md';
897
897
 
898
898
  // Outcome file already exists from previous failed run
899
899
  mockExistsSync.mockReturnValue(true);
@@ -981,8 +981,8 @@ describe('ClaudeRunner', () => {
981
981
 
982
982
  const commitContext = {
983
983
  preExecutionHead: 'aaa111',
984
- expectedPrefix: 'RAF[005:001]',
985
- outcomeFilePath: '/project/outcomes/001-task.md',
984
+ expectedPrefix: 'RAF[005:01]',
985
+ outcomeFilePath: '/project/outcomes/01-task.md',
986
986
  };
987
987
 
988
988
  beforeEach(() => {
@@ -998,7 +998,7 @@ describe('ClaudeRunner', () => {
998
998
 
999
999
  // Commit lands during grace period
1000
1000
  mockGetHeadCommitHash.mockReturnValue('bbb222');
1001
- mockGetHeadCommitMessage.mockReturnValue('RAF[005:001] Add feature');
1001
+ mockGetHeadCommitMessage.mockReturnValue('RAF[005:01] Add feature');
1002
1002
  mockIsFileCommittedInHead.mockReturnValue(true);
1003
1003
 
1004
1004
  const runner = new ClaudeRunner();
@@ -1042,7 +1042,7 @@ describe('ClaudeRunner', () => {
1042
1042
 
1043
1043
  // Now simulate commit landing during extended polling
1044
1044
  mockGetHeadCommitHash.mockReturnValue('bbb222');
1045
- mockGetHeadCommitMessage.mockReturnValue('RAF[005:001] Add feature');
1045
+ mockGetHeadCommitMessage.mockReturnValue('RAF[005:01] Add feature');
1046
1046
  mockIsFileCommittedInHead.mockReturnValue(true);
1047
1047
 
1048
1048
  // Advance to next commit poll interval
@@ -1131,7 +1131,7 @@ describe('ClaudeRunner', () => {
1131
1131
 
1132
1132
  // HEAD changed but message doesn't match expected prefix
1133
1133
  mockGetHeadCommitHash.mockReturnValue('bbb222');
1134
- mockGetHeadCommitMessage.mockReturnValue('RAF[005:002] Wrong task');
1134
+ mockGetHeadCommitMessage.mockReturnValue('RAF[005:02] Wrong task');
1135
1135
  mockIsFileCommittedInHead.mockReturnValue(true);
1136
1136
 
1137
1137
  const runner = new ClaudeRunner();
@@ -1148,7 +1148,7 @@ describe('ClaudeRunner', () => {
1148
1148
  expect(mockProc.kill).not.toHaveBeenCalled();
1149
1149
 
1150
1150
  // Fix commit message
1151
- mockGetHeadCommitMessage.mockReturnValue('RAF[005:001] Correct task');
1151
+ mockGetHeadCommitMessage.mockReturnValue('RAF[005:01] Correct task');
1152
1152
 
1153
1153
  // Next poll finds it
1154
1154
  jest.advanceTimersByTime(COMMIT_POLL_INTERVAL_MS);
@@ -1165,7 +1165,7 @@ describe('ClaudeRunner', () => {
1165
1165
 
1166
1166
  // HEAD changed and message matches, but file not committed
1167
1167
  mockGetHeadCommitHash.mockReturnValue('bbb222');
1168
- mockGetHeadCommitMessage.mockReturnValue('RAF[005:001] Add feature');
1168
+ mockGetHeadCommitMessage.mockReturnValue('RAF[005:01] Add feature');
1169
1169
  mockIsFileCommittedInHead.mockReturnValue(false);
1170
1170
 
1171
1171
  const runner = new ClaudeRunner();
@@ -0,0 +1,327 @@
1
+ import { execSync } from 'node:child_process';
2
+ import * as fs from 'node:fs';
3
+ import * as os from 'node:os';
4
+ import * as path from 'node:path';
5
+
6
+ /**
7
+ * Integration tests for commitPlanningArtifacts in worktree scenarios.
8
+ * Uses real git repos and worktrees to verify the commit behavior.
9
+ */
10
+
11
+ // Import the actual module (no mocking)
12
+ const { commitPlanningArtifacts } = await import('../../src/core/git.js');
13
+
14
+ /**
15
+ * Helper: create a temp directory for testing.
16
+ * Uses realpathSync to resolve symlinks (e.g., /tmp -> /private/tmp on macOS).
17
+ */
18
+ function makeTempDir(prefix: string): string {
19
+ return fs.realpathSync(fs.mkdtempSync(path.join(os.tmpdir(), prefix)));
20
+ }
21
+
22
+ /**
23
+ * Helper: initialise a bare-bones git repo with one commit.
24
+ */
25
+ function initGitRepo(dir: string): void {
26
+ execSync('git init', { cwd: dir, stdio: 'pipe' });
27
+ execSync('git config user.email "test@test.com"', { cwd: dir, stdio: 'pipe' });
28
+ execSync('git config user.name "Test"', { cwd: dir, stdio: 'pipe' });
29
+ fs.writeFileSync(path.join(dir, 'README.md'), '# Test repo\n');
30
+ execSync('git add .', { cwd: dir, stdio: 'pipe' });
31
+ execSync('git commit -m "Initial commit"', { cwd: dir, stdio: 'pipe' });
32
+ }
33
+
34
+ /**
35
+ * Helper: get the last commit message.
36
+ */
37
+ function getLastCommitMessage(cwd: string): string {
38
+ return execSync('git log -1 --format=%s', { cwd, encoding: 'utf-8', stdio: 'pipe' }).trim();
39
+ }
40
+
41
+ /**
42
+ * Helper: get list of files changed in the last commit.
43
+ */
44
+ function getLastCommitFiles(cwd: string): string[] {
45
+ const output = execSync('git show --name-only --format=""', {
46
+ cwd,
47
+ encoding: 'utf-8',
48
+ stdio: 'pipe',
49
+ }).trim();
50
+ return output ? output.split('\n').filter(Boolean) : [];
51
+ }
52
+
53
+ describe('commitPlanningArtifacts - worktree integration', () => {
54
+ let repoDir: string;
55
+ let worktreePath: string;
56
+ const worktreePaths: string[] = [];
57
+
58
+ beforeEach(() => {
59
+ repoDir = makeTempDir('raf-commit-wt-');
60
+ initGitRepo(repoDir);
61
+ });
62
+
63
+ afterEach(() => {
64
+ // Clean up worktrees first (before removing repo)
65
+ for (const wt of worktreePaths) {
66
+ try {
67
+ execSync(`git worktree remove "${wt}" --force`, { cwd: repoDir, stdio: 'pipe' });
68
+ } catch {
69
+ // Ignore cleanup errors
70
+ }
71
+ }
72
+ worktreePaths.length = 0;
73
+
74
+ // Clean up repo
75
+ try {
76
+ fs.rmSync(repoDir, { recursive: true, force: true });
77
+ } catch {
78
+ // Ignore cleanup errors
79
+ }
80
+ });
81
+
82
+ function createInitialProject(dir: string, projectFolder: string): string {
83
+ const projectPath = path.join(dir, 'RAF', projectFolder);
84
+ fs.mkdirSync(path.join(projectPath, 'plans'), { recursive: true });
85
+ fs.mkdirSync(path.join(projectPath, 'outcomes'), { recursive: true });
86
+ fs.writeFileSync(path.join(projectPath, 'input.md'), 'original input');
87
+ fs.writeFileSync(path.join(projectPath, 'decisions.md'), '# Decisions\n\n## Q1?\nA1');
88
+ fs.writeFileSync(path.join(projectPath, 'plans', '01-first-task.md'), '# Task: First');
89
+ return projectPath;
90
+ }
91
+
92
+ function createWorktreeForProject(repoDir: string, projectFolder: string): string {
93
+ const wtPath = path.join(makeTempDir('raf-wt-'), projectFolder);
94
+ execSync(`git worktree add "${wtPath}" -b "${projectFolder}"`, {
95
+ cwd: repoDir,
96
+ stdio: 'pipe',
97
+ });
98
+ worktreePaths.push(wtPath);
99
+ return wtPath;
100
+ }
101
+
102
+ it('should commit input.md and decisions.md changes in worktree', async () => {
103
+ const projectFolder = 'aatest-my-project';
104
+
105
+ // Create initial project and commit
106
+ createInitialProject(repoDir, projectFolder);
107
+ execSync('git add -A', { cwd: repoDir, stdio: 'pipe' });
108
+ execSync('git commit -m "Initial plan"', { cwd: repoDir, stdio: 'pipe' });
109
+
110
+ // Create worktree
111
+ worktreePath = createWorktreeForProject(repoDir, projectFolder);
112
+ const wtProjectPath = path.join(worktreePath, 'RAF', projectFolder);
113
+
114
+ // Simulate amend: update input.md and decisions.md
115
+ fs.writeFileSync(
116
+ path.join(wtProjectPath, 'input.md'),
117
+ 'original input\n\n---\n\nnew task description'
118
+ );
119
+ fs.writeFileSync(
120
+ path.join(wtProjectPath, 'decisions.md'),
121
+ '# Decisions\n\n## Q1?\nA1\n\n## Q2?\nA2'
122
+ );
123
+
124
+ // Call commitPlanningArtifacts with worktree cwd
125
+ await commitPlanningArtifacts(wtProjectPath, {
126
+ cwd: worktreePath,
127
+ });
128
+
129
+ // Verify commit was made
130
+ const lastMsg = getLastCommitMessage(worktreePath);
131
+ expect(lastMsg).toMatch(/RAF\[aatest\] Plan: my-project/);
132
+
133
+ // Verify both files are in the commit
134
+ const committedFiles = getLastCommitFiles(worktreePath);
135
+ expect(committedFiles).toContain(`RAF/${projectFolder}/input.md`);
136
+ expect(committedFiles).toContain(`RAF/${projectFolder}/decisions.md`);
137
+ });
138
+
139
+ it('should commit amend artifacts with additional plan files in worktree', async () => {
140
+ const projectFolder = 'aatest-my-project';
141
+
142
+ // Create initial project and commit
143
+ createInitialProject(repoDir, projectFolder);
144
+ execSync('git add -A', { cwd: repoDir, stdio: 'pipe' });
145
+ execSync('git commit -m "Initial plan"', { cwd: repoDir, stdio: 'pipe' });
146
+
147
+ // Create worktree
148
+ worktreePath = createWorktreeForProject(repoDir, projectFolder);
149
+ const wtProjectPath = path.join(worktreePath, 'RAF', projectFolder);
150
+
151
+ // Simulate amend: update files and create new plan
152
+ fs.writeFileSync(
153
+ path.join(wtProjectPath, 'input.md'),
154
+ 'original input\n\n---\n\nnew task description'
155
+ );
156
+ fs.writeFileSync(
157
+ path.join(wtProjectPath, 'decisions.md'),
158
+ '# Decisions\n\n## Q1?\nA1\n\n## Q2?\nA2'
159
+ );
160
+ fs.writeFileSync(
161
+ path.join(wtProjectPath, 'plans', '02-new-task.md'),
162
+ '# Task: New Task'
163
+ );
164
+
165
+ // Call commitPlanningArtifacts with additional files
166
+ const additionalFiles = [
167
+ path.join(wtProjectPath, 'plans', '02-new-task.md'),
168
+ ];
169
+ await commitPlanningArtifacts(wtProjectPath, {
170
+ cwd: worktreePath,
171
+ additionalFiles,
172
+ isAmend: true,
173
+ });
174
+
175
+ // Verify commit was made with Amend prefix
176
+ const lastMsg = getLastCommitMessage(worktreePath);
177
+ expect(lastMsg).toMatch(/RAF\[aatest\] Amend: my-project/);
178
+
179
+ // Verify all three files are in the commit
180
+ const committedFiles = getLastCommitFiles(worktreePath);
181
+ expect(committedFiles).toContain(`RAF/${projectFolder}/input.md`);
182
+ expect(committedFiles).toContain(`RAF/${projectFolder}/decisions.md`);
183
+ expect(committedFiles).toContain(`RAF/${projectFolder}/plans/02-new-task.md`);
184
+ });
185
+
186
+ it('should commit after worktree recreation from branch', async () => {
187
+ const projectFolder = 'aatest-my-project';
188
+
189
+ // Create initial project, commit, and create initial worktree
190
+ createInitialProject(repoDir, projectFolder);
191
+ execSync('git add -A', { cwd: repoDir, stdio: 'pipe' });
192
+ execSync('git commit -m "Initial plan"', { cwd: repoDir, stdio: 'pipe' });
193
+
194
+ // Create worktree
195
+ const initialWtPath = createWorktreeForProject(repoDir, projectFolder);
196
+ const initialWtProjectPath = path.join(initialWtPath, 'RAF', projectFolder);
197
+
198
+ // Commit something on the worktree branch (simulating initial plan commit)
199
+ fs.writeFileSync(
200
+ path.join(initialWtProjectPath, 'decisions.md'),
201
+ '# Decisions\n\n## Q1?\nA1\n\n## Q2?\nA2'
202
+ );
203
+ execSync('git add -A', { cwd: initialWtPath, stdio: 'pipe' });
204
+ execSync('git commit -m "Plan commit on branch"', { cwd: initialWtPath, stdio: 'pipe' });
205
+
206
+ // Remove the worktree (simulating cleanup after execution)
207
+ execSync(`git worktree remove "${initialWtPath}" --force`, {
208
+ cwd: repoDir,
209
+ stdio: 'pipe',
210
+ });
211
+ worktreePaths.splice(worktreePaths.indexOf(initialWtPath), 1);
212
+
213
+ // Recreate worktree from existing branch (simulating amend --worktree)
214
+ const recreatedWtPath = path.join(makeTempDir('raf-wt-recreated-'), projectFolder);
215
+ execSync(`git worktree add "${recreatedWtPath}" "${projectFolder}"`, {
216
+ cwd: repoDir,
217
+ stdio: 'pipe',
218
+ });
219
+ worktreePaths.push(recreatedWtPath);
220
+
221
+ const recreatedProjectPath = path.join(recreatedWtPath, 'RAF', projectFolder);
222
+
223
+ // Simulate amend: update input.md, update decisions.md, create new plan
224
+ fs.writeFileSync(
225
+ path.join(recreatedProjectPath, 'input.md'),
226
+ 'original input\n\n---\n\namend task description'
227
+ );
228
+ fs.writeFileSync(
229
+ path.join(recreatedProjectPath, 'decisions.md'),
230
+ '# Decisions\n\n## Q1?\nA1\n\n## Q2?\nA2\n\n## Q3?\nA3'
231
+ );
232
+ fs.writeFileSync(
233
+ path.join(recreatedProjectPath, 'plans', '02-new-task.md'),
234
+ '# Task: New Task'
235
+ );
236
+
237
+ // Call commitPlanningArtifacts with worktree cwd
238
+ const additionalFiles = [
239
+ path.join(recreatedProjectPath, 'plans', '02-new-task.md'),
240
+ ];
241
+ await commitPlanningArtifacts(recreatedProjectPath, {
242
+ cwd: recreatedWtPath,
243
+ additionalFiles,
244
+ isAmend: true,
245
+ });
246
+
247
+ // Verify commit was made
248
+ const lastMsg = getLastCommitMessage(recreatedWtPath);
249
+ expect(lastMsg).toMatch(/RAF\[aatest\] Amend: my-project/);
250
+
251
+ // Verify all files are in the commit
252
+ const committedFiles = getLastCommitFiles(recreatedWtPath);
253
+ expect(committedFiles).toContain(`RAF/${projectFolder}/input.md`);
254
+ expect(committedFiles).toContain(`RAF/${projectFolder}/decisions.md`);
255
+ expect(committedFiles).toContain(`RAF/${projectFolder}/plans/02-new-task.md`);
256
+ });
257
+
258
+ it('should work when only some files have changed', async () => {
259
+ const projectFolder = 'aatest-my-project';
260
+
261
+ // Create initial project and commit
262
+ createInitialProject(repoDir, projectFolder);
263
+ execSync('git add -A', { cwd: repoDir, stdio: 'pipe' });
264
+ execSync('git commit -m "Initial plan"', { cwd: repoDir, stdio: 'pipe' });
265
+
266
+ // Create worktree
267
+ worktreePath = createWorktreeForProject(repoDir, projectFolder);
268
+ const wtProjectPath = path.join(worktreePath, 'RAF', projectFolder);
269
+
270
+ // Only modify input.md (decisions.md unchanged)
271
+ fs.writeFileSync(
272
+ path.join(wtProjectPath, 'input.md'),
273
+ 'original input\n\n---\n\nnew task'
274
+ );
275
+
276
+ await commitPlanningArtifacts(wtProjectPath, {
277
+ cwd: worktreePath,
278
+ });
279
+
280
+ // Verify commit was made
281
+ const lastMsg = getLastCommitMessage(worktreePath);
282
+ expect(lastMsg).toMatch(/RAF\[aatest\] Plan: my-project/);
283
+
284
+ // Only input.md should be in the commit (decisions.md unchanged)
285
+ const committedFiles = getLastCommitFiles(worktreePath);
286
+ expect(committedFiles).toContain(`RAF/${projectFolder}/input.md`);
287
+ expect(committedFiles).not.toContain(`RAF/${projectFolder}/decisions.md`);
288
+ });
289
+
290
+ it('should handle non-worktree commit (standard mode) correctly', async () => {
291
+ const projectFolder = 'aatest-my-project';
292
+
293
+ // Create initial project and commit
294
+ createInitialProject(repoDir, projectFolder);
295
+ execSync('git add -A', { cwd: repoDir, stdio: 'pipe' });
296
+ execSync('git commit -m "Initial"', { cwd: repoDir, stdio: 'pipe' });
297
+
298
+ const projectPath = path.join(repoDir, 'RAF', projectFolder);
299
+
300
+ // Modify files in main repo
301
+ fs.writeFileSync(
302
+ path.join(projectPath, 'input.md'),
303
+ 'original input\n\n---\n\nnew task'
304
+ );
305
+ fs.writeFileSync(
306
+ path.join(projectPath, 'decisions.md'),
307
+ '# Decisions\n\n## Q1?\nA1\n\n## Q2?\nA2'
308
+ );
309
+
310
+ // Save and restore cwd
311
+ const savedCwd = process.cwd();
312
+ try {
313
+ process.chdir(repoDir);
314
+ await commitPlanningArtifacts(projectPath);
315
+ } finally {
316
+ process.chdir(savedCwd);
317
+ }
318
+
319
+ // Verify commit
320
+ const lastMsg = getLastCommitMessage(repoDir);
321
+ expect(lastMsg).toMatch(/RAF\[aatest\] Plan: my-project/);
322
+
323
+ const committedFiles = getLastCommitFiles(repoDir);
324
+ expect(committedFiles).toContain(`RAF/${projectFolder}/input.md`);
325
+ expect(committedFiles).toContain(`RAF/${projectFolder}/decisions.md`);
326
+ });
327
+ });