@erclx/canon 5.39.0 → 5.40.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 (131) hide show
  1. package/README.md +5 -5
  2. package/claude/.claude-plugin/plugin.json +1 -1
  3. package/claude/skills/canvas-board/SKILL.md +1 -1
  4. package/claude/skills/draft-slides/SKILL.md +2 -3
  5. package/claude/skills/draft-slides/references/deck.md +183 -0
  6. package/claude/skills/git-pr/references/evidence.md +2 -2
  7. package/claude/skills/git-pr/references/final-command.md +1 -1
  8. package/claude/skills/git-pr/references/labels.md +1 -1
  9. package/claude/skills/git-pr/references/publish.md +1 -1
  10. package/claude/skills/review-ui/SKILL.md +1 -0
  11. package/claude/skills/role-orchestrator/references/orchestrator-handback.md +1 -1
  12. package/claude/skills/task-board/references/board.md +1 -1
  13. package/claude/skills/task-board/references/tasks.md +1 -1
  14. package/claude/skills/ux-measure/SKILL.md +1 -1
  15. package/docs/agents/audits.md +61 -60
  16. package/docs/agents/context-audit.md +40 -58
  17. package/docs/agents/index.md +5 -51
  18. package/docs/agents/install-and-sync.md +1 -0
  19. package/docs/agents/markdown-audit.md +53 -99
  20. package/docs/agents/records.md +37 -79
  21. package/docs/agents/sessions-transfer.md +26 -70
  22. package/docs/target/index.md +0 -1
  23. package/docs/target/migrations.md +57 -66
  24. package/docs/target/projects.md +36 -78
  25. package/docs/target/scenarios.md +9 -19
  26. package/docs/target/sync.md +27 -68
  27. package/docs/workflow/ai-workflow.md +22 -68
  28. package/docs/workflow/operating-model.md +32 -186
  29. package/docs/workflow/parallel-features.md +29 -66
  30. package/docs/workflow/skill-map-on-request.md +22 -24
  31. package/docs/workflow/skill-map.md +72 -76
  32. package/docs/workflow/visual-design-workflow.md +25 -118
  33. package/docs/workflow/zshrc-aliases.md +18 -37
  34. package/package.json +1 -1
  35. package/src/canvas/client/inspector/fields.css +4 -0
  36. package/src/canvas/index.html +6 -0
  37. package/src/claude/skills-reach.ts +2 -2
  38. package/src/cli/ui.ts +3 -1
  39. package/src/commands/canvas.ts +23 -0
  40. package/src/commands/capture.ts +14 -0
  41. package/src/commands/claude.ts +13 -0
  42. package/src/commands/demo.ts +22 -0
  43. package/src/commands/deps.ts +6 -0
  44. package/src/commands/driver.ts +28 -2
  45. package/src/commands/gov.ts +52 -18
  46. package/src/commands/intake.ts +17 -0
  47. package/src/commands/labels.ts +38 -5
  48. package/src/commands/pr.ts +160 -43
  49. package/src/commands/records.ts +8 -0
  50. package/src/commands/secrets.ts +6 -0
  51. package/src/commands/sessions.ts +8 -0
  52. package/src/commands/tasks.ts +52 -0
  53. package/src/commands/teach.ts +13 -0
  54. package/src/commands/upstream.ts +25 -1
  55. package/src/commands/worktrees.ts +5 -0
  56. package/src/context/audit.ts +22 -4
  57. package/src/context/folders.ts +1 -1
  58. package/src/context/shape-gated.ts +4 -2
  59. package/src/counts/scan.ts +1 -1
  60. package/src/design/components.ts +1 -1
  61. package/src/design/document.ts +1 -1
  62. package/src/design/tokens.ts +1 -1
  63. package/src/gate/boundaries.ts +4 -1
  64. package/src/gate/measures.ts +1 -1
  65. package/src/gate/stages.ts +7 -7
  66. package/src/git/env.ts +6 -0
  67. package/src/markdown/scope.ts +5 -17
  68. package/src/pr/lift.ts +153 -19
  69. package/src/pr/painted.ts +87 -0
  70. package/src/roots/record.ts +18 -1
  71. package/src/sandbox/census.ts +1 -1
  72. package/src/sandbox/headless/run.ts +3 -2
  73. package/src/sandbox/headless/watch.ts +3 -4
  74. package/src/slides/convert/master.ts +3 -0
  75. package/src/sync/format.ts +46 -0
  76. package/src/sync/stamp.ts +6 -0
  77. package/tooling/astro/reference.md +2 -2
  78. package/tooling/base/reference.md +1 -1
  79. package/tooling/go/reference.md +1 -1
  80. package/tooling/nextjs/reference.md +1 -1
  81. package/tooling/php/reference.md +1 -1
  82. package/tooling/python/reference.md +1 -1
  83. package/tooling/vite-react/reference.md +1 -1
  84. package/tooling/web/reference.md +1 -1
  85. package/docs/agents/canvas.md +0 -86
  86. package/docs/agents/capture.md +0 -65
  87. package/docs/agents/census.md +0 -23
  88. package/docs/agents/comments.md +0 -34
  89. package/docs/agents/context-audit-checks.md +0 -108
  90. package/docs/agents/context-classify.md +0 -101
  91. package/docs/agents/counts.md +0 -74
  92. package/docs/agents/demo.md +0 -140
  93. package/docs/agents/driver.md +0 -103
  94. package/docs/agents/gate.md +0 -90
  95. package/docs/agents/hooks.md +0 -78
  96. package/docs/agents/intake.md +0 -81
  97. package/docs/agents/key-changes.md +0 -116
  98. package/docs/agents/label-coverage.md +0 -86
  99. package/docs/agents/markdown-audit-density.md +0 -39
  100. package/docs/agents/markdown-audit-weight.md +0 -83
  101. package/docs/agents/pr-evidence-layout.md +0 -70
  102. package/docs/agents/pr-evidence.md +0 -273
  103. package/docs/agents/pr-frames.md +0 -131
  104. package/docs/agents/pr-lift.md +0 -132
  105. package/docs/agents/pr-local.md +0 -111
  106. package/docs/agents/pr-preview.md +0 -155
  107. package/docs/agents/pr-reads.md +0 -111
  108. package/docs/agents/pr-tick.md +0 -72
  109. package/docs/agents/records-push.md +0 -61
  110. package/docs/agents/records-stale.md +0 -40
  111. package/docs/agents/records-validate.md +0 -57
  112. package/docs/agents/restated.md +0 -83
  113. package/docs/agents/routing.md +0 -61
  114. package/docs/agents/rule-citations.md +0 -90
  115. package/docs/agents/sandbox.md +0 -126
  116. package/docs/agents/sessions.md +0 -128
  117. package/docs/agents/skills-audit.md +0 -120
  118. package/docs/agents/skills-reach.md +0 -64
  119. package/docs/agents/slides.md +0 -176
  120. package/docs/agents/state-scoped-risk.md +0 -105
  121. package/docs/agents/superseded.md +0 -85
  122. package/docs/agents/tasks-archive.md +0 -83
  123. package/docs/agents/tasks-plans.md +0 -152
  124. package/docs/agents/tasks-validate.md +0 -133
  125. package/docs/agents/tasks.md +0 -123
  126. package/docs/agents/teach-authoring.md +0 -118
  127. package/docs/agents/teach.md +0 -157
  128. package/docs/agents/test-order.md +0 -58
  129. package/docs/agents/upstream.md +0 -94
  130. package/docs/agents/worktrees.md +0 -118
  131. package/docs/target/standards-moved.md +0 -34
