Skip to content

feat(release): add LLM-generated prose summary to release notes#7737

Merged
jdx merged 20 commits intomainfrom
feat/llm-release-notes
Jan 19, 2026
Merged

feat(release): add LLM-generated prose summary to release notes#7737
jdx merged 20 commits intomainfrom
feat/llm-release-notes

Conversation

@jdx
Copy link
Owner

@jdx jdx commented Jan 18, 2026

Summary

Adds LLM-generated editorialized release notes to both CHANGELOG.md and GitHub releases using Claude Code.

  • New script scripts/gen-release-summary.sh: Generates user-friendly editorialized release notes using Claude Code (sandboxed with read-only tools)
  • Updated xtasks/release-plz: Integrates LLM generation into the release process, replacing raw git-cliff output with editorialized content
  • Updated .github/workflows/release.yml: Extracts release notes from CHANGELOG.md instead of regenerating

How it works

  1. During release-plz, the script generates editorialized release notes using Claude Code CLI
  2. The editorialized content is used for:
    • CHANGELOG.md (with standard header format)
    • Release PR body
  3. GitHub releases extract the same content from CHANGELOG.md (single source of truth)

Security

The Claude Code agent is sandboxed with --allowedTools "Read,Grep,Glob" to prevent any file modifications or command execution.

Example output format

The LLM produces release notes with:

  • 1-2 paragraph summary of important changes
  • Organized sections (Highlights, Bug Fixes, etc.)
  • User-focused language (not commit messages)
  • Contributor attribution where appropriate

Test plan

  • Verify gen-release-summary.sh produces well-formatted output locally
  • Run through a release cycle in staging/test environment
  • Confirm CHANGELOG.md and GitHub release have matching content

Note

Adds LLM-powered release notes and tightens the release automation.

  • GitHub Actions (release.yml): Installs Claude Code CLI and, on tag pushes, generates release notes/title via mise run gen-release-notes with fallback to CHANGELOG.md; passes ANTHROPIC_API_KEY and keeps assets publishing/promotion steps unchanged
  • New script: xtasks/gen-release-notes uses git-cliff for context and Claude Code (read-only tools) to produce a creative title + user-focused notes
  • Tasks: Documents gen-release-notes in tasks.md
  • xtasks/release-plz: Switches to git cliff --tag ... -o CHANGELOG.md, builds PR body from unreleased notes, fixes awk env var handling, and updates PR logic to target the release branch (gh pr list --head release, gh pr edit release)

Written by Cursor Bugbot for commit 0d1065c. This will update automatically on new commits. Configure here.

Copilot AI review requested due to automatic review settings January 18, 2026 21:15
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull request overview

This PR adds automated LLM-generated prose summaries to release notes using Claude Code CLI. When releases are created, Claude generates a 2-3 paragraph summary that provides context and narrative around the changes, which is then prepended to both CHANGELOG.md and GitHub release notes.

Changes:

  • Integrates Claude Code CLI with read-only sandbox permissions to generate release summaries
  • Updates release workflow to install Claude Code and generate summaries when ANTHROPIC_API_KEY is available
  • Gracefully degrades when the API key is not configured

Reviewed changes

Copilot reviewed 3 out of 3 changed files in this pull request and generated 1 comment.

File Description
xtasks/release-plz Adds logic to generate and inject LLM summary into CHANGELOG.md after version header
scripts/gen-release-summary.sh New script that invokes Claude Code with sandboxed read-only tools to generate prose summaries
.github/workflows/release.yml Installs Claude Code and generates summary for GitHub releases when API key is available

💡 Add Copilot custom instructions for smarter, more guided reviews. Learn how to get started.

- run: mise x -- scripts/release.sh
if: github.event_name != 'pull_request' || github.head_ref == 'release'
- name: Install Claude Code for release notes
if: startsWith(github.event.ref, 'refs/tags/v') && env.ANTHROPIC_API_KEY != ''
Copy link

