@skill-map/cli 0.54.0 → 0.56.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 (41) hide show
  1. package/dist/cli/tutorial/sm-tutorial/SKILL.md +22 -24
  2. package/dist/cli/tutorial/sm-tutorial/references/_core.md +8 -7
  3. package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +21 -42
  4. package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +15 -7
  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 +9 -10
  8. package/dist/cli/tutorial/sm-tutorial/references/part-daily-loop.md +563 -0
  9. package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +5 -1
  10. package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +7 -7
  11. package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +24 -12
  12. package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +2 -2
  13. package/dist/cli.js +1785 -1102
  14. package/dist/index.js +148 -14
  15. package/dist/kernel/index.d.ts +229 -97
  16. package/dist/kernel/index.js +148 -14
  17. package/dist/migrations/001_initial.sql +5 -0
  18. package/dist/ui/chunk-4ITL7E6U.js +1 -0
  19. package/dist/ui/chunk-DWBJCNC7.js +2 -0
  20. package/dist/ui/{chunk-CXTU4HQV.js → chunk-GHOVZAAV.js} +1 -1
  21. package/dist/ui/{chunk-GBKHMJ4B.js → chunk-H6O2DYVT.js} +13 -13
  22. package/dist/ui/chunk-HDKR6XHG.js +917 -0
  23. package/dist/ui/{chunk-GEI6INVH.js → chunk-JA4Z74I3.js} +1 -1
  24. package/dist/ui/chunk-RS3ANRT5.js +1 -0
  25. package/dist/ui/chunk-VUNP5KNI.js +3 -0
  26. package/dist/ui/chunk-W3Z3CZL4.js +1844 -0
  27. package/dist/ui/chunk-YHJL5LP3.js +913 -0
  28. package/dist/ui/index.html +2 -2
  29. package/dist/ui/{main-HP3MOLI2.js → main-PL3BEVQI.js} +3 -3
  30. package/dist/ui/{styles-4SNVM34O.css → styles-RHEEXRHQ.css} +1 -1
  31. package/migrations/001_initial.sql +5 -0
  32. package/package.json +2 -2
  33. package/dist/cli/tutorial/sm-tutorial/references/part-live-site.md +0 -155
  34. package/dist/cli/tutorial/sm-tutorial/references/part-maintain.md +0 -284
  35. package/dist/cli/tutorial/sm-tutorial/references/part-run-harness.md +0 -181
  36. package/dist/ui/chunk-4CXAL43H.js +0 -1
  37. package/dist/ui/chunk-BUNPMGDX.js +0 -2205
  38. package/dist/ui/chunk-DSNBKMYU.js +0 -2
  39. package/dist/ui/chunk-JXRIGHET.js +0 -552
  40. package/dist/ui/chunk-MVRQGDZJ.js +0 -123
  41. package/dist/ui/chunk-WFLPMCK4.js +0 -392
@@ -11,7 +11,7 @@ description: |
11
11
  `tutorial-state.yml` for pause/resume. Triggers: "tutorial",
12
12
  "sm-tutorial", "tutorial me", "run the tutorial", "ejecuta el
13
13
  tutorial", "test skill-map", "advanced tutorial", "go deeper",
14
- "tutorial avanzado", "ejecuta el tutorial maestro".
14
+ "tutorial avanzado".
15
15
  ---
16
16
 
17
17
  # sm-tutorial: the skill-map book
@@ -44,7 +44,7 @@ prefix when a part spans several files: `settings-*` →
44
44
  > For the tester this is a single guided session, never a course
45
45
  > catalogue. Refer to a chapter by its tester-facing `section.chapter`
46
46
  > number plus its friendly title (`_core.md` §Numbering); never expose
47
- > the internal `order` index ("Part 6", off by one from the menu), a
47
+ > the internal `order` index ("Part 4", off by one from the menu), a
48
48
  > raw "chapter id", or tour jargon ("the settings tour").
49
49
 
50
50
  ## Pre-flight (run once, silent on success)
@@ -201,9 +201,9 @@ set: `<provider_dir>/agents/demo-agent.md`,
201
201
  `notes/private-credentials.md`. This is the
202
202
  single source for that list. Four entry points delete exactly this set
203
203
  when the prologue ran first in the dir: `portfolio-init`, the campaign
