@skill-map/cli 0.16.2 → 0.16.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.
package/README.md CHANGED
@@ -37,7 +37,7 @@ claude # open Claude Code in the same dir
37
37
  ejecutá @sm-tutorial.md
38
38
  ```
39
39
 
40
- Claude loads the SKILL.md and runs the demo (~7 min): fixture, `sm init`, live UI, four "reveals" that show the watcher in action, plus the `.skillmapignore` hide-a-file flow. An optional deep-dive (~30-40 min) covers the rest of the CLI surface (`list`, `graph`, `export`, `orphans`, `plugins`, `db ops`).
40
+ Claude loads the SKILL.md and runs the demo (~10 min): fixture, `sm init`, live UI, five sub-steps that show the watcher in action, plus the `.skillmapignore` hide-a-file flow. An optional deep-dive (~30-40 min) covers the rest of the CLI surface (`list`, `graph`, `export`, `check`, `plugins`).
41
41
 
42
42
  The verb `sm tutorial` writes a single self-contained file; the SKILL.md ships inside this package, so no extra install needed.
43
43
 
@@ -3,7 +3,7 @@ name: sm-tutorial
3
3
  description: |
4
4
  Interactive tutorial for testing the skill-map CLI and UI. Aimed at
5
5
  testers who are downloading the tool for the first time. The flow
6
- starts with a quick demo (~7 min) that showcases the live UI — the
6
+ starts with a quick demo (~10 min) that showcases the live UI — the
7
7
  tester runs `sm`, opens the browser, and watches the UI update as
8
8
  the agent edits `.md` files — and at the end offers an optional
9
9
  deep-dive (~30-40 min) covering the rest of the CLI with flags and
@@ -23,7 +23,7 @@ validated in pre-flight), narrate what you did, show the commands to
23
23
  type, and wait for the tester to run them and confirm.
24
24
 
25
25
  **Internal structure (do NOT mention this to the tester)**: the tutorial
26
- has a short first phase (~7 min) that demonstrates the live UI, and an
26
+ has a short first phase (~10 min) that demonstrates the live UI, and an
27
27
  optional second phase (~30-40 min) covering the rest of the CLI.
28
28
 
29
29
  > ⚠️ For the tester this is **a single continuous flow**. Never use
@@ -142,7 +142,7 @@ optional second phase (~30-40 min) covering the rest of the CLI.
142
142
  calls for a change to `.skillmapignore`,
143
143
  `.skill-map/settings.json`,
144
144
  `.skill-map/settings.local.json`, or `.gitignore` AS PART
145
- OF A REVEAL OR LESSON (e.g. Reveal 5 in Step 2 hides a
145
+ OF A LESSON (e.g. Step 2.5 hides a
146
146
  private node by appending a pattern), you describe the
147
147
  edit in a blockquote and the tester applies it in their
148
148
  own editor. The pedagogical point is that those files
@@ -151,28 +151,26 @@ optional second phase (~30-40 min) covering the rest of the CLI.
151
151
  teach moment defeats the lesson.
152
152
  2. **After every command block, stop and wait.** The tester pastes
153
153
  the output or replies "OK" / "done". Only then do you advance.
154
- 3. **Persist progress after every step / stage.** Update
154
+ 3. **Persist progress after every step.** Update
155
155
  `tutorial-state.yml` with `done` / `failed` / `skipped` and a
156
156
  timestamp.
157
157
  4. **If the tester reports anything weird**, offer to record it in
158
158
  `findings.md` (in the cwd). Those are the bugs the team will read.
159
- 5. **One stage at a time.** Finish, ask if they want to continue, do
159
+ 5. **One step at a time.** Finish, ask if they want to continue, do
160
160
  the next one.
161
161
  6. **If `tutorial-state.yml` already exists in the cwd** when invoked,
162
162
  do not overwrite anything. Read it, show progress, offer to
163
163
  *continue* or *start over* (the latter requires explicit
164
164
  confirmation and wipes the tutorial content).
165
- 7. **Mirror the tester's language**: if the first message they wrote
166
- was in Spanish, run the conversation in Argentine Spanish (per
167
- Tone); if in English, run it in plain English. Internal
168
- instructions in this SKILL.md stay in English so any maintainer
169
- can read them, and fixture content stays in English (it's
170
- technical Markdown, more realistic that way). Blockquote literals
171
- in this document are the messages you actually say to the tester
172
- translate them on the fly to the tester's language and render
173
- them as blockquote in the chat. Code blocks below them stay as
174
- bare ` ```bash ` fences (no `> ` prefix) so the tester can copy
175
- cleanly.
165
+ 7. **Mirror the tester's language**: see §Tone for the language rules
166
+ (neutral Spanish — `tú` form, NOT rioplatense when the tester
167
+ writes in Spanish; plain English otherwise). Fixture human prose
168
+ also follows the tester's language, per the Tone bullet on fixture
169
+ content. Internal instructions in this SKILL.md stay in English
170
+ so any maintainer can read them. Blockquote literals in this
171
+ document are the messages you actually say to the tester
172
+ translate them on the fly. Code blocks below them stay as bare
173
+ ` ```bash ` fences (no `> ` prefix) so the tester can copy cleanly.
176
174
 
177
175
  ## Pre-flight
178
176
 
@@ -206,13 +204,17 @@ parentheticals or explanations of which items you ignored:
206
204
 
207
205
  (or, in Spanish: "Listo, el dir está limpio. Sigamos.")
208
206
 
209
- Rules (after filtering the ignored items):
207
+ **Order of checks** (apply in this order — do not skip steps):
210
208
 
211
- - Empty listing directory is empty. **Proceed.**
212
- - Listing contains `tutorial-state.yml` (before filtering) → resume
213
- mode. **Proceed** down that branch.
214
- - Anything else (files, dotfiles, other dirs) → **stop and tell**
215
- the tester:
209
+ 1. Look at the **raw** `ls -A` output, before filtering. If
210
+ `tutorial-state.yml` is present**resume mode**. Skip the
211
+ rest of this section and follow the resume branch (see
212
+ §Resume / restart).
213
+ 2. Otherwise, apply the ignored-items filter from the whitelist
214
+ above and inspect what remains:
215
+ - Empty after filtering → fresh dir. **Proceed.**
216
+ - Anything else (files, dotfiles, other dirs) → **stop and
217
+ tell** the tester:
216
218
 
217
219
  > I detected files in here:
218
220
  >
@@ -290,7 +292,7 @@ permissions issue. Suggest `node --version` and walk them through it.
290
292
 
291
293
  ### 3. Create the initial fixture (one node only)
292
294
 
293
- The tutorial builds the graph **progressively** in five reveals during
295
+ The tutorial builds the graph **progressively** in five sub-steps during
294
296
  Step 2 (Live UI). Right now, in pre-flight, you only create **one
295
297
  file** — a single agent — so the tester's first look at the UI
296
298
  shows exactly one node. The other four kinds (skill, command, hook,
@@ -338,7 +340,7 @@ Rules:
338
340
  If you spot anything weird during the tutorial, log it here.
339
341
 
340
342
  Per finding:
341
- - **Stage**: <id>
343
+ - **Step**: <id>
342
344
  - **Command**: `sm ...`
343
345
  - **Expected**: ...
344
346
  - **Got**: ...
@@ -374,24 +376,24 @@ short_steps:
374
376
  - id: "3-handoff"
375
377
  title: "Wrap-up of the demo and offer to keep going"
376
378
  status: "pending"
377
- long_stages:
378
- - id: "L1-tester-edits"
379
+ long_steps:
380
+ - id: "4-tester-edits"
379
381
  title: "Tester edits live (extends the UI demo)"
380
382
  status: "pending"
381
- - id: "L2-cli-browse"
383
+ - id: "5-cli-browse"
382
384
  title: "Browse CLI: list / show / check"
383
385
  status: "pending"
384
386
  verbs: ["sm list", "sm show", "sm check"]
385
- - id: "L3-ascii"
387
+ - id: "6-ascii"
386
388
  title: "ASCII: graph + export"
387
389
  status: "pending"
388
390
  verbs: ["sm graph", "sm export"]
389
- - id: "L4-orphans"
390
- title: "Issues and orphans"
391
+ - id: "7-issues"
392
+ title: "Issues: broken refs"
391
393
  status: "pending"
392
- verbs: ["sm orphans", "sm orphans reconcile",
393
- "sm orphans undo-rename"]
394
- - id: "L5-plugins"
394
+ verbs: ["sm check", "sm check --rules broken-ref",
395
+ "sm check --json"]
396
+ - id: "8-plugins"
395
397
  title: "Plugins"
396
398
  status: "pending"
397
399
  verbs: ["sm plugins list", "sm plugins show",
@@ -400,9 +402,9 @@ long_stages:
400
402
  findings_file: "./findings.md"
401
403
  ```
