@skill-map/cli 0.53.3 → 0.53.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.
@@ -145,7 +145,7 @@ every other `<cwd>` mention.
145
145
  > output, and I verify.
146
146
  > 2. **A second terminal**: open it now (new window or tab), then run
147
147
  > the command below so it's anchored **exactly to this folder**.
148
- > That's where you copy and paste every `sm` command.
148
+ > That's where you copy and paste every command I give you to run.
149
149
 
150
150
  ```bash
151
151
  cd <cwd>
@@ -160,9 +160,19 @@ cd <cwd>
160
160
  ### 5. Write the universal files and show the menu
161
161
 
162
162
  Pre-flight does NOT pre-lay any part's fixture and does NOT auto-enter
163
- a part. It writes only the two files every part needs, then routes to
164
- the menu:
165
-
163
+ a part. It writes only the universal files every part needs, then
164
+ routes to the menu:
165
+
166
+ - `.skillmapignore` (block below). Universal, not a part fixture:
167
+ every part scans, and every part needs the tutorial's own machinery
168
+ kept out of the map (this skill's `.claude/skills/sm-tutorial/` dir,
169
+ `findings.md`, `tutorial-state.yml`, the CLI part's
170
+ `link-validation/`, and so on). Writing it here, once, before any
171
+ `sm init`, is what guarantees no part-entry can forget it on a
172
+ direct jump from the menu. `sm init` only writes `.skillmapignore`
173
+ when it is absent, so the tester's later `sm init` leaves this one
174
+ intact. Parts that need more append their own lines on entry (the
175
+ portfolio's `node_modules/` and `public/`).
166
176
  - `findings.md` (block below).
167
177
  - `tutorial-state.yml` (template below; it starts with `parts: {}`,
168
178
  empty, a part's entry is added the first time the tester picks it).
@@ -171,14 +181,31 @@ Then **route** per §Routing + menu in `_core.md`: render the **start
171
181
  menu** (numbered, Part 0 the prologue as option 1, the recommended
172
182
  first pick). The tester picks a part by number; that part's own
173
183
  `preflight` (see §Entering a part) lays its fixture when it begins.
174
- Part 0's demo fixture (the `demo-agent` + the demo `.skillmapignore`,
175
- blocks below) is laid by its `taught-init` entry, not here.
184
+ Part 0's demo fixture (the `demo-agent` block below) is laid by its
185
+ `taught-init` entry, not here.
176
186
 
177
187
  ## Fixture and state templates
178
188
 
179
- The `findings.md` and `tutorial-state.yml` here are universal (written
180
- in pre-flight); the `demo-agent.md` + the demo `.skillmapignore` are
181
- Part 0's fixture (laid by its `taught-init` entry).
189
+ The `.skillmapignore`, `findings.md`, and `tutorial-state.yml` here are
190
+ universal (written in pre-flight); the `demo-agent.md` is Part 0's
191
+ fixture (laid by its `taught-init` entry).
192
+
193
+ The **full Part 0 demo fixture** is the boot `demo-agent.md` above plus
194
+ the files the prologue's own chapters lay as taught steps, exactly this
195
+ set: `<provider_dir>/agents/demo-agent.md`,
196
+ `<provider_dir>/skills/demo-skill/`,
197
+ `<provider_dir>/commands/demo-command.md`, `notes/todo.md`,
198
+ `notes/demo-guideline.md`, `notes/demo-guideline2.md`,
199
+ `notes/private-credentials.md`. This is the
200
+ single source for that list. Four entry points delete exactly this set
201
+ when the prologue ran first in the dir: `portfolio-init`, the campaign
202
+ `seed` fast-forward, and `backstage-init` (Part 6), each so the part's
203
+ own fixture starts from a clean slate, plus start-over (§Menu, resume,
204
+ wrap-up). Part 7 `cli` is the inverse
205
+ consumer: its `prologue-built` seed *lays* this fixture (the
206
+ connector-chapter subset, without `notes/private-credentials.md`)
207
+ instead of deleting it, see `fixtures.md` §Seed snapshots. Keep the list
208
+ here in sync if a prologue chapter adds or drops a demo file.
182
209
 
183
210
  `<provider_dir>/agents/demo-agent.md`:
184
211
  ```markdown
@@ -284,60 +311,96 @@ When a part begins, honour its `preflight` from the manifest:
284
311
 
285
312
  - **`taught-init`** (Part 0): silently, before the tester's `sm init`
286
313
  in the `init` chapter, `Write` the demo fixture (the
287
- `<provider_dir>/agents/demo-agent.md` boot node + the demo
288
- `.skillmapignore`, both in the §Fixture blocks above), substituting
289
- `<provider_dir>` per detection. Write `.skillmapignore` BEFORE the
290
- tester runs `sm init` so the first scan never sees the tutorial's
291
- own files (`sm init` only writes that file when absent). The tester
292
- runs `sm init` themselves in the first chapter.
314
+ `<provider_dir>/agents/demo-agent.md` boot node, in the §Fixture
315
+ blocks above), substituting `<provider_dir>` per detection. The
316
+ universal `.skillmapignore` is already on disk from pre-flight, so
317
+ the first scan never sees the tutorial's own files; nothing to lay
318
+ here for it. The tester runs `sm init` themselves in the first
319
+ chapter (`sm init` only writes `.skillmapignore` when absent, so it
320
+ leaves the pre-flight one intact).
293
321
  - **`portfolio-init`** (Part 1 `project-kickoff`): the campaign's