Copilot AI Jan 18, 2026

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The condition checks env.ANTHROPIC_API_KEY but the environment variable is only set in the 'Create Draft GitHub Release' step (line 361), not at the workflow level. This step will always evaluate the condition as false and skip installation. Move the ANTHROPIC_API_KEY environment variable to the job level or check for the secret directly using secrets.ANTHROPIC_API_KEY != ''.

Suggested change
if: startsWith(github.event.ref, 'refs/tags/v') && env.ANTHROPIC_API_KEY != ''
if: startsWith(github.event.ref, 'refs/tags/v') && secrets.ANTHROPIC_API_KEY != ''

Copilot uses AI. Check for mistakes.
@jdx jdx force-pushed the feat/llm-release-notes branch 2 times, most recently from 4393910 to 9cb1bbd Compare January 18, 2026 21:23
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

Uses Claude Code CLI (sandboxed with read-only tools) to generate a
2-3 paragraph prose summary of each release. The summary is:

- Prepended to CHANGELOG.md during release-plz PR creation
- Prepended to GitHub release notes when publishing

The LLM has access to read the codebase for better context but cannot
execute commands or modify files (--allowedTools "Read,Grep,Glob").

Requires ANTHROPIC_API_KEY secret to be set; gracefully skips if not available.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@jdx jdx force-pushed the feat/llm-release-notes branch from 9cb1bbd to db136be Compare January 18, 2026 21:35
Changed from LLM summary prefix to full editorialization:
- Updated gen-release-summary.sh to produce user-friendly editorialized
  release notes with sections (Highlights, Bug Fixes, etc.)
- Changed release-plz to use editorialized content for both CHANGELOG.md
  and PR body (instead of git-cliff output)
- Removed intermediate git-cliff changelog generation step
- Both CHANGELOG.md and GitHub release now use the same editorialized
  content as the single source of truth

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

- Insert new release after "# Changelog" header instead of prepending,
  preventing the header from appearing in extracted release notes
- Handle empty prev_tag by using releases/tag URL instead of malformed
  compare URL (compare/..vX.Y.Z)
- Use ENVIRON for awk variables to avoid escape sequence corruption

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

- gen-release-summary.sh now exits with code 1 when no changes found
  instead of silently succeeding with empty output
- release-plz validates EDITORIALIZED_NOTES is non-empty before proceeding
- Changed awk insertion to find first ## [ section instead of assuming
  specific line numbers, making it robust to different CHANGELOG formats
- awk now returns exit code 1 if no insertion happened, which is caught
  and reported as an error

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

Add prompt instruction and runtime validation to prevent LLM from
generating "## [" patterns that would corrupt changelog processing:

- Added explicit instruction in prompt to never use "## ["
- Added grep validation that rejects output containing the pattern
- Exits with error if pattern detected

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@github-actions
Copy link

github-actions bot commented Jan 18, 2026

Hyperfine Performance

mise x -- echo

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.4 x -- echo 20.2 ± 0.4 19.5 26.7 1.00
mise x -- echo 20.7 ± 0.4 19.8 23.0 1.02 ± 0.03

mise env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.4 env 19.7 ± 0.7 18.9 27.1 1.00
mise env 20.2 ± 0.4 19.3 21.9 1.02 ± 0.04

mise hook-env

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.4 hook-env 19.9 ± 0.3 19.2 21.1 1.00
mise hook-env 20.2 ± 0.3 19.4 21.6 1.02 ± 0.02

mise ls

Command Mean [ms] Min [ms] Max [ms] Relative
mise-2026.1.4 ls 18.5 ± 0.3 17.8 20.4 1.00
mise ls 18.7 ± 0.4 17.9 19.9 1.01 ± 0.03

xtasks/test/perf

Command mise-2026.1.4 mise Variance
install (cached) 113ms 113ms +0%
ls (cached) 68ms 68ms +0%
bin-paths (cached) 71ms 72ms -1%
task-ls (cached) 4244ms ✅ 292ms +1353%

✅ Performance improvement: task-ls cached is 1353%

