@zigrivers/scaffold 2.38.1 → 2.44.2

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 (201) hide show
  1. package/README.md +10 -7
  2. package/dist/cli/commands/build.js +4 -4
  3. package/dist/cli/commands/build.js.map +1 -1
  4. package/dist/cli/commands/check.test.js +11 -8
  5. package/dist/cli/commands/check.test.js.map +1 -1
  6. package/dist/cli/commands/complete.d.ts.map +1 -1
  7. package/dist/cli/commands/complete.js +2 -1
  8. package/dist/cli/commands/complete.js.map +1 -1
  9. package/dist/cli/commands/complete.test.js +4 -1
  10. package/dist/cli/commands/complete.test.js.map +1 -1
  11. package/dist/cli/commands/dashboard.js +4 -4
  12. package/dist/cli/commands/dashboard.js.map +1 -1
  13. package/dist/cli/commands/knowledge.js +2 -2
  14. package/dist/cli/commands/knowledge.js.map +1 -1
  15. package/dist/cli/commands/knowledge.test.js +5 -12
  16. package/dist/cli/commands/knowledge.test.js.map +1 -1
  17. package/dist/cli/commands/list.d.ts +1 -1
  18. package/dist/cli/commands/list.d.ts.map +1 -1
  19. package/dist/cli/commands/list.js +84 -3
  20. package/dist/cli/commands/list.js.map +1 -1
  21. package/dist/cli/commands/list.test.js +82 -0
  22. package/dist/cli/commands/list.test.js.map +1 -1
  23. package/dist/cli/commands/next.test.js +4 -1
  24. package/dist/cli/commands/next.test.js.map +1 -1
  25. package/dist/cli/commands/reset.d.ts.map +1 -1
  26. package/dist/cli/commands/reset.js +5 -2
  27. package/dist/cli/commands/reset.js.map +1 -1
  28. package/dist/cli/commands/reset.test.js +4 -1
  29. package/dist/cli/commands/reset.test.js.map +1 -1
  30. package/dist/cli/commands/rework.d.ts.map +1 -1
  31. package/dist/cli/commands/rework.js +3 -2
  32. package/dist/cli/commands/rework.js.map +1 -1
  33. package/dist/cli/commands/run.d.ts.map +1 -1
  34. package/dist/cli/commands/run.js +28 -13
  35. package/dist/cli/commands/run.js.map +1 -1
  36. package/dist/cli/commands/run.test.js +1 -1
  37. package/dist/cli/commands/run.test.js.map +1 -1
  38. package/dist/cli/commands/skip.d.ts.map +1 -1
  39. package/dist/cli/commands/skip.js +2 -1
  40. package/dist/cli/commands/skip.js.map +1 -1
  41. package/dist/cli/commands/skip.test.js +4 -1
  42. package/dist/cli/commands/skip.test.js.map +1 -1
  43. package/dist/cli/commands/status.d.ts.map +1 -1
  44. package/dist/cli/commands/status.js +88 -4
  45. package/dist/cli/commands/status.js.map +1 -1
  46. package/dist/cli/commands/version.d.ts.map +1 -1
  47. package/dist/cli/commands/version.js +19 -3
  48. package/dist/cli/commands/version.js.map +1 -1
  49. package/dist/cli/commands/version.test.js +41 -0
  50. package/dist/cli/commands/version.test.js.map +1 -1
  51. package/dist/cli/output/context.test.js +14 -13
  52. package/dist/cli/output/context.test.js.map +1 -1
  53. package/dist/cli/output/interactive.js +4 -4
  54. package/dist/cli/output/json.d.ts +1 -0
  55. package/dist/cli/output/json.d.ts.map +1 -1
  56. package/dist/cli/output/json.js +14 -1
  57. package/dist/cli/output/json.js.map +1 -1
  58. package/dist/config/loader.d.ts.map +1 -1
  59. package/dist/config/loader.js +10 -3
  60. package/dist/config/loader.js.map +1 -1
  61. package/dist/config/loader.test.js +28 -0
  62. package/dist/config/loader.test.js.map +1 -1
  63. package/dist/core/assembly/engine.d.ts.map +1 -1
  64. package/dist/core/assembly/engine.js +6 -1
  65. package/dist/core/assembly/engine.js.map +1 -1
  66. package/dist/e2e/init.test.js +3 -0
  67. package/dist/e2e/init.test.js.map +1 -1
  68. package/dist/index.js +2 -1
  69. package/dist/index.js.map +1 -1
  70. package/dist/project/adopt.test.js +3 -0
  71. package/dist/project/adopt.test.js.map +1 -1
  72. package/dist/project/claude-md.d.ts.map +1 -1
  73. package/dist/project/claude-md.js +2 -1
  74. package/dist/project/claude-md.js.map +1 -1
  75. package/dist/project/detector.js +3 -3
  76. package/dist/project/detector.js.map +1 -1
  77. package/dist/project/signals.d.ts +1 -0
  78. package/dist/project/signals.d.ts.map +1 -1
  79. package/dist/state/decision-logger.d.ts.map +1 -1
  80. package/dist/state/decision-logger.js +7 -4
  81. package/dist/state/decision-logger.js.map +1 -1
  82. package/dist/state/lock-manager.js +1 -1
  83. package/dist/state/lock-manager.js.map +1 -1
  84. package/dist/state/lock-manager.test.js +27 -3
  85. package/dist/state/lock-manager.test.js.map +1 -1
  86. package/dist/state/state-manager.d.ts.map +1 -1
  87. package/dist/state/state-manager.js +6 -0
  88. package/dist/state/state-manager.js.map +1 -1
  89. package/dist/state/state-manager.test.js +7 -0
  90. package/dist/state/state-manager.test.js.map +1 -1
  91. package/dist/types/assembly.d.ts +2 -0
  92. package/dist/types/assembly.d.ts.map +1 -1
  93. package/dist/utils/eligible.d.ts +8 -0
  94. package/dist/utils/eligible.d.ts.map +1 -0
  95. package/dist/utils/eligible.js +36 -0
  96. package/dist/utils/eligible.js.map +1 -0
  97. package/dist/validation/config-validator.test.js +15 -13
  98. package/dist/validation/config-validator.test.js.map +1 -1
  99. package/dist/validation/index.test.js +1 -1
  100. package/dist/wizard/wizard.d.ts.map +1 -1
  101. package/dist/wizard/wizard.js +1 -0
  102. package/dist/wizard/wizard.js.map +1 -1
  103. package/dist/wizard/wizard.test.js +2 -0
  104. package/dist/wizard/wizard.test.js.map +1 -1
  105. package/knowledge/core/automated-review-tooling.md +4 -4
  106. package/knowledge/core/eval-craft.md +44 -0
  107. package/knowledge/core/multi-model-review-dispatch.md +8 -0
  108. package/knowledge/core/system-architecture.md +39 -0
  109. package/knowledge/core/task-decomposition.md +53 -0
  110. package/knowledge/core/testing-strategy.md +160 -0
  111. package/knowledge/finalization/implementation-playbook.md +24 -7
  112. package/knowledge/product/prd-craft.md +41 -0
  113. package/knowledge/review/review-adr.md +1 -1
  114. package/knowledge/review/review-api-design.md +1 -1
  115. package/knowledge/review/review-database-design.md +1 -1
  116. package/knowledge/review/review-domain-modeling.md +1 -1
  117. package/knowledge/review/review-implementation-tasks.md +1 -1
  118. package/knowledge/review/review-methodology.md +1 -1
  119. package/knowledge/review/review-operations.md +1 -1
  120. package/knowledge/review/review-prd.md +1 -1
  121. package/knowledge/review/review-security.md +1 -1
  122. package/knowledge/review/review-system-architecture.md +1 -1
  123. package/knowledge/review/review-testing-strategy.md +1 -1
  124. package/knowledge/review/review-user-stories.md +1 -1
  125. package/knowledge/review/review-ux-specification.md +1 -1
  126. package/knowledge/review/review-vision.md +1 -1
  127. package/knowledge/tools/post-implementation-review-methodology.md +107 -0
  128. package/knowledge/validation/critical-path-analysis.md +13 -0
  129. package/knowledge/validation/implementability-review.md +14 -0
  130. package/package.json +2 -1
  131. package/pipeline/architecture/review-architecture.md +8 -5
  132. package/pipeline/architecture/system-architecture.md +9 -3
  133. package/pipeline/build/multi-agent-resume.md +21 -7
  134. package/pipeline/build/multi-agent-start.md +22 -7
  135. package/pipeline/build/new-enhancement.md +20 -12
  136. package/pipeline/build/quick-task.md +18 -11
  137. package/pipeline/build/single-agent-resume.md +20 -6
  138. package/pipeline/build/single-agent-start.md +24 -8
  139. package/pipeline/consolidation/claude-md-optimization.md +8 -4
  140. package/pipeline/consolidation/workflow-audit.md +9 -5
  141. package/pipeline/decisions/adrs.md +7 -3
  142. package/pipeline/decisions/review-adrs.md +8 -5
  143. package/pipeline/environment/ai-memory-setup.md +6 -2
  144. package/pipeline/environment/automated-pr-review.md +79 -12
  145. package/pipeline/environment/design-system.md +9 -6
  146. package/pipeline/environment/dev-env-setup.md +8 -5
  147. package/pipeline/environment/git-workflow.md +16 -13
  148. package/pipeline/finalization/apply-fixes-and-freeze.md +10 -5
  149. package/pipeline/finalization/developer-onboarding-guide.md +10 -3
  150. package/pipeline/finalization/implementation-playbook.md +13 -4
  151. package/pipeline/foundation/beads.md +8 -5
  152. package/pipeline/foundation/coding-standards.md +13 -10
  153. package/pipeline/foundation/project-structure.md +16 -13
  154. package/pipeline/foundation/tdd.md +9 -4
  155. package/pipeline/foundation/tech-stack.md +7 -5
  156. package/pipeline/integration/add-e2e-testing.md +12 -8
  157. package/pipeline/modeling/domain-modeling.md +9 -7
  158. package/pipeline/modeling/review-domain-modeling.md +8 -6
  159. package/pipeline/parity/platform-parity-review.md +9 -6
  160. package/pipeline/planning/implementation-plan-review.md +10 -7
  161. package/pipeline/planning/implementation-plan.md +41 -9
  162. package/pipeline/pre/create-prd.md +7 -4
  163. package/pipeline/pre/innovate-prd.md +12 -8
  164. package/pipeline/pre/innovate-user-stories.md +10 -7
  165. package/pipeline/pre/review-prd.md +12 -10
  166. package/pipeline/pre/review-user-stories.md +12 -9
  167. package/pipeline/pre/user-stories.md +7 -4
  168. package/pipeline/quality/create-evals.md +6 -3
  169. package/pipeline/quality/operations.md +7 -3
  170. package/pipeline/quality/review-operations.md +12 -5
  171. package/pipeline/quality/review-security.md +11 -6
  172. package/pipeline/quality/review-testing.md +11 -6
  173. package/pipeline/quality/security.md +6 -2
  174. package/pipeline/quality/story-tests.md +14 -9
  175. package/pipeline/specification/api-contracts.md +9 -3
  176. package/pipeline/specification/database-schema.md +8 -2
  177. package/pipeline/specification/review-api.md +10 -4
  178. package/pipeline/specification/review-database.md +8 -3
  179. package/pipeline/specification/review-ux.md +9 -3
  180. package/pipeline/specification/ux-spec.md +9 -4
  181. package/pipeline/validation/critical-path-walkthrough.md +10 -5
  182. package/pipeline/validation/cross-phase-consistency.md +9 -4
  183. package/pipeline/validation/decision-completeness.md +8 -3
  184. package/pipeline/validation/dependency-graph-validation.md +8 -3
  185. package/pipeline/validation/implementability-dry-run.md +9 -5
  186. package/pipeline/validation/scope-creep-check.md +11 -6
  187. package/pipeline/validation/traceability-matrix.md +10 -5
  188. package/pipeline/vision/create-vision.md +7 -4
  189. package/pipeline/vision/innovate-vision.md +11 -8
  190. package/pipeline/vision/review-vision.md +15 -12
  191. package/skills/multi-model-dispatch/SKILL.md +6 -5
  192. package/skills/scaffold-runner/SKILL.md +47 -3
  193. package/tools/dashboard.md +53 -0
  194. package/tools/post-implementation-review.md +655 -0
  195. package/tools/prompt-pipeline.md +160 -0
  196. package/tools/release.md +435 -0
  197. package/tools/review-pr.md +229 -0
  198. package/tools/session-analyzer.md +299 -0
  199. package/tools/update.md +113 -0
  200. package/tools/version-bump.md +290 -0
  201. package/tools/version.md +82 -0