294
322
  real project begins. Backstage, before the tester's `sm init` in
295
323
  the `kickoff` chapter: (1) if the prologue ran first in this dir,
296
- clear its demo fixture so the map starts clean, delete ONLY the
297
- Part 0 fixture files (`<provider_dir>/agents/demo-agent.md`,
298
- `<provider_dir>/skills/demo-skill/`,
299
- `<provider_dir>/commands/demo-command.md`, `notes/todo.md`,
300
- `notes/demo-guideline.md`, `notes/private-credentials.md`) plus the
324
+ clear its demo fixture so the map starts clean, delete ONLY the full
325
+ Part 0 demo fixture set (§Fixture and state templates) plus the
301
326
  stale `.skill-map/` DB (a fresh `sm init` rebuilds it), never the
302
327
  tester's own files; (2) `Write` the portfolio fixture from
303
328
  `references/fixtures.md` (the Express skeleton + the handbook
304
- `AGENTS.md`); (3) ensure `.skillmapignore` carries the portfolio
305
- additions (`node_modules/`, `public/`). The tester runs `sm init`
329
+ `AGENTS.md`); (3) append the portfolio additions (`node_modules/`,
330
+ `public/`) to the universal `.skillmapignore` pre-flight already
331
+ wrote (its tutorial internals are already there). The tester runs `sm init`
306
332
  themselves in the first chapter. (The later campaign parts use
307
333
  `preflight: seed` to fast-forward into them directly, see the `seed`
308
334
  case below; `portfolio-init` is just Part 1's flavour of that,
309
335
  handling the Part 0 to Part 1 transition.)
310
- - **`backstage-init`** (Part 7 `extend`): silently, with no
311
- narration: run `sm init --no-scan` from the cwd, then `Edit` the
312
- freshly created `.skillmapignore` to append the tutorial's
313
- internal entries (the `sm-tutorial.md` / `findings.md` /
314
- `tutorial-state.yml` / skill-dir block above), then `Write` the
315
- part's fixture (read `references/fixtures.md` for the verbatim
316
- `master-agent` / `master-skill` / `notes/ideas` files; skip kinds
317
- the provider doesn't claim). If `sm init --no-scan` fails because
318
- the dir was already initialised by an earlier part, that is fine:
319
- the DB already exists, skip the init and just ensure the fixture
336
+ - **`backstage-init`** (Part 6 `extend`): the part teaches plugins on
337
+ its own **master fixture**, distinct from both the demo and the
338
+ portfolio, so on entry make the master fixture the only one on disk.
339
+ Silently, with no narration: (1) clear whatever prior-part fixture is
340
+ present so the master map starts clean (never the tester's own files;
341
+ the universal `.skillmapignore` stays):
342
+ - Part 0 demo fixture present (the tester came from the prologue) →
343
+ delete the full Part 0 demo fixture set (§Fixture and state
344
+ templates);
345
+ - portfolio fixture present instead (the tester ran the campaign)
346
+ delete everything `portfolio-init` and the campaign chapters lay
347
+ (see `fixtures.md` §Portfolio fixture + §Seed snapshots);
348
+ - in either of those cases also drop the stale `.skill-map/` DB so a
349
+ fresh init rebuilds it.
350
+ (2) run `sm init --no-scan` from the cwd (the universal
351
+ `.skillmapignore` from pre-flight is already on disk, so init leaves
352
+ it intact and the tutorial's own files stay out of the scan); (3)
353
+ `Write` the part's fixture (read `references/fixtures.md` for the
354
+ verbatim `master-agent` / `master-skill` / `notes/ideas` files; skip
355
+ kinds the provider doesn't claim). If nothing needed clearing and the
356
+ dir was already initialised with the master fixture in place (Part 6
357
+ re-entry), that is fine: skip the init and just ensure the fixture
320
358
  files are present.
321
- - **`reuse`** (Part 8 `cli`): assumes the prologue fixture and
322
- `.skill-map/` already exist; nothing to lay. The menu offers Part 8
323
- only once its `prereq` (`fundamentals`) is done, so the state is
324
- there. If `.skill-map/` is somehow missing, point the tester back to
325
- the prologue rather than re-initialising mid-part.
359
+ - **`seed: prologue-built`** (Part 7 `cli`): the part reads the **Part 0
360
+ demo fixture**, NOT the cumulative portfolio, so on entry make that
361
+ fixture the one on disk. Read the state, then:
362
+ - Demo fixture already present (the tester came straight from the
363
+ prologue) just `sm scan`, nothing to lay.
364
+ - **Portfolio** fixture present instead (the tester ran the campaign)
365
+ → clear it first (the inverse of `portfolio-init`: delete the
366
+ portfolio fixture, everything `portfolio-init` and the campaign
367
+ chapters lay, see `fixtures.md` §Portfolio fixture + §Seed snapshots,
368
+ plus the stale `.skill-map/` DB; never the tester's own files), then
369
+ lay the `prologue-built` snapshot from `fixtures.md` (§Seed
370
+ snapshots), `sm init`, `sm scan`.
371
+ - Nothing there → lay the snapshot, `sm init`, `sm scan`.
326
372
  - **`seed`** (the campaign parts `connect-harness` / `run-harness` /
327
373
  `maintain` / `mcp` / `live-site`): the part builds on the accumulating portfolio
328
374
  harness, but the tester may have jumped straight here from the menu.
329
375
  On entry, read the state file:
330
376
  - If every predecessor campaign part up the `prereq` chain is `done`
331
377
  → reuse the accumulated state; an `sm scan` to refresh is enough,
332
- nothing to lay.
378
+ nothing to lay. **`mcp` is the exception**: it is ordered last,
379
+ after `extend` (Part 6) and `cli` (Part 7), which both replace the
380
+ portfolio on disk with their own master / demo fixture, so its
381
+ accumulated state cannot be trusted to still be the portfolio.
382
+ `mcp` therefore ALWAYS re-lays its `harness-connected` snapshot on
383
+ entry (clearing a master / demo fixture first if one is present,
384
+ the same clears the `backstage-init` and `prologue-built` cases
385
+ do), then `sm init` if `.skill-map/` is missing and `sm scan`,
386
+ exactly like the fast-forward branch below.
333
387
  - Else → **fast-forward, silently** (backstage, do not narrate the
334
- plumbing): lay the part's `seed` snapshot from
388
+ plumbing): first, if the prologue ran first in this dir, clear the
389
+ full Part 0 demo fixture set (§Fixture and state templates) so the
390
+ seeded campaign map does not carry the prologue's demo nodes (the
391
+ `sm scan` below reconciles the removed files out of the DB). Then
392
+ lay the part's `seed` snapshot from
335
393
  `references/fixtures.md` (§Seed snapshots) by following its
