@skill-map/cli 0.60.3 → 0.61.0

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.
Files changed (87) hide show
  1. package/README.md +1 -1
  2. package/dist/cli/tutorial/sm-tutorial/SKILL.md +149 -263
  3. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/en/agents-hub.md +2 -0
  4. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/agents-hub/es/agents-hub.md +2 -0
  5. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/content-editor-style/en/content-editor-style.md +1 -0
  6. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/content-editor-style/es/content-editor-style.md +1 -0
  7. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-agent.md +1 -0
  8. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-command.md +1 -0
  9. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-guideline.md +1 -0
  10. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-guideline2.md +1 -0
  11. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/en/todo-bullet-skill.md +1 -0
  12. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-agent.md +1 -0
  13. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-command.md +1 -0
  14. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-guideline.md +1 -0
  15. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-guideline2.md +1 -0
  16. package/dist/cli/tutorial/sm-tutorial/fixtures-data/edits/todo-connectors/es/todo-bullet-skill.md +1 -0
  17. package/dist/cli/tutorial/sm-tutorial/fixtures-data/manifest.json +87 -0
  18. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/cli-external/en/link-validation/hijoA/note-with-external-link.md +10 -0
  19. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/cli-external/en/link-validation/hijoB/spec.md +11 -0
  20. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/cli-external/es/link-validation/hijoA/note-with-external-link.md +10 -0
  21. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/cli-external/es/link-validation/hijoB/spec.md +11 -0
  22. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/en/__PROVIDER__/commands/publish.md +15 -0
  23. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/en/__PROVIDER__/skills/check-links/SKILL.md +16 -0
  24. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/es/__PROVIDER__/commands/publish.md +16 -0
  25. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/harness/es/__PROVIDER__/skills/check-links/SKILL.md +17 -0
  26. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/en/__PROVIDER__/agents/master-agent.md +14 -0
  27. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/en/__PROVIDER__/skills/master-skill/SKILL.md +18 -0
  28. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/en/notes/ideas.md +11 -0
  29. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/es/__PROVIDER__/agents/master-agent.md +15 -0
  30. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/es/__PROVIDER__/skills/master-skill/SKILL.md +18 -0
  31. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/master/es/notes/ideas.md +11 -0
  32. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/AGENTS.md +6 -0
  33. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/__PROVIDER__/agents/content-editor.md +21 -0
  34. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/docs/DEPLOY.md +11 -0
  35. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/docs/STYLE.md +20 -0
  36. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/en/public/index.html +5 -0
  37. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/AGENTS.md +7 -0
  38. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/__PROVIDER__/agents/content-editor.md +21 -0
  39. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/docs/DEPLOY.md +12 -0
  40. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/docs/STYLE.md +21 -0
  41. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/es/public/index.html +5 -0
  42. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/shared/CLAUDE.md +1 -0
  43. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/shared/package.json +6 -0
  44. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/portfolio/shared/server.js +11 -0
  45. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/__PROVIDER__/agents/demo-agent.md +18 -0
  46. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/__PROVIDER__/commands/demo-command.md +11 -0
  47. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/__PROVIDER__/skills/demo-skill/SKILL.md +16 -0
  48. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/notes/demo-guideline.md +16 -0
  49. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/notes/demo-guideline2.md +12 -0
  50. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/notes/private-credentials.md +11 -0
  51. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/en/notes/todo.md +9 -0
  52. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/__PROVIDER__/agents/demo-agent.md +18 -0
  53. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/__PROVIDER__/commands/demo-command.md +11 -0
  54. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/__PROVIDER__/skills/demo-skill/SKILL.md +16 -0
  55. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/notes/demo-guideline.md +16 -0
  56. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/notes/demo-guideline2.md +13 -0
  57. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/notes/private-credentials.md +11 -0
  58. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/prologue/es/notes/todo.md +9 -0
  59. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/universal/en/findings.md +10 -0
  60. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/universal/es/findings.md +10 -0
  61. package/dist/cli/tutorial/sm-tutorial/fixtures-data/sets/universal/shared/.skillmapignore +28 -0
  62. package/dist/cli/tutorial/sm-tutorial/references/_core.md +55 -40
  63. package/dist/cli/tutorial/sm-tutorial/references/_manifest.json +309 -0
  64. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +1 -1
  65. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +94 -271
  66. package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +1 -2
  67. package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +7 -30
  68. package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +12 -30
  69. package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +6 -4
  70. package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +14 -116
  71. package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +2 -3
  72. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +13 -69
  73. package/dist/cli/tutorial/sm-tutorial/scripts/fixtures.js +238 -0
  74. package/dist/cli/tutorial/sm-tutorial/scripts/lib/args.js +29 -0
  75. package/dist/cli/tutorial/sm-tutorial/scripts/lib/fixtures-manifest.js +32 -0
  76. package/dist/cli/tutorial/sm-tutorial/scripts/lib/io.js +37 -0
  77. package/dist/cli/tutorial/sm-tutorial/scripts/lib/manifest.js +24 -0
  78. package/dist/cli/tutorial/sm-tutorial/scripts/lib/paths.js +68 -0
  79. package/dist/cli/tutorial/sm-tutorial/scripts/state.js +262 -0
  80. package/dist/cli.js +7 -8
  81. package/dist/index.js +6 -4
  82. package/dist/kernel/index.js +6 -4
  83. package/dist/ui/chunk-FDBHGLTW.js +3 -0
  84. package/dist/ui/index.html +1 -1
  85. package/dist/ui/{main-HAPQJZOA.js → main-5GMGTLYQ.js} +1 -1
  86. package/package.json +5 -3
  87. package/dist/ui/chunk-HOIHEE6W.js +0 -3
