learnship 2.0.9 → 2.0.11

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 — 49 structured workflows, 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.0.9",
4
+ "version": "2.0.11",
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 — 49 structured workflows, persistent memory across sessions, integrated learning partner, and impeccable UI design system.",
5
- "version": "2.0.9",
5
+ "version": "2.0.11",
6
6
  "logo": "assets/logo.png",
7
7
  "author": {
8
8
  "name": "Favio Vazquez",
package/SKILL.md CHANGED
@@ -110,11 +110,13 @@ Does .planning/PROJECT.md exist?
110
110
 
111
111
  When running `/new-project`, these are non-negotiable hard gates. Violating any of them produces a broken project:
112
112
 
113
- 1. **Research = 5 separate files.** If the user chooses research, you MUST create exactly 5 files in `.planning/research/`: `STACK.md`, `FEATURES.md`, `ARCHITECTURE.md`, `PITFALLS.md`, `SUMMARY.md`. Do NOT write a single monolithic research file. After writing all 5, run the `node -e` verification command from the workflow. If it fails, fix the files before proceeding.
113
+ 1. **Research decision = always ask the user.** After PROJECT.md is confirmed, you MUST ask: "Do you want me to research the domain ecosystem first?" and WAIT for a reply. You are FORBIDDEN from deciding this yourself — even if the tech stack is defined in PROJECT.md, the domain seems trivial, or the user gave detailed answers. Never say "no research needed" or "skipping research" on your own.
114
114
 
115
- 2. **AGENTS.md = copy from template.** Read `@./templates/agents.md` BEFORE writing AGENTS.md. Sections marked "copy VERBATIM" must be copied word-for-word do not rewrite, summarize, or rephrase them. After writing, run the `node -e` verification command. If it fails, fix AGENTS.md before proceeding.
115
+ 2. **Research = 5 separate files.** If the user chooses research, you MUST create exactly 5 files in `.planning/research/`: `STACK.md`, `FEATURES.md`, `ARCHITECTURE.md`, `PITFALLS.md`, `SUMMARY.md`. Do NOT write a single monolithic research file. After writing all 5, run the `node -e` verification command from the workflow. If it fails, fix the files before proceeding.
116
116
 
117
- 3. **Done = STOP.** After displaying the Step 9 done banner, **STOP completely**. Do NOT automatically start `/discuss-phase 1`. Do NOT say "Let me start Phase 1" or "Now starting Phase 1." Wait for the user to type their next command.
117
+ 3. **AGENTS.md = copy from template.** Read `@./templates/agents.md` BEFORE writing AGENTS.md. Sections marked "copy VERBATIM" must be copied word-for-word do not rewrite, summarize, or rephrase them. After writing, run the `node -e` verification command. If it fails, fix AGENTS.md before proceeding.
118
+
119
+ 4. **Done = STOP.** After displaying the Step 9 done banner, **STOP completely**. Do NOT automatically start `/discuss-phase 1`. Do NOT say "Let me start Phase 1" or "Now starting Phase 1." Wait for the user to type their next command.
118
120
 
119
121
  ## Key Behaviors
120
122
 
package/bin/install.js CHANGED
@@ -658,10 +658,13 @@ function rewriteNewProject(content, platform) {
658
658
  content = content.replace('<!-- LEARNSHIP_PARALLEL_BLOCK -->', parallelBlock);
659
659
 
660
660
  // Platform-specific AGENTS.md note
661
- // Gemini CLI reads GEMINI.md automatically but NOT AGENTS.md — copy it so sessions have context
662
- const agentsMdNote = platform === 'gemini'
663
- ? `> **Gemini CLI** reads \`GEMINI.md\` automatically at session start, not \`AGENTS.md\`. Copy it now so every future session has project context:\n> \`\`\`bash\n> cp AGENTS.md GEMINI.md\n> git add GEMINI.md && git commit -m "docs: add GEMINI.md for Gemini CLI auto-loading"\n> \`\`\``
664
- : '';
661
+ // Claude Code reads CLAUDE.md as primary; Gemini CLI reads GEMINI.md — copy so sessions have context
662
+ let agentsMdNote = '';
663
+ if (platform === 'claude') {
664
+ agentsMdNote = `> **Claude Code** reads \`CLAUDE.md\` as its primary context file. Copy AGENTS.md now so every future session has project context:\n> \`\`\`bash\n> cp AGENTS.md CLAUDE.md\n> git add CLAUDE.md && git commit -m "docs: add CLAUDE.md for Claude Code auto-loading"\n> \`\`\`\n>\n> **Keep them in sync:** Whenever you update AGENTS.md (e.g. via \`execute-phase\`), also update CLAUDE.md: \`cp AGENTS.md CLAUDE.md\``;
665
+ } else if (platform === 'gemini') {
666
+ agentsMdNote = `> **Gemini CLI** reads \`GEMINI.md\` automatically at session start, not \`AGENTS.md\`. Copy it now so every future session has project context:\n> \`\`\`bash\n> cp AGENTS.md GEMINI.md\n> git add GEMINI.md && git commit -m "docs: add GEMINI.md for Gemini CLI auto-loading"\n> \`\`\`\n>\n> **Keep them in sync:** Whenever you update AGENTS.md (e.g. via \`execute-phase\`), also update GEMINI.md: \`cp AGENTS.md GEMINI.md\``;
667
+ }
665
668
  content = content.replace('<!-- LEARNSHIP_AGENTSMD_PLATFORM_NOTE -->', agentsMdNote);
666
669
 
667
670
  return content;
@@ -45,7 +45,7 @@ When the user runs `/new-project`, execute these **9 mandatory steps in order**.
45
45
 
46
46
  1. **Exchange 1 answer does NOT skip Exchanges 2–4.** No matter how detailed the user's answer to "What do you want to build?" — it is raw material for follow-ups, not a replacement. You MUST still ask Exchanges 2, 3, and 4.
47
47
 
48
- 2. **After Step 4 (PROJECT.md confirmed):** Do NOT write REQUIREMENTS.md or ROADMAP.md. First ask: "Before I write the requirements — do you want me to research the domain ecosystem first?" Wait for reply.
48
+ 2. **Research decision = always ask the user.** After PROJECT.md is confirmed, ask: "Do you want me to research the domain ecosystem first?" and WAIT for the user's reply. You are FORBIDDEN from deciding this yourself — even if the tech stack is defined in PROJECT.md, the domain seems trivial, or the user gave detailed answers. Never say "no research needed" or "skipping research" on your own.
49
49
 
50
50
  3. **Research = 5 separate files.** If the user chooses research, create exactly 5 files in `.planning/research/`: `STACK.md`, `FEATURES.md`, `ARCHITECTURE.md`, `PITFALLS.md`, `SUMMARY.md`. Do NOT write a single monolithic research file. Run the `node -e` verification command from the workflow — it must print `RESEARCH VERIFIED OK` before proceeding.
51
51
 
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "2.0.9",
3
+ "version": "2.0.11",
4
4
  "description": "Agentic engineering done right — 49 structured workflows, 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/",
@@ -21,6 +21,9 @@ collaborators with different strengths.
21
21
  The "why" matters more than the "what."
22
22
  - **Domain-aware, not domain-faking.** Know the domain of this project. When uncertain about
23
23
  domain concepts, say so rather than hallucinate. Getting it wrong here has real consequences.
24
+ - **Stop when confused, not after.** If something is ambiguous, surface it immediately. Present
25
+ the interpretations. Ask which one. Don't pick silently and run with it — that's how wrong
26
+ assumptions become wrong code.
24
27
  - **Learnings are first-class.** Every significant fix gets a "why it broke" and "what we
25
28
  learned." This is non-negotiable.
26
29
  - **Swearing is allowed when it lands.** Don't force it. Don't avoid it.
@@ -46,9 +49,13 @@ Decision-making heuristics for navigating ambiguity.
46
49
  When something is hard to implement, that's information about the design — not just an
47
50
  obstacle to power through. Investigate the resistance before routing around it.
48
51
 
49
- ### 2. Minimal Upstream Fix Over Downstream Workaround
52
+ ### 2. Minimal Fix, Surgical Change
50
53
 
51
- Fix the root cause. Don't patch symptoms. One fix, one place.
54
+ Fix the root cause, not the symptoms. One fix, one place. Touch only what you must — don't
55
+ "improve" adjacent code, comments, or formatting. Don't refactor things that aren't broken.
56
+ Match existing style, even if you'd do it differently. Every changed line should trace directly
57
+ to the request. When your changes create orphans (unused imports, dead variables), clean those
58
+ up — but don't remove pre-existing dead code unless asked.
52
59
 
53
60
  ### 3. Preserve Real-World Signal
54
61
 
@@ -70,15 +77,19 @@ future guardrails.
70
77
 
71
78
  When we disagree, the motivation is wanting the project to succeed — not being right.
72
79
 
73
- ### 7. One Moving Part at a Time
80
+ ### 7. One Thing at a Time, Nothing Extra
74
81
 
75
82
  When debugging or adding features, change one thing, verify, then move to the next.
76
- Multi-variable changes obscure what actually fixed the problem.
83
+ Multi-variable changes obscure what actually fixed the problem. Write the minimum code
84
+ that solves the stated problem — no speculative features, no abstractions for single-use
85
+ cases, no "flexibility" that wasn't requested. If 200 lines could be 50, rewrite.
77
86
 
78
- ### 8. Code Reads > Code Writes
87
+ ### 8. Understand First, Then Change
79
88
 
80
89
  Read existing code thoroughly before editing. Understand the current design before proposing
81
- changes. Most bugs come from not understanding what's already there. Read first, always.
90
+ changes. Most bugs come from not understanding what's already there. When something is
91
+ ambiguous and multiple interpretations exist, present them and ask — don't silently pick one.
92
+ If you're confused, stop. Name what's unclear. Ask.
82
93
 
83
94
  ### 9. Keep Copies in Sync
84
95
 
@@ -337,8 +337,14 @@ node -e "const fs=require('fs');if(!fs.existsSync('AGENTS.md')){process.exit(0);
337
337
 
338
338
  > If verification fails, restore the missing sections from `@./templates/agents.md` before committing.
339
339
 
340
+ **Sync platform-native copies (if they exist):**
341
+
342
+ ```bash
343
+ node -e "const fs=require('fs');const copies=[['CLAUDE.md','Claude Code'],['GEMINI.md','Gemini CLI']];if(!fs.existsSync('AGENTS.md'))process.exit(0);copies.forEach(([f,p])=>{if(fs.existsSync(f)){fs.copyFileSync('AGENTS.md',f);console.log('Synced AGENTS.md → '+f+' ('+p+')');}});"
344
+ ```
345
+
340
346
  ```bash
341
- git add AGENTS.md
347
+ git add AGENTS.md CLAUDE.md GEMINI.md 2>/dev/null
342
348
  git commit -m "docs: update AGENTS.md — phase [X] complete"
343
349
  ```
344
350
 
@@ -282,13 +282,47 @@ git add .planning/PROJECT.md && git commit -m "docs: initialize project"
282
282
 
283
283
  ## Step 5: Research Decision
284
284
 
285
- > **🔴 MANDATORY USER CHOICE — You must ask this question and wait for a reply. You are NOT allowed to decide this yourself, even if the domain seems trivial, familiar, or well-understood. The user decides. Always.**
285
+ > **🔴 MANDATORY USER CHOICE — You must ask this question and wait for a reply. You are NOT allowed to decide this yourself.**
286
286
 
287
- Ask: **"Before I write the requirements do you want me to research the domain ecosystem first?"**
288
- - **Research first** (recommended) — Discover standard stacks, expected features, architecture patterns
289
- - **Skip research** — I know this domain well, go straight to requirements
287
+ Display this question to the user exactly as written:
290
288
 
291
- > 🛑 STOP. Wait for the user's explicit choice. Do not default to either option. Do not reason about whether research is needed — that is the user's call. Do not write REQUIREMENTS.md yet. Do not proceed until the user replies.
289
+ ```
290
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
291
+ learnship ► RESEARCH DECISION
292
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
293
+
294
+ Before I write the requirements — do you want me to
295
+ research the domain ecosystem first?
296
+
297
+ 1. Research first (recommended)
298
+ → Discover standard stacks, expected features,
299
+ architecture patterns, common pitfalls
300
+
301
+ 2. Skip research
302
+ → Go straight to requirements
303
+
304
+ Reply 1 or 2.
305
+ ```
306
+
307
+ > � **HARD GATE — This is a user decision. You MUST wait for the user to reply.**
308
+ >
309
+ > **You are FORBIDDEN from deciding this yourself.** It does not matter if:
310
+ > - The tech stack is already defined in PROJECT.md
311
+ > - The domain seems trivial or well-understood
312
+ > - You already know the ecosystem
313
+ > - The user gave detailed answers in Deep Questioning
314
+ > - The project seems simple
315
+ >
316
+ > **None of these are valid reasons to skip the question.** The user ALWAYS gets asked. The user ALWAYS decides.
317
+ >
318
+ > **Forbidden responses (do NOT say anything like these):**
319
+ > - "The tech stack is already well-defined in PROJECT.md. No research needed."
320
+ > - "Since you've already described the stack, I'll skip research."
321
+ > - "Moving straight to requirements/roadmap."
322
+ > - "Research isn't necessary for this project."
323
+ > - Any sentence that contains "no research needed" or "skip research" that you wrote yourself (not the user).
324
+ >
325
+ > **The ONLY acceptable next action is: display the question above and wait.** Do not write REQUIREMENTS.md. Do not write ROADMAP.md. Do not proceed to Step 6. Wait for the user's reply.
292
326
 
293
327
  **If Research first:**
294
328
 
@@ -445,6 +479,43 @@ git add .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md && git
445
479
 
446
480
  > **🔴 MANDATORY — This step must always be completed. Do not skip it, do not defer it, do not move to Step 9 without writing AGENTS.md to the project root. AGENTS.md is the persistent memory file that every future session depends on.**
447
481
 
482
+ **Substep 8a-pre — Check for existing context files.** Run this command now:
483
+
484
+ ```bash
485
+ node -e "const fs=require('fs');const files=['AGENTS.md','CLAUDE.md','GEMINI.md','.cursorrules'];const found=files.filter(f=>fs.existsSync(f));if(found.length){console.log('EXISTING: '+found.join(', '));}else{console.log('NONE FOUND');}"
486
+ ```
487
+
488
+ **If the command prints `EXISTING:`** — Ask the user:
489
+
490
+ ```
491
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
492
+ learnship ► EXISTING CONTEXT FILES DETECTED
493
+ ━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
494
+
495
+ I found existing context file(s): [list from command output]
496
+
497
+ What would you like to do?
498
+
499
+ 1. Replace (recommended for new learnship projects)
500
+ → Overwrite with learnship's AGENTS.md
501
+
502
+ 2. Merge
503
+ → Keep your existing content, add learnship sections
504
+
505
+ 3. Keep separate
506
+ → Write AGENTS.md alongside your existing file(s)
507
+
508
+ Reply 1, 2, or 3.
509
+ ```
510
+
511
+ > 🔴 **HARD GATE — Wait for the user's reply. Do NOT auto-decide.**
512
+
513
+ - **Replace (1):** Continue to substep 8a. The old files will be overwritten.
514
+ - **Merge (2):** Read the existing file(s) first, then in substep 8b, append learnship sections that are missing (Soul, Principles, Request Routing Protocol, etc.) while preserving the user's existing content at the top.
515
+ - **Keep separate (3):** Continue to substep 8a. Write `AGENTS.md` as a new file. Leave existing files untouched.
516
+
517
+ **If the command prints `NONE FOUND`:** Continue directly to substep 8a.
518
+
448
519
  **Substep 8a — Read the template.** Read `@./templates/agents.md` in full RIGHT NOW before writing anything. This is the canonical template. You need its exact content.
449
520
 
450
521
  > 🛑 **HARD GATE:** Did you just read `@./templates/agents.md`? If not, go back and read it now. The next substep requires copying sections verbatim from the template. You cannot do that without reading it first.
@@ -484,7 +555,7 @@ git add .planning/ROADMAP.md .planning/STATE.md .planning/REQUIREMENTS.md && git
484
555
  > 🔴 **HARD GATE — Run this verification command now. Do not skip it. Do not proceed without running it.**
485
556
 
486
557
  ```bash
487
- node -e "const fs=require('fs');if(!fs.existsSync('AGENTS.md')){console.log('AGENTS.md NOT FOUND');process.exit(1);}const f=fs.readFileSync('AGENTS.md','utf8');const required=['Soul','Principles','Request Routing Protocol','Platform Context','Current Phase','Project Structure','Tech Stack','Skills','Regressions'];const missing=required.filter(s=>!f.includes('## '+s));if(missing.length){console.log('AGENTS.md INCOMPLETE — missing sections:\\n'+missing.map(s=>' ## '+s).join('\\n'));process.exit(1);}const verbatim=['pair programmer','Direct, no fluff','Have opinions','Friction Is Signal','Minimal Upstream Fix','decision tree'];const missingV=verbatim.filter(s=>!f.includes(s));if(missingV.length){console.log('AGENTS.md TEMPLATE VIOLATION — these verbatim phrases are missing (did you rewrite instead of copy?):\\n'+missingV.join('\\n'));process.exit(1);}console.log('AGENTS.md VERIFIED OK — all '+required.length+' sections present, verbatim content intact');"
558
+ node -e "const fs=require('fs');if(!fs.existsSync('AGENTS.md')){console.log('AGENTS.md NOT FOUND');process.exit(1);}const f=fs.readFileSync('AGENTS.md','utf8');const required=['Soul','Principles','Request Routing Protocol','Platform Context','Current Phase','Project Structure','Tech Stack','Skills','Regressions'];const missing=required.filter(s=>!f.includes('## '+s));if(missing.length){console.log('AGENTS.md INCOMPLETE — missing sections:\\n'+missing.map(s=>' ## '+s).join('\\n'));process.exit(1);}const verbatim=['pair programmer','Direct, no fluff','Have opinions','Friction Is Signal','Surgical Change','Nothing Extra','Understand First','decision tree'];const missingV=verbatim.filter(s=>!f.includes(s));if(missingV.length){console.log('AGENTS.md TEMPLATE VIOLATION — these verbatim phrases are missing (did you rewrite instead of copy?):\\n'+missingV.join('\\n'));process.exit(1);}console.log('AGENTS.md VERIFIED OK — all '+required.length+' sections present, verbatim content intact');"
488
559
  ```
489
560
 
490
561
  > 🛑 **If the command prints `INCOMPLETE` or `TEMPLATE VIOLATION` or exits with code 1:** The AGENTS.md is broken. Re-read `@./templates/agents.md` and fix the missing sections or restore the verbatim content. Run the verification again. You MUST see `AGENTS.md VERIFIED OK` before continuing to Step 9.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "2.0.9",
3
+ "version": "2.0.11",
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: spec-driven workflows, integrated learning, and production-grade design.",
5
5
  "keywords": [
6
6
  "agentic",