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
package/CLAUDE.md
CHANGED
|
@@ -30,15 +30,15 @@ src/
|
|
|
30
30
|
Each RAF project follows this structure:
|
|
31
31
|
```
|
|
32
32
|
RAF/
|
|
33
|
-
└──
|
|
33
|
+
└── abcdef-project-name/ # 6-char epoch-based base26 ID (a-z only)
|
|
34
34
|
├── input.md # User requirements
|
|
35
35
|
├── decisions.md # Q&A from planning interviews
|
|
36
36
|
├── plans/ # Task breakdowns
|
|
37
|
-
│ ├──
|
|
38
|
-
│ └──
|
|
37
|
+
│ ├── 01-task-name.md # 2-char base36 task ID
|
|
38
|
+
│ └── 02-another-task.md
|
|
39
39
|
└── outcomes/ # Completed task results
|
|
40
|
-
├──
|
|
41
|
-
└──
|
|
40
|
+
├── 01-task-name.md
|
|
41
|
+
└── 02-another-task.md
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
### Plan File Structure
|
|
@@ -54,7 +54,7 @@ Each plan file follows this structure:
|
|
|
54
54
|
[Why this task is needed]
|
|
55
55
|
|
|
56
56
|
## Dependencies
|
|
57
|
-
[Optional - comma-separated task IDs, e.g., "
|
|
57
|
+
[Optional - comma-separated task IDs, e.g., "01, 02"]
|
|
58
58
|
[If a dependency fails, this task is blocked]
|
|
59
59
|
|
|
60
60
|
## Requirements
|
|
@@ -75,7 +75,7 @@ Each plan file follows this structure:
|
|
|
75
75
|
|
|
76
76
|
**Dependencies Section**:
|
|
77
77
|
- Optional - omit if task has no dependencies
|
|
78
|
-
- Uses task IDs only (e.g., `
|
|
78
|
+
- Uses task IDs only (e.g., `01, 02`)
|
|
79
79
|
- If a dependency fails, dependent tasks are automatically blocked
|
|
80
80
|
|
|
81
81
|
## Development Commands
|
|
@@ -134,16 +134,28 @@ npm run lint # Type check without emit
|
|
|
134
134
|
- All failure outcomes end with `<promise>FAILED</promise>` marker
|
|
135
135
|
|
|
136
136
|
### Project Naming Convention
|
|
137
|
-
- Format: `
|
|
137
|
+
- Format: `XXXXXX-project-name` where `XXXXXX` is a 6-character base26 ID (a-z only)
|
|
138
|
+
- ID is generated from `(current_unix_seconds - RAF_EPOCH)` encoded as base26, left-padded with 'a' to 6 characters
|
|
139
|
+
- Base26 encoding: a=0, b=1, ..., z=25 (lowercase letters only, no digits)
|
|
140
|
+
- RAF_EPOCH is 2026-01-01T00:00:00Z (Unix timestamp 1767225600)
|
|
138
141
|
- Project name is kebab-case derived from core feature
|
|
139
|
-
-
|
|
142
|
+
- IDs are unique by timestamp and sort chronologically
|
|
143
|
+
- Project IDs are visually distinct from task IDs (which use base36 with digits)
|
|
144
|
+
|
|
145
|
+
### Task ID Format
|
|
146
|
+
- Task IDs are 2-character base36 strings, zero-padded (e.g., `01`, `0a`, `1z`, `zz`)
|
|
147
|
+
- Base36 charset: 0-9, a-z (lowercase)
|
|
148
|
+
- Supports up to 1296 tasks per project (00-zz)
|
|
149
|
+
- Task numbering starts at `01` (not `00`)
|
|
150
|
+
- Sort order: 00, 01, ..., 09, 0a, 0b, ..., 0z, 10, 11, ..., zz
|
|
151
|
+
- Utilities in `src/utils/paths.ts`: `encodeTaskId()`, `decodeTaskId()`, `TASK_ID_PATTERN`
|
|
152
|
+
- File naming: `01-task-name.md`, `0a-task-name.md`, etc.
|
|
140
153
|
|
|
141
154
|
### Project Identifier Resolution
|
|
142
155
|
Support multiple identifier formats in commands:
|
|
143
|
-
1.
|
|
144
|
-
2.
|
|
145
|
-
3.
|
|
146
|
-
4. Full folder name: `001-fix-stuff` (exact match)
|
|
156
|
+
1. Base26 ID: `abcdef` (6-character epoch-based ID, a-z only)
|
|
157
|
+
2. Project name: `fix-stuff` (case-insensitive, partial match)
|
|
158
|
+
3. Full folder name: `abcdef-fix-stuff` (exact match)
|
|
147
159
|
|
|
148
160
|
Use `resolveProjectIdentifierWithDetails()` from `src/utils/paths.ts`
|
|
149
161
|
|
|
@@ -159,9 +171,9 @@ Claude writes a concise description of what was accomplished, focusing on the ac
|
|
|
159
171
|
|
|
160
172
|
Examples:
|
|
161
173
|
```
|
|
162
|
-
RAF[
|
|
163
|
-
RAF[
|
|
164
|
-
RAF[
|
|
174
|
+
RAF[abcdef:01] Add validation for user input fields
|
|
175
|
+
RAF[abcdef:02] Fix null pointer in auth handler
|
|
176
|
+
RAF[abaaba:03] Refactor database connection pooling
|
|
165
177
|
```
|
|
166
178
|
|
|
167
179
|
- Claude commits code changes and outcome file together in one commit per task
|
|
@@ -174,12 +186,96 @@ RAF[a01:003] Refactor database connection pooling
|
|
|
174
186
|
- New tasks numbered sequentially after last task
|
|
175
187
|
- No modification of existing plan files
|
|
176
188
|
|
|
177
|
-
###
|
|
178
|
-
- `raf do
|
|
179
|
-
-
|
|
180
|
-
-
|
|
181
|
-
-
|
|
182
|
-
-
|
|
189
|
+
### Worktree Mode
|
|
190
|
+
- `raf plan --worktree` and `raf do --worktree` run in an isolated git worktree
|
|
191
|
+
- Worktree path: `~/.raf/worktrees/<repo-basename>/<project-id>` (e.g., `~/.raf/worktrees/myapp/abcdef-my-feature`)
|
|
192
|
+
- Branch name matches the project folder name (e.g., `abcdef-my-feature`)
|
|
193
|
+
- `--worktree` flag is required on `plan`; on `do` it is auto-detected when a worktree project is selected from the picker
|
|
194
|
+
- `raf do` without arguments auto-discovers pending worktree projects and merges them into the project picker
|
|
195
|
+
- Worktree projects are labeled with `[worktree]` suffix in the picker
|
|
196
|
+
- Selecting a worktree project automatically enables worktree mode (post-action picker, worktree cwd)
|
|
197
|
+
- Projects are deduplicated: when a folder exists in both local and worktree, the worktree version is shown
|
|
198
|
+
- Mixed local and worktree projects are sorted chronologically
|
|
199
|
+
- `raf status` automatically discovers and displays worktree projects (no flag needed)
|
|
200
|
+
- List mode: worktree projects that differ from main repo shown under `Worktrees:` header
|
|
201
|
+
- Single project mode: shows both main and worktree state when they differ
|
|
202
|
+
- Identical worktree projects are hidden; worktree-only projects always shown
|
|
203
|
+
- Lifecycle: create worktree -> plan in worktree -> pick post-action -> execute in worktree -> auto-run chosen action
|
|
204
|
+
- **Post-execution picker**: Before task execution, an interactive picker asks what to do after tasks complete:
|
|
205
|
+
1. **Merge** — merge branch into original branch (fast-forward preferred, merge-commit fallback)
|
|
206
|
+
2. **Create PR** — push branch and create a GitHub PR (uses `createPullRequest()` from `pull-request.ts`)
|
|
207
|
+
3. **Leave branch** — do nothing, keep the branch as-is
|
|
208
|
+
- PR option runs preflight checks immediately; falls back to "leave" if `gh` CLI is missing or unauthenticated
|
|
209
|
+
- On task failure, the chosen post-action is skipped with a message
|
|
210
|
+
- Worktree cleanup: all post-actions (merge, PR, leave) clean up the worktree directory (branch preserved in git)
|
|
211
|
+
- On failure, worktree is kept for inspection
|
|
212
|
+
- `raf plan --amend --worktree` auto-recreates the worktree when it was cleaned up:
|
|
213
|
+
- If the branch exists (common after cleanup): recreates worktree from the existing branch
|
|
214
|
+
- If no branch exists: creates a fresh worktree and copies project files from the main repo
|
|
215
|
+
- On plan failure with no plan files created, the worktree is cleaned up automatically
|
|
216
|
+
- Core utilities in `src/core/worktree.ts`: `createWorktree()`, `createWorktreeFromBranch()`, `branchExists()`, `validateWorktree()`, `mergeWorktreeBranch()`, `removeWorktree()`, `listWorktreeProjects()`
|
|
217
|
+
- Post-execution picker: `pickPostExecutionAction()` and `PostExecutionAction` type exported from `src/commands/do.ts`
|
|
218
|
+
|
|
219
|
+
### PR Creation from Worktree
|
|
220
|
+
- `src/core/pull-request.ts` provides `createPullRequest()` to create GitHub PRs from worktree branches
|
|
221
|
+
- Requires `gh` CLI installed and authenticated (`gh auth login`)
|
|
222
|
+
- Auto-detects base branch (from `refs/remotes/origin/HEAD`, falling back to `main`/`master`)
|
|
223
|
+
- PR title derived from project name (kebab-case to human-readable)
|
|
224
|
+
- PR body generated by Claude Haiku summarizing input.md, decisions.md, and outcomes
|
|
225
|
+
- Falls back to simple body if Claude is unavailable
|
|
226
|
+
- Auto-pushes branch to origin if not already pushed
|
|
227
|
+
- Preflight checks: `prPreflight()` validates gh CLI, authentication, GitHub remote
|
|
228
|
+
- Key functions: `createPullRequest()`, `prPreflight()`, `generatePrBody()`, `generatePrTitle()`, `detectBaseBranch()`
|
|
229
|
+
|
|
230
|
+
|
|
231
|
+
## PR Review
|
|
232
|
+
|
|
233
|
+
When reviewing a PR or addressing PR comments, use `gh` CLI to read PR details:
|
|
234
|
+
|
|
235
|
+
```bash
|
|
236
|
+
# View PR description and metadata
|
|
237
|
+
gh pr view <number>
|
|
238
|
+
|
|
239
|
+
# View PR diff
|
|
240
|
+
gh pr diff <number>
|
|
241
|
+
|
|
242
|
+
# View review comments (inline code comments)
|
|
243
|
+
gh api repos/{owner}/{repo}/pulls/<number>/comments
|
|
244
|
+
|
|
245
|
+
# View PR review summaries
|
|
246
|
+
gh api repos/{owner}/{repo}/pulls/<number>/reviews
|
|
247
|
+
|
|
248
|
+
# View general PR conversation comments (non-inline)
|
|
249
|
+
gh api repos/{owner}/{repo}/issues/<number>/comments
|
|
250
|
+
|
|
251
|
+
# List PR files changed
|
|
252
|
+
gh pr diff <number> --name-only
|
|
253
|
+
|
|
254
|
+
# View PR checks/CI status
|
|
255
|
+
gh pr checks <number>
|
|
256
|
+
```
|
|
257
|
+
|
|
258
|
+
### Checking Out PR Branches
|
|
259
|
+
|
|
260
|
+
PR branches are often checked out in git worktrees. Before creating a new checkout, check for existing worktrees:
|
|
261
|
+
|
|
262
|
+
```bash
|
|
263
|
+
# List existing worktrees
|
|
264
|
+
git worktree list
|
|
265
|
+
|
|
266
|
+
# Find the branch name from the PR
|
|
267
|
+
gh pr view <number> --json headRefName -q .headRefName
|
|
268
|
+
|
|
269
|
+
# If gh is rate-limited, list remote branches to find it
|
|
270
|
+
git ls-remote --heads origin
|
|
271
|
+
|
|
272
|
+
# Check if branch is already in a worktree (look for the path in worktree list output)
|
|
273
|
+
# If it is, work directly in that worktree path (e.g., /Users/eremeev/.raf/worktrees/Paperi/<branch>)
|
|
274
|
+
# If not, checkout normally:
|
|
275
|
+
git fetch origin <branch> && git checkout <branch>
|
|
276
|
+
```
|
|
277
|
+
|
|
278
|
+
When working in a worktree, use absolute paths to the worktree directory for all file operations and builds.
|
|
183
279
|
|
|
184
280
|
## Important Reminders
|
|
185
281
|
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Project Decisions
|
|
2
|
+
|
|
3
|
+
## For the amendment iteration reference feature — when a new task looks like a follow-up/fix to a previous completed task, how should the reference appear in the new plan?
|
|
4
|
+
Context section, make sure to put file path to prev task outcome.
|
|
5
|
+
|
|
6
|
+
## Should the iteration reference be determined automatically by the planning Claude (via prompt instructions), or should RAF code analyze task content programmatically?
|
|
7
|
+
Prompt-based (Recommended) — update the amend system prompt to instruct Claude to identify follow-ups and include references to previous tasks in new plans.
|
|
8
|
+
|
|
9
|
+
## For verbose task name display — should the task name appear everywhere task ID is shown, or just in the main header?
|
|
10
|
+
Everywhere — show task name alongside ID in all verbose log messages, status updates, and summaries.
|
|
11
|
+
|
|
12
|
+
## For streaming Claude output in verbose mode — is it currently broken or is there a different streaming behavior wanted?
|
|
13
|
+
In verbose mode only a summary of completed work is shown, not constant stream of how Claude executes. Need to investigate and fix — streaming should show real-time Claude output.
|
|
14
|
+
|
|
15
|
+
## For verifying git commits before halting Claude — how should RAF check that the commit landed?
|
|
16
|
+
All three checks combined: (1) HEAD changed from before task, (2) new commit message starts with RAF[project:task], and (3) outcome file is committed in git.
|
|
17
|
+
|
|
18
|
+
## If the commit hasn't landed when the grace period expires, what should happen?
|
|
19
|
+
Extend grace period — keep waiting (with a maximum cap) until the commit appears or a hard timeout is reached.
|
|
20
|
+
|
|
21
|
+
## What should the maximum cap be for the extended grace period when waiting for commit?
|
|
22
|
+
180 seconds (3 minutes total max wait for commit). Current grace period is 60 seconds.
|
|
23
|
+
|
|
24
|
+
## For the verbose streaming fix — any suspicion about what's wrong?
|
|
25
|
+
Investigate fully — debug the entire verbose code path end-to-end to find why streaming isn't working.
|
|
@@ -0,0 +1,3 @@
|
|
|
1
|
+
- [ ] in amendment, if new task looks like follow up or fix to previous completed task in the project - you should reference it in new plan (iteration plan)
|
|
2
|
+
- [ ] in 'raf do --verbose' add task name (not just "Executing task 011..."). also steam output from claude into terminal in verbose mode
|
|
3
|
+
- [ ] raf halted before commit was done. make sure commit is there before halting claude by checking commits. see previous halt work in commit 4d3868c3ef4c607c59829e94462ffd0490d82a98
|
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
# Outcome: Amend Iteration References
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Enhanced the amend planning prompt to include outcome file paths for completed tasks and instruct Claude to reference previous task outcomes when creating follow-up/fix plans.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### `src/prompts/amend.ts`
|
|
9
|
+
- **Enhanced `existingTasksSummary`**: Completed tasks now include an `Outcome:` line with the full path to their outcome file (e.g., `Outcome: /project/outcomes/001-setup.md`). Non-completed tasks are unaffected.
|
|
10
|
+
- **Added follow-up task instructions**: New "Identifying Follow-up Tasks" paragraph in Step 2 instructs Claude to reference previous task outcomes in the Context section when creating follow-up, fix, or iteration tasks. Includes the exact format to use.
|
|
11
|
+
- **Updated plan template**: Added a placeholder line in the Context section showing the follow-up reference format.
|
|
12
|
+
|
|
13
|
+
### `tests/unit/plan-command.test.ts`
|
|
14
|
+
- Added 3 new tests:
|
|
15
|
+
- Verifies outcome file paths appear for completed tasks in the task summary
|
|
16
|
+
- Verifies outcome file paths do NOT appear for pending/failed tasks
|
|
17
|
+
- Verifies follow-up task instructions are present in the system prompt
|
|
18
|
+
|
|
19
|
+
## Acceptance Criteria
|
|
20
|
+
- [x] Amend prompt includes outcome file paths for completed tasks in the task summary
|
|
21
|
+
- [x] Prompt instructs Claude to identify follow-up/fix tasks and reference outcomes in Context section
|
|
22
|
+
- [x] Existing amend functionality is not broken (all 40 plan-command tests pass)
|
|
23
|
+
- [x] All tests pass (1 pre-existing failure in planning-prompt.test.ts is unrelated)
|
|
24
|
+
|
|
25
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
# Outcome: Verbose Task Name Display
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Updated all verbose mode log messages in `do.ts` to include the task name alongside the task ID, using the format `task 011 (fix-login-bug)` instead of just `task 011`.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### `src/commands/do.ts`
|
|
9
|
+
- **Added `taskLabel` variable** (line 449): Computes `${task.id} (${displayName})` when the name differs from the ID, or just `${task.id}` when they're the same (to avoid redundant `001 (001)` display).
|
|
10
|
+
- **Updated 7 verbose log messages** to use `taskLabel`:
|
|
11
|
+
- Blocked task warning: `Task ${taskLabel} blocked by failed dependency: ...`
|
|
12
|
+
- Retry message: `Retrying task ${taskLabel} (previously failed)...`
|
|
13
|
+
- Force re-run message: `Re-running task ${taskLabel} (force mode)...`
|
|
14
|
+
- Execute message: `Executing task ${taskLabel}...`
|
|
15
|
+
- Retry loop message: `Retry N/M for task ${taskLabel}...`
|
|
16
|
+
- Completion message: `Task ${taskLabel} completed (elapsed)`
|
|
17
|
+
- Stash message: `Changes for task ${taskLabel} stashed as: ...`
|
|
18
|
+
- Failure message: `Task ${taskLabel} failed: reason (elapsed)`
|
|
19
|
+
|
|
20
|
+
### No test changes needed
|
|
21
|
+
- The `formatRetryHistoryForConsole` function already supported task name display
|
|
22
|
+
- No existing tests assert on verbose log message format directly
|
|
23
|
+
- All 757 tests pass (1 pre-existing failure in planning-prompt.test.ts is unrelated)
|
|
24
|
+
|
|
25
|
+
## Acceptance Criteria
|
|
26
|
+
- [x] All verbose log messages that mention a task ID also show the task name
|
|
27
|
+
- [x] Format is consistent across all messages (`taskLabel` pattern)
|
|
28
|
+
- [x] Non-verbose mode is unaffected (uses `formatTaskProgress` separately)
|
|
29
|
+
- [x] All tests pass
|
|
30
|
+
|
|
31
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
# Outcome: Verbose Streaming Fix
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Fixed `runVerbose()` to stream Claude's real-time execution output (tool calls, file operations, text) by using `--output-format stream-json --verbose` instead of plain `-p` mode which only showed the final summary.
|
|
5
|
+
|
|
6
|
+
## Root Cause
|
|
7
|
+
The `runVerbose()` method used the same `-p` (print) flag as `run()`, which runs Claude in non-interactive mode and only outputs the final assistant response text. This meant users saw a summary of completed work rather than real-time streaming of Claude's activity.
|
|
8
|
+
|
|
9
|
+
## Changes Made
|
|
10
|
+
|
|
11
|
+
### `src/parsers/stream-renderer.ts` (NEW)
|
|
12
|
+
- **Stream event parser**: Parses NDJSON lines from Claude CLI `stream-json` output
|
|
13
|
+
- **Human-readable rendering**: Converts events to user-friendly display:
|
|
14
|
+
- Text blocks: displayed directly
|
|
15
|
+
- Tool calls: descriptive one-line summaries (e.g., `→ Reading /src/main.ts`, `→ Running: npm test`)
|
|
16
|
+
- System/result events: suppressed (not useful for display)
|
|
17
|
+
- **Tool descriptions**: Custom formatting for Read, Write, Edit, Bash, Glob, Grep, WebFetch, WebSearch, TodoWrite, Task, and NotebookEdit tools
|
|
18
|
+
- **Text content extraction**: Returns text content separately for completion marker detection and output parsing
|
|
19
|
+
|
|
20
|
+
### `src/core/claude-runner.ts`
|
|
21
|
+
- **Modified `runVerbose()` spawn args**: Added `--output-format stream-json --verbose` flags to get real-time NDJSON streaming events
|
|
22
|
+
- **NDJSON line buffering**: Added line buffer to handle data chunks that split across NDJSON line boundaries
|
|
23
|
+
- **Event rendering pipeline**: Each complete NDJSON line is parsed by `renderStreamEvent()`, display text goes to stdout, text content accumulates in `output` for completion detection and parsing
|
|
24
|
+
- **Preserved all existing behavior**: Timeout, context overflow detection, completion marker detection, outcome file polling, and kill mechanisms all work unchanged
|
|
25
|
+
- **`run()` method unchanged**: Non-verbose mode remains exactly as before
|
|
26
|
+
|
|
27
|
+
### `tests/unit/stream-renderer.test.ts` (NEW)
|
|
28
|
+
- 25 tests covering all event types: system, assistant (text), assistant (tool_use), user (tool results), result
|
|
29
|
+
- Edge cases: empty lines, invalid JSON, empty content, unknown events
|
|
30
|
+
- Tool-specific rendering: all 11 supported tools tested
|
|
31
|
+
|
|
32
|
+
### `tests/unit/claude-runner.test.ts`
|
|
33
|
+
- Added 4 new tests in `verbose stream-json output` describe block:
|
|
34
|
+
- Verifies `runVerbose()` includes `--output-format stream-json --verbose` flags
|
|
35
|
+
- Verifies `run()` does NOT include these flags
|
|
36
|
+
- Verifies NDJSON assistant events are parsed and text extracted correctly
|
|
37
|
+
- Verifies tool_use events don't add text to output
|
|
38
|
+
|
|
39
|
+
## Acceptance Criteria
|
|
40
|
+
- [x] `raf do --verbose` shows Claude's real-time execution (tool calls, file operations, thinking)
|
|
41
|
+
- [x] Completion marker detection still works correctly
|
|
42
|
+
- [x] Timeout mechanism still functions
|
|
43
|
+
- [x] Context overflow detection still works
|
|
44
|
+
- [x] Non-verbose mode (`raf do`) is completely unaffected
|
|
45
|
+
- [x] Success/failure parsing still works from the captured output
|
|
46
|
+
- [x] All existing tests pass (786 pass, 1 pre-existing failure in planning-prompt.test.ts is unrelated)
|
|
47
|
+
|
|
48
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
# Outcome: Commit Verification Before Halt
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
Added commit verification to the grace period logic so that when a COMPLETE marker is detected, the system verifies the expected git commit has actually landed before terminating. If the commit hasn't landed within the initial 60-second grace period, it extends polling up to a hard maximum of 180 seconds.
|
|
5
|
+
|
|
6
|
+
## Changes Made
|
|
7
|
+
|
|
8
|
+
### `src/core/git.ts`
|
|
9
|
+
- **`getHeadCommitHash()`**: Returns the current HEAD commit hash (or null if not in a git repo)
|
|
10
|
+
- **`getHeadCommitMessage()`**: Returns the HEAD commit message first line (or null)
|
|
11
|
+
- **`isFileCommittedInHead(filePath)`**: Checks if a file exists in HEAD's tree using `git ls-tree`
|
|
12
|
+
|
|
13
|
+
### `src/core/claude-runner.ts`
|
|
14
|
+
- **New exports**: `COMPLETION_HARD_MAX_MS` (180s), `COMMIT_POLL_INTERVAL_MS` (10s), `CommitContext` interface
|
|
15
|
+
- **New `commitContext` field in `ClaudeRunnerOptions`**: Allows passing pre-execution HEAD hash, expected commit prefix, and outcome file path
|
|
16
|
+
- **`verifyCommit()` helper**: Checks all three conditions (HEAD changed, message prefix matches, outcome file committed)
|
|
17
|
+
- **Updated `createCompletionDetector()`**: Accepts optional `commitContext` parameter. On grace period expiry:
|
|
18
|
+
- If COMPLETE marker and `commitContext` provided: verifies commit before killing
|
|
19
|
+
- If commit not verified: starts polling every 10s up to 180s total
|
|
20
|
+
- If FAILED marker or no `commitContext`: kills immediately (existing behavior)
|
|
21
|
+
- **Both `run()` and `runVerbose()`**: Pass `commitContext` through to completion detector
|
|
22
|
+
|
|
23
|
+
### `src/commands/do.ts`
|
|
24
|
+
- **Captures HEAD hash** before each task execution attempt using `getHeadCommitHash()`
|
|
25
|
+
- **Builds `commitContext`** with `preExecutionHead`, `expectedPrefix` (e.g., `RAF[005:001]`), and `outcomeFilePath`
|
|
26
|
+
- **Passes `commitContext`** to both `run()` and `runVerbose()` calls
|
|
27
|
+
- Gracefully handles non-git-repo case (skips commit verification)
|
|
28
|
+
|
|
29
|
+
### `tests/unit/git-commit-helpers.test.ts` (NEW)
|
|
30
|
+
- 11 tests covering all three new git functions:
|
|
31
|
+
- `getHeadCommitHash`: normal, not-in-repo, empty output, whitespace trimming
|
|
32
|
+
- `getHeadCommitMessage`: normal, not-in-repo, empty output
|
|
33
|
+
- `isFileCommittedInHead`: file exists, file missing, not-in-repo, command failure
|
|
34
|
+
|
|
35
|
+
### `tests/unit/claude-runner.test.ts`
|
|
36
|
+
- Added mock for `git.js` module (`getHeadCommitHash`, `getHeadCommitMessage`, `isFileCommittedInHead`)
|
|
37
|
+
- Added 7 new tests in `commit verification during grace period` describe block:
|
|
38
|
+
- Commit verified within initial grace period (kills normally)
|
|
39
|
+
- Commit found during extended polling (extends, then kills)
|
|
40
|
+
- Commit never lands (hard max at 180s)
|
|
41
|
+
- FAILED markers don't trigger commit verification
|
|
42
|
+
- Backward compatible without commitContext
|
|
43
|
+
- Verifies commit message prefix must match
|
|
44
|
+
- Verifies outcome file must be committed
|
|
45
|
+
|
|
46
|
+
## Acceptance Criteria
|
|
47
|
+
- [x] HEAD hash is recorded before each task execution
|
|
48
|
+
- [x] Grace period checks for commit matching `RAF[project:task]` pattern
|
|
49
|
+
- [x] Grace period checks that outcome file is committed
|
|
50
|
+
- [x] Grace period extends up to 180 seconds if commit not found
|
|
51
|
+
- [x] Process is killed with a warning after 180 seconds if commit never lands
|
|
52
|
+
- [x] Normal flow (commit lands within 60s) is not affected
|
|
53
|
+
- [x] All existing tests pass (805 pass, 1 pre-existing failure in planning-prompt.test.ts is unrelated)
|
|
54
|
+
- [x] New tests cover: commit found within grace, commit found in extended grace, commit never found (hard timeout)
|
|
55
|
+
|
|
56
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Task: Amend Iteration References
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
When amending a project, instruct the planning Claude to reference previous completed tasks (with outcome file paths) in the Context section of new plans that are follow-ups or fixes.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Currently, amendment mode shows existing tasks with their status (COMPLETED/PENDING/FAILED) but doesn't guide Claude to treat new tasks as iterations on previous work. When a user amends a project to fix or follow up on a completed task, the new plan should reference the previous task's outcome file so the executing agent has full context about what was done before.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- Update the amend system prompt in `src/prompts/amend.ts` to instruct Claude to:
|
|
11
|
+
- Identify when new tasks are follow-ups, fixes, or iterations of previously completed tasks
|
|
12
|
+
- Include a reference to the previous task's outcome file path in the Context section of the new plan
|
|
13
|
+
- Use the format: "This is a follow-up to task NNN. See outcome: {projectPath}/outcomes/NNN-task-name.md"
|
|
14
|
+
- The existing tasks summary already includes task IDs and names — enhance it to also show the outcome file path for completed tasks so Claude has the information readily available
|
|
15
|
+
- This is purely a prompt engineering change — no programmatic detection logic needed
|
|
16
|
+
- Do NOT modify the plan template structure (no new dedicated fields) — use the existing Context section
|
|
17
|
+
|
|
18
|
+
## Implementation Steps
|
|
19
|
+
1. Read the current amend prompt in `src/prompts/amend.ts`
|
|
20
|
+
2. Enhance the `existingTasksSummary` generation to include outcome file paths for completed tasks
|
|
21
|
+
3. Add instructions in the system prompt (Step 2: Analyze New Requirements section) telling Claude to identify follow-up/fix tasks and reference previous outcomes in the Context section
|
|
22
|
+
4. Add an example in the prompt showing how to reference a previous task's outcome
|
|
23
|
+
5. Update tests for the amend prompt if any exist
|
|
24
|
+
|
|
25
|
+
## Acceptance Criteria
|
|
26
|
+
- [ ] Amend prompt includes outcome file paths for completed tasks in the task summary
|
|
27
|
+
- [ ] Prompt instructs Claude to identify follow-up/fix tasks and reference outcomes in Context section
|
|
28
|
+
- [ ] Existing amend functionality is not broken
|
|
29
|
+
- [ ] All tests pass
|
|
30
|
+
|
|
31
|
+
## Notes
|
|
32
|
+
- The outcome file path follows the pattern: `{projectPath}/outcomes/{taskId}-{taskName}.md`
|
|
33
|
+
- Only completed tasks have meaningful outcome files to reference
|
|
34
|
+
- The `AmendPromptParams` interface already includes `projectPath` which can be used to construct outcome paths
|
|
35
|
+
- The `existingTasks` array includes `planFile` from which the task name can be extracted for outcome path construction
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
# Task: Verbose Task Name Display
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Show the task name alongside the task ID in all verbose mode log messages (e.g., "Executing task 011 (fix-login-bug)..." instead of "Executing task 011...").
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
Currently in verbose mode, log messages reference tasks by ID only (e.g., "Executing task 011..."). The task name is available via `extractTaskNameFromPlanFile()` and is already stored in `displayName`, but not consistently used in all log messages. Users need the task name to quickly understand what's running without cross-referencing plan files.
|
|
8
|
+
|
|
9
|
+
## Requirements
|
|
10
|
+
- Add task name to ALL verbose log messages that reference a task ID, including:
|
|
11
|
+
- "Executing task 011..." → "Executing task 011 (fix-login-bug)..."
|
|
12
|
+
- "Retrying task 011 (previously failed)..." → include name
|
|
13
|
+
- "Re-running task 011 (force mode)..." → include name
|
|
14
|
+
- "Task 011 completed (2m 30s)" → include name
|
|
15
|
+
- "Task 011 failed: reason (2m 30s)" → include name
|
|
16
|
+
- "Task 011 blocked by failed dependency: 003" → include name
|
|
17
|
+
- Retry messages
|
|
18
|
+
- Changes stashed messages
|
|
19
|
+
- The task name is already computed as `displayName` in `do.ts` — use it consistently
|
|
20
|
+
- Also update the `logger.setContext()` call if it's being used (currently no-op but may be restored)
|
|
21
|
+
- Update the verbose summary section to include task names where applicable
|
|
22
|
+
|
|
23
|
+
## Implementation Steps
|
|
24
|
+
1. Read `src/commands/do.ts` and identify all verbose log messages that reference task IDs
|
|
25
|
+
2. Update each message to include `displayName` in parentheses after the task ID
|
|
26
|
+
3. Ensure the format is consistent: `task ${task.id} (${displayName})` everywhere
|
|
27
|
+
4. Update tests if any test verbose output format
|
|
28
|
+
|
|
29
|
+
## Acceptance Criteria
|
|
30
|
+
- [ ] All verbose log messages that mention a task ID also show the task name
|
|
31
|
+
- [ ] Format is consistent across all messages
|
|
32
|
+
- [ ] Non-verbose mode is unaffected
|
|
33
|
+
- [ ] All tests pass
|
|
34
|
+
|
|
35
|
+
## Notes
|
|
36
|
+
- `displayName` is already computed at line 447 of `do.ts` as `taskName ?? task.id`
|
|
37
|
+
- When `displayName` equals `task.id` (name extraction failed), showing it in parens would be redundant — consider only showing parens when name differs from ID
|
|
38
|
+
- The `setContext` and `clearContext` methods on logger are currently no-ops (deprecated) but the calls remain in do.ts
|
|
@@ -0,0 +1,45 @@
|
|
|
1
|
+
# Task: Verbose Streaming Fix
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Investigate and fix why verbose mode only shows a summary of completed work instead of streaming Claude's real-time execution output.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
The `runVerbose()` method in `claude-runner.ts` does call `process.stdout.write(text)` on stdout data, but users report only seeing a summary rather than a real-time stream. The likely root cause is that Claude CLI is invoked with the `-p` (print/pipe) flag, which runs in non-interactive mode and only outputs the final assistant response text — not the intermediate tool calls, file reads, code edits, and thinking steps that constitute the real-time execution flow.
|
|
8
|
+
|
|
9
|
+
The non-verbose `run()` method correctly uses `-p` since it only needs the final output for parsing. But `runVerbose()` needs a different approach to show Claude's work as it happens.
|
|
10
|
+
|
|
11
|
+
## Requirements
|
|
12
|
+
- Investigate the exact cause of why streaming doesn't show real-time Claude activity
|
|
13
|
+
- Fix `runVerbose()` to stream Claude's real-time execution output (tool calls, file operations, code writing, etc.)
|
|
14
|
+
- The fix likely involves either:
|
|
15
|
+
- Removing `-p` flag and using a different mode that streams intermediate output
|
|
16
|
+
- Using `--output-format stream-json` to get streaming JSON events and rendering them
|
|
17
|
+
- Using PTY-based execution (like `runInteractive`) but without stdin interaction
|
|
18
|
+
- The completion marker detection must still work with the new approach
|
|
19
|
+
- Output parsing for success/failure must still function correctly
|
|
20
|
+
- The timeout mechanism must still work
|
|
21
|
+
- Non-verbose mode must remain unchanged
|
|
22
|
+
|
|
23
|
+
## Implementation Steps
|
|
24
|
+
1. Investigate what Claude CLI output modes are available (check `claude --help` or documentation)
|
|
25
|
+
2. Determine the best approach for streaming real-time output while maintaining completion detection
|
|
26
|
+
3. Modify `runVerbose()` to use the chosen streaming approach
|
|
27
|
+
4. Ensure completion markers can still be detected in the new output format
|
|
28
|
+
5. Test that timeout, context overflow detection, and kill mechanisms still work
|
|
29
|
+
6. Verify output can still be parsed for success/failure determination
|
|
30
|
+
|
|
31
|
+
## Acceptance Criteria
|
|
32
|
+
- [ ] `raf do --verbose` shows Claude's real-time execution (tool calls, file operations, thinking)
|
|
33
|
+
- [ ] Completion marker detection still works correctly
|
|
34
|
+
- [ ] Timeout mechanism still functions
|
|
35
|
+
- [ ] Context overflow detection still works
|
|
36
|
+
- [ ] Non-verbose mode (`raf do`) is completely unaffected
|
|
37
|
+
- [ ] Success/failure parsing still works from the captured output
|
|
38
|
+
- [ ] All existing tests pass (update as needed for new implementation)
|
|
39
|
+
|
|
40
|
+
## Notes
|
|
41
|
+
- The `run()` method must NOT be changed — only `runVerbose()` needs modification
|
|
42
|
+
- Claude CLI streaming options may include `--output-format stream-json` which outputs JSON events
|
|
43
|
+
- If using stream-json, a renderer/formatter will be needed to display events in a human-readable way
|
|
44
|
+
- PTY-based approach (similar to `runInteractive`) could work but would need `--dangerously-skip-permissions` to avoid interactive prompts
|
|
45
|
+
- The `activeProcess` tracking needs to work with whichever approach is chosen for the shutdown handler
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
# Task: Commit Verification Before Halt
|
|
2
|
+
|
|
3
|
+
## Objective
|
|
4
|
+
Before halting Claude after detecting a completion marker, verify that the expected git commit has actually been made, extending the grace period if the commit hasn't landed yet.
|
|
5
|
+
|
|
6
|
+
## Context
|
|
7
|
+
The current halt mechanism in `claude-runner.ts` detects completion markers (`<promise>COMPLETE/FAILED</promise>`) and starts a fixed 60-second grace period before killing Claude. However, if Claude hasn't finished its git commit within that window, the process gets killed mid-commit, potentially leaving the repository in a broken state. The previous halt work was introduced in commit `4d3868c`. This task adds commit verification to ensure the grace period only expires after the commit is confirmed.
|
|
8
|
+
|
|
9
|
+
See previous halt work: commit `4d3868c3ef4c607c59829e94462ffd0490d82a98`
|
|
10
|
+
|
|
11
|
+
## Dependencies
|
|
12
|
+
003
|
|
13
|
+
|
|
14
|
+
## Requirements
|
|
15
|
+
- Record the HEAD commit hash before task execution begins
|
|
16
|
+
- After the grace period triggers, verify the commit landed by checking ALL three conditions:
|
|
17
|
+
1. HEAD has changed from the pre-execution hash
|
|
18
|
+
2. The new HEAD commit message starts with the expected `RAF[project:task]` pattern
|
|
19
|
+
3. The outcome file is tracked in git (committed, not just on disk)
|
|
20
|
+
- If the commit hasn't landed when the initial grace period (60s) expires:
|
|
21
|
+
- Extend the grace period by polling for the commit
|
|
22
|
+
- Continue extending until either the commit is confirmed or a hard maximum of 180 seconds is reached
|
|
23
|
+
- Poll at a reasonable interval (e.g., every 10 seconds)
|
|
24
|
+
- If the hard maximum is reached without commit confirmation, kill the process and log a warning
|
|
25
|
+
- Add git helper functions to `src/core/git.ts` for:
|
|
26
|
+
- Getting the current HEAD hash
|
|
27
|
+
- Checking if a commit message matches a pattern
|
|
28
|
+
- Checking if a file is committed in HEAD
|
|
29
|
+
- The completion detector factory (`createCompletionDetector`) needs additional parameters:
|
|
30
|
+
- Pre-execution HEAD hash
|
|
31
|
+
- Expected commit message prefix (e.g., `RAF[005:001]`)
|
|
32
|
+
- Outcome file path (already available)
|
|
33
|
+
- Pass the necessary context from `do.ts` when creating the completion detector
|
|
34
|
+
|
|
35
|
+
## Implementation Steps
|
|
36
|
+
1. Add new git utility functions to `src/core/git.ts`:
|
|
37
|
+
- `getHeadCommitHash()`: returns current HEAD hash
|
|
38
|
+
- `getHeadCommitMessage()`: returns HEAD commit message
|
|
39
|
+
- `isFileCommittedInHead(filePath)`: checks if file is in HEAD commit
|
|
40
|
+
2. Update `createCompletionDetector` in `claude-runner.ts` to accept commit verification parameters
|
|
41
|
+
3. Modify the grace period logic: instead of a single `setTimeout`, use an interval that checks for the commit
|
|
42
|
+
4. If initial 60s grace period expires without commit, continue polling up to 180s total
|
|
43
|
+
5. Update `do.ts` to capture HEAD hash before task execution and pass commit context to the runner
|
|
44
|
+
6. Add unit tests for the new git functions
|
|
45
|
+
7. Add unit tests for the extended grace period behavior
|
|
46
|
+
|
|
47
|
+
## Acceptance Criteria
|
|
48
|
+
- [ ] HEAD hash is recorded before each task execution
|
|
49
|
+
- [ ] Grace period checks for commit matching `RAF[project:task]` pattern
|
|
50
|
+
- [ ] Grace period checks that outcome file is committed
|
|
51
|
+
- [ ] Grace period extends up to 180 seconds if commit not found
|
|
52
|
+
- [ ] Process is killed with a warning after 180 seconds if commit never lands
|
|
53
|
+
- [ ] Normal flow (commit lands within 60s) is not affected
|
|
54
|
+
- [ ] All existing tests pass
|
|
55
|
+
- [ ] New tests cover: commit found within grace, commit found in extended grace, commit never found (hard timeout)
|
|
56
|
+
|
|
57
|
+
## Notes
|
|
58
|
+
- The `ClaudeRunnerOptions` interface may need new fields for the commit context
|
|
59
|
+
- On task failure, Claude does NOT commit (changes are stashed) — the commit check should only apply when a COMPLETE marker is detected, not FAILED
|
|
60
|
+
- The project number and task ID are already available in `do.ts` where the runner is called
|
|
61
|
+
- Use `execSync` for git commands (consistent with existing `git.ts` functions)
|
|
62
|
+
- Handle "not in git repo" gracefully — skip commit verification if not in a git repo
|