@skill-map/cli 0.53.1 → 0.53.3

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 (27) hide show
  1. package/dist/cli/tutorial/sm-tutorial/SKILL.md +19 -10
  2. package/dist/cli/tutorial/sm-tutorial/references/_core.md +68 -14
  3. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +22 -9
  4. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +10 -13
  5. package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +2 -2
  6. package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +1 -1
  7. package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +12 -9
  8. package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +85 -82
  9. package/dist/cli/tutorial/sm-tutorial/references/part-live-site.md +111 -112
  10. package/dist/cli/tutorial/sm-tutorial/references/part-maintain.md +2 -2
  11. package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +4 -4
  12. package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +1 -1
  13. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +11 -13
  14. package/dist/cli/tutorial/sm-tutorial/references/part-run-harness.md +155 -0
  15. package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -2
  16. package/dist/cli.js +3 -3
  17. package/dist/index.js +3 -3
  18. package/dist/kernel/index.js +3 -3
  19. package/dist/ui/{chunk-REAKWFJX.js → chunk-22XUPND3.js} +3 -3
  20. package/dist/ui/{chunk-OFDQMBSJ.js → chunk-4CXAL43H.js} +1 -1
  21. package/dist/ui/{chunk-IUZM6XLN.js → chunk-HWQTV6ZL.js} +1 -1
  22. package/dist/ui/{chunk-HGM5UYEG.js → chunk-ISIHN6HU.js} +19 -19
  23. package/dist/ui/{chunk-EQ72PEHT.js → chunk-NBXEOYS4.js} +1 -1
  24. package/dist/ui/index.html +2 -2
  25. package/dist/ui/{main-XRWWHCSW.js → main-Z4RJNI4X.js} +3 -3
  26. package/dist/ui/{styles-Q4NCOJQY.css → styles-L6FZYH7X.css} +1 -1
  27. package/package.json +1 -1
@@ -1,6 +1,6 @@
1
1
  # Part 0: The live map (prologue) - step library
2
2
 