@@ -193,16 +193,22 @@ first kind quoted, the second kind never.
193
193
  `sm init` in pre-flight, the tester runs it as the first taught
194
194
  step. You also DO NOT run `sm plugins create` on their behalf;
195
195
  the scaffold is part of the authoring chapters.
196
- Your responsibilities: `Write` fixture files and the state file;
197
- `Edit` `.md` fixtures when a chapter calls for it (the live-UI
198
- chapters need this so the watcher has something to react to);
199
- `Read` files to verify what the tester modified. Everything else
200
- the tester runs.
196
+ **The tutorial's own backstage scripts are NOT teaching `sm` verbs.**
197
+ `node .claude/skills/sm-tutorial/scripts/fixtures.js …` (lays /
198
+ seeds / clears fixtures) and `…/scripts/state.js …` (owns the state
199
+ file) are machinery you run silently, the same class as `Write`.
200
+ Your responsibilities: run those scripts to lay / seed / clear
201
+ fixtures and to read / update progress; `Edit` a fixture `.md` when
202
+ a chapter's live-UI beat needs the watcher to react, or generate
203
+ tester-specific content yourself when a chapter calls for it (the
204
+ daily loop's pages); `Read` files to verify what the tester
205
+ modified. Everything else the tester runs.
201
206
  2. **Configuration files have two-mode access.**
202
- - **Backstage setup (you DO edit)**: writing the universal
203
- `.skillmapignore` in pre-flight and appending a part's own
204
- additions on entry (the portfolio's `node_modules/` / `public/`);
205
- writing the state file; writing fixture `.md` files.
207
+ - **Backstage setup (you DO run the scripts)**: laying the
208
+ universal files (`.skillmapignore`, `findings.md`) and every
209
+ fixture via `fixtures.js`; reading / updating progress via
210
+ `state.js`. You never embed file content or hand-edit the state
211
+ file; the scripts own both.
206
212
  - **Teach moment (you DO NOT edit)**: any change to
207
213
  `.skill-map/settings.json`, `.skill-map/settings.local.json`,
208
214
  `.skillmapignore`, or `.gitignore` that is part of a chapter
@@ -212,9 +218,11 @@ first kind quoted, the second kind never.
212
218
  too.
213
219
  3. **After every command block, stop and wait.** The tester pastes
214
220
  the output or replies "OK" / "done". Only then advance.
215
- 4. **Persist progress after every chapter.** Update the state file
216
- (`parts.<id>.chapters.<id>.status` = `done` / `failed` /
217
- `skipped` + a timestamp). The state file is the ONLY progress
221
+ 4. **Persist progress after every chapter** by running
222
+ `node .claude/skills/sm-tutorial/scripts/state.js mark <part> <chapter> done|failed|skipped`.
223
+ The script owns `tutorial-state.json` (stamps the timestamp and
224
+ auto-promotes the part to `done` when its last chapter lands);
225
+ never hand-edit the file. The state file is the ONLY progress
218
226
  tracker. Do NOT create harness tasks (`TaskCreate` / `TaskUpdate`)
219
227
  for tutorial progress, they clutter the tester's task list and add
220
228
  nothing the state file does not already hold.
@@ -233,9 +241,9 @@ first kind quoted, the second kind never.
233
241
  per exchange, `auto-advance` may chain chapters that need no tester
234
242
  action; neither asks "¿seguimos?".)
235
243
  7. **If the state file already exists** when invoked, do not
236
- overwrite anything. Read it, show progress, offer to continue,
237
- pick another part, or start over (the last requires explicit
238
- confirmation, see §Resume / restart).
244
+ overwrite anything. Run `state.js status`, show progress, offer to
245
+ continue, pick another part, or start over (the last requires
246
+ explicit confirmation, see §Resume / restart).
239
247
  8. **Never modify files outside the tutorial cwd.**
240
248
  9. **Never ask the tester to `cd` outside the tutorial cwd.** All
241
249
  command blocks assume the second terminal is anchored to the
@@ -272,12 +280,18 @@ on-disk convention:
272
280
  Persist `provider` into the state file (`tutorial.provider`) so a
273
281
  resumed session does not re-detect.
274
282
 
275
- **Global substitution rule**: wherever a part file says `.claude/`,
276
- swap it for the detected `<provider_dir>`. **Skip any fixture file
277
- or step whose kind is not in the provider's supported set** (on
278
- `agent-skills` / Antigravity: only the skill + markdown notes are
279
- valid; drop agent + command files and the connectors that target
280
- them, and adjust node counts accordingly).
283
+ **Global substitution rule**: the fixture scripts do the file-level
284
+ work. You pass `--provider <p>` (the value persisted in
285
+ `tutorial.provider`) and `--lang <l>`, and they resolve the
286
+ `__PROVIDER__` path token, skip files whose kind the provider does
287
+ not claim, and report the adjusted `nodeCount` plus the `skipped`
288
+ list in their summary. Your job is the **narration**: wherever a part
289
+ file's tester-facing prose says `.claude/`, swap it for the detected
290
+ `<provider_dir>`, and narrate the node count from the script summary
291
+ (on `agent-skills` / Antigravity only the skill + markdown notes
292
+ exist, so the count is lower and the agent / command beats fold
293
+ away). The campaign cross-link chapters target `claude` today (see
294
+ the reality check below).
281
295
 
