@zigrivers/scaffold 3.0.1 → 3.0.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.
package/README.md CHANGED
@@ -708,7 +708,7 @@ These are orthogonal to the pipeline — usable at any time, not tied to pipelin
708
708
  | Command | When to Use |
709
709
  |---------|-------------|
710
710
  | `scaffold run version-bump` | Mark a milestone with a version number without the full release ceremony. |
711
- | `scaffold run release` | Ship a new version — changelog, Git tag, and GitHub release. Supports `--dry-run`, `current`, and `rollback`. |
711
+ | `scaffold run release` | Run your project's release ceremony — changelog plus whatever release artifacts that project defines. Supports `--dry-run`, `current`, and `rollback`. |
712
712
  | `scaffold run version` | Show the current Scaffold version. |
713
713
  | `scaffold run update` | Update Scaffold to the latest version. |
714
714
  | `scaffold run dashboard` | Open a visual progress dashboard in your browser. |
@@ -730,7 +730,7 @@ All of these are also available as slash commands (`/scaffold:release`, `/scaffo
730
730
  /scaffold:version-bump
731
731
  ```
732
732
 
733
- Bumps the version number and updates the changelog, but doesn't create tags, push, or publish a GitHub release. Think of it as a checkpoint.
733
+ Bumps the version number and updates the changelog, but doesn't create tags, push, or run the formal release ceremony. Think of it as a checkpoint.
734
734
 
735
735
  ### Creating a release
736
736
 
@@ -742,7 +742,13 @@ Claude analyzes your commits since the last release, suggests whether this is a
742
742
  1. Running your project's tests
743
743
  2. Updating the version number in your project files
744
744
  3. Generating a changelog entry
745
- 4. Creating a Git tag, GitHub release, and npm publish
745
+ 4. Executing the release artifacts your project defines
746
+
747
+ Depending on the target project, that may include a Git tag, hosted release,
748
+ package publish, deployment, registry update, or another project-specific
749
+ release step. `/scaffold:release` is intentionally generic; it should follow
750
+ the target project's own documented workflow rather than assuming npm or GitHub
751
+ for every project.
746
752
 
747
753
  Options: `--dry-run` to preview, `minor`/`major`/`patch` to specify the bump, `current` to release an already-bumped version, `rollback` to undo.
748
754
 
@@ -6,7 +6,9 @@ topics: [release, versioning, changelog, git]
6
6
 
7
7
  # Release Management
8
8
 
9
- Expert knowledge for release engineering including semantic versioning, conventional commit parsing, changelog generation, quality gates, and rollback procedures.
9
+ Expert knowledge for release engineering including semantic versioning,
10
+ conventional commit parsing, changelog generation, quality gates, release
11
+ artifact selection, and rollback procedures.
10
12
 
11
13
  ## Summary
12
14
 
@@ -33,6 +35,14 @@ Follow the [Keep a Changelog](https://keepachangelog.com/) format. Group entries
33
35
 
34
36
  All quality gates must pass before a release. Stop if gates fail unless `--force` is explicitly used.
35
37
 
38
+ ### Project-Specific Release Ceremony
39
+
40
+ `/scaffold:release` is intentionally project-specific. Determine the target
41
+ project's release artifacts from its docs, manifests, CI workflows, and release
42
+ scripts before publishing anything. Some projects only create a tag; others may
43
+ also create hosted releases, publish to registries, deploy services, or update
44
+ secondary channels like Homebrew.
45
+
36
46
  ## Deep Guidance
37
47
 
38
48
  ### Semantic Versioning — Extended
@@ -135,9 +145,12 @@ If any single commit includes a breaking change, the release is a major bump reg
135
145
  - Re-run all gates from the beginning
136
146
  - Only proceed with `--force` if explicitly instructed (and document why)
137
147
 
138
- ### GitHub Release
148
+ ### Hosted Releases And Distribution Artifacts
149
+
150
+ Choose release artifacts based on the target project's documented workflow.
151
+ GitHub release creation is one common example, not the universal default.
139
152
 
140
- **Creating a release:**
153
+ **Example: GitHub-hosted release:**
141
154
 
142
155
  ```bash
143
156
  # Create an annotated tag
@@ -150,6 +163,14 @@ git push origin v1.2.0
150
163
  gh release create v1.2.0 --title "v1.2.0" --notes-file CHANGELOG_EXCERPT.md
151
164
  ```
152
165
 
166
+ **Other common artifacts:**
167
+ - npm publish: `npm publish`
168
+ - PyPI publish: `python -m build && twine upload dist/*`
169
+ - crates.io publish: `cargo publish`
170
+ - deployment or registry update: follow the repo's documented release/deploy command
171
+
172
+ Only run an artifact step when the repository clearly defines it.
173
+
153
174
  **Pre-release versions:**
154
175
  - Use `--prerelease` flag for `v0.x` versions or release candidates
155
176
  - `gh release create v0.5.0 --prerelease --title "v0.5.0 (pre-release)"`
@@ -172,13 +193,18 @@ When a release needs to be reverted:
172
193
 
173
194
  3. **Update version files** back to the previous version
174
195
 
175
- 4. **Create a new patch release** with the rollback:
196
+ 4. **Undo other release artifacts only if the project documents them**:
197
+ - Hosted release page deletion
198
+ - Registry deprecation or unpublish
199
+ - Deployment rollback
200
+
201
+ 5. **Create a new patch release** with the rollback:
176
202
  ```bash
177
203
  git tag -a v1.1.1 -m "Rollback: revert v1.2.0"
178
204
  git push origin v1.1.1
179
205
  ```
180
206
 
181
- 5. **Update the changelog** with a note explaining the rollback
207
+ 6. **Update the changelog** with a note explaining the rollback
182
208
 
183
209
  **Commit message convention for rollbacks:** prefix with `[ROLLBACK]` for easy identification in history.
184
210
 
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@zigrivers/scaffold",
3
- "version": "3.0.1",
3
+ "version": "3.0.2",
4
4
  "description": "AI-powered software project scaffolding pipeline",
5
5
  "type": "module",
6
6
  "keywords": [
@@ -117,7 +117,7 @@ Use this skill ONLY when the user asks about:
117
117
  | `/scaffold:new-enhancement` | Add a feature to an existing project |
118
118
  | `/scaffold:quick-task` | Create a focused task for a bug fix, refactor, or small improvement |
119
119
  | `/scaffold:version-bump` | Bump version and update changelog without tagging or releasing |
120
- | `/scaffold:release` | Create a versioned release with changelog and GitHub release |
120
+ | `/scaffold:release` | Run the target project's release ceremony with changelog generation and project-specific release artifacts |
121
121
  | `/scaffold:prompt-pipeline` | Show the full pipeline reference |
122
122
  | `/scaffold:dashboard` | Open visual pipeline dashboard in browser |
123
123
 
@@ -197,7 +197,7 @@ When the user asks "what tools are available?", "what can I build?", or "show me
197
197
  | Command | When to Use |
198
198
  |---------|-------------|
199
199
  | `scaffold run version-bump` | Mark a milestone with a version number without the full release ceremony |
200
- | `scaffold run release` | Ship a new version — changelog, Git tag, and GitHub release. Supports `--dry-run`, `current`, and `rollback` |
200
+ | `scaffold run release` | Run the target project's release ceremony — changelog plus whatever release artifacts that project defines. Supports `--dry-run`, `current`, and `rollback` |
201
201
  | `scaffold run version` | Show the current scaffold version |
202
202
  | `scaffold run update` | Update scaffold to the latest version |
203
203
  | `scaffold run dashboard` | Open a visual progress dashboard in your browser |
@@ -151,7 +151,7 @@ Print the following reference directly. Do not read any files or run any command
151
151
  | **Resume (single)** | `/scaffold:single-agent-resume` | Resuming single-agent after a break |
152
152
  | **Resume (multi)** | `/scaffold:multi-agent-resume <agent-name>` | Resuming a worktree agent after a break |
153
153
  | **Version Bump** | `/scaffold:version-bump` | Bump version + changelog (no tag/release) |
154
- | **Release** | `/scaffold:release` | Full release with tag + GitHub release |
154
+ | **Release** | `/scaffold:release` | Project-defined release ceremony with changelog + relevant release artifacts |
155
155
  | **Visual Dashboard** | `/scaffold:dashboard` | HTML pipeline overview in browser |
156
156
 
157
157
  ## Process Rules
package/tools/release.md CHANGED
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: release
3
- description: Create a versioned release with changelog and GitHub release
3
+ description: Run the target project's release ceremony
4
4
  phase: null
5
5
  order: null
6
6
  dependencies: []
@@ -14,10 +14,12 @@ argument-hint: "<version or --dry-run or rollback>"
14
14
 
15
15
  ## Purpose
16
16
 
17
- Create a versioned release with changelog and GitHub release. Analyzes
18
- conventional commits to suggest version bumps, generates changelogs from commit
19
- history and Beads tasks, runs quality gates, and publishes a GitHub release.
20
- Supports dry-run mode and rollback.
17
+ Run the target project's release ceremony. Analyze conventional commits to
18
+ suggest version bumps, generate changelogs from commit history and optional
19
+ Beads tasks, run quality gates, and execute the release artifacts that project
20
+ defines. Depending on the project, that may include tags, hosted releases,
21
+ package publishes, deployments, or registry updates. Supports dry-run mode and
22
+ rollback.
21
23
 
22
24
  ## Inputs
23
25
 
@@ -27,7 +29,7 @@ $ARGUMENTS — parsed as:
27
29
  |----------|------|
28
30
  | _(empty)_ | **Standard** — auto-suggest bump, confirm, execute |
29
31
  | `major`, `minor`, or `patch` | **Explicit** — use specified bump, skip suggestion |
30
- | `current` | **Current** — tag and release the version already in files, no bump |
32
+ | `current` | **Current** — use the version already in files, no additional bump |
31
33
  | `--dry-run` | **Dry Run** — all analysis, zero mutations |
32
34
  | `rollback` | **Rollback** — jump directly to the Rollback section |
33
35
 
@@ -37,8 +39,7 @@ Combine flags freely (e.g., `minor --dry-run`).
37
39
 
38
40
  - Version files updated to new version
39
41
  - `CHANGELOG.md` updated with grouped commit entries
40
- - Annotated git tag `vX.Y.Z`
41
- - GitHub release (if `gh` CLI is available)
42
+ - Release artifacts defined by the target project (for example: git tag, hosted release, package publish, deployment)
42
43
  - Single commit with message `chore(release): vX.Y.Z`
43
44
 
44
45
  ## Instructions
@@ -51,7 +52,7 @@ Gather project context before proceeding. Check each item and record findings:
51
52
 
52
53
  1. Confirm the working tree is clean (`git status --porcelain`). If there are uncommitted changes, **stop** and tell the user: "Working tree has uncommitted changes. Commit or stash them before releasing."
53
54
  2. Record the current branch name (`git branch --show-current`).
54
- 3. Check if `gh` CLI is available (`which gh`). If not available, warn: "GitHub CLI (`gh`) not found. Will create tag only no GitHub release. Install with `brew install gh` for full functionality."
55
+ 3. Check whether optional release tooling is available when the project needs it (for example `gh` for GitHub-hosted releases). If a required tool is missing, record that gap and stop before the publish/deploy phase.
55
56
  4. Fetch tags: `git fetch --tags`.
56
57
 
57
58
  #### 0.2 Version File Detection
@@ -68,13 +69,21 @@ Scan the project root for version files. For each found file, record the current
68
69
  | `setup.cfg` | `[metadata].version` |
69
70
  | `version.txt` | Entire file contents (trimmed) |
70
71
 
71
- If **no** version files are found, note this — a tag-only release will be created.
72
+ If **no** version files are found, note this — the release may rely on tags or other non-version-file artifacts only.
72
73
 
73
74
  #### 0.3 Project Context
74
75
 
75
76
  - Check for `.beads/` directory — enables Beads integration in release notes.
76
77
  - Check for existing `CHANGELOG.md`.
77
78
  - List existing `v*` tags: `git tag -l 'v*' --sort=-v:refname | head -5`.
79
+ - Inspect the project's release workflow docs and automation (`README.md`, release docs, manifest scripts, CI workflows) to determine which release artifacts apply. Record whether the project expects any of:
80
+ - version tag
81
+ - hosted release page (GitHub/GitLab/etc.)
82
+ - package publish (npm, PyPI, crates.io, etc.)
83
+ - deployment or registry update
84
+ - a PR-based release lane instead of direct tagging from the current branch
85
+
86
+ If the release process is not clear from the repository, stop and ask the user before publishing or deploying anything.
78
87
 
79
88
  #### 0.4 Mode Selection
80
89
 
@@ -84,7 +93,7 @@ Parse `$ARGUMENTS` to determine the mode:
84
93
  |----------|------|
85
94
  | _(empty)_ | **Standard** — auto-suggest bump, confirm, execute |
86
95
  | `major`, `minor`, or `patch` | **Explicit** — use specified bump, skip suggestion |
87
- | `current` | **Current** — tag and release the version already in files, no bump |
96
+ | `current` | **Current** — use the version already in files, no additional bump |
88
97
  | `--dry-run` | **Dry Run** — all analysis, zero mutations |
89
98
  | `rollback` | **Rollback** — jump directly to the Rollback section |
90
99
 
@@ -250,7 +259,7 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/).
250
259
 
251
260
  #### 3.4 Save Release Notes
252
261
 
253
- Store the generated changelog entry (without the file header) for use as the GitHub release body in Phase 5.
262
+ Store the generated changelog entry (without the file header) for use as the hosted release body in Phase 5 when the target project creates one.
254
263
 
255
264
  ---
256
265
 
@@ -281,46 +290,35 @@ If Beads is configured (`.beads/` exists) and a task is active, include the task
281
290
 
282
291
  ---
283
292
 
284
- ### Phase 5: Tag & Publish
293
+ ### Phase 5: Release Artifacts
285
294
 
286
295
  **In dry-run mode:** Show what would happen. Skip to Phase 6.
287
296
 
288
297
  #### 5.1 Determine Flow
289
298
 
290
- Check the current branch:
299
+ Follow the target project's documented release lane if one exists.
291
300
 
292
- - **`main` or `master`**: Direct flow (tag push release).
293
- - **Any other branch**: PR flow (push create PR — instructions).
301
+ - If the repo docs or automation require a release PR, release branch, or merge-first flow, use that instead of making up a direct tag flow.
302
+ - If the repo provides no release-lane guidance, use this fallback:
303
+ - **`main` or `master`**: direct flow
304
+ - **Any other branch**: PR flow
294
305
 
295
- #### 5.2 Direct Flow (main/master)
306
+ #### 5.2 Direct Flow
296
307
 
297
- 1. Create annotated tag: `git tag -a vX.Y.Z -m "Release vX.Y.Z"`
298
- 2. Push commit and tag: `git push origin HEAD --follow-tags`
299
- 3. If push fails (e.g., branch protection), fall back to PR flow (5.3).
300
- 4. If `gh` is available: create GitHub release:
301
- ```
302
- gh release create vX.Y.Z --title "vX.Y.Z" --notes "<release-notes-from-3.4>"
303
- ```
304
- 5. Publish to npm:
305
- ```
306
- npm publish
307
- ```
308
- The `prepublishOnly` script runs `build` and `test` automatically. If it fails, report the error but do not roll back the git tag — tell the user to fix and re-run `npm publish` manually.
308
+ 1. Create the release commit in Phase 4.
309
+ 2. If the project uses version tags, create the expected tag (default: annotated `vX.Y.Z`).
310
+ 3. Push the required refs for the project workflow.
311
+ 4. Execute the project-defined release artifacts in dependency order. Common examples:
312
+ - Hosted release page: create it using the repo's documented tool and the saved release notes.
313
+ - Package publish: run the documented ecosystem publish command only when the repo clearly defines it.
314
+ - Deployment or registry update: run only when it is part of the project's documented release process.
315
+ 5. If push or any artifact step is blocked by branch protection, missing tooling, or missing credentials, stop and tell the user exactly what remains rather than guessing.
309
316
 
310
- #### 5.3 PR Flow (feature branch)
317
+ #### 5.3 PR Flow
311
318
 
312
- 1. Push branch: `git push -u origin HEAD`
313
- 2. If `gh` is available: create PR:
314
- ```
315
- gh pr create --title "chore(release): vX.Y.Z" --body "<release-notes-from-3.4>"
316
- ```
317
- 3. Tell the user: "Release PR created. After merging to main, run these commands to create the tag and GitHub release:"
318
- ```
319
- git checkout main && git pull
320
- git tag -a vX.Y.Z -m "Release vX.Y.Z"
321
- git push origin vX.Y.Z
322
- gh release create vX.Y.Z --title "vX.Y.Z" --notes-file CHANGELOG.md
323
- ```
319
+ 1. Push the release branch: `git push -u origin HEAD`
320
+ 2. If the project uses PR-based releases and the relevant CLI is available, open the release PR with the changelog entry as the body.
321
+ 3. Tell the user the exact post-merge release actions derived from the project's docs and automation. Include only the artifacts that apply to this project.
324
322
 
325
323
  ---
326
324
 
@@ -333,8 +331,7 @@ Release vX.Y.Z complete!
333
331
 
334
332
  Version files updated: <list>
335
333
  Changelog: CHANGELOG.md updated
336
- Tag: vX.Y.Z created
337
- GitHub Release: <URL> (or "PR created: <URL>")
334
+ Release artifacts completed: <list>
338
335
 
339
336
  To undo this release: /scaffold:release rollback
340
337
  ```
@@ -347,8 +344,7 @@ Dry-run complete — no changes were made.
347
344
  Would bump: <current> → <new>
348
345
  Would update: <version-files>
349
346
  Would create: CHANGELOG.md entry
350
- Would tag: vX.Y.Z
351
- Would create: GitHub release
347
+ Would execute: <project-specific release artifacts>
352
348
 
353
349
  Run /scaffold:release to execute.
354
350
  ```
@@ -375,10 +371,7 @@ Tell the user: "To confirm rollback of `<tag>`, type the exact tag name (e.g., `
375
371
 
376
372
  Perform each step. If any step fails, continue with remaining steps and report all results at the end.
377
373
 
378
- 1. **Delete GitHub release** (if `gh` is available):
379
- ```
380
- gh release delete <tag> --yes
381
- ```
374
+ 1. **Delete hosted release** if the project created one and the appropriate CLI/API is available.
382
375
 
383
376
  2. **Delete remote tag:**
384
377
  ```
@@ -396,13 +389,15 @@ Perform each step. If any step fails, continue with remaining steps and report a
396
389
  git push origin HEAD
397
390
  ```
398
391
 
392
+ 5. **Handle project-specific publish/deploy rollback** only if the repository documents it. If that rollback is manual or ambiguous, stop and tell the user exactly what remains.
393
+
399
394
  #### R.4 Report Results
400
395
 
401
396
  Show what succeeded and what failed:
402
397
 
403
398
  ```
404
399
  Rollback of <tag>:
405
- GitHub release: deleted (or failed: <error>)
400
+ Hosted release: deleted (or failed: <error> / not applicable)
406
401
  Remote tag: deleted
407
402
  Local tag: deleted
408
403
  Version bump commit: reverted
@@ -417,9 +412,9 @@ If any step failed, include manual cleanup instructions for that step.
417
412
  ## Process Rules
418
413
 
419
414
  1. **Never skip quality gates** without explicit user `--force`.
420
- 2. **Dry-run: zero mutations** — no file writes, no git operations, no GitHub API calls.
415
+ 2. **Dry-run: zero mutations** — no file writes, no git operations, no hosted-release API calls, no publishes, and no deploys.
421
416
  3. **Beads integration is optional** — silently skip if `.beads/` doesn't exist.
422
- 4. **Tag format is always `vX.Y.Z`** no other formats.
417
+ 4. **Release artifacts are project-specific**only run tag/publish/deploy steps that the target project documents.
423
418
  5. **Every confirmation must be explicit** — don't assume "yes" from silence.
424
419
  6. **Rollback requires exact tag name** — not just "yes" or "confirm".
425
420
 
@@ -428,11 +423,11 @@ If any step failed, include manual cleanup instructions for that step.
428
423
  When this step is complete, tell the user:
429
424
 
430
425
  ---
431
- **Release complete** — version bumped, changelog updated, tag created, GitHub release published.
426
+ **Release complete** — version bumped, changelog updated, and the target project's release artifacts were handled.
432
427
 
433
428
  **Next (if applicable):**
434
429
  - If follow-up tasks are needed: Run `/scaffold:quick-task` — Create a focused task for post-release work.
435
- - If the release needs undoing: Run `/scaffold:release rollback` — Undo the most recent release.
430
+ - If the release needs undoing: Run `/scaffold:release rollback` — Undo the most recent release and any clearly documented release artifacts.
436
431
  - For development milestone checkpoints without releasing: Run `/scaffold:version-bump` — Bump version and changelog only.
437
432
 
438
433
  **Pipeline reference:** `/scaffold:prompt-pipeline`
@@ -15,9 +15,9 @@ argument-hint: "<major|minor|patch or --dry-run>"
15
15
  ## Purpose
16
16
 
17
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.
18
+ running the formal release ceremony. A lightweight companion to
19
+ `/scaffold:release` for marking development milestones — like completing a set
20
+ of user stories or reaching a pre-release checkpoint.
21
21
 
22
22
  ## Inputs
23
23
 
@@ -37,7 +37,7 @@ Combine flags freely (e.g., `minor --dry-run`).
37
37
  - `CHANGELOG.md` updated (or created) with grouped commit entries
38
38
  - Single commit with message `chore(version): vX.Y.Z`
39
39
 
40
- No tags, no push, no GitHub release.
40
+ No tags, no push, no formal release artifacts.
41
41
 
42
42
  ## Instructions
43
43
 
@@ -247,7 +247,7 @@ Version bump complete!
247
247
  Version files updated: <list>
248
248
  Changelog: CHANGELOG.md updated
249
249
 
250
- This was a version bump only — no tags, no push, no GitHub release.
250
+ This was a version bump only — no tags, no push, no formal release artifacts.
251
251
  When ready for a formal release: /scaffold:release current
252
252
  ```
253
253
 
@@ -268,7 +268,7 @@ Run /scaffold:version-bump to execute.
268
268
  ## Process Rules
269
269
 
270
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.
271
+ 2. **No tags, no push, no formal release artifacts** — use `/scaffold:release` for the full ceremony.
272
272
  3. **Dry-run: zero mutations** — no file writes, no git operations.
273
273
  4. **Beads integration is optional** — silently skip if `.beads/` doesn't exist.
274
274
  5. **Dirty working tree: warn only** — do not block.
@@ -282,7 +282,7 @@ When this step is complete, tell the user:
282
282
  **Version bump complete** — version files updated, changelog written, commit created.
283
283
 
284
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.
285
+ - When ready for a formal release: Run `/scaffold:release current` — Use the version already in files and execute the target project's release ceremony.
286
286
  - If follow-up tasks are needed: Run `/scaffold:quick-task` — Create a focused task for post-bump work.
287
287
 
288
288
  **Pipeline reference:** `/scaffold:prompt-pipeline`