3
- The live-UI prologue: the tester runs `sm init`, opens the browser, and watches the map update in real time as files are written and edited. `pace: per-step` (ask "¿seguimos?" between steps), `preflight: taught-init` (the tester runs `sm init` as the first taught step, not pre-flight), and the chapters lay the basics fixture progressively, one node at a time. Shared conventions (tone, provider detection / substitution, the `> ` rendering rule, the per-step cycle) live in `_core.md`; do not restate them here.
3
+ The live-UI prologue: the tester runs `sm init`, opens the browser, and watches the map update in real time as files are written and edited. `pace: per-step` (one chapter per exchange; the chapter's own confirmation advances to the next, NO separate "¿seguimos?"), `preflight: taught-init` (the tester runs `sm init` as the first taught step, not pre-flight), and the chapters lay the basics fixture progressively, one node at a time. 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 `init` - Your first node (~2 min)
6
6
 
@@ -8,25 +8,25 @@ The live-UI prologue: the tester runs `sm init`, opens the browser, and watches
8
8
 
9
9
  ```bash
10
10
  sm init
11
- ls -la .skill-map/
11
+ sm
12
12
  ```
13
13
 
14
- Expected: `.skill-map/skill-map.db` appears (plus config files). The initial scan reports a small node / link / issue count from the demo-agent fixture, NOT 14+ phantom issues from the tutorial's own prose: pre-flight already wrote `.skillmapignore` with the right exclusions in place, so `sm init` leaves that file alone (it only writes when absent) and the scan never sees `sm-tutorial.md` / `findings.md` / `tutorial-state.yml`.
14
+ Expected: `.skill-map/skill-map.db` appears (plus config files), and the initial scan reports a small node / link count from the demo-agent fixture. `sm init` runs and exits; `sm` then starts the UI server and stays running. (Agent context, do not narrate: pre-flight's `.skillmapignore` keeps the tutorial's own files, `sm-tutorial.md` / `findings.md` / `tutorial-state.yml`, out of the scan; `sm init` leaves that file alone since it only writes when absent.)
15
15
 
16
- Before launching the server, ask the tester to set up a **side-by-side view** so they can watch the magic happen without alt-tabbing every step, then launch the server and open the link it prints. Don't hardcode the URL here, the verb itself is the source of truth (it logs the bound `http://host:port` after listen). Tell the tester:
16
+ Give the tester the whole flow in one message with ONE confirmation, do NOT pause for the `sm init` output separately. Don't hardcode the URL, the verb logs the bound `http://host:port` after listen. Tell the tester:
17
17
 
18
- > First, arrange your screen so the **browser** (where the **Map**
19
- > updates in real time) and **this chat** are both visible at once,
20
- > typical layout is browser on the left half, chat on the right
21
- > (or any split that lets you see both). The terminal running
22
- > `sm` can stay off to the side; it just prints scan progress
23
- > lines and you don't need to read them.
18
+ > First, **open your browser** and put it side by side with this
19
+ > chat (browser on one half, chat on the other, any split that lets
20
+ > you see both) so you can watch the **Map** update in real time.
24
21
  >
25
- > Then run `sm`. After a couple of seconds it will print a line
26
- > with the URL where the UI is listening, copy that link and open
27
- > it in the browser you just arranged.
22
+ > Then, in your second terminal, run the two commands above: `sm
23
+ > init` sets the project up (it creates `.skill-map/` and runs a
24
+ > first scan), and `sm` boots the live UI. After a couple of seconds
25
+ > `sm` prints a URL, copy it and open it in your browser. The
26
+ > terminal keeps printing scan lines, you don't need to read them.
28
27
  >
29
- > Tell me when the page is open showing one node, `demo-agent`.
28
+ > You'll see one node in the **Map**: `demo-agent`. Tell me when the
29
+ > page is open showing it.
30
30
 
31
31
  Wait for confirmation. Mark `init`: done.
32
32
 
@@ -127,7 +127,7 @@ Create these four files (with `Write`), exactly in this order. Per §Provider de
127
127
  Tell the tester:
128
128
 
129
129
  > Look at the browser. Four new nodes should have popped in:
130
- > `demo-skill`, `demo-command`, `notes/todo`, and `demo-guideline`.
130
+ > `demo-skill`, `demo-command`, **Demo TODO list**, and `demo-guideline`.
131
131
  > Five total now, **still unconnected**: they're floating dots.
132
132
  > The viewport auto-fits whenever a node is added or removed, so
133
133
  > all five should be visible without panning.
@@ -183,9 +183,9 @@ You edit `notes/todo.md` so it becomes the **hub** that points to each of the ot
183
183
  - a `/slash` token → kind `invokes`
184
184
  - a markdown link `[text](path)` → kind `references`
185
185
 
186
- Four bullets, three kinds (the `invokes` kind shows up twice because both the command and the skill are addressed by slash).
186
+ Five bullets, three kinds: `invokes` and `mentions` each appear twice, `references` once. The last two bullets both point at the **same** node (`demo-guideline`), on purpose: a markdown link AND an `@`-mention of it, so the next beat can contrast their confidence (the file link is certain, the name drop is a softer guess).
187
187
 
188
- Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider detection, **substitute `.claude/` with the detected `<provider_dir>` and drop any bullet whose target node was not created in the `kinds` chapter** (on `agent-skills` / Antigravity there is no agent and no command → skip the `@demo-agent` and `/demo-command` bullets, two connectors land).
188
+ Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider detection, **substitute `.claude/` with the detected `<provider_dir>` and drop any bullet whose target node was not created in the `kinds` chapter** (on `agent-skills` / Antigravity there is no agent and no command → skip the `@demo-agent` and `/demo-command` bullets; the `@demo-guideline` mention stays and is the faint connector on those providers too).
189
189
 
190
190
  **Edit `notes/todo.md`**: append these bullets after the `# Pending` heading:
191
191
 
@@ -195,56 +195,61 @@ Apply with `Edit` on `notes/todo.md` (do not rewrite the file). Per §Provider d
195
195
  - [ ] Trigger /demo-skill when the input lands.
196
196
  - [ ] Re-read the
197
197
  [demo-guideline](./demo-guideline.md) before shipping.
198
+ - [ ] Ping @demo-guideline if the conventions change.
198
199
  ```
199
200
 
200
201
  Tell the tester:
201
202
 
202
- > Look at the magic again. `notes/todo` is now the hub: four
203
- > arrows light up between it and the other nodes, and the UI
204
- > palette colours each arrow by the link kind it carries:
203
+ > Look at the magic again. **Demo TODO list** is now the hub: five
204
+ > arrows light up between it and the other nodes, and the UI palette
205
+ > colours each arrow by the link kind it carries:
205
206
  >
206
- > - `notes/todo → demo-agent` (kind: `mentions`)
207
- > - `notes/todo → demo-command` (kind: `invokes`)
208
- > - `notes/todo → demo-skill` (kind: `invokes`)
209
- > - `notes/todo → demo-guideline` (kind: `references`)
207
+ > - `Demo TODO list → demo-agent` (kind: `mentions`)
208
+ > - `Demo TODO list → demo-command` (kind: `invokes`)
209
+ > - `Demo TODO list → demo-skill` (kind: `invokes`)
210
+ > - `Demo TODO list → demo-guideline` (kind: `references`, the markdown link)
211
+ > - `Demo TODO list → demo-guideline` (kind: `mentions`, the @ handle)
210
212
  >
211
213
  > The kind comes from the syntax in the bullet: an `@handle` is
212
214
  > always a mention, a `/skill` or `/command` is always an invoke, a
213
- > markdown link is always a reference. Four arrows, three kinds,
214
- > three colours on the canvas (the two `invokes` share a colour, as
215
- > you would expect).
215
+ > markdown link is always a reference. Five arrows, three kinds.
216
216
  >
217
- > Notice too that the connectors have different transparency.
218
- > Skill-map estimates how sure it is of each connection: a
219
- > `[text](file.md)` that points at a real file (confidence 1.00,
220
- > now that the target exists) looks solid. The opacity tells that
221
- > story at a glance: the more solid the arrow, the more reliable
222
- > the inference.
217
+ > Now look closely: the two arrows to **demo-guideline** are not
218
+ > equally solid. Skill-map draws each connector's **confidence** as
219
+ > opacity, how sure it is the link is real. The markdown link
220
+ > `[demo-guideline](./demo-guideline.md)` points at a real file, so
221
+ > it's certain (1.00) and looks solid; the `@demo-guideline` mention
222
+ > is a looser name drop, a softer guess (0.50), so it's drawn fainter.
223
+ > A glance at the map tells you which links are rock solid and which
224
+ > are skill-map's best guess; the exact number per link is in the
225
+ > inspector, next chapter.
223
226
  >
224
227
  > Confirm when you see it. If a connector is missing, refresh the
225
228
  > browser and let me know.
226
229
 
227
230
  If a connector is missing, do not advance, the next chapter inspects the same hub edit. Mark `connectors`: done.
228
231
 
229
- ## Chapter `inspector` - The inspector and linked nodes (~1 min)
232
+ ## Chapter `inspector` - The inspector and connections (~1 min)
230
233
 
231
234
  The connector opacity tells the confidence story at a glance; the exact per-link breakdown lives in the Inspector. Open it on the hub so the tester registers the surface before the `edit-link` chapter changes topology.
232
235
 
233
236
  > 🆕 Open the Inspector for **Demo TODO list** (click the node on
234
237
  > the map). **Expand** the **Connections** section (it's collapsed
235
238
  > by default): it has two sections, **Outgoing** and **Incoming**.
236
- > Demo TODO list lists 4 links under Outgoing (it's the hub pointing
237
- > at four nodes) and 0 under Incoming; if you open the Inspector for
238
- > any of the four targeted nodes, you'll see 1 under Incoming. Each
239
- > row shows the link kind (`mentions`, `invokes`, `references`) and
240
- > a badge with its confidence: the numeric value (`1.00`, `0.50`,
241
- > …).
239
+ > Demo TODO list lists **5 links** under Outgoing (the hub) and 0
240
+ > under Incoming; open the Inspector for a targeted node to see its
241
+ > Incoming count (demo-guideline shows **2**, the reference plus the
242
+ > mention; the others 1 each). Each row shows the link kind
243
+ > (`mentions`, `invokes`, `references`) and a badge with its
244
+ > confidence: the numeric value. Here you'll see the contrast in
245
+ > numbers, the `references` to demo-guideline reads `1.00`, the
246
+ > `mentions` of it reads `0.50`.
242
247
  >
243
248
  > 💡 Tip: if all these changes left the nodes crowded together, the
244
249
  > map toolbar has a **Re-arrange layout** button (tooltip "Re-arrange
245
- > the visible nodes (re-run auto layout)"): it re-runs the
246
- > auto-layout so everything reads better. If you've moved nodes by
247
- > hand it asks for confirmation first, otherwise it just re-arranges.
250
+ > the visible nodes"): it tidies the layout so everything reads
251
+ > better. If you've moved nodes by hand it asks for confirmation
252
+ > first, otherwise it just re-arranges.
248
253
  >
249
254
  > Let me know when you see it.
250
255
 
@@ -260,7 +265,7 @@ The server has been live since the `init` chapter, leave it running; this chapte
260
265
  > delete the bullet that contains `@demo-agent`. Save. Watch the
261
266
  > UI.
262
267
  >
263
- > Expected: the `notes/todo → demo-agent` connector (kind:
268
+ > Expected: the `Demo TODO list → demo-agent` connector (kind:
264
269
  > `mentions`) disappears in real time. The two nodes stay in the
265
270
  > **Map**; only the edge goes.
266
271
 
@@ -274,13 +279,12 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
274
279
 
275
280
  **Beat 1, open the Files panel (tester does this).**
276
281
 
277
- > Make sure the **Files** panel is open, the one you expanded back
278
- > in the first chapter on the left edge. If you collapsed it since,
279
- > click the expand handle (the `>` arrow, tooltip "Expand files
280
- > panel") to reopen it. The sidebar shows a **folder tree** (a
281
- > nested view of your folders and the nodes inside them): your five
282
- > nodes grouped under `.claude/` and `notes/`, each row showing its
283
- > kind and how many links go in and out.
282
+ > Open the **Files** panel. It sits collapsed against the left edge
283
+ > by default: click the expand handle there (the `>` arrow, its
284
+ > tooltip reads "Expand files panel"). The sidebar opens into a
285
+ > **folder tree** (a nested view of your folders and the nodes inside
286
+ > them): your five nodes grouped under `.claude/` and `notes/`, each
287
+ > row showing its kind and how many links go in and out.
284
288
  >
285
289
  > Tell me when the tree is open.
286
290
 
@@ -297,19 +301,19 @@ Per §Provider detection, on `agent-skills` / Antigravity the fixture has fewer
297
301
 
298
302
  **Beat 3, isolate (tester does this).**
299
303
 
300
- > Last one. In the tree, find the `notes/todo` row: at its right
301
- > edge there's a small **sitemap** icon (its tooltip reads "Isolate
302
- > this node and its direct links on the map"). Click it.
304
+ > Last one. In the tree, find the **Demo TODO list** row: at its
305
+ > right edge there's a small **sitemap** icon (its tooltip reads
306
+ > "Isolate this node and its direct links on the map"). Click it.
303
307
  >
304
- > The Map collapses to `notes/todo` plus only the nodes it links to
305
- > (`demo-command`, `demo-skill`, `demo-guideline`). `demo-agent`,
306
- > which lost its only connector back in the last step, drops out of
307
- > view, and the Inspector opens on `notes/todo`. That's how you
308
+ > The Map collapses to **Demo TODO list** plus only the nodes it
309
+ > links to (`demo-command`, `demo-skill`, `demo-guideline`).
310
+ > `demo-agent`, which lost its only connector back in the last step,
311
+ > drops out of view, and the Inspector opens on **Demo TODO list**.
312
+ > That's how you
308
313
  > focus on one node's neighborhood when a map gets busy.
309
314
  >
310
315
  > To bring the rest back, look at the toolbar along the bottom of
311
- > the Map: there's a **Show all** button (an eye icon, tooltip
312
- > "Clear the map selection and show every node again"). Click it and
316
+ > the Map: there's a **Show all** button (an eye icon). Click it and
313
317
  > all five nodes return.
314
318
  >
315
319
  > Did the map isolate and then restore?
@@ -320,9 +324,9 @@ Leave the server running, the next chapter (`.skillmapignore`) is the last one t
320
324
 
321
325
  Earlier chapters showed the watcher picking up new files and edits (yours and theirs). This chapter flips the direction: a file the tester DOES NOT want in the map (a draft, a scratch file, a secret) gets hidden by a single line in `.skillmapignore`. Same live mechanism, no restart.
322
326
 
323
- `sm init` already wrote a starter `.skillmapignore` at the scope root. The flow has three beats:
327
+ `sm init` already wrote a starter `.skillmapignore` at the scope root. The chapter is one step with a single confirmation (the node vanishing): the agent seeds a file the tester would never want public, shows where it lives, and the tester hides it with one glob.
324
328
 
325
- **Beat 1, you create one new fixture file (the agent does this).**
329
+ **The agent seeds the file (no tester action, no separate pause).**
326
330
 
327
331
  `Write` `notes/private-credentials.md`, kind `markdown`, simulates a file the tester would never want surfacing publicly:
328
332
 
@@ -340,13 +344,15 @@ description: |
340
344
  API_TOKEN: example-not-real
341
345
  ```
342
346
 
343
- Confirm the file appears in the map as a sixth node (`notes/private-credentials`). The watcher sees it like any other `.md`, that's the point of the demo. (If the tester doesn't see it, they may need to click **Show all** in the map toolbar to clear any leftover selection.)
347
+ It lands in the map as a sixth node (`notes/private-credentials`); the watcher sees it like any other `.md`. Do NOT pause to confirm the appearance, it folds into the single vanish confirmation at the end of this step.
344
348
 