jdx and others added 2 commits January 18, 2026 16:26
The PR existence check was using `gh pr list --label release` which
queries ALL open PRs with that label repo-wide. If an unrelated PR
has the "release" label, the condition evaluates incorrectly.

Changed to `gh pr list --head release --state open` to specifically
check for PRs from the release branch.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
- Use printf to build prompt safely, preventing command substitution
  on backticks in changelog content (security fix)
- Add prompt instructions to include PR links for significant changes
- Add prompt instructions to link to relevant documentation
- Add project description to prompt context
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

jdx and others added 3 commits January 18, 2026 17:27
…releases

- gen-release-summary: concise 1-paragraph + bullets for CHANGELOG.md
- gen-release-notes: rich detailed notes for GitHub releases
- Move scripts to xtasks
- Update release.yml to generate rich notes at release time

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add --match 'v[0-9]*' to git describe to ensure we get the previous
main release tag instead of subcrate tags like aqua-registry-v* or vfox-v*
that sort alphabetically before v*.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

jdx and others added 2 commits January 18, 2026 17:47
gen-release-notes now outputs a creative title on the first line.
The release workflow combines version + title (e.g., "v2026.1.4 - Conda Gets Cozy")
for more engaging GitHub release pages.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
get-version.sh already returns version with v prefix (e.g., v1.2.3),
so adding another v prefix caused incorrect git describe and
gen-release-notes calls with vv1.2.3.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

jdx and others added 3 commits January 18, 2026 18:20
LLM-generated changelog content should only be created after the release
PR is merged, not during PR creation. Now:
- release-plz uses git-cliff directly for CHANGELOG.md
- LLM editorialization only happens in release.yml for GitHub releases
- Removes gen-release-summary script (no longer needed)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
If Claude returns empty output without a non-zero exit code, the script
now exits with an error instead of producing empty release notes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

