mirror of
https://github.com/garrytan/gstack.git
synced 2026-11-08 17:58:13 +01:00
* feat(ship): PR bodies lead with the problem and carry a Blast radius line, and gstack-prose-lint checks the CHANGELOG entry and PR body drafts Absorb lane B (Garry, 2026-10-26: "Do it, send" on plans/absorb-tstack.md item 4 and plans/absorb-pstack.md items 2(a) and 11). Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * test: register the prose-lint fixtures and NOTICE.md as free-only PR inputs Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * test: pin prose-lint gate lines and usage exits, use a gstack-native dropped-article example, keep NOTICE.md unmapped Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix: pre-landing review fixes Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix: pre-landing review fixes Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix: pre-landing review fixes Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * docs: name the CHANGELOG prose-lint gate and the Blast radius body section in the contributor docs Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix(ship): name the evidence ladder by skill instead of by a runtime-root path that does not exist yet test/runtime-root-assets.test.ts checks every $GSTACK_ROOT/<path> literal in a host render against the staged root; investigate/sections/blast-radius.md lands with its own lane, so the Blast radius item and the Capy body step now say "the /investigate skill's Blast radius section, when present". Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * docs: name the Blast radius section in the two Capy body-order lists The docs re-audit found capy/skill/gstack/SKILL.md (Merge asks) and docs/capy-install.md still listing the Capy PR body as What changed, Why, Approvals; both now match capy-pr.md.tmpl. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> * fix(ship): the compose block's prose-lint trailer goes to stderr, and the publication-gates fixture stages gstack-prose-lint beside gstack-post test/ship-publication-gates.test.ts runs the real compose block under a HOME whose installed bin dir held only gstack-post, so the block's new gstack-prose-lint call failed with "No such file" on every CI free lane; the fixture now stages both bins the blocks call, and the lint's ok line goes to stderr so the composed body is the only stdout. Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com> --------- Co-authored-by: capy-ai[bot] <230910855+capy-ai[bot]@users.noreply.github.com>
57 lines
2.7 KiB
Markdown
57 lines
2.7 KiB
Markdown
<!-- AUTO-GENERATED from changelog.md.tmpl — do not edit directly -->
|
|
<!-- Regenerate: bun run gen:skill-docs -->
|
|
## Step 13: CHANGELOG (auto-generate)
|
|
|
|
1. Read `CHANGELOG.md` header to know the format.
|
|
|
|
2. **First, enumerate every commit on the branch:**
|
|
```bash
|
|
git log origin/<base>..HEAD --oneline
|
|
```
|
|
Copy the full list. Count the commits. You will use this as a checklist.
|
|
|
|
3. **Read the full diff** to understand what each commit actually changed:
|
|
```bash
|
|
git diff origin/<base>
|
|
```
|
|
|
|
4. **Group commits by theme** before writing anything. Common themes:
|
|
- New features / capabilities
|
|
- Performance improvements
|
|
- Bug fixes
|
|
- Dead code removal / cleanup
|
|
- Infrastructure / tooling / tests
|
|
- Refactoring
|
|
|
|
5. **Write the CHANGELOG entry** covering ALL groups:
|
|
- If existing CHANGELOG entries on the branch already cover some commits, replace them with one unified entry for the new version
|
|
- Categorize changes into applicable sections:
|
|
- `### Added` — new features
|
|
- `### Changed` — changes to existing functionality
|
|
- `### Fixed` — bug fixes
|
|
- `### Removed` — removed features
|
|
- Write concise, descriptive bullet points
|
|
- Insert after the observed file header, before the first release entry, dated today
|
|
- Format: `## [X.Y.Z.W] - YYYY-MM-DD`
|
|
- **Voice:** Lead with what the user can now **do** that they couldn't before. Use plain language, not implementation details. Never mention TODOS.md, internal tracking, or contributor-facing details.
|
|
|
|
6. **Cross-check:** Compare your CHANGELOG entry against the commit list from step 2.
|
|
Every user-facing change in that list must be represented; add any that is missing.
|
|
Commits with no user-facing effect (merges, version bumps, fixes to work introduced
|
|
earlier on this branch) need no bullet. The entry must reflect every user-facing theme.
|
|
|
|
**Do NOT ask the user to describe changes.** Infer from the diff and commit history.
|
|
|
|
7. **Lint the entry:** `~/.claude/skills/gstack/bin/gstack-prose-lint CHANGELOG.md --base origin/<base> --gate` reads only the lines this branch added; rewrite each `PROSE:` line it names and rerun until the trailer is `PROSE_LINT: ok`.
|
|
|
|
**NO_VERSION (Step 12):** skip this step; write no CHANGELOG entry or version header.
|
|
|
|
**No CHANGELOG:** when the policy's `changelog` is `null`, or the file it names
|
|
(`CHANGELOG.md` by default) is absent at HEAD, print one line,
|
|
`CHANGELOG: skipped (none at <path>)`, write nothing and never create the file;
|
|
Step 19's PR body carries the release notes instead. A repository with neither a
|
|
version source nor a CHANGELOG ships with both lines printed and a receipt whose
|
|
`version` is `"none"` (docs/ship-policy.md#ship-receipt).
|
|
|
|
---
|