learnship 2.3.4 → 2.3.6
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/gemini-extension.json +1 -1
- package/learnship/references/git-integration.md +4 -4
- package/learnship/references/questioning.md +1 -1
- package/learnship/references/verification-patterns.md +1 -1
- package/learnship/templates/context.md +3 -3
- package/learnship/templates/discussion-log.md +2 -2
- package/learnship/workflows/discuss-phase.md +3 -3
- package/learnship/workflows/new-project.md +56 -5
- package/learnship/workflows/plan-phase.md +22 -2
- package/learnship/workflows/quick.md +1 -1
- package/learnship/workflows/research-phase.md +11 -1
- package/package.json +1 -1
|
@@ -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.6",
|
|
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.6",
|
|
6
6
|
"logo": "assets/logo.png",
|
|
7
7
|
"author": {
|
|
8
8
|
"name": "Favio Vazquez",
|
package/gemini-extension.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.6",
|
|
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/",
|
|
@@ -226,14 +226,14 @@ Each plan produces 2-4 commits (tasks + metadata). Clear, granular, bisectable.
|
|
|
226
226
|
## Why Per-Task Commits?
|
|
227
227
|
|
|
228
228
|
**Context engineering for AI:**
|
|
229
|
-
- Git history becomes primary context source for future
|
|
229
|
+
- Git history becomes primary context source for future agent sessions
|
|
230
230
|
- `git log --grep="{phase}-{plan}"` shows all work for a plan
|
|
231
231
|
- `git diff <hash>^..<hash>` shows exact changes per task
|
|
232
232
|
- Less reliance on parsing SUMMARY.md = more context for actual work
|
|
233
233
|
|
|
234
234
|
**Failure recovery:**
|
|
235
235
|
- Task 1 committed ✅, Task 2 failed ❌
|
|
236
|
-
-
|
|
236
|
+
- Agent in next session: sees task 1 complete, can retry task 2
|
|
237
237
|
- Can `git reset --hard` to last successful task
|
|
238
238
|
|
|
239
239
|
**Debugging:**
|
|
@@ -242,8 +242,8 @@ Each plan produces 2-4 commits (tasks + metadata). Clear, granular, bisectable.
|
|
|
242
242
|
- Each commit is independently revertable
|
|
243
243
|
|
|
244
244
|
**Observability:**
|
|
245
|
-
- Solo developer +
|
|
245
|
+
- Solo developer + agent workflow benefits from granular attribution
|
|
246
246
|
- Atomic commits are git best practice
|
|
247
|
-
- "Commit noise" irrelevant when consumer is
|
|
247
|
+
- "Commit noise" irrelevant when consumer is the agent, not humans
|
|
248
248
|
|
|
249
249
|
</commit_strategy_rationale>
|
|
@@ -155,7 +155,7 @@ Loop until "Create PROJECT.md" selected.
|
|
|
155
155
|
- **Rushing** — Minimizing questions to get to "the work"
|
|
156
156
|
- **Shallow acceptance** — Taking vague answers without probing
|
|
157
157
|
- **Premature constraints** — Asking about tech stack before understanding the idea
|
|
158
|
-
- **User skills** — NEVER ask about user's technical experience.
|
|
158
|
+
- **User skills** — NEVER ask about user's technical experience. The agent builds.
|
|
159
159
|
|
|
160
160
|
</anti_patterns>
|
|
161
161
|
|
|
@@ -599,7 +599,7 @@ Some things can't be verified programmatically. Flag these for human testing:
|
|
|
599
599
|
## Pre-Checkpoint Automation
|
|
600
600
|
|
|
601
601
|
Key principles for automation-first verification:
|
|
602
|
-
-
|
|
602
|
+
- The agent sets up verification environment BEFORE presenting checkpoints
|
|
603
603
|
- Users never run CLI commands (visit URLs only)
|
|
604
604
|
- Server lifecycle: start before checkpoint, handle port conflicts, keep running for duration
|
|
605
605
|
- CLI installation: auto-install where safe, checkpoint for user choice otherwise
|
|
@@ -28,7 +28,7 @@ Implementation decisions captured during `discuss-phase [N]`. This file is the p
|
|
|
28
28
|
### [Area 3 that was discussed]
|
|
29
29
|
- **D-04:** [Specific decision made]
|
|
30
30
|
|
|
31
|
-
###
|
|
31
|
+
### Agent's Discretion
|
|
32
32
|
[Areas where user explicitly said "you decide" — the agent has flexibility here during planning/implementation]
|
|
33
33
|
|
|
34
34
|
</decisions>
|
|
@@ -122,7 +122,7 @@ Display posts from followed users in a scrollable feed. Users can view posts and
|
|
|
122
122
|
- Friendly illustration + "Follow people to see posts here"
|
|
123
123
|
- Suggest 3-5 accounts to follow based on interests
|
|
124
124
|
|
|
125
|
-
###
|
|
125
|
+
### Agent's Discretion
|
|
126
126
|
- Loading skeleton design
|
|
127
127
|
- Exact spacing and typography
|
|
128
128
|
- Error state handling
|
|
@@ -185,7 +185,7 @@ CLI command to backup database to local file or S3. Supports full and incrementa
|
|
|
185
185
|
- --no-retry flag to fail fast
|
|
186
186
|
- Partial backups are deleted on failure (no corrupt files)
|
|
187
187
|
|
|
188
|
-
###
|
|
188
|
+
### Agent's Discretion
|
|
189
189
|
- Exact progress bar implementation
|
|
190
190
|
- Compression algorithm choice
|
|
191
191
|
- Temp file handling
|
|
@@ -35,9 +35,9 @@ created: [date]
|
|
|
35
35
|
|
|
36
36
|
---
|
|
37
37
|
|
|
38
|
-
##
|
|
38
|
+
## Agent's Discretion
|
|
39
39
|
|
|
40
|
-
[Areas delegated to
|
|
40
|
+
[Areas delegated to agent's judgment — list what was deferred and why]
|
|
41
41
|
|
|
42
42
|
## Deferred Ideas
|
|
43
43
|
|
|
@@ -20,7 +20,7 @@ Extract implementation decisions that downstream planning needs. Analyze the pha
|
|
|
20
20
|
|
|
21
21
|
2. **Planner** — Reads CONTEXT.md to know WHAT decisions are locked
|
|
22
22
|
- "Pull-to-refresh on mobile" → planner includes that in task specs
|
|
23
|
-
- "
|
|
23
|
+
- "Agent's Discretion: loading skeleton" → planner can decide approach
|
|
24
24
|
|
|
25
25
|
**Your job:** Capture decisions clearly enough that downstream agents can act on them without asking the user again.
|
|
26
26
|
|
|
@@ -305,7 +305,7 @@ Write `.planning/phases/[padded_phase]-[phase_slug]/[padded_phase]-CONTEXT.md`:
|
|
|
305
305
|
### [Category discussed]
|
|
306
306
|
- [Decision captured]
|
|
307
307
|
|
|
308
|
-
###
|
|
308
|
+
### Agent's Discretion
|
|
309
309
|
[Areas where user said "you decide"]
|
|
310
310
|
|
|
311
311
|
</decisions>
|
|
@@ -365,7 +365,7 @@ Also write a discussion log for audit purposes using `@./templates/discussion-lo
|
|
|
365
365
|
Write `.planning/phases/[padded_phase]-[phase_slug]/[padded_phase]-DISCUSSION-LOG.md` with:
|
|
366
366
|
- All options considered for each area (not just the selected one)
|
|
367
367
|
- The user's verbatim choice and rationale
|
|
368
|
-
- Areas delegated to
|
|
368
|
+
- Areas delegated to agent's discretion
|
|
369
369
|
- Deferred ideas
|
|
370
370
|
|
|
371
371
|
This file is for human audit trails only — it is NOT referenced by downstream agents.
|
|
@@ -696,9 +696,19 @@ Task(
|
|
|
696
696
|
</quality_gate>
|
|
697
697
|
|
|
698
698
|
<output>
|
|
699
|
-
Write to: .planning/research/STACK.md
|
|
700
699
|
Required sections: ## Recommended Stack, ## Alternatives Considered, ## What NOT to Use, ## Versions
|
|
701
700
|
</output>
|
|
701
|
+
|
|
702
|
+
**WRITE ACTION REQUIRED — You MUST use your file-write tool to write STACK.md to disk. Do NOT output the content to the conversation. Do NOT treat this as done until the file physically exists on disk.**
|
|
703
|
+
|
|
704
|
+
Write the research content to `.planning/research/STACK.md` using your write tool now.
|
|
705
|
+
|
|
706
|
+
Then verify:
|
|
707
|
+
```
|
|
708
|
+
node -e "const fs=require('fs');const f='.planning/research/STACK.md';if(!fs.existsSync(f)){console.log('STACK_MISSING');process.exit(1);}console.log('STACK_OK — '+fs.readFileSync(f,'utf8').length+' chars');"
|
|
709
|
+
```
|
|
710
|
+
|
|
711
|
+
If `STACK_MISSING`: write the file and re-run until `STACK_OK`.
|
|
702
712
|
"
|
|
703
713
|
)
|
|
704
714
|
|
|
@@ -744,9 +754,19 @@ Task(
|
|
|
744
754
|
</quality_gate>
|
|
745
755
|
|
|
746
756
|
<output>
|
|
747
|
-
Write to: .planning/research/FEATURES.md
|
|
748
757
|
Required sections: ## Table Stakes, ## Differentiators, ## Anti-Features
|
|
749
758
|
</output>
|
|
759
|
+
|
|
760
|
+
**WRITE ACTION REQUIRED — You MUST use your file-write tool to write FEATURES.md to disk. Do NOT output the content to the conversation. Do NOT treat this as done until the file physically exists on disk.**
|
|
761
|
+
|
|
762
|
+
Write the research content to `.planning/research/FEATURES.md` using your write tool now.
|
|
763
|
+
|
|
764
|
+
Then verify:
|
|
765
|
+
```
|
|
766
|
+
node -e "const fs=require('fs');const f='.planning/research/FEATURES.md';if(!fs.existsSync(f)){console.log('FEATURES_MISSING');process.exit(1);}console.log('FEATURES_OK — '+fs.readFileSync(f,'utf8').length+' chars');"
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
If `FEATURES_MISSING`: write the file and re-run until `FEATURES_OK`.
|
|
750
770
|
"
|
|
751
771
|
)
|
|
752
772
|
|
|
@@ -792,9 +812,19 @@ Task(
|
|
|
792
812
|
</quality_gate>
|
|
793
813
|
|
|
794
814
|
<output>
|
|
795
|
-
Write to: .planning/research/ARCHITECTURE.md
|
|
796
815
|
Required sections: ## Component Boundaries, ## Data Flow, ## Build Order, ## Integration Points
|
|
797
816
|
</output>
|
|
817
|
+
|
|
818
|
+
**WRITE ACTION REQUIRED — You MUST use your file-write tool to write ARCHITECTURE.md to disk. Do NOT output the content to the conversation. Do NOT treat this as done until the file physically exists on disk.**
|
|
819
|
+
|
|
820
|
+
Write the research content to `.planning/research/ARCHITECTURE.md` using your write tool now.
|
|
821
|
+
|
|
822
|
+
Then verify:
|
|
823
|
+
```
|
|
824
|
+
node -e "const fs=require('fs');const f='.planning/research/ARCHITECTURE.md';if(!fs.existsSync(f)){console.log('ARCH_MISSING');process.exit(1);}console.log('ARCH_OK — '+fs.readFileSync(f,'utf8').length+' chars');"
|
|
825
|
+
```
|
|
826
|
+
|
|
827
|
+
If `ARCH_MISSING`: write the file and re-run until `ARCH_OK`.
|
|
798
828
|
"
|
|
799
829
|
)
|
|
800
830
|
|
|
@@ -840,9 +870,19 @@ Task(
|
|
|
840
870
|
</quality_gate>
|
|
841
871
|
|
|
842
872
|
<output>
|
|
843
|
-
Write to: .planning/research/PITFALLS.md
|
|
844
873
|
Required sections: ## Common Mistakes, ## Warning Signs, ## Prevention Strategies
|
|
845
874
|
</output>
|
|
875
|
+
|
|
876
|
+
**WRITE ACTION REQUIRED — You MUST use your file-write tool to write PITFALLS.md to disk. Do NOT output the content to the conversation. Do NOT treat this as done until the file physically exists on disk.**
|
|
877
|
+
|
|
878
|
+
Write the research content to `.planning/research/PITFALLS.md` using your write tool now.
|
|
879
|
+
|
|
880
|
+
Then verify:
|
|
881
|
+
```
|
|
882
|
+
node -e "const fs=require('fs');const f='.planning/research/PITFALLS.md';if(!fs.existsSync(f)){console.log('PITFALLS_MISSING');process.exit(1);}console.log('PITFALLS_OK — '+fs.readFileSync(f,'utf8').length+' chars');"
|
|
883
|
+
```
|
|
884
|
+
|
|
885
|
+
If `PITFALLS_MISSING`: write the file and re-run until `PITFALLS_OK`.
|
|
846
886
|
"
|
|
847
887
|
)
|
|
848
888
|
```
|
|
@@ -880,11 +920,22 @@ Task(
|
|
|
880
920
|
</downstream_consumer>
|
|
881
921
|
|
|
882
922
|
<output>
|
|
883
|
-
Write to: .planning/research/SUMMARY.md
|
|
884
923
|
Required sections: ## Executive Summary, ## Recommended Stack, ## Table Stakes Features, ## Key Architecture Decisions, ## Top Pitfalls, ## Implications for Roadmap, ## Confidence Assessment, ## Gaps
|
|
885
924
|
</output>
|
|
886
925
|
|
|
926
|
+
**WRITE ACTION REQUIRED — You MUST use your file-write tool to write SUMMARY.md to disk. Do NOT output the content to the conversation. Do NOT treat this as done until the file physically exists on disk.**
|
|
927
|
+
|
|
928
|
+
Write the synthesized content to `.planning/research/SUMMARY.md` using your write tool now.
|
|
929
|
+
|
|
930
|
+
Then verify it was written:
|
|
931
|
+
```
|
|
932
|
+
node -e "const fs=require('fs');const f='.planning/research/SUMMARY.md';if(!fs.existsSync(f)){console.log('SUMMARY_MISSING');process.exit(1);}const c=fs.readFileSync(f,'utf8');const secs=['Executive Summary','Recommended Stack','Top Pitfalls','Implications for Roadmap'];const missing=secs.filter(s=>!c.includes(s));if(missing.length){console.log('SUMMARY_INCOMPLETE — missing: '+missing.join(', '));process.exit(1);}console.log('SUMMARY_OK — '+c.length+' chars');"
|
|
933
|
+
```
|
|
934
|
+
|
|
935
|
+
If `SUMMARY_MISSING` or `SUMMARY_INCOMPLETE`: write the file and re-run until `SUMMARY_OK`.
|
|
936
|
+
|
|
887
937
|
<quality_gate>
|
|
938
|
+
- [ ] File physically written to .planning/research/SUMMARY.md (verified by node -e above)
|
|
888
939
|
- [ ] Synthesized, not concatenated — findings are integrated
|
|
889
940
|
- [ ] Opinionated — clear recommendations emerge
|
|
890
941
|
- [ ] Actionable — roadmapper can structure phases from implications
|
|
@@ -139,9 +139,19 @@ Task(
|
|
|
139
139
|
</files_to_read>
|
|
140
140
|
|
|
141
141
|
<output>
|
|
142
|
-
Write to: .planning/phases/[padded_phase]-[phase_slug]/[padded_phase]-RESEARCH.md
|
|
143
142
|
Required sections: ## Don't Hand-Roll, ## Common Pitfalls, ## Existing Patterns in This Codebase, ## Recommended Approach
|
|
144
143
|
</output>
|
|
144
|
+
|
|
145
|
+
**WRITE ACTION REQUIRED — You MUST use your file-write tool to write [padded_phase]-RESEARCH.md to disk. Do NOT output the content to the conversation. Do NOT treat this as done until the file physically exists on disk.**
|
|
146
|
+
|
|
147
|
+
Write the research content to `.planning/phases/[padded_phase]-[phase_slug]/[padded_phase]-RESEARCH.md` using your write tool now.
|
|
148
|
+
|
|
149
|
+
Then verify:
|
|
150
|
+
```
|
|
151
|
+
node -e "const fs=require('fs');const files=fs.readdirSync('.planning/phases/').flatMap(d=>fs.readdirSync('.planning/phases/'+d).filter(f=>f.endsWith('-RESEARCH.md')).map(f=>'.planning/phases/'+d+'/'+f));if(!files.length){console.log('RESEARCH_MISSING');process.exit(1);}console.log('RESEARCH_OK — '+files[files.length-1]);"
|
|
152
|
+
```
|
|
153
|
+
|
|
154
|
+
If `RESEARCH_MISSING`: write the file and re-run until `RESEARCH_OK`.
|
|
145
155
|
"
|
|
146
156
|
)
|
|
147
157
|
```
|
|
@@ -225,9 +235,19 @@ Task(
|
|
|
225
235
|
</files_to_read>
|
|
226
236
|
|
|
227
237
|
<output>
|
|
228
|
-
Write to: [phase_dir]/[padded_phase]-01-PLAN.md, [padded_phase]-02-PLAN.md, etc.
|
|
229
238
|
Each plan must have: YAML frontmatter (wave, depends_on, files_modified) + tasks in XML + must_haves section
|
|
230
239
|
</output>
|
|
240
|
+
|
|
241
|
+
**WRITE ACTION REQUIRED — You MUST use your file-write tool to write each PLAN.md to disk. Do NOT output plans to the conversation. Do NOT treat this as done until files physically exist on disk.**
|
|
242
|
+
|
|
243
|
+
Write each plan to `[phase_dir]/[padded_phase]-NN-PLAN.md` using your write tool now. Write all plans before reporting done.
|
|
244
|
+
|
|
245
|
+
Then verify:
|
|
246
|
+
```
|
|
247
|
+
node -e "const fs=require('fs');const plans=fs.readdirSync('.').filter(f=>f.endsWith('-PLAN.md'));if(!plans.length){console.log('PLANS_MISSING');process.exit(1);}console.log('PLANS_OK — '+plans.length+' plan(s): '+plans.join(', '));"
|
|
248
|
+
```
|
|
249
|
+
|
|
250
|
+
Run that command from inside [phase_dir]. If `PLANS_MISSING`: write the files and re-run until `PLANS_OK`.
|
|
231
251
|
"
|
|
232
252
|
)
|
|
233
253
|
```
|
|
@@ -109,9 +109,19 @@ Task(
|
|
|
109
109
|
</files_to_read>
|
|
110
110
|
|
|
111
111
|
<output>
|
|
112
|
-
Write to: .planning/phases/[padded_phase]-[slug]/[padded_phase]-RESEARCH.md
|
|
113
112
|
Required sections: ## Don't Hand-Roll, ## Common Pitfalls, ## Existing Patterns in This Codebase, ## Recommended Approach
|
|
114
113
|
</output>
|
|
114
|
+
|
|
115
|
+
**WRITE ACTION REQUIRED — You MUST use your file-write tool to write [padded_phase]-RESEARCH.md to disk. Do NOT output the content to the conversation. Do NOT treat this as done until the file physically exists on disk.**
|
|
116
|
+
|
|
117
|
+
Write the research content to `.planning/phases/[padded_phase]-[slug]/[padded_phase]-RESEARCH.md` using your write tool now.
|
|
118
|
+
|
|
119
|
+
Then verify:
|
|
120
|
+
```
|
|
121
|
+
node -e "const fs=require('fs');const files=fs.readdirSync('.planning/phases/').flatMap(d=>fs.readdirSync('.planning/phases/'+d).filter(f=>f.endsWith('-RESEARCH.md')).map(f=>'.planning/phases/'+d+'/'+f));if(!files.length){console.log('RESEARCH_MISSING');process.exit(1);}console.log('RESEARCH_OK — '+files[files.length-1]);"
|
|
122
|
+
```
|
|
123
|
+
|
|
124
|
+
If `RESEARCH_MISSING`: write the file and re-run until `RESEARCH_OK`.
|
|
115
125
|
"
|
|
116
126
|
)
|
|
117
127
|
```
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "learnship",
|
|
3
|
-
"version": "2.3.
|
|
3
|
+
"version": "2.3.6",
|
|
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: 57 spec-driven workflows, 17 specialist agent personas, integrated learning, and production-grade design.",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"agentic",
|