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.
- package/CLAUDE.md +118 -22
- package/RAF/aaaabt-verbose-chronicle/decisions.md +25 -0
- package/RAF/aaaabt-verbose-chronicle/input.md +3 -0
- package/RAF/aaaabt-verbose-chronicle/outcomes/01-amend-iteration-references.md +25 -0
- package/RAF/aaaabt-verbose-chronicle/outcomes/02-verbose-task-name-display.md +31 -0
- package/RAF/aaaabt-verbose-chronicle/outcomes/03-verbose-streaming-fix.md +48 -0
- package/RAF/aaaabt-verbose-chronicle/outcomes/04-commit-verification-before-halt.md +56 -0
- package/RAF/aaaabt-verbose-chronicle/plans/01-amend-iteration-references.md +35 -0
- package/RAF/aaaabt-verbose-chronicle/plans/02-verbose-task-name-display.md +38 -0
- package/RAF/aaaabt-verbose-chronicle/plans/03-verbose-streaming-fix.md +45 -0
- package/RAF/aaaabt-verbose-chronicle/plans/04-commit-verification-before-halt.md +62 -0
- package/RAF/aaaacu-worktree-weaver/decisions.md +88 -0
- package/RAF/aaaacu-worktree-weaver/input.md +27 -0
- package/RAF/aaaacu-worktree-weaver/outcomes/01-git-worktree-utilities.md +41 -0
- package/RAF/aaaacu-worktree-weaver/outcomes/02-worktree-plan-command.md +44 -0
- package/RAF/aaaacu-worktree-weaver/outcomes/03-worktree-do-command.md +58 -0
- package/RAF/aaaacu-worktree-weaver/outcomes/04-auto-merge-and-cleanup.md +40 -0
- package/RAF/aaaacu-worktree-weaver/outcomes/05-worktree-tests.md +43 -0
- package/RAF/aaaacu-worktree-weaver/outcomes/06-update-documentation.md +33 -0
- package/RAF/aaaacu-worktree-weaver/plans/01-git-worktree-utilities.md +51 -0
- package/RAF/aaaacu-worktree-weaver/plans/02-worktree-plan-command.md +93 -0
- package/RAF/aaaacu-worktree-weaver/plans/03-worktree-do-command.md +81 -0
- package/RAF/aaaacu-worktree-weaver/plans/04-auto-merge-and-cleanup.md +51 -0
- package/RAF/aaaacu-worktree-weaver/plans/05-worktree-tests.md +52 -0
- package/RAF/aaaacu-worktree-weaver/plans/06-update-documentation.md +55 -0
- package/RAF/aaaacv-trim-the-fat/decisions.md +34 -0
- package/RAF/aaaacv-trim-the-fat/input.md +5 -0
- package/RAF/aaaacv-trim-the-fat/outcomes/01-add-worktree-support-to-status.md +43 -0
- package/RAF/aaaacv-trim-the-fat/outcomes/02-remove-multi-project-from-do.md +50 -0
- package/RAF/aaaacv-trim-the-fat/outcomes/03-commit-artifacts-on-amend.md +35 -0
- package/RAF/aaaacv-trim-the-fat/outcomes/04-worktree-aware-exit-messages.md +36 -0
- package/RAF/aaaacv-trim-the-fat/plans/01-add-worktree-support-to-status.md +43 -0
- package/RAF/aaaacv-trim-the-fat/plans/02-remove-multi-project-from-do.md +44 -0
- package/RAF/aaaacv-trim-the-fat/plans/03-commit-artifacts-on-amend.md +38 -0
- package/RAF/aaaacv-trim-the-fat/plans/04-worktree-aware-exit-messages.md +38 -0
- package/RAF/aaaacw-prune-cycle/decisions.md +25 -0
- package/RAF/aaaacw-prune-cycle/input.md +5 -0
- package/RAF/aaaacw-prune-cycle/outcomes/01-create-worktree-from-branch.md +32 -0
- package/RAF/aaaacw-prune-cycle/outcomes/02-cleanup-worktree-on-success.md +33 -0
- package/RAF/aaaacw-prune-cycle/outcomes/03-amend-recreate-worktree.md +40 -0
- package/RAF/aaaacw-prune-cycle/plans/01-create-worktree-from-branch.md +31 -0
- package/RAF/aaaacw-prune-cycle/plans/02-cleanup-worktree-on-success.md +38 -0
- package/RAF/aaaacw-prune-cycle/plans/03-amend-recreate-worktree.md +50 -0
- package/RAF/aaaacx-epoch-shift/decisions.md +25 -0
- package/RAF/aaaacx-epoch-shift/input.md +1 -0
- package/RAF/aaaacx-epoch-shift/outcomes/01-epoch-id-generation.md +34 -0
- package/RAF/aaaacx-epoch-shift/outcomes/02-update-pattern-matching.md +32 -0
- package/RAF/aaaacx-epoch-shift/outcomes/03-update-tests.md +59 -0
- package/RAF/aaaacx-epoch-shift/outcomes/04-update-documentation.md +30 -0
- package/RAF/aaaacx-epoch-shift/plans/01-epoch-id-generation.md +40 -0
- package/RAF/aaaacx-epoch-shift/plans/02-update-pattern-matching.md +60 -0
- package/RAF/aaaacx-epoch-shift/plans/03-update-tests.md +48 -0
- package/RAF/aaaacx-epoch-shift/plans/04-update-documentation.md +44 -0
- package/RAF/ahmpro-merge-guardian/decisions.md +25 -0
- package/RAF/ahmpro-merge-guardian/input.md +4 -0
- package/RAF/ahmpro-merge-guardian/outcomes/001-fix-amend-worktree-commit.md +45 -0
- package/RAF/ahmpro-merge-guardian/outcomes/002-base36-task-ids.md +55 -0
- package/RAF/ahmpro-merge-guardian/outcomes/003-worktree-pr-creation.md +41 -0
- package/RAF/ahmpro-merge-guardian/outcomes/004-post-execution-picker.md +53 -0
- package/RAF/ahmpro-merge-guardian/plans/001-fix-amend-worktree-commit.md +39 -0
- package/RAF/ahmpro-merge-guardian/plans/002-base36-task-ids.md +43 -0
- package/RAF/ahmpro-merge-guardian/plans/003-worktree-pr-creation.md +43 -0
- package/RAF/ahmpro-merge-guardian/plans/004-post-execution-picker.md +51 -0
- package/RAF/ahnbcu-letterjam/decisions.md +13 -0
- package/RAF/ahnbcu-letterjam/input.md +3 -0
- package/RAF/ahnbcu-letterjam/outcomes/01-base26-encoding.md +42 -0
- package/RAF/ahnbcu-letterjam/outcomes/02-update-tests.md +38 -0
- package/RAF/ahnbcu-letterjam/outcomes/03-migrate-command.md +51 -0
- package/RAF/ahnbcu-letterjam/outcomes/04-update-documentation.md +29 -0
- package/RAF/ahnbcu-letterjam/plans/01-base26-encoding.md +36 -0
- package/RAF/ahnbcu-letterjam/plans/02-update-tests.md +37 -0
- package/RAF/ahnbcu-letterjam/plans/03-migrate-command.md +49 -0
- package/RAF/ahnbcu-letterjam/plans/04-update-documentation.md +39 -0
- package/RAF/ahnwrk-worktree-weaver/decisions.md +19 -0
- package/RAF/ahnwrk-worktree-weaver/input.md +4 -0
- package/RAF/ahnwrk-worktree-weaver/outcomes/01-remove-co-authored-by.md +20 -0
- package/RAF/ahnwrk-worktree-weaver/outcomes/02-update-task-status-format.md +21 -0
- package/RAF/ahnwrk-worktree-weaver/outcomes/03-worktree-auto-discovery.md +34 -0
- package/RAF/ahnwrk-worktree-weaver/outcomes/04-fix-pr-description.md +30 -0
- package/RAF/ahnwrk-worktree-weaver/plans/01-remove-co-authored-by.md +26 -0
- package/RAF/ahnwrk-worktree-weaver/plans/02-update-task-status-format.md +27 -0
- package/RAF/ahnwrk-worktree-weaver/plans/03-worktree-auto-discovery.md +37 -0
- package/RAF/ahnwrk-worktree-weaver/plans/04-fix-pr-description.md +50 -0
- package/README.md +56 -10
- package/dist/commands/do.d.ts +15 -0
- package/dist/commands/do.d.ts.map +1 -1
- package/dist/commands/do.js +400 -131
- package/dist/commands/do.js.map +1 -1
- package/dist/commands/migrate.d.ts +14 -0
- package/dist/commands/migrate.d.ts.map +1 -0
- package/dist/commands/migrate.js +228 -0
- package/dist/commands/migrate.js.map +1 -0
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +237 -40
- package/dist/commands/plan.js.map +1 -1
- package/dist/commands/status.d.ts.map +1 -1
- package/dist/commands/status.js +221 -47
- package/dist/commands/status.js.map +1 -1
- package/dist/core/claude-runner.d.ts +52 -1
- package/dist/core/claude-runner.d.ts.map +1 -1
- package/dist/core/claude-runner.js +195 -17
- package/dist/core/claude-runner.js.map +1 -1
- package/dist/core/git.d.ts +29 -5
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +95 -18
- package/dist/core/git.js.map +1 -1
- package/dist/core/project-manager.d.ts.map +1 -1
- package/dist/core/project-manager.js +2 -2
- package/dist/core/project-manager.js.map +1 -1
- package/dist/core/pull-request.d.ts +84 -0
- package/dist/core/pull-request.d.ts.map +1 -0
- package/dist/core/pull-request.js +414 -0
- package/dist/core/pull-request.js.map +1 -0
- package/dist/core/state-derivation.d.ts +3 -3
- package/dist/core/state-derivation.d.ts.map +1 -1
- package/dist/core/state-derivation.js +18 -14
- package/dist/core/state-derivation.js.map +1 -1
- package/dist/core/worktree.d.ts +120 -0
- package/dist/core/worktree.d.ts.map +1 -0
- package/dist/core/worktree.js +322 -0
- package/dist/core/worktree.js.map +1 -0
- package/dist/index.js +2 -0
- package/dist/index.js.map +1 -1
- package/dist/parsers/stream-renderer.d.ts +42 -0
- package/dist/parsers/stream-renderer.d.ts.map +1 -0
- package/dist/parsers/stream-renderer.js +100 -0
- package/dist/parsers/stream-renderer.js.map +1 -0
- package/dist/prompts/amend.d.ts +1 -0
- package/dist/prompts/amend.d.ts.map +1 -1
- package/dist/prompts/amend.js +25 -10
- package/dist/prompts/amend.js.map +1 -1
- package/dist/prompts/execution.js +5 -5
- package/dist/prompts/execution.js.map +1 -1
- package/dist/prompts/planning.d.ts +1 -0
- package/dist/prompts/planning.d.ts.map +1 -1
- package/dist/prompts/planning.js +11 -10
- package/dist/prompts/planning.js.map +1 -1
- package/dist/types/config.d.ts +5 -0
- package/dist/types/config.d.ts.map +1 -1
- package/dist/ui/project-picker.d.ts +34 -3
- package/dist/ui/project-picker.d.ts.map +1 -1
- package/dist/ui/project-picker.js +78 -10
- package/dist/ui/project-picker.js.map +1 -1
- package/dist/utils/paths.d.ts +38 -43
- package/dist/utils/paths.d.ts.map +1 -1
- package/dist/utils/paths.js +123 -193
- package/dist/utils/paths.js.map +1 -1
- package/dist/utils/terminal-symbols.d.ts +2 -2
- package/dist/utils/terminal-symbols.js +3 -3
- package/dist/utils/terminal-symbols.js.map +1 -1
- package/dist/utils/validation.d.ts.map +1 -1
- package/dist/utils/validation.js +2 -8
- package/dist/utils/validation.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/do.ts +471 -142
- package/src/commands/migrate.ts +269 -0
- package/src/commands/plan.ts +264 -40
- package/src/commands/status.ts +252 -45
- package/src/core/claude-runner.ts +270 -17
- package/src/core/git.ts +99 -19
- package/src/core/project-manager.ts +2 -1
- package/src/core/pull-request.ts +480 -0
- package/src/core/state-derivation.ts +18 -14
- package/src/core/worktree.ts +357 -0
- package/src/index.ts +2 -0
- package/src/parsers/stream-renderer.ts +139 -0
- package/src/prompts/amend.ts +27 -9
- package/src/prompts/execution.ts +5 -5
- package/src/prompts/planning.ts +12 -10
- package/src/types/config.ts +6 -0
- package/src/ui/project-picker.ts +110 -10
- package/src/utils/paths.ts +129 -214
- package/src/utils/terminal-symbols.ts +3 -3
- package/src/utils/validation.ts +2 -9
- package/tests/unit/amend-prompt.test.ts +85 -0
- package/tests/unit/claude-runner.test.ts +567 -1
- package/tests/unit/commit-planning-artifacts-worktree.test.ts +327 -0
- package/tests/unit/commit-planning-artifacts.test.ts +303 -35
- package/tests/unit/dependency-integration.test.ts +95 -95
- package/tests/unit/do-blocked-tasks.test.ts +53 -53
- package/tests/unit/do-command.test.ts +39 -132
- package/tests/unit/do-rerun.test.ts +65 -65
- package/tests/unit/do-worktree-cleanup.test.ts +151 -0
- package/tests/unit/execution-prompt.test.ts +71 -60
- package/tests/unit/failure-history.test.ts +19 -19
- package/tests/unit/git-commit-helpers.test.ts +103 -0
- package/tests/unit/git-stash.test.ts +4 -4
- package/tests/unit/migrate-command.test.ts +197 -0
- package/tests/unit/outcome-content.test.ts +20 -20
- package/tests/unit/paths.test.ts +269 -467
- package/tests/unit/plan-amend-worktree-recreate.test.ts +246 -0
- package/tests/unit/plan-command.test.ts +144 -93
- package/tests/unit/planning-prompt.test.ts +41 -4
- package/tests/unit/post-execution-picker.test.ts +251 -0
- package/tests/unit/project-manager.test.ts +20 -8
- package/tests/unit/project-picker.test.ts +425 -42
- package/tests/unit/pull-request.test.ts +852 -0
- package/tests/unit/state-derivation.test.ts +138 -137
- package/tests/unit/status-command.test.ts +344 -76
- package/tests/unit/stream-renderer.test.ts +286 -0
- package/tests/unit/terminal-symbols.test.ts +4 -4
- package/tests/unit/worktree-integration.test.ts +405 -0
- package/tests/unit/worktree.test.ts +523 -0
- package/tests/unit/do-multiproject.test.ts +0 -270
- /package/RAF/{001-raf-task-improvements → aaaaab-raf-task-improvements}/input.md +0 -0
- /package/RAF/{001-raf-task-improvements/outcomes/001-add-decisions-folder.md → aaaaab-raf-task-improvements/outcomes/01-add-decisions-folder.md} +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /package/RAF/{001-raf-task-improvements → aaaaab-raf-task-improvements}/outcomes/SUMMARY.md +0 -0
- /package/RAF/{001-raf-task-improvements/plans/001-add-decisions-folder.md → aaaaab-raf-task-improvements/plans/01-add-decisions-folder.md} +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /package/RAF/{002-raf-task-improvements-execution → aaaaac-raf-task-improvements-execution}/decisions/DECISIONS.md +0 -0
- /package/RAF/{002-raf-task-improvements-execution → aaaaac-raf-task-improvements-execution}/input.md +0 -0
- /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
- /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
- /package/RAF/{002-raf-task-improvements-execution → aaaaac-raf-task-improvements-execution}/outcomes/SUMMARY.md +0 -0
- /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
- /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
- /package/RAF/{003-multi-project-execution → aaaaad-multi-project-execution}/decisions/DECISIONS.md +0 -0
- /package/RAF/{003-multi-project-execution → aaaaad-multi-project-execution}/input.md +0 -0
- /package/RAF/{003-multi-project-execution/outcomes/001-remove-state-json.md → aaaaad-multi-project-execution/outcomes/01-remove-state-json.md} +0 -0
- /package/RAF/{003-multi-project-execution/outcomes/002-update-raf-status.md → aaaaad-multi-project-execution/outcomes/02-update-raf-status.md} +0 -0
- /package/RAF/{003-multi-project-execution/outcomes/003-simplify-git-logic.md → aaaaad-multi-project-execution/outcomes/03-simplify-git-logic.md} +0 -0
- /package/RAF/{003-multi-project-execution/outcomes/004-auto-commit-planning.md → aaaaad-multi-project-execution/outcomes/04-auto-commit-planning.md} +0 -0
- /package/RAF/{003-multi-project-execution/outcomes/005-rerun-failed-tasks.md → aaaaad-multi-project-execution/outcomes/05-rerun-failed-tasks.md} +0 -0
- /package/RAF/{003-multi-project-execution/outcomes/006-multi-project-execution.md → aaaaad-multi-project-execution/outcomes/06-multi-project-execution.md} +0 -0
- /package/RAF/{003-multi-project-execution/outcomes/007-verify-timeout.md → aaaaad-multi-project-execution/outcomes/07-verify-timeout.md} +0 -0
- /package/RAF/{003-multi-project-execution/outcomes/008-move-decisions-file.md → aaaaad-multi-project-execution/outcomes/08-move-decisions-file.md} +0 -0
- /package/RAF/{003-multi-project-execution → aaaaad-multi-project-execution}/outcomes/SUMMARY.md +0 -0
- /package/RAF/{003-multi-project-execution/plans/001-remove-state-json.md → aaaaad-multi-project-execution/plans/01-remove-state-json.md} +0 -0
- /package/RAF/{003-multi-project-execution/plans/002-update-raf-status.md → aaaaad-multi-project-execution/plans/02-update-raf-status.md} +0 -0
- /package/RAF/{003-multi-project-execution/plans/003-simplify-git-logic.md → aaaaad-multi-project-execution/plans/03-simplify-git-logic.md} +0 -0
- /package/RAF/{003-multi-project-execution/plans/004-auto-commit-planning.md → aaaaad-multi-project-execution/plans/04-auto-commit-planning.md} +0 -0
- /package/RAF/{003-multi-project-execution/plans/005-rerun-failed-tasks.md → aaaaad-multi-project-execution/plans/05-rerun-failed-tasks.md} +0 -0
- /package/RAF/{003-multi-project-execution/plans/006-multi-project-execution.md → aaaaad-multi-project-execution/plans/06-multi-project-execution.md} +0 -0
- /package/RAF/{003-multi-project-execution/plans/007-verify-timeout.md → aaaaad-multi-project-execution/plans/07-verify-timeout.md} +0 -0
- /package/RAF/{003-multi-project-execution/plans/008-move-decisions-file.md → aaaaad-multi-project-execution/plans/08-move-decisions-file.md} +0 -0
- /package/RAF/{004-task-naming-optimization → aaaaae-task-naming-optimization}/decisions.md +0 -0
- /package/RAF/{004-task-naming-optimization → aaaaae-task-naming-optimization}/input.md +0 -0
- /package/RAF/{004-task-naming-optimization/outcomes/001-remove-summary-file.md → aaaaae-task-naming-optimization/outcomes/01-remove-summary-file.md} +0 -0
- /package/RAF/{004-task-naming-optimization/outcomes/002-base36-project-numbering.md → aaaaae-task-naming-optimization/outcomes/02-base36-project-numbering.md} +0 -0
- /package/RAF/{004-task-naming-optimization/outcomes/003-improve-haiku-prompt.md → aaaaae-task-naming-optimization/outcomes/03-improve-haiku-prompt.md} +0 -0
- /package/RAF/{004-task-naming-optimization → aaaaae-task-naming-optimization}/outcomes/SUMMARY.md +0 -0
- /package/RAF/{004-task-naming-optimization/plans/001-remove-summary-file.md → aaaaae-task-naming-optimization/plans/01-remove-summary-file.md} +0 -0
- /package/RAF/{004-task-naming-optimization/plans/002-base36-project-numbering.md → aaaaae-task-naming-optimization/plans/02-base36-project-numbering.md} +0 -0
- /package/RAF/{004-task-naming-optimization/plans/003-improve-haiku-prompt.md → aaaaae-task-naming-optimization/plans/03-improve-haiku-prompt.md} +0 -0
- /package/RAF/{005-task-naming-improvements → aaaaaf-task-naming-improvements}/decisions.md +0 -0
- /package/RAF/{005-task-naming-improvements → aaaaaf-task-naming-improvements}/input.md +0 -0
- /package/RAF/{005-task-naming-improvements/outcomes/001-enhance-identifier-resolution.md → aaaaaf-task-naming-improvements/outcomes/01-enhance-identifier-resolution.md} +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /package/RAF/{005-task-naming-improvements/outcomes/008-fix-timeout-label.md → aaaaaf-task-naming-improvements/outcomes/08-fix-timeout-label.md} +0 -0
- /package/RAF/{005-task-naming-improvements/plans/001-enhance-identifier-resolution.md → aaaaaf-task-naming-improvements/plans/01-enhance-identifier-resolution.md} +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /package/RAF/{005-task-naming-improvements/plans/008-fix-timeout-label.md → aaaaaf-task-naming-improvements/plans/08-fix-timeout-label.md} +0 -0
- /package/RAF/{006-fix-double-summary-headers → aaaaag-fix-double-summary-headers}/decisions.md +0 -0
- /package/RAF/{006-fix-double-summary-headers → aaaaag-fix-double-summary-headers}/input.md +0 -0
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /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
- /package/RAF/{007-improve-outcome-format → aaaaah-improve-outcome-format}/decisions.md +0 -0
- /package/RAF/{007-improve-outcome-format → aaaaah-improve-outcome-format}/input.md +0 -0
- /package/RAF/{007-improve-outcome-format/outcomes/001-update-execution-prompt.md → aaaaah-improve-outcome-format/outcomes/01-update-execution-prompt.md} +0 -0
- /package/RAF/{007-improve-outcome-format/outcomes/002-update-state-derivation.md → aaaaah-improve-outcome-format/outcomes/02-update-state-derivation.md} +0 -0
- /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
- /package/RAF/{007-improve-outcome-format/outcomes/004-implement-failure-analysis.md → aaaaah-improve-outcome-format/outcomes/04-implement-failure-analysis.md} +0 -0
- /package/RAF/{007-improve-outcome-format/outcomes/005-update-documentation.md → aaaaah-improve-outcome-format/outcomes/05-update-documentation.md} +0 -0
- /package/RAF/{007-improve-outcome-format/plans/001-update-execution-prompt.md → aaaaah-improve-outcome-format/plans/01-update-execution-prompt.md} +0 -0
- /package/RAF/{007-improve-outcome-format/plans/002-update-state-derivation.md → aaaaah-improve-outcome-format/plans/02-update-state-derivation.md} +0 -0
- /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
- /package/RAF/{007-improve-outcome-format/plans/004-implement-failure-analysis.md → aaaaah-improve-outcome-format/plans/04-implement-failure-analysis.md} +0 -0
- /package/RAF/{007-improve-outcome-format/plans/005-update-documentation.md → aaaaah-improve-outcome-format/plans/05-update-documentation.md} +0 -0
- /package/RAF/{008-beautiful-do → aaaaai-beautiful-do}/decisions.md +0 -0
- /package/RAF/{008-beautiful-do → aaaaai-beautiful-do}/input.md +0 -0
- /package/RAF/{008-beautiful-do/outcomes/001-terminal-symbols.md → aaaaai-beautiful-do/outcomes/01-terminal-symbols.md} +0 -0
- /package/RAF/{008-beautiful-do/outcomes/002-refactor-do-output.md → aaaaai-beautiful-do/outcomes/02-refactor-do-output.md} +0 -0
- /package/RAF/{008-beautiful-do/outcomes/003-refactor-status-output.md → aaaaai-beautiful-do/outcomes/03-refactor-status-output.md} +0 -0
- /package/RAF/{008-beautiful-do/outcomes/004-simplify-logger.md → aaaaai-beautiful-do/outcomes/04-simplify-logger.md} +0 -0
- /package/RAF/{008-beautiful-do/outcomes/005-add-tests.md → aaaaai-beautiful-do/outcomes/05-add-tests.md} +0 -0
- /package/RAF/{008-beautiful-do/plans/001-terminal-symbols.md → aaaaai-beautiful-do/plans/01-terminal-symbols.md} +0 -0
- /package/RAF/{008-beautiful-do/plans/002-refactor-do-output.md → aaaaai-beautiful-do/plans/02-refactor-do-output.md} +0 -0
- /package/RAF/{008-beautiful-do/plans/003-refactor-status-output.md → aaaaai-beautiful-do/plans/03-refactor-status-output.md} +0 -0
- /package/RAF/{008-beautiful-do/plans/004-simplify-logger.md → aaaaai-beautiful-do/plans/04-simplify-logger.md} +0 -0
- /package/RAF/{008-beautiful-do/plans/005-add-tests.md → aaaaai-beautiful-do/plans/05-add-tests.md} +0 -0
- /package/RAF/{009-system-promt-ammend → aaaaaj-system-promt-ammend}/decisions.md +0 -0
- /package/RAF/{009-system-promt-ammend → aaaaaj-system-promt-ammend}/input.md +0 -0
- /package/RAF/{009-system-promt-ammend/outcomes/001-model-override.md → aaaaaj-system-promt-ammend/outcomes/01-model-override.md} +0 -0
- /package/RAF/{009-system-promt-ammend/outcomes/002-system-prompt-append.md → aaaaaj-system-promt-ammend/outcomes/02-system-prompt-append.md} +0 -0
- /package/RAF/{009-system-promt-ammend/outcomes/003-retry-context.md → aaaaaj-system-promt-ammend/outcomes/03-retry-context.md} +0 -0
- /package/RAF/{009-system-promt-ammend/plans/001-model-override.md → aaaaaj-system-promt-ammend/plans/01-model-override.md} +0 -0
- /package/RAF/{009-system-promt-ammend/plans/002-system-prompt-append.md → aaaaaj-system-promt-ammend/plans/02-system-prompt-append.md} +0 -0
- /package/RAF/{009-system-promt-ammend/plans/003-retry-context.md → aaaaaj-system-promt-ammend/plans/03-retry-context.md} +0 -0
- /package/RAF/{010-outcome-marker-fallback → aaaabk-outcome-marker-fallback}/decisions.md +0 -0
- /package/RAF/{010-outcome-marker-fallback → aaaabk-outcome-marker-fallback}/input.md +0 -0
- /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
- /package/RAF/{010-outcome-marker-fallback/outcomes/002-creative-project-naming.md → aaaabk-outcome-marker-fallback/outcomes/02-creative-project-naming.md} +0 -0
- /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
- /package/RAF/{010-outcome-marker-fallback/plans/002-creative-project-naming.md → aaaabk-outcome-marker-fallback/plans/02-creative-project-naming.md} +0 -0
- /package/RAF/{011-do-task-in-commit → aaaabl-do-task-in-commit}/decisions.md +0 -0
- /package/RAF/{011-do-task-in-commit → aaaabl-do-task-in-commit}/input.md +0 -0
- /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
- /package/RAF/{011-do-task-in-commit/outcomes/002-update-tests.md → aaaabl-do-task-in-commit/outcomes/02-update-tests.md} +0 -0
- /package/RAF/{011-do-task-in-commit/outcomes/003-update-documentation.md → aaaabl-do-task-in-commit/outcomes/03-update-documentation.md} +0 -0
- /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
- /package/RAF/{011-do-task-in-commit/plans/002-update-tests.md → aaaabl-do-task-in-commit/plans/02-update-tests.md} +0 -0
- /package/RAF/{011-do-task-in-commit/plans/003-update-documentation.md → aaaabl-do-task-in-commit/plans/03-update-documentation.md} +0 -0
- /package/RAF/{012-name-picker-buffet → aaaabm-name-picker-buffet}/decisions.md +0 -0
- /package/RAF/{012-name-picker-buffet → aaaabm-name-picker-buffet}/input.md +0 -0
- /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
- /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
- /package/RAF/{012-name-picker-buffet/outcomes/003-raf-status-truncation.md → aaaabm-name-picker-buffet/outcomes/03-raf-status-truncation.md} +0 -0
- /package/RAF/{012-name-picker-buffet/outcomes/004-failure-reason-details.md → aaaabm-name-picker-buffet/outcomes/04-failure-reason-details.md} +0 -0
- /package/RAF/{012-name-picker-buffet/outcomes/005-remove-raf-commits.md → aaaabm-name-picker-buffet/outcomes/05-remove-raf-commits.md} +0 -0
- /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
- /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
- /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
- /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
- /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
- /package/RAF/{012-name-picker-buffet/plans/003-raf-status-truncation.md → aaaabm-name-picker-buffet/plans/03-raf-status-truncation.md} +0 -0
- /package/RAF/{012-name-picker-buffet/plans/004-failure-reason-details.md → aaaabm-name-picker-buffet/plans/04-failure-reason-details.md} +0 -0
- /package/RAF/{012-name-picker-buffet/plans/005-remove-raf-commits.md → aaaabm-name-picker-buffet/plans/05-remove-raf-commits.md} +0 -0
- /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
- /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
- /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
- /package/RAF/{013-dependencies-watchdog → aaaabn-dependencies-watchdog}/decisions.md +0 -0
- /package/RAF/{013-dependencies-watchdog → aaaabn-dependencies-watchdog}/input.md +0 -0
- /package/RAF/{013-dependencies-watchdog/outcomes/001-define-dependency-syntax.md → aaaabn-dependencies-watchdog/outcomes/01-define-dependency-syntax.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/outcomes/002-update-planning-prompts.md → aaaabn-dependencies-watchdog/outcomes/02-update-planning-prompts.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/outcomes/003-parse-dependencies-update-state.md → aaaabn-dependencies-watchdog/outcomes/03-parse-dependencies-update-state.md} +0 -0
- /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
- /package/RAF/{013-dependencies-watchdog/outcomes/005-update-execution-prompts.md → aaaabn-dependencies-watchdog/outcomes/05-update-execution-prompts.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/outcomes/006-add-tests.md → aaaabn-dependencies-watchdog/outcomes/06-add-tests.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/outcomes/007-add-act-alias.md → aaaabn-dependencies-watchdog/outcomes/07-add-act-alias.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/outcomes/008-add-exit-message.md → aaaabn-dependencies-watchdog/outcomes/08-add-exit-message.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/plans/001-define-dependency-syntax.md → aaaabn-dependencies-watchdog/plans/01-define-dependency-syntax.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/plans/002-update-planning-prompts.md → aaaabn-dependencies-watchdog/plans/02-update-planning-prompts.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/plans/003-parse-dependencies-update-state.md → aaaabn-dependencies-watchdog/plans/03-parse-dependencies-update-state.md} +0 -0
- /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
- /package/RAF/{013-dependencies-watchdog/plans/005-update-execution-prompts.md → aaaabn-dependencies-watchdog/plans/05-update-execution-prompts.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/plans/006-add-tests.md → aaaabn-dependencies-watchdog/plans/06-add-tests.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/plans/007-add-act-alias.md → aaaabn-dependencies-watchdog/plans/07-add-act-alias.md} +0 -0
- /package/RAF/{013-dependencies-watchdog/plans/008-add-exit-message.md → aaaabn-dependencies-watchdog/plans/08-add-exit-message.md} +0 -0
- /package/RAF/{014-watchdog → aaaabo-watchdog}/decisions.md +0 -0
- /package/RAF/{014-watchdog → aaaabo-watchdog}/input.md +0 -0
- /package/RAF/{014-watchdog/outcomes/001-amend-flag-position.md → aaaabo-watchdog/outcomes/01-amend-flag-position.md} +0 -0
- /package/RAF/{014-watchdog/outcomes/002-details-only-on-failure.md → aaaabo-watchdog/outcomes/02-details-only-on-failure.md} +0 -0
- /package/RAF/{014-watchdog/plans/001-amend-flag-position.md → aaaabo-watchdog/plans/01-amend-flag-position.md} +0 -0
- /package/RAF/{014-watchdog/plans/002-details-only-on-failure.md → aaaabo-watchdog/plans/02-details-only-on-failure.md} +0 -0
- /package/RAF/{015-name-lottery → aaaabp-name-lottery}/decisions.md +0 -0
- /package/RAF/{015-name-lottery → aaaabp-name-lottery}/input.md +0 -0
- /package/RAF/{015-name-lottery/outcomes/001-auto-pick-project-name.md → aaaabp-name-lottery/outcomes/01-auto-pick-project-name.md} +0 -0
- /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
- /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
- /package/RAF/{015-name-lottery/plans/001-auto-pick-project-name.md → aaaabp-name-lottery/plans/01-auto-pick-project-name.md} +0 -0
- /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
- /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
- /package/RAF/{016-planning-scalpel → aaaabq-planning-scalpel}/decisions.md +0 -0
- /package/RAF/{016-planning-scalpel → aaaabq-planning-scalpel}/input.md +0 -0
- /package/RAF/{016-planning-scalpel/outcomes/001-update-git-commit-instructions.md → aaaabq-planning-scalpel/outcomes/01-update-git-commit-instructions.md} +0 -0
- /package/RAF/{016-planning-scalpel/plans/001-update-git-commit-instructions.md → aaaabq-planning-scalpel/plans/01-update-git-commit-instructions.md} +0 -0
- /package/RAF/{017-decision-vault → aaaabr-decision-vault}/decisions.md +0 -0
- /package/RAF/{017-decision-vault → aaaabr-decision-vault}/input.md +0 -0
- /package/RAF/{017-decision-vault/outcomes/001-create-git-commit-utility.md → aaaabr-decision-vault/outcomes/01-create-git-commit-utility.md} +0 -0
- /package/RAF/{017-decision-vault/outcomes/002-integrate-commit-into-plan.md → aaaabr-decision-vault/outcomes/02-integrate-commit-into-plan.md} +0 -0
- /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
- /package/RAF/{017-decision-vault/plans/001-create-git-commit-utility.md → aaaabr-decision-vault/plans/01-create-git-commit-utility.md} +0 -0
- /package/RAF/{017-decision-vault/plans/002-integrate-commit-into-plan.md → aaaabr-decision-vault/plans/02-integrate-commit-into-plan.md} +0 -0
- /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
- /package/RAF/{018-workflow-forge → aaaabs-workflow-forge}/decisions.md +0 -0
- /package/RAF/{018-workflow-forge → aaaabs-workflow-forge}/input.md +0 -0
- /package/RAF/{018-workflow-forge/outcomes/001-add-task-number-progress.md → aaaabs-workflow-forge/outcomes/01-add-task-number-progress.md} +0 -0
- /package/RAF/{018-workflow-forge/outcomes/002-update-plan-do-prompts.md → aaaabs-workflow-forge/outcomes/02-update-plan-do-prompts.md} +0 -0
- /package/RAF/{018-workflow-forge/plans/001-add-task-number-progress.md → aaaabs-workflow-forge/plans/01-add-task-number-progress.md} +0 -0
- /package/RAF/{018-workflow-forge/plans/002-update-plan-do-prompts.md → aaaabs-workflow-forge/plans/02-update-plan-do-prompts.md} +0 -0
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
# Task: Add `raf migrate-project-ids-base26` CLI command
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Add a CLI command that renames existing project folders from old ID formats (3-char base36 or 6-char base36) to the new 6-char base26 encoding.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
After switching to base26 encoding, existing projects on disk still have old-format IDs. The migrate command provides a clean one-time transition. It must handle two legacy formats: the original 3-char base36 sequential IDs (e.g., "007-project") and the intermediate 6-char base36 epoch IDs (e.g., "021h44-project").
|
|
8
|
+
|
|
9
|
+
## Dependencies
|
|
10
|
+
01
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- New CLI command: `raf migrate-project-ids-base26`
|
|
14
|
+
- Detects two legacy folder patterns:
|
|
15
|
+
- 3-char base36: `[0-9a-z]{3}-<name>` (e.g., "007-my-project", "01a-feature")
|
|
16
|
+
- 6-char base36 with digits: `[0-9a-z]{6}-<name>` where the prefix contains at least one digit (to distinguish from already-migrated base26 IDs)
|
|
17
|
+
- For each legacy folder:
|
|
18
|
+
- Decode the old ID to its numeric value (base36 decode for both 3-char and 6-char formats)
|
|
19
|
+
- Re-encode as 6-char base26
|
|
20
|
+
- Rename the folder on disk
|
|
21
|
+
- Handles the RAF directory in the current repo (standard location)
|
|
22
|
+
- Also handles worktree RAF directories if `--worktree` flag is specified or auto-detected
|
|
23
|
+
- Prints a summary of what was renamed (old name → new name)
|
|
24
|
+
- Dry-run mode (`--dry-run`) to preview changes without renaming
|
|
25
|
+
- Skips folders that are already in base26 format
|
|
26
|
+
- Handles collisions (two old IDs mapping to same base26 ID — unlikely but should error gracefully)
|
|
27
|
+
|
|
28
|
+
## Implementation Steps
|
|
29
|
+
1. Create `src/commands/migrate.ts` with the migrate command handler.
|
|
30
|
+
2. Add detection logic for the two legacy patterns (3-char base36 and 6-char base36-with-digits).
|
|
31
|
+
3. Implement the rename operation: decode old ID → encode as base26 → rename folder.
|
|
32
|
+
4. Add dry-run support.
|
|
33
|
+
5. Register the command in `src/index.ts` (or wherever Commander.js commands are registered).
|
|
34
|
+
6. Handle edge cases: empty RAF dir, no legacy projects, folder rename failures.
|
|
35
|
+
7. Consider worktree directories — if projects live in worktree paths, the migration should find and rename those too.
|
|
36
|
+
|
|
37
|
+
## Acceptance Criteria
|
|
38
|
+
- [ ] `raf migrate-project-ids-base26` renames 3-char base36 project folders to base26
|
|
39
|
+
- [ ] `raf migrate-project-ids-base26` renames 6-char base36 project folders to base26
|
|
40
|
+
- [ ] Already-base26 folders are skipped
|
|
41
|
+
- [ ] `--dry-run` shows planned renames without executing them
|
|
42
|
+
- [ ] Summary output shows old → new folder names
|
|
43
|
+
- [ ] Command registered and accessible via CLI
|
|
44
|
+
|
|
45
|
+
## Notes
|
|
46
|
+
- 3-char base36 IDs are small numbers (e.g., 7, 23) — they'll produce base26 IDs like "aaaaah", "aaaaax".
|
|
47
|
+
- Base36 epoch IDs are large (seconds since 2026-01-01) — they'll produce reasonable base26 IDs.
|
|
48
|
+
- Worktree branch names contain the old project ID. Branch renaming is out of scope for this task — just rename the folders.
|
|
49
|
+
- The git.ts module extracts project numbers from paths — after migration, these paths will have new prefixes.
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Task: Update documentation for base26 project IDs
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Update CLAUDE.md and README.md to document the new base26 project ID encoding scheme and the migrate command.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
After tasks 01-03, the codebase uses base26 for project IDs, but documentation still references base36. All developer-facing docs need updating.
|
|
8
|
+
|
|
9
|
+
## Dependencies
|
|
10
|
+
01, 03
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- Update CLAUDE.md sections that reference base36 project IDs:
|
|
14
|
+
- "Project Naming Convention" section
|
|
15
|
+
- "Task ID Format" section (clarify task IDs remain base36)
|
|
16
|
+
- "Git Commit Schema" section (examples use old IDs)
|
|
17
|
+
- "RAF Project Structure" section (example folder names)
|
|
18
|
+
- Any other mentions of "base36" in the context of project IDs
|
|
19
|
+
- Update README.md if it references project ID format
|
|
20
|
+
- Document the `raf migrate-project-ids-base26` command in the appropriate section
|
|
21
|
+
- All example project IDs in docs should use base26 format
|
|
22
|
+
|
|
23
|
+
## Implementation Steps
|
|
24
|
+
1. Search CLAUDE.md for all occurrences of "base36" related to project IDs and update to "base26".
|
|
25
|
+
2. Update example project folder names throughout (e.g., "00j3k1-project-name" → a valid base26 example).
|
|
26
|
+
3. Add documentation for the `raf migrate-project-ids-base26` command.
|
|
27
|
+
4. Update README.md with any project ID format references.
|
|
28
|
+
5. Ensure task ID documentation still correctly says base36.
|
|
29
|
+
|
|
30
|
+
## Acceptance Criteria
|
|
31
|
+
- [ ] CLAUDE.md accurately describes base26 project ID encoding
|
|
32
|
+
- [ ] All example IDs in docs are valid base26 (a-z only, 6 chars)
|
|
33
|
+
- [ ] `raf migrate-project-ids-base26` command is documented
|
|
34
|
+
- [ ] Task ID docs correctly unchanged (still base36)
|
|
35
|
+
- [ ] No stale references to base36 for project IDs remain in docs
|
|
36
|
+
|
|
37
|
+
## Notes
|
|
38
|
+
- Be precise about which IDs changed (project = base26) vs stayed (task = base36).
|
|
39
|
+
- The encoding details matter: a=0, z=25, padded with 'a', 6 chars.
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
# Project Decisions
|
|
2
|
+
|
|
3
|
+
## Worktree auto-discovery: when a user picks a worktree project from the regular `raf do` picker, should RAF automatically switch to worktree mode?
|
|
4
|
+
Yes — auto-switch to worktree mode. Picking a worktree project automatically behaves as if `--worktree` was passed (runs in worktree path, shows post-action picker after).
|
|
5
|
+
|
|
6
|
+
## What model should be used to generate PR descriptions?
|
|
7
|
+
Sonnet. Better quality summaries justify the slightly higher cost.
|
|
8
|
+
|
|
9
|
+
## PR description structure: Summary (from proofread input.md) → Key Decisions (from decisions.md) → What Was Done (from outcomes) → Test Plan?
|
|
10
|
+
Yes, this structure works.
|
|
11
|
+
|
|
12
|
+
## Should Co-Authored-By removal apply to ALL commits, or be configurable?
|
|
13
|
+
Never include it. Add explicit instruction in execution prompt to not add Co-Authored-By trailers.
|
|
14
|
+
|
|
15
|
+
## How should worktree projects appear in the regular `raf do` picker?
|
|
16
|
+
Mixed list with label. Show all projects in one sorted list, with worktree projects marked (e.g. `abcdef my-feature (2/5 tasks) [worktree]`).
|
|
17
|
+
|
|
18
|
+
## For the `\n` issue in PR descriptions: investigate or known cause?
|
|
19
|
+
Investigate and fix. Find the root cause of the `\n` escaping in the PR creation pipeline.
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
- [ ] make 'raf do' to automatically check existing worktrees in ~/.raf for the repo and if there task to do - offer to do the project in the project picker that we have
|
|
2
|
+
- [ ] update status of tasks in 'raf do' to from "[01] base26-encoding" to "01-base26-encoding"
|
|
3
|
+
- [ ] use sonnet to summarize PR and investigate why formatting is wrong on github (no newlines displayed) /Users/eremeev/Desktop/Screenshot\ 2026-02-09\ at\ 21.10.53.png (may /n escaped and everything goes under md header). also some log got into pr description /Users/eremeev/Desktop/Screenshot\ 2026-02-09\ at\ 21.31.26.png (don't put them). make nice and clear PR discription. input.md in proof read form nicely formatted, key decision made extracted from decisions.md (not all, mort important / big). then clear outline of that was done
|
|
4
|
+
- [ ] don't add "Co-Authored-By: claude code" in commit messages
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Outcome: Remove Co-Authored-By from Commit Messages
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Added explicit instructions to the execution prompt telling Claude not to add Co-Authored-By or any other trailers to commit messages, ensuring commits use only the single-line `RAF[project:task] description` format.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
- **`src/prompts/execution.ts`** (lines 100-101): Added two bullet points to the commit instruction section:
|
|
10
|
+
- "The commit message must be a SINGLE LINE -- no body, no trailers"
|
|
11
|
+
- "Do NOT add Co-Authored-By or any other trailers to the commit message"
|
|
12
|
+
- **`tests/unit/execution-prompt.test.ts`**: Added 2 new test cases:
|
|
13
|
+
- Verifies the prompt contains the no-trailers instruction
|
|
14
|
+
- Verifies the prompt specifies single-line commit format
|
|
15
|
+
|
|
16
|
+
## Test Results
|
|
17
|
+
|
|
18
|
+
All 45 tests pass (43 existing + 2 new).
|
|
19
|
+
|
|
20
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# Outcome: Update Task Status Display Format
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Changed the task status display format from `[ID] name` to `ID-name` to match the file naming convention used in plan/outcome files.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
- **`src/utils/terminal-symbols.ts`** (line 52): Changed `idPrefix` from `` `[${taskId}] ` `` to `` `${taskId}-` ``
|
|
10
|
+
- **`src/utils/terminal-symbols.ts`** (lines 39-40): Updated JSDoc `@param` and `@returns` to reflect the new format
|
|
11
|
+
- **`tests/unit/terminal-symbols.test.ts`**: Updated 4 test expectations to match the new format:
|
|
12
|
+
- `● 001-auth-login 1/5` (was `● [001] auth-login 1/5`)
|
|
13
|
+
- `✓ 001-auth-login 1m 23s` (was `✓ [001] auth-login 1m 23s`)
|
|
14
|
+
- `⊘ 002-depends-on-failed 2/5` (was `⊘ [002] depends-on-failed 2/5`)
|
|
15
|
+
- `✗ 003-deploy 45s` (was `✗ [003] deploy 45s`)
|
|
16
|
+
|
|
17
|
+
## Test Results
|
|
18
|
+
|
|
19
|
+
All 933 tests pass (45 suites).
|
|
20
|
+
|
|
21
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
# Outcome: Auto-Discover Worktree Projects in raf do
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Made `raf do` (without `--worktree` flag) automatically discover pending worktree projects from `~/.raf/worktrees/<repo-basename>/` and merge them into the interactive project picker. Selecting a worktree project auto-switches to worktree mode with post-action picker.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
- **`src/ui/project-picker.ts`**:
|
|
10
|
+
- Added `ProjectSource` type (`'local' | 'worktree'`) and `source`/`worktreeRoot` fields to `PendingProjectInfo`
|
|
11
|
+
- Added `PickerResult` interface for typed picker return values (folder, source, worktreeRoot)
|
|
12
|
+
- Added `getPendingWorktreeProjects()` function that scans worktree directories and returns pending projects
|
|
13
|
+
- Updated `formatProjectChoice()` to append `[worktree]` suffix for worktree-sourced projects
|
|
14
|
+
- Updated `pickPendingProject()` to accept optional worktree projects, deduplicate by folder (preferring worktree), sort chronologically, and return `PickerResult`
|
|
15
|
+
|
|
16
|
+
- **`src/commands/do.ts`**:
|
|
17
|
+
- When no project identifier is provided (and `--worktree` not set), discovers worktree projects via `getPendingWorktreeProjects()` and passes them to the picker
|
|
18
|
+
- When a worktree project is selected, auto-switches: sets `worktreeMode = true`, `worktreeRoot`, and `originalBranch`
|
|
19
|
+
- This enables the full worktree execution flow (worktree cwd, post-action picker, post-action execution)
|
|
20
|
+
|
|
21
|
+
- **`CLAUDE.md`**: Updated worktree documentation to reflect auto-discovery behavior
|
|
22
|
+
|
|
23
|
+
- **`tests/unit/project-picker.test.ts`**: Updated and expanded from 20 to 26 tests:
|
|
24
|
+
- Updated 4 existing `pickPendingProject` tests for new `PickerResult` return type
|
|
25
|
+
- Added 1 test for `source: 'local'` on `getPendingProjects`
|
|
26
|
+
- Added 2 tests for `formatProjectChoice` worktree labeling
|
|
27
|
+
- Added 5 tests for `getPendingWorktreeProjects` (empty, metadata, completed skip, invalid folder, missing path)
|
|
28
|
+
- Added 4 tests for picker merging, deduplication, chronological sorting, and backwards compatibility
|
|
29
|
+
|
|
30
|
+
## Test Results
|
|
31
|
+
|
|
32
|
+
All 945 tests pass (45 suites).
|
|
33
|
+
|
|
34
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
# Outcome: Fix and Improve PR Description Generation
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Fixed the `\n` escaping bug in PR descriptions, added output filtering, switched to Sonnet model, and restructured the PR body to a 4-section format.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
- **`src/core/pull-request.ts`**:
|
|
10
|
+
- Added `import * as os from 'node:os'` for temp file path generation
|
|
11
|
+
- **`createPullRequest()`**: Replaced inline `--body` with `--body-file` using a temp file written via `fs.writeFileSync()`, with cleanup in a `finally` block (even on error)
|
|
12
|
+
- **`callClaudeForPrBody()`**: Changed `--model haiku` to `--model sonnet`; applied `filterClaudeOutput()` to strip log noise from Claude's stdout
|
|
13
|
+
- **`generatePrBody()`**: Increased default timeout from 60s to 120s; rewrote prompt template to produce 4-section structure: Summary, Key Decisions, What Was Done, Test Plan
|
|
14
|
+
- **`generateFallbackBody()`**: Updated to produce the same 4-section structure with placeholder content
|
|
15
|
+
- **`filterClaudeOutput()`** (new, exported): Strips non-markdown lines from Claude output (warning emojis, `[warn]`/`[info]` prefixes, `console.warn`, `Note:`, `Loading`/`Connecting`/`Processing` lines, progress indicators)
|
|
16
|
+
- Updated JSDoc comments to reflect Sonnet usage
|
|
17
|
+
|
|
18
|
+
- **`tests/unit/pull-request.test.ts`**:
|
|
19
|
+
- Added mocks for `node:os` (`tmpdir`), `fs.writeFileSync`, `fs.unlinkSync`
|
|
20
|
+
- Added `filterClaudeOutput` to imports
|
|
21
|
+
- Added 10 new tests for `filterClaudeOutput` (clean markdown passthrough, warning emoji removal, `[warn]` prefix, `console.warn`, `Note:` lines, Loading/Connecting/Processing, progress indicators, empty input, all-log input, blank line preservation)
|
|
22
|
+
- Added 3 new tests for `createPullRequest` (verifying `--body-file` usage, temp file cleanup on success, cleanup on failure)
|
|
23
|
+
- Added 2 new tests for `generatePrBody` (4-section prompt structure verification, sonnet model verification)
|
|
24
|
+
- Updated 2 existing `generatePrBody` tests to check for all 4 sections
|
|
25
|
+
|
|
26
|
+
## Test Results
|
|
27
|
+
|
|
28
|
+
All 960 tests pass (45 suites).
|
|
29
|
+
|
|
30
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
# Task: Remove Co-Authored-By from Commit Messages
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Prevent Claude from adding "Co-Authored-By" trailers to commit messages during task execution.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Claude Code's default behavior adds a "Co-Authored-By: Claude..." trailer to git commits. Since RAF instructs Claude to make commits via the execution prompt, an explicit instruction must be added to suppress this. The execution prompt is in `src/prompts/execution.ts`.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- Add an explicit instruction in the Git Instructions section of the execution prompt telling Claude NOT to add Co-Authored-By or any other trailers to commit messages
|
|
11
|
+
- The commit message should contain ONLY the `RAF[project:task] description` format, nothing else
|
|
12
|
+
- Update the existing tests for the execution prompt to verify the new instruction is present
|
|
13
|
+
|
|
14
|
+
## Implementation Steps
|
|
15
|
+
1. In `src/prompts/execution.ts`, add to the commit instruction section (within the `commitInstructions` template) a clear instruction that the commit message must not include any trailers like Co-Authored-By
|
|
16
|
+
2. Update tests in the execution prompt test file to check for the new instruction
|
|
17
|
+
|
|
18
|
+
## Acceptance Criteria
|
|
19
|
+
- [ ] Execution prompt includes explicit instruction to not add Co-Authored-By trailers
|
|
20
|
+
- [ ] Commit format instructions specify that ONLY the RAF format should be used with no additional lines
|
|
21
|
+
- [ ] Existing tests updated and passing
|
|
22
|
+
|
|
23
|
+
## Notes
|
|
24
|
+
- The current execution prompt is at `src/prompts/execution.ts` lines 89-103
|
|
25
|
+
- The commit format is: `RAF[<projectNumber>:<paddedTaskNumber>] <description>`
|
|
26
|
+
- This is a single-line commit message — no body, no trailers
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
# Task: Update Task Status Display Format
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Change the task status display from `[01] base26-encoding` to `01-base26-encoding` to match the file naming convention.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
The current terminal output shows task status as `● [01] base26-encoding 1:23` with brackets around the task ID. The user wants it to match the file naming pattern: `● 01-base26-encoding 1:23` — no brackets, dash separator between ID and name.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- Change the format from `[<taskId>] <name>` to `<taskId>-<name>` in the `formatTaskProgress()` function
|
|
11
|
+
- Update all related tests to expect the new format
|
|
12
|
+
- Ensure all terminal output that uses this function reflects the change
|
|
13
|
+
|
|
14
|
+
## Implementation Steps
|
|
15
|
+
1. In `src/utils/terminal-symbols.ts`, modify the `formatTaskProgress()` function to use `${taskId}-` instead of `[${taskId}] ` for the idPrefix
|
|
16
|
+
2. Update the function's JSDoc comment/return example to reflect the new format
|
|
17
|
+
3. Update all tests in the terminal-symbols test file to expect the new format string
|
|
18
|
+
|
|
19
|
+
## Acceptance Criteria
|
|
20
|
+
- [ ] Task progress lines display as `● 01-task-name` instead of `● [01] task-name`
|
|
21
|
+
- [ ] All tests pass with the new format
|
|
22
|
+
- [ ] JSDoc examples updated
|
|
23
|
+
|
|
24
|
+
## Notes
|
|
25
|
+
- The change is in `src/utils/terminal-symbols.ts` line 52: `const idPrefix = taskId ? `[${taskId}] ` : '';`
|
|
26
|
+
- Change to: `const idPrefix = taskId ? `${taskId}-` : '';`
|
|
27
|
+
- This affects running, completed, failed, pending, and blocked task displays
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Task: Auto-Discover Worktree Projects in raf do
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Make `raf do` (without `--worktree` flag) automatically discover pending worktree projects and include them in the project picker, auto-switching to worktree mode when one is selected.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Currently, worktree project discovery only happens when `--worktree` is explicitly passed. Users have to remember which worktree projects exist. The regular `raf do` picker should also show pending worktree projects from `~/.raf/worktrees/<repo-basename>/` so users can pick and execute them seamlessly.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- When `raf do` is run without arguments (triggering the project picker), also scan `~/.raf/worktrees/<repo-basename>/` for projects with pending tasks
|
|
11
|
+
- Merge worktree projects into the same picker list alongside regular projects, sorted chronologically
|
|
12
|
+
- Worktree projects should be labeled with `[worktree]` suffix, e.g. `abcdef my-feature (2/5 tasks) [worktree]`
|
|
13
|
+
- When a worktree project is selected, automatically behave as if `--worktree` was passed: execute tasks in the worktree path and show the post-action picker after completion
|
|
14
|
+
- The picker selection must carry metadata about whether the selected project is a worktree project
|
|
15
|
+
|
|
16
|
+
## Implementation Steps
|
|
17
|
+
1. Extend `src/ui/project-picker.ts` to accept worktree projects in addition to local ones. Add a `source` field to `PendingProjectInfo` (or similar) to distinguish worktree vs local projects
|
|
18
|
+
2. Create a helper function that discovers pending worktree projects for the current repo by scanning `~/.raf/worktrees/<repo-basename>/` using existing `listWorktreeProjects()` from `src/core/worktree.ts`, then deriving state for each
|
|
19
|
+
3. In `formatProjectChoice()`, append `[worktree]` label for worktree-sourced projects
|
|
20
|
+
4. In `src/commands/do.ts`, when no identifier is provided and `--worktree` is not set, call the extended picker that includes both local and worktree projects
|
|
21
|
+
5. When the user selects a worktree project, set the execution context to worktree mode: use the worktree path as cwd, enable the post-execution action picker, and follow the worktree execution flow
|
|
22
|
+
6. Add tests for the new discovery logic, picker formatting, and worktree auto-switch behavior
|
|
23
|
+
|
|
24
|
+
## Acceptance Criteria
|
|
25
|
+
- [ ] `raf do` without arguments shows both local and worktree pending projects
|
|
26
|
+
- [ ] Worktree projects are labeled with `[worktree]` in the picker
|
|
27
|
+
- [ ] Selecting a worktree project automatically executes in worktree mode with post-action picker
|
|
28
|
+
- [ ] Projects are sorted chronologically (mixed local and worktree)
|
|
29
|
+
- [ ] When no worktree projects exist, picker behaves exactly as before
|
|
30
|
+
- [ ] Tests cover the new functionality
|
|
31
|
+
|
|
32
|
+
## Notes
|
|
33
|
+
- Key files: `src/ui/project-picker.ts`, `src/commands/do.ts`, `src/core/worktree.ts`
|
|
34
|
+
- The existing `discoverAndPickWorktreeProject()` in `do.ts` (around line 491) has similar logic for `--worktree` mode — reuse patterns from there
|
|
35
|
+
- `listWorktreeProjects()` from `src/core/worktree.ts` returns project folder names for a given repo basename
|
|
36
|
+
- `getRepoBasename()` from worktree.ts gets the current repo's basename
|
|
37
|
+
- The picker return value needs to carry whether it's a worktree project so `do.ts` can handle it appropriately
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Task: Fix and Improve PR Description Generation
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Fix the `\n` escaping bug in PR descriptions, filter out log noise, switch to Sonnet model, and restructure the PR body for clarity.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
PR descriptions currently have multiple issues:
|
|
8
|
+
1. **Newlines rendered as literal `\n`** — Root cause: `pull-request.ts` line 421 uses `.replace(/\n/g, '\\n')` when building the `gh pr create --body` shell command, which turns real newlines into literal `\n` strings
|
|
9
|
+
2. **Log output leaking into PR body** — Claude CLI stdout may include warning/log lines mixed with the actual response
|
|
10
|
+
3. **Haiku produces low-quality summaries** — Should use Sonnet for better PR descriptions
|
|
11
|
+
4. **PR body structure needs improvement** — Should have: proofread summary from input.md, key decisions from decisions.md, clear outline of what was done
|
|
12
|
+
|
|
13
|
+
## Requirements
|
|
14
|
+
- Fix the `\n` escaping bug by writing the PR body to a temp file and using `gh pr create --body-file` instead of inline `--body`
|
|
15
|
+
- Filter Claude CLI output to remove any non-markdown log lines (console warnings, progress indicators, etc.)
|
|
16
|
+
- Change the model from `haiku` to `sonnet` in `callClaudeForPrBody()`
|
|
17
|
+
- Restructure the prompt to produce this format:
|
|
18
|
+
- **Summary**: Proofread, clean version of the project requirements from input.md
|
|
19
|
+
- **Key Decisions**: Most important design choices extracted from decisions.md (not all, just significant ones)
|
|
20
|
+
- **What Was Done**: Clear outline of completed work from outcomes
|
|
21
|
+
- **Test Plan**: How to verify the changes
|
|
22
|
+
- Clean up the temp file after PR creation
|
|
23
|
+
|
|
24
|
+
## Dependencies
|
|
25
|
+
01
|
|
26
|
+
|
|
27
|
+
## Implementation Steps
|
|
28
|
+
1. In `createPullRequest()`, write the generated PR body to a temp file and use `--body-file <path>` flag instead of `--body "<escaped>"`. Clean up the temp file after the `gh` command completes
|
|
29
|
+
2. In `callClaudeForPrBody()`, change `--model haiku` to `--model sonnet`
|
|
30
|
+
3. In `callClaudeForPrBody()`, add output filtering to strip non-markdown lines from Claude's stdout (lines that look like log output, warnings, or progress indicators)
|
|
31
|
+
4. In `generatePrBody()`, rewrite the prompt template to instruct Claude to produce the new structured format: Summary (from input.md), Key Decisions (from decisions.md), What Was Done (from outcomes), Test Plan
|
|
32
|
+
5. Update the fallback body in `generateFallbackBody()` to match the new structure
|
|
33
|
+
6. Update tests for PR body generation, temp file handling, and the new prompt structure
|
|
34
|
+
|
|
35
|
+
## Acceptance Criteria
|
|
36
|
+
- [ ] PR body contains proper newlines (not literal `\n`) when viewed on GitHub
|
|
37
|
+
- [ ] No log/warning output appears in PR descriptions
|
|
38
|
+
- [ ] Sonnet model is used for body generation
|
|
39
|
+
- [ ] PR body follows the new 4-section structure: Summary, Key Decisions, What Was Done, Test Plan
|
|
40
|
+
- [ ] Temp file is cleaned up after PR creation (even on error)
|
|
41
|
+
- [ ] Fallback body matches new structure
|
|
42
|
+
- [ ] All tests pass
|
|
43
|
+
|
|
44
|
+
## Notes
|
|
45
|
+
- The `gh pr create --body-file` flag reads the body from a file, completely avoiding shell escaping issues
|
|
46
|
+
- Use `os.tmpdir()` and a unique filename for the temp file
|
|
47
|
+
- For output filtering: Claude CLI sometimes outputs lines starting with warning symbols or `console.warn` markers — strip anything that doesn't look like markdown content
|
|
48
|
+
- The prompt should emphasize that only the MOST important decisions should be included, not every Q&A pair
|
|
49
|
+
- `src/core/pull-request.ts` is the main file to modify
|
|
50
|
+
- Increase the timeout from 60s since Sonnet is slower than Haiku
|
package/README.md
CHANGED
|
@@ -51,6 +51,7 @@ That's it! RAF will guide you through breaking down your task and then execute i
|
|
|
51
51
|
- **Resume Support**: Continue from where you left off after interruption
|
|
52
52
|
- **Git Integration**: Automatic commits after each completed task
|
|
53
53
|
- **Task Dependencies**: Tasks can depend on other tasks, with automatic blocking on failure
|
|
54
|
+
- **Worktree Mode**: Isolate planning and execution in a git worktree branch with `--worktree`
|
|
54
55
|
|
|
55
56
|
## Commands
|
|
56
57
|
|
|
@@ -61,7 +62,8 @@ Opens your `$EDITOR` to write a project description, then Claude will interview
|
|
|
61
62
|
```bash
|
|
62
63
|
raf plan # Create a new project
|
|
63
64
|
raf plan my-feature # Create with a specific name
|
|
64
|
-
raf plan --amend
|
|
65
|
+
raf plan --amend abcdef # Add tasks to existing project
|
|
66
|
+
raf plan --worktree # Plan in an isolated git worktree
|
|
65
67
|
```
|
|
66
68
|
|
|
67
69
|
### `raf do`
|
|
@@ -70,20 +72,31 @@ Execute project tasks. Without arguments, shows a picker to select a pending pro
|
|
|
70
72
|
|
|
71
73
|
```bash
|
|
72
74
|
raf do # Interactive picker
|
|
73
|
-
raf do
|
|
75
|
+
raf do abcdef # Execute by project ID
|
|
74
76
|
raf do my-project # Execute by name
|
|
75
|
-
raf do
|
|
77
|
+
raf do --worktree # Pick and execute a worktree project
|
|
78
|
+
raf do my-feature -w --merge # Execute in worktree, merge on success
|
|
76
79
|
```
|
|
77
80
|
|
|
78
81
|
Note: In non-verbose mode, the completion summary reflects the tasks executed in that run (the remaining tasks at start), so the elapsed time maps to those tasks.
|
|
79
82
|
|
|
80
83
|
### `raf status`
|
|
81
84
|
|
|
82
|
-
Check project status.
|
|
85
|
+
Check project status. Worktree projects are discovered automatically when inside a git repo — no flag needed.
|
|
83
86
|
|
|
84
87
|
```bash
|
|
85
|
-
raf status # List all projects
|
|
86
|
-
raf status
|
|
88
|
+
raf status # List all projects (includes worktree projects that differ)
|
|
89
|
+
raf status abcdef # Show details for a project (shows both main and worktree if they differ)
|
|
90
|
+
```
|
|
91
|
+
|
|
92
|
+
### `raf migrate-project-ids-base26`
|
|
93
|
+
|
|
94
|
+
Rename legacy project folders (3-char base36 or 6-char base36 with digits) to the current 6-char base26 format.
|
|
95
|
+
|
|
96
|
+
```bash
|
|
97
|
+
raf migrate-project-ids-base26 # Migrate project folders in ./RAF/
|
|
98
|
+
raf migrate-project-ids-base26 --dry-run # Preview renames without executing
|
|
99
|
+
raf migrate-project-ids-base26 --worktree # Migrate worktree project folders
|
|
87
100
|
```
|
|
88
101
|
|
|
89
102
|
## Status Symbols
|
|
@@ -98,20 +111,43 @@ raf status 3 # Show details for project #3
|
|
|
98
111
|
|
|
99
112
|
## Project Structure
|
|
100
113
|
|
|
101
|
-
RAF creates a `./RAF/` folder with
|
|
114
|
+
RAF creates a `./RAF/` folder with project directories identified by epoch-based base26 IDs (a-z only):
|
|
102
115
|
|
|
103
116
|
```
|
|
104
117
|
./RAF/
|
|
105
|
-
├──
|
|
118
|
+
├── abcdef-auth-system/
|
|
106
119
|
│ ├── input.md # Your original intent (raw prompt)
|
|
107
120
|
│ ├── decisions.md # Design decisions from planning
|
|
108
121
|
│ ├── plans/ # Generated task plans
|
|
109
122
|
│ ├── outcomes/ # Execution results
|
|
110
123
|
│ └── logs/ # Debug logs (on failure)
|
|
111
|
-
└──
|
|
124
|
+
└── abaaba-dashboard/
|
|
112
125
|
└── ...
|
|
113
126
|
```
|
|
114
127
|
|
|
128
|
+
## Worktree Mode
|
|
129
|
+
|
|
130
|
+
Worktree mode runs planning and execution in an isolated git worktree, keeping your main branch clean while RAF works on a separate branch.
|
|
131
|
+
|
|
132
|
+
### Basic workflow
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
# Plan in a worktree (creates branch and worktree directory)
|
|
136
|
+
raf plan my-feature --worktree
|
|
137
|
+
|
|
138
|
+
# Execute tasks in the worktree, merge back on success
|
|
139
|
+
raf do my-feature --worktree --merge
|
|
140
|
+
```
|
|
141
|
+
|
|
142
|
+
### How it works
|
|
143
|
+
|
|
144
|
+
- `--worktree` creates a git worktree at `~/.raf/worktrees/<repo>/<project>/` with a new branch named after the project folder (e.g., `abcdef-my-feature`)
|
|
145
|
+
- All planning artifacts, code changes, and commits happen in the worktree branch
|
|
146
|
+
- `--merge` on `raf do` merges the branch back after all tasks succeed (fast-forward preferred, merge commit as fallback)
|
|
147
|
+
- On merge conflicts, the merge is aborted and you get instructions for manual resolution
|
|
148
|
+
- If tasks fail, the worktree branch is preserved for inspection
|
|
149
|
+
- Worktrees persist after completion — clean them up manually with `git worktree remove` when done
|
|
150
|
+
|
|
115
151
|
## Command Reference
|
|
116
152
|
|
|
117
153
|
### `raf plan [projectName]`
|
|
@@ -120,8 +156,9 @@ RAF creates a `./RAF/` folder with numbered project directories:
|
|
|
120
156
|
|--------|-------------|
|
|
121
157
|
| `--amend <id>` | Add tasks to existing project |
|
|
122
158
|
| `-y, --auto` | Skip permission prompts (runs in dangerous mode) |
|
|
159
|
+
| `-w, --worktree` | Create a git worktree for isolated planning |
|
|
123
160
|
|
|
124
|
-
### `raf do [
|
|
161
|
+
### `raf do [project]`
|
|
125
162
|
|
|
126
163
|
| Option | Description |
|
|
127
164
|
|--------|-------------|
|
|
@@ -130,9 +167,18 @@ RAF creates a `./RAF/` folder with numbered project directories:
|
|
|
130
167
|
| `-d, --debug` | Save all logs and show debug output |
|
|
131
168
|
| `-m, --model <name>` | Claude model (sonnet, haiku, opus) |
|
|
132
169
|
| `--sonnet` | Shorthand for `--model sonnet` |
|
|
170
|
+
| `-w, --worktree` | Execute tasks in a git worktree |
|
|
171
|
+
| `--merge` | Merge worktree branch after successful completion (requires `--worktree`) |
|
|
133
172
|
|
|
134
173
|
Alias: `raf act`
|
|
135
174
|
|
|
175
|
+
### `raf migrate-project-ids-base26`
|
|
176
|
+
|
|
177
|
+
| Option | Description |
|
|
178
|
+
|--------|-------------|
|
|
179
|
+
| `--dry-run` | Preview renames without executing |
|
|
180
|
+
| `-w, --worktree` | Migrate worktree project folders |
|
|
181
|
+
|
|
136
182
|
> **Note:** `raf do` and `raf plan -y` run Claude with `--dangerously-skip-permissions` for fully automated execution without interactive prompts.
|
|
137
183
|
|
|
138
184
|
### `raf status [identifier]`
|
package/dist/commands/do.d.ts
CHANGED
|
@@ -1,4 +1,11 @@
|
|
|
1
1
|
import { Command } from 'commander';
|
|
2
|
+
/**
|
|
3
|
+
* Post-execution action chosen by the user before task execution begins.
|
|
4
|
+
* - 'merge': merge the worktree branch into the original branch
|
|
5
|
+
* - 'pr': push the branch and create a GitHub PR
|
|
6
|
+
* - 'leave': do nothing, keep the branch as-is
|
|
7
|
+
*/
|
|
8
|
+
export type PostExecutionAction = 'merge' | 'pr' | 'leave';
|
|
2
9
|
/**
|
|
3
10
|
* Format failure history for console output.
|
|
4
11
|
* Shows attempts that failed before eventual success or final failure.
|
|
@@ -9,4 +16,12 @@ export declare function formatRetryHistoryForConsole(taskId: string, taskName: s
|
|
|
9
16
|
reason: string;
|
|
10
17
|
}>, finalAttempt: number, success: boolean): string;
|
|
11
18
|
export declare function createDoCommand(): Command;
|
|
19
|
+
/**
|
|
20
|
+
* Show an interactive picker for the post-execution action in worktree mode.
|
|
21
|
+
* Presented before task execution so the user declares intent upfront.
|
|
22
|
+
*
|
|
23
|
+
* If "Create PR" is chosen, runs preflight checks immediately. If preflight fails,
|
|
24
|
+
* warns the user and falls back to re-prompting.
|
|
25
|
+
*/
|
|
26
|
+
export declare function pickPostExecutionAction(worktreeRoot: string): Promise<PostExecutionAction>;
|
|
12
27
|
//# sourceMappingURL=do.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"do.d.ts","sourceRoot":"","sources":["../../src/commands/do.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"do.d.ts","sourceRoot":"","sources":["../../src/commands/do.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAgDpC;;;;;GAKG;AACH,MAAM,MAAM,mBAAmB,GAAG,OAAO,GAAG,IAAI,GAAG,OAAO,CAAC;AAE3D;;;;GAIG;AACH,wBAAgB,4BAA4B,CAC1C,MAAM,EAAE,MAAM,EACd,QAAQ,EAAE,MAAM,EAChB,cAAc,EAAE,KAAK,CAAC;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,MAAM,EAAE,MAAM,CAAA;CAAE,CAAC,EAC1D,YAAY,EAAE,MAAM,EACpB,OAAO,EAAE,OAAO,GACf,MAAM,CAkBR;AA0BD,wBAAgB,eAAe,IAAI,OAAO,CAiBzC;AA0QD;;;;;;GAMG;AACH,wBAAsB,uBAAuB,CAAC,YAAY,EAAE,MAAM,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAuBhG"}
|