rafcode 1.3.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CLAUDE.md +118 -22
- 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 +384 -123
- 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 +2 -2
- package/dist/core/claude-runner.d.ts.map +1 -1
- package/dist/core/git.d.ts +15 -6
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +53 -20
- 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/prompts/amend.d.ts +1 -0
- package/dist/prompts/amend.d.ts.map +1 -1
- package/dist/prompts/amend.js +14 -10
- package/dist/prompts/amend.js.map +1 -1
- package/dist/prompts/execution.d.ts.map +1 -1
- package/dist/prompts/execution.js +4 -2
- 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 +9 -8
- 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 +454 -134
- 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 +2 -2
- package/src/core/git.ts +57 -21
- 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/prompts/amend.ts +15 -9
- package/src/prompts/execution.ts +4 -2
- package/src/prompts/planning.ts +10 -8
- 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 +9 -9
- 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 +5 -5
- 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 +103 -103
- 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/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
- /package/RAF/{019-verbose-chronicle → aaaabt-verbose-chronicle}/decisions.md +0 -0
- /package/RAF/{019-verbose-chronicle → aaaabt-verbose-chronicle}/input.md +0 -0
- /package/RAF/{019-verbose-chronicle/outcomes/001-amend-iteration-references.md → aaaabt-verbose-chronicle/outcomes/01-amend-iteration-references.md} +0 -0
- /package/RAF/{019-verbose-chronicle/outcomes/002-verbose-task-name-display.md → aaaabt-verbose-chronicle/outcomes/02-verbose-task-name-display.md} +0 -0
- /package/RAF/{019-verbose-chronicle/outcomes/003-verbose-streaming-fix.md → aaaabt-verbose-chronicle/outcomes/03-verbose-streaming-fix.md} +0 -0
- /package/RAF/{019-verbose-chronicle/outcomes/004-commit-verification-before-halt.md → aaaabt-verbose-chronicle/outcomes/04-commit-verification-before-halt.md} +0 -0
- /package/RAF/{019-verbose-chronicle/plans/001-amend-iteration-references.md → aaaabt-verbose-chronicle/plans/01-amend-iteration-references.md} +0 -0
- /package/RAF/{019-verbose-chronicle/plans/002-verbose-task-name-display.md → aaaabt-verbose-chronicle/plans/02-verbose-task-name-display.md} +0 -0
- /package/RAF/{019-verbose-chronicle/plans/003-verbose-streaming-fix.md → aaaabt-verbose-chronicle/plans/03-verbose-streaming-fix.md} +0 -0
- /package/RAF/{019-verbose-chronicle/plans/004-commit-verification-before-halt.md → aaaabt-verbose-chronicle/plans/04-commit-verification-before-halt.md} +0 -0
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Outcome: Update Tests for Base26 Project ID Encoding
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Updated all remaining test files to use base26 (a-z only) project ID prefixes and nomenclature, completing the migration started in task 01. Added edge case tests for max value encoding/decoding.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
### Test Files Updated (11 files)
|
|
10
|
+
|
|
11
|
+
- **`tests/unit/execution-prompt.test.ts`** — Replaced digit-containing project numbers (`005`, `001`, `a0b`) with valid base26 prefixes (`aaabmm`, `aaaaab`, `abcdef`). Updated all project paths accordingly. Renamed test "base36 prefix" → "base26 prefix" and "base36 project" → "base26 project".
|
|
12
|
+
- **`tests/unit/plan-command.test.ts`** — Renamed describe block "Base36 Project Resolution for Amend" → "Base26 Project Resolution for Amend".
|
|
13
|
+
- **`tests/unit/worktree.test.ts`** — Replaced `020-worktree-weaver` → `abaaba-worktree-weaver`, `021-another-feature` → `ababab-another-feature`, `022-prune-cycle` → `abcabc-prune-cycle`, `001-feature` → `aaaaab-feature`. Renamed test "base36 project IDs" → "base26 project IDs".
|
|
14
|
+
- **`tests/unit/plan-amend-worktree-recreate.test.ts`** — Replaced `022-my-project` → `abcabc-my-project` throughout.
|
|
15
|
+
- **`tests/unit/do-worktree-cleanup.test.ts`** — Replaced `022-prune-cycle` → `abcabc-prune-cycle` throughout.
|
|
16
|
+
- **`tests/unit/do-rerun.test.ts`** — Replaced `001-test-project` → `aaaaab-test-project`.
|
|
17
|
+
- **`tests/unit/dependency-integration.test.ts`** — Replaced `001-test-project` → `aaaaab-test-project`.
|
|
18
|
+
- **`tests/unit/do-blocked-tasks.test.ts`** — Replaced `001-test-project` → `aaaaab-test-project`.
|
|
19
|
+
- **`tests/unit/state-derivation.test.ts`** — Replaced `001-test-project` → `aaaaab-test-project` (kept `001-too-short` as it tests invalid format rejection).
|
|
20
|
+
- **`tests/unit/worktree-integration.test.ts`** — Replaced `020-test-project` → `abaaba-test-project`.
|
|
21
|
+
- **`tests/unit/git-stash.test.ts`** — Replaced `raf-001-task-3-failed` → `raf-aaaaab-task-3-failed` and `raf-002-task-5-failed` → `raf-aaaaac-task-5-failed`.
|
|
22
|
+
|
|
23
|
+
### New Edge Case Tests Added (in `paths.test.ts`)
|
|
24
|
+
|
|
25
|
+
- `encodeBase26(26^6 - 1)` → `'zzzzzz'` (max 6-char value)
|
|
26
|
+
- `encodeBase26(26^5)` → `'baaaaa'` (boundary value)
|
|
27
|
+
- `decodeBase26('zzzzzz')` → `26^6 - 1` (max value decode)
|
|
28
|
+
- Roundtrip test now includes max value `26^6 - 1`
|
|
29
|
+
|
|
30
|
+
## Verification
|
|
31
|
+
|
|
32
|
+
- Build: `npm run build` passes cleanly
|
|
33
|
+
- Tests: All 916 tests pass across 44 test suites (3 new edge case tests added)
|
|
34
|
+
- No skipped or commented-out tests
|
|
35
|
+
- No remaining digit-containing project ID prefixes in test fixtures (except intentional rejection tests)
|
|
36
|
+
- All remaining "base36" references in tests are about task IDs (which correctly remain base36)
|
|
37
|
+
|
|
38
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
# Outcome: Add `raf migrate-project-ids-base26` CLI Command
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Added a new CLI command `raf migrate-project-ids-base26` that renames existing project folders from legacy ID formats (3-char base36 or 6-char base36-with-digits) to the new 6-char base26 encoding.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
### Source Files
|
|
10
|
+
|
|
11
|
+
- **`src/commands/migrate.ts`** (new) — Core migrate command implementation:
|
|
12
|
+
- `detectMigrations(dirPath)` — Scans a directory for legacy project folders and computes rename mappings
|
|
13
|
+
- Detects two legacy patterns: 3-char base36 (`[0-9a-z]{3}-<name>`) and 6-char base36 with digits (`[0-9a-z]{6}-<name>` where prefix contains a digit)
|
|
14
|
+
- Skips already-migrated base26 folders (`[a-z]{6}-`)
|
|
15
|
+
- Collision detection (multiple old IDs mapping to same base26 ID)
|
|
16
|
+
- Existing-target conflict detection
|
|
17
|
+
- `--dry-run` flag for preview without renaming
|
|
18
|
+
- `--worktree` flag to scan worktree RAF directories
|
|
19
|
+
- Summary output showing `oldName -> newName` for each migration
|
|
20
|
+
- Exported `MigrationEntry` interface and `detectMigrations()` for testability
|
|
21
|
+
|
|
22
|
+
- **`src/index.ts`** — Registered the new command via `program.addCommand(createMigrateCommand())`
|
|
23
|
+
|
|
24
|
+
- **`src/types/config.ts`** — Added `MigrateCommandOptions` interface with `dryRun` and `worktree` fields
|
|
25
|
+
|
|
26
|
+
### Test Files
|
|
27
|
+
|
|
28
|
+
- **`tests/unit/migrate-command.test.ts`** (new) — 15 tests covering:
|
|
29
|
+
- Detection of 3-char base36 legacy folders
|
|
30
|
+
- Detection of 6-char base36 legacy folders with digits
|
|
31
|
+
- Skipping already-migrated base26 folders
|
|
32
|
+
- Skipping non-directory entries and non-existent directories
|
|
33
|
+
- Mixed legacy and migrated folder handling
|
|
34
|
+
- Correct path generation
|
|
35
|
+
- Edge cases (000, zzz prefixes; folders without hyphens; mixed alpha-digit 6-char prefixes)
|
|
36
|
+
- Integration tests for rename execution with content preservation
|
|
37
|
+
- Encoding correctness verification
|
|
38
|
+
|
|
39
|
+
## Verification
|
|
40
|
+
|
|
41
|
+
- Build: `npm run build` passes cleanly
|
|
42
|
+
- Tests: All 931 tests pass across 45 test suites (15 new tests added)
|
|
43
|
+
|
|
44
|
+
## Notes
|
|
45
|
+
|
|
46
|
+
- Branch renaming is out of scope — only folder renames are performed
|
|
47
|
+
- Worktree scanning looks for RAF directories inside each worktree subdirectory
|
|
48
|
+
- 3-char base36 IDs (e.g., 007=7) map to small base26 values (e.g., "aaaaah")
|
|
49
|
+
- 6-char base36 epoch IDs map to larger but valid base26 values
|
|
50
|
+
|
|
51
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Outcome: Update Documentation for Base26 Project IDs
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Updated CLAUDE.md and README.md to reflect the base26 project ID encoding and document the new `raf migrate-project-ids-base26` command.
|
|
6
|
+
|
|
7
|
+
## Key Changes
|
|
8
|
+
|
|
9
|
+
### CLAUDE.md
|
|
10
|
+
- **RAF Project Structure**: Changed example folder from `00j3k1-project-name` (base36) to `abcdef-project-name` (base26), updated comment
|
|
11
|
+
- **Project Naming Convention**: Updated encoding description from base36 to base26, documented `a=0, b=1, ..., z=25` scheme, noted left-padding with 'a', added note about visual distinction from task IDs
|
|
12
|
+
- **Project Identifier Resolution**: Updated examples from `00j3k1` to `abcdef`, changed "Base36 ID" to "Base26 ID"
|
|
13
|
+
- **Git Commit Schema**: Updated example project IDs from `00j3k1`/`00k5m2` to `abcdef`/`abaaba`
|
|
14
|
+
- **Worktree Mode**: Updated example paths and branch names from `00j3k1-my-feature` to `abcdef-my-feature`
|
|
15
|
+
- **Migration Command** (new section): Documented `raf migrate-project-ids-base26` with its options, legacy pattern detection, and implementation location
|
|
16
|
+
|
|
17
|
+
### README.md
|
|
18
|
+
- **Project Structure**: Changed description from "base36 IDs" to "base26 IDs (a-z only)", updated example folders from `00j3k1-auth-system`/`00k5m2-dashboard` to `abcdef-auth-system`/`abaaba-dashboard`
|
|
19
|
+
- **Commands section**: Added `raf migrate-project-ids-base26` with usage examples
|
|
20
|
+
- **Command Reference**: Added option table for migrate command (`--dry-run`, `--worktree`)
|
|
21
|
+
- **All examples**: Replaced all `00j3k1` occurrences with `abcdef` (plan, do, status commands)
|
|
22
|
+
- **Worktree section**: Updated branch name example to `abcdef-my-feature`
|
|
23
|
+
|
|
24
|
+
## Verification
|
|
25
|
+
- All remaining "base36" references in docs correctly refer to task IDs (which remain base36) or legacy formats in the migration command docs
|
|
26
|
+
- No digit-containing project ID examples remain (except in migration command docs showing legacy formats)
|
|
27
|
+
- Task ID documentation unchanged (correctly remains base36)
|
|
28
|
+
|
|
29
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,36 @@
|
|
|
1
|
+
# Task: Replace base36 project ID encoding with base26 (a-z only)
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Replace the base36 (0-9a-z) project ID encoding with base26 (a-z only) so project IDs contain only letters and sort naturally.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Project IDs currently use base36 encoding (digits + letters), which confuses natural sort ordering. Switching to pure letters (a-z) eliminates this problem. Task IDs remain base36 unchanged. Prior work on the base36 system is in commit f3a88aeead9549be7ff52ac50a197ddd42128bf0.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- Base26 alphabet: a=0, b=1, c=2, ..., z=25
|
|
11
|
+
- ID width: 6 characters, padded with 'a' (the zero-equivalent)
|
|
12
|
+
- Examples: 0 → "aaaaaa", 1 → "aaaaab", 25 → "aaaaaz", 26 → "aaaaba"
|
|
13
|
+
- Maximum value: 26^6 - 1 = 308,915,775 (~9.8 years from RAF epoch 2026-01-01)
|
|
14
|
+
- Task IDs stay base36 (2-char, 0-9a-z) — do NOT modify task ID functions
|
|
15
|
+
- RAF_EPOCH constant stays the same (1767225600)
|
|
16
|
+
|
|
17
|
+
## Implementation Steps
|
|
18
|
+
1. In `src/utils/paths.ts`, replace `encodeBase36()` with a base26 encoder (a-z alphabet, 6-char, 'a'-padded). Rename to reflect the new encoding.
|
|
19
|
+
2. Replace `decodeBase36()` with the corresponding base26 decoder. Rename accordingly.
|
|
20
|
+
3. Update `isBase36Prefix()` to validate `[a-z]{6}` instead of `[0-9a-z]{6}`. Rename.
|
|
21
|
+
4. Update `formatProjectNumber()` to call the new encoder.
|
|
22
|
+
5. Update all regex patterns across the codebase from `[0-9a-z]{6}` to `[a-z]{6}` — these appear in `paths.ts`, `state-derivation.ts`, `validation.ts`, and `git.ts`.
|
|
23
|
+
6. Update all function names and references across importers — search for `encodeBase36`, `decodeBase36`, `isBase36Prefix` in all source files.
|
|
24
|
+
7. Update JSDoc comments and inline documentation to say "base26" instead of "base36" for project IDs.
|
|
25
|
+
|
|
26
|
+
## Acceptance Criteria
|
|
27
|
+
- [ ] `encodeBase36` / `decodeBase36` / `isBase36Prefix` replaced with base26 equivalents
|
|
28
|
+
- [ ] All project ID regex patterns updated to `[a-z]{6}`
|
|
29
|
+
- [ ] `getNextProjectNumber()` generates base26 IDs
|
|
30
|
+
- [ ] Task ID functions (`encodeTaskId`, `decodeTaskId`, `TASK_ID_PATTERN`) remain untouched
|
|
31
|
+
- [ ] Project builds without errors (`npm run build`)
|
|
32
|
+
|
|
33
|
+
## Notes
|
|
34
|
+
- The encoding is NOT standard `toString(26)`. It uses a custom a-z alphabet (not 0-9a-p).
|
|
35
|
+
- `parseInt(str, 26)` won't work for decoding because JS base26 uses 0-9a-p, not a-z. Implement custom encode/decode.
|
|
36
|
+
- Only project IDs change. Task IDs, RAF_EPOCH, and the overall folder structure stay the same.
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
# Task: Update tests for base26 project ID encoding
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Update all unit and integration tests to reflect the base36-to-base26 encoding change for project IDs.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
After task 01 changes the core encoding functions, all existing tests that reference base36 project IDs will fail. Test fixtures, expected values, and regex patterns need updating. Task ID tests should remain unchanged.
|
|
8
|
+
|
|
9
|
+
## Dependencies
|
|
10
|
+
01
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- All test cases for encode/decode functions updated with base26 expected values
|
|
14
|
+
- Test fixtures using project folder names (e.g., "00abc0-project") updated to base26 format (e.g., "aabcda-project" or similar valid base26 IDs)
|
|
15
|
+
- Regex pattern assertions updated from `[0-9a-z]{6}` to `[a-z]{6}`
|
|
16
|
+
- Task ID test cases remain untouched
|
|
17
|
+
- Edge cases covered: zero value ("aaaaaa"), max value, boundary values, invalid inputs (digits should be rejected)
|
|
18
|
+
|
|
19
|
+
## Implementation Steps
|
|
20
|
+
1. Update `tests/unit/paths.test.ts` — rewrite `encodeBase36`/`decodeBase36` test suites for the new base26 functions with correct expected values.
|
|
21
|
+
2. Update `isBase36Prefix` tests → validate new prefix checker rejects digits, accepts pure a-z.
|
|
22
|
+
3. Update `extractProjectNumber`, `extractProjectName`, `parseProjectPrefix` tests with base26 folder name fixtures.
|
|
23
|
+
4. Update `resolveProjectIdentifier` tests — all project folder fixtures must use base26 prefixes.
|
|
24
|
+
5. Update `getNextProjectNumber` tests — expected IDs should be base26 encoded.
|
|
25
|
+
6. Update `listProjects` tests if they have base36 fixtures.
|
|
26
|
+
7. Search all other test files for hardcoded project IDs (grep for patterns like `[0-9a-z]{6}-` or specific IDs like "00abc0") and update them.
|
|
27
|
+
8. Run full test suite and ensure all tests pass.
|
|
28
|
+
|
|
29
|
+
## Acceptance Criteria
|
|
30
|
+
- [ ] All 40+ test suites pass (`npm test`)
|
|
31
|
+
- [ ] No test references old base36 project ID format (except task ID tests which stay base36)
|
|
32
|
+
- [ ] Edge cases covered: zero encoding, max value, invalid characters (digits), wrong length
|
|
33
|
+
- [ ] No skipped or commented-out tests
|
|
34
|
+
|
|
35
|
+
## Notes
|
|
36
|
+
- The main test file is `tests/unit/paths.test.ts` (~525 lines) but other test files may contain project ID fixtures too.
|
|
37
|
+
- New base26 encode/decode cannot use `parseInt`/`toString` — verify tests check the custom implementation correctly.
|
|
@@ -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
|