345
- **Beat 2, you show the project structure (the agent does this).**
349
+ **The tester hides it (single tester-facing message, one confirmation).**
346
350
 
347
- Before asking the tester to touch `.skillmapignore`, give them a mental map of the folder so they know where the file lives and what's around it. Use `Bash` (`ls -la` and `ls -la notes/` if a deeper view helps) and present the listing as a tester-facing message (apply the host-dependent rendering rule) so the tester sees what their cwd holds:
351
+ Give the tester a mental map of the folder so they know where the file lives, then the glob that hides it, all in ONE message. Use `Bash` (`ls -la`, plus `ls -la notes/` if a deeper view helps) for the real listing and apply the host-dependent rendering rule. Per Inviolable rule #2, the agent does NOT touch `.skillmapignore` with its `Edit` tool, the tester edits it from their own editor:
348
352
 
349
- > One last step. Here's what your directory looks like right now:
353
+ > One last step. Your `private-credentials` note just popped into
354
+ > the map as a sixth node, that's the watcher again. Now let's hide
355
+ > it. Here's what your directory looks like right now:
350
356
 
351
357
  ```
352
358
  . ← your cwd
@@ -364,24 +370,20 @@ Before asking the tester to touch `.skillmapignore`, give them a mental map of t
364
370
  └── private-credentials.md ← what we want to hide
365
371
  ```