402
404
 
403
- ## Per-step / per-stage cycle
405
+ ## Per-step cycle
404
406
 
405
- For every step in the demo and every stage in the deep-dive:
407
+ For every step in the tutorial:
406
408
 
407
409
  1. **Announcement**: "Step N: `<title>`. ~M minutes." One sentence
408
410
  of context.
@@ -421,7 +423,7 @@ to resume (re-invoke the skill from the same dir).
421
423
 
422
424
  ---
423
425
 
424
- ## DEMO (~7 min)
426
+ ## DEMO (~10 min)
425
427
 
426
428
  Always runs. The pedagogical hook is the live UI.
427
429
 
@@ -451,7 +453,7 @@ sm-tutorial.md
451
453
  findings.md
452
454
  tutorial-state.yml
453
455
  sm-tutorial-report.md
454
- # tutorial outputs that may land at the root if a stage forgets to clean up
456
+ # tutorial outputs that may land at the root if a step forgets to clean up
455
457
  export.*
456
458
  dump.sql
457
459
  ```
@@ -465,24 +467,24 @@ starts the UI server with the watcher built in. One process, one
465
467
  terminal: it boots the server, scans the `.md` files, detects
466
468
  changes, and pushes events over WebSocket to the live UI.
467
469
 
468
- This step has **five reveals**, each one driven by you editing
469
- files while the server stays up — except Reveal 3, where the
470
- tester takes the keyboard for the first time.
470
+ This step has **five sub-steps** (2.1 through 2.5), each one driven
471
+ by you editing files while the server stays up — except Step 2.3,
472
+ where the tester takes the keyboard for the first time.
471
473
 
472
- 1. **Reveal 1 (boot)** — one node alone (the agent).
473
- 2. **Reveal 2 (kinds)** — the four other kinds appear as new nodes,
474
+ 1. **Step 2.1 (boot)** — one node alone (the agent).
475
+ 2. **Step 2.2 (kinds)** — the four other kinds appear as new nodes,
474
476
  still unconnected.
475
- 3. **Reveal 3 (your first edit)** — the **tester** edits the
477
+ 3. **Step 2.3 (your first edit)** — the **tester** edits the
476
478
  `description` of the agent's `.md` and watches the card
477
479
  refresh in the graph.
478
- 4. **Reveal 4 (connectors)** — the connectors light up between all
480
+ 4. **Step 2.4 (connectors)** — the connectors light up between all
479
481
  five nodes.
480
- 5. **Reveal 5 (ignore)** — a private file appears, then disappears
482
+ 5. **Step 2.5 (ignore)** — a private file appears, then disappears
481
483
  the moment a pattern is added to `.skillmapignore`.
482
484
 
483
485
  The pedagogical arc: a single dot → a constellation of dots →
484
486
  your own edit lands → graph → a graph that respects the user's
485
- ignore list. Each reveal stops at a confirm prompt before you do
487
+ ignore list. Each sub-step stops at a confirm prompt before you do
486
488
  the next.
487
489
 
488
490
  **Command** (one terminal):
@@ -491,26 +493,18 @@ the next.
491
493
  sm
492
494
  ```
