rafcode 2.5.0 → 2.5.1
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 +1 -1
- package/RAF/ahwzmc-echo-forge/decisions.md +15 -0
- package/RAF/ahwzmc-echo-forge/input.md +4 -0
- package/RAF/ahwzmc-echo-forge/outcomes/01-change-low-effort-default-to-sonnet.md +57 -0
- package/RAF/ahwzmc-echo-forge/outcomes/02-add-no-worktree-flag.md +79 -0
- package/RAF/ahwzmc-echo-forge/outcomes/03-update-readme.md +75 -0
- package/RAF/ahwzmc-echo-forge/plans/01-change-low-effort-default-to-sonnet.md +57 -0
- package/RAF/ahwzmc-echo-forge/plans/02-add-no-worktree-flag.md +51 -0
- package/RAF/ahwzmc-echo-forge/plans/03-update-readme.md +48 -0
- package/RAF/aifqwf-fix-amend-commit-again/decisions.md +7 -0
- package/RAF/aifqwf-fix-amend-commit-again/input.md +2 -0
- package/RAF/aifqwf-fix-amend-commit-again/outcomes/01-update-effort-mapping-defaults.md +35 -0
- package/RAF/aifqwf-fix-amend-commit-again/outcomes/02-fix-amend-worktree-commit.md +50 -0
- package/RAF/aifqwf-fix-amend-commit-again/plans/01-update-effort-mapping-defaults.md +37 -0
- package/RAF/aifqwf-fix-amend-commit-again/plans/02-fix-amend-worktree-commit.md +55 -0
- package/README.md +26 -12
- package/dist/commands/do.d.ts.map +1 -1
- package/dist/commands/do.js +1 -0
- package/dist/commands/do.js.map +1 -1
- package/dist/commands/plan.d.ts.map +1 -1
- package/dist/commands/plan.js +10 -3
- package/dist/commands/plan.js.map +1 -1
- package/dist/core/git.d.ts.map +1 -1
- package/dist/core/git.js +20 -4
- package/dist/core/git.js.map +1 -1
- package/dist/types/config.js +2 -2
- package/dist/types/config.js.map +1 -1
- package/package.json +1 -1
- package/src/commands/do.ts +1 -0
- package/src/commands/plan.ts +10 -3
- package/src/core/git.ts +23 -4
- package/src/prompts/config-docs.md +7 -7
- package/src/types/config.ts +2 -2
- package/tests/unit/commit-planning-artifacts-worktree.test.ts +113 -0
- package/tests/unit/commit-planning-artifacts.test.ts +1 -1
- package/tests/unit/config-command.test.ts +2 -2
- package/tests/unit/config.test.ts +14 -14
- package/tests/unit/worktree-flag-override.test.ts +186 -0
package/CLAUDE.md
CHANGED
|
@@ -170,7 +170,7 @@ npm run lint # Type check without emit
|
|
|
170
170
|
|
|
171
171
|
### Per-Task Model Resolution
|
|
172
172
|
- Plan files contain `effort` frontmatter that determines which model executes the task
|
|
173
|
-
- `effortMapping` config maps effort labels to models: `{ low: "
|
|
173
|
+
- `effortMapping` config maps effort labels to models: `{ low: "sonnet", medium: "opus", high: "opus" }`
|
|
174
174
|
- `models.execute` acts as a ceiling — tasks can't exceed this model tier
|
|
175
175
|
- On retry, tasks escalate to the ceiling model for a better chance of success
|
|
176
176
|
- If a plan has no effort frontmatter, `models.execute` is used as a fallback (with a warning)
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
# Project Decisions
|
|
2
|
+
|
|
3
|
+
## Should only effortMapping.low change, or all haiku defaults (e.g., failureAnalysis)?
|
|
4
|
+
Only effortMapping.low — change low-effort task default from haiku to sonnet. Leave failureAnalysis and other models as-is.
|
|
5
|
+
|
|
6
|
+
## What other config settings need --no-* counterparts?
|
|
7
|
+
Only `--worktree` needs a `--no-worktree` counterpart — it's the only boolean config with an existing CLI flag. `autoCommit` and `syncMainBranch` are config-only and don't need CLI negation flags.
|
|
8
|
+
|
|
9
|
+
## README benefits to highlight
|
|
10
|
+
- Smart model selection: RAF estimates task complexity and uses the right model (haiku for simple, opus for complex)
|
|
11
|
+
- Automatic PR creation with Claude-generated descriptions summarizing intent, decisions, and outcomes
|
|
12
|
+
- Structured decision-making: planning interview captures key decisions as reviewable artifacts
|
|
13
|
+
- Context isolation: each task gets fresh context instead of degrading over a long session
|
|
14
|
+
- Token efficiency: focused tasks use fewer tokens than long debugging sessions
|
|
15
|
+
- Full auditability: input, decisions, plans, and outcomes are all preserved as markdown
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
- [ ] make sonnet default for easy tasks
|
|
2
|
+
- [ ] add --no-worktree counterpart for when worktree is on by default in config
|
|
3
|
+
- [ ] update README: explain difference between --amend and --resume
|
|
4
|
+
- [ ] update README: rewrite benefits section to highlight RAF's strengths (smart model selection, auto PR creation, structured decisions, etc.)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
# Task Outcome: Change default effortMapping.low from haiku to sonnet
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Successfully updated the default model for low-effort tasks from `haiku` to `sonnet` across the entire codebase.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### 1. Core Configuration
|
|
10
|
+
- **src/types/config.ts**: Changed `DEFAULT_CONFIG.effortMapping.low` from `'haiku'` to `'sonnet'` (line 72)
|
|
11
|
+
|
|
12
|
+
### 2. Documentation
|
|
13
|
+
- **src/prompts/config-docs.md**: Updated all references to the low-effort default:
|
|
14
|
+
- Table default value (line 52)
|
|
15
|
+
- Example JSON configuration (line 64)
|
|
16
|
+
- Example explanation (line 67)
|
|
17
|
+
- Full configuration example (line 220)
|
|
18
|
+
|
|
19
|
+
- **CLAUDE.md**: Updated effortMapping description (line 173) to reflect new default
|
|
20
|
+
|
|
21
|
+
### 3. Test Files
|
|
22
|
+
Updated all test assertions that checked for the old default value:
|
|
23
|
+
|
|
24
|
+
- **tests/unit/config.test.ts**: 7 test assertions updated
|
|
25
|
+
- Line 94: Full config validation test
|
|
26
|
+
- Line 277: Deep-merge test
|
|
27
|
+
- Line 371: Config resolution test
|
|
28
|
+
- Line 404: Default config test
|
|
29
|
+
- Line 487: Effort mapping default test
|
|
30
|
+
- Line 599: Custom effort mapping test
|
|
31
|
+
- Line 714: Effort resolution test
|
|
32
|
+
- Line 724: Valid effortMapping test
|
|
33
|
+
|
|
34
|
+
- **tests/unit/config-command.test.ts**: 1 test assertion updated
|
|
35
|
+
- Line 80: Effort mapping override test
|
|
36
|
+
|
|
37
|
+
### 4. Verification
|
|
38
|
+
- All 1243 tests passed successfully
|
|
39
|
+
- TypeScript compilation passed with no errors (`npm run lint`)
|
|
40
|
+
- No references to the old default remain in the codebase
|
|
41
|
+
|
|
42
|
+
## Notes
|
|
43
|
+
|
|
44
|
+
- Did NOT change `models.failureAnalysis: 'haiku'` or any other haiku references outside of `effortMapping.low` (as required)
|
|
45
|
+
- No updates needed in `tests/unit/claude-runner.test.ts` (no effortMapping.low references found)
|
|
46
|
+
- Planning prompts (`src/prompts/planning.ts`) only describe effort levels conceptually without mentioning specific models, so no changes were needed there
|
|
47
|
+
|
|
48
|
+
## Verification
|
|
49
|
+
|
|
50
|
+
All acceptance criteria met:
|
|
51
|
+
- ✅ `DEFAULT_CONFIG.effortMapping.low` equals `'sonnet'`
|
|
52
|
+
- ✅ All documentation references updated (config-docs.md, CLAUDE.md)
|
|
53
|
+
- ✅ All test assertions updated and passing
|
|
54
|
+
- ✅ `npm test` passes with no failures (1243/1243 tests passed)
|
|
55
|
+
- ✅ `npm run lint` passes
|
|
56
|
+
|
|
57
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
# Task Outcome: Add --no-worktree flag to plan and do commands
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Successfully added `--no-worktree` flag support to both `raf plan` and `raf do` commands, enabling users to override `config.worktree = true` on a per-invocation basis. The implementation uses Commander.js dual option definition pattern to support tri-state flag behavior (true/false/undefined).
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### 1. Command Option Definitions
|
|
10
|
+
|
|
11
|
+
**src/commands/plan.ts (line 75-76)**:
|
|
12
|
+
- Changed from single `--worktree` option to dual option definition
|
|
13
|
+
- Added `.option('-w, --worktree', 'Create a git worktree for isolated planning')`
|
|
14
|
+
- Added `.option('--no-worktree', 'Disable worktree mode (overrides config)')`
|
|
15
|
+
|
|
16
|
+
**src/commands/do.ts (line 204-205)**:
|
|
17
|
+
- Changed from single `--worktree` option to dual option definition
|
|
18
|
+
- Added `.option('-w, --worktree', 'Execute tasks in a git worktree')`
|
|
19
|
+
- Added `.option('--no-worktree', 'Disable worktree mode (overrides config)')`
|
|
20
|
+
|
|
21
|
+
The dual option pattern allows Commander.js to recognize both `--worktree` (sets true) and `--no-worktree` (sets false), while omitting both leaves the value undefined for config fallback.
|
|
22
|
+
|
|
23
|
+
### 2. Tests
|
|
24
|
+
|
|
25
|
+
**tests/unit/worktree-flag-override.test.ts** (new file):
|
|
26
|
+
- Created comprehensive test suite with 14 passing tests
|
|
27
|
+
- Tests Commander.js flag parsing for both `--worktree` and `--no-worktree`
|
|
28
|
+
- Tests tri-state behavior (true/false/undefined)
|
|
29
|
+
- Tests resolution logic with `options.worktree ?? getWorktreeDefault()`
|
|
30
|
+
- Tests override semantics (flag takes precedence over config)
|
|
31
|
+
|
|
32
|
+
### 3. Documentation
|
|
33
|
+
|
|
34
|
+
**README.md**:
|
|
35
|
+
- Added `--no-worktree` flag to `raf plan` command reference table (line 199)
|
|
36
|
+
- Added `--no-worktree` flag to `raf do` command reference table (line 211)
|
|
37
|
+
- Added usage note in "Worktree Mode > How it works" section (line 189)
|
|
38
|
+
|
|
39
|
+
## Implementation Details
|
|
40
|
+
|
|
41
|
+
### Commander.js Dual Option Pattern
|
|
42
|
+
|
|
43
|
+
Commander.js v14 does NOT automatically support `--no-*` variants for simple boolean options. The `--[no-]flag` syntax doesn't work as expected. Instead, we used the dual option definition pattern:
|
|
44
|
+
|
|
45
|
+
```typescript
|
|
46
|
+
.option('-w, --worktree', 'Enable worktree mode')
|
|
47
|
+
.option('--no-worktree', 'Disable worktree mode')
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This creates three states:
|
|
51
|
+
- `--worktree` → `options.worktree = true`
|
|
52
|
+
- `--no-worktree` → `options.worktree = false`
|
|
53
|
+
- (omitted) → `options.worktree = undefined`
|
|
54
|
+
|
|
55
|
+
### Resolution Logic
|
|
56
|
+
|
|
57
|
+
The existing resolution pattern `options.worktree ?? getWorktreeDefault()` works perfectly:
|
|
58
|
+
- Explicit true (from `--worktree`) takes precedence
|
|
59
|
+
- Explicit false (from `--no-worktree`) takes precedence
|
|
60
|
+
- Undefined (omitted flag) falls back to `getWorktreeDefault()` from config
|
|
61
|
+
|
|
62
|
+
## Verification
|
|
63
|
+
|
|
64
|
+
All acceptance criteria met:
|
|
65
|
+
- ✅ `raf plan --no-worktree` runs without worktree mode even when `config.worktree = true`
|
|
66
|
+
- ✅ `raf do --no-worktree` runs without worktree mode even when `config.worktree = true`
|
|
67
|
+
- ✅ `--worktree` still works as before
|
|
68
|
+
- ✅ Omitting both flags falls back to config default
|
|
69
|
+
- ✅ README documents the new flag
|
|
70
|
+
- ✅ Tests cover the tri-state behavior
|
|
71
|
+
- ✅ `npm test` passes (all 1257 tests passing)
|
|
72
|
+
|
|
73
|
+
## Notes
|
|
74
|
+
|
|
75
|
+
- No changes needed to the resolution logic in plan.ts or do.ts — the existing `options.worktree ?? getWorktreeDefault()` pattern already handles the tri-state correctly
|
|
76
|
+
- The implementation is consistent with how other boolean flags work in Commander.js
|
|
77
|
+
- Tests use `parseOptions()` instead of `parse()` to avoid running full command actions during unit tests
|
|
78
|
+
|
|
79
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
# Task Outcome: Rewrite README benefits and add --amend vs --resume explanation
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Successfully enhanced the README to better communicate RAF's value proposition and clearly explain the difference between `--amend` and `--resume` flags.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### 1. "Why RAF?" Section - Complete Rewrite
|
|
10
|
+
|
|
11
|
+
Replaced the brief, generic benefits section with comprehensive feature highlights:
|
|
12
|
+
|
|
13
|
+
**New benefits highlighted** (8 total):
|
|
14
|
+
1. **Smart model selection** — Automatic task routing based on effort estimation (low/medium/high), configurable via `effortMapping`
|
|
15
|
+
2. **Automatic PR creation** — Claude-generated PR descriptions with context from input, decisions, and outcomes
|
|
16
|
+
3. **Structured decision-making** — `decisions.md` artifacts give reviewers insight into the "why" behind changes
|
|
17
|
+
4. **Context isolation** — Fresh context per task, no degradation from long sessions
|
|
18
|
+
5. **Token efficiency** — Well-planned tasks avoid debugging cycles, planning overhead pays for itself
|
|
19
|
+
6. **Full auditability** — Complete thought process preserved as markdown (input, decisions, plans, outcomes)
|
|
20
|
+
7. **Retry with escalation** — Automatic retry with more capable model on failure
|
|
21
|
+
8. **Git worktree isolation** — Work on isolated branches with post-execution choice (merge/PR/leave)
|
|
22
|
+
|
|
23
|
+
**Old content**: 5 brief bullets focused mainly on human decisions and context rot
|
|
24
|
+
**New content**: 8 detailed benefits showcasing RAF's advanced capabilities
|
|
25
|
+
|
|
26
|
+
### 2. Added `--amend` vs `--resume` Explanation
|
|
27
|
+
|
|
28
|
+
Added new section under `raf plan` command (line 75-79):
|
|
29
|
+
|
|
30
|
+
**`--amend <id>`**:
|
|
31
|
+
- Adds new tasks to existing project
|
|
32
|
+
- Opens new planning session showing existing tasks with status
|
|
33
|
+
- Creates plans numbered after last task
|
|
34
|
+
- Use case: scope grows or extending completed project
|
|
35
|
+
|
|
36
|
+
**`--resume <id>`**:
|
|
37
|
+
- Resumes interrupted Claude planning session
|
|
38
|
+
- Opens Claude's session picker scoped to project directory
|
|
39
|
+
- Continue exact conversation where left off
|
|
40
|
+
- Use case: interrupted planning (Ctrl-C, network issue, etc.)
|
|
41
|
+
|
|
42
|
+
### 3. Features Section - Streamlined
|
|
43
|
+
|
|
44
|
+
Updated the Features bullet list to avoid redundancy with the new "Why RAF?" content:
|
|
45
|
+
|
|
46
|
+
**Old**: 7 items with some overlap with benefits
|
|
47
|
+
**New**: 6 consolidated items focusing on high-level capabilities rather than detailed benefits
|
|
48
|
+
|
|
49
|
+
Changes:
|
|
50
|
+
- "Interactive Planning" → more concise phrasing
|
|
51
|
+
- "Automated Execution" → "Smart Execution" (highlights model selection and retry)
|
|
52
|
+
- Added "Resume & Amend" as dedicated feature
|
|
53
|
+
- Consolidated git features into single "Git Integration" bullet
|
|
54
|
+
- "Configurable" → "Full Configurability" with example of what's configurable
|
|
55
|
+
|
|
56
|
+
## Verification
|
|
57
|
+
|
|
58
|
+
All acceptance criteria met:
|
|
59
|
+
- ✅ "Why RAF?" section highlights 8 key benefits including smart model selection, PR creation, and structured decisions (exceeds requirement of 6)
|
|
60
|
+
- ✅ `--amend` vs `--resume` difference clearly explained with use cases
|
|
61
|
+
- ✅ README reads well end-to-end — no contradictions or redundancy
|
|
62
|
+
- ✅ No broken markdown formatting (verified by reading rendered sections)
|
|
63
|
+
- ✅ Tone is confident and factual (showcases genuine capabilities without hype)
|
|
64
|
+
- ✅ All 1257 tests pass
|
|
65
|
+
- ✅ TypeScript compilation passes (`npm run lint`)
|
|
66
|
+
|
|
67
|
+
## Notes
|
|
68
|
+
|
|
69
|
+
- The new "Why RAF?" section is much more detailed and specific than before, providing concrete examples of RAF's capabilities
|
|
70
|
+
- The `--amend` vs `--resume` explanation is positioned right after the `raf plan` usage examples for easy discovery
|
|
71
|
+
- Features section was streamlined to complement rather than duplicate the benefits
|
|
72
|
+
- The Vision section remains unchanged — it provides philosophical context while "Why RAF?" now handles technical benefits
|
|
73
|
+
- All changes maintain the existing structure and flow of the README
|
|
74
|
+
|
|
75
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
---
|
|
2
|
+
effort: low
|
|
3
|
+
---
|
|
4
|
+
# Task: Change default effortMapping.low from haiku to sonnet
|
|
5
|
+
|
|
6
|
+
## Objective
|
|
7
|
+
Update the default model for low-effort tasks from `haiku` to `sonnet` across config, documentation, and tests.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
The user wants sonnet as the default for easy/low-effort tasks instead of haiku. This is a simple default value change that touches the config definition, documentation, and test expectations.
|
|
11
|
+
|
|
12
|
+
## Requirements
|
|
13
|
+
- Change only `effortMapping.low` default — leave `failureAnalysis` and all other haiku references as-is
|
|
14
|
+
- Update all documentation that references the old default
|
|
15
|
+
- Update all test expectations that assert the old default
|
|
16
|
+
|
|
17
|
+
## Implementation Steps
|
|
18
|
+
|
|
19
|
+
1. **Update default config** in `src/types/config.ts`:
|
|
20
|
+
- Change `low: 'haiku'` to `low: 'sonnet'` (line 72)
|
|
21
|
+
|
|
22
|
+
2. **Update config documentation** in `src/prompts/config-docs.md`:
|
|
23
|
+
- Line 52: Change default value in the table from `"haiku"` to `"sonnet"`
|
|
24
|
+
- Line 64: Change example JSON from `"low": "haiku"` to `"low": "sonnet"`
|
|
25
|
+
- Line 67: Change example from `low → haiku` to `low → sonnet`
|
|
26
|
+
- Line 220: Change full example from `"low": "haiku"` to `"low": "sonnet"`
|
|
27
|
+
|
|
28
|
+
3. **Update CLAUDE.md**:
|
|
29
|
+
- Line 173: Change `low: "haiku"` to `low: "sonnet"` in the effortMapping description
|
|
30
|
+
|
|
31
|
+
4. **Update tests** in `tests/unit/config.test.ts` — change all assertions that expect `effortMapping.low` to be `'haiku'` to expect `'sonnet'`:
|
|
32
|
+
- Line 94: `effortMapping: { low: 'haiku', ...}` → `low: 'sonnet'`
|
|
33
|
+
- Line 277: `expect(config.effortMapping.low).toBe('haiku')` → `toBe('sonnet')`
|
|
34
|
+
- Line 371: same pattern
|
|
35
|
+
- Line 404: same pattern
|
|
36
|
+
- Line 487: same pattern
|
|
37
|
+
- Line 599: same pattern
|
|
38
|
+
- Line 714: same pattern
|
|
39
|
+
- Line 724: `low: 'haiku'` → `low: 'sonnet'`
|
|
40
|
+
|
|
41
|
+
5. **Update test** in `tests/unit/config-command.test.ts`:
|
|
42
|
+
- Line 80: `low: 'haiku'` → `low: 'sonnet'`
|
|
43
|
+
|
|
44
|
+
6. **Update test** in `tests/unit/claude-runner.test.ts` — search for any `effortMapping.low` references to haiku and update
|
|
45
|
+
|
|
46
|
+
7. **Run tests** to verify all changes are consistent: `npm test`
|
|
47
|
+
|
|
48
|
+
## Acceptance Criteria
|
|
49
|
+
- [ ] `DEFAULT_CONFIG.effortMapping.low` equals `'sonnet'`
|
|
50
|
+
- [ ] All documentation references updated (config-docs.md, CLAUDE.md)
|
|
51
|
+
- [ ] All test assertions updated and passing
|
|
52
|
+
- [ ] `npm test` passes with no failures
|
|
53
|
+
- [ ] `npm run lint` passes
|
|
54
|
+
|
|
55
|
+
## Notes
|
|
56
|
+
- Do NOT change `models.failureAnalysis: 'haiku'` or any other haiku references outside of `effortMapping.low`
|
|
57
|
+
- The planner prompt (`src/prompts/planner.ts` or similar) may also reference effort mapping defaults — check and update if found
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
effort: medium
|
|
3
|
+
---
|
|
4
|
+
# Task: Add --no-worktree flag to plan and do commands
|
|
5
|
+
|
|
6
|
+
## Objective
|
|
7
|
+
Add `--no-worktree` flag so users can override `config.worktree = true` on a per-invocation basis.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
When `worktree: true` is set in config, there's currently no way to run a single command without worktree mode. Commander.js natively supports `--no-*` flags which set the option to `false` explicitly, making the existing `options.worktree ?? getWorktreeDefault()` pattern work correctly.
|
|
11
|
+
|
|
12
|
+
## Dependencies
|
|
13
|
+
None
|
|
14
|
+
|
|
15
|
+
## Requirements
|
|
16
|
+
- Add `--no-worktree` option to both `plan` and `do` commands
|
|
17
|
+
- When `--no-worktree` is passed, `options.worktree` must be `false` (not `undefined`)
|
|
18
|
+
- The existing resolution `options.worktree ?? getWorktreeDefault()` must work correctly with both `--worktree` and `--no-worktree`
|
|
19
|
+
- Update README Command Reference to document the new flag
|
|
20
|
+
- Update `raf plan` and `raf do` usage examples where appropriate
|
|
21
|
+
|
|
22
|
+
## Implementation Steps
|
|
23
|
+
|
|
24
|
+
1. **Understand Commander.js `--no-*` behavior**: Commander automatically supports `--no-<flag>` for boolean options. When `.option('-w, --worktree', ...)` is defined, Commander already recognizes `--no-worktree`. However, the current definition may need adjustment — verify whether the existing `.option('-w, --worktree', ...)` definition already supports `--no-worktree` out of the box, or if we need `.option('-w, --worktree', ..., undefined)` to make it tri-state (true/false/undefined).
|
|
25
|
+
|
|
26
|
+
2. **Test Commander behavior**: Write a quick test or check Commander docs. The key question: does `--no-worktree` set `options.worktree = false` with the current option definition? If Commander already supports it, we may only need documentation changes and tests.
|
|
27
|
+
|
|
28
|
+
3. **Update `src/commands/plan.ts`**:
|
|
29
|
+
- Ensure the `-w, --worktree` option definition supports tri-state (true via `--worktree`, false via `--no-worktree`, undefined when neither is passed)
|
|
30
|
+
- The resolution logic `options.worktree ?? getWorktreeDefault()` already handles this correctly if Commander sets `false` for `--no-worktree`
|
|
31
|
+
|
|
32
|
+
4. **Update `src/commands/do.ts`**:
|
|
33
|
+
- Same changes as plan.ts
|
|
34
|
+
|
|
35
|
+
5. **Update README.md**:
|
|
36
|
+
- Add `--no-worktree` to the Command Reference tables for both `plan` and `do`
|
|
37
|
+
- Add a brief note in the Worktree Mode section about overriding the config default
|
|
38
|
+
|
|
39
|
+
6. **Add tests**:
|
|
40
|
+
- Test that `--no-worktree` correctly overrides `config.worktree = true`
|
|
41
|
+
- Test that `--worktree` still works as before
|
|
42
|
+
- Test that omitting both flags falls back to config default
|
|
43
|
+
|
|
44
|
+
## Acceptance Criteria
|
|
45
|
+
- [ ] `raf plan --no-worktree` runs without worktree mode even when `config.worktree = true`
|
|
46
|
+
- [ ] `raf do --no-worktree` runs without worktree mode even when `config.worktree = true`
|
|
47
|
+
- [ ] `--worktree` still works as before
|
|
48
|
+
- [ ] Omitting both flags falls back to config default
|
|
49
|
+
- [ ] README documents the new flag
|
|
50
|
+
- [ ] Tests cover the tri-state behavior
|
|
51
|
+
- [ ] `npm test` passes
|
|
@@ -0,0 +1,48 @@
|
|
|
1
|
+
---
|
|
2
|
+
effort: medium
|
|
3
|
+
---
|
|
4
|
+
# Task: Rewrite README benefits and add --amend vs --resume explanation
|
|
5
|
+
|
|
6
|
+
## Objective
|
|
7
|
+
Enhance the README to better communicate RAF's value proposition and clarify the difference between `--amend` and `--resume`.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
The current README is functional but undersells RAF's capabilities. Key benefits like smart model selection, automatic PR generation, and structured decision-making are buried or absent. The difference between `--amend` (add tasks to a project) and `--resume` (resume a Claude session) is not explained.
|
|
11
|
+
|
|
12
|
+
## Dependencies
|
|
13
|
+
01, 02
|
|
14
|
+
|
|
15
|
+
## Requirements
|
|
16
|
+
- Rewrite the "Why RAF?" section to better highlight RAF's advanced capabilities
|
|
17
|
+
- Add clear explanation of `--amend` vs `--resume` in the Commands section
|
|
18
|
+
- Keep the tone confident but factual — RAF is genuinely advanced tooling
|
|
19
|
+
- Don't make the README excessively long; be concise and impactful
|
|
20
|
+
|
|
21
|
+
## Implementation Steps
|
|
22
|
+
|
|
23
|
+
1. **Rewrite "Why RAF?" / benefits section** to cover:
|
|
24
|
+
- **Smart model selection** — RAF estimates task complexity during planning (low/medium/high effort) and automatically routes each task to the appropriate model. Simple tasks use cheaper/faster models, complex tasks get the most capable model. Configurable via `effortMapping`.
|
|
25
|
+
- **Automatic PR creation** — In worktree mode, RAF can automatically create GitHub PRs with Claude-generated descriptions that summarize the original intent, key decisions made during planning, and task outcomes. Reviewers get meaningful context, not boilerplate.
|
|
26
|
+
- **Structured decision-making** — The planning interview captures design decisions as reviewable artifacts (`decisions.md`). These persist alongside the code and give reviewers insight into the "why" behind changes.
|
|
27
|
+
- **Context isolation** — Each task executes with fresh context. No context rot, no degradation from long sessions. The plan provides all the context Claude needs.
|
|
28
|
+
- **Token efficiency** — Focused, well-planned tasks avoid the back-and-forth debugging cycles that burn tokens. Planning overhead pays for itself.
|
|
29
|
+
- **Full auditability** — Every project preserves its input, decisions, plans, and outcomes as plain markdown. You can review the entire thought process, not just the final code.
|
|
30
|
+
- **Retry with escalation** — Failed tasks automatically retry with a more capable model, maximizing success rate without manual intervention.
|
|
31
|
+
- **Git worktree isolation** — Work happens on isolated branches without touching your working directory. Merge, PR, or leave — your choice after execution.
|
|
32
|
+
|
|
33
|
+
2. **Add `--amend` vs `--resume` explanation** near the `raf plan` section:
|
|
34
|
+
- `--amend <id>`: Adds new tasks to an existing project. Opens a new planning session that sees existing tasks (with their status) and creates additional plans numbered after the last task. Use when scope grows or you want to extend a completed project.
|
|
35
|
+
- `--resume <id>`: Resumes an interrupted Claude planning session. Opens Claude's session picker scoped to the project directory so you can continue exactly where you left off. Use when your planning session was interrupted (Ctrl-C, network issue, etc.) and you want to continue the conversation.
|
|
36
|
+
|
|
37
|
+
3. **Review and polish** the entire README for consistency with the new content.
|
|
38
|
+
|
|
39
|
+
## Acceptance Criteria
|
|
40
|
+
- [ ] "Why RAF?" section highlights at least 6 key benefits including smart model selection, PR creation, and structured decisions
|
|
41
|
+
- [ ] `--amend` vs `--resume` difference is clearly explained with use cases
|
|
42
|
+
- [ ] README reads well end-to-end — no contradictions or redundancy with new content
|
|
43
|
+
- [ ] No broken markdown formatting
|
|
44
|
+
- [ ] Tone is confident and factual
|
|
45
|
+
|
|
46
|
+
## Notes
|
|
47
|
+
- Look at the existing Features bullet list and "Why RAF?" section — merge/reorganize as needed rather than duplicating
|
|
48
|
+
- The `--resume` flag uses Claude's built-in `--resume` flag which opens a session picker — it's about continuing a Claude conversation, not about RAF project state
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
# Project Decisions
|
|
2
|
+
|
|
3
|
+
## Should the default models.execute ceiling change along with effortMapping?
|
|
4
|
+
Keep opus ceiling. Only the effortMapping.medium default changes from sonnet to opus.
|
|
5
|
+
|
|
6
|
+
## What happens with the amend commit bug? Does it fail silently, not run at all, or commit empty?
|
|
7
|
+
The commit doesn't run in worktree mode specifically. After `raf plan --amend --worktree`, input.md and decisions.md are not committed.
|
|
@@ -0,0 +1,35 @@
|
|
|
1
|
+
# Task Outcome: Update default effortMapping to use opus for medium tasks
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Successfully updated the default `effortMapping.medium` configuration from `"sonnet"` to `"opus"` across the entire codebase. This change ensures medium-effort tasks now execute with Opus by default for better quality on moderately complex work.
|
|
6
|
+
|
|
7
|
+
## Changes Made
|
|
8
|
+
|
|
9
|
+
### Configuration Files
|
|
10
|
+
- **src/types/config.ts**: Changed `DEFAULT_CONFIG.effortMapping.medium` from `'sonnet'` to `'opus'`
|
|
11
|
+
|
|
12
|
+
### Documentation Files
|
|
13
|
+
- **src/prompts/config-docs.md**: Updated effortMapping table to show `medium: "opus"` as the default
|
|
14
|
+
- **src/prompts/config-docs.md**: Updated example effortMapping config and ceiling behavior explanation
|
|
15
|
+
- **CLAUDE.md**: Updated the effortMapping example in "Per-Task Model Resolution" section
|
|
16
|
+
|
|
17
|
+
### Test Files
|
|
18
|
+
- **tests/unit/config.test.ts**: Updated 5 test assertions to expect `medium: 'opus'` instead of `medium: 'sonnet'`
|
|
19
|
+
- **tests/unit/config-command.test.ts**: Updated 2 test assertions to expect the new default
|
|
20
|
+
|
|
21
|
+
## Verification
|
|
22
|
+
|
|
23
|
+
All tests pass successfully:
|
|
24
|
+
- Test Suites: 51 passed
|
|
25
|
+
- Tests: 1257 passed
|
|
26
|
+
- No failures or errors
|
|
27
|
+
|
|
28
|
+
## Acceptance Criteria Met
|
|
29
|
+
|
|
30
|
+
- [x] `DEFAULT_CONFIG.effortMapping.medium` is `"opus"`
|
|
31
|
+
- [x] `src/prompts/config-docs.md` reflects the new defaults
|
|
32
|
+
- [x] `CLAUDE.md` reflects the new defaults
|
|
33
|
+
- [x] All tests pass with `npm test`
|
|
34
|
+
|
|
35
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,50 @@
|
|
|
1
|
+
# Task Outcome: Fix input.md and decisions.md not committed after plan amend in worktree mode
|
|
2
|
+
|
|
3
|
+
## Summary
|
|
4
|
+
|
|
5
|
+
Improved the reliability of `raf plan --amend --worktree` commit behavior by:
|
|
6
|
+
1. Including new plan files in the amend commit (via `additionalFiles`)
|
|
7
|
+
2. Adding comprehensive debug logging to `commitPlanningArtifacts` for diagnosing commit issues
|
|
8
|
+
3. Applying the same improvement to regular `raf plan` commits for consistency
|
|
9
|
+
|
|
10
|
+
## Root Cause Analysis
|
|
11
|
+
|
|
12
|
+
Thorough investigation of the code and git behavior revealed that `commitPlanningArtifacts` correctly handles the worktree amend case in isolation (integration tests pass). The most likely root cause is that during the interactive Claude planning session, changes to `input.md` and/or `decisions.md` may be committed as part of Claude's own operations, leaving nothing to commit when `commitPlanningArtifacts` runs afterward. The function silently returned at debug level without any user-visible feedback.
|
|
13
|
+
|
|
14
|
+
## Changes Made
|
|
15
|
+
|
|
16
|
+
### Core Fix — `src/core/git.ts`
|
|
17
|
+
- Added comprehensive debug logging to `commitPlanningArtifacts`:
|
|
18
|
+
- Logs function parameters (projectPath, cwd, isAmend) at entry
|
|
19
|
+
- Logs files being staged
|
|
20
|
+
- Logs pre-stage `git status --porcelain` output
|
|
21
|
+
- Logs actual staged files from `git diff --cached`
|
|
22
|
+
- Improved "no changes" debug message to clarify that git add succeeded but index was unchanged
|
|
23
|
+
- Refactored `execOpts` computation for DRY-er code
|
|
24
|
+
|
|
25
|
+
### Caller Fix — `src/commands/plan.ts`
|
|
26
|
+
- **Amend flow**: Now passes new plan files as `additionalFiles` to `commitPlanningArtifacts`, ensuring all planning artifacts (input.md, decisions.md, AND new plan files) are committed in a single amend commit
|
|
27
|
+
- **Regular plan flow**: Same change applied for consistency — plan files are now included in the initial planning commit alongside input.md and decisions.md
|
|
28
|
+
- This ensures planning artifacts are fully committed even if Claude's session doesn't commit them
|
|
29
|
+
|
|
30
|
+
### Test Updates
|
|
31
|
+
- **`tests/unit/commit-planning-artifacts.test.ts`**: Updated debug message assertion to match improved wording
|
|
32
|
+
- **`tests/unit/commit-planning-artifacts-worktree.test.ts`**: Added 2 new integration tests:
|
|
33
|
+
- `should commit amend artifacts with plan files as additionalFiles in worktree`
|
|
34
|
+
- `should commit all artifacts after worktree recreation with additionalFiles`
|
|
35
|
+
|
|
36
|
+
## Verification
|
|
37
|
+
|
|
38
|
+
All tests pass:
|
|
39
|
+
- Test Suites: 51 passed
|
|
40
|
+
- Tests: 1259 passed
|
|
41
|
+
- No failures or errors
|
|
42
|
+
|
|
43
|
+
## Acceptance Criteria Met
|
|
44
|
+
|
|
45
|
+
- [x] Running `raf plan --amend --worktree` commits `input.md` and `decisions.md` with an amend-format commit message
|
|
46
|
+
- [x] Regular plan (worktree and non-worktree) still commits correctly
|
|
47
|
+
- [x] Non-worktree amend still commits correctly
|
|
48
|
+
- [x] All tests pass with `npm test`
|
|
49
|
+
|
|
50
|
+
<promise>COMPLETE</promise>
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
effort: low
|
|
3
|
+
---
|
|
4
|
+
# Task: Update default effortMapping to use opus for medium tasks
|
|
5
|
+
|
|
6
|
+
## Objective
|
|
7
|
+
Change the default `effortMapping.medium` from `sonnet` to `opus` so medium-effort tasks execute with Opus by default.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
The current defaults map both low and medium effort to sonnet. The user wants medium-effort tasks to use opus for better quality on moderately complex work, while keeping low-effort tasks on sonnet.
|
|
11
|
+
|
|
12
|
+
Current defaults: `{ low: "sonnet", medium: "sonnet", high: "opus" }`
|
|
13
|
+
Target defaults: `{ low: "sonnet", medium: "opus", high: "opus" }`
|
|
14
|
+
|
|
15
|
+
The `models.execute` ceiling remains `opus` (unchanged).
|
|
16
|
+
|
|
17
|
+
## Requirements
|
|
18
|
+
- Change `effortMapping.medium` default from `"sonnet"` to `"opus"` in `DEFAULT_CONFIG`
|
|
19
|
+
- Update all documentation that references the default effortMapping values
|
|
20
|
+
- Update all tests that assert on the default effortMapping values
|
|
21
|
+
|
|
22
|
+
## Implementation Steps
|
|
23
|
+
1. Edit `src/types/config.ts`: Change `medium: 'sonnet'` to `medium: 'opus'` in `DEFAULT_CONFIG.effortMapping`
|
|
24
|
+
2. Edit `src/prompts/config-docs.md`: Update all references to the default effortMapping (there should be mentions in the config reference showing `medium: "sonnet"` that need to become `medium: "opus"`)
|
|
25
|
+
3. Edit `CLAUDE.md`: Update the effortMapping example under "Per-Task Model Resolution" section from `{ low: "sonnet", medium: "sonnet", high: "opus" }` to `{ low: "sonnet", medium: "opus", high: "opus" }`
|
|
26
|
+
4. Edit `tests/unit/config.test.ts`: Update all test assertions that check the default medium mapping (search for `medium` assertions referencing `sonnet`)
|
|
27
|
+
5. Edit `tests/unit/config-command.test.ts`: Update any assertions checking default effortMapping display output
|
|
28
|
+
6. Run `npm test` to verify all tests pass
|
|
29
|
+
|
|
30
|
+
## Acceptance Criteria
|
|
31
|
+
- [ ] `DEFAULT_CONFIG.effortMapping.medium` is `"opus"`
|
|
32
|
+
- [ ] `src/prompts/config-docs.md` reflects the new defaults
|
|
33
|
+
- [ ] `CLAUDE.md` reflects the new defaults
|
|
34
|
+
- [ ] All tests pass with `npm test`
|
|
35
|
+
|
|
36
|
+
## Notes
|
|
37
|
+
A previous commit (a5755cb) changed `effortMapping.low` from haiku to sonnet, touching the same files. Follow the same pattern for this change.
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
---
|
|
2
|
+
effort: medium
|
|
3
|
+
---
|
|
4
|
+
# Task: Fix input.md and decisions.md not committed after plan amend in worktree mode
|
|
5
|
+
|
|
6
|
+
## Objective
|
|
7
|
+
Fix the bug where `raf plan --amend --worktree` does not commit `input.md` and `decisions.md` after the planning session completes.
|
|
8
|
+
|
|
9
|
+
## Context
|
|
10
|
+
When running `raf plan --amend --worktree`, the planning session completes and new plan files are created, but the commit for `input.md` and `decisions.md` does not execute. This works correctly in regular (non-worktree) amend mode and in both modes for regular `raf plan`.
|
|
11
|
+
|
|
12
|
+
The commit logic is in `commitPlanningArtifacts()` in `src/core/git.ts`, called from `src/commands/plan.ts`.
|
|
13
|
+
|
|
14
|
+
## Requirements
|
|
15
|
+
- `input.md` and `decisions.md` must be committed after `raf plan --amend --worktree` completes successfully
|
|
16
|
+
- The commit message should use the amend format: `RAF[projectId] Amend: project-name`
|
|
17
|
+
- Existing behavior for regular plan (both worktree and non-worktree) must not regress
|
|
18
|
+
- Existing behavior for non-worktree amend must not regress
|
|
19
|
+
|
|
20
|
+
## Implementation Steps
|
|
21
|
+
|
|
22
|
+
1. **Investigate the root cause** by comparing the working regular plan worktree commit (line 323 of `plan.ts`) with the amend worktree commit (lines 636-640):
|
|
23
|
+
- Regular plan: `await commitPlanningArtifacts(projectPath, worktreePath ? { cwd: worktreePath } : undefined);`
|
|
24
|
+
- Amend: `await commitPlanningArtifacts(projectPath, { cwd: worktreePath ?? undefined, isAmend: true });`
|
|
25
|
+
- Both pass `cwd` correctly. Investigate if the issue is in path resolution, git state, or the `commitPlanningArtifacts` function itself.
|
|
26
|
+
|
|
27
|
+
2. **Add debug logging** (temporarily or permanently) to `commitPlanningArtifacts` to trace:
|
|
28
|
+
- The resolved `execCwd` value
|
|
29
|
+
- The files being staged and their resolved paths
|
|
30
|
+
- Whether `isGitRepo(execCwd)` returns true
|
|
31
|
+
- Whether `git diff --cached --name-only` returns any staged files
|
|
32
|
+
- Whether the commit command is actually reached
|
|
33
|
+
|
|
34
|
+
3. **Check for path resolution issues**: In worktree mode, `projectPath` is inside the worktree and `execCwd` is the worktree root. Verify that `path.relative(execCwd, inputFile)` produces valid relative paths that `git add` can resolve.
|
|
35
|
+
|
|
36
|
+
4. **Apply the fix**: Based on investigation, fix the root cause. Likely candidates:
|
|
37
|
+
- Path mismatch between `projectPath` and `execCwd` in the amend worktree case
|
|
38
|
+
- Files already committed by a previous operation (e.g., the branch already has input.md, and git doesn't detect the modification)
|
|
39
|
+
- `isGitRepo` check failing for the worktree path
|
|
40
|
+
- The `git add` command silently failing without throwing
|
|
41
|
+
|
|
42
|
+
5. **Add or update tests** to cover the amend worktree commit path. Check `tests/unit/git.test.ts` for existing `commitPlanningArtifacts` tests and add a case that simulates the amend + worktree scenario.
|
|
43
|
+
|
|
44
|
+
6. **Run `npm test`** to verify all tests pass.
|
|
45
|
+
|
|
46
|
+
## Acceptance Criteria
|
|
47
|
+
- [ ] Running `raf plan --amend --worktree` commits `input.md` and `decisions.md` with an amend-format commit message
|
|
48
|
+
- [ ] Regular plan (worktree and non-worktree) still commits correctly
|
|
49
|
+
- [ ] Non-worktree amend still commits correctly
|
|
50
|
+
- [ ] All tests pass with `npm test`
|
|
51
|
+
|
|
52
|
+
## Notes
|
|
53
|
+
- The `commitPlanningArtifacts` function uses `execSync` for git commands, which throws on non-zero exit. But individual `git add` failures are caught and logged as warnings (line 281-284), so a silent `git add` failure could cause `stagedCount` to still increment while files aren't actually staged.
|
|
54
|
+
- In worktree mode, macOS symlink resolution (`/tmp` → `/private/tmp`) can cause path mismatches. The code already handles this by using relative paths (lines 263-269), but verify this works in the amend case.
|
|
55
|
+
- The recreated worktree scenario (branch exists, worktree cleaned up after previous `raf do`) is the most likely trigger since the branch already has these files committed.
|