Files
mise/.markdownlintignore
jdxandClaude Sonnet 5.5 112a5b8b4c docs: add a releases page with a timeline of release sizes and resolved issues (#13855)
<!-- entire-trail-link-start -->
https://entire.io/gh/jdx/mise/trails/360
<!-- entire-trail-link-end -->

The docs had no way to see how fast mise ships, how big each release is,
or what was in it. This adds a **Releases** page (`/releases`, under
About): a timeline of every release since 2024.11, sized by the number
of changes in each, where each release expands to show the notes
published with it on GitHub.

![The Releases page: totals, a changes-per-release timeline, an
issues-per-release chart, and the newest months listed
below](https://raw.githubusercontent.com/jdx/mise/c1e7287b51ed4a73917a447b0d6ab277e2f8a556/.github/pr-assets/releases-page.png)

- **Timeline:** one bar per release, oldest on the left, height =
changes in its changelog. Hover or focus a bar for the version, date,
change count, issue count and a features/fixes/registry/other split.
Clicking a bar opens that release's notes.
- **Release notes:** each release in the list expands in place to show
its GitHub release notes (the communique version: summary,
Changed/Added/Fixed, examples with highlighted code blocks).
`/releases#2026.9.17` opens a release directly.
- **Issues chart:** issues resolved per release, **starting
2026-09-23**, when GitHub Issues were turned back on (the first issue
after the gap was #13523, opened that day). Earlier releases show a
dash.
- **Header link:** the version in the nav bar (`v2026.9.17`) now goes to
that release on this page, `/releases#2026.9.17`, instead of the GitHub
releases list.
- **Totals:** 414 releases, 6,052 changes, 21 issues resolved since Sep
23, 2026.

![Release 2026.9.17 expanded to show its release
notes](https://raw.githubusercontent.com/jdx/mise/2aa6c9438004a150e13b5dc8d2c16762841fb683/.github/pr-assets/releases-notes.png)

## Where the code and data come from

The page's code is the published npm package
[`@jdxcode/docs-releases`](https://github.com/jdx/docs-releases) (added
here at `0.1`), so the other jdx projects can use the same page. mise
supplies only its settings, under `"docs-releases"` in the root
`package.json` (repo, the date issue counts start, the issues file, and
the sponsor block and Aqua sections to leave out), a 7-line data loader
in `docs/releases.data.ts`, and `...releaseNotesPlugin()` in the
VitePress config.

- **Changes** are the entries in `CHANGELOG.md`. New Contributors and
the vendored Aqua registry sections are left out of the count, since the
Aqua sections would otherwise dwarf every real change.
- **Release notes** are the GitHub release bodies. `xtasks/release-plz`
runs `docs-releases sync` on every release, which writes each published
release's notes to `release-notes/<version>.md` (394 files, about 1.1
MB, rewritten only if a release is edited; the sponsor block release.yml
appends is left out). The docs build reads those files, so it does not
fetch every release.
- The release a release PR will publish has no notes yet, so the docs
build fetches any release newer than the newest snapshot from the GitHub
API. The docs workflow already runs on `release: published`, which is
when that body exists. The next release-plz run then commits it. A
failed fetch only means that release links to GitHub instead; an invalid
token is retried without it.
- The build renders each release's markdown with the site's own settings
(raw HTML is escaped, in-page links keep working) and writes
`/release-notes/<version>.json`. The page fetches one when a release is
opened, so the notes (about 2.6 MB rendered) are not in the page.
`vitepress dev` serves the same path.
- `release-notes/` is in `.prettierignore` and `.markdownlintignore`,
since it is generated text that mirrors GitHub.
- **Issues resolved** are issues closed by a PR in that release
(GitHub's `closingIssuesReferences`, deduplicated by issue id), counted
by `docs-releases sync` for releases from 2026-09-23 on and kept in
`docs/.vitepress/releases-issues.json`. Before that date issues were off
and reports came in as Discussions, which a PR cannot close, so there is
no count to show. If a lookup fails the release still goes out, the page
marks totals as a lower bound (`N+`) and says so, and the next run fills
it in.

## Reviewer notes

- 20 releases in the changelog have no GitHub release (their tags were
skipped), so they have no notes and the page says so.
- Checked in headless chromium at desktop and phone width in the light
theme, with the notes loaded over HTTP from a build. Dark mode colours
were not checked, and I did not exercise the hover behaviour in a
browser.
- `docs/public/llms.txt` gains one line for the new page; it is
generated from the sidebar, and CI's `render` check requires it.
`docs.yml` now also runs when `release-notes/` changes.
- The package has its own tests and release pipeline (release-plz,
communique, npm trusted publishing) in `jdx/docs-releases`.
- The dependency was added with `aube add --allow-low-downloads`: aube
refuses a package name under 30 days old, and this one is jdx's own
(first published 2026-09-30).
- `mise run lint` fails locally on a Rust build step (a missing `mbx`
shim in `target/`), not on any file in this PR. Prettier is clean on the
new files.
- The screenshots are only in the PR's commit history (added and removed
in adjacent commits) and are not part of the diff.

*AI-assisted — Tool: Claude Code; model: anthropic/claude-sonnet-5-5;
version: 2.1.284.*

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Documentation and static generated release-note assets only; no
runtime CLI or install-path changes.
> 
> **Overview**
> Adds an on-site **Releases** page (`/releases`) powered by
**`@jdxcode/docs-releases`**, with a changelog-sized timeline, optional
resolved-issue counts (from `releases-issues.json` since 2026-09-23),
and expandable per-version notes.
> 
> Wires VitePress through `releaseNotesPlugin`, `docs/releases.data.ts`,
and a thin `docs/releases.md` shell; **`package.json`** gains the
dependency and a **`docs-releases`** block (repo, issue metadata,
sections to trim/ignore). Commits a large **`release-notes/`** snapshot
tree for offline builds, excludes it from Prettier/markdownlint, and
extends the docs workflow path filters.
> 
> Navigation now lists Releases under About, updates **`llms.txt`**, and
points the header version link to **`/releases#<version>`** instead of
GitHub releases.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
d0d7f218d5. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Sonnet 5.5 <noreply@anthropic.com>
2026-09-30 15:22:20 -05:00

13 lines
166 B
Plaintext

.claude/
/registry/
/target/
CHANGELOG.md
crates/vfox/embedded-plugins/
docs/node_modules/
docs/cli/watch.md
node_modules/
test/
/tasks.md
/comment.md
release-notes/