493
495
 
494
- Before Reveal 1, ask the tester to set up a **side-by-side view** so
495
- they can watch the magic happen without alt-tabbing every reveal.
496
+ Before Step 2.1, ask the tester to set up a **side-by-side view** so
497
+ they can watch the magic happen without alt-tabbing every sub-step.
496
498
  Tell the tester:
497
499
 
498
- > Arrange your screen so two windows are visible at the same time:
499
- >
500
- > 1. **The browser** where the graph will update in real time.
501
- > Leave it ready to navigate to a URL; we'll get the link in a
502
- > moment.
503
- > 2. **This terminal** — the one where you're talking to me. You'll
504
- > see me announce each reveal here, then confirm what you see
505
- > in the browser.
506
- >
507
- > The third window — the terminal running `sm` — you can leave
508
- > minimized or off to the side; it will just print scan progress
500
+ > Now arrange your screen so the **browser** (where the graph will
501
+ > update in real time) and **this chat** are both visible at once
502
+ > typical layout is browser on the left half, chat on the right
503
+ > (or any split that lets you see both). The terminal running
504
+ > `sm` can stay off to the side; it just prints scan progress
509
505
  > lines and you don't need to read them.
510
506
  >
511
- > A typical layout: browser on the left half, this chat on the
512
- > right half. Or any split that lets you see both at once. Tell
513
- > me when you're set up and we start.
507
+ > Tell me when you're set up and we start.
514
508
 