336
394
  checklist, copy each file's canonical content from the chapter the
337
395
  row names, apply the `EDIT` rows on top, substituting
338
396
  `<provider_dir>` and skipping provider-unsupported kinds per
339
- `_core.md`. Then run `sm init` if `.skill-map/` is missing, then
340
- `sm scan` so the map reflects the seeded harness. Mark the skipped
397
+ `_core.md`. The snapshot's `.skillmapignore` additions
398
+ (`node_modules/`, `public/`) are appended to the universal
399
+ `.skillmapignore` pre-flight already wrote, so the tutorial's own
400
+ `.claude/skills/sm-tutorial/` files stay out of the scan even on a
401
+ direct jump here. Then run `sm init` if `.skill-map/` is missing
402
+ (it will not overwrite that `.skillmapignore`), then `sm scan` so
403
+ the map reflects the seeded harness. Mark the skipped
341
404
  predecessor campaign parts `skipped` in the state (they stay in the
342
405
  menu for later). Then emit exactly ONE tester-facing line:
343
406
 
@@ -359,18 +422,15 @@ All three are specified in `_core.md`:
359
422
  the **numbered start menu** (Part 0 is option 1, the recommended
360
423
  first pick); the menu (the ToC from `_manifest.yml`, numbered,
361
424
  completed parts ticked, `planned` parts hidden, `prereq` gating only
362
- the parts that have no `seed`) is the entry point on the first
425
+ seedless parts, none today since Part 7 `cli` now self-seeds) is the
426
+ entry point on the first
363
427
  invocation and after every part closes / on resume. Render it with
364
428
  the format in `_core.md` §Menu format.
365
429
  - **Resume / restart**: §Resume / restart. On start-over, the exact
366
430
  wipe list is whatever the tester's parts actually created:
367
431
  `tutorial-state.yml`, `findings.md`, `.skillmapignore`,
368
- `.skill-map/`, the Part 0 fixture
369
- (`<provider_dir>/agents/demo-agent.md`,
370
- `<provider_dir>/skills/demo-skill/`,
371
- `<provider_dir>/commands/demo-command.md`, `notes/todo.md`,
372
- `notes/demo-guideline.md`, `notes/private-credentials.md`), the
373
- Part 7 fixture if `extend` ran
432
+ `.skill-map/`, the full Part 0 demo fixture set (§Fixture and state
433
+ templates), the Part 6 fixture if `extend` ran
374
434
  (`<provider_dir>/agents/master-agent.md`,
375
435
  `<provider_dir>/skills/master-skill/`, `notes/ideas.md`,
376
436
  `.skill-map/plugins/`), `link-validation/` if the CLI part ran,
@@ -149,9 +149,10 @@ first kind quoted, the second kind never.
149
149
  pre-flight only (both silent, no narration):