@@ -0,0 +1,290 @@
1
+ ---
2
+ name: version-bump
3
+ description: Bump version and update changelog without tagging or releasing
4
+ phase: null
5
+ order: null
6
+ dependencies: []
7
+ outputs: []
8
+ conditional: null
9
+ stateless: true
10
+ category: tool
11
+ knowledge-base: [version-strategy]
12
+ argument-hint: "<major|minor|patch or --dry-run>"
13
+ ---
14
+
15
+ ## Purpose
16
+
17
+ Bump the project version and update the changelog without tagging, pushing, or
18
+ creating a GitHub release. A lightweight companion to `/scaffold:release` for
19
+ marking development milestones — like completing a set of user stories or
20
+ reaching a pre-release checkpoint.
21
+
22
+ ## Inputs
23
+
24
+ $ARGUMENTS — parsed as:
25
+
26
+ | Argument | Mode |
27
+ |----------|------|
28
+ | _(empty)_ | **Auto** — analyze commits, suggest bump |
29
+ | `major`, `minor`, or `patch` | **Explicit** — skip analysis, use specified bump |
30
+ | `--dry-run` | **Dry Run** — preview only, zero mutations |
31
+
32
+ Combine flags freely (e.g., `minor --dry-run`).
33
+
34
+ ## Expected Outputs
35
+
36
+ - Version files updated to new version
37
+ - `CHANGELOG.md` updated (or created) with grouped commit entries
38
+ - Single commit with message `chore(version): vX.Y.Z`
39
+
40
+ No tags, no push, no GitHub release.
41
+
42
+ ## Instructions
43
+
44
+ ### Phase 0: Project Detection
45
+
46
+ Gather project context before proceeding.
47
+
48
+ #### 0.1 Git State
49
+
50
+ 1. Record the current branch name (`git branch --show-current`).
51
+ 2. Check if the working tree is clean (`git status --porcelain`). If dirty, **warn** (do not block): "Working tree has uncommitted changes. They will not be included in the version bump."
52
+ 3. Fetch tags: `git fetch --tags`.
53
+
54
+ #### 0.2 Version File Detection
55
+
56
+ Scan the project root for version files. For each found file, record the current version:
57
+
58
+ | File | How to Read Version |
59
+ |------|-------------------|
60
+ | `package.json` | `.version` field |
61
+ | `pyproject.toml` | `[project].version` or `[tool.poetry].version` |
62
+ | `Cargo.toml` | `[package].version` |
63
+ | `.claude-plugin/plugin.json` | `.version` field |
64
+ | `pubspec.yaml` | `version:` field |
65
+ | `setup.cfg` | `[metadata].version` |
66
+ | `version.txt` | Entire file contents (trimmed) |
67
+
68
+ #### 0.3 Project Context
69
+
70
+ - Check for `.beads/` directory — enables Beads integration in changelog.
71
+ - Check for existing `CHANGELOG.md`.
72
+ - List existing `v*` tags: `git tag -l 'v*' --sort=-v:refname | head -5`.
73
+
74
+ #### 0.4 Mode Selection
75
+
76
+ Parse `$ARGUMENTS` to determine the mode:
77
+
78
+ | Argument | Mode |
79
+ |----------|------|
80
+ | _(empty)_ | **Auto** — analyze commits, suggest bump |
81
+ | `major`, `minor`, or `patch` | **Explicit** — skip analysis, use specified bump |
82
+ | `--dry-run` | **Dry Run** — preview only, zero mutations |
83
+
84
+ If `--dry-run` is combined with a bump type (e.g., `minor --dry-run`), use both: explicit bump + dry-run mode.
85
+
86
+ #### 0.5 First-Bump Detection
87
+
88
+ If **no** version files are found **and** no `v*` tags exist:
89
+
90
+ 1. Detect project type from manifest files (`package.json`, `Cargo.toml`, `pyproject.toml`, etc.).
91
+ 2. Offer to create the appropriate version file:
92
+ - `package.json` exists but has no `"version"` — add `"version": "0.1.0"` field.
93
+ - Python project — create `version.txt` with `0.1.0`.
94
+ - No manifest — create `version.txt` with `0.1.0`.
95
+ 3. Ask the user: "No version files found. Create `<file>` with version `0.1.0`?" Confirm before proceeding.
96
+
97
+ If **no** `v*` tags exist but version files **do** exist, note the current version — commit analysis will use all commits.
98
+
99
+ ---
100
+
101
+ ### Phase 1: Version Analysis
102
+
103
+ **Skip this phase if:** Explicit mode or first-bump mode (Phase 0.5 just created the version file).
104
+
105
+ #### 1.1 Collect Commits
106
+
107
+ Get commits since the last tag (or all commits if no tags):
108
+
109
+ ```
110
+ git log <last-tag>..HEAD --oneline --no-merges
111
+ ```
112
+
113
+ If no tags exist, use all commits: `git log --oneline --no-merges`.
114
+
115
+ #### 1.2 Parse Conventional Commits
116
+
117
+ Categorize each commit:
118
+
119
+ | Pattern | Bump |
120
+ |---------|------|
121
+ | `feat:` or `feat(scope):` | minor |
122
+ | `fix:` or `fix(scope):` | patch |
123
+ | `BREAKING CHANGE:` in body or `!:` suffix | major |
124
+ | `perf:`, `refactor:`, `docs:`, `chore:`, `style:`, `test:`, `build:`, `ci:` | patch (non-feature change) |
125
+
126
+ Apply the **highest-wins** rule.
127
+
128
+ #### 1.3 Present Analysis
129
+
130
+ Show the user:
131
+
132
+ ```
133
+ Commits since <last-tag>: <count>
134
+ feat: <count> commits
135
+ fix: <count> commits
136
+ other: <count> commits
137
+ BREAKING: <yes/no>
138
+
139
+ Suggested bump: <major|minor|patch>
140
+ <current-version> → <new-version>
141
+ ```
142
+
143
+ Ask: "Confirm this bump, or override? (major / minor / patch / confirm)"
144
+
145
+ If **no conventional commits** were found, fall back: "No conventional commits found. What type of bump? (major / minor / patch)"
146
+
147
+ Record the confirmed version.
148
+
149
+ ---
150
+
151
+ ### Phase 2: Changelog
152
+
153
+ **In dry-run mode:** Display the changelog preview but do not write to disk. Skip to Phase 4 (summary).
154
+
155
+ #### 2.1 Group Commits
156
+
157
+ Group commits since the last tag (or all commits for first bump) by type:
158
+
159
+ ```markdown
160
+ ## [vX.Y.Z] - YYYY-MM-DD
161
+
162
+ ### Added
163
+ - feat: description (commit-hash)
164
+
165
+ ### Fixed
166
+ - fix: description (commit-hash)
167
+
168
+ ### Changed
169
+ - refactor: description (commit-hash)
170
+ - perf: description (commit-hash)
171
+
172
+ ### Other
173
+ - chore: description (commit-hash)
174
+ ```
175
+
176
+ Omit empty sections. Use the commit's first line (without the type prefix) as the description.
177
+
178
+ #### 2.2 Beads Integration (conditional)
179
+
180
+ If `.beads/` exists:
181
+
182
+ 1. Run `bd list --status closed` (or parse `.beads/issues.jsonl` for closed issues).
183
+ 2. Cross-reference closed tasks with the commit range (match task IDs like `BD-xxx` or `scaffold-xxx` in commit messages).
184
+ 3. If matches found, append a section:
185
+
186
+ ```markdown
187
+ ### Completed Tasks
188
+ - [BD-xxx] Task title
189
+ - [BD-yyy] Task title
190
+ ```
191
+
192
+ If `.beads/` does not exist or no tasks match, silently skip.
193
+
194
+ #### 2.3 Write Changelog
195
+
196
+ - If `CHANGELOG.md` exists: prepend the new entry after the `# Changelog` heading (or after any header block).
197
+ - If `CHANGELOG.md` does not exist: create it with:
198
+
199
+ ```markdown
200
+ # Changelog
201
+
202
+ All notable changes to this project will be documented in this file.
203
+
204
+ The format is based on [Keep a Changelog](https://keepachangelog.com/).
205
+
206
+ ## [vX.Y.Z] - YYYY-MM-DD
207
+ ...
208
+ ```
209
+
210
+ ---
211
+
212
+ ### Phase 3: Version Bump & Commit
213
+
214
+ **In dry-run mode:** Show which files would change and the commit message. Skip to Phase 4.
215
+
216
+ #### 3.1 Update Version Files
217
+
218
+ For each version file detected in Phase 0.2, update the version to the new value.
219
+
220
+ #### 3.2 Sync Lock Files
221
+
222
+ If applicable:
223
+ - `package-lock.json` exists — run `npm install --package-lock-only`
224
+ - `Cargo.lock` exists — run `cargo update -w`
225
+
226
+ #### 3.3 Commit
227
+
228
+ Stage all changed files and commit:
229
+
230
+ ```
231
+ git add <changed-files>
232
+ git commit -m "chore(version): vX.Y.Z"
233
+ ```
234
+
235
+ If Beads is configured (`.beads/` exists) and a task is active, include the task ID: `[BD-xxx] chore(version): vX.Y.Z`.
236
+
237
+ ---
238
+
239
+ ### Phase 4: Summary
240
+
241
+ Show the final summary:
242
+
243
+ ```
244
+ Version bump complete!
245
+
246
+ <current-version> → <new-version>
247
+ Version files updated: <list>
248
+ Changelog: CHANGELOG.md updated
249
+
250
+ This was a version bump only — no tags, no push, no GitHub release.
251
+ When ready for a formal release: /scaffold:release current
252
+ ```
253
+
254
+ In dry-run mode:
255
+
256
+ ```
257
+ Dry-run complete — no changes were made.
258
+
259
+ Would bump: <current> → <new>
260
+ Would update: <version-files>
261
+ Would create/update: CHANGELOG.md entry
262
+
263
+ Run /scaffold:version-bump to execute.
264
+ ```
265
+
266
+ ---
267
+
268
+ ## Process Rules
269
+
270
+ 1. **No quality gates** — this is a lightweight milestone marker.
271
+ 2. **No tags, no push, no GitHub release** — use `/scaffold:release` for the full ceremony.
272
+ 3. **Dry-run: zero mutations** — no file writes, no git operations.
273
+ 4. **Beads integration is optional** — silently skip if `.beads/` doesn't exist.
274
+ 5. **Dirty working tree: warn only** — do not block.
275
+ 6. **Commit prefix is `chore(version):`** — distinct from release's `chore(release):`.
276
+
277
+ ## After This Step
278
+
279
+ When this step is complete, tell the user:
280
+
281
+ ---
282
+ **Version bump complete** — version files updated, changelog written, commit created.
283
+
284
+ **Next (if applicable):**
285
+ - When ready for a formal release: Run `/scaffold:release current` — Tag, publish, and create a GitHub release for the version already in files.
286
+ - If follow-up tasks are needed: Run `/scaffold:quick-task` — Create a focused task for post-bump work.
287
+
288
+ **Pipeline reference:** `/scaffold:prompt-pipeline`
289
+
290
+ ---
@@ -0,0 +1,82 @@
1
+ ---
2
+ name: version
3
+ description: Show installed and latest scaffold version
4
+ phase: null
5
+ order: null
6
+ dependencies: []
7
+ outputs: []
8
+ conditional: null
9
+ stateless: true
10
+ category: tool
11
+ knowledge-base: []
12
+ ---
13
+
14
+ ## Purpose
15
+
16
+ Show the installed scaffold version and check if a newer version is available.
17
+ A read-only diagnostic — no files are modified.
18
+
19
+ ## Instructions
20
+
21
+ ### Step 1 — Detect Installed Version
22
+
23
+ Determine the currently installed scaffold version using this detection cascade (stop at the first match):
24
+
25
+ 1. **User-command install:** Run `cat ~/.claude/commands/.scaffold-version 2>/dev/null` to check for the user-command version marker.
26
+ - If the file exists, parse the version from it (format: `1.2.0 (abc1234)` — extract the version number before the space).
27
+
28
+ 2. **Plugin install (clone):** Read the version from the marketplace clone's plugin manifest:
29
+ ```bash
30
+ cat ~/.claude/plugins/marketplaces/zigrivers-scaffold/.claude-plugin/plugin.json 2>/dev/null
31
+ ```
32
+ Extract the `version` field from the JSON.
33
+
34
+ 3. **Plugin install (metadata fallback):** Read the version from Claude Code's plugin registry:
35
+ ```bash
36
+ cat ~/.claude/plugins/installed_plugins.json 2>/dev/null
37
+ ```
38
+ Find the entry for `scaffold@zigrivers-scaffold` and extract its `version` field.
39
+
40
+ 4. **Final fallback:** If none of the above worked, report the installed version as "unknown".
41
+
42
+ Store the detected version for comparison.
43
+
44
+ ### Step 2 — Fetch Latest Version
45
+
46
+ Check the latest available version from GitHub:
47
+
48
+ ```bash
49
+ curl -sf https://raw.githubusercontent.com/zigrivers/scaffold/main/CHANGELOG.md
50
+ ```
51
+
52
+ From the output, extract the version number from the **first** `## [X.Y.Z]` line. This is the latest released version.
53
+
54
+ If the `curl` command fails (non-zero exit, empty output), note that the remote check failed and skip to Step 3.
55
+
56
+ ### Step 3 — Compare and Report
57
+
58
+ Display the results to the user:
59
+
60
+ ---
61
+
62
+ **Scaffold version check**
63
+
64
+ - **Installed:** `<installed version>`
65
+ - **Latest:** `<latest version>` (or "couldn't reach GitHub" if the remote check failed)
66
+ - **Status:** one of:
67
+ - "Up to date" — if installed version matches latest
68
+ - "Update available" — if latest is newer than installed
69
+ - "Couldn't check remote" — if the fetch failed
70
+
71
+ If an update is available, suggest:
72
+
73
+ > Run `/scaffold:update` (or `/user:update` for user-command installs) to update.
74
+
75
+ ---
76
+
77
+ ## Process Rules
78
+
79
+ 1. **Read-only** — do NOT modify any files.
80
+ 2. Run each step in order.
81
+ 3. If the remote check fails, still report the installed version — don't treat it as an error.
82
+ 4. Keep the output concise — no extra explanation beyond the version report.