Skip to content

Commit 90d0731

Browse files
authored
Prepare v3.6.0 release notes and publishing doc (#117)
Rename the Unreleased section to v3.6.0 with today's date and add the matching tag link reference. Rewrite the publishing how-to to use npm version (per the Release Process in the Version Control Standard) and add the GitHub Release step mandated by that standard.
1 parent c429de3 commit 90d0731

2 files changed

Lines changed: 46 additions & 28 deletions

File tree

RELEASE_NOTES.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ All notable user-visible changes to MARR are documented here. The format follows
44

55
This file is the canonical, in-repo history. Each section is mirrored in a corresponding [GitHub Release](https://github.com/virtualian/marr/releases).
66

7-
## Unreleased
7+
## [v3.6.0] — 2026-05-10
88

99
### Added
1010
- `marr update --project` — refresh canonical standards into a previously-installed project. Hash manifest at `.claude/marr/.marr-version.json` distinguishes locally-edited files (prompted) from canonical advancement (silent refresh). Flags: `--check` (drift report, non-zero exit), `--prune` (remove orphans), `--dry-run`, `--force`. `marr init --project` now writes the manifest so first-time installs are tracked. (closes [#111](https://github.com/virtualian/marr/issues/111), partially addresses [#86](https://github.com/virtualian/marr/issues/86))
@@ -108,6 +108,7 @@ First public npm release as `@virtualian/marr`.
108108
### Changed
109109
- Project rebranded from `repo-setup` to `marr` ([#9](https://github.com/virtualian/marr/pull/9))
110110

111+
[v3.6.0]: https://github.com/virtualian/marr/releases/tag/v3.6.0
111112
[v3.5.0]: https://github.com/virtualian/marr/releases/tag/v3.5.0
112113
[v3.1.0]: https://github.com/virtualian/marr/releases/tag/v3.1.0
113114
[v3.0.0]: https://github.com/virtualian/marr/releases/tag/v3.0.0

docs/dev/how-to/publishing.md

Lines changed: 44 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -1,34 +1,37 @@
11
# Publishing MARR
22

3-
This guide covers how to publish a new MARR release to npm.
3+
This guide publishes a new MARR release to npm and GitHub.
4+
5+
The Version Control Standard requires every tagged release to have **both** an updated section in `RELEASE_NOTES.md` and a published GitHub Release. This procedure produces both.
46

57
## Before Publishing
68

7-
1. **Run the test suite** — See [testing.md](./testing.md)
8-
2. **Verify all tests pass** in the testuser account
9-
3. **Check you're on main** with a clean working directory
9+
1. **All PRs for the release are merged to main**
10+
2. **Local main is up to date**`git checkout main && git pull`
11+
3. **Working directory is clean**`git status` shows nothing
12+
4. **Tests pass**`npm test` (see [testing.md](./testing.md))
13+
5. **`RELEASE_NOTES.md` is up to date** — rename the `## Unreleased` heading to `## [vX.Y.Z] — YYYY-MM-DD` and add a matching `[vX.Y.Z]: https://github.com/virtualian/marr/releases/tag/vX.Y.Z` link reference at the bottom of the file
14+
6. **`KNOWN_ISSUES.md` reflects current state** — new issues added, resolved issues removed
15+
7. **You are logged in to npm**`npm whoami` returns the publishing account; if not, run `npm login`
1016

11-
## Release Process
17+
Steps 1–6 must be merged to main via PR before continuing. Do not run the release commands on a feature branch.
1218

13-
### 1. Bump Version
19+
## Release Process
1420

15-
Use the release script:
21+
### 1. Bump Version, Commit, and Tag
1622

1723
```bash
18-
./scripts/release.sh patch # 2.0.0 → 2.0.1
19-
./scripts/release.sh minor # 2.0.0 → 2.1.0
20-
./scripts/release.sh major # 2.0.0 → 3.0.0
24+
npm version patch # 3.6.0 → 3.6.1 (bug fixes only)
25+
npm version minor # 3.6.0 → 3.7.0 (new features, backward-compatible)
26+
npm version major # 3.6.0 → 4.0.0 (breaking changes)
2127
```
2228

23-
This script:
24-
- Updates version in package.json
25-
- Builds the TypeScript
26-
- Creates a git commit and tag
29+
`npm version` updates `package.json` and `package-lock.json`, creates a commit containing only the version bump, and creates an annotated tag — atomically.
2730

28-
### 2. Push to GitHub
31+
### 2. Push Commit and Tag
2932

3033
```bash
31-
git push origin main --tags
34+
git push && git push --tags
3235
```
3336

3437
### 3. Publish to npm
@@ -37,15 +40,25 @@ git push origin main --tags
3740
npm publish --access public
3841
```
3942

40-
### 4. Verify Publication
43+
The `prepublishOnly` hook re-runs the binary check, build, and tests as a final gate before the package is uploaded.
44+
45+
### 4. Create the GitHub Release
46+
47+
The Release body must mirror the new version's section in `RELEASE_NOTES.md`. Extract that section to a temporary file, then publish:
4148

4249
```bash
43-
# Check npm registry
44-
npm view @virtualian/marr
50+
# Replace vX.Y.Z with the tag you just pushed
51+
gh release create vX.Y.Z \
52+
--title "vX.Y.Z" \
53+
--notes-file <path-to-extracted-section.md>
54+
```
55+
56+
### 5. Verify Publication
4557

46-
# Test installation
47-
npm install -g @virtualian/marr
48-
marr --version
58+
```bash
59+
npm view @virtualian/marr version # should match the new tag
60+
gh release view vX.Y.Z # should show the published Release
61+
npm install -g @virtualian/marr && marr --version
4962
```
5063

5164
## Versioning Guidelines
@@ -54,14 +67,18 @@ Follow semantic versioning:
5467

5568
| Change Type | Version Bump | Example |
5669
|-------------|--------------|---------|
57-
| Bug fixes, doc updates | patch | 2.0.0 → 2.0.1 |
58-
| New features (backward compatible) | minor | 2.0.0 → 2.1.0 |
59-
| Breaking changes | major | 2.0.0 → 3.0.0 |
70+
| Bug fixes, doc updates | patch | 3.6.0 → 3.6.1 |
71+
| New features (backward compatible) | minor | 3.6.0 → 3.7.0 |
72+
| Breaking changes | major | 3.6.0 → 4.0.0 |
6073

6174
## Troubleshooting
6275

63-
**403 Forbidden** — Run `npm login` and verify with `npm whoami`
76+
**401 / 403 from npm** — Run `npm login` and verify with `npm whoami`
6477

6578
**Package name taken** — MARR uses `@virtualian/marr` (scoped package)
6679

67-
**Version already exists** — You cannot republish the same version; bump and try again
80+
**Version already exists on npm** — You cannot republish the same version; bump and try again
81+
82+
**Tag pushed but `gh release create` fails** — The tag is on origin without a published Release. Re-run `gh release create vX.Y.Z` against the same tag.
83+
84+
**`prepublishOnly` failed** — The build or tests failed inside `npm publish`. Fix the issue on a feature branch, merge, and re-tag with the next patch version. Never reuse a published or pushed tag.

0 commit comments

Comments
 (0)