learnship 2.3.4 → 2.3.5

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.5",
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.5",
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.5",
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/",
@@ -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.4",
3
+ "version": "2.3.5",
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",