@@ -1,94 +0,0 @@
1
- ---
2
- title: Upstream
3
- description: The fetch, catalog, due, and advance verbs that read Claude Code releases against the toolkit, the cursor record, and each refusal reason
4
- ---
5
-
6
- # Upstream
7
-
8
- `canon upstream` reads the Claude Code release feed from a stored cursor and lists canon's own mechanisms beside it, so a triage can match a release line to something canon does. The verbs ship in the published CLI as `canon gate` and `canon sandbox` do, and only this repository has the skill that drives them. A target has no use for them.
9
-
10
- Run them as `bun src/cli.ts upstream ...` from this repository's root. The global `canon` resolves to the installed package, which lacks the verbs until a release ships them.
11
-
12
- ## Verbs
13
-
14
- | Verb | Behavior |
15
- | ----------------------------------- | ---------------------------------------------------------------------------- |
16
- | `fetch [--since <version>]` | List the release lines since the cursor, with the mechanical noise dropped |
17
- | `catalog` | List the skills, verbs, hooks, and gate stages the tree holds, one line each |
18
- | `due` | Say whether a digest is due, from the cursor and the installed version |
19
- | `advance <version> --intake <slug>` | Move the cursor to a version, and store the current `llms.txt` beside it |
20
-
21
- Every verb takes `--root <path>` for the repository to read and `--json` for a record on stdout. `fetch` and `catalog` write nothing, and `due` writes only its day cache. `advance` is the only writer of the cursor, and the digest skill runs it after the findings are filed, so a run that dies midway reads the same range next time.
22
-
23
- ## fetch
24
-
25
- ```bash
26
- bun src/cli.ts upstream fetch --json
27
- bun src/cli.ts upstream fetch --since 2.1.256 --json
28
- ```
29
-
30
- The range runs from the cursor, or from `--since` when given, to the newest release. The walk stops at the first release whose version is not newer than the cursor, so a cursor naming a version the feed never carried still bounds the range, and a range crossing a page boundary is read whole.
31
-
32
- A line survives when it opens with `Added`, `Changed`, `Removed`, `Improved`, or `Deprecated` and carries none of the dropped surfaces: `[VSCode]`, `[Claude Tag]`, `[Code Review]`, `Windows:`, `Self-hosted`, the apps gateway, managed settings, OpenTelemetry, Bedrock, Vertex, and screen reader. A nested bullet and a `*` bullet are read as well as a `-` one.
33
-
34
- Without `--json`, stdout carries one `version<TAB>text` row per line. With it, stdout carries one record:
35
-
36
- | Field | Holds |
37
- | ---------- | -------------------------------------------------------------------------- |
38
- | `from` | The cursor version the range starts after |
39
- | `to` | The newest release version, or `from` when nothing is newer |
40
- | `releases` | How many releases the range spans |
41
- | `lines` | Each kept line as `version`, `date`, `text`, and `identifiers` |
42
- | `llms` | `added` and `removed` lines of `llms.txt` against the stored copy, or null |
43
-
44
- An identifier is a backticked name on a `Changed`, `Removed`, or `Deprecated` line that holds a dash, a slash, a dot, or a capital. It carries up to three tracked files naming it, and one with no hit is left out. `llms` is null when the page could not be fetched, and every line reads as added until `advance` has stored a first copy.
45
-
46
- The request sends `GH_TOKEN` or `GITHUB_TOKEN` when either is set. Unauthenticated, GitHub allows 60 requests an hour, and a range takes about three.
47
-
48
- ## catalog
49
-
50
- Prints a heading per section and a line per entry. With `--json` it prints one record whose fields are `skills`, `internalSkills`, `verbs`, `hooks`, `gate`, and `gaps`, each entry as `name` and `text`. A skill folder with no `SKILL.md` or no description appears in `gaps` rather than dropping out. A hook's text is the first comment line after its shebang.
51
-
52
- ## due
53
-
54
- ```bash
55
- bun src/cli.ts upstream due --json
56
- ```
57
-
58
- Answers whether a digest is worth running now. It exits 0 whether or not one is due, so branch on the record rather than the exit. The installed version comes from `claude --version`, and the cursor from the main worktree root.
59
-
60
- | Reason | `due` | Meaning |
61
- | ----------------- | ------- | -------------------------------------------------------------------------- |
62
- | `no-cursor` | `true` | No digest has been run, so a first run is prompted |
63
- | `week` | `true` | The cursor is seven or more days old and the install is ahead of it |
64
- | `vocabulary` | `true` | An `Added` line in the gap names a plugin, skill, hook, worktree, or so on |
65
- | `current` | `false` | The install is at or below the cursor, as after a downgrade |
66
- | `recent` | `false` | The cursor is under a week old and no line in the gap matches |
67
- | `unknown-version` | `false` | `claude --version` could not be read |
68
-
69
- The record is `due`, `reason`, `releases`, `installed`, and `cursor`. `releases` counts the releases in the gap and is `null` when the feed was not read, so a `week` result can arrive without a count.
70
-
71
- The gap is read from GitHub only when the install is ahead of the cursor, and the result is cached for a day under the scratch folder at `.canon/tmp/upstream-due/check.json`. A failed read is cached too, so a rate limit hit by one session is not retried by the next. Nothing here moves the cursor.
72
-
73
- The `.claude/hooks/upstream-due.sh` hook runs the verb at an attended session start and shows the operator one line when it is due. It stays silent in a background session, on a resume, a clear, or a compaction, and on any failure.
74
-
75
- ## advance
76
-
77
- Writes `cursor.json` and the fetched `llms.txt` under the upstream record folder at the main worktree root, each through a temp file and a rename. `--no-llms` keeps the stored `llms.txt` and fetches nothing. The record is `version`, `intake`, `advanced`, and `llms`, which reads `stored` when a fresh copy was written and `kept` when the stored one stayed, whether by `--no-llms` or because the fetch failed.
78
-
79
- The cursor file holds `version`, `date`, and `intake`. The folder is a backed record folder, so `canon records push` carries it.
80
-
81
- ## Refusals
82
-
83
- A refusal exits 1, prints the reason on stderr, and with `--json` adds `reason` and `message` to stdout. Branch on `reason`.
84
-
85
- | Reason | Verb | Meaning |
86
- | ------------------- | --------- | ------------------------------------------------------------------- |
87
- | `no-cursor` | `fetch` | No cursor is stored and no `--since` was given. Pass the flag. |
88
- | `bad-since` | `fetch` | `--since` is not a dotted version |
89
- | `cursor-missing` | `fetch` | Every release the feed returned is newer than the cursor |
90
- | `rate-limited` | `fetch` | GitHub refused the request. Set `GH_TOKEN` or `GITHUB_TOKEN`. |
91
- | `network` | `fetch` | The feed could not be reached |
92
- | `http` | `fetch` | GitHub answered with an error status |
93
- | `invalid-version` | `advance` | The version is not a dotted number |
94
- | `older-than-cursor` | `advance` | The version is older than the stored cursor, which never moves back |
@@ -1,118 +0,0 @@
1
- ---
2
- title: Worktrees
3
- description: Reporting which worktrees are reclaimable, removing the ones that are, the hidden verb that clears a stranded bare flag, the record a hook reads back, why the reading keys on the pull request rather than on git ancestry, the refusals it names, and the two removal shapes
4
- ---
5
-
6
- # Worktrees
7
-
8
- ## List
9
-
10
- `canon worktrees list` reports every worktree of the current repository with a reclaim verdict and the reason behind it.
11
-
12
- ```bash
13
- canon worktrees list
14
- canon worktrees list --json
15
- ```
16
-
17
- | Option | Behavior |
18
- | -------- | --------------------------------------- |
19
- | `--json` | Add a machine-readable record on stdout |
20
-
21
- It reads and removes nothing. The question it answers is which worktrees the work has finished with, which nothing in the loop asks: a worktree is created per feature and removed by nobody, so directories left by shipped work accumulate for the life of the checkout.
22
-
23
- Exit codes: `0` every worktree was read, `1` refused. The refusal carries a `reason` of `gh-missing`, `gh-failed`, or `sessions-unreadable`.
24
-
25
- An exit code says nothing about a call made from a session, since a shell profile may wrap the binary in a function taking its status from a later command. Read the record's `reason` rather than the exit when a skill consumes this.
26
-
27
- ## Repair the bare flag
28
-
29
- `canon worktrees repair-bare-flag` clears a `core.bare` flag that Claude Code's worktree entry left set in the shared config. It is hidden, so no help listing shows it, because its one caller is a hook rather than a person.
30
-
31
- ```bash
32
- canon worktrees repair-bare-flag --root <path> --json
33
- ```
34
-
35
- | Option | Behavior |
36
- | --------------- | ------------------------------------- |
37
- | `--root <path>` | Repository to repair, default the cwd |
38
- | `--json` | Print the record on stdout |
39
-
40
- `--json` writes `{repaired, reason, message}` on stdout, once, whether or not anything was written. `reason` is `flag-unset`, `common-dir-unreadable`, `genuinely-bare`, or `write-failed` when `repaired` is false. `message` carries text when the flag is repaired and when the write failed, and is null on the three quiet skips. A `write-failed` record means the flag is still set, which a lock file or a read-only config causes. A repository whose common dir is not named `.git` keeps its flag. The exit code is always `0`, so a hook never fails a tool call. Without `--json`, a record carrying a message prints it on stderr and any other prints nothing.
41
-
42
- ## Reclaim
43
-
44
- `canon worktrees reclaim` removes every worktree the reading above called reclaimable, and the branch behind each one.
45
-
46
- ```bash
47
- canon worktrees reclaim --dry-run
48
- canon worktrees reclaim
49
- canon worktrees reclaim --json
50
- ```
51
-
52
- | Option | Behavior |
53
- | ----------- | ------------------------------------------- |
54
- | `--dry-run` | Report what would be removed without acting |
55
- | `--json` | Add a machine-readable record on stdout |
56
-
57
- Removal sits on the default path rather than behind an apply flag. Report-only is what the `list` verb already did, and what it produced was a hand cleanup: eight directories deleted outside git in one afternoon, each leaving the registration and the branch that `git worktree remove` would have taken with it. A flag a reader has to remember is one nobody passes the first time, and the first time is when the directories are still there.
58
-
59
- Each entry unlocks, removes, then deletes its branch, and the sequence is the same whether the directory still stands or is already gone. A run carrying a directory that is gone sweeps stale registrations once between the removals and the branch deletes, since a branch git still reads as held by a worktree cannot be deleted. That sweep is the one step reaching past the reclaimable set, because git takes no path to scope it: it clears the bookkeeping for every directory already gone, refused entries included, and deletes no branch and no directory of its own.
60
-
61
- Exit codes: `0` every reclaimable worktree was removed or there were none, `1` refused or a removal failed. A reading that could not reach the merge state refuses every entry rather than falling back to a default, since that state is the one input deciding whether a branch is safe to delete.
62
-
63
- ### The record
64
-
65
- `--json` writes `{reason, detail, dryRun, reclaimable, removed, failed, pruned, outcomes}` on stdout. `reason` is null unless the whole reading refused, `reclaimable` counts what the verdicts named, `removed` and `failed` split the outcomes, and `pruned` says whether the stale-registration sweep ran. A dry run and a reading that found nothing both report `removed` as 0 and differ on `reclaimable`, which separates a quiet repository from a run asked not to act.
66
-
67
- Field order is part of the contract. A shell reads this record with a pattern rather than a parser, so `reason` sits ahead of the free-text `detail`, and the scalar counts sit ahead of `outcomes`, whose per-entry `failedAt` and boolean `removed` match neither digit pattern. Read the record's fields rather than the exit when a skill or a hook consumes this, for the reason the `list` section above gives.
68
-
69
- ## What calls it
70
-
71
- `canon hooks post-merge`, which `.husky/post-merge` calls, runs `canon worktrees reclaim --json` on every merge, between the records push and the upgrade, so a merged branch's worktree goes without a person remembering. `CANON_SKIP_RECLAIM=1` turns that step off. `hooks.md` covers the verb.
72
-
73
- That call carries no `--root` and runs from the hook's own working directory, unlike the two steps before it. Git runs a hook from the top level of the worktree the pull happened in, and the verb reads its own working directory to refuse that worktree as `current-worktree`, so a root argument would turn the running worktree into an ordinary candidate and let a pull inside a linked worktree delete the ground under itself.
74
-
75
- ## What makes a worktree reclaimable
76
-
77
- All three hold: its branch has a merged pull request, its working tree is clean, and no live session holds the directory. Each alone has a case where removal loses something, so `refusals` names every failing condition rather than the first.
78
-
79
- | Refusal | What it means |
80
- | ------------------------ | ------------------------------------------------------- |
81
- | `main-worktree` | The main worktree, which is never reclaimable |
82
- | `current-worktree` | The worktree the command is running in |
83
- | `detached-head` | No branch, so nothing names a pull request |
84
- | `no-merged-pull-request` | Its branch has no merged pull request |
85
- | `uncommitted-changes` | Work no history stands behind, untracked files included |
86
- | `unreadable-worktree` | The working tree status could not be read |
87
- | `held-by-session` | A live session still holds the directory |
88
-
89
- Uncommitted work is the condition that gates rather than warns. A worktree is gitignored scratch with no history behind it, so a directory removed with unstaged changes takes them somewhere nothing recovers.
90
-
91
- A directory already deleted by hand is clean rather than unreadable, so the merged and session checks decide it like any other worktree. Reading the two together is what reported eight reclaimable worktrees as unreadable, since `git status` exits the same way for a path that is gone and one it could not read.
92
-
93
- The worktree the command runs in refuses on position rather than on state. Git removes the directory a caller is standing in without complaint, and every later call scoped to that directory then fails, so a run that took it would leave the branches after it undeleted and report the failures against the worktrees rather than the cause.
94
-
95
- ## Why the pull request rather than git ancestry
96
-
97
- Ancestry is the reading anyone reaches for and it fails in both directions on a repository that squash merges. A merged branch is never an ancestor of the trunk there, so `git merge-base --is-ancestor` calls shipped work unmerged. Measured against nine worktrees, it named five of six lingering branches unmerged, each of which had a merged pull request, reporting them 2 to 6 commits ahead.
98
-
99
- The one branch it did call merged was the one that had to stay. That branch had no pull request at all, sat at a release commit, and its worktree held finished work outside any commit. So the cheap test kept every directory safe to remove and offered the only one that was not.
100
-
101
- The read is one `gh pr list --state merged` for the whole repository rather than one call per worktree, which would be a network round trip inside a loop. It covers the most recent 200 merges, so a worktree older than that reads as having none and is refused, which fails in the direction that keeps a directory.
102
-
103
- ## Two removal shapes
104
-
105
- `route` names which one applies rather than choosing it, since picking wrong strands state.
106
-
107
- - `session`: a live session holds the directory, and the `sessions` field carries `{name, kind, id}` per holder rather than a bare name, since `claude rm <id>` takes the id and never the name. `kind` reads `bg` or `interactive` off this repository's session registry.
108
- - A resolved background holder: `id` carries the value `claude agents --json` reports, so `claude rm <id>` is the command to run. Its own report is not reliable: two runs under matched conditions on 2026-09-03 both printed `kept`, and one of them had already removed the worktree, so read `canon worktrees list` again afterward rather than trust what the command printed.
109
- - An unresolved background holder: `id` is `null` because the binary is missing, fails, or has not reported that pid yet, so its id has to come from a manual read of `claude agents --json` instead.
110
- - An interactive holder: `id` is always `null`, since no id exists for one at all, and nothing removes it until a person closes its terminal.
111
- - `worktree`: the session has ended, and `canon worktrees reclaim` is what runs the remove and the branch delete.
112
- - `null`: the main worktree, which no removal shape reaches.
113
-
114
- A held worktree is refused rather than reported reclaimable, and its route is reported for whoever decides to act on it. Deleting a directory underneath a live session is the case that has to refuse, and an interactive holder is the one shape inside that refusal with no removal route at all.
115
-
116
- ## What an unreadable input does
117
-
118
- It refuses the whole report rather than producing verdicts around the gap. An absent merge state and a branch with no merged pull request return the same empty answer, and so do an absent session roster and a worktree nobody holds. Reporting the second when it was the first is a false clean, and here that ends in a removal rather than in a warning.
@@ -1,34 +0,0 @@
1
- ---
2
- title: Target standards moved
3
- description: Which skill owns each standard the retired standards verb used to serve, for a project that still calls it
4
- category: Agent surface
5
- ---
6
-
7
- # Target standards moved
8
-
9
- `canon standards <name>` is gone, and with it the name map that sent an old call to a new home. A rule, skill, or `CLAUDE.md` of your own that still runs it now gets commander's too-many-arguments error and no content, so search the project for the call and replace it. The surrounding step is in [target migrations](migrations.md). <!-- canon-allow-reference: says the verb is gone -->
10
-
11
- Each standard now lives at `references/<name>.md` in the skill that owns it. Load that skill and read the reference it names:
12
-
13
- | Skill | Standards |
14
- | ----------------- | ------------------------------------------------------------- |
15
- | `task-board` | `board`, `tasks`, `tasks-decline` |
16
- | `context-fold` | `context` |
17
- | `canvas-board` | `canvas`, `design` |
18
- | `docs-sync` | `docs`, `readme` |
19
- | `draft-figure` | `figures`, `mermaid` |
20
- | `create-rule` | `rule` |
21
- | `create-skill` | `skill`, `skill-paths`, `skill-practice`, `skill-requirement` |
22
- | `git-branch` | `branch`, `slug` |
23
- | `git-commit` | `commit`, `versioning` |
24
- | `git-pr` | `pr`, `publish` |
25
- | `markdown-craft` | `markdown` |
26
- | `teach-workspace` | `glossary`, `teach` |
27
- | `plan-groundwork` | `groundwork`, `groundwork-spikes` |
28
- | `plan-intake` | `intake` |
29
- | `plan-feature` | `plan`, `plan-lifecycle` |
30
- | `draft-ready` | `ready` |
31
- | `draft-doc` | `requirements`, `wiki` |
32
- | `session-map` | `session` |
33
-
34
- One name moved under a new filename. `standard`, the shape of a standard itself, became `skill-reference.md` in `create-skill`, since the toolkit no longer ships a standards folder to hold one.