150
150
  - `sm version` ONCE to verify the install.
151
151
  - `sm init --no-scan` ONCE for parts whose manifest entry is
152
- `preflight: backstage-init`, to provision `.skill-map/` and the
153
- bundled `.skillmapignore` BEFORE any scan, so you can append the
154
- tutorial's internal entries before the scanner sees the fixture.
152
+ `preflight: backstage-init`, to provision `.skill-map/` BEFORE
153
+ any scan. The universal `.skillmapignore` written in pre-flight
154
+ already keeps the tutorial's own files out, so there is nothing
155
+ to append here.
155
156
  Parts with `preflight: taught-init` (e.g. Part 0) do NOT run
156
157
  `sm init` in pre-flight, the tester runs it as the first taught
157
158
  step. You also DO NOT run `sm plugins create` on their behalf;
@@ -162,10 +163,10 @@ first kind quoted, the second kind never.
162
163
  `Read` files to verify what the tester modified. Everything else
163
164
  the tester runs.
164
165
  2. **Configuration files have two-mode access.**
165
- - **Backstage setup (you DO edit)**: appending the tutorial's
166
- internal entries to `.skillmapignore` right after a backstage
167
- `sm init --no-scan`; writing the state file; writing fixture
168
- `.md` files.
166
+ - **Backstage setup (you DO edit)**: writing the universal
167
+ `.skillmapignore` in pre-flight and appending a part's own
168
+ additions on entry (the portfolio's `node_modules/` / `public/`);
169
+ writing the state file; writing fixture `.md` files.
169
170
  - **Teach moment (you DO NOT edit)**: any change to
170
171
  `.skill-map/settings.json`, `.skill-map/settings.local.json`,
171
172
  `.skillmapignore`, or `.gitignore` that is part of a chapter
@@ -292,10 +293,11 @@ For every chapter:
292
293
  §Menu format).
293
294
  - **Which parts to list**: parts in `order`, `status: active` only
294
295
  (`planned` parts are hidden). A part with a `seed` (the campaign
295
- parts) is always shown, even out of order, its `preflight: seed`
296
- fast-forwards the project into it (SKILL.md §Entering a part). A
297
- part with a `prereq` but NO `seed` (Part 8 `cli`) is shown only once
298
- its `prereq` is `done`.
296
+ parts plus Part 7 `cli`) is always shown, even out of order, its
297
+ `preflight: seed` fast-forwards the project into it (SKILL.md
298
+ §Entering a part). A part with a `prereq` but NO `seed` would be
299
+ shown only once its `prereq` is `done`; no active part is in that
300
+ state today (Part 7 `cli` used to be, now it self-seeds).
299
301
  - **After the tester picks**: walk that part; when it ends, run
300
302
  §Closing a part (a tester-facing close, then this menu).