282
296
  **Reality check (don't mention to the tester)**: this skill ships
283
297
  at `.claude/skills/sm-tutorial/`, so Claude Code is the only host
@@ -429,25 +443,26 @@ the title stays plain):
429
443
  ## Resume / restart
430
444
 
431
445
  When re-invoked and the state file already exists, do NOT repeat
432
- pre-flight from scratch. Show progress (one line per part with its
433
- status) and offer: **continue** the current part, **pick another
434
- part** (re-show the ToC), **start over** (wipes the tutorial
435
- content, asks for confirmation), or **exit**.
436
-
437
- On **start over**, before deleting anything:
438
-
439
- 1. Read `tutorial.cwd` from the state file and compare with `pwd`.
440
- If they differ, **refuse** and tell the tester to move to the
441
- saved cwd or delete the state file by hand (their `.claude/`,
442
- `notes/`, etc. here are probably theirs, not the tutorial's).
443
- 2. If the cwd matches, read `tutorial.provider`, compute
444
- `<provider_dir>` + the subset of files actually created, show
445
- the exact list of paths you'll delete, and require the literal
446
- typed confirmation `yes, wipe`.
447
- 3. Only on `yes, wipe`, delete those exact paths (do NOT `rm -rf`
448
- `<provider_dir>/` or `notes/` as directories, only the specific
449
- tutorial-owned files inside; `rmdir` empty parents silently).
450
- Then start from pre-flight.
446
+ pre-flight from scratch. Run
447
+ `node .claude/skills/sm-tutorial/scripts/state.js status` and render
448
+ progress from its `parts[]` (one line per part with its status), then
449
+ offer: **continue** the current part, **pick another part** (re-show
450
+ the ToC), **start over** (wipes the tutorial content, asks for
451
+ confirmation), or **exit**.
452
+
453
+ On **start over**, the script owns the path computation and the cwd
454
+ safety check:
455
+
456
+ 1. Run `state.js wipe-list`. It re-checks `tutorial.cwd` against the
457
+ current dir and returns a `cwd-mismatch` error if they differ;
458
+ surface that refusal (tell the tester to move to the saved cwd or
459
+ delete `tutorial-state.json` by hand, their `.claude/`, `notes/`,
460
+ etc. here are probably theirs).
461
+ 2. Show the returned `paths` and require the literal typed
462
+ confirmation `yes, wipe`.
463
+ 3. Only on `yes, wipe`, run `state.js wipe --confirm` (it deletes
464
+ exactly those paths and `rmdir`s empty parents, never a whole user
465
+ dir). Then start from pre-flight.
451
466
 
452
467
  ## Edge cases
453
468
 
@@ -0,0 +1,309 @@
1
+ {
2
+ "parts": [
3
+ {
4
+ "id": "fundamentals",
5
+ "order": 0,
6
+ "title": "The live map (prologue)",
7
+ "status": "active",
8
+ "preflight": "taught-init",
9
+ "seed": null,
10
+ "prereq": null,
11
+ "pace": "per-step",
12
+ "chapters": [
13
+ {
14
+ "id": "init",
15
+ "title": "Your first node (sm init, sm, the UI)",
16
+ "est_min": 2
17
+ },
18
+ {
19
+ "id": "kinds",
20
+ "title": "The other kinds appear",
21
+ "est_min": 1
22
+ },
23
+ {
24
+ "id": "first-edit",
25
+ "title": "Your first edit (the watcher reacts)",
26
+ "est_min": 1
27
+ },
28
+ {
29
+ "id": "connectors",
30
+ "title": "The connectors light up",
31
+ "est_min": 2
32
+ },
33
+ {
34
+ "id": "inspector",
35
+ "title": "The inspector and connections",
36
+ "est_min": 1
37
+ },
38
+ {
39
+ "id": "edit-link",
40
+ "title": "Edit a link, the topology changes",
41
+ "est_min": 3
42
+ },
43
+ {
44
+ "id": "workspace",
45
+ "title": "Navigate the workspace (files, search, isolate)",
46
+ "est_min": 2
47
+ },
48
+ {
49
+ "id": "ignore",
50
+ "title": "Silence a file via .skillmapignore",
51
+ "est_min": 2
52
+ }
53
+ ]
54
+ },
55
+ {
56
+ "id": "project-kickoff",
57
+ "order": 1,
58
+ "title": "The project from zero",
59
+ "status": "active",
60
+ "preflight": "portfolio-init",
61
+ "seed": null,
62
+ "prereq": null,
63
+ "pace": "per-step",
64
+ "chapters": [
65
+ {
66
+ "id": "kickoff",
67
+ "title": "Start the portfolio (sm init on the real skeleton)",
68
+ "est_min": 2
69
+ },
70
+ {
71
+ "id": "manual",
72
+ "title": "The handbook and CLAUDE.md (@AGENTS.md)",
73
+ "est_min": 2
74
+ },
75
+ {
76
+ "id": "first-agent",
77
+ "title": "The first harness agent (content-editor)",
78
+ "est_min": 2
79
+ },
80
+ {
81
+ "id": "real-kinds",
82
+ "title": "The real kinds in context",
83
+ "est_min": 2
84
+ }
85
+ ]
86
+ },
87
+ {
88
+ "id": "connect-harness",
89
+ "order": 2,
90
+ "title": "Connect the harness",
91
+ "status": "active",
92
+ "preflight": "seed",
93
+ "seed": "harness-built",
94
+ "prereq": "project-kickoff",
95
+ "pace": "auto-advance",
96
+ "chapters": [
97
+ {
98
+ "id": "check-links",
99
+ "title": "The check-links skill",
100
+ "est_min": 2
101
+ },
102
+ {
103
+ "id": "publish",
104
+ "title": "The /publish command invokes the skill",
105
+ "est_min": 3
106
+ },
107
+ {
108
+ "id": "links",
109
+ "title": "Mentions (@) and references between assets",
110
+ "est_min": 3
111
+ },
112
+ {
113
+ "id": "confidence",
114
+ "title": "Connector confidence (opacity = certainty)",
115
+ "est_min": 2
116
+ }
117
+ ]
118
+ },
119
+ {
120
+ "id": "daily-loop",
121
+ "order": 3,
122
+ "title": "The daily loop (add, improve, publish)",
123
+ "status": "active",
124
+ "preflight": "seed",
125
+ "seed": "harness-connected",
126
+ "prereq": "connect-harness",
127
+ "pace": "auto-advance",
128
+ "chapters": [
129
+ {
130
+ "id": "setup",
131
+ "title": "Make it yours, make it presentable",
132
+ "est_min": 3
133
+ },
134
+ {
135
+ "id": "add-page",
136
+ "title": "Add a page with your agent",
137
+ "est_min": 4
138
+ },
139
+ {
140
+ "id": "orphan-draft",
141
+ "title": "A page nobody links to yet",
142
+ "est_min": 2
143
+ },
144
+ {
145
+ "id": "wire-and-improve",
146
+ "title": "Wire the draft in",
147
+ "est_min": 3
148
+ },
149
+ {
150
+ "id": "broken-ref",
151
+ "title": "A rename breaks a link",
152
+ "est_min": 4
153
+ },
154
+ {
155
+ "id": "reserved",
156
+ "title": "A reserved name collides",
157
+ "est_min": 2
158
+ },
159
+ {
160
+ "id": "publish",
161
+ "title": "Ship it: run /publish for real",
162
+ "est_min": 4
163
+ },
164
+ {
165
+ "id": "sidecar",
166
+ "title": "Annotate the handbook (.sm and consent)",
167
+ "est_min": 3
168
+ },
169
+ {
170
+ "id": "golive",
171
+ "title": "Your portfolio, live next to the graph",
172
+ "est_min": 3
173
+ }
174
+ ]
175
+ },
176
+ {
177
+ "id": "extend",
178
+ "order": 4,
179
+ "title": "Extend skill-map for the site",
180
+ "status": "active",
181
+ "preflight": "backstage-init",
182
+ "seed": null,
183
+ "prereq": null,
184
+ "pace": "auto-advance",
185
+ "chapters": [
186
+ {
187
+ "id": "settings-1-layers",
188
+ "title": "The config layers and `sm config list`",
189
+ "est_min": 3
190
+ },
191
+ {
192
+ "id": "settings-2-resolve",
193
+ "title": "Read, resolve, and set a value with `sm config`",
194
+ "est_min": 3
195
+ },
196
+ {
197
+ "id": "settings-3-lens",
198
+ "title": "The active provider lens (`activeProvider`)",
199
+ "est_min": 4
200
+ },
201
+ {
202
+ "id": "tour-1-intro",
203
+ "title": "How plugins work",
204
+ "est_min": 4
205
+ },
206
+ {
207
+ "id": "tour-2-kinds",
208
+ "title": "The six extension kinds",
209
+ "est_min": 5
210
+ },
211
+ {
212
+ "id": "tour-3-explore",
213
+ "title": "Explore one extension up close",
214
+ "est_min": 4
215
+ },
216
+ {
217
+ "id": "authoring-1-scaffold",
218
+ "title": "`sm plugins create demo-highlight`",
219
+ "est_min": 2
220
+ },
221
+ {
222
+ "id": "authoring-2-anatomy",
223
+ "title": "Tour the scaffold (plugin.json + stubs + README)",
224
+ "est_min": 3
225
+ },
226
+ {
227
+ "id": "authoring-3-edit-setting",
228
+ "title": "Edit a setting (string-list) and observe it in the UI",
229
+ "est_min": 3
230
+ },
231
+ {
232
+ "id": "authoring-4-edit-slot",
233
+ "title": "Change the view-slot the contribution targets",
234
+ "est_min": 2
235
+ },
236
+ {
237
+ "id": "settings-6-contributions",
238
+ "title": "Watch contributions land in the inspector",
239
+ "est_min": 2
240
+ },
241
+ {
242
+ "id": "authoring-5-doctor-author",
243
+ "title": "Catch a manifest mistake with `sm plugins doctor`",
244
+ "est_min": 2
245
+ },
246
+ {
247
+ "id": "authoring-6-upgrade",
248
+ "title": "Try `sm plugins upgrade`",
249
+ "est_min": 2
250
+ }
251
+ ]
252
+ },
253
+ {
254
+ "id": "cli",
255
+ "order": 5,
256
+ "title": "The CLI in depth",
257
+ "status": "active",
258
+ "preflight": "seed",
259
+ "seed": "prologue-built",
260
+ "prereq": "fundamentals",
261
+ "pace": "auto-advance",
262
+ "chapters": [
263
+ {
264
+ "id": "browse",
265
+ "title": "list / show / check",
266
+ "est_min": 3
267
+ },
268
+ {
269
+ "id": "graph-export",
270
+ "title": "graph / export (query, formatters)",
271
+ "est_min": 3
272
+ },
273
+ {
274
+ "id": "issues",
275
+ "title": "Issues and broken refs (--analyzers, --json)",
276
+ "est_min": 3
277
+ },
278
+ {
279
+ "id": "annotations",
280
+ "title": "Annotations and the .sm consent prompt",
281
+ "est_min": 3
282
+ },
283
+ {
284
+ "id": "reference-paths",
285
+ "title": "Validate links to folders outside the scan scope",
286
+ "est_min": 4
287
+ }
288
+ ]
289
+ },
290
+ {
291
+ "id": "mcp",
292
+ "order": 6,
293
+ "title": "MCP",
294
+ "status": "planned",
295
+ "preflight": "seed",
296
+ "seed": "harness-connected",
297
+ "prereq": "connect-harness",
298
+ "pace": "auto-advance",
299
+ "chapters": [
300
+ {
301
+ "id": "mcp-node",
302
+ "title": "\"content-editor declares an MCP tool",
303
+ "est_min": 3
304
+ }
305
+ ]
306
+ }
307
+ ],
308
+ "findings_file": "./findings.md"
309
+ }
@@ -77,7 +77,7 @@ parts:
77
77
  - id: authoring-3-edit-setting ; title: "Edit a setting (string-list) and observe it in the UI" ; est_min: 3
78
78
  - id: authoring-4-edit-slot ; title: "Change the view-slot the contribution targets" ; est_min: 2
79
79
  - id: settings-6-contributions ; title: "Watch contributions land in the inspector" ; est_min: 2
80
- - id: authoring-5-doctor-author; title: "Catch a manifest mistake with `sm plugins doctor`" ; est_min: 2
80
+ - id: authoring-5-doctor-author ; title: "Catch a manifest mistake with `sm plugins doctor`" ; est_min: 2
81
81
  - id: authoring-6-upgrade ; title: "Try `sm plugins upgrade`" ; est_min: 2
82
82
 
83
83
  - id: cli