515
509
  Wait for confirmation before moving on. Once they're ready, prompt
516
510
  them to launch the server and open the link it prints — without
@@ -524,7 +518,7 @@ truth (it logs the bound `http://host:port` after listen):
524
518
 
525
519
  Wait for confirmation that the page loaded.
526
520
 
527
- #### Reveal 1 — the lone agent
521
+ #### Step 2.1 — the lone agent
528
522
 
529
523
  Tell the tester:
530
524
 
@@ -542,7 +536,7 @@ Tell the tester:
542
536
 
543
537
  Wait for confirmation.
544
538
 
545
- #### Reveal 2 — the other four kinds appear (the magic)
539
+ #### Step 2.2 — the other four kinds appear (the magic)
546
540
 
547
541
  Leave the browser open and the terminal with `sm` running. You
548
542
  create the four missing kinds **without any cross-fixture links**
@@ -654,13 +648,13 @@ Tell the tester:
654
648
 
655
649
  Wait for confirmation.
656
650
 
657
- #### Reveal 3 — your first edit
651
+ #### Step 2.3 — your first edit
658
652
 
659
653
  Up to here you've been watching the agent write files. Now hand
660
654
  the keyboard over: the lesson is that the watcher reacts to
661
655
  **any** `.md` edit under the cwd, not just to files the agent
662
656
  authors. After this beat, the tester has the muscle memory for
663
- "save → graph updates", which Reveal 5 (`.skillmapignore`) reuses
657
+ "save → graph updates", which Step 2.5 (`.skillmapignore`) reuses
664
658
  verbatim.
665
659
 
666
660
  Tell the tester:
@@ -672,11 +666,10 @@ Tell the tester:
672
666
  > change will be obvious.
673
667
  >
674
668
  > Now open `.claude/agents/demo-agent.md` in your editor of
675
- > choice. In the **frontmatter** (the YAML block at the top of
676
- > the file, between the two `---` lines), change the
677
- > `description:` field to any text you want the actual content
678
- > does not matter, just make it different from what's there now.
679
- > Save the file.
669
+ > choice. In the **frontmatter** at the top of the file, change
670
+ > the `description:` field to any text you want the actual
671
+ > content does not matter, just make it different from what's
672
+ > there now. Save the file.
680
673
  >
681
674
  > Watch the browser. The `demo-agent` card should refresh its
682
675
  > description in real time, no reload, no Ctrl+C — same watcher