The PR title already contains the version, so strip the redundant
version header (## [version] - date) from the PR body.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 2 potential issues.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

if: github.event_name != 'pull_request' || github.head_ref == 'release'
- name: Install Claude Code CLI
if: startsWith(github.event.ref, 'refs/tags/v')
run: npm install -g @anthropic-ai/claude-code
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

NPM install failure blocks entire release without fallback

Medium Severity

The "Install Claude Code CLI" step is a separate workflow step that can fail (npm network issues, package unavailability, etc.). When it fails, the entire job fails and the "Create Draft GitHub Release" step never executes. This means the fallback logic to extract release notes from CHANGELOG.md (lines 340-345) is never reached. The intended behavior is that releases proceed even without LLM-generated notes, but this step structure blocks releases entirely when the optional Claude CLI installation fails.

Fix in Cursor Fix in Web

jdx and others added 3 commits January 18, 2026 20:01
- Log version, previous version, and changelog length before calling Claude
- Capture stderr from Claude CLI and display on failure
- Helps diagnose why LLM generation fails in CI

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Avoid polluting release notes output by redirecting stderr to a temp
file instead of merging with stdout (2>&1). This prevents Claude CLI
diagnostic messages from appearing in the release notes.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Use --tag "v$version" instead of --bump to ensure CHANGELOG.md uses
the project's calver version (YYYY.M.PATCH) rather than semver
auto-calculation.

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Copy link

@cursor cursor bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Cursor Bugbot has reviewed your changes and found 1 potential issue.

Bugbot Autofix is OFF. To automatically fix reported issues with Cloud Agents, enable Autofix in the Cursor dashboard.

- Use claude-opus-4-5-20251101 model (Opus 4.5)
- Add --permission-mode bypassPermissions for CI/CD

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
@jdx jdx merged commit 5373962 into main Jan 19, 2026
34 checks passed
@jdx jdx deleted the feat/llm-release-notes branch January 19, 2026 04:37
jdx pushed a commit that referenced this pull request Jan 19, 2026
### 🚀 Features

- **(complete)** add PowerShell completion support by @jdx in
[#7746](#7746)
- **(release)** add LLM-generated prose summary to release notes by @jdx
in [#7737](#7737)
- **(vfox)** add semver Lua module for version sorting by @jdx in
[#7739](#7739)
- **(vfox)** add rolling release support with checksum tracking by @jdx
in [#7757](#7757)
- dry filetask parsing and validation by @makp0 in
[#7738](#7738)

### 🐛 Bug Fixes

- **(completions)** bump usage-cli to 2.13.1 for PowerShell support by
@jdx in [#7756](#7756)
- schema missing env required string variant by @vadimpiven in
[#7734](#7734)
- validate unknown fields in filetask headers by @makp0 in
[#7733](#7733)
- disable schemacrawler test by @jdx in
[#7743](#7743)
- replace double forward slash with single slash in get_task_lists by
@collinstevens in [#7744](#7744)
- require LLM for release notes and include aqua section by @jdx in
[#7745](#7745)
- preserve {{ version }} in tool options during config load by @jdx in
[#7755](#7755)

### 📚 Documentation

- add documentation URL structure guidance to CLAUDE.md by @jdx in
[#7740](#7740)
- add pitchfork promotion by @jdx in
[#7747](#7747)

### 📦️ Dependency Updates

- relax version constraints and update dependencies by @jdx in
[#7736](#7736)
- lock file maintenance by @renovate[bot] in
[#7749](#7749)

### Chore

- bump xx to 2.3.1 by @jdx in
[#7753](#7753)

### New Contributors

- @collinstevens made their first contribution in
[#7744](#7744)
- @makp0 made their first contribution in
[#7738](#7738)
- @vadimpiven made their first contribution in
[#7734](#7734)

## 📦 Aqua Registry Updates

#### New Packages (2)

-
[`F1bonacc1/process-compose`](https://github.com/F1bonacc1/process-compose)
- [`kkinnear/zprint`](https://github.com/kkinnear/zprint)

#### Updated Packages (1)

- [`theryangeary/choose`](https://github.com/theryangeary/choose)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 22, 2026
## [2026.1.5](https://github.com/jdx/mise/compare/v2026.1.4..v2026.1.5) - 2026-01-19

### 🚀 Features

- **(complete)** add PowerShell completion support by @jdx in [#7746](jdx/mise#7746)
- **(release)** add LLM-generated prose summary to release notes by @jdx in [#7737](jdx/mise#7737)
- **(vfox)** add semver Lua module for version sorting by @jdx in [#7739](jdx/mise#7739)
- **(vfox)** add rolling release support with checksum tracking by @jdx in [#7757](jdx/mise#7757)
- dry filetask parsing and validation by @makp0 in [#7738](jdx/mise#7738)

### 🐛 Bug Fixes

- **(completions)** bump usage-cli to 2.13.1 for PowerShell support by @jdx in [#7756](jdx/mise#7756)
- schema missing env required string variant by @vadimpiven in [#7734](jdx/mise#7734)
- validate unknown fields in filetask headers by @makp0 in [#7733](jdx/mise#7733)
- disable schemacrawler test by @jdx in [#7743](jdx/mise#7743)
- replace double forward slash with single slash in get_task_lists by @collinstevens in [#7744](jdx/mise#7744)
- require LLM for release notes and include aqua section by @jdx in [#7745](jdx/mise#7745)
- preserve {{ version }} in tool options during config load by @jdx in [#7755](jdx/mise#7755)

### 📚 Documentation

- add documentation URL structure guidance to CLAUDE.md by @jdx in [#7740](jdx/mise#7740)
- add pitchfork promotion by @jdx in [#7747](jdx/mise#7747)

### 📦️ Dependency Updates

- relax version constraints and update dependencies by @jdx in [#7736](jdx/mise#7736)
- lock file maintenance by @renovate[bot] in [#7749](jdx/mise#7749)

### Chore

- bump xx to 2.3.1 by @jdx in [#7753](jdx/mise#7753)

### New Contributors

- @collinstevens made their first contribution in [#7744](jdx/mise#7744)
- @makp0 made their first contribution in [#7738](jdx/mise#7738)
- @vadimpiven made their first contribution in [#7734](jdx/mise#7734)

## [2026.1.4](https://github.com/jdx/mise/compare/v2026.1.3..v2026.1.4) - 2026-01-17

### 🚀 Features

- **(conda)** add dependency locking for reproducible installations by @jdx in [#7708](jdx/mise#7708)
- **(http)** add JSON filter syntax for version extraction by @jdx in [#7707](jdx/mise#7707)
- **(http)** add version_expr support and Tera templating by @jdx in [#7723](jdx/mise#7723)
- **(task)** add [monorepo].config_roots for explicit config root listing by @jdx in [#7705](jdx/mise#7705)
- **(task)** support env vars in task dependencies by @jdx in [#7724](jdx/mise#7724)

### 🐛 Bug Fixes

- **(conda)** fix hardcoded library paths in conda packages by @jdx in [#7713](jdx/mise#7713)
- **(env)** avoid venv/go backend deadlock during env resolution by @stk0vrfl0w in [#7696](jdx/mise#7696)
- **(locked)** exempt tool stubs from lockfile requirements by @jdx in [#7729](jdx/mise#7729)
- **(python)** sort CPython versions at end of ls-remote output by @jdx in [#7721](jdx/mise#7721)
- **(task)** resolve remote task files before display and validation commands by @yannrouillard in [#7681](jdx/mise#7681)
- **(task)** support monorepo paths in `mise tasks deps` by @chadxz in [#7699](jdx/mise#7699)
- **(task)** resolve all monorepo path hints in deps by @chadxz in [#7698](jdx/mise#7698)

### 📚 Documentation

- remove outdated roadmap page by @jdx in [#7726](jdx/mise#7726)

### ⚡ Performance

- **(task)** fix task-ls cached performance regression by @jdx in [#7716](jdx/mise#7716)

### 📦️ Dependency Updates

- replace dependency @tsconfig/node22 with @tsconfig/node24 by @renovate[bot] in [#7618](jdx/mise#7618)

### 📦 Registry

- add aqua backend for smithy by @jdx in [#7661](jdx/mise#7661)
- remove low-usage asdf plugins by @jdx in [#7701](jdx/mise#7701)
- disable mirrord test by @jdx in [#7703](jdx/mise#7703)
- use vfox-dotnet as default backend by @jdx in [#7704](jdx/mise#7704)
- use vfox-lua as default lua backend by @jdx in [#7706](jdx/mise#7706)
- add vfox backend for redis by @jdx in [#7709](jdx/mise#7709)
- use vfox-postgres as default postgres backend by @jdx in [#7710](jdx/mise#7710)
- use github backend for kotlin by @jdx in [#7711](jdx/mise#7711)
- add vfox backend for leiningen by @jdx in [#7714](jdx/mise#7714)
- use pipx backend for meson by @jdx in [#7712](jdx/mise#7712)
- use github backend for crystal by @jdx in [#7715](jdx/mise#7715)
- use conda backend for sqlite by @jdx in [#7718](jdx/mise#7718)
- use conda backend for make by @jdx in [#7719](jdx/mise#7719)
- swift-package-list use github backend by @jdx in [#7720](jdx/mise#7720)

### Chore

- increase macos release build timeout to 90 minutes by @jdx in [#7725](jdx/mise#7725)

### New Contributors

- @yannrouillard made their first contribution in [#7681](jdx/mise#7681)
- @stk0vrfl0w made their first contribution in [#7696](jdx/mise#7696)

## [2026.1.3](https://github.com/jdx/mise/compare/v2026.1.2..v2026.1.3) - 2026-01-16

### 🚀 Features

- **(s3)** add S3 backend for private artifact storage by @jdx in [#7668](jdx/mise#7668)
- **(upgrade)** use installed_tool completer for mise upgrade by @jdx in [#7670](jdx/mise#7670)
- **(upgrade)** add --exclude flag to mise upgrade command by @jdx in [#7669](jdx/mise#7669)
- add no hooks and no env flags by @aacebedo in [#7560](jdx/mise#7560)

### 🐛 Bug Fixes

- **(backend)** allow upgrading vfox backend tools with symlinked installations by @TyceHerrman in [#7012](jdx/mise#7012)
- **(backend)** reject architecture mismatches in asset selection by @jdx in [#7672](jdx/mise#7672)
- **(backend)** canonicalize symlink target before installs check by @jdx in [#7671](jdx/mise#7671)
- **(npm)** avoid circular dependency when npm is in dependencies by @AprilNEA in [#7644](jdx/mise#7644)
- **(self-update)** skip update when already at latest version by @jdx in [#7666](jdx/mise#7666)
- fall back to GITHUB_TOKEN for github.com by @subdigital in [#7667](jdx/mise#7667)
- GitHub token fallback by @subdigital in [#7673](jdx/mise#7673)
- inherit tasks from parent configs in monorepos by @chadxz in [#7643](jdx/mise#7643)

### 📚 Documentation

- **(contributing)** update registry examples by @scop in [#7660](jdx/mise#7660)
- **(contributing)** update registry PR title rule by @scop in [#7663](jdx/mise#7663)
- remove 404 link from contributing by @opswole in [#7692](jdx/mise#7692)
- clarify that backend plugins should sort the version list by @ofalvai in [#7680](jdx/mise#7680)

### 📦️ Dependency Updates

- update ghcr.io/jdx/mise:alpine docker digest to 11f659e by @renovate[bot] in [#7685](jdx/mise#7685)
- update ghcr.io/jdx/mise:copr docker digest to 3adaea4 by @renovate[bot] in [#7686](jdx/mise#7686)
- update ghcr.io/jdx/mise:deb docker digest to 8bbca53 by @renovate[bot] in [#7687](jdx/mise#7687)
- update ghcr.io/jdx/mise:rpm docker digest to de81415 by @renovate[bot] in [#7688](jdx/mise#7688)
- update mcr.microsoft.com/devcontainers/rust:1 docker digest to 282e805 by @renovate[bot] in [#7690](jdx/mise#7690)
- update rust docker digest to bed2d7f by @renovate[bot] in [#7691](jdx/mise#7691)

### 📦 Registry

- add oh-my-posh by @scop in [#7659](jdx/mise#7659)
- add bibtex-tidy (npm:bibtex-tidy) by @3w36zj6 in [#7677](jdx/mise#7677)
- remove misconfigured bin_path option from kscript by @risu729 in [#7693](jdx/mise#7693)

### New Contributors

- @AprilNEA made their first contribution in [#7644](jdx/mise#7644)
- @opswole made their first contribution in [#7692](jdx/mise#7692)
- @subdigital made their first contribution in [#7673](jdx/mise#7673)
- @aacebedo made their first contribution in [#7560](jdx/mise#7560)
netbsd-srcmastr pushed a commit to NetBSD/pkgsrc that referenced this pull request Jan 25, 2026
## [2026.1.5](https://github.com/jdx/mise/compare/v2026.1.4..v2026.1.5) - 2026-01-19

### 🚀 Features

- **(complete)** add PowerShell completion support by @jdx in [#7746](jdx/mise#7746)
- **(release)** add LLM-generated prose summary to release notes by @jdx in [#7737](jdx/mise#7737)
- **(vfox)** add semver Lua module for version sorting by @jdx in [#7739](jdx/mise#7739)
- **(vfox)** add rolling release support with checksum tracking by @jdx in [#7757](jdx/mise#7757)
- dry filetask parsing and validation by @makp0 in [#7738](jdx/mise#7738)

### 🐛 Bug Fixes

- **(completions)** bump usage-cli to 2.13.1 for PowerShell support by @jdx in [#7756](jdx/mise#7756)
- schema missing env required string variant by @vadimpiven in [#7734](jdx/mise#7734)
- validate unknown fields in filetask headers by @makp0 in [#7733](jdx/mise#7733)
- disable schemacrawler test by @jdx in [#7743](jdx/mise#7743)
- replace double forward slash with single slash in get_task_lists by @collinstevens in [#7744](jdx/mise#7744)
- require LLM for release notes and include aqua section by @jdx in [#7745](jdx/mise#7745)
- preserve {{ version }} in tool options during config load by @jdx in [#7755](jdx/mise#7755)

### 📚 Documentation

- add documentation URL structure guidance to CLAUDE.md by @jdx in [#7740](jdx/mise#7740)
- add pitchfork promotion by @jdx in [#7747](jdx/mise#7747)

### 📦️ Dependency Updates

- relax version constraints and update dependencies by @jdx in [#7736](jdx/mise#7736)
- lock file maintenance by @renovate[bot] in [#7749](jdx/mise#7749)

### Chore

- bump xx to 2.3.1 by @jdx in [#7753](jdx/mise#7753)

### New Contributors

- @collinstevens made their first contribution in [#7744](jdx/mise#7744)
- @makp0 made their first contribution in [#7738](jdx/mise#7738)
- @vadimpiven made their first contribution in [#7734](jdx/mise#7734)

## [2026.1.4](https://github.com/jdx/mise/compare/v2026.1.3..v2026.1.4) - 2026-01-17

### 🚀 Features

- **(conda)** add dependency locking for reproducible installations by @jdx in [#7708](jdx/mise#7708)
- **(http)** add JSON filter syntax for version extraction by @jdx in [#7707](jdx/mise#7707)
- **(http)** add version_expr support and Tera templating by @jdx in [#7723](jdx/mise#7723)
- **(task)** add [monorepo].config_roots for explicit config root listing by @jdx in [#7705](jdx/mise#7705)
- **(task)** support env vars in task dependencies by @jdx in [#7724](jdx/mise#7724)

### 🐛 Bug Fixes

- **(conda)** fix hardcoded library paths in conda packages by @jdx in [#7713](jdx/mise#7713)
- **(env)** avoid venv/go backend deadlock during env resolution by @stk0vrfl0w in [#7696](jdx/mise#7696)
- **(locked)** exempt tool stubs from lockfile requirements by @jdx in [#7729](jdx/mise#7729)
- **(python)** sort CPython versions at end of ls-remote output by @jdx in [#7721](jdx/mise#7721)
- **(task)** resolve remote task files before display and validation commands by @yannrouillard in [#7681](jdx/mise#7681)
- **(task)** support monorepo paths in `mise tasks deps` by @chadxz in [#7699](jdx/mise#7699)
- **(task)** resolve all monorepo path hints in deps by @chadxz in [#7698](jdx/mise#7698)

### 📚 Documentation

- remove outdated roadmap page by @jdx in [#7726](jdx/mise#7726)

### ⚡ Performance

- **(task)** fix task-ls cached performance regression by @jdx in [#7716](jdx/mise#7716)

### 📦️ Dependency Updates

- replace dependency @tsconfig/node22 with @tsconfig/node24 by @renovate[bot] in [#7618](jdx/mise#7618)

### 📦 Registry

- add aqua backend for smithy by @jdx in [#7661](jdx/mise#7661)
- remove low-usage asdf plugins by @jdx in [#7701](jdx/mise#7701)
- disable mirrord test by @jdx in [#7703](jdx/mise#7703)
- use vfox-dotnet as default backend by @jdx in [#7704](jdx/mise#7704)
- use vfox-lua as default lua backend by @jdx in [#7706](jdx/mise#7706)
- add vfox backend for redis by @jdx in [#7709](jdx/mise#7709)
- use vfox-postgres as default postgres backend by @jdx in [#7710](jdx/mise#7710)
- use github backend for kotlin by @jdx in [#7711](jdx/mise#7711)
- add vfox backend for leiningen by @jdx in [#7714](jdx/mise#7714)
- use pipx backend for meson by @jdx in [#7712](jdx/mise#7712)
- use github backend for crystal by @jdx in [#7715](jdx/mise#7715)
- use conda backend for sqlite by @jdx in [#7718](jdx/mise#7718)
- use conda backend for make by @jdx in [#7719](jdx/mise#7719)
- swift-package-list use github backend by @jdx in [#7720](jdx/mise#7720)

### Chore

- increase macos release build timeout to 90 minutes by @jdx in [#7725](jdx/mise#7725)

### New Contributors

- @yannrouillard made their first contribution in [#7681](jdx/mise#7681)
- @stk0vrfl0w made their first contribution in [#7696](jdx/mise#7696)

## [2026.1.3](https://github.com/jdx/mise/compare/v2026.1.2..v2026.1.3) - 2026-01-16

### 🚀 Features

- **(s3)** add S3 backend for private artifact storage by @jdx in [#7668](jdx/mise#7668)
- **(upgrade)** use installed_tool completer for mise upgrade by @jdx in [#7670](jdx/mise#7670)
- **(upgrade)** add --exclude flag to mise upgrade command by @jdx in [#7669](jdx/mise#7669)
- add no hooks and no env flags by @aacebedo in [#7560](jdx/mise#7560)

### 🐛 Bug Fixes

- **(backend)** allow upgrading vfox backend tools with symlinked installations by @TyceHerrman in [#7012](jdx/mise#7012)
- **(backend)** reject architecture mismatches in asset selection by @jdx in [#7672](jdx/mise#7672)
- **(backend)** canonicalize symlink target before installs check by @jdx in [#7671](jdx/mise#7671)
- **(npm)** avoid circular dependency when npm is in dependencies by @AprilNEA in [#7644](jdx/mise#7644)
- **(self-update)** skip update when already at latest version by @jdx in [#7666](jdx/mise#7666)
- fall back to GITHUB_TOKEN for github.com by @subdigital in [#7667](jdx/mise#7667)
- GitHub token fallback by @subdigital in [#7673](jdx/mise#7673)
- inherit tasks from parent configs in monorepos by @chadxz in [#7643](jdx/mise#7643)

### 📚 Documentation

- **(contributing)** update registry examples by @scop in [#7660](jdx/mise#7660)
- **(contributing)** update registry PR title rule by @scop in [#7663](jdx/mise#7663)
- remove 404 link from contributing by @opswole in [#7692](jdx/mise#7692)
- clarify that backend plugins should sort the version list by @ofalvai in [#7680](jdx/mise#7680)

### 📦️ Dependency Updates

- update ghcr.io/jdx/mise:alpine docker digest to 11f659e by @renovate[bot] in [#7685](jdx/mise#7685)
- update ghcr.io/jdx/mise:copr docker digest to 3adaea4 by @renovate[bot] in [#7686](jdx/mise#7686)
- update ghcr.io/jdx/mise:deb docker digest to 8bbca53 by @renovate[bot] in [#7687](jdx/mise#7687)
- update ghcr.io/jdx/mise:rpm docker digest to de81415 by @renovate[bot] in [#7688](jdx/mise#7688)
- update mcr.microsoft.com/devcontainers/rust:1 docker digest to 282e805 by @renovate[bot] in [#7690](jdx/mise#7690)
- update rust docker digest to bed2d7f by @renovate[bot] in [#7691](jdx/mise#7691)

### 📦 Registry

- add oh-my-posh by @scop in [#7659](jdx/mise#7659)
- add bibtex-tidy (npm:bibtex-tidy) by @3w36zj6 in [#7677](jdx/mise#7677)
- remove misconfigured bin_path option from kscript by @risu729 in [#7693](jdx/mise#7693)

### New Contributors

- @AprilNEA made their first contribution in [#7644](jdx/mise#7644)
- @opswole made their first contribution in [#7692](jdx/mise#7692)
- @subdigital made their first contribution in [#7673](jdx/mise#7673)
- @aacebedo made their first contribution in [#7560](jdx/mise#7560)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants