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.
@@ -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",
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.4",
5
+ "version": "2.3.6",
6
6
  "logo": "assets/logo.png",
7
7
  "author": {
8
8
  "name": "Favio Vazquez",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "2.3.4",
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 Claude sessions
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
- - Claude in next session: sees task 1 complete, can retry task 2
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 + Claude workflow benefits from granular attribution
245
+ - Solo developer + agent workflow benefits from granular attribution
246
246
  - Atomic commits are git best practice
247
- - "Commit noise" irrelevant when consumer is Claude, not humans
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. Claude builds.
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
- - Claude sets up verification environment BEFORE presenting checkpoints
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
- ### Claude's Discretion
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
- ### Claude's Discretion
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
- ### Claude's Discretion
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
- ## Claude's Discretion
38
+ ## Agent's Discretion
39
39
 
40
- [Areas delegated to Claude's judgment — list what was deferred and why]
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
- - "Claude's Discretion: loading skeleton" → planner can decide approach
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
- ### Claude's Discretion
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 Claude's discretion
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
  ```
@@ -118,7 +118,7 @@ Write `CONTEXT.md` to the task directory:
118
118
  ### [Area discussed]
119
119
  - [Decision captured]
120
120
 
121
- ### Claude's Discretion
121
+ ### Agent's Discretion
122
122
  [Areas not discussed or "you decide" answers]
123
123
 
124
124
  </decisions>
@@ -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.4",
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",