@@ -689,7 +682,7 @@ Wait for confirmation. You MAY use `Read` on the file afterwards
689
682
  to verify the change landed (read-only, allowed under Inviolable
690
683
  rule #1) before moving on.
691
684
 
692
- #### Reveal 4 — the connectors light up
685
+ #### Step 2.4 — the connectors light up
693
686
 
694
687
  Now you edit the existing files to add the cross-fixture links —
695
688
  each one becomes a connector in the graph. Apply with `Edit` (do
@@ -743,22 +736,22 @@ Tell the tester:
743
736
  > Confirm. If a connector is missing, refresh the browser and tell
744
737
  > me.
745
738
 
746
- Wait for confirmation. **Do NOT move on to Reveal 5** until the
747
- connectors are confirmed visible — Reveal 5 reuses the same live UI
739
+ Wait for confirmation. **Do NOT move on to Step 2.5** until the
740
+ connectors are confirmed visible — Step 2.5 reuses the same live UI
748
741
  session.
749
742
 
750
- #### Reveal 5 — silence a private file via `.skillmapignore`
743
+ #### Step 2.5 — silence a private file via `.skillmapignore`
751
744
 
752
- The first four reveals showed the watcher picking up new files and
753
- edits (yours and theirs). Reveal 5 flips the direction: a file the
745
+ The first four sub-steps showed the watcher picking up new files and
746
+ edits (yours and theirs). Step 2.5 flips the direction: a file the
754
747
  tester DOES NOT want
755
748
  in the graph (a draft, a scratch file, a secret) gets hidden by a
756
749
  single line in `.skillmapignore`. Same live mechanism — no restart.
757
750
 
758
751
  `sm init` already wrote a starter `.skillmapignore` at the scope
759
- root. The flow has three beats:
752
+ root. The flow has three sub-steps:
760
753
 
761
- **Beat A — you create one new fixture file (the agent does this).**
754
+ **Step 2.5.1 — you create one new fixture file (the agent does this).**
762
755
 
763
756
  `Write` `notes/private-credentials.md` — kind `note`, simulates a
764
757
  file the tester would never want surfacing publicly:
@@ -783,7 +776,7 @@ Confirm the file appears in the graph as a sixth node
783
776
  (`notes/private-credentials`). The watcher sees it like any
784
777
  other `.md` — that's the point of the demo.
785
778
 
786
- **Beat B — you show the project structure (the agent does this).**
779
+ **Step 2.5.2 — you show the project structure (the agent does this).**
787
780
 
788
781
  Before asking the tester to touch `.skillmapignore`, give them a
789
782
  mental map of the folder so they know where the file lives and
@@ -791,8 +784,7 @@ what's around it. Use `Bash` (`ls -la` and `ls -la notes/` if a
791
784
  deeper view helps) and present the listing inside a blockquote so
792
785
  the tester sees what their cwd holds:
793
786
 
794
- > Antes del último paso, esto es lo que tenés en el directorio
795
- > ahora mismo:
787
+ > One last step. Here's what your directory looks like right now:
796
788
  >
797
789
  > ```
798
790
  > . ← your cwd
@@ -817,7 +809,7 @@ Adjust the actual tree shown to whatever `ls -la` returns — the
817
809
  goal is "tester recognises their own filesystem", not a copy of
818
810
  the snippet above.
819
811
 
820
- **Beat C — the tester edits `.skillmapignore` (NOT the agent).**
812
+ **Step 2.5.3 — the tester edits `.skillmapignore` (NOT the agent).**
821
813
 
822
814
  Per Inviolable rule #1, you DO NOT touch `.skillmapignore` with
823
815
  your `Edit` tool. Tell the tester to do it from their editor:
@@ -854,7 +846,7 @@ Mark `2-ui-live: done`.
854
846
  ### Step 3 — Wrap-up of the demo and offer to keep going (30 s)
855
847
 
856
848
  > All set! That's the heart of skill-map: you edit a `.md` and the
857
- > UI sees it instantly. In **~7 minutes** you've already seen the
849
+ > UI sees it instantly. In **~10 minutes** you've already seen the
858
850
  > full flow.
859
851
  >
860
852
  > If you want, **we can keep going deeper**: I'll walk you through
@@ -880,7 +872,7 @@ If they say **1**:
880
872
 
881
873
  ## DEEP-DIVE (~30-40 min) — opt-in
882
874
 
883
- Strictly new stages. Does not re-expand demo steps.
875
+ Strictly new steps. Does not re-expand demo steps.
884
876
 
885
877
  ### Level question (one time only, on entry)
886
878
 
@@ -900,12 +892,12 @@ Save into `tester.level` and modulate:
900
892
  - **Level 3**: dense blocks, flags included, no explanations of
901
893
  basic concepts.
902
894
 
903
- ### Stage L1 — Tester edits live (~3 min)
895
+ ### Step 4 — Tester edits live (~3 min)
904
896
 
905
897
  **Context**: in the demo you edited. Now it's their turn to confirm
906
898
  they can do it from their editor.
907
899
 
908
- This stage needs the server running. **Check first** before asking
900
+ This step needs the server running. **Check first** before asking
909
901
  them to launch it: many testers leave it running from Step 2 and
910
902
  the demo wraps without an explicit Ctrl+C. Word the prompt as a
911
903
  conditional, e.g. "If the server from Step 2 is still up, leave it
@@ -917,16 +909,14 @@ process trying to bind the same port and confusing the tester.
917
909
  > editor of choice and remove the line that links to `demo-agent.md`.
918
910
  > Save. Watch the UI.
919
911
  >
920
- > Expected: the `demo-skill → demo-agent` connector disappears. If
921
- > `demo-agent.md` ends up with no one linking to it, it shows up as
922
- > an orphan (we'll create a similar dangling situation in stage L4
923
- > to see how `sm check` flags it).
912
+ > Expected: the `demo-skill → demo-agent` connector disappears in
913
+ > real time. The two nodes stay in the graph; only the edge goes.
924
914
 
925
915
  You verify by reading `.claude/skills/demo-skill/SKILL.md` to confirm
926
916
  the change was applied. Once they confirm, ask them to **Ctrl+C**
927
917
  the server.
928
918
 
929
- ### Stage L2 — Browse CLI: list / show / check (~3 min)
919
+ ### Step 5 — Browse CLI: list / show / check (~3 min)
930
920
 
931
921
  ```bash
932
922
  sm list
@@ -938,10 +928,10 @@ sm check
938
928
 
939
929
  Expected: you see the 5 fixture nodes listed with their kind;
940
930
  `check` runs the deterministic rules and reports a clean fixture
941
- (no issues at this point — we will plant one in stage L4 and watch
931
+ (no issues at this point — we will plant one in step 7 and watch
942
932
  the rule catch it).
943
933
 
944
- ### Stage L3 — ASCII: graph + export (~3 min)
934
+ ### Step 6 — ASCII: graph + export (~3 min)
945
935
 
946
936
  ```bash
947
937
  sm graph
@@ -954,7 +944,7 @@ ls -la export.*
954
944
  `graph` draws an ASCII tree. `export` filters and serialises to md
955
945
  or json.
956
946
 
957
- ### Stage L4 — Issues: broken refs (~3 min)
947
+ ### Step 7 — Issues: broken refs (~3 min)
958
948
 
959
949
  `broken-ref` is one of the deterministic rules `sm check` runs.
960
950
  We'll plant one and watch it surface — that's the easiest way to
@@ -992,7 +982,7 @@ rest of the deep-dive doesn't depend on it.
992
982
  > orphans of that kind, so `sm orphans` will print "No orphan /
993
983
  > auto-rename issues" — that's expected, not a bug.
994
984
 
995
- ### Stage L5 — Plugins (~3 min)
985
+ ### Step 8 — Plugins (~3 min)
996
986
 
997
987
  ```bash
998
988
  sm plugins list
@@ -1049,8 +1039,8 @@ template:
1049
1039
  - **Depth reached**: <basic | full>
1050
1040
  - **Tester**: level <N> (if applicable)
1051
1041
  - **Tutorial directory**: <cwd>
1052
- - **Steps completed**: 4 / 4 + X / 5 deep-dive stages (if applicable)
1053
- - **Stages skipped**: Y (if applicable)
1042
+ - **Steps completed**: N / 3 demo + X / 5 deep-dive (if applicable)
1043
+ - **Steps skipped**: Y (if applicable)
1054
1044
  - **Total time**: ~<computed from timestamps>
1055
1045
 
1056
1046
  ## Environment
@@ -1088,27 +1078,71 @@ the cwd, start like this (do NOT repeat pre-flight from scratch):
1088
1078
 
1089
1079
  > I see you already started the tutorial.
1090
1080
  >
1091
- > You're at step <N> of 4 (or "you've already completed the first 4
1092
- > steps and you're on stage <M> of 5 of the deep-dive", depending on
1093
- > the yaml state).
1081
+ > You're at step <N> of 3 (or "you've already completed the demo
1082
+ > (steps 1-3) and you're on step <M> of 5 of the deep-dive (steps
1083
+ > 4-8)", depending on the yaml state).
1094
1084
  >