301
303
  - **Adding content** is data-only: a new chapter in a part (or a new
@@ -15,11 +15,12 @@
15
15
  # step_files list form when a part spans several files; dispatch
16
16
  # by chapter-id prefix.
17
17
  # pace per-step | auto-advance (see _core.md per-step cycle).
18
- # preflight taught-init | backstage-init | portfolio-init | seed |
19
- # reuse (see _core.md rule #1 + SKILL.md §Entering a part).
20
- # seed which cumulative snapshot to fast-forward to when this
21
- # part is entered out of order (see fixtures.md §Seed
22
- # snapshot:*). Campaign parts only.
18
+ # preflight taught-init | backstage-init | portfolio-init | seed
19
+ # (see _core.md rule #1 + SKILL.md §Entering a part).
20
+ # seed which snapshot to fast-forward to when this part is
21
+ # entered out of order (see fixtures.md §Seed snapshot:*).
22
+ # Campaign parts use a cumulative portfolio snapshot;
23
+ # Part 8 `cli` uses the standalone `prologue-built` demo.
23
24
  # prereq recommended predecessor. Gates the menu ONLY for a part
24
25
  # with NO `seed`; a seedable part is always shown (its
25
26
  # seed bridges the gap, predecessors get marked `skipped`).
@@ -50,7 +51,7 @@ parts:
50
51
  - id: ignore ; title: "Silence a file via .skillmapignore" ; est_min: 2
51
52
 
52
53
  - id: extend
53
- order: 7
54
+ order: 6
54
55
  title: "Extend skill-map for the site"
55
56
  # Spans three chapter libraries; dispatch by chapter-id prefix:
56
57
  # settings-* -> part-settings.md
@@ -80,12 +81,13 @@ parts:
80
81
  - id: authoring-6-upgrade ; title: "Try `sm plugins upgrade`" ; est_min: 2
81
82
 
82
83
  - id: cli
83
- order: 8
84
+ order: 7
84
85
  title: "The CLI in depth"
85
86
  step_file: part-cli.md
86
87
  pace: auto-advance
87
- preflight: reuse # reuses the fundamentals fixture + DB
88
- prereq: fundamentals # menu offers this only after Part 0
88
+ preflight: seed # self-seeds the Part 0 demo fixture
89
+ seed: prologue-built # the prologue demo fixture (not the cumulative portfolio)
90
+ prereq: fundamentals # recommended predecessor; cli self-seeds, so it is always shown
89
91
  status: active
90
92
  chapters:
91
93
  - id: browse ; title: "list / show / check" ; est_min: 3
@@ -140,8 +142,9 @@ parts:
140
142
  prereq: connect-harness
141
143
  status: active
142
144
  chapters:
143
- - id: generate ; title: "The agent generates the HTML in public/" ; est_min: 3
144
- - id: serve ; title: "node server.js: your portfolio, live next to the graph" ; est_min: 3
145
+ - id: generate ; title: "The agent generates the HTML in public/" ; est_min: 3
146
+ - id: serve ; title: "node server.js: your portfolio, live next to the graph" ; est_min: 3
147
+ - id: editor-live ; title: "Let the content-editor agent write a posts page (optional)" ; est_min: 3
145
148
 
146
149
  - id: maintain
147
150
  order: 4
@@ -155,14 +158,13 @@ parts:
155
158
  chapters:
156
159
  - id: broken-ref ; title: "A ref breaks (you rename DEPLOY.md)" ; est_min: 3
157
160
  - id: analyzers ; title: "The analyzer catalogue (what sm check catches)" ; est_min: 3
158
- - id: orphans ; title: "Orphans (sm orphans)" ; est_min: 2
161
+ - id: orphans ; title: "Orphans (a page nobody links to)" ; est_min: 2
159
162
  - id: reserved ; title: "Reserved names" ; est_min: 2
160
163
  - id: sidecar ; title: "Annotations .sm and consent" ; est_min: 3
161
- - id: versions ; title: "Versions: sm bump and history" ; est_min: 2
162
164
 
163
165
  - id: mcp
164
- order: 5
165
- title: "MCP" # a chapter apart, just before the finale
166
+ order: 8
167
+ title: "MCP" # standalone appendix, ordered last; ALWAYS re-seeds harness-connected (extend/cli wipe the portfolio before it)
166
168
  step_file: part-mcp.md
167
169
  pace: auto-advance
168
170
  preflight: seed
@@ -173,7 +175,7 @@ parts:
173
175
  - id: mcp-node ; title: "content-editor declares an MCP tool; the mcp:// node appears" ; est_min: 3
174
176
 
175
177
  - id: live-site
176
- order: 6
178
+ order: 5
177
179
  title: "Ship the site (the full publish pipeline)" # the finale / climax
178
180
  step_file: part-live-site.md
179
181
  pace: auto-advance
@@ -1,12 +1,24 @@
1
1
  # Fixture templates
2
2
 
3
- Fixtures the orchestrator lays for the auto-fixtured parts. Two sets
4
- today: the **master fixture** (Part 7, "Extend skill-map",
5
- `backstage-init`) right below, and the **portfolio fixture** (Part 1,
6
- "The project from zero", `portfolio-init`) at the end of this file.
7
- Read the set for the part being entered.
8
-
9
- ## Master fixture (Part 7): layout (per provider)
3
+ Fixtures the orchestrator lays for the auto-fixtured parts. Two full
4
+ templates live here: the **master fixture** (Part 6, "Extend
5
+ skill-map", `backstage-init`) right below, and the **portfolio
6
+ fixture** (Part 1, "The project from zero", `portfolio-init`) at the
7
+ end of this file. The **Part 0 demo fixture** is not templated here:
8
+ its content lives in `SKILL.md` (§Fixture and state templates) and
9
+ `part-fundamentals.md`, and the `prologue-built` seed snapshot below
10
+ just points at those. Read the set for the part being entered.
11
+
12
+ **Authoring note (command fixtures).** A `command` node's H1 is a plain
13
+ title (`# publish`), never the slash form (`# /publish`). The `slash`
14
+ extractor reads a `/name` token anywhere in the body, the H1 included,
15
+ as an `invoke`, so `# /publish` makes the command invoke itself and
16
+ `sm check` emits a spurious `core/link-self-loop` the tester has no
17
+ context for. Holds for every command fixture wherever it is defined
18
+ (today: the prologue `demo-command`, the `publish` command, and the
19
+ `reserved` chapter's `init`).
20
+
21
+ ## Master fixture (Part 6): layout (per provider)
10
22
 
11
23
  Per §Provider detection in `SKILL.md`, the `<provider_dir>`
12
24
  placeholder resolves to `.claude/` or `.agents/skills/` depending
@@ -134,7 +146,7 @@ Per finding:
134
146
  Laid backstage before the tester's `sm init` in Part 1. The Express
135
147
  skeleton (`server.js`, `package.json`, `public/index.html`) is plain
136
148
  scaffolding, not `.md`, so the scan ignores it; it makes the project
137
- real and runnable (Part 3 runs it, Part 6 ships it). The one boot node is the
149
+ real and runnable (Part 3 runs it, Part 5 ships it). The one boot node is the
138
150
  handbook `AGENTS.md`. On `agent-skills` / Antigravity (no `agent`
139
151
  kind) the harness still works: the agent member is created as a skill
140
152
  in a later chapter.
@@ -205,15 +217,16 @@ app.listen(port, () => console.log(`Portfolio live at http://localhost:${port}`)
205
217
 
206
218
  ### `.skillmapignore` additions
207
219
 
208
- Append to the portfolio `.skillmapignore` (on top of the tutorial
209
- internals from `SKILL.md`): `node_modules/` (the Express install) and
210
- `public/` (generated HTML, not part of the harness graph).
220
+ Append to the universal `.skillmapignore` (written in pre-flight, see
221
+ `SKILL.md`): `node_modules/` (the Express install) and `public/`
222
+ (generated HTML, not part of the harness graph).
211
223
 
212
- ## Seed snapshots (for `preflight: seed`, jumping into a campaign part)
224
+ ## Seed snapshots (for `preflight: seed`)
213
225
 
214
- When the orchestrator enters a campaign part out of order (its
215
- predecessors are not `done`), it fast-forwards the project by laying
216
- the snapshot below, then `sm init` (if `.skill-map/` is missing) +
226
+ When the orchestrator enters a seedable part out of order (the campaign
227
+ parts when their predecessors are not `done`, or Part 7 `cli` when the
228
+ demo fixture is not the one on disk), it fast-forwards the project by
229
+ laying the snapshot below, then `sm init` (if `.skill-map/` is missing) +
217
230
  `sm scan`. These are **checklists, not content**: each row names a file
218
231
  and the chapter that holds its canonical content. Lay each file by
219
232
  copying the content from the named chapter (substitute `<provider_dir>`
@@ -243,6 +256,19 @@ Everything in `harness-built`, PLUS the Part 2 wiring:
243
256
  7. EDIT `AGENTS.md`: append the two hub bullets (mention `@content-editor`, invoke `/publish`) <- part-connect-harness.md, chapter `links`.
244
257
  8. EDIT `<provider_dir>/agents/content-editor.md`: add the `[style guide](../../docs/STYLE.md)` line <- part-connect-harness.md, chapter `links`.
245
258
 
246
- After laying a snapshot the map matches the state a tester would have at
247
- the END of the part just before the one being entered.
259
+ After laying a campaign snapshot the map matches the state a tester would
260
+ have at the END of the part just before the one being entered.
261
+
262
+ ### Seed snapshot: `prologue-built` (Part 7 `cli`)
263
+
264
+ NOT cumulative and NOT the portfolio: this is the **Part 0 demo
265
+ fixture**, the six standalone demo nodes with `notes/todo` wired as the
266
+ hub, the clean state (`✓ No issues`) at the end of the prologue's
267
+ connector chapters. Part 7 only reads it. Because it is a different
268
+ fixture from the portfolio, entry first resets any portfolio on disk
269
+ (see SKILL.md §Entering a part, the `cli` case).
270
+
271
+ 1. `<provider_dir>/agents/demo-agent.md` <- SKILL.md §Fixture and state templates. (The `.skillmapignore` is universal, already on disk from pre-flight; the snapshot does not lay it.)
272
+ 2. `<provider_dir>/skills/demo-skill/SKILL.md`, `<provider_dir>/commands/demo-command.md`, `notes/todo.md`, `notes/demo-guideline.md`, `notes/demo-guideline2.md` <- part-fundamentals.md, chapter `kinds`.
273
+ 3. EDIT `notes/todo.md`: wire the hub bullets pointing at the five other nodes <- part-fundamentals.md, chapter `connectors`.
248
274
 
@@ -1,6 +1,6 @@
1
- # Part 7 (c): Extend skill-map - build plugins (step library, `authoring-*` ids)
1
+ # Part 6 (c): Extend skill-map - build plugins (step library, `authoring-*` ids)
2
2
 
3
- Step bodies for the plugin-authoring chapters of Part 7.
3
+ Step bodies for the plugin-authoring chapters of Part 6.
4
4
  The SKILL.md orchestrator dispatches each `authoring-*` chapter id
5
5
  here; `settings-*` ids it dispatches to `part-settings.md`.
6
6
 
@@ -11,11 +11,11 @@ view-slot, and confirm the contribution lands in the UI.
11
11
 
12
12
  ## Precondition check
13
13
 
14
- Verify that `.skill-map/` exists in the cwd (pre-flight step 4 of
15
- the `SKILL.md` orchestrator ran `sm init --no-scan` and appended
16
- the master-tutorial's internal entries to `.skillmapignore`, so
17
- this is the expected state regardless of whether the tester ran
18
- the plugins chapters first). If `.skill-map/` is missing, the fixture
14
+ Verify that `.skill-map/` exists in the cwd (the `extend` part's
15
+ `backstage-init` preflight ran `sm init --no-scan` to provision it;
16
+ the universal `.skillmapignore` from pre-flight keeps the tutorial's
17
+ own files out of the scan, so this is the expected state regardless
18
+ of whether the tester ran the plugins chapters first). If `.skill-map/` is missing, the fixture
19
19
  is corrupted: surface the mismatch ("the project bootstrap is
20
20
  gone, re-invoke the tutorial from an empty dir") and stop.
21
21
 
@@ -1,6 +1,6 @@
1
- # Part 8: The CLI in depth - step library
1
+ # Part 7: The CLI in depth - step library
2
2
 
3
- The deep-dive into the rest of the CLI: browsing verbs, ASCII graph + export, broken-ref issues, the `.sm` annotation consent prompt, and validating links to folders outside the scan scope. `pace: auto-advance` (walk straight into the next chapter's Announcement once one is marked done) and it reuses the fundamentals fixture and DB built in Part 0 (no fresh fixture of its own). Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
3
+ The deep-dive into the rest of the CLI: browsing verbs, ASCII graph + export, broken-ref issues, the `.sm` annotation consent prompt, and validating links to folders outside the scan scope. `pace: auto-advance` (walk straight into the next chapter's Announcement once one is marked done) and `preflight: seed` with the `prologue-built` snapshot: it self-seeds its own copy of the Part 0 demo fixture, so it works even if the campaign already replaced that fixture with the portfolio (see SKILL.md §Entering a part, the `cli` case). Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
4
4
 
5
5
  ## Chapter `browse` - list / show / check (~3 min)
6
6
 
@@ -13,7 +13,7 @@ sm show .claude/skills/demo-skill/SKILL.md
13
13
  sm check
14
14
  ```
15
15
 
16
- Expected: you see the 5 fixture nodes listed with their kind: `demo-skill` (skill), `demo-agent` (agent), `demo-command` (command), `notes/todo` (`markdown`, the catch-all per the `kinds` chapter), and `notes/demo-guideline` (`markdown` as well, the target of the hub's `references` link). `check` reads the persisted `scan_issues` table, it does NOT re-walk the filesystem. The fixture is clean (the connector / inspector chapters captured the latest state before Ctrl+C), so the verb prints `✓ No issues`. We will plant one in the `issues` chapter and watch the rule catch it after a fresh `sm scan`.
16
+ Expected: you see the 6 fixture nodes listed with their kind: `demo-skill` (skill), `demo-agent` (agent), `demo-command` (command), `notes/todo` (`markdown`, the catch-all per the `kinds` chapter), and the two guideline notes `notes/demo-guideline` and `notes/demo-guideline2` (both `markdown`, the hub's confidence pair: a faint `mentions` at 0.50 and a resolved `references` at 1.00). `check` reads the persisted `scan_issues` table, it does NOT re-walk the filesystem. The fixture is clean (the connector / inspector chapters captured the latest state before Ctrl+C), so the verb prints `✓ No issues`. We will plant one in the `issues` chapter and watch the rule catch it after a fresh `sm scan`.
17
17
 
18
18
  Mark `browse`: done.
19
19
 
@@ -1,6 +1,6 @@
1
1
  # Part 2: Connect the harness (step library, `connect-harness`)
2
2
 
3
- This is the wiring part. Part 1 grew a small set of standalone nodes around the handbook (the portfolio harness); here the tester turns that scatter of dots into a connected graph: a link checker, a publish command that pulls three pieces together, the handbook becoming a real hub, and a close-up on how sure skill-map is of each connection. `pace: auto-advance` (walk straight into the next chapter once one is marked done), `preflight: reuse` (it builds on the portfolio harness from Part 1, no fresh fixture of its own). Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
3
+ This is the wiring part. Part 1 grew a small set of standalone nodes around the handbook (the portfolio harness); here the tester turns that scatter of dots into a connected graph: a link checker, a publish command that pulls three pieces together, the handbook becoming a real hub, and a close-up on how sure skill-map is of each connection. `pace: auto-advance` (walk straight into the next chapter once one is marked done), `preflight: seed` (it builds on the portfolio harness from Part 1, reusing the accumulated state when its predecessors are done, no fresh fixture of its own). Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
4
4
 
5
5
  ## Chapter `check-links` - The link checker (~3 min)
6
6
 
@@ -55,9 +55,9 @@ Wait for confirmation. Mark `check-links`: done.
55
55
 
56
56
  On `agent-skills` / Antigravity there is no `command` kind, so skip this whole chapter and fold its purpose into the prose of the next one.
57
57
 
58
- Tell the tester to create the file themselves (it is their project's file, Inviolable rule #2). Substitute `<provider_dir>` per `_core.md` in the path you give them:
58
+ Tell the tester to create the file themselves (it is their project's file, Inviolable rule #2). Substitute `<provider_dir>` per `_core.md` in the path you give them. The frontmatter fence (`---`) MUST sit on column 0 with no leading spaces: present the block below exactly as written, and if the tester pastes it indented, have them strip the leading whitespace. An indented `---` does not parse as YAML, so the `publish` node would land without its `name`, `description`, or `shortcut`.
59
59
 
60
- > Create `.claude/commands/publish.md` with exactly this content:
60
+ > Create `.claude/commands/publish.md` with exactly this content (the first line is `---`, nothing before it):
61
61
 
62
62
  ```markdown
63
63
  ---
@@ -73,7 +73,7 @@ args:
73
73
  required: true
74
74
  ---
75
75
 
76
- # /publish
76
+ # publish
77
77
 
78
78
  The one command you run when the site is ready to go out.
79
79
 
@@ -99,6 +99,12 @@ Continue the tester message:
99
99
  > One node, three connectors, three link kinds. The harness is
100
100
  > starting to look like a real graph.
101
101
  >
102
+ > 💡 Tip: to tidy every node into a clean layout, click the
103
+ > **Re-arrange layout** button in the map toolbar (tooltip
104
+ > "Re-arrange the visible nodes"). Handy whenever the graph starts to
105
+ > look crowded. If you've dragged nodes by hand it asks for
106
+ > confirmation first, otherwise it just re-arranges.
107
+ >
102
108
  > Did the three arrows appear?
103
109
 
104
110
  Wait for confirmation. You MAY use `Read` on the file afterwards to verify it landed. Mark `publish`: done.
@@ -150,34 +156,43 @@ Wait for confirmation. You MAY use `Read` on the two files afterwards to verify
150
156
 
151
157
  ## Chapter `confidence` - How sure is each link (~3 min)
152
158
 
153
- **Context**: the connectors do not all look equally solid, and that is on purpose. Skill-map estimates how sure it is of every connection and shows that as opacity. Here we open the Inspector on a real harness node and read the per-link confidence numbers, mirroring the prologue's connectors beat but on the portfolio.
159
+ **Context**: skill-map estimates how sure it is of every connection and shows that as opacity. In this harness every link resolves to a real node, so they all read solid (1.00); the faint, low-confidence case is the one the tester met in the prologue (the bare `@demo-guideline` mention that had nothing to resolve to). Here we open the Inspector on a real harness node, read the all-solid numbers, and point back to that prologue contrast. Mirrors the prologue's connectors beat on the portfolio.
154
160
 
155
161
  No file edits in this chapter, pure observation on the graph the tester just built.
156
162
 
157
163
  Tell the tester:
158
164
 
159
165
  > Last beat of this part: how sure is skill-map about each connection?
160
- > Look closely at the **Map** and you'll notice the arrows are not all
161
- > equally solid. The more confident skill-map is that a link is real,
162
- > the more solid the arrow; the less sure, the more translucent.
166
+ > It estimates a **confidence** for every link and draws it as opacity:
167
+ > the surer a connection is real, the more solid the arrow; the less
168
+ > sure, the more translucent.
163
169
  >
164
170
  > Open the Inspector for the `publish` node (click it on the **Map**).
165
171
  > Scroll down to the **Connections** panel and read the **Outgoing**
166
- > rows. Each row shows the link kind and a confidence badge:
172
+ > rows. Each row shows the link kind and a confidence badge, and here
173
+ > every one reads **1.00**:
174
+ >
175
+ > - `publish -> docs/DEPLOY.md` (`references`) is a markdown link to a
176
+ > file that exists on disk, so skill-map is certain.
177
+ > - `publish -> content-editor` (`mentions`) resolves to the real
178
+ > content-editor agent, and `publish -> check-links` (`invokes`)
179
+ > resolves to the real check-links skill, so both are certain too.
167
180
  >
168
- > - `publish -> docs/DEPLOY.md` (`references`) reads **1.00** and looks
169
- > solid: it is a markdown link to a file that really exists on disk,
170
- > so skill-map is certain.
171
- > - `publish -> content-editor` (`mentions`) and `publish ->
172
- > check-links` (`invokes`) read high too, because each `@handle` and
173
- > `/slash` token resolves cleanly to a node that exists in your
174
- > harness.
181
+ > Your whole harness reads solid because every link lands on a real
182
+ > node, that is what a clean, fully wired graph looks like. So what
183
+ > does a *low*-confidence connector look like? You saw one back in the
184
+ > prologue: `@demo-guideline` was a bare `@`-mention pointing at a
185
+ > note, and a bare `@handle` only firmly resolves to an agent, so it
186
+ > had nothing to land on and stayed a soft guess at **0.50**, drawn
187
+ > translucent. The fix there was one character: `@demo-guideline2.md`,
188
+ > the same handle plus a `.md`, resolved to the real file and jumped to
189
+ > **1.00**.
175
190
  >
176
191
  > The number is the certainty, and the opacity on the canvas is just
177
192
  > that number drawn as transparency: a glance at the **Map** tells you
178
193
  > which connections are rock solid and which are skill-map's best
179
194
  > guess.
180
195
  >
181
- > Do you see the confidence badges in the Inspector?
196
+ > Do you see every badge reading 1.00 in the Inspector?
182
197
 
183
198
  Wait for confirmation. Mark `confidence`: done. Last chapter of the part: apply §Closing a part (the close names the part by its title and routes back to the menu; do NOT lead into the next part from here).