366
372
 
367
- > The `.skillmapignore` at the root is the file we'll touch
368
- > next. Same syntax as `.gitignore`. Anything matching a pattern
369
- > there is invisible to skill-map's scan.
373
+ > The `.skillmapignore` at the root uses the same syntax as
374
+ > `.gitignore`: anything matching a pattern there is invisible to
375
+ > skill-map's scan. Open it in your editor (it's at the cwd root)
376
+ > and append this pattern on a new line at the end:
370
377
 
371
- Adjust the actual tree shown to whatever `ls -la` returns, the goal is "tester recognises their own filesystem", not a copy of the snippet above.
372
-
373
- **Beat 3, the tester edits `.skillmapignore` (NOT the agent).**
374
-
375
- Per Inviolable rule #2, the agent does NOT touch `.skillmapignore` with your `Edit` tool. Tell the tester to do it from their editor:
378
+ ```
379
+ notes/private-*.md
380
+ ```
376
381
 
377
- > Last step. Open `.skillmapignore` (it's at the cwd root) in
378
- > your editor of choice. At the end of the file, on a new line,
379
- > append the literal pattern `notes/private-*.md`. Save the
380
- > file. The pattern uses a glob (same as `.gitignore`):
382
+ > Save the file. It's a glob (same as `.gitignore`):
381
383
  > `notes/private-*.md` matches `private-credentials.md` and any
382
384
  > future sibling `private-*.md`. A literal path
383
- > (`notes/private-credentials.md`) would also work, the glob
384
- > teaches the broader habit.
385
+ > (`notes/private-credentials.md`) would also work, the glob teaches
386
+ > the broader habit.
385
387
  >
386
388
  > Watch the browser when you save. The
387
389
  > `notes/private-credentials` node should disappear from the
@@ -390,6 +392,7 @@ Per Inviolable rule #2, the agent does NOT touch `.skillmapignore` with your `Ed
390
392
  >
391
393
  > Did the node vanish?
392
394
 
393
- After they confirm, you MAY use `Read` on `.skillmapignore` to verify the appended pattern landed correctly (in case `sm check` later reports something odd), that is read-only and allowed. Once confirmed, ask them to stop the server with **Ctrl+C** in the terminal before continuing.
395
+ Adjust the actual tree shown to whatever `ls -la` returns, the goal is "tester recognises their own filesystem", not a copy of the snippet above. After they confirm, you MAY use `Read` on `.skillmapignore` to verify the appended pattern landed correctly (in case `sm check` later reports something odd), that is read-only and allowed. Once confirmed, ask them to stop the server with **Ctrl+C** in the terminal before continuing.
394
396
 
395
- Mark `ignore`: done.
397
+ Mark `ignore`: done. Last chapter of the part: apply §Closing a part
398
+ (the close names the part by its title and routes back to the menu).
@@ -1,62 +1,57 @@
1
- # Part 5: The site, live (step library, finale, `generate` + `serve`)
2
-
3
- This is the finale, the climax of the whole campaign. Pace
4
- `auto-advance`, preflight `reuse` (it builds straight on the
5
- portfolio harness from the earlier parts, same cwd). Two chapters,
6
- in order: `generate` (the agent writes the real HTML pages) then
7
- `serve` (the tester runs the site and sees it in the browser).
8
- Shared conventions live in `_core.md`.
9
-
10
- ## Chapter `generate` - The agent generates the HTML in public/ (~3 min)
11
-
12
- **Context**: this is the payoff of the whole harness. The
13
- `content-editor` agent exists to write the site's pages, so now you
14
- (playing that agent) generate the actual HTML into `public/`. The
15
- honest beat the tester must hear: writing HTML does NOT move the
16
- skill-map graph. The graph is Layer 1, the `.md` harness that builds
17
- the site; the HTML is Layer 2, the harness's OUTPUT, and skill-map
18
- does not map it (HTML is not `.md`). So the Map will sit still while
19
- real files land on disk, and that is correct, not a bug. Keep the
20
- markup plain per the style guide: no framework, no client JS, one H1
21
- per page, every page links back home.
22
-
23
- **Preparation**: `Write` two static pages into `public/`. The
24
- pre-flight already left a placeholder `public/index.html`; this
25
- overwrites it with the real home page and adds an about page. Keep
26
- the markup plain.
27
-
28
- `public/index.html`:
1
+ # Part 6: Ship the site (the full publish pipeline) (step library, finale, `pipeline` + `golive`)
2
+
3
+ The finale, the climax of the whole campaign. In Part 3 you ran the
4
+ harness once, the simple way (generate two pages, serve them). Here you
5
+ operate it exactly as it was designed: you drive the `/publish` command
6
+ end to end, the way the handbook says to ship, and put a richer
7
+ multi-page site live next to the full graph. Pace `auto-advance`,
8
+ preflight `seed` (`harness-connected`), so a tester can jump straight
9
+ here. Two chapters, in order: `pipeline` (run `/publish`: check the
10
+ links, brief the editor, follow the deploy runbook) then `golive` (run
11
+ the server and click through the finished site). Shared conventions
12
+ live in `_core.md`.
13
+
14
+ ## Chapter `pipeline` - Run /publish end to end (check-links, brief, deploy runbook) (~4 min)
15
+
16
+ **Context**: the harness is not just a picture, it is a set of
17
+ instructions, and `/publish` is the one that ties them together. Its
18
+ body says: run `/check-links`, brief `@content-editor` on any fix, then
19
+ follow the deploy runbook. Here the tester (playing the harness) walks
20
+ exactly those steps on a richer site. This is still Layer 1 vs Layer 2:
21
+ the pages are output, so the Map stays put while the files change, same
22
+ as Part 3, no need to re-teach it, just do not call it a bug if they
23
+ notice.
24
+
25
+ **Preparation** (the agent does this, playing `content-editor`):
26
+
27
+ 1. Ensure the two base pages exist. If they are not already on disk
28
+ from Part 3 (a tester can land here via the seed), lay
29
+ `public/index.html` and `public/about.html` exactly as in
30
+ part-run-harness.md, chapter `generate`. They are the single source
31
+ for those two pages; do not restate their markup, copy it from
32
+ there.
33
+ 2. Add a **Projects** link to the home nav. `Edit` `public/index.html`,
34
+ turning the About line of the nav into:
35
+
29
36
  ```html
30
- <!doctype html>
31
- <html lang="en">
32
- <head>
33
- <meta charset="utf-8" />
34
- <meta name="viewport" content="width=device-width, initial-scale=1" />
35
- <title>My Portfolio</title>
36
- </head>
37
- <body>
38
- <h1>My Portfolio</h1>
39
- <p>Hi, I build small, sturdy things on the web.</p>
40
- <nav>
41
- <a href="/">Home</a> ·
42
- <a href="/about.html">About</a>
43
- </nav>
44
- </body>
45
- </html>
37
+ <a href="/about.html">About</a> ·
38
+ <a href="/projects.html">Projects</a>
46
39
  ```
47
40
 
48
- `public/about.html`:
41
+ 3. `Write` the new page `public/projects.html` (plain markup, links
42
+ back home, per the style guide):
43
+
49
44
  ```html
50
45
  <!doctype html>
51
46
  <html lang="en">
52
47
  <head>
53
48
  <meta charset="utf-8" />
54
49
  <meta name="viewport" content="width=device-width, initial-scale=1" />
55
- <title>About</title>
50
+ <title>Projects</title>
56
51
  </head>
57
52
  <body>
58
- <h1>About</h1>
59
- <p>A short page about the person behind the portfolio.</p>
53
+ <h1>Projects</h1>
54
+ <p>A few small things I have shipped.</p>
60
55
  <nav>
61
56
  <a href="/">Home</a>
62
57
  </nav>
@@ -65,47 +60,57 @@ the markup plain.
65
60
  ```
66
61
 
67
62
  ```bash
68
- # Nothing for you to run yet. Look at both halves of your screen.
63
+ # Still nothing to run in the terminal. The publish steps below are
64
+ # you walking the harness; the server comes in the next chapter.
69
65
  ```
70
66
 
71
67
  Tell the tester:
72
68
 
73
- > Here it is, the moment the whole harness was built for. Your
74
- > `content-editor` agent did its real job: it wrote the actual web
75
- > pages. Two HTML files just landed in your project under `public/`:
76
- > the home page (`public/index.html`) and an about page
77
- > (`public/about.html`), plain static markup that follows the style
78
- > guide you set up earlier.
69
+ > Time to ship it the way your handbook says to. Open
70
+ > `.claude/commands/publish.md` and look at its steps: that command is
71
+ > the recipe, and you are about to run it by hand, the way the agent
72
+ > would. Three pages now live under `public/`: home, about, and a new
73
+ > projects page, with the home nav linking all three.
79
74
  >
80
- > Now glance at the Map. It did not change, and that is exactly
81
- > right. Everything you watched grow on the canvas is your harness:
82
- > the `.md` files and how they reference each other (call that
83
- > Layer 1). The HTML pages are Layer 2, what the harness PRODUCES.
84
- > skill-map maps the harness, not the pages it outputs (HTML is not
85
- > `.md`), so writing real site files leaves the graph untouched. Two
86
- > layers, one project: the graph that builds the site, and the site
87
- > itself.
75
+ > **Step 1, check the links** (`/check-links`). Walk the three pages
76
+ > and follow every internal link: `/` resolves to the home page,
77
+ > `/about.html` and `/projects.html` to files that exist, and each
78
+ > page links back home. Nothing points at a missing file, so the link
79
+ > check is clean.
88
80
  >
89
- > Ready to see the site running?
81
+ > **Step 2, brief the editor** (`@content-editor`). The check found
82
+ > nothing to fix, so there is no brief to hand off this time, that is
83
+ > the happy path. (Part 4 is where a link actually breaks and this
84
+ > step earns its keep.)
85
+ >
86
+ > **Step 3, follow the deploy runbook** (`docs/DEPLOY.md`). It lists:
87
+ > generate the pages (done), run the link check (done), start the
88
+ > server (next chapter). You have walked the whole `/publish` flow.
89
+ >
90
+ > Glance at the Map one more time: it did not move while you added a
91
+ > page and ran the pipeline. The pages are Layer 2 output; the harness
92
+ > on the canvas is Layer 1, and that is what skill-map maps.
93
+ >
94
+ > Ready to put it live?
90
95
 
91
- Wait for confirmation. Mark `generate`: done. Auto-advance to
92
- `serve`.
96
+ Wait for confirmation. You MAY `Read` the three files in `public/`
97
+ afterwards to confirm the edit and the new page landed. Mark
98
+ `pipeline`: done. Auto-advance to `golive`.
93
99
 
94
- ## Chapter `serve` - node server.js: your portfolio, live, next to the graph (~4 min)
100
+ ## Chapter `golive` - Ship it: the richer site live next to the full graph (~3 min)
95
101
 
96
- **Context**: the climax. The tester installs the single dependency
97
- (Express) and starts the tiny server that the pre-flight already left
98
- in `server.js`, then opens the site in the browser. They end with two
99
- things side by side: the real portfolio they can click through, and
100
- the skill-map graph of the harness that built it. Express runs on
101
- Node, which the tester has from pre-flight (Node 24+), so no new
102
- install beyond `npm install`. This chapter is one of the few where
103
- the tester runs a non-`sm` command themselves (`npm install`,
104
- `node server.js`); guide them, do not run it for them.
102
+ **Context**: the climax. The tester starts the tiny Express server the
103
+ pre-flight left in `server.js` and clicks through the three-page site,
104
+ ending with the running portfolio on one side and the full skill-map
105
+ graph of the harness that built it on the other. This is one of the
106
+ few chapters where the tester runs non-`sm` commands themselves
107
+ (`npm install`, `node server.js`); guide them, do not run it for them.
108
+ `npm install` is idempotent, so it is safe whether or not they already
109
+ ran it in Part 3.
105
110
 
106
- **Preparation**: none. `server.js` and `package.json` already exist
107
- from the kickoff pre-flight; the pages exist from the `generate`
108
- chapter. The tester runs everything in this chapter.
111
+ **Preparation**: none. `server.js` and `package.json` exist from the
112
+ kickoff pre-flight; the three pages exist from the `pipeline` chapter.
113
+ The tester runs everything here.
109
114
 
110
115
  ```bash
111
116
  npm install
@@ -114,43 +119,37 @@ node server.js
114
119
 
115
120
  Tell the tester:
116
121
 
117
- > Last step, and it is the fun one. You have the pages; now let's
118
- > serve them. In your terminal, run these two commands:
119
- >
120
- > The first, `npm install`, downloads the one small library the
121
- > server needs (Express, a tiny web server). It runs on Node, which
122
- > you already installed at the very start, so there is nothing new to
123
- > set up.
122
+ > Last step, the fun one. In your terminal, run these two commands:
124
123
  >
125
- > The second, `node server.js`, starts the server. It prints a line
126
- > telling you it is listening, something like `Listening on
127
- > http://localhost:3000`.
124
+ > `npm install` downloads the one small library the server needs
125
+ > (Express). If you already ran it in Part 3 it just confirms it is
126
+ > there. Then `node server.js` starts the server; it prints a line
127
+ > like `Listening on http://localhost:3000`.
128
128
  >
129
- > Open `http://localhost:3000` in your browser. There it is: your
130
- > portfolio, live. Click the **About** link, then the **Home** link
131
- > to come back. Those are the very pages your harness produced.
129
+ > Open `http://localhost:3000`. Click **About**, **Projects**, and
130
+ > **Home** to move between all three pages. Those are the pages your
131
+ > harness produced, shipped through the publish flow you just ran by
132
+ > hand.
132
133
  >
133
- > Now take a second to look at everything at once. On one side, the
134
- > real running site you can click through. On the other, the
135
- > skill-map graph of the harness that built it: the handbook, the
136
- > agent, the style guide, the publish command, the link checker, the
137
- > MCP tool, all wired together. You started in an empty folder with
138
- > nothing, and you have ended with a real, running thing and a living
139
- > map of how it all fits.
134
+ > Now take it all in at once. On one side, the real running site you
135
+ > can click through. On the other, the skill-map graph of the harness
136
+ > that built it: the handbook, the content editor, the style guide,
137
+ > the publish command, the link checker, the MCP tool, all wired
138
+ > together. You started in an empty folder with nothing, and you have
139
+ > ended with a real, running site and a living map of how it all fits.
140
140
  >
141
- > Does the site load, and can you click between Home and About?
141
+ > Does the site load, and can you click between Home, About and
142
+ > Projects?
142
143
 
143
144
  Wait for confirmation. The tester runs the commands; do not run them
144
145
  for them. If `npm install` fails, check they are in the project root
145
- (the cwd they have used all along) and that Node is on PATH (`node
146
- --version` should print 24 or higher). If the port is busy, they can
147
- stop the server with Ctrl+C and the edge case for ports applies the
148
- same as elsewhere.
149
-
150
- When they confirm, this closes Part 5 and the campaign. Tell the
151
- tester they went from an empty directory to a real portfolio site
152
- plus a complete map of its harness, congratulate them plainly, and
153
- remind them the server stays running until they press Ctrl+C. Mark
154
- `serve`: done. The orchestrator returns to the ToC menu (the
155
- campaign spine is complete; the final wrap-up in `_core.md` applies
156
- when the tester signals they are finished).
146
+ and Node is on PATH (`node --version` should print 24 or higher). If
147
+ the port is busy, stop the server with Ctrl+C and apply the ports edge
148
+ case. Remind them the server stays running until they press Ctrl+C.
149
+
150
+ This is the campaign finale. Congratulate them plainly: they went from
151
+ an empty directory to a real, running portfolio plus a complete map of
152
+ its harness. Mark `golive`: done. Last chapter of the part: apply
153
+ §Closing a part (name the part by its title; since this closes the
154
+ campaign spine, if every active part is now done route to the §Final
155
+ wrap-up instead of the menu).
@@ -1,4 +1,4 @@
1
- # Part 3: Maintain the site (step library, `maintain`)
1
+ # Part 4: Maintain the site (step library, `maintain`)
2
2
 
3
3
  This is the upkeep part. The harness from Part 2 is wired and clean; real projects drift, links break, drafts pile up, names collide. Here the tester breaks something on purpose and fixes it, meets the analyzer catalogue that catches those problems, finds an orphan nobody links to, clears a reserved-name warning, and learns the `.sm` companion files that carry the tool's bookkeeping. `pace: auto-advance` (walk straight into the next chapter once one is marked done), `preflight: reuse` (it builds on the portfolio harness from Parts 1 and 2, 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
 
@@ -283,4 +283,4 @@ sm history content-editor
283
283
  >
284
284
  > Does `sm history` show the bump you just made?
285
285
 
286
- Wait for confirmation. Mark `versions`: done. This closes Part 3; the orchestrator returns to the ToC menu.
286
+ Wait for confirmation. Mark `versions`: done. Last chapter of the part: apply §Closing a part (the close names the part by its title and routes back to the menu).
@@ -1,4 +1,4 @@
1
- # Part 4: MCP (step library, `mcp-*` ids)
1
+ # Part 5: MCP (step library, `mcp-*` ids)
2
2
 
3
3
  This is a chapter apart, the one just before the finale. Pace
4
4
  `auto-advance`, preflight `reuse` (it builds straight on the
@@ -73,6 +73,6 @@ Tell the tester:
73
73
  Wait for confirmation. If the node did not appear, have the tester
74
74
  save the file again (the watcher reacts on save) or refresh the
75
75
  browser, then re-check; the `tools:` line must be valid YAML on one
76
- line. Mark `mcp-node`: done. This closes Part 4; the orchestrator
77
- returns to the ToC menu (Part 5, "The site, live", the finale, is
78
- next on the spine).
76
+ line. Mark `mcp-node`: done. Last chapter of the part: apply §Closing
77
+ a part (the close names the part by its title and routes back to the
78
+ menu; the full publish finale is next on the spine).
@@ -1,4 +1,4 @@
1
- # Part 6 (b): Extend skill-map - plugins (step library, `tour-*` ids)
1
+ # Part 7 (b): Extend skill-map - plugins (step library, `tour-*` ids)
2
2
 
3
3
  Guided tour of the **built-in plugins** that ship with `sm`. Three
4
4
  steps: a quick mental model of what plugins are plus a peek at