1095
1085
  > 1. **Continue** from where you left off
1096
1086
  > 2. **Start over** — wipes all the tutorial content in this dir
1097
1087
  > (asks for confirmation)
1098
1088
  > 3. **Exit** without touching anything
1099
1089
 
1100
- If they pick "start over", confirm explicitly. Only after
1101
- confirmation, delete the tutorial files in the cwd
1102
- (`tutorial-state.yml`, `findings.md`, `.skillmapignore`, `.claude/`,
1103
- `notes/`, `.skill-map/`, and any `export.*`, `dump.sql`, or
1104
- `sm-tutorial-report.md` that may have been left behind) and start
1105
- everything from pre-flight.
1090
+ If they pick "start over", do these checks **before deleting
1091
+ anything**:
1092
+
1093
+ 1. Read `tutorial.cwd` from `tutorial-state.yml` and compare with
1094
+ the current `pwd`. If they don't match, **refuse**:
1095
+
1096
+ > This `tutorial-state.yml` was generated for a different
1097
+ > directory (`<saved cwd>`). The current dir is `<pwd>`. I'm
1098
+ > refusing to wipe — your `.claude/`, `notes/`, etc. here are
1099
+ > probably yours, not the tutorial's. Move to `<saved cwd>` and
1100
+ > re-invoke me from there, or delete `tutorial-state.yml` by
1101
+ > hand if you really want to start fresh here.
1102
+
1103
+ 2. If the cwd matches, show the tester the exact list of paths
1104
+ you'll delete and ask for an explicit typed confirmation:
1105
+
1106
+ > Start over will delete these paths from `<cwd>`:
1107
+ >
1108
+ > ```
1109
+ > tutorial-state.yml
1110
+ > findings.md
1111
+ > .skillmapignore
1112
+ > .skill-map/
1113
+ > .claude/agents/demo-agent.md
1114
+ > .claude/commands/demo-command.md
1115
+ > .claude/hooks/demo-hook.md
1116
+ > .claude/skills/demo-skill/
1117
+ > notes/todo.md
1118
+ > notes/private-credentials.md
1119
+ > sm-tutorial-report.md (if present)
1120
+ > export.* (if present)
1121
+ > dump.sql (if present)
1122
+ > ```
1123
+ >
1124
+ > Type **`yes, wipe`** (exact text) to confirm. Anything else
1125
+ > cancels.
1126
+
1127
+ 3. Only on the literal `yes, wipe` reply, delete those exact paths.
1128
+ Do NOT recursively `rm -rf` `.claude/` or `notes/` as
1129
+ directories — only the specific tutorial-owned files inside, in
1130
+ case the tester has unrelated files there. After deletion, also
1131
+ `rmdir` `.claude/agents`, `.claude/commands`, `.claude/hooks`,
1132
+ `.claude/skills`, `notes/`, and `.claude/` if and only if they
1133
+ are empty (silent failure if not). Then start everything from
1134
+ pre-flight.
1106
1135
 
