learnship 2.3.1 → 2.3.2

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.1",
4
+ "version": "2.3.2",
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.1",
5
+ "version": "2.3.2",
6
6
  "logo": "assets/logo.png",
7
7
  "author": {
8
8
  "name": "Favio Vazquez",
package/README.md CHANGED
@@ -38,7 +38,7 @@
38
38
  npx learnship
39
39
  ```
40
40
 
41
- **Works on Mac, Windows, and Linux.** Requires Node.js ≥ 18 and Git. The installer auto-detects your platform.
41
+ **Works on Mac, Windows, and Linux.** Requires Node.js ≥ 22 and Git. The installer auto-detects your platform.
42
42
 
43
43
  ```bash
44
44
  npx learnship --global # all projects
@@ -521,7 +521,7 @@ Project settings live in `.planning/config.json`. Set during `/new-project` or e
521
521
 
522
522
  | Setting | Options | Default | What it controls |
523
523
  |---------|---------|---------|-----------------|
524
- | `mode` | `yolo`, `interactive` | `yolo` | `yolo` auto-approves steps; `interactive` confirms at each decision |
524
+ | `mode` | `auto`, `interactive` | `auto` | `auto` auto-approves steps; `interactive` confirms at each decision |
525
525
  | `granularity` | `coarse`, `standard`, `fine` | `standard` | Phase size: 3-5 / 5-8 / 8-12 phases |
526
526
  | `model_profile` | `quality`, `balanced`, `budget` | `balanced` | Agent model tier (see table below) |
527
527
  | `learning_mode` | `auto`, `manual` | `auto` | `auto` offers learning at checkpoints; `manual` requires explicit invocation |
@@ -579,8 +579,8 @@ Project settings live in `.planning/config.json`. Set during `/new-project` or e
579
579
 
580
580
  | Scenario | `mode` | `granularity` | `model_profile` | Research | Plan Check | Verifier |
581
581
  |----------|--------|--------------|----------------|----------|------------|---------|
582
- | Prototyping | `yolo` | `coarse` | `budget` | off | off | off |
583
- | Normal dev | `yolo` | `standard` | `balanced` | on | on | on |
582
+ | Prototyping | `auto` | `coarse` | `budget` | off | off | off |
583
+ | Normal dev | `auto` | `standard` | `balanced` | on | on | on |
584
584
  | Production | `interactive` | `fine` | `quality` | on | on | on |
585
585
 
586
586
  ---
@@ -896,7 +896,7 @@ learnship/
896
896
  ├── bin/
897
897
  │ └── install.js # Multi-platform installer (Claude Code, OpenCode, Gemini CLI, Codex CLI, Windsurf)
898
898
  ├── tests/
899
- │ └── validate_multiplatform.sh # 511+ check test suite (5 suites, 6 platforms)
899
+ │ └── run_all.sh # 15 test suites, 1200+ checks across 6 platforms
900
900
  ├── SKILL.md # Meta-skill: platform context loaded by Cascade / AI agents
901
901
  ├── install.sh # Shell installer wrapper
902
902
  ├── package.json # npm package (npx learnship)
package/bin/install.js CHANGED
@@ -503,11 +503,18 @@ function verifyInstalled(dirPath, description) {
503
503
  return true;
504
504
  }
505
505
 
506
+ // Internal-only workflows that should never be installed to user projects.
507
+ // These are used to maintain the learnship repo itself.
508
+ const INTERNAL_ONLY_WORKFLOWS = new Set([
509
+ 'sync-upstream-skills.md',
510
+ ]);
511
+
506
512
  /** Recursively copy dir, replacing path references in .md files */
507
513
  function copyDir(srcDir, destDir, pathPrefix, platform) {
508
514
  if (fs.existsSync(destDir)) fs.rmSync(destDir, { recursive: true });
509
515
  fs.mkdirSync(destDir, { recursive: true });
510
516
  for (const entry of fs.readdirSync(srcDir, { withFileTypes: true })) {
517
+ if (INTERNAL_ONLY_WORKFLOWS.has(entry.name)) continue;
511
518
  const src = path.join(srcDir, entry.name);
512
519
  const dest = path.join(destDir, entry.name);
513
520
  if (entry.isDirectory()) {
@@ -1503,6 +1510,7 @@ function install(platform, isGlobal) {
1503
1510
  let count = 0;
1504
1511
  for (const f of fs.readdirSync(path.join(learnshipSrc, 'workflows'))) {
1505
1512
  if (!f.endsWith('.md')) continue;
1513
+ if (INTERNAL_ONLY_WORKFLOWS.has(f)) continue;
1506
1514
  let c = fs.readFileSync(path.join(learnshipSrc, 'workflows', f), 'utf8');
1507
1515
  c = replacePaths(c, pathPrefix, platform);
1508
1516
  if (f === 'new-project.md') c = rewriteNewProject(c, platform);
@@ -64,32 +64,42 @@ Suggest the appropriate workflow slash command when relevant:
64
64
  | Workflow | When to suggest |
65
65
  |----------|----------------|
66
66
  | `/new-project` | User wants to start a new project from scratch |
67
+ | `/new-milestone` | Start a new milestone cycle on an existing project |
67
68
  | `/discuss-phase [N]` | Before planning a phase — capture user's implementation vision |
69
+ | `/discuss-milestone` | Capture milestone-level goals before `/new-milestone` |
68
70
  | `/plan-phase [N]` | After discussing a phase — create executable plans |
69
71
  | `/execute-phase [N]` | Plans exist and are ready to run |
70
72
  | `/verify-work [N]` | Phase execution complete — user acceptance testing |
73
+ | `/review` | Code ready for review — multi-persona quality check |
74
+ | `/ship` | Tests pass, code reviewed — ship it (test → lint → commit → push → PR) |
75
+ | `/complete-milestone` | All phases in the current milestone are done |
71
76
  | `/ls` | User asks "where are we?", "what's next?", or starts a new session |
72
77
  | `/next` | User wants to keep moving without deciding what to do |
73
- | `/quick [task]` | Small ad-hoc task that doesn't need full phase ceremony |
74
78
  | `/progress` | Status overview and routing |
79
+ | `/quick [task]` | Small ad-hoc task that doesn't need full phase ceremony |
80
+ | `/debug [symptom]` | Bug report — systematic hypothesis-driven debugging |
81
+ | `/map-codebase` | Analyze existing codebase structure before planning (brownfield projects) |
82
+ | `/ideate` | Codebase-grounded idea generation (`--explore` for Socratic mode) |
83
+ | `/challenge` | Stress-test a proposal with product + engineering forcing questions |
84
+ | `/settings` | Change project configuration after setup |
85
+ | `/health` | Project health check — stale files, uncommitted changes, config drift |
86
+ | `/compound` | Just solved a problem or learned a pattern — capture it while fresh |
75
87
  | `/pause-work` | User is stopping mid-phase |
76
88
  | `/resume-work` | User is returning to an in-progress project |
77
- | `/complete-milestone` | All phases in the current milestone are done |
78
- | `/compound` | Just solved a problem or learned a pattern — capture it while fresh |
79
- | `/review` | Code ready for review — multi-persona quality check |
80
- | `/challenge` | About to commit to a milestone or big feature — stress-test the scope |
81
- | `/ship` | Tests pass, code reviewed — ship it (test → lint → commit → push → PR) |
82
- | `/ideate` | Looking for what to build next — codebase-grounded idea generation (add `--explore` for Socratic mode) |
83
- | `/guard` | Working on sensitive files — enable safety mode with destructive command warnings |
84
- | `/sync-docs` | After code changes — detect stale documentation |
85
- | `/forensics` | Something went wrong — post-mortem investigation (read-only) |
86
- | `/undo` | Need to revert commits safely — preserves git history |
89
+ | `/guard` | Working on sensitive files enable safety mode |
87
90
  | `/note [text]` | Quick idea capture — zero friction, no questions |
88
91
  | `/session-report` | End of session — generate summary for stakeholders |
89
92
  | `/secure-phase [N]` | After execution — per-phase STRIDE security verification |
93
+ | `/validate-phase [N]` | Retroactive test coverage audit for a completed phase |
94
+ | `/diagnose-issues` | Batch-diagnose multiple UAT issues after `/verify-work` |
90
95
  | `/docs-update` | Generate or update project documentation |
96
+ | `/sync-docs` | After code changes — detect stale documentation |
91
97
  | `/extract-learnings [N]` | After phase completion — structured learning extraction |
92
98
  | `/milestone-summary` | Generate comprehensive milestone summary for team onboarding |
99
+ | `/forensics` | Something went wrong — post-mortem investigation (read-only) |
100
+ | `/undo` | Need to revert commits safely — preserves git history |
101
+ | `/knowledge-base` | Aggregate learnings across sessions into searchable KNOWLEDGE.md |
102
+ | `/transition` | Hand off project context to a new session or collaborator |
93
103
 
94
104
  ## Planning Artifacts
95
105
 
@@ -150,15 +160,36 @@ Set `"parallelization": { "enabled": true|false }` in `.planning/config.json` ba
150
160
 
151
161
  ## Structured Questions
152
162
 
153
- When workflows include `AskUserQuestion()` blocks, **Cursor has no native structured question tool**. Present each question as a numbered text list with descriptions and ask the user to reply with their choice number or label. Example:
163
+ When workflows include `AskUserQuestion()` blocks, **Cursor has no native structured question tool**. Present each question as a numbered text list with descriptions and ask the user to reply with their choice number or label. Present questions in rounds (Round 1: core settings, Round 2: workflow agents, Round 3: pipeline & git, Round 4: parallelization). **Wait for the user's reply after EACH round before showing the next.** Do NOT present all questions at once.
154
164
 
165
+ Example:
155
166
  ```
156
167
  **Working Style**
157
168
  How do you want to work?
158
- 1. YOLO (Recommended) — Auto-approve steps, just execute
169
+ 1. Auto (Recommended) — Auto-approve steps, just execute
159
170
  2. Interactive — Confirm at each step
160
171
  ```
161
172
 
173
+ ## Config Schema
174
+
175
+ After all configuration rounds are answered, write `.planning/config.json` with this EXACT schema. Map user answers to these keys — do NOT invent keys like `working_style`, `model_tier`, `platform`, `milestone`, or `phases`:
176
+
177
+ - Working Style → `"mode"`: `"auto"` or `"interactive"`
178
+ - Granularity → `"granularity"`: `"coarse"`, `"standard"`, or `"fine"`
179
+ - Learning Partner → `"learning_mode"`: `"auto"` or `"manual"`
180
+ - AI Models → `"model_profile"`: `"balanced"`, `"quality"`, or `"budget"`
181
+ - Research → `"workflow.research"`: `true` or `false`
182
+ - Plan Check → `"workflow.plan_check"`: `true` or `false`
183
+ - Verifier → `"workflow.verifier"`: `true` or `false`
184
+ - Review → `"workflow.review"`: `true` or `false`
185
+ - TDD → `"test_first"`: `true` or `false`
186
+ - Ship Pipeline → `"ship.auto_test"`, `"ship.conventional_commits"`, `"ship.pr_template"`
187
+ - Git Tracking → `"planning.commit_docs"`: `true` or `false`
188
+ - Commit Mode → `"planning.commit_mode"`: `"auto"` or `"manual"`
189
+ - Parallel Execution → `"parallelization.enabled"`: `true` or `false`
190
+
191
+ Run the config verification gate after writing — it must print `CONFIG_VALID`.
192
+
162
193
  ## Learning Mode
163
194
 
164
195
  Read `learning_mode` from `.planning/config.json` (default: "auto"):
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "2.3.1",
3
+ "version": "2.3.2",
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/",
@@ -229,7 +229,7 @@ The `parallelization` field is now an object. Legacy flat `"parallelization": tr
229
229
 
230
230
  ### Gates Section
231
231
 
232
- Controls which confirmation prompts are shown during workflows. Set to `false` to skip specific confirmations (useful for experienced users in yolo mode).
232
+ Controls which confirmation prompts are shown during workflows. Set to `false` to skip specific confirmations (useful for experienced users in auto mode).
233
233
 
234
234
  | Option | Default | Description |
235
235
  |--------|---------|-------------|
@@ -181,6 +181,8 @@ AskUserQuestion([
181
181
  ])
182
182
  ```
183
183
 
184
+ > 🛑 STOP. Wait for the user's reply before continuing.
185
+
184
186
  ## Step 5: Record Decision
185
187
 
186
188
  If the user makes a decision based on the challenge:
@@ -64,6 +64,8 @@ AskUserQuestion([
64
64
  ])
65
65
  ```
66
66
 
67
+ > 🛑 STOP. Wait for the user's reply before continuing.
68
+
67
69
  Then ask as follow-ups (one at a time):
68
70
  - "What did you expect to happen?"
69
71
  - "What have you already tried?"
@@ -127,6 +127,8 @@ AskUserQuestion([
127
127
  ])
128
128
  ```
129
129
 
130
+ > 🛑 STOP. Wait for the user's reply before continuing.
131
+
130
132
  ## Step 6: Create Fix Plans
131
133
 
132
134
  For each fix group, write a PLAN.md in the phase directory:
@@ -49,6 +49,8 @@ AskUserQuestion([
49
49
  ])
50
50
  ```
51
51
 
52
+ > 🛑 STOP. Wait for the user's reply before continuing.
53
+
52
54
  ## Step 2: Discuss Goals
53
55
 
54
56
  Ask openly: **"What do you want this milestone to achieve?"**
@@ -73,6 +73,8 @@ AskUserQuestion([
73
73
  ])
74
74
  ```
75
75
 
76
+ > 🛑 STOP. Wait for the user's reply before continuing.
77
+
76
78
  If "Skip" → exit workflow.
77
79
 
78
80
  If no CONTEXT.md exists but plans already exist for this phase:
@@ -91,6 +93,8 @@ AskUserQuestion([
91
93
  ])
92
94
  ```
93
95
 
96
+ > 🛑 STOP. Wait for the user's reply before continuing.
97
+
94
98
  ## Step 3: Scout Codebase
95
99
 
96
100
  Do a lightweight scan to inform the discussion. Look for:
@@ -164,6 +168,8 @@ AskUserQuestion([
164
168
  ])
165
169
  ```
166
170
 
171
+ > 🛑 STOP. Wait for the user's reply before continuing.
172
+
167
173
  If "All clear" → skip to Step 6.
168
174
 
169
175
  **For each selected area, discuss:**
@@ -186,6 +192,8 @@ AskUserQuestion([
186
192
  ])
187
193
  ```
188
194
 
195
+ > 🛑 STOP. Wait for the user's reply before continuing.
196
+
189
197
  3. After 4 questions, ask: "More questions about [area], or move to next?"
190
198
  4. If more → ask 4 more, then check again
191
199
 
@@ -207,6 +215,8 @@ AskUserQuestion([
207
215
  ])
208
216
  ```
209
217
 
218
+ > 🛑 STOP. Wait for the user's reply before continuing.
219
+
210
220
  <scope_guardrail>
211
221
  **No scope creep.** The phase boundary comes from ROADMAP.md and is FIXED. Discussion clarifies HOW to implement what's scoped, never WHETHER to add new capabilities.
212
222
 
@@ -178,6 +178,6 @@ Edit project settings with `/settings` or directly:
178
178
  cat .planning/config.json
179
179
  ```
180
180
 
181
- Key settings: `mode` (yolo/interactive), `model_profile` (quality/balanced/budget), `learning_mode` (auto/manual).
181
+ Key settings: `mode` (auto/interactive), `model_profile` (quality/balanced/budget), `learning_mode` (auto/manual).
182
182
 
183
183
  See `README.md` for the full configuration reference.
@@ -89,6 +89,8 @@ AskUserQuestion([
89
89
  ])
90
90
  ```
91
91
 
92
+ > 🛑 STOP. Wait for the user's reply before continuing.
93
+
92
94
  If yes: read `parallelization` from `.planning/config.json`. If `parallelization.enabled` is true, spawn a researcher agent:
93
95
  ```
94
96
  Task(
@@ -119,6 +119,8 @@ AskUserQuestion([
119
119
  ])
120
120
  ```
121
121
 
122
+ > 🛑 STOP. Wait for the user's reply before continuing.
123
+
122
124
  Note: Any corrections discussed here are not automatically captured. Run `discuss-phase [N]` to write them to a CONTEXT.md that planners will read.
123
125
 
124
126
  ---
@@ -121,10 +121,14 @@ Note the tech stack, key directories, and any README content internally. Use thi
121
121
 
122
122
  ## Step 2: Configuration
123
123
 
124
- Present configuration questions using structured question rounds. Use your platform's interactive question tool, or numbered text lists if unavailable.
124
+ > **🔴 MANDATORY INTERACTIVE QUESTIONS — You MUST present each round as a blocking question using `AskUserQuestion` (or your platform's equivalent: `ask_user_question` on Windsurf, `ask_user` on Gemini, `request_user_input` on Codex). Each round is a SEPARATE blocking call. Do NOT combine all rounds into one. Do NOT render questions as plain text or markdown lists you MUST use the interactive question tool so the user clicks options. Wait for the user's reply after EACH round before showing the next round.**
125
+ >
126
+ > **🛑 FORBIDDEN:** Do NOT present all questions at once as a text wall. Do NOT skip any question. Do NOT invent answers. Do NOT proceed to the config.json write step until ALL 4 rounds have been answered by the user.
125
127
 
126
128
  **Round 1 — Core settings (4 questions):**
127
129
 
130
+ > Present these 4 questions as a SINGLE blocking `AskUserQuestion` call. STOP and wait for the user's reply before proceeding to Round 2.
131
+
128
132
  ```
129
133
  AskUserQuestion([
130
134
  {
@@ -132,7 +136,7 @@ AskUserQuestion([
132
136
  question: "How do you want to work?",
133
137
  multiSelect: false,
134
138
  options: [
135
- { label: "YOLO (Recommended)", description: "Auto-approve steps, just execute" },
139
+ { label: "Auto (Recommended)", description: "Auto-approve steps, just execute" },
136
140
  { label: "Interactive", description: "Confirm at each step" }
137
141
  ]
138
142
  },
@@ -168,8 +172,12 @@ AskUserQuestion([
168
172
  ])
169
173
  ```
170
174
 
175
+ > 🛑 STOP. Wait for the user's Round 1 reply before continuing.
176
+
171
177
  **Round 2 — Workflow agents (5 questions):**
172
178
 
179
+ > Present these 5 questions as a SINGLE blocking `AskUserQuestion` call. STOP and wait for the user's reply before proceeding to Round 3.
180
+
173
181
  ```
174
182
  AskUserQuestion([
175
183
  {
@@ -220,8 +228,12 @@ AskUserQuestion([
220
228
  ])
221
229
  ```
222
230
 
231
+ > 🛑 STOP. Wait for the user's Round 2 reply before continuing.
232
+
223
233
  **Round 3 — Pipeline & git (4 questions):**
224
234
 
235
+ > Present these 4 questions as a SINGLE blocking `AskUserQuestion` call. STOP and wait for the user's reply before proceeding to Round 4.
236
+
225
237
  ```
226
238
  AskUserQuestion([
227
239
  {
@@ -264,13 +276,35 @@ AskUserQuestion([
264
276
  ])
265
277
  ```
266
278
 
279
+ > 🛑 STOP. Wait for the user's Round 3 reply before continuing.
280
+
267
281
  <!-- LEARNSHIP_PARALLEL_BLOCK -->
268
282
 
283
+ > 🛑 STOP. Wait for the user's Round 4 reply (parallelization) before continuing.
284
+
285
+ **Now create `.planning/config.json`** — use EXACTLY this schema. Map the user's answers to these keys. Do NOT invent keys. Do NOT use flat keys like `working_style`, `model_tier`, `platform`, `milestone`, or `phases` — those are WRONG.
286
+
287
+ **Key mapping from questions to config:**
288
+ - Working Style → `"mode"`: `"auto"` or `"interactive"`
289
+ - Granularity → `"granularity"`: `"coarse"`, `"standard"`, or `"fine"`
290
+ - Learning Partner → `"learning_mode"`: `"auto"` or `"manual"`
291
+ - AI Models → `"model_profile"`: `"balanced"`, `"quality"`, or `"budget"`
292
+ - Research → `"workflow.research"`: `true` or `false`
293
+ - Plan Check → `"workflow.plan_check"`: `true` or `false`
294
+ - Verifier → `"workflow.verifier"`: `true` or `false`
295
+ - Review → `"workflow.review"`: `true` or `false`
296
+ - Solutions Search → `"workflow.solutions_search"`: `true` or `false`
297
+ - TDD → `"test_first"`: `true` or `false`
298
+ - Ship Pipeline → `"ship.auto_test"`, `"ship.conventional_commits"`, `"ship.pr_template"`: each `true` or `false`
299
+ - Git Tracking → `"planning.commit_docs"`: `true` or `false`
300
+ - Commit Mode → `"planning.commit_mode"`: `"auto"` or `"manual"`
301
+ - Parallel Execution → `"parallelization.enabled"`: `true` or `false`
302
+
269
303
  Create `.planning/config.json` with all settings:
270
304
 
271
305
  ```json
272
306
  {
273
- "mode": "yolo|interactive",
307
+ "mode": "auto|interactive",
274
308
  "granularity": "coarse|standard|fine",
275
309
  "model_profile": "quality|balanced|budget",
276
310
  "learning_mode": "auto|manual",
@@ -332,6 +366,38 @@ Create `.planning/config.json` with all settings:
332
366
 
333
367
  **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.
334
368
 
369
+ **Verify config.json was written correctly:**
370
+
371
+ ```bash
372
+ node -e "
373
+ const fs=require('fs');
374
+ try{
375
+ const c=JSON.parse(fs.readFileSync('.planning/config.json','utf8'));
376
+ const errs=[];
377
+ if(!['auto','interactive'].includes(c.mode)) errs.push('mode must be auto|interactive, got: '+c.mode);
378
+ if(!['coarse','standard','fine'].includes(c.granularity)) errs.push('granularity must be coarse|standard|fine');
379
+ if(!['quality','balanced','budget'].includes(c.model_profile)) errs.push('model_profile must be quality|balanced|budget');
380
+ if(!['auto','manual'].includes(c.learning_mode)) errs.push('learning_mode must be auto|manual');
381
+ if(typeof c.test_first!=='boolean') errs.push('test_first must be boolean');
382
+ if(!c.planning||!['auto','manual'].includes(c.planning.commit_mode)) errs.push('planning.commit_mode must be auto|manual');
383
+ if(!c.workflow||typeof c.workflow.research!=='boolean') errs.push('workflow.research must be boolean');
384
+ if(!c.workflow||typeof c.workflow.plan_check!=='boolean') errs.push('workflow.plan_check must be boolean');
385
+ if(!c.workflow||typeof c.workflow.verifier!=='boolean') errs.push('workflow.verifier must be boolean');
386
+ if(!c.workflow||typeof c.workflow.review!=='boolean') errs.push('workflow.review must be boolean');
387
+ if(!c.parallelization||typeof c.parallelization.enabled!=='boolean') errs.push('parallelization.enabled must be boolean');
388
+ if(!c.ship||typeof c.ship.auto_test!=='boolean') errs.push('ship.auto_test must be boolean');
389
+ const bad=['working_style','model_tier','platform','milestone','phases','commit_mode'];
390
+ for(const k of bad){if(k in c)errs.push('FORBIDDEN top-level key: '+k+' — use the nested schema');}
391
+ if(errs.length){console.log('CONFIG_INVALID');errs.forEach(e=>console.log(' - '+e));}
392
+ else console.log('CONFIG_VALID');
393
+ }catch(e){console.log('CONFIG_MISSING_OR_CORRUPT: '+e.message);}
394
+ "
395
+ ```
396
+
397
+ **If `CONFIG_INVALID` or `CONFIG_MISSING_OR_CORRUPT`:** The config file is wrong. Fix it to match the schema above exactly, then re-run the verification. Do NOT proceed until it passes.
398
+
399
+ **If `CONFIG_VALID`:** Continue.
400
+
335
401
  If `planning.commit_docs` is false, add `.planning/` to `.gitignore`:
336
402
  ```bash
337
403
  echo ".planning/" >> .gitignore
@@ -91,6 +91,8 @@ AskUserQuestion([
91
91
  ])
92
92
  ```
93
93
 
94
+ > 🛑 STOP. Wait for the user's reply before continuing.
95
+
94
96
  If "All clear" → skip to Step 4.
95
97
 
96
98
  For each selected area, ask 1-2 focused questions with concrete options using structured questions. Max 2 questions per area — keep it lightweight.
@@ -94,6 +94,8 @@ AskUserQuestion([
94
94
  ])
95
95
  ```
96
96
 
97
+ > 🛑 STOP. Wait for the user's reply before continuing.
98
+
97
99
  ## Step 5: Resolve Open Threats
98
100
 
99
101
  Read `parallelization` from `.planning/config.json` (defaults to `false`).
@@ -152,6 +154,8 @@ AskUserQuestion([
152
154
  ])
153
155
  ```
154
156
 
157
+ > 🛑 STOP. Wait for the user's reply before continuing.
158
+
155
159
  ## Step 6: Write SECURITY.md
156
160
 
157
161
  Write `.planning/phases/[padded_phase]-[phase_slug]/[padded_phase]-SECURITY.md` using `@./templates/security.md`:
@@ -18,7 +18,7 @@ If missing, create from template:
18
18
  ```bash
19
19
  cp templates/config.json .planning/config.json 2>/dev/null || cat > .planning/config.json << 'EOF'
20
20
  {
21
- "mode": "interactive",
21
+ "mode": "auto",
22
22
  "granularity": "standard",
23
23
  "model_profile": "balanced",
24
24
  "learning_mode": "auto",
@@ -117,7 +117,7 @@ AskUserQuestion([
117
117
  question: "Working style?",
118
118
  multiSelect: false,
119
119
  options: [
120
- { label: "YOLO", description: "Auto-approve steps, just execute" },
120
+ { label: "Auto", description: "Auto-approve steps, just execute" },
121
121
  { label: "Interactive", description: "Confirm at each step, more control" }
122
122
  ]
123
123
  },
@@ -143,6 +143,8 @@ AskUserQuestion([
143
143
  ])
144
144
  ```
145
145
 
146
+ > 🛑 STOP. Wait for the user's reply before continuing.
147
+
146
148
  **Round 2 — Workflow agents (6 questions):**
147
149
 
148
150
  ```
@@ -204,6 +206,8 @@ AskUserQuestion([
204
206
  ])
205
207
  ```
206
208
 
209
+ > 🛑 STOP. Wait for the user's reply before continuing.
210
+
207
211
  **Round 3 — Pipeline & git (4 questions):**
208
212
 
209
213
  ```
@@ -249,6 +253,8 @@ AskUserQuestion([
249
253
  ])
250
254
  ```
251
255
 
256
+ > 🛑 STOP. Wait for the user's reply before continuing.
257
+
252
258
  ## Step 5: Save Config
253
259
 
254
260
  After user types "done", read the current config, apply all changes, and write the complete updated JSON. Preserve any fields not shown in the menu (gates, hooks, etc.) — never drop fields the user didn't modify.
@@ -97,6 +97,8 @@ AskUserQuestion([
97
97
  ])
98
98
  ```
99
99
 
100
+ > 🛑 STOP. Wait for the user's reply before continuing.
101
+
100
102
  **If "Fill all gaps":**
101
103
 
102
104
  Read `parallelization` from `.planning/config.json` (defaults to `false`).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "learnship",
3
- "version": "2.3.1",
3
+ "version": "2.3.2",
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",
@@ -56,6 +56,6 @@
56
56
  "test": "bash tests/run_all.sh"
57
57
  },
58
58
  "engines": {
59
- "node": ">=18.0.0"
59
+ "node": ">=22.0.0"
60
60
  }
61
61
  }
@@ -229,7 +229,7 @@ The `parallelization` field is now an object. Legacy flat `"parallelization": tr
229
229
 
230
230
  ### Gates Section
231
231
 
232
- Controls which confirmation prompts are shown during workflows. Set to `false` to skip specific confirmations (useful for experienced users in yolo mode).
232
+ Controls which confirmation prompts are shown during workflows. Set to `false` to skip specific confirmations (useful for experienced users in auto mode).
233
233
 
234
234
  | Option | Default | Description |
235
235
  |--------|---------|-------------|
@@ -1,5 +1,5 @@
1
1
  {
2
- "mode": "interactive",
2
+ "mode": "auto",
3
3
  "granularity": "standard",
4
4
  "context": "dev",
5
5
  "model_profile": "balanced",