learnship 1.9.24 → 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-plugin/plugin.json +2 -2
- package/.cursor-plugin/plugin.json +2 -2
- package/README.md +74 -20
- package/SKILL.md +17 -0
- package/agents/learnship-challenger.md +96 -0
- package/agents/learnship-code-reviewer.md +109 -0
- package/agents/learnship-executor.md +15 -0
- package/agents/learnship-ideation-agent.md +83 -0
- package/agents/learnship-solution-writer.md +140 -0
- package/bin/install.js +4 -0
- package/commands/learnship/challenge.md +22 -0
- package/commands/learnship/compound.md +22 -0
- package/commands/learnship/guard.md +21 -0
- package/commands/learnship/ideate.md +23 -0
- package/commands/learnship/review.md +23 -0
- package/commands/learnship/ship.md +21 -0
- package/commands/learnship/sync-docs.md +21 -0
- package/cursor-rules/learnship.mdc +7 -0
- package/gemini-extension.json +2 -2
- package/learnship/agents/challenger.md +52 -0
- package/learnship/agents/code-reviewer.md +81 -0
- package/learnship/agents/executor.md +15 -0
- package/learnship/agents/ideation-agent.md +54 -0
- package/learnship/agents/plan-checker.md +95 -0
- package/learnship/agents/solution-writer.md +64 -0
- package/learnship/references/model-profiles.md +41 -33
- package/learnship/references/planning-config.md +49 -0
- package/learnship/references/solution-schema.md +159 -0
- package/learnship/templates/agents.md +6 -1
- package/learnship/workflows/challenge.md +189 -0
- package/learnship/workflows/complete-milestone.md +9 -0
- package/learnship/workflows/compound.md +305 -0
- package/learnship/workflows/debug.md +7 -0
- package/learnship/workflows/discuss-milestone.md +5 -0
- package/learnship/workflows/execute-phase.md +24 -0
- package/learnship/workflows/guard.md +164 -0
- package/learnship/workflows/help.md +14 -2
- package/learnship/workflows/ideate.md +182 -0
- package/learnship/workflows/knowledge-base.md +8 -0
- package/learnship/workflows/ls.md +7 -3
- package/learnship/workflows/milestone-retrospective.md +45 -0
- package/learnship/workflows/next.md +3 -2
- package/learnship/workflows/plan-phase.md +23 -0
- package/learnship/workflows/progress.md +9 -3
- package/learnship/workflows/review.md +226 -0
- package/learnship/workflows/set-profile.md +6 -6
- package/learnship/workflows/settings.md +8 -8
- package/learnship/workflows/ship.md +219 -0
- package/learnship/workflows/sync-docs.md +159 -0
- package/learnship/workflows/validate-phase.md +4 -4
- package/learnship/workflows/verify-work.md +3 -0
- package/package.json +1 -1
- package/references/model-profiles.md +41 -33
- package/templates/config.json +13 -1
|
@@ -0,0 +1,219 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Ship pipeline — test, lint, commit, push, PR
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Ship
|
|
6
|
+
|
|
7
|
+
End-to-end ship pipeline: detect test runner → run tests → lint → stage → conventional commit → push → create PR with auto-description. Closes the loop from verified code to production-ready PR.
|
|
8
|
+
|
|
9
|
+
**Usage:** `ship` — run the full ship pipeline
|
|
10
|
+
**Usage:** `ship --skip-tests` — skip test execution (use when tests were just run)
|
|
11
|
+
|
|
12
|
+
**Sequencing:** Run after `/review` (code quality) and before `/compound` (capture learnings).
|
|
13
|
+
|
|
14
|
+
## Step 1: Pre-flight Check
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# Current branch
|
|
18
|
+
BRANCH=$(git rev-parse --abbrev-ref HEAD)
|
|
19
|
+
echo "Branch: $BRANCH"
|
|
20
|
+
|
|
21
|
+
# Check we're not on main/master
|
|
22
|
+
if [ "$BRANCH" = "main" ] || [ "$BRANCH" = "master" ]; then
|
|
23
|
+
echo "ERROR: Cannot ship from $BRANCH. Create a feature branch first."
|
|
24
|
+
exit 1
|
|
25
|
+
fi
|
|
26
|
+
|
|
27
|
+
# Check for uncommitted changes
|
|
28
|
+
git status --porcelain
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
If uncommitted changes exist, ask: "You have uncommitted changes. Stage and commit them as part of the ship, or stash first?"
|
|
32
|
+
|
|
33
|
+
## Step 2: Run Tests
|
|
34
|
+
|
|
35
|
+
**Skip if:** `--skip-tests` flag, or `ship.auto_test` is `false` in config.
|
|
36
|
+
|
|
37
|
+
Detect the test runner:
|
|
38
|
+
|
|
39
|
+
```bash
|
|
40
|
+
# Check for common test runners
|
|
41
|
+
[ -f "package.json" ] && grep -q '"test"' package.json && echo "npm test"
|
|
42
|
+
[ -f "Makefile" ] && grep -q '^test:' Makefile && echo "make test"
|
|
43
|
+
[ -f "pytest.ini" ] || [ -f "setup.cfg" ] && echo "pytest"
|
|
44
|
+
[ -f "Cargo.toml" ] && echo "cargo test"
|
|
45
|
+
[ -f "go.mod" ] && echo "go test ./..."
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
Run the detected test command:
|
|
49
|
+
|
|
50
|
+
```bash
|
|
51
|
+
[detected test command]
|
|
52
|
+
```
|
|
53
|
+
|
|
54
|
+
If tests fail:
|
|
55
|
+
```
|
|
56
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
57
|
+
learnship ► TESTS FAILED — SHIP ABORTED
|
|
58
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
59
|
+
|
|
60
|
+
[test output]
|
|
61
|
+
|
|
62
|
+
Fix the failing tests, then run /ship again.
|
|
63
|
+
▶ Or: /debug [test failure description]
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Stop. Do not proceed with a failing test suite.
|
|
67
|
+
|
|
68
|
+
## Step 3: Lint (Optional)
|
|
69
|
+
|
|
70
|
+
Detect and run the linter if available:
|
|
71
|
+
|
|
72
|
+
```bash
|
|
73
|
+
[ -f "package.json" ] && grep -q '"lint"' package.json && echo "npm run lint"
|
|
74
|
+
[ -f ".eslintrc" ] || [ -f ".eslintrc.json" ] || [ -f ".eslintrc.js" ] && echo "npx eslint ."
|
|
75
|
+
[ -f "pyproject.toml" ] && grep -q "ruff" pyproject.toml && echo "ruff check ."
|
|
76
|
+
[ -f ".rubocop.yml" ] && echo "rubocop"
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
If linter found, run it. Report warnings but don't block on them. Block on errors.
|
|
80
|
+
|
|
81
|
+
## Step 4: Stage Changes
|
|
82
|
+
|
|
83
|
+
```bash
|
|
84
|
+
# Show what will be committed
|
|
85
|
+
git diff --stat
|
|
86
|
+
|
|
87
|
+
# Stage all tracked changes
|
|
88
|
+
git add -u
|
|
89
|
+
|
|
90
|
+
# Check for untracked files that should be included
|
|
91
|
+
UNTRACKED=$(git ls-files --others --exclude-standard)
|
|
92
|
+
if [ -n "$UNTRACKED" ]; then
|
|
93
|
+
echo "Untracked files found:"
|
|
94
|
+
echo "$UNTRACKED"
|
|
95
|
+
fi
|
|
96
|
+
```
|
|
97
|
+
|
|
98
|
+
If untracked files exist, ask: "These files are new and untracked. Include them in the commit?"
|
|
99
|
+
- **Yes, include all** → `git add .`
|
|
100
|
+
- **Let me choose** → present list, user selects
|
|
101
|
+
- **No, skip them** → proceed with tracked only
|
|
102
|
+
|
|
103
|
+
## Step 5: Conventional Commit
|
|
104
|
+
|
|
105
|
+
**If `ship.conventional_commits` is `true` in config (default: `true`):**
|
|
106
|
+
|
|
107
|
+
Analyze the staged changes to determine the commit type:
|
|
108
|
+
|
|
109
|
+
| Type | When |
|
|
110
|
+
|------|------|
|
|
111
|
+
| `feat` | New feature or capability |
|
|
112
|
+
| `fix` | Bug fix |
|
|
113
|
+
| `docs` | Documentation only |
|
|
114
|
+
| `style` | Formatting, no logic change |
|
|
115
|
+
| `refactor` | Code restructuring, no behavior change |
|
|
116
|
+
| `test` | Adding or updating tests |
|
|
117
|
+
| `chore` | Build, config, tooling |
|
|
118
|
+
|
|
119
|
+
Generate the commit message:
|
|
120
|
+
```
|
|
121
|
+
[type]([scope]): [short description]
|
|
122
|
+
|
|
123
|
+
[optional body — what changed and why, max 3 lines]
|
|
124
|
+
```
|
|
125
|
+
|
|
126
|
+
Present the proposed commit message. Ask: "Use this commit message, or edit?"
|
|
127
|
+
|
|
128
|
+
```bash
|
|
129
|
+
git commit -m "[commit message]"
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
## Step 6: Push
|
|
133
|
+
|
|
134
|
+
```bash
|
|
135
|
+
git push origin $BRANCH
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
If this is the first push for the branch:
|
|
139
|
+
```bash
|
|
140
|
+
git push -u origin $BRANCH
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
## Step 7: Create PR
|
|
144
|
+
|
|
145
|
+
**If `ship.pr_template` is `true` in config (default: `true`):**
|
|
146
|
+
|
|
147
|
+
Auto-generate the PR description from:
|
|
148
|
+
- Commit messages on the branch
|
|
149
|
+
- SUMMARY.md files from the current phase (if exists)
|
|
150
|
+
- Test results from Step 2
|
|
151
|
+
|
|
152
|
+
```bash
|
|
153
|
+
# Get base branch
|
|
154
|
+
BASE_BRANCH=$(git symbolic-ref refs/remotes/origin/HEAD 2>/dev/null | sed 's|refs/remotes/origin/||')
|
|
155
|
+
[ -z "$BASE_BRANCH" ] && BASE_BRANCH="main"
|
|
156
|
+
|
|
157
|
+
# Get commit log for PR body
|
|
158
|
+
COMMITS=$(git log --oneline origin/$BASE_BRANCH..HEAD)
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Create the PR using available tooling:
|
|
162
|
+
|
|
163
|
+
```bash
|
|
164
|
+
# GitHub CLI
|
|
165
|
+
gh pr create --base "$BASE_BRANCH" --head "$BRANCH" --title "[type]([scope]): [description]" --body "[auto-generated description]"
|
|
166
|
+
|
|
167
|
+
# Or if gh not available, output the PR URL
|
|
168
|
+
echo "Create PR: https://github.com/[org]/[repo]/compare/$BASE_BRANCH...$BRANCH"
|
|
169
|
+
```
|
|
170
|
+
|
|
171
|
+
## Step 8: Confirm
|
|
172
|
+
|
|
173
|
+
```
|
|
174
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
175
|
+
learnship ► SHIPPED ✓
|
|
176
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
177
|
+
|
|
178
|
+
Branch: [branch]
|
|
179
|
+
Tests: passed ✓
|
|
180
|
+
Lint: passed ✓ | skipped
|
|
181
|
+
Commit: [hash] [type]([scope]): [description]
|
|
182
|
+
PR: [URL]
|
|
183
|
+
|
|
184
|
+
💡 Compound this work? Run `/compound` to capture any notable solutions
|
|
185
|
+
or patterns while context is fresh.
|
|
186
|
+
|
|
187
|
+
▶ Next steps:
|
|
188
|
+
- Review the PR and request reviews
|
|
189
|
+
- /compound — capture learnings from this work
|
|
190
|
+
```
|
|
191
|
+
|
|
192
|
+
---
|
|
193
|
+
|
|
194
|
+
## Config Options
|
|
195
|
+
|
|
196
|
+
- `"ship.auto_test": true` — run tests before shipping
|
|
197
|
+
- `"ship.conventional_commits": true` — use conventional commit format
|
|
198
|
+
- `"ship.pr_template": true` — auto-generate PR description
|
|
199
|
+
|
|
200
|
+
---
|
|
201
|
+
|
|
202
|
+
## Integration Points
|
|
203
|
+
|
|
204
|
+
- `verify-work` banner: "▶ Next: /ship" after UAT passes
|
|
205
|
+
- `complete-milestone`: "Did you /ship first?" if unshipped changes exist
|
|
206
|
+
|
|
207
|
+
---
|
|
208
|
+
|
|
209
|
+
## Learning Checkpoint
|
|
210
|
+
|
|
211
|
+
Read `learning_mode` from `.planning/config.json`.
|
|
212
|
+
|
|
213
|
+
**If `auto`:** After shipping, offer:
|
|
214
|
+
|
|
215
|
+
> 💡 **Learning moment:** Shipping is a natural reflection point:
|
|
216
|
+
>
|
|
217
|
+
> `@agentic-learning reflect` — What went well in this phase? What would you do differently? Reflection after shipping cements the lessons before context fades.
|
|
218
|
+
|
|
219
|
+
**If `manual`:** Add quietly: *"Tip: `@agentic-learning reflect` to consolidate lessons from this shipping cycle."*
|
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Detect stale documentation after code changes
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Sync Docs
|
|
6
|
+
|
|
7
|
+
Scan documentation against recent code changes to detect stale sections, outdated references, and drift between docs and implementation. Auto-update simple cases, flag complex ones for manual review.
|
|
8
|
+
|
|
9
|
+
**Usage:** `sync-docs` — scan all docs for staleness
|
|
10
|
+
**Usage:** `sync-docs [path]` — scan docs for a specific module or directory
|
|
11
|
+
|
|
12
|
+
## Step 1: Discover Documentation
|
|
13
|
+
|
|
14
|
+
Find all documentation files in the project:
|
|
15
|
+
|
|
16
|
+
```bash
|
|
17
|
+
# README and top-level docs
|
|
18
|
+
find . -maxdepth 1 -name "*.md" -type f 2>/dev/null
|
|
19
|
+
|
|
20
|
+
# Docs directory
|
|
21
|
+
find docs/ -name "*.md" -type f 2>/dev/null
|
|
22
|
+
|
|
23
|
+
# API docs, guides, etc.
|
|
24
|
+
find . -path "*/docs/*" -name "*.md" -type f 2>/dev/null | head -30
|
|
25
|
+
|
|
26
|
+
# Planning docs
|
|
27
|
+
find .planning/ -name "*.md" -type f 2>/dev/null | grep -v "phases\|debug\|milestones" | head -20
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
If a path argument was provided, narrow the scan to docs related to that module.
|
|
31
|
+
|
|
32
|
+
## Step 2: Identify Recent Changes
|
|
33
|
+
|
|
34
|
+
```bash
|
|
35
|
+
# Get files changed in last 30 commits
|
|
36
|
+
git log --oneline -30 --format="" --name-only | sort -u
|
|
37
|
+
|
|
38
|
+
# Get files changed since last tag/release
|
|
39
|
+
LAST_TAG=$(git describe --tags --abbrev=0 2>/dev/null)
|
|
40
|
+
if [ -n "$LAST_TAG" ]; then
|
|
41
|
+
git diff --name-only "$LAST_TAG"..HEAD
|
|
42
|
+
fi
|
|
43
|
+
```
|
|
44
|
+
|
|
45
|
+
Map changed source files to their documentation:
|
|
46
|
+
- `src/auth/` changes → check docs mentioning auth, authentication, login
|
|
47
|
+
- API route changes → check API documentation
|
|
48
|
+
- Config changes → check setup/installation docs
|
|
49
|
+
- Schema changes → check data model docs
|
|
50
|
+
|
|
51
|
+
## Step 3: Scan for Staleness
|
|
52
|
+
|
|
53
|
+
For each documentation file, check:
|
|
54
|
+
|
|
55
|
+
1. **Dead references** — does the doc reference files, functions, or APIs that no longer exist?
|
|
56
|
+
```bash
|
|
57
|
+
# Extract code references from doc (backtick-wrapped paths, function names)
|
|
58
|
+
grep -oE '`[^`]+\.(ts|js|py|rb|go)`' [doc_file] 2>/dev/null
|
|
59
|
+
# Check if referenced files exist
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
2. **Outdated descriptions** — does the doc describe behavior that's changed?
|
|
63
|
+
- Compare doc descriptions against actual code behavior
|
|
64
|
+
- Check version numbers, dependency names, command syntax
|
|
65
|
+
|
|
66
|
+
3. **Missing coverage** — are there new files/features with no documentation?
|
|
67
|
+
```bash
|
|
68
|
+
# Find source files with no corresponding doc mention
|
|
69
|
+
for file in $(git log --oneline -30 --format="" --name-only | sort -u | grep -E '\.(ts|js|py|rb|go)$'); do
|
|
70
|
+
BASENAME=$(basename "$file" | sed 's/\.[^.]*$//')
|
|
71
|
+
grep -ril "$BASENAME" docs/ 2>/dev/null | wc -l | tr -d ' '
|
|
72
|
+
done
|
|
73
|
+
```
|
|
74
|
+
|
|
75
|
+
## Step 4: Report Findings
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
79
|
+
learnship ► DOC SYNC REPORT
|
|
80
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
81
|
+
|
|
82
|
+
Scanned: [N] documentation files
|
|
83
|
+
Changes since: [last tag or last 30 commits]
|
|
84
|
+
|
|
85
|
+
## Stale Sections
|
|
86
|
+
|
|
87
|
+
| Doc | Section | Issue | Severity |
|
|
88
|
+
|-----|---------|-------|----------|
|
|
89
|
+
| [file] | [heading] | [what's wrong] | high/medium/low |
|
|
90
|
+
|
|
91
|
+
## Dead References
|
|
92
|
+
|
|
93
|
+
| Doc | Reference | Status |
|
|
94
|
+
|-----|-----------|--------|
|
|
95
|
+
| [file] | `[reference]` | removed / renamed to [new name] |
|
|
96
|
+
|
|
97
|
+
## Missing Documentation
|
|
98
|
+
|
|
99
|
+
| New File/Feature | Suggested Doc |
|
|
100
|
+
|------------------|---------------|
|
|
101
|
+
| [file] | Add to [existing doc] or create new |
|
|
102
|
+
|
|
103
|
+
## Auto-Fixable
|
|
104
|
+
|
|
105
|
+
[N] issues can be auto-fixed (renamed references, updated paths)
|
|
106
|
+
```
|
|
107
|
+
|
|
108
|
+
## Step 5: Auto-Fix Simple Cases
|
|
109
|
+
|
|
110
|
+
For issues that can be fixed automatically (renamed files, updated paths, version numbers):
|
|
111
|
+
|
|
112
|
+
```bash
|
|
113
|
+
# Apply fixes
|
|
114
|
+
sed -i 's/old_reference/new_reference/g' [doc_file]
|
|
115
|
+
|
|
116
|
+
git add [fixed files]
|
|
117
|
+
git commit -m "docs: sync — fix [N] stale references"
|
|
118
|
+
```
|
|
119
|
+
|
|
120
|
+
For complex issues (rewritten behavior, new feature descriptions), present to user:
|
|
121
|
+
|
|
122
|
+
```
|
|
123
|
+
These [N] issues need manual review:
|
|
124
|
+
1. [doc]: [section] — [what needs updating and why]
|
|
125
|
+
2. [doc]: [section] — [what needs updating and why]
|
|
126
|
+
```
|
|
127
|
+
|
|
128
|
+
## Step 6: Confirm
|
|
129
|
+
|
|
130
|
+
```
|
|
131
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
132
|
+
learnship ► DOC SYNC COMPLETE ✓
|
|
133
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
134
|
+
|
|
135
|
+
Auto-fixed: [N] issues
|
|
136
|
+
Manual review needed: [M] issues
|
|
137
|
+
Missing docs: [K] new features without documentation
|
|
138
|
+
```
|
|
139
|
+
|
|
140
|
+
---
|
|
141
|
+
|
|
142
|
+
## Integration Points
|
|
143
|
+
|
|
144
|
+
- `complete-milestone`: optionally run `/sync-docs` before releasing
|
|
145
|
+
- `release`: suggest `/sync-docs` as pre-release checklist item
|
|
146
|
+
|
|
147
|
+
---
|
|
148
|
+
|
|
149
|
+
## Learning Checkpoint
|
|
150
|
+
|
|
151
|
+
Read `learning_mode` from `.planning/config.json`.
|
|
152
|
+
|
|
153
|
+
**If `auto`:** After sync, offer:
|
|
154
|
+
|
|
155
|
+
> 💡 **Learning moment:** Documentation drift is a signal about process:
|
|
156
|
+
>
|
|
157
|
+
> `@agentic-learning reflect` — Why did these docs get stale? Is there a pattern (e.g., docs always lag behind API changes)? Reflecting on the drift pattern prevents it next time.
|
|
158
|
+
|
|
159
|
+
**If `manual`:** Add quietly: *"Tip: `@agentic-learning reflect` to understand why docs drifted and prevent it."*
|
|
@@ -14,10 +14,10 @@ Retroactively audit and fill test coverage gaps for a completed phase. Useful af
|
|
|
14
14
|
|
|
15
15
|
Read `.planning/config.json`:
|
|
16
16
|
```bash
|
|
17
|
-
cat .planning/config.json | grep "
|
|
17
|
+
cat .planning/config.json | grep "validation"
|
|
18
18
|
```
|
|
19
19
|
|
|
20
|
-
If `
|
|
20
|
+
If `validation: false`: stop — "Validation is disabled. Enable it in `/settings` to use this workflow."
|
|
21
21
|
|
|
22
22
|
## Step 2: Validate Phase
|
|
23
23
|
|
|
@@ -76,7 +76,7 @@ For each requirement ID assigned to this phase:
|
|
|
76
76
|
- **PARTIAL** — test exists but incomplete or failing
|
|
77
77
|
- **MISSING** — no test found
|
|
78
78
|
|
|
79
|
-
If no gaps (all COVERED): proceed directly to step 8 with `
|
|
79
|
+
If no gaps (all COVERED): proceed directly to step 8 with `compliant: true`.
|
|
80
80
|
|
|
81
81
|
## Step 7: Present Gap Plan and Fill
|
|
82
82
|
|
|
@@ -118,7 +118,7 @@ Write `$PHASE_DIR/[padded_phase]-VALIDATION.md`:
|
|
|
118
118
|
|
|
119
119
|
```markdown
|
|
120
120
|
---
|
|
121
|
-
|
|
121
|
+
compliant: true | false
|
|
122
122
|
wave_0_complete: true | false
|
|
123
123
|
phase: [N]
|
|
124
124
|
validated: [date]
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Learn as you build. Build with intent. — A multi-platform agentic engineering system for Windsurf, Claude Code, Cursor, OpenCode, Gemini CLI, and Codex: spec-driven workflows, integrated learning, and production-grade design.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentic",
|
|
@@ -1,40 +1,49 @@
|
|
|
1
1
|
# Model Profiles
|
|
2
2
|
|
|
3
|
-
Model profiles control which AI model each learnship agent uses.
|
|
3
|
+
Model profiles control which AI model tier each learnship agent uses. Profiles are platform-agnostic — they use three tiers (`large`, `medium`, `small`) that map to specific models depending on your platform.
|
|
4
4
|
|
|
5
5
|
## Profile Definitions
|
|
6
6
|
|
|
7
7
|
| Agent | `quality` | `balanced` | `budget` |
|
|
8
8
|
|-------|-----------|------------|----------|
|
|
9
|
-
| planner |
|
|
10
|
-
|
|
|
11
|
-
|
|
|
12
|
-
|
|
|
13
|
-
|
|
|
14
|
-
|
|
|
15
|
-
|
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
20
|
-
|
|
9
|
+
| planner | large | large | medium |
|
|
10
|
+
| executor | large | medium | medium |
|
|
11
|
+
| phase-researcher | large | medium | small |
|
|
12
|
+
| debugger | large | medium | medium |
|
|
13
|
+
| verifier | medium | medium | small |
|
|
14
|
+
| plan-checker | medium | medium | small |
|
|
15
|
+
| solution-writer | medium | medium | small |
|
|
16
|
+
| code-reviewer | large | medium | medium |
|
|
17
|
+
| challenger | large | medium | medium |
|
|
18
|
+
| ideation-agent | large | medium | small |
|
|
19
|
+
|
|
20
|
+
## Platform Model Resolution
|
|
21
|
+
|
|
22
|
+
Each tier resolves to the best available model on your platform:
|
|
23
|
+
|
|
24
|
+
| Tier | Anthropic (Claude Code) | Google (Gemini CLI) | OpenAI (Codex CLI) | Windsurf / Cursor / OpenCode |
|
|
25
|
+
|------|------------------------|--------------------|--------------------|-----------------------------|
|
|
26
|
+
| `large` | Claude Opus 4.6 | Gemini 3.1 Pro | GPT-5.4 | Uses platform default (best available) |
|
|
27
|
+
| `medium` | Claude Sonnet 4.6 | Gemini 3.1 Flash | GPT-5.4-mini | Uses platform default |
|
|
28
|
+
| `small` | Claude Haiku 4.5 | Gemini 3.1 Flash-Lite | GPT-5.4-nano | Uses platform default |
|
|
29
|
+
|
|
30
|
+
> **Note:** Windsurf, Cursor, and OpenCode do not expose per-agent model selection. The profile tiers are still useful — they signal the *intended complexity* of each agent's task, and workflows will adapt their prompting strategy accordingly (e.g., more explicit instructions for `small`-tier agents).
|
|
21
31
|
|
|
22
32
|
## Profile Philosophy
|
|
23
33
|
|
|
24
|
-
**quality**
|
|
25
|
-
-
|
|
26
|
-
-
|
|
34
|
+
**quality** — Maximum reasoning power
|
|
35
|
+
- `large` for all decision-making agents (planner, researcher, reviewer, challenger)
|
|
36
|
+
- `medium` for verification (needs reasoning, not just pattern matching)
|
|
27
37
|
- Use when: quota available, critical architecture work
|
|
28
38
|
|
|
29
|
-
**balanced** (default)
|
|
30
|
-
-
|
|
31
|
-
-
|
|
32
|
-
- Sonnet for verification (needs reasoning, not just pattern matching)
|
|
39
|
+
**balanced** (default) — Smart allocation
|
|
40
|
+
- `large` only for planning (where architecture decisions happen)
|
|
41
|
+
- `medium` for execution, research, and verification
|
|
33
42
|
- Use when: normal development, good balance of quality and cost
|
|
34
43
|
|
|
35
|
-
**budget**
|
|
36
|
-
-
|
|
37
|
-
-
|
|
44
|
+
**budget** — Minimal large-model usage
|
|
45
|
+
- `medium` for anything that writes code
|
|
46
|
+
- `small` for research and verification
|
|
38
47
|
- Use when: conserving quota, high-volume work, less critical phases
|
|
39
48
|
|
|
40
49
|
## Resolution Logic
|
|
@@ -45,7 +54,8 @@ Resolution order:
|
|
|
45
54
|
1. Read .planning/config.json
|
|
46
55
|
2. Check model_overrides for agent-specific override
|
|
47
56
|
3. If no override, look up agent in profile table
|
|
48
|
-
4.
|
|
57
|
+
4. Map the tier (large/medium/small) to the platform's actual model
|
|
58
|
+
5. Apply the resolved model when adopting the agent persona
|
|
49
59
|
```
|
|
50
60
|
|
|
51
61
|
## Per-Agent Overrides
|
|
@@ -56,13 +66,13 @@ Override specific agents without changing the entire profile:
|
|
|
56
66
|
{
|
|
57
67
|
"model_profile": "balanced",
|
|
58
68
|
"model_overrides": {
|
|
59
|
-
"executor": "
|
|
60
|
-
"planner": "
|
|
69
|
+
"executor": "large",
|
|
70
|
+
"planner": "small"
|
|
61
71
|
}
|
|
62
72
|
}
|
|
63
73
|
```
|
|
64
74
|
|
|
65
|
-
Overrides take precedence over the profile. Valid values: `
|
|
75
|
+
Overrides take precedence over the profile. Valid values: `large`, `medium`, `small`.
|
|
66
76
|
|
|
67
77
|
## Switching Profiles
|
|
68
78
|
|
|
@@ -77,14 +87,12 @@ Per-project default: Set in `.planning/config.json`:
|
|
|
77
87
|
|
|
78
88
|
## Design Rationale
|
|
79
89
|
|
|
80
|
-
**Why
|
|
90
|
+
**Why `large` for the planner?**
|
|
81
91
|
Planning involves architecture decisions, goal decomposition, and task design. This is where model quality has the highest impact.
|
|
82
92
|
|
|
83
|
-
**Why
|
|
93
|
+
**Why `medium` for the executor?**
|
|
84
94
|
Executors follow explicit PLAN.md instructions. The plan already contains the reasoning; execution is implementation.
|
|
85
95
|
|
|
86
|
-
**Why
|
|
87
|
-
Verification requires goal-backward reasoning — checking if code *delivers* what the phase promised, not just pattern matching.
|
|
96
|
+
**Why `medium` (not `small`) for verifiers in balanced?**
|
|
97
|
+
Verification requires goal-backward reasoning — checking if code *delivers* what the phase promised, not just pattern matching. Medium-tier models handle this well; small-tier models may miss subtle gaps.
|
|
88
98
|
|
|
89
|
-
**Why Haiku for the codebase-mapper?**
|
|
90
|
-
Read-only exploration and pattern extraction. No reasoning required, just structured output from file contents.
|
package/templates/config.json
CHANGED
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
"granularity": "standard",
|
|
4
4
|
"model_profile": "balanced",
|
|
5
5
|
"learning_mode": "auto",
|
|
6
|
+
"parallelization": false,
|
|
7
|
+
"test_first": false,
|
|
6
8
|
"planning": {
|
|
7
9
|
"commit_docs": true,
|
|
8
10
|
"commit_mode": "auto",
|
|
@@ -12,7 +14,17 @@
|
|
|
12
14
|
"research": true,
|
|
13
15
|
"plan_check": true,
|
|
14
16
|
"verifier": true,
|
|
15
|
-
"
|
|
17
|
+
"validation": true,
|
|
18
|
+
"review": true,
|
|
19
|
+
"solutions_search": true
|
|
20
|
+
},
|
|
21
|
+
"review": {
|
|
22
|
+
"auto_after_verify": false
|
|
23
|
+
},
|
|
24
|
+
"ship": {
|
|
25
|
+
"auto_test": true,
|
|
26
|
+
"conventional_commits": true,
|
|
27
|
+
"pr_template": true
|
|
16
28
|
},
|
|
17
29
|
"git": {
|
|
18
30
|
"branching_strategy": "none",
|