1107
1136
  ## Edge cases
1108
1137
 
1109
1138
  - **Tester doesn't have Node 20+** → guide them to `nvm` or
1110
1139
  nodejs.org. Don't try to install Node for them.
1111
- - **Port 4242 in use** → suggest `sm serve --port 4243`.
1140
+ - **Port 4242 in use** → bare `sm` doesn't accept flags (it's a
1141
+ shorthand for `sm serve` with defaults). Tell the tester to
1142
+ switch verbs: stop the failed `sm`, then run
1143
+ `sm serve --port 4243`. The browser link printed by the server
1144
+ changes accordingly — they should open the new URL, not the
1145
+ default 4242.
1112
1146
  - **`sm` doesn't pick up changes on WSL** → known on WSL2 with
1113
1147
  files under `/mnt/c/`. Suggest exiting, running `mkdir
1114
1148
  ~/sm-tutorial && cd ~/sm-tutorial` (Linux-native filesystem), and
@@ -1123,7 +1157,7 @@ everything from pre-flight.
1123
1157
 
1124
1158
  - Run `sm` verbs for the tester (except `sm version` ONCE in
1125
1159
  pre-flight).
1126
- - Advance to the next step / stage without confirmation.
1160
+ - Advance to the next step without confirmation.
1127
1161
  - Modify files outside the tutorial cwd.
1128
1162
  - Ask them to `cd` outside the tutorial cwd.
1129
1163
  - Skip the level question when entering the deep-dive.
package/dist/cli.js CHANGED
@@ -7374,7 +7374,7 @@ import { Command as Command8, Option as Option8 } from "clipanion";
7374
7374
  // package.json
7375
7375
  var package_default = {
7376
7376
  name: "@skill-map/cli",
7377
- version: "0.16.2",
7377
+ version: "0.16.3",
7378
7378
  description: "skill-map reference implementation \u2014 kernel + CLI + adapters.",
7379
7379
  license: "MIT",
7380
7380
  type: "module",