learnship 2.0.11 → 2.1.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 +59 -14
- package/SKILL.md +24 -2
- package/agents/learnship-doc-writer.md +63 -0
- package/agents/learnship-security-auditor.md +67 -0
- package/bin/install.js +2 -0
- package/commands/learnship/discuss-phase.md +1 -1
- package/commands/learnship/docs-update.md +22 -0
- package/commands/learnship/execute-phase.md +2 -6
- package/commands/learnship/extract-learnings.md +22 -0
- package/commands/learnship/forensics.md +21 -0
- package/commands/learnship/help.md +2 -1
- package/commands/learnship/ideate.md +1 -1
- package/commands/learnship/milestone-summary.md +22 -0
- package/commands/learnship/note.md +22 -0
- package/commands/learnship/plan-phase.md +0 -1
- package/commands/learnship/quick.md +1 -5
- package/commands/learnship/secure-phase.md +23 -0
- package/commands/learnship/session-report.md +21 -0
- package/commands/learnship/undo.md +22 -0
- package/commands/learnship/verify-work.md +1 -1
- package/cursor-rules/learnship.mdc +12 -2
- package/gemini-extension.json +2 -2
- package/hooks/session-start +12 -1
- package/learnship/agents/doc-writer.md +63 -0
- package/learnship/agents/security-auditor.md +67 -0
- package/learnship/references/common-bug-patterns.md +92 -0
- package/learnship/references/context-budget.md +49 -0
- package/learnship/references/domain-probes.md +133 -0
- package/learnship/references/gates.md +72 -0
- package/learnship/references/planning-config.md +99 -9
- package/learnship/references/thinking-models.md +61 -0
- package/learnship/references/universal-anti-patterns.md +51 -0
- package/learnship/templates/agents.md +3 -0
- package/learnship/templates/context.md +207 -32
- package/learnship/templates/discussion-log.md +49 -0
- package/learnship/templates/security.md +61 -0
- package/learnship/templates/ui-spec.md +107 -0
- package/learnship/workflows/complete-milestone.md +4 -5
- package/learnship/workflows/compound.md +2 -0
- package/learnship/workflows/debug.md +2 -0
- package/learnship/workflows/discuss-phase.md +73 -15
- package/learnship/workflows/docs-update.md +144 -0
- package/learnship/workflows/execute-phase.md +35 -6
- package/learnship/workflows/extract-learnings.md +161 -0
- package/learnship/workflows/forensics.md +118 -0
- package/learnship/workflows/help.md +20 -2
- package/learnship/workflows/ideate.md +63 -4
- package/learnship/workflows/ls.md +1 -1
- package/learnship/workflows/milestone-summary.md +150 -0
- package/learnship/workflows/new-project.md +30 -3
- package/learnship/workflows/next.md +1 -1
- package/learnship/workflows/note.md +110 -0
- package/learnship/workflows/pause-work.md +2 -0
- package/learnship/workflows/plan-phase.md +17 -2
- package/learnship/workflows/quick.md +28 -8
- package/learnship/workflows/review.md +1 -0
- package/learnship/workflows/secure-phase.md +147 -0
- package/learnship/workflows/session-report.md +133 -0
- package/learnship/workflows/settings.md +40 -46
- package/learnship/workflows/ship.md +2 -0
- package/learnship/workflows/undo.md +151 -0
- package/learnship/workflows/verify-work.md +36 -4
- package/package.json +1 -1
- package/references/common-bug-patterns.md +92 -0
- package/references/context-budget.md +49 -0
- package/references/domain-probes.md +133 -0
- package/references/gates.md +72 -0
- package/references/planning-config.md +139 -0
- package/references/solution-schema.md +159 -0
- package/references/thinking-models.md +61 -0
- package/references/universal-anti-patterns.md +51 -0
- package/templates/agents.md +80 -7
- package/templates/config.json +28 -3
- package/templates/context.md +207 -32
- package/templates/discussion-log.md +49 -0
- package/templates/security.md +61 -0
- package/templates/ui-spec.md +107 -0
|
@@ -0,0 +1,118 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Post-mortem investigation for failed or stuck workflows — read-only diagnostic report
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Forensics
|
|
6
|
+
|
|
7
|
+
Post-mortem investigation for failed or stuck workflows. Analyzes git history, `.planning/` artifacts, and file system state to detect anomalies and generate a structured diagnostic report.
|
|
8
|
+
|
|
9
|
+
**Usage:** `forensics` or `forensics [problem description]`
|
|
10
|
+
|
|
11
|
+
**Principle:** This is a read-only investigation. Do not modify project files. Only write the forensic report.
|
|
12
|
+
|
|
13
|
+
## Step 1: Get Problem Description
|
|
14
|
+
|
|
15
|
+
If a description was provided as an argument, use it. Otherwise ask:
|
|
16
|
+
|
|
17
|
+
> "What went wrong? Describe the issue."
|
|
18
|
+
|
|
19
|
+
Record the problem description for the report.
|
|
20
|
+
|
|
21
|
+
## Step 2: Gather Evidence
|
|
22
|
+
|
|
23
|
+
Collect data from all available sources. Missing sources are fine — adapt to what exists.
|
|
24
|
+
|
|
25
|
+
### 2a. Git History
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
git log --oneline -30
|
|
29
|
+
git log --format="%H %ai %s" -30
|
|
30
|
+
git log --name-only --format="" -20 | sort | uniq -c | sort -rn | head -20
|
|
31
|
+
git status --short
|
|
32
|
+
git diff --stat
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Record:
|
|
36
|
+
- Commit timeline (dates, messages, frequency)
|
|
37
|
+
- Most-edited files (potential stuck-loop indicator)
|
|
38
|
+
- Uncommitted changes (potential crash/interruption indicator)
|
|
39
|
+
|
|
40
|
+
### 2b. Planning State
|
|
41
|
+
|
|
42
|
+
Read these files if they exist:
|
|
43
|
+
- `.planning/STATE.md` — current milestone, phase, progress, blockers
|
|
44
|
+
- `.planning/ROADMAP.md` — phase list with status
|
|
45
|
+
- `.planning/config.json` — workflow configuration
|
|
46
|
+
|
|
47
|
+
### 2c. Phase Artifacts
|
|
48
|
+
|
|
49
|
+
```bash
|
|
50
|
+
ls .planning/phases/*/
|
|
51
|
+
```
|
|
52
|
+
|
|
53
|
+
For each phase, check which artifacts exist (PLAN, SUMMARY, VERIFICATION, CONTEXT, RESEARCH, UAT). Track which phases have complete artifact sets vs gaps.
|
|
54
|
+
|
|
55
|
+
## Step 3: Analyze Anomalies
|
|
56
|
+
|
|
57
|
+
| Pattern | Indicates | Severity |
|
|
58
|
+
|---------|-----------|----------|
|
|
59
|
+
| Same file edited 5+ times in 20 commits | Stuck execution loop | High |
|
|
60
|
+
| PLAN.md exists but no SUMMARY.md | Execution interrupted | Medium |
|
|
61
|
+
| Large time gap between consecutive commits | Session interrupted or context exhausted | Medium |
|
|
62
|
+
| VERIFICATION.md with `gaps_found` | Phase incomplete | Medium |
|
|
63
|
+
| STATE.md references non-existent phase dir | State/filesystem mismatch | High |
|
|
64
|
+
| Uncommitted changes + old timestamps | Abandoned session | Low |
|
|
65
|
+
|
|
66
|
+
## Step 4: Determine Root Cause
|
|
67
|
+
|
|
68
|
+
| Category | Description | Recovery |
|
|
69
|
+
|----------|-------------|----------|
|
|
70
|
+
| **Execution stuck** | Agent looped on same files/tests | Re-run with `--wave` or fix trigger |
|
|
71
|
+
| **Context exhaustion** | Agent ran out of context mid-phase | Break into smaller plans, re-run |
|
|
72
|
+
| **Session interrupted** | Human or system terminated mid-work | Resume with `/resume-work` |
|
|
73
|
+
| **State mismatch** | STATE.md doesn't match filesystem | Manual STATE.md correction |
|
|
74
|
+
| **Plan deficiency** | Plans were wrong | Re-plan with `plan-phase --gaps` |
|
|
75
|
+
| **External failure** | API, dependency, or environment issue | Fix external issue, re-run |
|
|
76
|
+
|
|
77
|
+
## Step 5: Write Forensic Report
|
|
78
|
+
|
|
79
|
+
```bash
|
|
80
|
+
node -e "require('fs').mkdirSync('.planning/reports',{recursive:true})"
|
|
81
|
+
```
|
|
82
|
+
|
|
83
|
+
Write `.planning/reports/FORENSIC-[YYYY-MM-DD].md` with: evidence summary, anomalies detected, root cause (category + explanation + confidence), recommended recovery steps, and prevention advice.
|
|
84
|
+
|
|
85
|
+
Commit:
|
|
86
|
+
```bash
|
|
87
|
+
git add .planning/reports/
|
|
88
|
+
git commit -m "docs: forensic report"
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## Step 6: Present Findings
|
|
92
|
+
|
|
93
|
+
```
|
|
94
|
+
learnship > FORENSIC REPORT COMPLETE
|
|
95
|
+
|
|
96
|
+
Root Cause: [category] — [one-line explanation]
|
|
97
|
+
Confidence: [high/medium/low]
|
|
98
|
+
|
|
99
|
+
Recovery:
|
|
100
|
+
1. [action]
|
|
101
|
+
2. [action]
|
|
102
|
+
|
|
103
|
+
Report: .planning/reports/FORENSIC-[date].md
|
|
104
|
+
```
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Learning Checkpoint
|
|
109
|
+
|
|
110
|
+
Read `learning_mode` from `.planning/config.json`.
|
|
111
|
+
|
|
112
|
+
**If `auto`:**
|
|
113
|
+
|
|
114
|
+
> **Learning moment:** Failures are high-signal learning opportunities:
|
|
115
|
+
>
|
|
116
|
+
> `@agentic-learning reflect` — What pattern caused this failure? What would you watch for next time? Structured reflection on failures builds diagnostic intuition.
|
|
117
|
+
|
|
118
|
+
**If `manual`:** Add quietly: *"Tip: `@agentic-learning reflect` to extract lessons from this failure."*
|
|
@@ -16,7 +16,7 @@ You only need to remember **5 commands** to use learnship effectively:
|
|
|
16
16
|
| `/next` | Auto-pilot — reads state and runs the right workflow for you |
|
|
17
17
|
| `/new-project` | Starting a brand new project |
|
|
18
18
|
| `/quick "..."` | One-off task with atomic commit, no ceremony |
|
|
19
|
-
| `/help` | This screen — see all
|
|
19
|
+
| `/help` | This screen — see all 57 commands |
|
|
20
20
|
|
|
21
21
|
Everything else below is discoverable from `/ls` as you go.
|
|
22
22
|
|
|
@@ -87,9 +87,11 @@ Everything else below is discoverable from `/ls` as you go.
|
|
|
87
87
|
| `/review [mode]` | Multi-persona code review (correctness, testing, security, performance, maintainability) |
|
|
88
88
|
| `/challenge [description]` | Product + engineering challenge gate — is this worth building? |
|
|
89
89
|
| `/ship` | Ship pipeline: test → lint → commit → push → PR |
|
|
90
|
-
| `/ideate [focus]` | Codebase-grounded divergent thinking — discover what to work on |
|
|
90
|
+
| `/ideate [focus]` | Codebase-grounded divergent thinking — discover what to work on (`--explore` for Socratic mode) |
|
|
91
91
|
| `/guard [scope\|off]` | Safety mode — warn on destructive commands, lock file scope |
|
|
92
92
|
| `/sync-docs` | Detect stale documentation after code changes |
|
|
93
|
+
| `/docs-update` | Generate, update, and verify project documentation |
|
|
94
|
+
| `/secure-phase [N]` | Per-phase STRIDE security verification |
|
|
93
95
|
|
|
94
96
|
### Decision Intelligence — institutional memory
|
|
95
97
|
|
|
@@ -99,6 +101,22 @@ Everything else below is discoverable from `/ls` as you go.
|
|
|
99
101
|
| `/knowledge-base` | Aggregate all decisions + lessons into searchable KNOWLEDGE.md |
|
|
100
102
|
| `/knowledge-base search [query]` | Search the project knowledge base |
|
|
101
103
|
|
|
104
|
+
### Recovery — when things go wrong
|
|
105
|
+
|
|
106
|
+
| Workflow | What it does |
|
|
107
|
+
|----------|-------------|
|
|
108
|
+
| `/forensics [problem]` | Post-mortem investigation for failed/stuck workflows (read-only) |
|
|
109
|
+
| `/undo --last N\|--phase NN\|--plan NN-MM` | Safe git revert — preserves history, checks dependencies |
|
|
110
|
+
|
|
111
|
+
### Session — capture and report
|
|
112
|
+
|
|
113
|
+
| Workflow | What it does |
|
|
114
|
+
|----------|-------------|
|
|
115
|
+
| `/note [text]` | Zero-friction idea capture — no questions, just write |
|
|
116
|
+
| `/session-report` | Post-session summary for stakeholder sharing |
|
|
117
|
+
| `/extract-learnings [N]` | Structured learning extraction from phase artifacts |
|
|
118
|
+
| `/milestone-summary [version]` | Comprehensive milestone summary for team onboarding |
|
|
119
|
+
|
|
102
120
|
### Milestone Intelligence — reflect and hand off
|
|
103
121
|
|
|
104
122
|
| Workflow | What it does |
|
|
@@ -4,10 +4,11 @@ description: Codebase-grounded divergent thinking — discover what is worth wor
|
|
|
4
4
|
|
|
5
5
|
# Ideate
|
|
6
6
|
|
|
7
|
-
Codebase-grounded divergent ideation.
|
|
7
|
+
Codebase-grounded divergent ideation with Socratic exploration. Two modes: **scan mode** (default) scans the actual codebase for hotspots and generates ranked improvement ideas. **Explore mode** (`--explore`) uses Socratic questioning to help you think through an idea before committing to artifacts.
|
|
8
8
|
|
|
9
|
-
**Usage:** `ideate` — open-ended ideation on the current project
|
|
9
|
+
**Usage:** `ideate` — open-ended scan-based ideation on the current project
|
|
10
10
|
**Usage:** `ideate [focus]` — focused ideation on a specific area, concept, or constraint
|
|
11
|
+
**Usage:** `ideate --explore [topic]` — Socratic exploration of an idea with mid-conversation research
|
|
11
12
|
|
|
12
13
|
**Sequencing:** Run between milestones — after `/complete-milestone`, before `/discuss-milestone` or `/new-milestone`. Requires an existing project with `AGENTS.md` and `.planning/`.
|
|
13
14
|
|
|
@@ -26,7 +27,14 @@ ls AGENTS.md 2>/dev/null && ls .planning/PROJECT.md 2>/dev/null
|
|
|
26
27
|
|
|
27
28
|
**If project exists:** Continue.
|
|
28
29
|
|
|
29
|
-
## Step 2:
|
|
30
|
+
## Step 2: Mode Selection
|
|
31
|
+
|
|
32
|
+
Parse arguments for `--explore` flag.
|
|
33
|
+
|
|
34
|
+
**If `--explore` is present:** Jump to Step 2b (Socratic Exploration).
|
|
35
|
+
**Otherwise:** Continue to Step 2a (Scan Mode).
|
|
36
|
+
|
|
37
|
+
## Step 2a: Scope (Scan Mode)
|
|
30
38
|
|
|
31
39
|
If a focus argument was provided, use it as the ideation lens.
|
|
32
40
|
If no argument, proceed with open-ended ideation.
|
|
@@ -38,7 +46,57 @@ find .planning/ -name "*-ideation-*.md" -mtime -30 2>/dev/null
|
|
|
38
46
|
|
|
39
47
|
If recent ideation exists, ask: "Found recent ideation work. Resume from it, or start fresh?"
|
|
40
48
|
|
|
41
|
-
## Step
|
|
49
|
+
## Step 2b: Socratic Exploration (only with `--explore`)
|
|
50
|
+
|
|
51
|
+
If a topic was provided, acknowledge it and begin exploring:
|
|
52
|
+
```
|
|
53
|
+
## Explore: {topic}
|
|
54
|
+
|
|
55
|
+
Let's think through this together. I'll ask questions to help clarify the idea
|
|
56
|
+
before we commit to any artifacts.
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
If no topic, ask:
|
|
60
|
+
```
|
|
61
|
+
## Explore
|
|
62
|
+
|
|
63
|
+
What's on your mind? This could be a feature idea, an architectural question,
|
|
64
|
+
a problem you're trying to solve, or something you're not sure about yet.
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
**Conversation rules (2-5 exchanges):**
|
|
68
|
+
- Ask **one question at a time** (never a list of questions)
|
|
69
|
+
- Questions should probe: constraints, tradeoffs, users, scope, dependencies, risks
|
|
70
|
+
- Listen for signals: "or" / "versus" / "tradeoff" indicate competing priorities worth exploring
|
|
71
|
+
- Reflect back what you hear to confirm understanding before moving forward
|
|
72
|
+
- **Follow the user's energy** — if they're excited about one aspect, go deeper there
|
|
73
|
+
|
|
74
|
+
**Mid-conversation research offer (after 2-3 exchanges):**
|
|
75
|
+
|
|
76
|
+
If the conversation surfaces factual questions, technology comparisons, or unknowns:
|
|
77
|
+
```
|
|
78
|
+
This touches on [specific question]. Want me to do a quick research pass before we continue?
|
|
79
|
+
This would take ~30 seconds and might surface useful context.
|
|
80
|
+
|
|
81
|
+
[Yes, research this] / [No, let's keep exploring]
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
If yes and parallelization is enabled, spawn a research agent. Otherwise do an inline research pass. Share findings and continue.
|
|
85
|
+
|
|
86
|
+
**Crystallize outputs (after 3-6 exchanges):**
|
|
87
|
+
|
|
88
|
+
When the conversation reaches natural conclusions, propose **up to 4 outputs**:
|
|
89
|
+
|
|
90
|
+
| Type | Destination | When to suggest |
|
|
91
|
+
|------|-------------|----------------|
|
|
92
|
+
| Note | `.planning/notes/{slug}.md` | Observations, context, decisions worth remembering |
|
|
93
|
+
| Todo | via `/add-todo` | Concrete actionable tasks identified |
|
|
94
|
+
| Decision | via `/decision-log` | Architectural or scope decisions made |
|
|
95
|
+
| Phase proposal | via `/add-phase` | Idea crystallized into a deliverable phase |
|
|
96
|
+
|
|
97
|
+
Write selected outputs, then jump to Step 7 (Present Results) with a tailored summary.
|
|
98
|
+
|
|
99
|
+
## Step 3: Codebase Scan (Scan Mode)
|
|
42
100
|
|
|
43
101
|
Gather grounding context before generating ideas:
|
|
44
102
|
|
|
@@ -175,6 +233,7 @@ git commit -m "docs: ideation — [focus or 'open-ended'] ([N] survivors)"
|
|
|
175
233
|
Present the "What's next?" options using the platform's blocking question tool:
|
|
176
234
|
|
|
177
235
|
- **Deep-dive an idea** → expand on the selected idea with more detail
|
|
236
|
+
- **Explore an idea** → run `ideate --explore [idea]` for Socratic deep-dive
|
|
178
237
|
- **Add to current milestone** → feed into `/add-phase`
|
|
179
238
|
- **Start a new milestone** → feed into `/discuss-milestone` then `/new-milestone`
|
|
180
239
|
- **Challenge an idea** → run `/challenge [idea]` to stress-test it
|
|
@@ -148,4 +148,4 @@ If the user says yes (or "go", "do it", "run it", "proceed") — immediately inv
|
|
|
148
148
|
|
|
149
149
|
- `/ls` is an alias for the status + routing logic in `progress`. Use either.
|
|
150
150
|
- For full auto-pilot (no prompt), use `/next` instead.
|
|
151
|
-
- To see all
|
|
151
|
+
- To see all 57 available commands: `/help`
|
|
@@ -0,0 +1,150 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Generate a comprehensive milestone summary for team onboarding — a new contributor reads it and understands the project
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Milestone Summary
|
|
6
|
+
|
|
7
|
+
Generate a comprehensive, human-friendly project summary from completed milestone artifacts. Designed for team onboarding — a new contributor can read the output and understand the entire project.
|
|
8
|
+
|
|
9
|
+
**Usage:** `milestone-summary` or `milestone-summary [version]`
|
|
10
|
+
|
|
11
|
+
## Step 1: Resolve Version
|
|
12
|
+
|
|
13
|
+
If a version was provided, use it. Otherwise:
|
|
14
|
+
1. Check `.planning/STATE.md` for current milestone version
|
|
15
|
+
2. Check `.planning/milestones/` for the latest archived version
|
|
16
|
+
3. If nothing found: "No milestone found. Run `/new-project` or `/new-milestone` first."
|
|
17
|
+
|
|
18
|
+
## Step 2: Locate Artifacts
|
|
19
|
+
|
|
20
|
+
**Archived milestone** (`.planning/milestones/v{VERSION}-ROADMAP.md` exists):
|
|
21
|
+
```
|
|
22
|
+
ROADMAP_PATH=".planning/milestones/v${VERSION}-ROADMAP.md"
|
|
23
|
+
REQUIREMENTS_PATH=".planning/milestones/v${VERSION}-REQUIREMENTS.md"
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
**Current/in-progress milestone** (no archive yet):
|
|
27
|
+
```
|
|
28
|
+
ROADMAP_PATH=".planning/ROADMAP.md"
|
|
29
|
+
REQUIREMENTS_PATH=".planning/REQUIREMENTS.md"
|
|
30
|
+
```
|
|
31
|
+
|
|
32
|
+
**Always available:**
|
|
33
|
+
```
|
|
34
|
+
PROJECT_PATH=".planning/PROJECT.md"
|
|
35
|
+
STATE_PATH=".planning/STATE.md"
|
|
36
|
+
```
|
|
37
|
+
|
|
38
|
+
Read all files that exist. Missing files are fine — the summary adapts.
|
|
39
|
+
|
|
40
|
+
## Step 3: Discover Phase Artifacts
|
|
41
|
+
|
|
42
|
+
For each phase directory in `.planning/phases/`:
|
|
43
|
+
|
|
44
|
+
```bash
|
|
45
|
+
ls .planning/phases/*/
|
|
46
|
+
```
|
|
47
|
+
|
|
48
|
+
For each phase, read:
|
|
49
|
+
- CONTEXT.md — what was decided
|
|
50
|
+
- SUMMARY.md files — what was built
|
|
51
|
+
- VERIFICATION.md — quality status
|
|
52
|
+
- UAT.md — test results
|
|
53
|
+
- LEARNINGS.md — extracted learnings (if exists)
|
|
54
|
+
- SECURITY.md — security status (if exists)
|
|
55
|
+
|
|
56
|
+
## Step 4: Generate Summary
|
|
57
|
+
|
|
58
|
+
Write `.planning/MILESTONE-SUMMARY-v{VERSION}.md`:
|
|
59
|
+
|
|
60
|
+
```markdown
|
|
61
|
+
# Milestone {VERSION}: {Name} — Summary
|
|
62
|
+
|
|
63
|
+
**Generated:** [date]
|
|
64
|
+
**Status:** [complete / in-progress]
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Project Overview
|
|
69
|
+
|
|
70
|
+
[From PROJECT.md — 3-5 sentences describing what the project is and why it exists]
|
|
71
|
+
|
|
72
|
+
## Milestone Goal
|
|
73
|
+
|
|
74
|
+
[From ROADMAP.md — what this milestone set out to deliver]
|
|
75
|
+
|
|
76
|
+
## What Was Built
|
|
77
|
+
|
|
78
|
+
### Phase 1: [Name]
|
|
79
|
+
**Goal:** [from ROADMAP.md]
|
|
80
|
+
**Status:** [complete/partial]
|
|
81
|
+
**Key deliverables:**
|
|
82
|
+
- [from SUMMARY.md files — what was actually built]
|
|
83
|
+
|
|
84
|
+
**Decisions made:**
|
|
85
|
+
- [from CONTEXT.md — key implementation choices]
|
|
86
|
+
|
|
87
|
+
### Phase 2: [Name]
|
|
88
|
+
[...]
|
|
89
|
+
|
|
90
|
+
## Architecture
|
|
91
|
+
|
|
92
|
+
[Synthesized from AGENTS.md project structure, phase summaries, and any ARCHITECTURE.md]
|
|
93
|
+
|
|
94
|
+
## Key Decisions
|
|
95
|
+
|
|
96
|
+
[Aggregated from DECISIONS.md and phase CONTEXT.md files — the top 5-10 decisions that shaped the project]
|
|
97
|
+
|
|
98
|
+
## Lessons Learned
|
|
99
|
+
|
|
100
|
+
[Aggregated from LEARNINGS.md files if they exist, or synthesized from SUMMARYs]
|
|
101
|
+
|
|
102
|
+
## Current State
|
|
103
|
+
|
|
104
|
+
- **Last phase completed:** [N]
|
|
105
|
+
- **Open items:** [from STATE.md blockers]
|
|
106
|
+
- **Test status:** [from UAT/VERIFICATION files]
|
|
107
|
+
- **Security status:** [from SECURITY files if they exist]
|
|
108
|
+
|
|
109
|
+
## How to Get Started
|
|
110
|
+
|
|
111
|
+
[Practical instructions: how to clone, install deps, run the dev server, run tests]
|
|
112
|
+
|
|
113
|
+
---
|
|
114
|
+
|
|
115
|
+
*Generated by learnship milestone-summary*
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## Step 5: Commit and Present
|
|
119
|
+
|
|
120
|
+
```bash
|
|
121
|
+
git add ".planning/MILESTONE-SUMMARY-v${VERSION}.md"
|
|
122
|
+
git commit -m "docs: milestone ${VERSION} summary"
|
|
123
|
+
```
|
|
124
|
+
|
|
125
|
+
```
|
|
126
|
+
learnship > MILESTONE SUMMARY COMPLETE
|
|
127
|
+
|
|
128
|
+
Milestone {VERSION}: {Name}
|
|
129
|
+
Phases covered: [N]
|
|
130
|
+
Decisions documented: [N]
|
|
131
|
+
Lessons captured: [N]
|
|
132
|
+
|
|
133
|
+
Report: .planning/MILESTONE-SUMMARY-v{VERSION}.md
|
|
134
|
+
|
|
135
|
+
Share this with new team members or stakeholders for a complete project overview.
|
|
136
|
+
```
|
|
137
|
+
|
|
138
|
+
---
|
|
139
|
+
|
|
140
|
+
## Learning Checkpoint
|
|
141
|
+
|
|
142
|
+
Read `learning_mode` from `.planning/config.json`.
|
|
143
|
+
|
|
144
|
+
**If `auto`:**
|
|
145
|
+
|
|
146
|
+
> **Learning moment:** Summarizing a milestone is a natural point for comprehensive reflection:
|
|
147
|
+
>
|
|
148
|
+
> `@agentic-learning reflect` — What was the most significant thing you learned across this entire milestone? What would you do differently if starting over? Milestone-level reflection reveals patterns invisible at the phase level.
|
|
149
|
+
|
|
150
|
+
**If `manual`:** Add quietly: *"Tip: `@agentic-learning reflect` for milestone-level learning consolidation."*
|
|
@@ -152,7 +152,6 @@ Create `.planning/config.json` with all settings:
|
|
|
152
152
|
"granularity": "coarse|standard|fine",
|
|
153
153
|
"model_profile": "quality|balanced|budget",
|
|
154
154
|
"learning_mode": "auto|manual",
|
|
155
|
-
"parallelization": false|true,
|
|
156
155
|
"test_first": false|true,
|
|
157
156
|
"planning": {
|
|
158
157
|
"commit_docs": true|false,
|
|
@@ -165,7 +164,30 @@ Create `.planning/config.json` with all settings:
|
|
|
165
164
|
"verifier": true|false,
|
|
166
165
|
"validation": true|false,
|
|
167
166
|
"review": true|false,
|
|
168
|
-
"solutions_search": true|false
|
|
167
|
+
"solutions_search": true|false,
|
|
168
|
+
"security_enforcement": true|false,
|
|
169
|
+
"discuss_mode": "discuss",
|
|
170
|
+
"tdd_mode": false|true
|
|
171
|
+
},
|
|
172
|
+
"parallelization": {
|
|
173
|
+
"enabled": false|true,
|
|
174
|
+
"plan_level": true,
|
|
175
|
+
"task_level": false,
|
|
176
|
+
"max_concurrent_agents": 5,
|
|
177
|
+
"min_plans_for_parallel": 2
|
|
178
|
+
},
|
|
179
|
+
"gates": {
|
|
180
|
+
"confirm_project": true,
|
|
181
|
+
"confirm_phases": true,
|
|
182
|
+
"confirm_roadmap": true,
|
|
183
|
+
"confirm_plan": true,
|
|
184
|
+
"execute_next_plan": true,
|
|
185
|
+
"issues_review": true,
|
|
186
|
+
"confirm_transition": true
|
|
187
|
+
},
|
|
188
|
+
"safety": {
|
|
189
|
+
"always_confirm_destructive": true,
|
|
190
|
+
"always_confirm_external_services": true
|
|
169
191
|
},
|
|
170
192
|
"review": {
|
|
171
193
|
"auto_after_verify": false|true
|
|
@@ -175,6 +197,9 @@ Create `.planning/config.json` with all settings:
|
|
|
175
197
|
"conventional_commits": true|false,
|
|
176
198
|
"pr_template": true|false
|
|
177
199
|
},
|
|
200
|
+
"hooks": {
|
|
201
|
+
"context_warnings": true
|
|
202
|
+
},
|
|
178
203
|
"git": {
|
|
179
204
|
"branching_strategy": "none|phase|milestone",
|
|
180
205
|
"phase_branch_template": "phase-{phase}-{slug}",
|
|
@@ -183,6 +208,8 @@ Create `.planning/config.json` with all settings:
|
|
|
183
208
|
}
|
|
184
209
|
```
|
|
185
210
|
|
|
211
|
+
**Note:** The `parallelization` field is now an object (not a flat boolean). Legacy flat `"parallelization": true` is still honored for backward compatibility. The `gates` and `safety` sections use sensible defaults — only ask users about them if they specifically want to customize.
|
|
212
|
+
|
|
186
213
|
If `planning.commit_docs` is false, add `.planning/` to `.gitignore`:
|
|
187
214
|
```bash
|
|
188
215
|
echo ".planning/" >> .gitignore
|
|
@@ -257,7 +284,7 @@ Verify internally: do you have `ANSWER_1`, `ANSWER_2`, `ANSWER_3`, and `ANSWER_4
|
|
|
257
284
|
- **Write PROJECT.md** → proceed to Step 4
|
|
258
285
|
- **More to cover** → continue asking follow-ups, then re-ask this gate question
|
|
259
286
|
|
|
260
|
-
Use the questioning techniques from `@./references/questioning.md` to shape the follow-up questions.
|
|
287
|
+
Use the questioning techniques from `@./references/questioning.md` and domain-aware probes from `@./references/domain-probes.md` to shape the follow-up questions. When the user mentions a known domain (auth, real-time, dashboard, API, database, search, file uploads, caching, testing, deployment, AI/ML), use the relevant probes to ask sharper questions.
|
|
261
288
|
|
|
262
289
|
## Step 4: Write PROJECT.md
|
|
263
290
|
|
|
@@ -102,4 +102,4 @@ If no — show `/ls` output so the user can choose manually.
|
|
|
102
102
|
|
|
103
103
|
- `/next` always confirms before acting (never fully silent).
|
|
104
104
|
- For status-only with manual choice, use `/ls` instead.
|
|
105
|
-
- To see all
|
|
105
|
+
- To see all 57 available commands: `/help`
|
|
@@ -0,0 +1,110 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Zero-friction idea capture — one write, one confirmation line, no questions
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
# Note
|
|
6
|
+
|
|
7
|
+
Zero-friction idea capture. One write call, one confirmation line. No questions, no prompts. Runs inline — no subagents.
|
|
8
|
+
|
|
9
|
+
**Usage:**
|
|
10
|
+
- `note [text]` — save a note
|
|
11
|
+
- `note list` — show all notes
|
|
12
|
+
- `note promote [N]` — promote note N to a todo or decision
|
|
13
|
+
|
|
14
|
+
Notes are different from todos: **notes are observations**, todos are actions.
|
|
15
|
+
|
|
16
|
+
## Step 1: Parse Subcommand
|
|
17
|
+
|
|
18
|
+
| Condition | Subcommand |
|
|
19
|
+
|-----------|------------|
|
|
20
|
+
| Arguments are exactly `list` (case-insensitive) | **list** |
|
|
21
|
+
| Arguments are exactly `promote [N]` where N is a number | **promote** |
|
|
22
|
+
| Arguments are empty (no text at all) | **list** |
|
|
23
|
+
| Anything else | **append** (the text IS the note) |
|
|
24
|
+
|
|
25
|
+
**Critical:** `list` is only a subcommand when it's the ENTIRE argument. `note list of groceries` saves a note with text "list of groceries".
|
|
26
|
+
|
|
27
|
+
## Step 2: Determine Scope
|
|
28
|
+
|
|
29
|
+
- **Project scope** (default): `.planning/notes/` — used when `.planning/` exists
|
|
30
|
+
- **Global scope** (fallback): use project scope if `.planning/` exists, otherwise tell user no project is initialized
|
|
31
|
+
|
|
32
|
+
**Important:** Do NOT create `.planning/` if it doesn't exist. Fall back gracefully.
|
|
33
|
+
|
|
34
|
+
## Step 3a: Append — Create a Timestamped Note
|
|
35
|
+
|
|
36
|
+
1. Ensure notes directory exists:
|
|
37
|
+
```bash
|
|
38
|
+
node -e "require('fs').mkdirSync('.planning/notes',{recursive:true})"
|
|
39
|
+
```
|
|
40
|
+
|
|
41
|
+
2. Generate slug: first ~4 meaningful words, lowercase, hyphen-separated
|
|
42
|
+
3. Generate filename: `{YYYY-MM-DD}-{slug}.md`
|
|
43
|
+
- If file exists, append `-2`, `-3`, etc.
|
|
44
|
+
|
|
45
|
+
4. Write the file:
|
|
46
|
+
```markdown
|
|
47
|
+
---
|
|
48
|
+
date: "YYYY-MM-DD HH:mm"
|
|
49
|
+
promoted: false
|
|
50
|
+
---
|
|
51
|
+
|
|
52
|
+
{note text verbatim}
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
5. Confirm with exactly one line: `Noted: {note text}`
|
|
56
|
+
|
|
57
|
+
**Constraints:**
|
|
58
|
+
- **Never modify the note text** — capture verbatim, including typos
|
|
59
|
+
- **Never ask questions** — just write and confirm
|
|
60
|
+
|
|
61
|
+
## Step 3b: List — Show All Notes
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
ls .planning/notes/*.md 2>/dev/null
|
|
65
|
+
```
|
|
66
|
+
|
|
67
|
+
For each file, read frontmatter to get `date` and `promoted` status. Sort by date, number sequentially.
|
|
68
|
+
|
|
69
|
+
Display:
|
|
70
|
+
```
|
|
71
|
+
## Notes
|
|
72
|
+
|
|
73
|
+
# | Date | Note
|
|
74
|
+
----|------------|------
|
|
75
|
+
1 | 2025-01-20 | [first line of note text]
|
|
76
|
+
2 | 2025-01-21 | [first line of note text]
|
|
77
|
+
*3 | 2025-01-22 | [promoted — first line]
|
|
78
|
+
|
|
79
|
+
[N] notes ([M] active, [K] promoted)
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
Promoted notes shown with `*` prefix and dimmed.
|
|
83
|
+
|
|
84
|
+
## Step 3c: Promote — Convert Note to Action
|
|
85
|
+
|
|
86
|
+
Read note N from the numbered list. Display the full note text.
|
|
87
|
+
|
|
88
|
+
Ask: "Promote this note to:"
|
|
89
|
+
- **Todo** — create via `/add-todo [note text]`
|
|
90
|
+
- **Decision** — create via `/decision-log [note text]`
|
|
91
|
+
- **Phase proposal** — create via `/add-phase [note text]`
|
|
92
|
+
- **Keep as note** — cancel
|
|
93
|
+
|
|
94
|
+
After promoting, update the note's frontmatter: `promoted: true`.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## Learning Checkpoint
|
|
99
|
+
|
|
100
|
+
Read `learning_mode` from `.planning/config.json`.
|
|
101
|
+
|
|
102
|
+
**If `auto` and this is an append:** No learning prompt for notes — keep it fast.
|
|
103
|
+
|
|
104
|
+
**If `auto` and this is a promote:**
|
|
105
|
+
|
|
106
|
+
> **Learning moment:** Promoting a note means the idea had lasting value:
|
|
107
|
+
>
|
|
108
|
+
> `@agentic-learning either-or` — Why did this note survive? What made it worth promoting over others? Log the reasoning.
|
|
109
|
+
|
|
110
|
+
**If `manual`:** No note for notes — keep it fast.
|
|
@@ -8,9 +8,15 @@ Create executable plans for a roadmap phase. Default flow: Research → Plan →
|
|
|
8
8
|
|
|
9
9
|
On platforms with subagent support (Claude Code, OpenCode, Codex), each stage spawns a dedicated specialist agent with its own full context budget. On all other platforms, all stages run sequentially in the same context.
|
|
10
10
|
|
|
11
|
-
**Usage:** `plan-phase [N]` — optionally add `--skip-research
|
|
11
|
+
**Usage:** `plan-phase [N]` — optionally add `--skip-research`, `--skip-verify`, or `--research` (force re-research)
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
**Flags:**
|
|
14
|
+
- `--skip-research` — skip the research stage even if enabled in config
|
|
15
|
+
- `--skip-verify` — skip the plan verification stage
|
|
16
|
+
- `--research` — force re-research even if RESEARCH.md already exists
|
|
17
|
+
- `--gaps` — plan only for gaps found during verification
|
|
18
|
+
|
|
19
|
+
> **Platform note:** Read `parallelization` from `.planning/config.json`. When enabled, researcher/planner/checker each run as a spawned subagent. When `false` (default), all stages run inline using agent persona files.
|
|
14
20
|
|
|
15
21
|
## Step 1: Initialize
|
|
16
22
|
|
|
@@ -23,6 +29,15 @@ Read config:
|
|
|
23
29
|
cat .planning/config.json
|
|
24
30
|
```
|
|
25
31
|
|
|
32
|
+
Read TDD mode:
|
|
33
|
+
```bash
|
|
34
|
+
TDD_MODE=$(node -e "try{const c=JSON.parse(require('fs').readFileSync('.planning/config.json','utf8'));process.stdout.write(String((c.workflow||{}).tdd_mode||false));}catch(e){process.stdout.write('false');}" 2>/dev/null || echo 'false')
|
|
35
|
+
```
|
|
36
|
+
|
|
37
|
+
When `TDD_MODE` is `true`, instruct the planner to apply `type: tdd` to eligible tasks — the executor will use the red-green-refactor cycle for those tasks.
|
|
38
|
+
|
|
39
|
+
**Context window scaling:** Check `context_window` in config (default: 200000). At >= 500000, include the 3 most recent prior phase CONTEXT.md and SUMMARY.md files in the planner's context. At < 500000, include only frontmatter from prior phases.
|
|
40
|
+
|
|
26
41
|
Create the phase directory if it doesn't exist:
|
|
27
42
|
```bash
|
|
28
43
|
node -e "require('fs').mkdirSync('.planning/phases/[padded_phase]-[phase_slug]',{recursive:true})"
|