@skill-map/cli 0.53.2 → 0.53.4
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.
- package/dist/cli/tutorial/sm-tutorial/SKILL.md +112 -52
- package/dist/cli/tutorial/sm-tutorial/references/_core.md +65 -15
- package/dist/cli/tutorial/sm-tutorial/references/_manifest.yml +31 -16
- package/dist/cli/tutorial/sm-tutorial/references/fixtures.md +50 -27
- package/dist/cli/tutorial/sm-tutorial/references/part-authoring.md +7 -7
- package/dist/cli/tutorial/sm-tutorial/references/part-cli.md +2 -2
- package/dist/cli/tutorial/sm-tutorial/references/part-connect-harness.md +14 -11
- package/dist/cli/tutorial/sm-tutorial/references/part-fundamentals.md +16 -22
- package/dist/cli/tutorial/sm-tutorial/references/part-live-site.md +111 -112
- package/dist/cli/tutorial/sm-tutorial/references/part-maintain.md +19 -4
- package/dist/cli/tutorial/sm-tutorial/references/part-mcp.md +4 -4
- package/dist/cli/tutorial/sm-tutorial/references/part-plugins.md +5 -4
- package/dist/cli/tutorial/sm-tutorial/references/part-project-kickoff.md +11 -13
- package/dist/cli/tutorial/sm-tutorial/references/part-run-harness.md +155 -0
- package/dist/cli/tutorial/sm-tutorial/references/part-settings.md +6 -5
- package/dist/cli.js +3 -3
- package/dist/index.js +3 -3
- package/dist/kernel/index.js +3 -3
- package/dist/ui/{chunk-OFDQMBSJ.js → chunk-4CXAL43H.js} +1 -1
- package/dist/ui/{chunk-IUZM6XLN.js → chunk-HWQTV6ZL.js} +1 -1
- package/dist/ui/{chunk-UHNBYD6J.js → chunk-JQE4N6JU.js} +3 -3
- package/dist/ui/{chunk-EQ72PEHT.js → chunk-NBXEOYS4.js} +1 -1
- package/dist/ui/{chunk-UV5Q423S.js → chunk-R2IJXS47.js} +3 -3
- package/dist/ui/index.html +2 -2
- package/dist/ui/{main-TXPLL7VU.js → main-ZXOCLPLS.js} +3 -3
- package/dist/ui/{styles-Q4NCOJQY.css → styles-L6FZYH7X.css} +1 -1
- package/package.json +1 -1
|
@@ -132,18 +132,27 @@ Apply §Provider detection from `_core.md`. Persist the result into
|
|
|
132
132
|
|
|
133
133
|
### 4. Two-terminals heads-up (one time)
|
|
134
134
|
|
|
135
|
+
Agent-only: in the `cd` block below, substitute `<cwd>` with the
|
|
136
|
+
tester's actual cwd (the absolute path of the folder the tutorial is
|
|
137
|
+
running in) so the command is copy-pasteable, same substitution as
|
|
138
|
+
every other `<cwd>` mention.
|
|
139
|
+
|
|
135
140
|
> ⚠️ Heads up: throughout the tutorial you'll be using **two
|
|
136
141
|
> terminals**.
|
|
137
142
|
>
|
|
138
143
|
> 1. **This terminal**: the one you're using right now to talk to
|
|
139
144
|
> me (Claude Code). I show you the commands, you paste me the
|
|
140
145
|
> output, and I verify.
|
|
141
|
-
> 2. **A second terminal**: open it now (new window or tab)
|
|
142
|
-
>
|
|
146
|
+
> 2. **A second terminal**: open it now (new window or tab), then run
|
|
147
|
+
> the command below so it's anchored **exactly to this folder**.
|
|
143
148
|
> That's where you copy and paste every `sm` command.
|
|
144
|
-
|
|
149
|
+
|
|
150
|
+
```bash
|
|
151
|
+
cd <cwd>
|
|
152
|
+
```
|
|
153
|
+
|
|
145
154
|
> Keep both terminals open until the end. If you accidentally close
|
|
146
|
-
> the second one, reopen it and `cd
|
|
155
|
+
> the second one, reopen it and run that `cd` again.
|
|
147
156
|
>
|
|
148
157
|
> Got the second terminal open and anchored to the folder? Confirm
|
|
149
158
|
> before we move on.
|
|
@@ -151,9 +160,19 @@ Apply §Provider detection from `_core.md`. Persist the result into
|
|
|
151
160
|
### 5. Write the universal files and show the menu
|
|
152
161
|
|
|
153
162
|
Pre-flight does NOT pre-lay any part's fixture and does NOT auto-enter
|
|
154
|
-
a part. It writes only the
|
|
155
|
-
the menu:
|
|
156
|
-
|
|
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/`).
|
|
157
176
|
- `findings.md` (block below).
|
|
158
177
|
- `tutorial-state.yml` (template below; it starts with `parts: {}`,
|
|
159
178
|
empty, a part's entry is added the first time the tester picks it).
|
|
@@ -162,14 +181,30 @@ Then **route** per §Routing + menu in `_core.md`: render the **start
|
|
|
162
181
|
menu** (numbered, Part 0 the prologue as option 1, the recommended
|
|
163
182
|
first pick). The tester picks a part by number; that part's own
|
|
164
183
|
`preflight` (see §Entering a part) lays its fixture when it begins.
|
|
165
|
-
Part 0's demo fixture (the `demo-agent`
|
|
166
|
-
|
|
184
|
+
Part 0's demo fixture (the `demo-agent` block below) is laid by its
|
|
185
|
+
`taught-init` entry, not here.
|
|
167
186
|
|
|
168
187
|
## Fixture and state templates
|
|
169
188
|
|
|
170
|
-
The `findings.md
|
|
171
|
-
in pre-flight); the `demo-agent.md`
|
|
172
|
-
|
|
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/private-credentials.md`. This is the
|
|
199
|
+
single source for that list. Four entry points delete exactly this set
|
|
200
|
+
when the prologue ran first in the dir: `portfolio-init`, the campaign
|
|
201
|
+
`seed` fast-forward, and `backstage-init` (Part 7), each so the part's
|
|
202
|
+
own fixture starts from a clean slate, plus start-over (§Menu, resume,
|
|
203
|
+
wrap-up). Part 8 `cli` is the inverse
|
|
204
|
+
consumer: its `prologue-built` seed *lays* this fixture (the
|
|
205
|
+
connector-chapter subset, without `notes/private-credentials.md`)
|
|
206
|
+
instead of deleting it, see `fixtures.md` §Seed snapshots. Keep the list
|
|
207
|
+
here in sync if a prologue chapter adds or drops a demo file.
|
|
173
208
|
|
|
174
209
|
`<provider_dir>/agents/demo-agent.md`:
|
|
175
210
|
```markdown
|
|
@@ -275,60 +310,88 @@ When a part begins, honour its `preflight` from the manifest:
|
|
|
275
310
|
|
|
276
311
|
- **`taught-init`** (Part 0): silently, before the tester's `sm init`
|
|
277
312
|
in the `init` chapter, `Write` the demo fixture (the
|
|
278
|
-
`<provider_dir>/agents/demo-agent.md` boot node
|
|
279
|
-
|
|
280
|
-
|
|
281
|
-
|
|
282
|
-
|
|
283
|
-
|
|
313
|
+
`<provider_dir>/agents/demo-agent.md` boot node, in the §Fixture
|
|
314
|
+
blocks above), substituting `<provider_dir>` per detection. The
|
|
315
|
+
universal `.skillmapignore` is already on disk from pre-flight, so
|
|
316
|
+
the first scan never sees the tutorial's own files; nothing to lay
|
|
317
|
+
here for it. The tester runs `sm init` themselves in the first
|
|
318
|
+
chapter (`sm init` only writes `.skillmapignore` when absent, so it
|
|
319
|
+
leaves the pre-flight one intact).
|
|
284
320
|
- **`portfolio-init`** (Part 1 `project-kickoff`): the campaign's
|
|
285
321
|
real project begins. Backstage, before the tester's `sm init` in
|
|
286
322
|
the `kickoff` chapter: (1) if the prologue ran first in this dir,
|
|
287
|
-
clear its demo fixture so the map starts clean, delete ONLY the
|
|
288
|
-
Part 0 fixture
|
|
289
|
-
`<provider_dir>/skills/demo-skill/`,
|
|
290
|
-
`<provider_dir>/commands/demo-command.md`, `notes/todo.md`,
|
|
291
|
-
`notes/demo-guideline.md`, `notes/private-credentials.md`) plus the
|
|
323
|
+
clear its demo fixture so the map starts clean, delete ONLY the full
|
|
324
|
+
Part 0 demo fixture set (§Fixture and state templates) plus the
|
|
292
325
|
stale `.skill-map/` DB (a fresh `sm init` rebuilds it), never the
|
|
293
326
|
tester's own files; (2) `Write` the portfolio fixture from
|
|
294
327
|
`references/fixtures.md` (the Express skeleton + the handbook
|
|
295
|
-
`AGENTS.md`); (3)
|
|
296
|
-
|
|
328
|
+
`AGENTS.md`); (3) append the portfolio additions (`node_modules/`,
|
|
329
|
+
`public/`) to the universal `.skillmapignore` pre-flight already
|
|
330
|
+
wrote (its tutorial internals are already there). The tester runs `sm init`
|
|
297
331
|
themselves in the first chapter. (The later campaign parts use
|
|
298
332
|
`preflight: seed` to fast-forward into them directly, see the `seed`
|
|
299
333
|
case below; `portfolio-init` is just Part 1's flavour of that,
|
|
300
334
|
handling the Part 0 to Part 1 transition.)
|
|
301
|
-
- **`backstage-init`** (Part
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
|
|
335
|
+
- **`backstage-init`** (Part 7 `extend`): the part teaches plugins on
|
|
336
|
+
its own **master fixture**, distinct from both the demo and the
|
|
337
|
+
portfolio, so on entry make the master fixture the only one on disk.
|
|
338
|
+
Silently, with no narration: (1) clear whatever prior-part fixture is
|
|
339
|
+
present so the master map starts clean (never the tester's own files;
|
|
340
|
+
the universal `.skillmapignore` stays):
|
|
341
|
+
- Part 0 demo fixture present (the tester came from the prologue) →
|
|
342
|
+
delete the full Part 0 demo fixture set (§Fixture and state
|
|
343
|
+
templates);
|
|
344
|
+
- portfolio fixture present instead (the tester ran the campaign) →
|
|
345
|
+
delete everything `portfolio-init` and the campaign chapters lay
|
|
346
|
+
(see `fixtures.md` §Portfolio fixture + §Seed snapshots);
|
|
347
|
+
- in either of those cases also drop the stale `.skill-map/` DB so a
|
|
348
|
+
fresh init rebuilds it.
|
|
349
|
+
(2) run `sm init --no-scan` from the cwd (the universal
|
|
350
|
+
`.skillmapignore` from pre-flight is already on disk, so init leaves
|
|
351
|
+
it intact and the tutorial's own files stay out of the scan); (3)
|
|
352
|
+
`Write` the part's fixture (read `references/fixtures.md` for the
|
|
353
|
+
verbatim `master-agent` / `master-skill` / `notes/ideas` files; skip
|
|
354
|
+
kinds the provider doesn't claim). If nothing needed clearing and the
|
|
355
|
+
dir was already initialised with the master fixture in place (Part 7
|
|
356
|
+
re-entry), that is fine: skip the init and just ensure the fixture
|
|
311
357
|
files are present.
|
|
312
|
-
- **`
|
|
313
|
-
|
|
314
|
-
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
-
|
|
318
|
-
|
|
358
|
+
- **`seed: prologue-built`** (Part 8 `cli`): the part reads the **Part 0
|
|
359
|
+
demo fixture**, NOT the cumulative portfolio, so on entry make that
|
|
360
|
+
fixture the one on disk. Read the state, then:
|
|
361
|
+
- Demo fixture already present (the tester came straight from the
|
|
362
|
+
prologue) → just `sm scan`, nothing to lay.
|
|
363
|
+
- **Portfolio** fixture present instead (the tester ran the campaign)
|
|
364
|
+
→ clear it first (the inverse of `portfolio-init`: delete the
|
|
365
|
+
portfolio fixture, everything `portfolio-init` and the campaign
|
|
366
|
+
chapters lay, see `fixtures.md` §Portfolio fixture + §Seed snapshots,
|
|
367
|
+
plus the stale `.skill-map/` DB; never the tester's own files), then
|
|
368
|
+
lay the `prologue-built` snapshot from `fixtures.md` (§Seed
|
|
369
|
+
snapshots), `sm init`, `sm scan`.
|
|
370
|
+
- Nothing there → lay the snapshot, `sm init`, `sm scan`.
|
|
371
|
+
- **`seed`** (the campaign parts `connect-harness` / `run-harness` /
|
|
372
|
+
`maintain` / `mcp` / `live-site`): the part builds on the accumulating portfolio
|
|
319
373
|
harness, but the tester may have jumped straight here from the menu.
|
|
320
374
|
On entry, read the state file:
|
|
321
375
|
- If every predecessor campaign part up the `prereq` chain is `done`
|
|
322
376
|
→ reuse the accumulated state; an `sm scan` to refresh is enough,
|
|
323
377
|
nothing to lay.
|
|
324
378
|
- Else → **fast-forward, silently** (backstage, do not narrate the
|
|
325
|
-
plumbing):
|
|
379
|
+
plumbing): first, if the prologue ran first in this dir, clear the
|
|
380
|
+
full Part 0 demo fixture set (§Fixture and state templates) so the
|
|
381
|
+
seeded campaign map does not carry the prologue's demo nodes (the
|
|
382
|
+
`sm scan` below reconciles the removed files out of the DB). Then
|
|
383
|
+
lay the part's `seed` snapshot from
|
|
326
384
|
`references/fixtures.md` (§Seed snapshots) by following its
|
|
327
385
|
checklist, copy each file's canonical content from the chapter the
|
|
328
386
|
row names, apply the `EDIT` rows on top, substituting
|
|
329
387
|
`<provider_dir>` and skipping provider-unsupported kinds per
|
|
330
|
-
`_core.md`.
|
|
331
|
-
`
|
|
388
|
+
`_core.md`. The snapshot's `.skillmapignore` additions
|
|
389
|
+
(`node_modules/`, `public/`) are appended to the universal
|
|
390
|
+
`.skillmapignore` pre-flight already wrote, so the tutorial's own
|
|
391
|
+
`.claude/skills/sm-tutorial/` files stay out of the scan even on a
|
|
392
|
+
direct jump here. Then run `sm init` if `.skill-map/` is missing
|
|
393
|
+
(it will not overwrite that `.skillmapignore`), then `sm scan` so
|
|
394
|
+
the map reflects the seeded harness. Mark the skipped
|
|
332
395
|
predecessor campaign parts `skipped` in the state (they stay in the
|
|
333
396
|
menu for later). Then emit exactly ONE tester-facing line:
|
|
334
397
|
|
|
@@ -350,18 +413,15 @@ All three are specified in `_core.md`:
|
|
|
350
413
|
the **numbered start menu** (Part 0 is option 1, the recommended
|
|
351
414
|
first pick); the menu (the ToC from `_manifest.yml`, numbered,
|
|
352
415
|
completed parts ticked, `planned` parts hidden, `prereq` gating only
|
|
353
|
-
|
|
416
|
+
seedless parts, none today since Part 8 `cli` now self-seeds) is the
|
|
417
|
+
entry point on the first
|
|
354
418
|
invocation and after every part closes / on resume. Render it with
|
|
355
419
|
the format in `_core.md` §Menu format.
|
|
356
420
|
- **Resume / restart**: §Resume / restart. On start-over, the exact
|
|
357
421
|
wipe list is whatever the tester's parts actually created:
|
|
358
422
|
`tutorial-state.yml`, `findings.md`, `.skillmapignore`,
|
|
359
|
-
`.skill-map/`, the Part 0 fixture
|
|
360
|
-
|
|
361
|
-
`<provider_dir>/skills/demo-skill/`,
|
|
362
|
-
`<provider_dir>/commands/demo-command.md`, `notes/todo.md`,
|
|
363
|
-
`notes/demo-guideline.md`, `notes/private-credentials.md`), the
|
|
364
|
-
Part 6 fixture if `extend` ran
|
|
423
|
+
`.skill-map/`, the full Part 0 demo fixture set (§Fixture and state
|
|
424
|
+
templates), the Part 7 fixture if `extend` ran
|
|
365
425
|
(`<provider_dir>/agents/master-agent.md`,
|
|
366
426
|
`<provider_dir>/skills/master-skill/`, `notes/ideas.md`,
|
|
367
427
|
`.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/`
|
|
153
|
-
|
|
154
|
-
tutorial's
|
|
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)**:
|
|
166
|
-
|
|
167
|
-
|
|
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
|
|
@@ -287,20 +288,53 @@ For every chapter:
|
|
|
287
288
|
the book ToC, numbered, and let the tester pick a part by number.
|
|
288
289
|
Part 0 (the prologue) is option 1, the recommended starting point,
|
|
289
290
|
so a brand-new tester just types `1`. Do NOT auto-enter a part; the
|
|
290
|
-
menu is the entry point every time. On later renders,
|
|
291
|
-
|
|
291
|
+
menu is the entry point every time. On later renders, mark completed
|
|
292
|
+
parts with a `✓` in their description line, not on the title (see
|
|
293
|
+
§Menu format).
|
|
292
294
|
- **Which parts to list**: parts in `order`, `status: active` only
|
|
293
295
|
(`planned` parts are hidden). A part with a `seed` (the campaign
|
|
294
|
-
parts) is always shown, even out of order, its
|
|
295
|
-
fast-forwards the project into it (SKILL.md
|
|
296
|
-
part with a `prereq` but NO `seed`
|
|
297
|
-
its `prereq` is `done
|
|
298
|
-
|
|
299
|
-
|
|
296
|
+
parts plus Part 8 `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 8 `cli` used to be, now it self-seeds).
|
|
301
|
+
- **After the tester picks**: walk that part; when it ends, run
|
|
302
|
+
§Closing a part (a tester-facing close, then this menu).
|
|
300
303
|
- **Adding content** is data-only: a new chapter in a part (or a new
|
|
301
304
|
`part-<id>.md` + a manifest row). Keep chapter-id prefixes matching
|
|
302
305
|
the file name so dispatch stays mechanical.
|
|
303
306
|
|
|
307
|
+
### Closing a part
|
|
308
|
+
|
|
309
|
+
A part must FEEL finished before the menu comes back: the tester
|
|
310
|
+
should never slide into the next part as if it auto-continued. When a
|
|
311
|
+
part's last chapter (the last in `_manifest.yml` order) is confirmed,
|
|
312
|
+
before re-rendering the menu emit a short tester-facing close:
|
|
313
|
+
|
|
314
|
+
- A `✓` line naming the part just finished BY ITS TITLE (from
|
|
315
|
+
`_manifest.yml`), not the internal "Part N" index, which is off by
|
|
316
|
+
one from the menu numbering the tester sees.
|
|
317
|
+
- One line recapping what they built or learned (same source as the
|
|
318
|
+
menu description).
|
|
319
|
+
- A hand-off line: back to the menu, pick the next part.
|
|
320
|
+
|
|
321
|
+
Then render the menu (§Menu format) with this part now marked done (a
|
|
322
|
+
`✓` in its description line, not on the title); its intro may lean to
|
|
323
|
+
"what's next" on a post-part render. The last
|
|
324
|
+
chapter's own confirmation stays scoped to that chapter, it does NOT
|
|
325
|
+
promise or pre-announce the next part, the close and the menu own the
|
|
326
|
+
transition. Sample (Claude variant, mirror the tester's language,
|
|
327
|
+
apply the host rendering rule):
|
|
328
|
+
|
|
329
|
+
> ✓ Listo, terminaste **El proyecto desde cero**. Levantaste un
|
|
330
|
+
> proyecto real, su handbook y el harness `.claude/` con sus primeros
|
|
331
|
+
> nodos.
|
|
332
|
+
>
|
|
333
|
+
> Volvés al menú, elegí con qué seguir.
|
|
334
|
+
|
|
335
|
+
If every active part is now `✓` (nothing left to pick), skip the menu
|
|
336
|
+
and go straight to §Final wrap-up.
|
|
337
|
+
|
|
304
338
|
### Menu format
|
|
305
339
|
|
|
306
340
|
Render the menu numbered and formatted (NOT a bare list), translated
|
|
@@ -308,6 +342,11 @@ to the tester's language. A one-line intro, then per part a **bold
|
|
|
308
342
|
numbered title line** (number + title + `(~M min)`) as plain prose,
|
|
309
343
|
immediately followed by a single-level `> ` blockquote one-line
|
|
310
344
|
description (what the part covers, derived from its title + chapters).
|
|
345
|
+
A **completed part** keeps its plain title (NO `✓` on the title line)
|
|
346
|
+
and swaps its description for the done marker: `> ✓ ` plus a short
|
|
347
|
+
"already done" note (e.g. `✓ Ya la hiciste.`). The green check lives
|
|
348
|
+
inside the content, mirroring the `✓` confirmations used elsewhere,
|
|
349
|
+
never as a title prefix.
|
|
311
350
|
NO blank line between a title and its description; ONE blank line
|
|
312
351
|
between parts; NO outer blockquote around the whole menu. Close with a
|
|
313
352
|
short "¿Cuál?" / "Which one?" on its own line. Sample (Claude variant,
|
|
@@ -331,6 +370,17 @@ single blockquote" rule: the intro, the bold titles and the trailing
|
|
|
331
370
|
non-Claude hosts the `> ` collapses to plain prose, indent each
|
|
332
371
|
description two spaces so it stays subordinate to its title.
|
|
333
372
|
|
|
373
|
+
Same menu after Part 1 is done (the `✓` sits in the description line,
|
|
374
|
+
the title stays plain):
|
|
375
|
+
|
|
376
|
+
```
|
|
377
|
+
**1. El mapa en vivo** (~12 min)
|
|
378
|
+
> ✓ Ya la hiciste.
|
|
379
|
+
|
|
380
|
+
**2. El proyecto desde cero** (~8 min)
|
|
381
|
+
> Arrancás un proyecto real (un portfolio) y su harness `.claude/`.
|
|
382
|
+
```
|
|
383
|
+
|
|
334
384
|
## Resume / restart
|
|
335
385
|
|
|
336
386
|
When re-invoked and the state file already exists, do NOT repeat
|
|
@@ -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
|
-
#
|
|
20
|
-
# seed which
|
|
21
|
-
#
|
|
22
|
-
#
|
|
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`).
|
|
@@ -44,13 +45,13 @@ parts:
|
|
|
44
45
|
- id: kinds ; title: "The other kinds appear" ; est_min: 1
|
|
45
46
|
- id: first-edit ; title: "Your first edit (the watcher reacts)" ; est_min: 1
|
|
46
47
|
- id: connectors ; title: "The connectors light up" ; est_min: 2
|
|
47
|
-
- id: inspector ; title: "The inspector and
|
|
48
|
+
- id: inspector ; title: "The inspector and connections" ; est_min: 1
|
|
48
49
|
- id: edit-link ; title: "Edit a link, the topology changes" ; est_min: 3
|
|
49
50
|
- id: workspace ; title: "Navigate the workspace (files, search, isolate)" ; est_min: 2
|
|
50
51
|
- id: ignore ; title: "Silence a file via .skillmapignore" ; est_min: 2
|
|
51
52
|
|
|
52
53
|
- id: extend
|
|
53
|
-
order:
|
|
54
|
+
order: 7
|
|
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:
|
|
84
|
+
order: 8
|
|
84
85
|
title: "The CLI in depth"
|
|
85
86
|
step_file: part-cli.md
|
|
86
87
|
pace: auto-advance
|
|
87
|
-
preflight:
|
|
88
|
-
|
|
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
|
|
@@ -130,8 +132,21 @@ parts:
|
|
|
130
132
|
- id: links ; title: "Mentions (@) and references between assets" ; est_min: 3
|
|
131
133
|
- id: confidence ; title: "Connector confidence (opacity = certainty)" ; est_min: 2
|
|
132
134
|
|
|
133
|
-
- id:
|
|
135
|
+
- id: run-harness
|
|
134
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
|
+
|
|
148
|
+
- id: maintain
|
|
149
|
+
order: 4
|
|
135
150
|
title: "Maintain the site"
|
|
136
151
|
step_file: part-maintain.md
|
|
137
152
|
pace: auto-advance
|
|
@@ -148,7 +163,7 @@ parts:
|
|
|
148
163
|
- id: versions ; title: "Versions: sm bump and history" ; est_min: 2
|
|
149
164
|
|
|
150
165
|
- id: mcp
|
|
151
|
-
order:
|
|
166
|
+
order: 5
|
|
152
167
|
title: "MCP" # a chapter apart, just before the finale
|
|
153
168
|
step_file: part-mcp.md
|
|
154
169
|
pace: auto-advance
|
|
@@ -160,8 +175,8 @@ parts:
|
|
|
160
175
|
- id: mcp-node ; title: "content-editor declares an MCP tool; the mcp:// node appears" ; est_min: 3
|
|
161
176
|
|
|
162
177
|
- id: live-site
|
|
163
|
-
order:
|
|
164
|
-
title: "
|
|
178
|
+
order: 6
|
|
179
|
+
title: "Ship the site (the full publish pipeline)" # the finale / climax
|
|
165
180
|
step_file: part-live-site.md
|
|
166
181
|
pace: auto-advance
|
|
167
182
|
preflight: seed
|
|
@@ -169,7 +184,7 @@ parts:
|
|
|
169
184
|
prereq: connect-harness
|
|
170
185
|
status: active
|
|
171
186
|
chapters:
|
|
172
|
-
- id:
|
|
173
|
-
- id:
|
|
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
|
|
174
189
|
|
|
175
190
|
findings_file: "./findings.md"
|
|
@@ -1,12 +1,24 @@
|
|
|
1
1
|
# Fixture templates
|
|
2
2
|
|
|
3
|
-
Fixtures the orchestrator lays for the auto-fixtured parts. Two
|
|
4
|
-
|
|
5
|
-
`backstage-init`) right below, and the **portfolio
|
|
6
|
-
"The project from zero", `portfolio-init`) at the
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
3
|
+
Fixtures the orchestrator lays for the auto-fixtured parts. Two full
|
|
4
|
+
templates live here: the **master fixture** (Part 7, "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 7): 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
|
|
149
|
+
real and runnable (Part 3 runs it, Part 6 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.
|
|
@@ -154,15 +166,12 @@ Layout:
|
|
|
154
166
|
|
|
155
167
|
### File: `AGENTS.md` (kind: markdown, the boot node)
|
|
156
168
|
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
name
|
|
160
|
-
|
|
161
|
-
Operating manual for this portfolio site: how its pages get
|
|
162
|
-
written, checked, and published by the .claude/ harness.
|
|
163
|
-
tags: [docs, portfolio]
|
|
164
|
-
---
|
|
169
|
+
No frontmatter: a real handbook is plain prose (this repo's own
|
|
170
|
+
`AGENTS.md` and the tutorial's `CLAUDE.md` carry none either), and a
|
|
171
|
+
`name:` that differs from the filename only confuses the tester. The
|
|
172
|
+
node displays by its path, `AGENTS.md`.
|
|
165
173
|
|
|
174
|
+
```markdown
|
|
166
175
|
# Portfolio handbook
|
|
167
176
|
|
|
168
177
|
A small static portfolio site, served by Express (`server.js`). The
|
|
@@ -196,7 +205,7 @@ app.listen(port, () => console.log(`Portfolio live at http://localhost:${port}`)
|
|
|
196
205
|
}
|
|
197
206
|
```
|
|
198
207
|
|
|
199
|
-
### File: `public/index.html` (not scanned; placeholder until Part
|
|
208
|
+
### File: `public/index.html` (not scanned; placeholder until Part 3)
|
|
200
209
|
|
|
201
210
|
```html
|
|
202
211
|
<!doctype html>
|
|
@@ -208,15 +217,16 @@ app.listen(port, () => console.log(`Portfolio live at http://localhost:${port}`)
|
|
|
208
217
|
|
|
209
218
|
### `.skillmapignore` additions
|
|
210
219
|
|
|
211
|
-
Append to the
|
|
212
|
-
|
|
213
|
-
|
|
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).
|
|
214
223
|
|
|
215
|
-
## Seed snapshots (for `preflight: seed
|
|
224
|
+
## Seed snapshots (for `preflight: seed`)
|
|
216
225
|
|
|
217
|
-
When the orchestrator enters a
|
|
218
|
-
predecessors are not `done
|
|
219
|
-
|
|
226
|
+
When the orchestrator enters a seedable part out of order (the campaign
|
|
227
|
+
parts when their predecessors are not `done`, or Part 8 `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) +
|
|
220
230
|
`sm scan`. These are **checklists, not content**: each row names a file
|
|
221
231
|
and the chapter that holds its canonical content. Lay each file by
|
|
222
232
|
copying the content from the named chapter (substitute `<provider_dir>`
|
|
@@ -237,7 +247,7 @@ any cross-links:
|
|
|
237
247
|
3. `<provider_dir>/agents/content-editor.md` <- part-project-kickoff.md, chapter `first-agent`.
|
|
238
248
|
4. `docs/STYLE.md` and `docs/DEPLOY.md` <- part-project-kickoff.md, chapter `real-kinds`.
|
|
239
249
|
|
|
240
|
-
### Seed snapshot: `harness-connected` (start of Parts 3
|
|
250
|
+
### Seed snapshot: `harness-connected` (start of Parts 3-6)
|
|
241
251
|
|
|
242
252
|
Everything in `harness-built`, PLUS the Part 2 wiring:
|
|
243
253
|
|
|
@@ -246,6 +256,19 @@ Everything in `harness-built`, PLUS the Part 2 wiring:
|
|
|
246
256
|
7. EDIT `AGENTS.md`: append the two hub bullets (mention `@content-editor`, invoke `/publish`) <- part-connect-harness.md, chapter `links`.
|
|
247
257
|
8. EDIT `<provider_dir>/agents/content-editor.md`: add the `[style guide](../../docs/STYLE.md)` line <- part-connect-harness.md, chapter `links`.
|
|
248
258
|
|
|
249
|
-
After laying a snapshot the map matches the state a tester would
|
|
250
|
-
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 8 `cli`)
|
|
263
|
+
|
|
264
|
+
NOT cumulative and NOT the portfolio: this is the **Part 0 demo
|
|
265
|
+
fixture**, the five 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 8 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` <- part-fundamentals.md, chapter `kinds`.
|
|
273
|
+
3. EDIT `notes/todo.md`: wire the hub bullets pointing at the four other nodes <- part-fundamentals.md, chapter `connectors`.
|
|
251
274
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
# Part
|
|
1
|
+
# Part 7 (c): Extend skill-map - build plugins (step library, `authoring-*` ids)
|
|
2
2
|
|
|
3
|
-
Step bodies for the plugin-authoring chapters of Part
|
|
3
|
+
Step bodies for the plugin-authoring chapters of Part 7.
|
|
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 (
|
|
15
|
-
|
|
16
|
-
the
|
|
17
|
-
this is the expected state regardless
|
|
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
|
|
1
|
+
# Part 8: 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
|
|
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
|
|