learnship 2.3.2 → 2.3.4
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 +1 -1
- package/.cursor-plugin/plugin.json +1 -1
- package/README.md +17 -6
- package/agents/learnship-plan-checker.md +6 -1
- package/agents/learnship-planner.md +21 -11
- package/bin/install.js +1 -1
- package/cursor-rules/learnship.mdc +3 -1
- package/gemini-extension.json +1 -1
- package/learnship/agents/plan-checker.md +5 -0
- package/learnship/agents/planner.md +14 -1
- package/learnship/references/planning-config.md +1 -1
- package/learnship/templates/plan.md +8 -0
- package/learnship/workflows/audit-milestone.md +5 -0
- package/learnship/workflows/challenge.md +10 -0
- package/learnship/workflows/compound.md +5 -0
- package/learnship/workflows/debug.md +10 -0
- package/learnship/workflows/diagnose-issues.md +5 -0
- package/learnship/workflows/discuss-phase.md +38 -3
- package/learnship/workflows/docs-update.md +92 -0
- package/learnship/workflows/execute-phase.md +10 -0
- package/learnship/workflows/execute-plan.md +5 -0
- package/learnship/workflows/ideate.md +10 -0
- package/learnship/workflows/map-codebase.md +5 -0
- package/learnship/workflows/new-milestone.md +10 -0
- package/learnship/workflows/new-project.md +127 -20
- package/learnship/workflows/plan-phase.md +44 -16
- package/learnship/workflows/quick.md +25 -0
- package/learnship/workflows/research-phase.md +11 -4
- package/learnship/workflows/review.md +5 -0
- package/learnship/workflows/secure-phase.md +5 -0
- package/learnship/workflows/settings.md +1 -1
- package/learnship/workflows/validate-phase.md +5 -0
- package/learnship/workflows/verify-work.md +15 -0
- package/package.json +1 -1
- package/templates/plan.md +8 -0
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
3
|
"description": "Agentic engineering done right — 57 structured workflows, 17 specialist agent personas, persistent memory across sessions, integrated learning partner, and impeccable UI design system. Works with Claude Code, Windsurf, Cursor, Gemini CLI, OpenCode, and Codex.",
|
|
4
|
-
"version": "2.3.
|
|
4
|
+
"version": "2.3.4",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "Favio Vazquez",
|
|
7
7
|
"email": "favio.vazquezp@gmail.com"
|
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
"name": "learnship",
|
|
3
3
|
"displayName": "learnship",
|
|
4
4
|
"description": "Agentic engineering done right — 57 structured workflows, 17 specialist agent personas, persistent memory across sessions, integrated learning partner, and impeccable UI design system.",
|
|
5
|
-
"version": "2.3.
|
|
5
|
+
"version": "2.3.4",
|
|
6
6
|
"logo": "assets/logo.png",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Favio Vazquez",
|
package/README.md
CHANGED
|
@@ -121,7 +121,7 @@ Every feature ships through a 7-step loop:
|
|
|
121
121
|
```mermaid
|
|
122
122
|
flowchart LR
|
|
123
123
|
DP["/discuss-phase N<br/>Capture decisions"]
|
|
124
|
-
PP["/plan-phase N<br/>
|
|
124
|
+
PP["/plan-phase N<br/>Vertical slice plans"]
|
|
125
125
|
EP["/execute-phase N<br/>Build + commit"]
|
|
126
126
|
VW["/verify-work N<br/>UAT + diagnose"]
|
|
127
127
|
RV["/review<br/>Multi-persona review"]
|
|
@@ -136,8 +136,8 @@ flowchart LR
|
|
|
136
136
|
|
|
137
137
|
| Step | Command | What happens |
|
|
138
138
|
|------|---------|-------------|
|
|
139
|
-
| **1. Discuss** | `/discuss-phase N` | You and the agent align on implementation decisions before any code |
|
|
140
|
-
| **2. Plan** | `/plan-phase N` | Agent researches the domain, creates
|
|
139
|
+
| **1. Discuss** | `/discuss-phase N` | You and the agent align on implementation decisions before any code. Add `--deep` for extended deep questioning that walks every branch (v2.3.4) |
|
|
140
|
+
| **2. Plan** | `/plan-phase N` | Agent researches the domain, creates vertical slice plans (tracer bullets), verifies them — including horizontal slice detection (v2.3.4) |
|
|
141
141
|
| **3. Execute** | `/execute-phase N` | Plans run in dependency order, one atomic commit per task |
|
|
142
142
|
| **4. Verify** | `/verify-work N` | You do UAT; agent diagnoses any gaps and creates fix plans |
|
|
143
143
|
| **5. Review** | `/review` | Multi-persona code review through 6 lenses (v2.0) |
|
|
@@ -252,6 +252,14 @@ It's probably overkill for one-off scripts. Use `/quick` for that.
|
|
|
252
252
|
|
|
253
253
|
## 🆕 What's New
|
|
254
254
|
|
|
255
|
+
### What's new in v2.3.4
|
|
256
|
+
|
|
257
|
+
v2.3.4 adds two planning quality features:
|
|
258
|
+
|
|
259
|
+
**Deep questioning mode** (`--deep` flag or `workflow.discuss_mode: "deep"` in config): Both `/discuss-phase` and `/new-project` now support extended questioning that walks every decision branch until shared understanding is reached. Each question includes a recommended answer. Standard mode (4 focused exchanges) remains the default.
|
|
260
|
+
|
|
261
|
+
**Vertical slice planning** (enforced in `plan-phase`): Plans are now required to be tracer bullets — thin vertical slices through all integration layers (data → logic → API → UI → test) for one demoable user-facing behavior. The plan-checker flags any plan that covers only one architectural layer across all features. Single-layer phases (migrations, style passes) use `single_layer_justified: true` in the plan frontmatter.
|
|
262
|
+
|
|
255
263
|
### What's new in v2.3
|
|
256
264
|
|
|
257
265
|
v2.3 adds 5 new agent personas, Windsurf-native persona adoption via `model_decision` rules, and inline `<persona_context>` blocks across all 18 persona-aware workflows:
|
|
@@ -294,7 +302,7 @@ v2.1 adds 8 new workflows, 5 new references, 3 new templates, and 2 new agents:
|
|
|
294
302
|
| **Session** | `/note` — zero-friction capture · `/session-report` — stakeholder summaries |
|
|
295
303
|
| **Learning** | `/extract-learnings` — decisions, lessons, patterns, surprises · `/milestone-summary` — team onboarding |
|
|
296
304
|
|
|
297
|
-
Enhanced: `/discuss-phase` (scope guardrails + domain probes), `/execute-phase` (`--wave` flag + context scaling), `/quick` (`--research --validate --full` composable flags), `/ideate` (`--explore` Socratic mode).
|
|
305
|
+
Enhanced: `/discuss-phase` (scope guardrails + domain probes + `--deep` extended questioning v2.3.4), `/new-project` (`--deep` extended questioning v2.3.4), `/plan-phase` (vertical slice tracer bullets + horizontal slice detection v2.3.4), `/execute-phase` (`--wave` flag + context scaling), `/quick` (`--research --validate --full` composable flags), `/ideate` (`--explore` Socratic mode).
|
|
298
306
|
|
|
299
307
|
**Optional per-phase:** `/secure-phase N` (STRIDE security), `/extract-learnings N` (meta-knowledge).
|
|
300
308
|
**Recovery:** `/forensics` (post-mortem), `/undo` (safe revert).
|
|
@@ -533,13 +541,16 @@ Project settings live in `.planning/config.json`. Set during `/new-project` or e
|
|
|
533
541
|
### Workflow Toggles
|
|
534
542
|
|
|
535
543
|
| Setting | Default | What it controls |
|
|
536
|
-
|
|
544
|
+
|---------|---------|------------------|
|
|
537
545
|
| `workflow.research` | `true` | Domain research before planning each phase |
|
|
538
|
-
| `workflow.plan_check` | `true` | Plan verification loop (up to 3 iterations) |
|
|
546
|
+
| `workflow.plan_check` | `true` | Plan verification loop (up to 3 iterations), including vertical slice integrity check |
|
|
539
547
|
| `workflow.verifier` | `true` | Post-execution verification against phase goals |
|
|
540
548
|
| `workflow.validation` | `true` | Test coverage mapping during plan-phase |
|
|
541
549
|
| `workflow.review` | `true` | Enable `/review` suggestions after `/verify-work` (v2.0) |
|
|
542
550
|
| `workflow.solutions_search` | `true` | Search `.planning/solutions/` during `/plan-phase` (v2.0) |
|
|
551
|
+
| `workflow.security_enforcement` | `true` | Per-phase STRIDE security verification via `/secure-phase` |
|
|
552
|
+
| `workflow.discuss_mode` | `"discuss"` | Questioning depth: `"discuss"` (4 exchanges) or `"deep"` (extended, walks every branch) (v2.3.4) |
|
|
553
|
+
| `workflow.tdd_mode` | `false` | Instruct planner to apply TDD task ordering to eligible tasks |
|
|
543
554
|
|
|
544
555
|
### Review & Ship Settings
|
|
545
556
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: learnship-plan-checker
|
|
3
|
-
description: Verifies PLAN.md files for a phase — checks goal coverage, requirement IDs, CONTEXT.md decisions, task completeness, and
|
|
3
|
+
description: Verifies PLAN.md files for a phase — checks goal coverage, requirement IDs, CONTEXT.md decisions, task completeness, wave correctness, and vertical slice integrity (each plan must be a demoable tracer bullet). Spawned by plan-phase on platforms with subagent support.
|
|
4
4
|
tools: Read, Bash, Glob, Grep
|
|
5
5
|
color: cyan
|
|
6
6
|
---
|
|
@@ -48,6 +48,11 @@ For every task in every plan, check:
|
|
|
48
48
|
- Is each plan achievable in a single context window? (~200k tokens, 2-3 tasks)
|
|
49
49
|
- Are there any tasks that are too vague to implement without guessing?
|
|
50
50
|
|
|
51
|
+
### 7. Vertical Slice (tracer bullet)
|
|
52
|
+
- Does each plan's `objective` describe a **demoable user-facing behavior** delivered end-to-end?
|
|
53
|
+
- Does any plan cover only a single layer (all schema, all API routes, all UI components across the feature)? If yes, flag as **horizontal slice** unless `single_layer_justified: true` is in the frontmatter.
|
|
54
|
+
- The test: "Can someone demo what this plan delivers after it completes, without completing other plans?" If no and `single_layer_justified` is not set → flag it.
|
|
55
|
+
|
|
51
56
|
## What NOT to check
|
|
52
57
|
- Code style or implementation approach preferences (that's the planner's job)
|
|
53
58
|
- Research quality (that's already done)
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: learnship-planner
|
|
3
|
-
description: Creates executable PLAN.md files for a phase — decomposes goals into
|
|
3
|
+
description: Creates executable PLAN.md files for a phase — decomposes goals into vertical slice (tracer bullet) tasks with wave-ordered dependency analysis. Each plan delivers one demoable user-facing behavior end-to-end. Spawned by plan-phase on platforms with subagent support.
|
|
4
4
|
tools: Read, Write, Bash, Glob, Grep
|
|
5
5
|
color: green
|
|
6
6
|
---
|
|
@@ -28,11 +28,18 @@ Before planning, load project context:
|
|
|
28
28
|
|
|
29
29
|
## Core Rules
|
|
30
30
|
|
|
31
|
-
1. **
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
31
|
+
1. **Vertical slices, not horizontal layers** — Each PLAN.md is a **tracer bullet**: a thin vertical slice through all integration layers for one user-facing behavior. A completed plan is demoable without completing other plans. DO NOT create all-schema, all-API, or all-UI plans.
|
|
32
|
+
```
|
|
33
|
+
WRONG: Plan 01 = DB schema Plan 02 = API routes Plan 03 = UI
|
|
34
|
+
RIGHT: Plan 01 = user can log in (schema + route + form + test)
|
|
35
|
+
Plan 02 = user can reset password (schema + route + form + test)
|
|
36
|
+
```
|
|
37
|
+
Exception: add `single_layer_justified: true` to frontmatter if the phase is legitimately single-layer (migration, style pass).
|
|
38
|
+
2. **Honor CONTEXT.md first** — locked decisions are non-negotiable. Plans implement decisions, not the other way around.
|
|
39
|
+
3. **Goal-backward** — start from the phase goal, derive the minimum set of must-haves, then build tasks backward from those
|
|
40
|
+
4. **One context window per plan** — each plan must be executable in a single agent session (~200k tokens)
|
|
41
|
+
5. **2-3 tasks per plan** — enough to be a meaningful unit, small enough to verify cleanly
|
|
42
|
+
6. **Observable must-haves** — every must-have must be checkable by reading a file or running a command
|
|
36
43
|
|
|
37
44
|
## Wave Assignment
|
|
38
45
|
|
|
@@ -52,7 +59,8 @@ files_modified:
|
|
|
52
59
|
- src/feature.ts
|
|
53
60
|
- tests/feature.test.ts
|
|
54
61
|
autonomous: true
|
|
55
|
-
|
|
62
|
+
single_layer_justified: false # true only for legitimately single-layer phases
|
|
63
|
+
objective: "One sentence describing the demoable user-facing behavior this plan delivers end-to-end"
|
|
56
64
|
must_haves:
|
|
57
65
|
- "src/feature.ts exists and exports FeatureClass"
|
|
58
66
|
- "tests/feature.test.ts has at least 3 test cases"
|
|
@@ -113,10 +121,12 @@ Load everything before writing a single plan:
|
|
|
113
121
|
## Step 2: Decompose Phase Goal
|
|
114
122
|
|
|
115
123
|
From the phase goal and requirements:
|
|
116
|
-
1. List all
|
|
117
|
-
2.
|
|
118
|
-
3. Find dependencies between
|
|
119
|
-
4. Group into 2-4 plans, assign waves
|
|
124
|
+
1. List all user-facing behaviors the phase must deliver (not layers — behaviors)
|
|
125
|
+
2. Each behavior becomes one plan: data schema + logic + API + UI + test
|
|
126
|
+
3. Find dependencies between plans
|
|
127
|
+
4. Group into 2-4 vertical slice plans, assign waves
|
|
128
|
+
|
|
129
|
+
**Self-check before writing:** For each draft plan, ask: "Can someone demo this plan's deliverable after it completes, without completing other plans?" If no → restructure.
|
|
120
130
|
|
|
121
131
|
## Step 3: Write Plans
|
|
122
132
|
|
package/bin/install.js
CHANGED
|
@@ -1438,7 +1438,7 @@ function install(platform, isGlobal) {
|
|
|
1438
1438
|
console.log(` ${yellow}Option 2 (manual):${reset} Copy the rule file into your project:`);
|
|
1439
1439
|
console.log(` ${dim}mkdir -p .cursor/rules${reset}`);
|
|
1440
1440
|
console.log(` ${dim}cp node_modules/learnship/cursor-rules/learnship.mdc .cursor/rules/${reset}\n`);
|
|
1441
|
-
console.log(` ${dim}The .mdc rule activates all
|
|
1441
|
+
console.log(` ${dim}The .mdc rule activates all 57 learnship workflows automatically in every Cursor session.${reset}\n`);
|
|
1442
1442
|
return;
|
|
1443
1443
|
}
|
|
1444
1444
|
|
|
@@ -160,7 +160,7 @@ Set `"parallelization": { "enabled": true|false }` in `.planning/config.json` ba
|
|
|
160
160
|
|
|
161
161
|
## Structured Questions
|
|
162
162
|
|
|
163
|
-
When workflows include `AskUserQuestion()` blocks, **Cursor has no native structured question tool**. Present each question as a numbered text list with descriptions and ask the user to reply with their choice number or label. Present questions in rounds (Round 1: core settings, Round 2: workflow agents
|
|
163
|
+
When workflows include `AskUserQuestion()` blocks, **Cursor has no native structured question tool**. Present each question as a numbered text list with descriptions and ask the user to reply with their choice number or label. Present questions in rounds (Round 1: core settings — working style, granularity, learning partner, AI models, questioning depth, output profile; Round 2: workflow agents; Round 3: pipeline & git; Round 4: parallelization). **Wait for the user's reply after EACH round before showing the next.** Do NOT present all questions at once.
|
|
164
164
|
|
|
165
165
|
Example:
|
|
166
166
|
```
|
|
@@ -178,6 +178,8 @@ After all configuration rounds are answered, write `.planning/config.json` with
|
|
|
178
178
|
- Granularity → `"granularity"`: `"coarse"`, `"standard"`, or `"fine"`
|
|
179
179
|
- Learning Partner → `"learning_mode"`: `"auto"` or `"manual"`
|
|
180
180
|
- AI Models → `"model_profile"`: `"balanced"`, `"quality"`, or `"budget"`
|
|
181
|
+
- Questioning Depth → `"workflow.discuss_mode"`: `"discuss"` (Standard) or `"deep"` (Deep)
|
|
182
|
+
- Output Profile → `"context"`: `"dev"` (Dev), `"research"` (Research), or `"review"` (Review)
|
|
181
183
|
- Research → `"workflow.research"`: `true` or `false`
|
|
182
184
|
- Plan Check → `"workflow.plan_check"`: `true` or `false`
|
|
183
185
|
- Verifier → `"workflow.verifier"`: `true` or `false`
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.4",
|
|
4
4
|
"description": "Agentic engineering done right — 57 structured workflows, 17 specialist agent personas, persistent memory across sessions, integrated learning partner, and impeccable UI design system.",
|
|
5
5
|
"author": "Favio Vazquez",
|
|
6
6
|
"homepage": "https://faviovazquez.github.io/learnship/",
|
|
@@ -34,6 +34,11 @@ For every task in every plan, check:
|
|
|
34
34
|
- Is each plan achievable in a single context window? (~200k tokens, 2-3 tasks)
|
|
35
35
|
- Are there any tasks that are too vague to implement without guessing?
|
|
36
36
|
|
|
37
|
+
### 7. Vertical Slice (tracer bullet)
|
|
38
|
+
- Does each plan's `objective` describe a **demoable user-facing behavior** delivered end-to-end?
|
|
39
|
+
- Does any plan cover only a single layer across the whole feature (all schema, all API endpoints, all UI components)? If yes, flag it as a **horizontal slice** unless `single_layer_justified: true` is set in the frontmatter.
|
|
40
|
+
- The test: "Can someone demo what this plan delivers after it completes, without completing other plans?" If no and `single_layer_justified` is not set → flag it.
|
|
41
|
+
|
|
37
42
|
## What NOT to check
|
|
38
43
|
- Code style or implementation approach preferences (that's the planner's job)
|
|
39
44
|
- Research quality (that's already done)
|
|
@@ -6,6 +6,18 @@ Plans are precise prompts for an executor — not documents that become prompts.
|
|
|
6
6
|
|
|
7
7
|
## Planning Principles
|
|
8
8
|
|
|
9
|
+
**Vertical slices, not horizontal layers** — Each PLAN.md is a **tracer bullet**: a thin vertical slice that cuts through all integration layers end-to-end for one user-facing behavior. A completed plan is demoable or verifiable on its own. Do NOT create plans that implement a single layer across the whole feature.
|
|
10
|
+
|
|
11
|
+
```
|
|
12
|
+
WRONG (horizontal): Plan 01 = all DB schema Plan 02 = all API Plan 03 = all UI
|
|
13
|
+
RIGHT (vertical): Plan 01 = user can log in (schema + API endpoint + UI form + test)
|
|
14
|
+
Plan 02 = user can reset password (schema + API + UI + test)
|
|
15
|
+
```
|
|
16
|
+
|
|
17
|
+
**Anti-pattern to avoid:** If someone cannot demo what a completed plan delivers without also completing other plans, the plan is too horizontal. Restructure.
|
|
18
|
+
|
|
19
|
+
**Exception — single-layer phases:** Some phases are legitimately single-layer (e.g., "migrate all DB tables to new schema", "style all existing components"). In this case, add `single_layer_justified: true` to the plan's YAML frontmatter and note the reason in the objective.
|
|
20
|
+
|
|
9
21
|
**Atomic tasks** — each task should be completable in one logical unit of work and committed independently.
|
|
10
22
|
|
|
11
23
|
**Observable done criteria** — every task must have a `<done>` field that describes something you can check (file exists, test passes, import resolves) — not "task is complete".
|
|
@@ -36,7 +48,8 @@ files_modified:
|
|
|
36
48
|
- path/to/file.ts
|
|
37
49
|
- path/to/other.ts
|
|
38
50
|
autonomous: true
|
|
39
|
-
|
|
51
|
+
single_layer_justified: false # set true only if this phase is legitimately single-layer (e.g., DB migration, style pass)
|
|
52
|
+
objective: "[One sentence describing the demoable user-facing behavior this plan delivers end-to-end]"
|
|
40
53
|
must_haves:
|
|
41
54
|
truths:
|
|
42
55
|
- "File src/auth/token.ts exists and exports `validateToken`"
|
|
@@ -210,7 +210,7 @@ New sections and fields added in v2.1.0 for security, parallelization control, g
|
|
|
210
210
|
| Option | Default | Description |
|
|
211
211
|
|--------|---------|-------------|
|
|
212
212
|
| `workflow.security_enforcement` | `true` | Enable per-phase security verification via `/secure-phase` |
|
|
213
|
-
| `workflow.discuss_mode` | `"discuss"` | Discussion
|
|
213
|
+
| `workflow.discuss_mode` | `"discuss"` | Discussion depth for `discuss-phase` and `new-project` questioning. `"discuss"` = standard (4 focused exchanges). `"deep"` = extended questioning, walks every decision branch until shared understanding — equivalent to passing `--deep` flag |
|
|
214
214
|
| `workflow.tdd_mode` | `false` | Instruct planner to apply `type: tdd` to eligible tasks |
|
|
215
215
|
|
|
216
216
|
### Parallelization Section (replaces flat boolean)
|
|
@@ -113,6 +113,14 @@ Phases execute in numeric order: 2 → 2.1 → 2.2 → 3 → 3.1 → 4
|
|
|
113
113
|
- Progress table updated by execute workflow
|
|
114
114
|
- Plan count can be "TBD" initially, refined during planning
|
|
115
115
|
|
|
116
|
+
**Vertical slice planning (enforced by plan-phase and plan-checker):**
|
|
117
|
+
- Each PLAN.md is a tracer bullet — one user-facing behavior, all layers (data → logic → API → UI → test)
|
|
118
|
+
- A completed plan is demoable without completing other plans
|
|
119
|
+
- Plan descriptions in this roadmap should reflect what users experience, not which layer is being built
|
|
120
|
+
- ✗ "01-01: Create database schema" — horizontal, not demoable alone
|
|
121
|
+
- ✓ "01-01: User can register and receive confirmation email" — vertical, demoable
|
|
122
|
+
- Exception: `single_layer_justified: true` in PLAN.md frontmatter for legitimately single-layer phases
|
|
123
|
+
|
|
116
124
|
**Success criteria:**
|
|
117
125
|
- 2-5 observable behaviors per phase (from user's perspective)
|
|
118
126
|
- Cross-checked against requirements during roadmap creation
|
|
@@ -72,6 +72,11 @@ You are now the **learnship verifier** in integration mode. Check cross-phase wi
|
|
|
72
72
|
Every requirement must trace to at least one completed phase. Flag gaps, stubs, and broken integration points.
|
|
73
73
|
</persona_context>
|
|
74
74
|
|
|
75
|
+
> **Announce persona** — print this before proceeding:
|
|
76
|
+
> ```bash
|
|
77
|
+
> printf "\n \033[35m learnship-verifier(In integration mode)\033[0m\n\n"
|
|
78
|
+
> ```
|
|
79
|
+
|
|
75
80
|
Read `@./agents/verifier.md` for the full persona definition. In integration mode, check cross-phase wiring:
|
|
76
81
|
|
|
77
82
|
Read all SUMMARY.md files to understand what each phase exported (APIs, components, utilities).
|
|
@@ -85,6 +85,11 @@ Product lens: Is this worth building? Who needs it? What happens if we don't bui
|
|
|
85
85
|
Be adversarial but constructive — the goal is to find fatal flaws before investing effort.
|
|
86
86
|
</persona_context>
|
|
87
87
|
|
|
88
|
+
> **Announce persona** — print this before proceeding:
|
|
89
|
+
> ```bash
|
|
90
|
+
> printf "\n \033[38;5;208m learnship-challenger(Stress-test this idea with forcing questions)\033[0m\n\n"
|
|
91
|
+
> ```
|
|
92
|
+
|
|
88
93
|
Read `@./agents/challenger.md` for the full persona definition. Ask the 3-5 product forcing questions and answer them based on available context.
|
|
89
94
|
|
|
90
95
|
## Step 3: Engineering Challenge
|
|
@@ -136,6 +141,11 @@ Engineering lens: Can we actually build this? What's the hardest part? What will
|
|
|
136
141
|
Be adversarial but constructive — find technical risks before they become production incidents.
|
|
137
142
|
</persona_context>
|
|
138
143
|
|
|
144
|
+
> **Announce persona** — print this before proceeding:
|
|
145
|
+
> ```bash
|
|
146
|
+
> printf "\n \033[38;5;208m learnship-challenger(In engineering mode)\033[0m\n\n"
|
|
147
|
+
> ```
|
|
148
|
+
|
|
139
149
|
Read `@./agents/challenger.md` for the full persona definition. Switch to the engineering lens and ask the 3-5 engineering forcing questions.
|
|
140
150
|
|
|
141
151
|
## Step 4: Synthesize Verdict
|
|
@@ -115,6 +115,11 @@ You are now the **learnship solution writer**. Capture and document a solution a
|
|
|
115
115
|
Analyze the problem, research the domain, document the fix with full context, and explain the "why" not just the "what."
|
|
116
116
|
</persona_context>
|
|
117
117
|
|
|
118
|
+
> **Announce persona** — print this before proceeding:
|
|
119
|
+
> ```bash
|
|
120
|
+
> printf "\n \033[36m learnship-solution-writer(Capture and document a solution at the moment of solving)\033[0m\n\n"
|
|
121
|
+
> ```
|
|
122
|
+
|
|
118
123
|
Read `@./agents/solution-writer.md` for the full persona definition. Perform all research in sequence:
|
|
119
124
|
|
|
120
125
|
1. Extract from conversation history: problem, symptoms, what was tried, what worked
|
|
@@ -139,6 +139,11 @@ You are now the **learnship debugger**. Diagnose the root cause, not the symptom
|
|
|
139
139
|
One variable at a time. Add logging to track state. Reproduce before fixing. Never guess — verify.
|
|
140
140
|
</persona_context>
|
|
141
141
|
|
|
142
|
+
> **Announce persona** — print this before proceeding:
|
|
143
|
+
> ```bash
|
|
144
|
+
> printf "\n \033[38;5;208m learnship-debugger(Diagnose the root cause, not the symptoms)\033[0m\n\n"
|
|
145
|
+
> ```
|
|
146
|
+
|
|
142
147
|
Read `@./agents/debugger.md` for the full persona definition. As your investigation persona:
|
|
143
148
|
|
|
144
149
|
For the most likely hypothesis, investigate the codebase (read-only):
|
|
@@ -207,6 +212,11 @@ You are now the **learnship executor**. Implement the fix surgically — minimal
|
|
|
207
212
|
Commit atomically. Verify the fix resolves the original issue. Don't improve adjacent code.
|
|
208
213
|
</persona_context>
|
|
209
214
|
|
|
215
|
+
> **Announce persona** — print this before proceeding:
|
|
216
|
+
> ```bash
|
|
217
|
+
> printf "\n \033[33m learnship-executor(Implement the fix surgically — minimal change, maximum precision)\033[0m\n\n"
|
|
218
|
+
> ```
|
|
219
|
+
|
|
210
220
|
Read `@./agents/executor.md` for the full persona definition. Once confirmed, implement the fix:
|
|
211
221
|
- Make only the changes needed to fix the root cause
|
|
212
222
|
- No scope creep — don't fix other things while you're in there
|
|
@@ -55,6 +55,11 @@ You are now the **learnship debugger** in diagnosis mode (read-only — no imple
|
|
|
55
55
|
Diagnose root cause, not symptoms. One variable at a time. Trace from symptom to root cause.
|
|
56
56
|
</persona_context>
|
|
57
57
|
|
|
58
|
+
> **Announce persona** — print this before proceeding:
|
|
59
|
+
> ```bash
|
|
60
|
+
> printf "\n \033[38;5;208m learnship-debugger(In diagnosis mode (read-only — no implementation changes))\033[0m\n\n"
|
|
61
|
+
> ```
|
|
62
|
+
|
|
58
63
|
Read `@./agents/debugger.md` for the full persona definition. For each open issue, in diagnosis mode:
|
|
59
64
|
|
|
60
65
|
1. **Trace the symptom** — follow the user-reported behavior inward through the codebase
|
|
@@ -7,6 +7,7 @@ description: Capture implementation decisions for a phase before planning starts
|
|
|
7
7
|
Extract implementation decisions that downstream planning needs. Analyze the phase to identify gray areas, let the user choose what to discuss, then deep-dive each selected area until satisfied.
|
|
8
8
|
|
|
9
9
|
**Usage:** Run `discuss-phase [N]` before `plan-phase [N]`.
|
|
10
|
+
**Usage:** Run `discuss-phase [N] --deep` for extended deep questioning — walks every decision branch until shared understanding is reached, with a recommended answer for each question.
|
|
10
11
|
|
|
11
12
|
**You are a thinking partner, not an interviewer.** The user is the visionary — you are the builder. Your job is to capture decisions that will guide research and planning, not to figure out implementation yourself.
|
|
12
13
|
|
|
@@ -28,6 +29,12 @@ Extract implementation decisions that downstream planning needs. Analyze the pha
|
|
|
28
29
|
|
|
29
30
|
## Step 1: Load Phase
|
|
30
31
|
|
|
32
|
+
**Detect mode:** Check for `--deep` flag in the command. If not present, check `workflow.discuss_mode` in `.planning/config.json` — if it is `"deep"`, activate deep mode. Otherwise, use standard mode.
|
|
33
|
+
|
|
34
|
+
```
|
|
35
|
+
DEEP_MODE = "--deep" flag present OR config.workflow.discuss_mode == "deep"
|
|
36
|
+
```
|
|
37
|
+
|
|
31
38
|
Read `.planning/ROADMAP.md` and find the requested phase number. If not found, stop and show available phases.
|
|
32
39
|
|
|
33
40
|
Read prior context to avoid re-asking decided questions:
|
|
@@ -175,7 +182,7 @@ If "All clear" → skip to Step 6.
|
|
|
175
182
|
**For each selected area, discuss:**
|
|
176
183
|
|
|
177
184
|
1. Announce: "Let's talk about [Area]."
|
|
178
|
-
2. Ask focused questions with concrete options using structured questions where possible:
|
|
185
|
+
2. Ask focused questions with concrete options using structured questions where possible. **Always include a recommended answer** — state which option you'd pick and why:
|
|
179
186
|
|
|
180
187
|
```
|
|
181
188
|
AskUserQuestion([
|
|
@@ -184,7 +191,7 @@ AskUserQuestion([
|
|
|
184
191
|
question: "[Specific implementation question]",
|
|
185
192
|
multiSelect: false,
|
|
186
193
|
options: [
|
|
187
|
-
{ label: "[Option A] (Recommended)", description: "[Why, with code context if relevant]" },
|
|
194
|
+
{ label: "[Option A] (Recommended)", description: "[Why this is recommended, with code context if relevant]" },
|
|
188
195
|
{ label: "[Option B]", description: "[Why]" },
|
|
189
196
|
{ label: "[Option C]", description: "[Why]" }
|
|
190
197
|
]
|
|
@@ -194,13 +201,23 @@ AskUserQuestion([
|
|
|
194
201
|
|
|
195
202
|
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
196
203
|
|
|
197
|
-
|
|
204
|
+
**Standard mode** (default):
|
|
205
|
+
3. After 4 questions per area, ask: "More questions about [area], or move to next?"
|
|
198
206
|
4. If more → ask 4 more, then check again
|
|
199
207
|
|
|
208
|
+
**Deep mode** (`--deep` or `discuss_mode: "deep"`):
|
|
209
|
+
3. After each answer, analyze: what is the single biggest remaining unknown in this area that could change how it's implemented? Ask that next. Provide your recommended answer.
|
|
210
|
+
4. Continue drilling down each decision branch — if an answer opens a sub-branch, follow it. Do NOT move on until the branch is fully resolved.
|
|
211
|
+
5. Only move to the next area when you judge that the current area has no remaining decision branches that would change the implementation.
|
|
212
|
+
6. If you can explore the codebase to answer a question yourself, do so instead of asking the user.
|
|
213
|
+
|
|
214
|
+
> **Deep mode intent:** Walk the full decision tree. Resolve every fork. The CONTEXT.md produced should leave no ambiguity that downstream agents would need to guess about.
|
|
215
|
+
|
|
200
216
|
After all selected areas:
|
|
201
217
|
- Summarize decisions captured
|
|
202
218
|
- Present final check:
|
|
203
219
|
|
|
220
|
+
**Standard mode:**
|
|
204
221
|
```
|
|
205
222
|
AskUserQuestion([
|
|
206
223
|
{
|
|
@@ -215,6 +232,22 @@ AskUserQuestion([
|
|
|
215
232
|
])
|
|
216
233
|
```
|
|
217
234
|
|
|
235
|
+
**Deep mode:**
|
|
236
|
+
```
|
|
237
|
+
AskUserQuestion([
|
|
238
|
+
{
|
|
239
|
+
header: "Shared Understanding Check",
|
|
240
|
+
question: "I've walked through every decision branch I can identify. Do you feel we've reached shared understanding on how to implement this phase?",
|
|
241
|
+
multiSelect: false,
|
|
242
|
+
options: [
|
|
243
|
+
{ label: "Yes — write CONTEXT.md", description: "All key decisions are captured" },
|
|
244
|
+
{ label: "There's still [area] to discuss", description: "Keep going on a specific area" },
|
|
245
|
+
{ label: "Let me add something", description: "I have context to add before you write" }
|
|
246
|
+
]
|
|
247
|
+
}
|
|
248
|
+
])
|
|
249
|
+
```
|
|
250
|
+
|
|
218
251
|
> 🛑 STOP. Wait for the user's reply before continuing.
|
|
219
252
|
|
|
220
253
|
<scope_guardrail>
|
|
@@ -256,6 +289,7 @@ Write `.planning/phases/[padded_phase]-[phase_slug]/[padded_phase]-CONTEXT.md`:
|
|
|
256
289
|
# Phase [X]: [Name] - Context
|
|
257
290
|
|
|
258
291
|
**Gathered:** [date]
|
|
292
|
+
**Mode:** [standard | deep]
|
|
259
293
|
**Status:** Ready for planning
|
|
260
294
|
|
|
261
295
|
<domain>
|
|
@@ -368,6 +402,7 @@ Created: .planning/phases/[padded_phase]-[slug]/[padded_phase]-CONTEXT.md
|
|
|
368
402
|
|
|
369
403
|
💡 Ambitious scope? `/challenge` — stress-test the approach before planning
|
|
370
404
|
💡 Made important decisions? `/compound` — capture them while context is fresh
|
|
405
|
+
💡 Want to go deeper? Re-run `discuss-phase [X] --deep` for relentless branch-walking until full shared understanding
|
|
371
406
|
```
|
|
372
407
|
|
|
373
408
|
---
|
|
@@ -77,6 +77,57 @@ Docs to update: [M]
|
|
|
77
77
|
|
|
78
78
|
## Step 4: Write/Update Docs
|
|
79
79
|
|
|
80
|
+
Read `parallelization` from `.planning/config.json` (defaults to `false`).
|
|
81
|
+
|
|
82
|
+
**If `parallelization.enabled` is `true` (subagent mode — Claude Code, OpenCode, Codex):**
|
|
83
|
+
|
|
84
|
+
Spawn a dedicated doc-writer agent for each doc in the queue:
|
|
85
|
+
|
|
86
|
+
```
|
|
87
|
+
Task(
|
|
88
|
+
subagent_type="learnship-doc-writer",
|
|
89
|
+
description="Write/update [doc_name]",
|
|
90
|
+
prompt="
|
|
91
|
+
<agent_definition>
|
|
92
|
+
You are a learnship doc writer. Write and update project documentation grounded in the actual codebase.
|
|
93
|
+
Every claim must be verifiable against real code. Read source files BEFORE writing.
|
|
94
|
+
For updates: preserve the author's voice and structure. Only update stale sections.
|
|
95
|
+
</agent_definition>
|
|
96
|
+
|
|
97
|
+
<objective>
|
|
98
|
+
[Create/Update] [doc_name] for this project.
|
|
99
|
+
Read relevant source files first, then write the doc grounded in what you find.
|
|
100
|
+
</objective>
|
|
101
|
+
|
|
102
|
+
<files_to_read>
|
|
103
|
+
- [relevant source files for this doc]
|
|
104
|
+
- [existing doc if update mode]
|
|
105
|
+
</files_to_read>
|
|
106
|
+
|
|
107
|
+
<quality_gate>
|
|
108
|
+
- [ ] Every file path mentioned actually exists
|
|
109
|
+
- [ ] Every command shown actually works
|
|
110
|
+
- [ ] Config examples match the actual schema
|
|
111
|
+
- [ ] No stale references to renamed/removed items
|
|
112
|
+
</quality_gate>
|
|
113
|
+
"
|
|
114
|
+
)
|
|
115
|
+
```
|
|
116
|
+
|
|
117
|
+
**If `parallelization.enabled` is `false` (sequential mode):**
|
|
118
|
+
|
|
119
|
+
<persona_context>
|
|
120
|
+
You are now the **learnship doc writer**. Write documentation grounded in the actual codebase.
|
|
121
|
+
Every claim must be verifiable. Read source files BEFORE writing. For updates: preserve the author's voice, only fix stale sections.
|
|
122
|
+
</persona_context>
|
|
123
|
+
|
|
124
|
+
> **Announce persona** — print this before proceeding:
|
|
125
|
+
> ```bash
|
|
126
|
+
> printf "\n \033[36m learnship-doc-writer(Write documentation grounded in the actual codebase)\033[0m\n\n"
|
|
127
|
+
> ```
|
|
128
|
+
|
|
129
|
+
Read `@./agents/doc-writer.md` for the full persona definition.
|
|
130
|
+
|
|
80
131
|
For each doc in the queue:
|
|
81
132
|
|
|
82
133
|
### Create mode
|
|
@@ -94,6 +145,47 @@ git add [doc path]
|
|
|
94
145
|
|
|
95
146
|
## Step 5: Verify Docs Against Codebase
|
|
96
147
|
|
|
148
|
+
**If `parallelization.enabled` is `true` (subagent mode):**
|
|
149
|
+
|
|
150
|
+
Spawn a doc-verifier agent:
|
|
151
|
+
|
|
152
|
+
```
|
|
153
|
+
Task(
|
|
154
|
+
subagent_type="learnship-doc-verifier",
|
|
155
|
+
description="Verify documentation against codebase",
|
|
156
|
+
prompt="
|
|
157
|
+
<agent_definition>
|
|
158
|
+
You are a learnship doc verifier. Verify that documentation matches the live codebase.
|
|
159
|
+
Check file paths, commands, config examples, API endpoints. Flag stale, missing, or incorrect content.
|
|
160
|
+
Be thorough — false negatives (missed stale docs) are worse than false positives.
|
|
161
|
+
</agent_definition>
|
|
162
|
+
|
|
163
|
+
<objective>
|
|
164
|
+
Verify all written/updated docs against the live codebase.
|
|
165
|
+
Check every factual claim. Fix simple issues directly. Flag complex issues for manual review.
|
|
166
|
+
</objective>
|
|
167
|
+
|
|
168
|
+
<files_to_read>
|
|
169
|
+
- [list of docs written/updated in Step 4]
|
|
170
|
+
</files_to_read>
|
|
171
|
+
"
|
|
172
|
+
)
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
**If `parallelization.enabled` is `false` (sequential mode):**
|
|
176
|
+
|
|
177
|
+
<persona_context>
|
|
178
|
+
You are now the **learnship doc verifier**. Verify documentation matches the live codebase.
|
|
179
|
+
Check file paths, commands, config examples, API endpoints. Catch stale, missing, or incorrect content.
|
|
180
|
+
</persona_context>
|
|
181
|
+
|
|
182
|
+
> **Announce persona** — print this before proceeding:
|
|
183
|
+
> ```bash
|
|
184
|
+
> printf "\n \033[32m learnship-doc-verifier(Verify documentation matches the live codebase)\033[0m\n\n"
|
|
185
|
+
> ```
|
|
186
|
+
|
|
187
|
+
Read `@./agents/doc-verifier.md` for the full persona definition.
|
|
188
|
+
|
|
97
189
|
For each written/updated doc, verify factual claims:
|
|
98
190
|
|
|
99
191
|
- File paths mentioned in docs actually exist
|
|
@@ -202,6 +202,11 @@ Read task files, action, verify, and done fields. Implement exactly what the act
|
|
|
202
202
|
Commit atomically after each task. Never skip verification. Never modify code outside the task scope.
|
|
203
203
|
</persona_context>
|
|
204
204
|
|
|
205
|
+
> **Announce persona** — print this before proceeding:
|
|
206
|
+
> ```bash
|
|
207
|
+
> printf "\n \033[33m learnship-executor(Implement code from plans, one task at a time)\033[0m\n\n"
|
|
208
|
+
> ```
|
|
209
|
+
|
|
205
210
|
Read `@./agents/executor.md` for the full persona definition. For each plan in the wave:
|
|
206
211
|
|
|
207
212
|
Read the full plan file. Execute each task in sequence:
|
|
@@ -317,6 +322,11 @@ Every must_have from the plan must be met. Success criteria must be observable a
|
|
|
317
322
|
Flag gaps, missing coverage, and broken tests.
|
|
318
323
|
</persona_context>
|
|
319
324
|
|
|
325
|
+
> **Announce persona** — print this before proceeding:
|
|
326
|
+
> ```bash
|
|
327
|
+
> printf "\n \033[35m learnship-verifier(Check implementation against plan requirements)\033[0m\n\n"
|
|
328
|
+
> ```
|
|
329
|
+
|
|
320
330
|
Read `@./agents/verifier.md` for the full persona definition. Check:
|
|
321
331
|
- Do the `must_haves` from each plan's frontmatter match reality in the codebase?
|
|
322
332
|
- Are all requirement IDs for this phase accounted for?
|
|
@@ -96,6 +96,11 @@ Read task files, action, verify, and done fields. Implement exactly what the act
|
|
|
96
96
|
Commit atomically after each task. Never skip verification. Never modify code outside the task scope.
|
|
97
97
|
</persona_context>
|
|
98
98
|
|
|
99
|
+
> **Announce persona** — print this before proceeding:
|
|
100
|
+
> ```bash
|
|
101
|
+
> printf "\n \033[33m learnship-executor(Implement code from the plan, one task at a time)\033[0m\n\n"
|
|
102
|
+
> ```
|
|
103
|
+
|
|
99
104
|
Read `@./agents/executor.md` for the full persona definition. Execute each task in the plan sequentially:
|
|
100
105
|
|
|
101
106
|
1. Read the task's `<files>`, `<action>`, `<verify>`, and `<done>` fields
|
|
@@ -114,6 +114,11 @@ You are now the **learnship researcher**. Do a quick research pass on the ideati
|
|
|
114
114
|
Use WebSearch to discover current state. Tag confidence levels. Share findings before ideation begins.
|
|
115
115
|
</persona_context>
|
|
116
116
|
|
|
117
|
+
> **Announce persona** — print this before proceeding:
|
|
118
|
+
> ```bash
|
|
119
|
+
> printf "\n \033[36m learnship-researcher(Do a quick research pass on the ideation domain)\033[0m\n\n"
|
|
120
|
+
> ```
|
|
121
|
+
|
|
117
122
|
If parallelization is false, read `@./agents/researcher.md` for the full persona definition. Do a quick research pass. Share findings and continue.
|
|
118
123
|
|
|
119
124
|
**Crystallize outputs (after 3-6 exchanges):**
|
|
@@ -209,6 +214,11 @@ You are now the **learnship ideation agent**. Generate ideas across multiple cre
|
|
|
209
214
|
Quantity first, quality later. Push past the obvious. Use contrarian thinking and cross-domain analogies.
|
|
210
215
|
</persona_context>
|
|
211
216
|
|
|
217
|
+
> **Announce persona** — print this before proceeding:
|
|
218
|
+
> ```bash
|
|
219
|
+
> printf "\n \033[35m learnship-ideation-agent(Generate ideas across multiple creative frames)\033[0m\n\n"
|
|
220
|
+
> ```
|
|
221
|
+
|
|
212
222
|
Read `@./agents/ideation-agent.md` for the full persona definition. Generate 15-25 ideas across all four frames sequentially.
|
|
213
223
|
|
|
214
224
|
## Step 5: Deduplicate & Filter
|