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
@@ -21,7 +21,7 @@ describe('do command blocked tasks', () => {
21
21
 
22
22
  beforeEach(() => {
23
23
  tempDir = fs.mkdtempSync(path.join(os.tmpdir(), 'raf-do-blocked-test-'));
24
- projectPath = path.join(tempDir, '001-test-project');
24
+ projectPath = path.join(tempDir, 'aaaaab-test-project');
25
25
  fs.mkdirSync(projectPath, { recursive: true });
26
26
  fs.mkdirSync(path.join(projectPath, 'plans'), { recursive: true });
27
27
  fs.mkdirSync(path.join(projectPath, 'outcomes'), { recursive: true });
@@ -36,18 +36,18 @@ describe('do command blocked tasks', () => {
36
36
  it('should mark task as blocked when dependency fails', () => {
37
37
  // Task 001 - no dependencies
38
38
  fs.writeFileSync(
39
- path.join(projectPath, 'plans', '001-setup.md'),
39
+ path.join(projectPath, 'plans', '01-setup.md'),
40
40
  '# Task: Setup\n\n## Objective\nSetup the project'
41
41
  );
42
42
  // Task 002 - depends on 001
43
43
  fs.writeFileSync(
44
- path.join(projectPath, 'plans', '002-build.md'),
45
- '# Task: Build\n\n## Objective\nBuild the project\n\n## Dependencies\n001'
44
+ path.join(projectPath, 'plans', '02-build.md'),
45
+ '# Task: Build\n\n## Objective\nBuild the project\n\n## Dependencies\n01'
46
46
  );
47
47
 
48
48
  // Mark task 001 as failed
49
49
  fs.writeFileSync(
50
- path.join(projectPath, 'outcomes', '001-setup.md'),
50
+ path.join(projectPath, 'outcomes', '01-setup.md'),
51
51
  '# Task 001 - Failed\n\n<promise>FAILED</promise>'
52
52
  );
53
53
 
@@ -60,23 +60,23 @@ describe('do command blocked tasks', () => {
60
60
  it('should cascade blocking through multiple tasks', () => {
61
61
  // Task 001 - no dependencies
62
62
  fs.writeFileSync(
63
- path.join(projectPath, 'plans', '001-first.md'),
63
+ path.join(projectPath, 'plans', '01-first.md'),
64
64
  '# Task: First'
65
65
  );
66
66
  // Task 002 - depends on 001
67
67
  fs.writeFileSync(
68
- path.join(projectPath, 'plans', '002-second.md'),
69
- '# Task: Second\n\n## Dependencies\n001'
68
+ path.join(projectPath, 'plans', '02-second.md'),
69
+ '# Task: Second\n\n## Dependencies\n01'
70
70
  );
71
71
  // Task 003 - depends on 002
72
72
  fs.writeFileSync(
73
- path.join(projectPath, 'plans', '003-third.md'),
74
- '# Task: Third\n\n## Dependencies\n002'
73
+ path.join(projectPath, 'plans', '03-third.md'),
74
+ '# Task: Third\n\n## Dependencies\n02'
75
75
  );
76
76
 
77
77
  // Mark task 001 as failed
78
78
  fs.writeFileSync(
79
- path.join(projectPath, 'outcomes', '001-first.md'),
79
+ path.join(projectPath, 'outcomes', '01-first.md'),
80
80
  '# Task 001 - Failed\n\n<promise>FAILED</promise>'
81
81
  );
82
82
 
@@ -89,17 +89,17 @@ describe('do command blocked tasks', () => {
89
89
 
90
90
  it('should not block task if dependency succeeds', () => {
91
91
  fs.writeFileSync(
92
- path.join(projectPath, 'plans', '001-setup.md'),
92
+ path.join(projectPath, 'plans', '01-setup.md'),
93
93
  '# Task: Setup'
94
94
  );
95
95
  fs.writeFileSync(
96
- path.join(projectPath, 'plans', '002-build.md'),
97
- '# Task: Build\n\n## Dependencies\n001'
96
+ path.join(projectPath, 'plans', '02-build.md'),
97
+ '# Task: Build\n\n## Dependencies\n01'
98
98
  );
99
99
 
100
100
  // Mark task 001 as complete
101
101
  fs.writeFileSync(
102
- path.join(projectPath, 'outcomes', '001-setup.md'),
102
+ path.join(projectPath, 'outcomes', '01-setup.md'),
103
103
  '# Task 001 - Complete\n\n<promise>COMPLETE</promise>'
104
104
  );
105
105
 
@@ -111,25 +111,25 @@ describe('do command blocked tasks', () => {
111
111
 
112
112
  it('should block task when one of multiple dependencies fails', () => {
113
113
  fs.writeFileSync(
114
- path.join(projectPath, 'plans', '001-first.md'),
114
+ path.join(projectPath, 'plans', '01-first.md'),
115
115
  '# Task: First'
116
116
  );
117
117
  fs.writeFileSync(
118
- path.join(projectPath, 'plans', '002-second.md'),
118
+ path.join(projectPath, 'plans', '02-second.md'),
119
119
  '# Task: Second'
120
120
  );
121
121
  fs.writeFileSync(
122
- path.join(projectPath, 'plans', '003-third.md'),
123
- '# Task: Third\n\n## Dependencies\n001, 002'
122
+ path.join(projectPath, 'plans', '03-third.md'),
123
+ '# Task: Third\n\n## Dependencies\n01, 02'
124
124
  );
125
125
 
126
126
  // Mark 001 as complete, 002 as failed
127
127
  fs.writeFileSync(
128
- path.join(projectPath, 'outcomes', '001-first.md'),
128
+ path.join(projectPath, 'outcomes', '01-first.md'),
129
129
  '# Task 001 - Complete\n\n<promise>COMPLETE</promise>'
130
130
  );
131
131
  fs.writeFileSync(
132
- path.join(projectPath, 'outcomes', '002-second.md'),
132
+ path.join(projectPath, 'outcomes', '02-second.md'),
133
133
  '# Task 002 - Failed\n\n<promise>FAILED</promise>'
134
134
  );
135
135
 
@@ -144,17 +144,17 @@ describe('do command blocked tasks', () => {
144
144
  describe('getNextExecutableTask with blocked tasks', () => {
145
145
  it('should skip blocked tasks and return null if only blocked remain', () => {
146
146
  fs.writeFileSync(
147
- path.join(projectPath, 'plans', '001-setup.md'),
147
+ path.join(projectPath, 'plans', '01-setup.md'),
148
148
  '# Task: Setup'
149
149
  );
150
150
  fs.writeFileSync(
151
- path.join(projectPath, 'plans', '002-build.md'),
152
- '# Task: Build\n\n## Dependencies\n001'
151
+ path.join(projectPath, 'plans', '02-build.md'),
152
+ '# Task: Build\n\n## Dependencies\n01'
153
153
  );
154
154
 
155
155
  // Mark task 001 as failed
156
156
  fs.writeFileSync(
157
- path.join(projectPath, 'outcomes', '001-setup.md'),
157
+ path.join(projectPath, 'outcomes', '01-setup.md'),
158
158
  '# Task 001 - Failed\n\n<promise>FAILED</promise>'
159
159
  );
160
160
 
@@ -162,27 +162,27 @@ describe('do command blocked tasks', () => {
162
162
  const nextTask = getNextExecutableTask(state);
163
163
 
164
164
  // Should return the failed task for retry, not the blocked one
165
- expect(nextTask?.id).toBe('001');
165
+ expect(nextTask?.id).toBe('01');
166
166
  expect(nextTask?.status).toBe('failed');
167
167
  });
168
168
 
169
169
  it('should return pending tasks before failed tasks', () => {
170
170
  fs.writeFileSync(
171
- path.join(projectPath, 'plans', '001-first.md'),
171
+ path.join(projectPath, 'plans', '01-first.md'),
172
172
  '# Task: First'
173
173
  );
174
174
  fs.writeFileSync(
175
- path.join(projectPath, 'plans', '002-second.md'),
175
+ path.join(projectPath, 'plans', '02-second.md'),
176
176
  '# Task: Second'
177
177
  );
178
178
  fs.writeFileSync(
179
- path.join(projectPath, 'plans', '003-third.md'),
180
- '# Task: Third\n\n## Dependencies\n001'
179
+ path.join(projectPath, 'plans', '03-third.md'),
180
+ '# Task: Third\n\n## Dependencies\n01'
181
181
  );
182
182
 
183
183
  // Mark 001 as failed, 002 remains pending
184
184
  fs.writeFileSync(
185
- path.join(projectPath, 'outcomes', '001-first.md'),
185
+ path.join(projectPath, 'outcomes', '01-first.md'),
186
186
  '# Task 001 - Failed\n\n<promise>FAILED</promise>'
187
187
  );
188
188
 
@@ -190,7 +190,7 @@ describe('do command blocked tasks', () => {
190
190
  const nextTask = getNextExecutableTask(state);
191
191
 
192
192
  // Should return pending task 002, not failed 001
193
- expect(nextTask?.id).toBe('002');
193
+ expect(nextTask?.id).toBe('02');
194
194
  expect(nextTask?.status).toBe('pending');
195
195
  });
196
196
  });
@@ -198,25 +198,25 @@ describe('do command blocked tasks', () => {
198
198
  describe('getDerivedStats with blocked tasks', () => {
199
199
  it('should count blocked tasks separately', () => {
200
200
  fs.writeFileSync(
201
- path.join(projectPath, 'plans', '001-first.md'),
201
+ path.join(projectPath, 'plans', '01-first.md'),
202
202
  '# Task: First'
203
203
  );
204
204
  fs.writeFileSync(
205
- path.join(projectPath, 'plans', '002-second.md'),
206
- '# Task: Second\n\n## Dependencies\n001'
205
+ path.join(projectPath, 'plans', '02-second.md'),
206
+ '# Task: Second\n\n## Dependencies\n01'
207
207
  );
208
208
  fs.writeFileSync(
209
- path.join(projectPath, 'plans', '003-third.md'),
210
- '# Task: Third\n\n## Dependencies\n002'
209
+ path.join(projectPath, 'plans', '03-third.md'),
210
+ '# Task: Third\n\n## Dependencies\n02'
211
211
  );
212
212
  fs.writeFileSync(
213
- path.join(projectPath, 'plans', '004-fourth.md'),
213
+ path.join(projectPath, 'plans', '04-fourth.md'),
214
214
  '# Task: Fourth'
215
215
  );
216
216
 
217
217
  // Mark task 001 as failed
218
218
  fs.writeFileSync(
219
- path.join(projectPath, 'outcomes', '001-first.md'),
219
+ path.join(projectPath, 'outcomes', '01-first.md'),
220
220
  '# Task 001 - Failed\n\n<promise>FAILED</promise>'
221
221
  );
222
222
 
@@ -234,17 +234,17 @@ describe('do command blocked tasks', () => {
234
234
  describe('isProjectComplete with blocked tasks', () => {
235
235
  it('should not consider project complete if blocked tasks exist', () => {
236
236
  fs.writeFileSync(
237
- path.join(projectPath, 'plans', '001-first.md'),
237
+ path.join(projectPath, 'plans', '01-first.md'),
238
238
  '# Task: First'
239
239
  );
240
240
  fs.writeFileSync(
241
- path.join(projectPath, 'plans', '002-second.md'),
242
- '# Task: Second\n\n## Dependencies\n001'
241
+ path.join(projectPath, 'plans', '02-second.md'),
242
+ '# Task: Second\n\n## Dependencies\n01'
243
243
  );
244
244
 
245
245
  // Mark 001 as failed (002 becomes blocked)
246
246
  fs.writeFileSync(
247
- path.join(projectPath, 'outcomes', '001-first.md'),
247
+ path.join(projectPath, 'outcomes', '01-first.md'),
248
248
  '# Task 001 - Failed\n\n<promise>FAILED</promise>'
249
249
  );
250
250
 
@@ -257,16 +257,16 @@ describe('do command blocked tasks', () => {
257
257
  describe('hasProjectFailed with blocked tasks', () => {
258
258
  it('should report project as failed when there are failed tasks', () => {
259
259
  fs.writeFileSync(
260
- path.join(projectPath, 'plans', '001-first.md'),
260
+ path.join(projectPath, 'plans', '01-first.md'),
261
261
  '# Task: First'
262
262
  );
263
263
  fs.writeFileSync(
264
- path.join(projectPath, 'plans', '002-second.md'),
265
- '# Task: Second\n\n## Dependencies\n001'
264
+ path.join(projectPath, 'plans', '02-second.md'),
265
+ '# Task: Second\n\n## Dependencies\n01'
266
266
  );
267
267
 
268
268
  fs.writeFileSync(
269
- path.join(projectPath, 'outcomes', '001-first.md'),
269
+ path.join(projectPath, 'outcomes', '01-first.md'),
270
270
  '# Task 001 - Failed\n\n<promise>FAILED</promise>'
271
271
  );
272
272
 
@@ -279,13 +279,13 @@ describe('do command blocked tasks', () => {
279
279
  // This is a theoretical edge case - blocked tasks always have a failed root cause
280
280
  // But if only blocked outcome files exist (without failed), hasProjectFailed should be false
281
281
  fs.writeFileSync(
282
- path.join(projectPath, 'plans', '001-first.md'),
282
+ path.join(projectPath, 'plans', '01-first.md'),
283
283
  '# Task: First'
284
284
  );
285
285
 
286
286
  // Mark as blocked (artificial - in practice there would be a failed dep)
287
287
  fs.writeFileSync(
288
- path.join(projectPath, 'outcomes', '001-first.md'),
288
+ path.join(projectPath, 'outcomes', '01-first.md'),
289
289
  '# Task 001 - Blocked\n\n<promise>BLOCKED</promise>'
290
290
  );
291
291
 
@@ -299,11 +299,11 @@ describe('do command blocked tasks', () => {
299
299
  describe('blocked outcome file format', () => {
300
300
  it('should recognize BLOCKED marker in outcome files', () => {
301
301
  fs.writeFileSync(
302
- path.join(projectPath, 'plans', '001-task.md'),
302
+ path.join(projectPath, 'plans', '01-task.md'),
303
303
  '# Task: Task'
304
304
  );
305
305
  fs.writeFileSync(
306
- path.join(projectPath, 'outcomes', '001-task.md'),
306
+ path.join(projectPath, 'outcomes', '01-task.md'),
307
307
  '# Outcome: Task 001 Blocked\n\n## Summary\n\nBlocked by dependency.\n\n<promise>BLOCKED</promise>'
308
308
  );
309
309
 
@@ -315,9 +315,9 @@ describe('do command blocked tasks', () => {
315
315
 
316
316
  describe('getOutcomeFilePath', () => {
317
317
  it('should generate correct outcome file path', () => {
318
- const outcomePath = getOutcomeFilePath(projectPath, '002', 'build-project');
318
+ const outcomePath = getOutcomeFilePath(projectPath, '02', 'build-project');
319
319
 
320
- expect(outcomePath).toBe(path.join(projectPath, 'outcomes', '002-build-project.md'));
320
+ expect(outcomePath).toBe(path.join(projectPath, 'outcomes', '02-build-project.md'));
321
321
  });
322
322
  });
323
323
  });
@@ -15,182 +15,89 @@ describe('Do Command - Identifier Support', () => {
15
15
  });
16
16
 
17
17
  describe('Single Project Full Folder Name Resolution', () => {
18
- it('should resolve project by full numeric folder name: raf do 001-fix-stuff', () => {
19
- fs.mkdirSync(path.join(tempDir, '001-fix-stuff'));
20
- const result = resolveProjectIdentifier(tempDir, '001-fix-stuff');
21
- expect(result).toBe(path.join(tempDir, '001-fix-stuff'));
18
+ it('should resolve project by full 6-char prefix folder name: raf do aaaaab-fix-stuff', () => {
19
+ fs.mkdirSync(path.join(tempDir, 'aaaaab-fix-stuff'));
20
+ const result = resolveProjectIdentifier(tempDir, 'aaaaab-fix-stuff');
21
+ expect(result).toBe(path.join(tempDir, 'aaaaab-fix-stuff'));
22
22
  });
23
23
 
24
- it('should resolve project by full base36 folder name: raf do a00-project', () => {
25
- fs.mkdirSync(path.join(tempDir, 'a00-project'));
26
- const result = resolveProjectIdentifier(tempDir, 'a00-project');
27
- expect(result).toBe(path.join(tempDir, 'a00-project'));
24
+ it('should resolve project by full base26 folder name: raf do abcdef-project', () => {
25
+ fs.mkdirSync(path.join(tempDir, 'abcdef-project'));
26
+ const result = resolveProjectIdentifier(tempDir, 'abcdef-project');
27
+ expect(result).toBe(path.join(tempDir, 'abcdef-project'));
28
28
  });
29
29
 
30
- it('should resolve 2-digit prefix full folder name', () => {
31
- fs.mkdirSync(path.join(tempDir, '01-short'));
32
- const result = resolveProjectIdentifier(tempDir, '01-short');
33
- expect(result).toBe(path.join(tempDir, '01-short'));
34
- });
35
-
36
- it('should resolve 3-digit prefix full folder name', () => {
37
- fs.mkdirSync(path.join(tempDir, '123-three-digits'));
38
- const result = resolveProjectIdentifier(tempDir, '123-three-digits');
39
- expect(result).toBe(path.join(tempDir, '123-three-digits'));
40
- });
41
- });
42
-
43
- describe('Multiple Projects with Full Folder Names: raf do 001-a 002-b', () => {
44
- it('should resolve multiple projects by full folder names', () => {
45
- fs.mkdirSync(path.join(tempDir, '001-project-a'));
46
- fs.mkdirSync(path.join(tempDir, '002-project-b'));
47
- fs.mkdirSync(path.join(tempDir, '003-project-c'));
48
-
49
- const identifiers = ['001-project-a', '002-project-b', '003-project-c'];
50
- const resolved = identifiers.map((id) => resolveProjectIdentifier(tempDir, id));
51
-
52
- expect(resolved).toHaveLength(3);
53
- expect(resolved[0]).toBe(path.join(tempDir, '001-project-a'));
54
- expect(resolved[1]).toBe(path.join(tempDir, '002-project-b'));
55
- expect(resolved[2]).toBe(path.join(tempDir, '003-project-c'));
56
- });
57
-
58
- it('should handle gaps in project numbers with full folder names', () => {
59
- fs.mkdirSync(path.join(tempDir, '001-first'));
60
- fs.mkdirSync(path.join(tempDir, '005-fifth'));
61
-
62
- const identifiers = ['001-first', '005-fifth'];
63
- const resolved = identifiers.map((id) => resolveProjectIdentifier(tempDir, id));
64
-
65
- expect(resolved).toHaveLength(2);
66
- expect(resolved[0]).toBe(path.join(tempDir, '001-first'));
67
- expect(resolved[1]).toBe(path.join(tempDir, '005-fifth'));
68
- });
69
- });
70
-
71
- describe('Mixed Formats: raf do 3 001-fix-stuff my-project', () => {
72
- it('should resolve mixed number, full folder name, and project name', () => {
73
- fs.mkdirSync(path.join(tempDir, '003-by-number'));
74
- fs.mkdirSync(path.join(tempDir, '001-fix-stuff'));
75
- fs.mkdirSync(path.join(tempDir, '002-my-project'));
76
-
77
- const identifiers = ['3', '001-fix-stuff', 'my-project'];
78
- const resolved = identifiers.map((id) => resolveProjectIdentifier(tempDir, id));
79
-
80
- expect(resolved).toHaveLength(3);
81
- expect(resolved[0]).toBe(path.join(tempDir, '003-by-number'));
82
- expect(resolved[1]).toBe(path.join(tempDir, '001-fix-stuff'));
83
- expect(resolved[2]).toBe(path.join(tempDir, '002-my-project'));
84
- });
85
-
86
- it('should resolve mixed base36 prefix and full folder names', () => {
87
- fs.mkdirSync(path.join(tempDir, 'a00-by-prefix'));
88
- fs.mkdirSync(path.join(tempDir, '001-full-name'));
89
- fs.mkdirSync(path.join(tempDir, 'b00-another-prefix'));
90
-
91
- const identifiers = ['a00', '001-full-name', 'b00-another-prefix'];
92
- const resolved = identifiers.map((id) => resolveProjectIdentifier(tempDir, id));
93
-
94
- expect(resolved).toHaveLength(3);
95
- expect(resolved[0]).toBe(path.join(tempDir, 'a00-by-prefix'));
96
- expect(resolved[1]).toBe(path.join(tempDir, '001-full-name'));
97
- expect(resolved[2]).toBe(path.join(tempDir, 'b00-another-prefix'));
98
- });
99
-
100
- it('should resolve all five identifier formats', () => {
101
- fs.mkdirSync(path.join(tempDir, '001-project-one'));
102
- fs.mkdirSync(path.join(tempDir, '002-project-two'));
103
- fs.mkdirSync(path.join(tempDir, '003-project-three'));
104
- fs.mkdirSync(path.join(tempDir, 'a00-project-four'));
105
- fs.mkdirSync(path.join(tempDir, '005-project-five'));
106
-
107
- const identifiers = [
108
- '1', // Short number
109
- '002', // Padded number
110
- '003-project-three', // Full numeric folder name
111
- 'project-four', // Project name
112
- 'a00', // Base36 prefix
113
- ];
114
- const resolved = identifiers.map((id) => resolveProjectIdentifier(tempDir, id));
115
-
116
- expect(resolved).toHaveLength(5);
117
- expect(resolved[0]).toBe(path.join(tempDir, '001-project-one'));
118
- expect(resolved[1]).toBe(path.join(tempDir, '002-project-two'));
119
- expect(resolved[2]).toBe(path.join(tempDir, '003-project-three'));
120
- expect(resolved[3]).toBe(path.join(tempDir, 'a00-project-four'));
121
- expect(resolved[4]).toBe(path.join(tempDir, 'a00-project-four'));
30
+ it('should resolve full folder name with all-numeric prefix', () => {
31
+ fs.mkdirSync(path.join(tempDir, 'aaaadt-all-letters'));
32
+ const result = resolveProjectIdentifier(tempDir, 'aaaadt-all-letters');
33
+ expect(result).toBe(path.join(tempDir, 'aaaadt-all-letters'));
122
34
  });
123
35
  });
124
36
 
125
37
  describe('Error Messages for Non-Matching Full Folder Names', () => {
126
38
  it('should return null for non-existent full folder name', () => {
127
- fs.mkdirSync(path.join(tempDir, '001-existing'));
128
- const result = resolveProjectIdentifier(tempDir, '002-non-existent');
39
+ fs.mkdirSync(path.join(tempDir, 'aaaaab-existing'));
40
+ const result = resolveProjectIdentifier(tempDir, 'aaaaac-non-existent');
129
41
  expect(result).toBeNull();
130
42
  });
131
43
 
132
44
  it('should return null when prefix exists but name differs', () => {
133
- fs.mkdirSync(path.join(tempDir, '001-actual-name'));
134
- const result = resolveProjectIdentifier(tempDir, '001-different-name');
45
+ fs.mkdirSync(path.join(tempDir, 'aaaaab-actual-name'));
46
+ const result = resolveProjectIdentifier(tempDir, 'aaaaab-different-name');
135
47
  expect(result).toBeNull();
136
48
  });
137
49
 
138
50
  it('should return null when name exists but prefix differs', () => {
139
- fs.mkdirSync(path.join(tempDir, '001-my-project'));
140
- const result = resolveProjectIdentifier(tempDir, '999-my-project');
51
+ fs.mkdirSync(path.join(tempDir, 'aaaaab-my-project'));
52
+ const result = resolveProjectIdentifier(tempDir, 'aaabmm-my-project');
141
53
  expect(result).toBeNull();
142
54
  });
143
55
 
144
- it('should return null for base36 full folder name when only numeric exists', () => {
145
- fs.mkdirSync(path.join(tempDir, '001-my-project'));
146
- const result = resolveProjectIdentifier(tempDir, 'a01-my-project');
56
+ it('should return null for non-matching full folder name', () => {
57
+ fs.mkdirSync(path.join(tempDir, 'aaaaab-my-project'));
58
+ const result = resolveProjectIdentifier(tempDir, 'abcdef-my-project');
147
59
  expect(result).toBeNull();
148
60
  });
149
61
  });
150
62
 
151
- describe('Backward Compatibility', () => {
63
+ describe('Identifier Formats', () => {
152
64
  beforeEach(() => {
153
- fs.mkdirSync(path.join(tempDir, '001-my-project'));
154
- fs.mkdirSync(path.join(tempDir, '002-another-project'));
155
- fs.mkdirSync(path.join(tempDir, 'a00-base36-project'));
156
- });
157
-
158
- it('should still resolve by number (short)', () => {
159
- expect(resolveProjectIdentifier(tempDir, '1')).toBe(path.join(tempDir, '001-my-project'));
160
- expect(resolveProjectIdentifier(tempDir, '2')).toBe(path.join(tempDir, '002-another-project'));
65
+ fs.mkdirSync(path.join(tempDir, 'aaaaab-my-project'));
66
+ fs.mkdirSync(path.join(tempDir, 'aaaaac-another-project'));
67
+ fs.mkdirSync(path.join(tempDir, 'ghijkl-alpha-project'));
161
68
  });
162
69
 
163
- it('should still resolve by number (padded)', () => {
164
- expect(resolveProjectIdentifier(tempDir, '001')).toBe(path.join(tempDir, '001-my-project'));
165
- expect(resolveProjectIdentifier(tempDir, '002')).toBe(path.join(tempDir, '002-another-project'));
70
+ it('should resolve by 6-char base26 prefix', () => {
71
+ expect(resolveProjectIdentifier(tempDir, 'aaaaab')).toBe(path.join(tempDir, 'aaaaab-my-project'));
72
+ expect(resolveProjectIdentifier(tempDir, 'aaaaac')).toBe(path.join(tempDir, 'aaaaac-another-project'));
166
73
  });
167
74
 
168
- it('should still resolve by base36 prefix', () => {
169
- expect(resolveProjectIdentifier(tempDir, 'a00')).toBe(path.join(tempDir, 'a00-base36-project'));
75
+ it('should resolve by base26 prefix', () => {
76
+ expect(resolveProjectIdentifier(tempDir, 'ghijkl')).toBe(path.join(tempDir, 'ghijkl-alpha-project'));
170
77
  });
171
78
 
172
- it('should still resolve by project name', () => {
173
- expect(resolveProjectIdentifier(tempDir, 'my-project')).toBe(path.join(tempDir, '001-my-project'));
174
- expect(resolveProjectIdentifier(tempDir, 'another-project')).toBe(path.join(tempDir, '002-another-project'));
175
- expect(resolveProjectIdentifier(tempDir, 'base36-project')).toBe(path.join(tempDir, 'a00-base36-project'));
79
+ it('should resolve by project name', () => {
80
+ expect(resolveProjectIdentifier(tempDir, 'my-project')).toBe(path.join(tempDir, 'aaaaab-my-project'));
81
+ expect(resolveProjectIdentifier(tempDir, 'another-project')).toBe(path.join(tempDir, 'aaaaac-another-project'));
82
+ expect(resolveProjectIdentifier(tempDir, 'alpha-project')).toBe(path.join(tempDir, 'ghijkl-alpha-project'));
176
83
  });
177
84
  });
178
85
 
179
86
  describe('Project Name Extraction with Full Folder Names', () => {
180
- it('should extract name from numeric full folder path', () => {
181
- const projectPath = path.join(tempDir, '001-my-project');
87
+ it('should extract name from 6-char prefix folder path', () => {
88
+ const projectPath = path.join(tempDir, 'aaaaab-my-project');
182
89
  const name = extractProjectName(projectPath);
183
90
  expect(name).toBe('my-project');
184
91
  });
185
92
 
186
- it('should extract name from base36 full folder path', () => {
187
- const projectPath = path.join(tempDir, 'a00-my-project');
93
+ it('should extract name from base26 full folder path', () => {
94
+ const projectPath = path.join(tempDir, 'abcdef-my-project');
188
95
  const name = extractProjectName(projectPath);
189
96
  expect(name).toBe('my-project');
190
97
  });
191
98
 
192
99
  it('should handle multi-hyphen names', () => {
193
- const projectPath = path.join(tempDir, '001-my-cool-project-name');
100
+ const projectPath = path.join(tempDir, 'aaaaab-my-cool-project-name');
194
101
  const name = extractProjectName(projectPath);
195
102
  expect(name).toBe('my-cool-project-name');
196
103
  });