204
- `seed` fast-forward, and `backstage-init` (Part 6), each so the part's
204
+ `seed` fast-forward, and `backstage-init` (Part 4), each so the part's
205
205
  own fixture starts from a clean slate, plus start-over (§Menu, resume,
206
- wrap-up). Part 7 `cli` is the inverse
206
+ wrap-up). Part 5 `cli` is the inverse
207
207
  consumer: its `prologue-built` seed *lays* this fixture (the
208
208
  connector-chapter subset, without `notes/private-credentials.md`)
209
209
  instead of deleting it, see `fixtures.md` §Seed snapshots. Keep the list
@@ -286,6 +286,8 @@ tutorial:
286
286
  provider: "<claude | agent-skills | antigravity>"
287
287
  tester:
288
288
  level: 2
289
+ # site_identity: { name, tagline } is added by the daily-loop `setup`
290
+ # chapter when the tester names their portfolio; absent until then.
289
291
  parts: {} # filled in as the tester picks parts from the menu
290
292
  findings_file: "./findings.md"
291
293
  ```
@@ -335,7 +337,7 @@ When a part begins, honour its `preflight` from the manifest:
335
337
  `preflight: seed` to fast-forward into them directly, see the `seed`
336
338
  case below; `portfolio-init` is just Part 1's flavour of that,
337
339
  handling the Part 0 to Part 1 transition.)
338
- - **`backstage-init`** (Part 6 `extend`): the part teaches plugins on
340
+ - **`backstage-init`** (Part 4 `extend`): the part teaches plugins on
339
341
  its own **master fixture**, distinct from both the demo and the
340
342
  portfolio, so on entry make the master fixture the only one on disk.
341
343
  Silently, with no narration: (1) clear whatever prior-part fixture is
@@ -355,10 +357,10 @@ When a part begins, honour its `preflight` from the manifest:
355
357
  `Write` the part's fixture (read `references/fixtures.md` for the
356
358
  verbatim `master-agent` / `master-skill` / `notes/ideas` files; skip
357
359
  kinds the provider doesn't claim). If nothing needed clearing and the
358
- dir was already initialised with the master fixture in place (Part 6
360
+ dir was already initialised with the master fixture in place (Part 4
359
361
  re-entry), that is fine: skip the init and just ensure the fixture
360
362
  files are present.
361
- - **`seed: prologue-built`** (Part 7 `cli`): the part reads the **Part 0
363
+ - **`seed: prologue-built`** (Part 5 `cli`): the part reads the **Part 0
362
364
  demo fixture**, NOT the cumulative portfolio, so on entry make that
363
365
  fixture the one on disk. Read the state, then:
364
366
  - Demo fixture already present (the tester came straight from the
@@ -371,21 +373,13 @@ When a part begins, honour its `preflight` from the manifest:
371
373
  lay the `prologue-built` snapshot from `fixtures.md` (§Seed
372
374
  snapshots), `sm init`, `sm scan`.
373
375
  - Nothing there → lay the snapshot, `sm init`, `sm scan`.
374
- - **`seed`** (the campaign parts `connect-harness` / `run-harness` /
375
- `maintain` / `mcp` / `live-site`): the part builds on the accumulating portfolio
376
- harness, but the tester may have jumped straight here from the menu.
377
- On entry, read the state file:
376
+ - **`seed`** (the campaign parts `connect-harness` and `daily-loop`):
377
+ the part builds on the accumulating portfolio harness, but the tester
378
+ may have jumped straight here from the menu. On entry, read the state
379
+ file:
378
380
  - If every predecessor campaign part up the `prereq` chain is `done`
379
381
  → reuse the accumulated state; an `sm scan` to refresh is enough,
380
- nothing to lay. **`mcp` is the exception**: it is ordered last,
381
- after `extend` (Part 6) and `cli` (Part 7), which both replace the
382
- portfolio on disk with their own master / demo fixture, so its
383
- accumulated state cannot be trusted to still be the portfolio.
384
- `mcp` therefore ALWAYS re-lays its `harness-connected` snapshot on
385
- entry (clearing a master / demo fixture first if one is present,
386
- the same clears the `backstage-init` and `prologue-built` cases
387
- do), then `sm init` if `.skill-map/` is missing and `sm scan`,
388
- exactly like the fast-forward branch below.
382
+ nothing to lay.
389
383
  - Else → **fast-forward, silently** (backstage, do not narrate the
390
384
  plumbing): first, if the prologue ran first in this dir, clear the
391
385
  full Part 0 demo fixture set (§Fixture and state templates) so the
@@ -423,16 +417,20 @@ All three are specified in `_core.md`:
423
417
  - **Routing + menu**: §Routing + menu. The session always starts at
424
418
  the **numbered start menu** (Part 0 is option 1, the recommended
425
419
  first pick); the menu (the ToC from `_manifest.yml`, numbered,
426
- completed parts ticked, `planned` parts hidden, `prereq` gating only
427
- seedless parts, none today since Part 7 `cli` now self-seeds) is the
428
- entry point on the first
420
+ completed parts ticked, `planned` parts hidden (so `mcp` stays out of
421
+ the menu), `prereq` gating only seedless parts, none today since
422
+ `cli` now self-seeds) is the entry point on the first
429
423
  invocation and after every part closes / on resume. Render it with
430
424
  the format in `_core.md` §Menu format.
431
425
  - **Resume / restart**: §Resume / restart. On start-over, the exact
432
426
  wipe list is whatever the tester's parts actually created:
433
427
  `tutorial-state.yml`, `findings.md`, `.skillmapignore`,
434
428
  `.skill-map/`, the full Part 0 demo fixture set (§Fixture and state
435
- templates), the Part 6 fixture if `extend` ran
429
+ templates), the portfolio fixture if any campaign part ran (see
430
+ `fixtures.md` §Portfolio fixture + §Seed snapshots, including the Daily
431
+ Loop's own additions: `docs/draft.md`, `public/style.css` and the
432
+ generated pages, the renamed `new-page` command, `AGENTS.sm`, and
433
+ `.skill-map/settings.local.json`), the Part 4 fixture if `extend` ran
436
434
  (`<provider_dir>/agents/master-agent.md`,
437
435
  `<provider_dir>/skills/master-skill/`, `notes/ideas.md`,
438
436
  `.skill-map/plugins/`), `link-validation/` if the CLI part ran,
@@ -1,9 +1,9 @@
1
1
  # Core conventions (shared by every part)
2
2
 
3
- This file is the single home for the conventions that used to be
4
- duplicated across the two old skills (`sm-tutorial` + `sm-master`).
5
- The orchestrator `SKILL.md` loads it once; every `part-*.md` step
6
- library assumes it. Do NOT restate these rules inside a part file.
3
+ This file is the single home for the conventions shared by every part
4
+ of the tutorial. The orchestrator `SKILL.md` loads it once; every
5
+ `part-*.md` step library assumes it. Do NOT restate these rules inside
6
+ a part file.
7
7
 
8
8
  The tutorial is **one book**: an ordered sequence of **chapters
9
9
  grouped in parts**, listed in `_manifest.yml`. A chapter is the
@@ -20,7 +20,8 @@ Two numbering systems coexist; keep them apart:
20
20
 
21
21
  - **Internal (authoring only)**: the `order` field in `_manifest.yml`
22
22
  and the `# Part N` file headers, 0-based (Part 0 the prologue …
23
- Part 8 the MCP appendix). Use it in `**Context**:` blocks and author
23
+ Part 5 the CLI deep-dive; `mcp` at Part 6 is parked / hidden). Use it
24
+ in `**Context**:` blocks and author
24
25
  notes; NEVER say it to the tester, it is off by one from what they
25
26
  see.
26
27
  - **Tester-facing (`S.N`)**: every part is a **section** numbered by
@@ -318,11 +319,11 @@ For every chapter:
318
319
  §Menu format).
319
320
  - **Which parts to list**: parts in `order`, `status: active` only
320
321
  (`planned` parts are hidden). A part with a `seed` (the campaign
321
- parts plus Part 7 `cli`) is always shown, even out of order, its
322
+ parts plus `cli`) is always shown, even out of order, its
322
323
  `preflight: seed` fast-forwards the project into it (SKILL.md
323
324
  §Entering a part). A part with a `prereq` but NO `seed` would be
324
325
  shown only once its `prereq` is `done`; no active part is in that
325
- state today (Part 7 `cli` used to be, now it self-seeds).
326
+ state today (`cli` used to be, now it self-seeds).
326
327
  - **After the tester picks**: walk that part; when it ends, run
327
328
  §Closing a part (a tester-facing close, then this menu).
328
329
  - **Adding content** is data-only: a new chapter in a part (or a new
@@ -20,7 +20,7 @@
20
20
  # seed which snapshot to fast-forward to when this part is
21
21
  # entered out of order (see fixtures.md §Seed snapshot:*).
22
22
  # Campaign parts use a cumulative portfolio snapshot;
23
- # Part 8 `cli` uses the standalone `prologue-built` demo.
23
+ # `cli` uses the standalone `prologue-built` demo.
24
24
  # prereq recommended predecessor. Gates the menu ONLY for a part
25
25
  # with NO `seed`; a seedable part is always shown (its
26
26
  # seed bridges the gap, predecessors get marked `skipped`).
@@ -51,7 +51,7 @@ parts:
51
51
  - id: ignore ; title: "Silence a file via .skillmapignore" ; est_min: 2
52
52
 
53
53
  - id: extend
54
- order: 6
54
+ order: 4
55
55
  title: "Extend skill-map for the site"
56
56
  # Spans three chapter libraries; dispatch by chapter-id prefix:
57
57
  # settings-* -> part-settings.md
@@ -81,7 +81,7 @@ parts:
81
81
  - id: authoring-6-upgrade ; title: "Try `sm plugins upgrade`" ; est_min: 2
82
82
 
83
83
  - id: cli
84
- order: 7
84
+ order: 5
85
85
  title: "The CLI in depth"
86
86
  step_file: part-cli.md
87
87
  pace: auto-advance
@@ -132,59 +132,38 @@ parts:
132
132
  - id: links ; title: "Mentions (@) and references between assets" ; est_min: 3
133
133
  - id: confidence ; title: "Connector confidence (opacity = certainty)" ; est_min: 2
134
134
 
135
- - id: run-harness
135
+ - id: daily-loop
136
136
  order: 3
137
- title: "Run the harness (your site, live)"
138
- step_file: part-run-harness.md
139
- pace: auto-advance
140
- preflight: seed
141
- seed: harness-connected # fast-forward to here if the earlier parts are not done
142
- prereq: connect-harness
143
- status: active
144
- chapters:
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
148
-
149
- - id: maintain
150
- order: 4
151
- title: "Maintain the harness"
152
- step_file: part-maintain.md
137
+ title: "The daily loop (add, improve, publish)" # the campaign finale
138
+ step_file: part-daily-loop.md
153
139
  pace: auto-advance
154
140
  preflight: seed
155
141
  seed: harness-connected # fast-forward to here if the earlier parts are not done
156
142
  prereq: connect-harness
143
+ fixture: portfolio # reuses the wired harness; lays the pretty site (style.css + pages) as taught steps
157
144
  status: active
158
145
  chapters:
159
- - id: broken-ref ; title: "A ref breaks (you rename DEPLOY.md)" ; est_min: 3
160
- - id: analyzers ; title: "The analyzer catalogue (what sm check catches)" ; est_min: 3
161
- - id: orphans ; title: "Orphans (a page nobody links to)" ; est_min: 2
162
- - id: reserved ; title: "Reserved names" ; est_min: 2
163
- - id: sidecar ; title: "Annotations .sm and consent" ; est_min: 3
146
+ - id: setup ; title: "Make it yours, make it presentable" ; est_min: 3
147
+ - id: add-page ; title: "Add a page with your agent" ; est_min: 4
148
+ - id: orphan-draft ; title: "A page nobody links to yet" ; est_min: 2
149
+ - id: wire-and-improve ; title: "Wire the draft in" ; est_min: 3
150
+ - id: broken-ref ; title: "A rename breaks a link" ; est_min: 4
151
+ - id: reserved ; title: "A reserved name collides" ; est_min: 2
152
+ - id: publish ; title: "Ship it: run /publish for real" ; est_min: 4
153
+ - id: sidecar ; title: "Annotate the handbook (.sm and consent)" ; est_min: 3
154
+ - id: golive ; title: "Your portfolio, live next to the graph" ; est_min: 3
164
155
 
156
+ # ----- parked: MCP returns later as its own iteration (body kept in part-mcp.md) -----
165
157
  - id: mcp
166
- order: 8
167
- title: "MCP" # standalone appendix, ordered last; ALWAYS re-seeds harness-connected (extend/cli wipe the portfolio before it)
158
+ order: 6
159
+ title: "MCP"
168
160
  step_file: part-mcp.md
169
161
  pace: auto-advance
170
162
  preflight: seed
171
- seed: harness-connected # fast-forward to here if the earlier parts are not done
163
+ seed: harness-connected
172
164
  prereq: connect-harness
173
- status: active
165
+ status: planned # temporarily disabled, hidden from the menu. Body exists; re-enable when MCP returns.
174
166
  chapters:
175
167
  - id: mcp-node ; title: "content-editor declares an MCP tool; the mcp:// node appears" ; est_min: 3
176
168
 
177
- - id: live-site
178
- order: 5
179
- title: "Ship the site (the full publish pipeline)" # the finale / climax
180
- step_file: part-live-site.md
181
- pace: auto-advance
182
- preflight: seed
183
- seed: harness-connected # fast-forward to here if the earlier parts are not done
184
- prereq: connect-harness
185
- status: active
186
- chapters:
187
- - id: pipeline ; title: "Run /publish end to end (check-links, brief, deploy runbook)" ; est_min: 4
188
- - id: golive ; title: "Ship it: the richer site live next to the full graph" ; est_min: 3
189
-
190
169
  findings_file: "./findings.md"
@@ -1,7 +1,7 @@
1
1
  # Fixture templates
2
2
 
3
3
  Fixtures the orchestrator lays for the auto-fixtured parts. Two full
4
- templates live here: the **master fixture** (Part 6, "Extend
4
+ templates live here: the **master fixture** (Part 4, "Extend
5
5
  skill-map", `backstage-init`) right below, and the **portfolio
6
6
  fixture** (Part 1, "The project from zero", `portfolio-init`) at the
7
7
  end of this file. The **Part 0 demo fixture** is not templated here:
@@ -18,7 +18,7 @@ context for. Holds for every command fixture wherever it is defined
18
18
  (today: the prologue `demo-command`, the `publish` command, and the
19
19
  `reserved` chapter's `init`).
20
20
 
21
- ## Master fixture (Part 6): layout (per provider)
21
+ ## Master fixture (Part 4): layout (per provider)
22
22
 
23
23
  Per §Provider detection in `SKILL.md`, the `<provider_dir>`
24
24
  placeholder resolves to `.claude/` or `.agents/skills/` depending
@@ -130,7 +130,7 @@ Per finding:
130
130
  Laid backstage before the tester's `sm init` in Part 1. The Express
131
131
  skeleton (`server.js`, `package.json`, `public/index.html`) is plain
132
132
  scaffolding, not `.md`, so the scan ignores it; it makes the project
133
- real and runnable (Part 3 runs it, Part 5 ships it). The one boot node is the
133
+ real and runnable (the daily loop, Part 3, runs and ships it). The one boot node is the
134
134
  handbook `AGENTS.md`. On `agent-skills` / Antigravity (no `agent`
135
135
  kind) the harness still works: the agent member is created as a skill
136
136
  in a later chapter.
@@ -148,6 +148,14 @@ Layout:
148
148
  └── package.json
149
149
  ```
150
150
 
151
+ The daily loop (Part 3) grows this further as taught steps, all Layer 2
152
+ or loose notes (not part of the harness graph): `public/style.css` plus
153
+ the generated pages (`index.html` rewritten, `about.html`,
154
+ `projects.html`, `posts.html`), `docs/draft.md`, the renamed `new-page`
155
+ command, `AGENTS.sm`, and `.skill-map/settings.local.json`. The
156
+ start-over wipe and the `extend` / `cli` clears account for them via
157
+ this section.
158
+
151
159
  ### File: `AGENTS.md` (kind: markdown, the boot node)
152
160
 
153
161
  No frontmatter: a real handbook is plain prose (this repo's own
@@ -208,7 +216,7 @@ Append to the universal `.skillmapignore` (written in pre-flight, see
208
216
  ## Seed snapshots (for `preflight: seed`)
209
217
 
210
218
  When the orchestrator enters a seedable part out of order (the campaign
211
- parts when their predecessors are not `done`, or Part 7 `cli` when the
219
+ parts when their predecessors are not `done`, or Part 5 `cli` when the
212
220
  demo fixture is not the one on disk), it fast-forwards the project by
213
221
  laying the snapshot below, then `sm init` (if `.skill-map/` is missing) +
214
222
  `sm scan`. These are **checklists, not content**: each row names a file
@@ -231,7 +239,7 @@ any cross-links:
231
239
  3. `<provider_dir>/agents/content-editor.md` <- part-project-kickoff.md, chapter `first-agent`.
232
240
  4. `docs/STYLE.md` and `docs/DEPLOY.md` <- part-project-kickoff.md, chapter `real-kinds`.
233
241
 
234
- ### Seed snapshot: `harness-connected` (start of Parts 3-6)
242
+ ### Seed snapshot: `harness-connected` (start of the daily-loop part)
235
243
 
236
244
  Everything in `harness-built`, PLUS the Part 2 wiring:
237
245
 
@@ -243,12 +251,12 @@ Everything in `harness-built`, PLUS the Part 2 wiring:
243
251
  After laying a campaign snapshot the map matches the state a tester would
244
252
  have at the END of the part just before the one being entered.
245
253
 
246
- ### Seed snapshot: `prologue-built` (Part 7 `cli`)
254
+ ### Seed snapshot: `prologue-built` (Part 5 `cli`)
247
255
 
248
256
  NOT cumulative and NOT the portfolio: this is the **Part 0 demo
249
257
  fixture**, the six standalone demo nodes with `notes/todo` wired as the
250
258
  hub, the clean state (`✓ No issues`) at the end of the prologue's
251
- connector chapters. Part 7 only reads it. Because it is a different
259
+ connector chapters. Part 5 only reads it. Because it is a different
252
260
  fixture from the portfolio, entry first resets any portfolio on disk
253
261
  (see SKILL.md §Entering a part, the `cli` case).
254
262
 
@@ -1,6 +1,6 @@
1
- # Part 6 (c): Extend skill-map - build plugins (step library, `authoring-*` ids)
1
+ # Part 4 (c): Extend skill-map - build plugins (step library, `authoring-*` ids)
2
2
 
3
- Step bodies for the plugin-authoring chapters of Part 6.
3
+ Step bodies for the plugin-authoring chapters of Part 4.
4
4
  The SKILL.md orchestrator dispatches each `authoring-*` chapter id
5
5
  here; `settings-*` ids it dispatches to `part-settings.md`.
6
6
 
@@ -1,4 +1,4 @@
1
- # Part 7: The CLI in depth - step library
1
+ # Part 5: The CLI in depth - step library
2
2
 
3
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
 
@@ -18,14 +18,13 @@ description: |
18
18
 
19
19
  # check-links
20
20
 
21
- Runs as the last gate before the site goes out. Reads each page under
22
- the given root, follows every internal link, and reports the ones that
23
- point at a file that does not exist.
21
+ The last gate before the site goes out.
24
22
 
25
23
  ## Steps
26
- 1. Read every page under `root`.
27
- 2. Collect the internal links from each page.
28
- 3. Report any link whose target is missing.
24
+ 1. List every HTML file under `public/`.
25
+ 2. For each page, collect its internal links (every `href` to `/` or to a `.html` file).
26
+ 3. Check the target exists under `public/` (treat `/` as `public/index.html`).
27
+ 4. Report any link whose target is missing; if none, report "0 broken links".
29
28
  ```
30
29
 
31
30
  Tell the tester:
@@ -63,9 +62,9 @@ description: |
63
62
  The one command you run when the site is ready to go out.
64
63
 
65
64
  ## Steps
66
- 1. Run /check-links on the generated pages first.
67
- 2. If anything needs a fix, brief @content-editor on it.
68
- 3. Follow the [deploy runbook](../../docs/DEPLOY.md) to ship.
65
+ 1. Run /check-links on the pages in public/. If it reports broken links, stop and fix them first.
66
+ 2. If a page needs a content fix, brief @content-editor with the change.
67
+ 3. Follow the [deploy runbook](../../docs/DEPLOY.md): regenerate pages, run the link check, start the server.
69
68
  ```
70
69
 
71
70
  Continue the tester message:
@@ -107,7 +106,7 @@ Apply both edits with `Edit` (do not rewrite the files).
107
106
  - When the site is ready to go out, run /publish.
108
107
  ```
109
108
 
110
- **Edit `.claude/agents/content-editor.md`**: add this line to the body, right after the "Turns a short brief..." paragraph (substitute `<provider_dir>` per `_core.md`):
109
+ **Edit `.claude/agents/content-editor.md`**: add this line at the end of the body, after the `Rules:` line (substitute `<provider_dir>` per `_core.md`):
111
110
 
112
111
  ```markdown
113
112
  Every page follows the [style guide](../../docs/STYLE.md).