Skip to content

fix(core): date dotnet, deno and erlang versions for minimum_release_age - #14692

Merged
jdx merged 4 commits into
mainfrom
claude/core-release-dates-a-80163a
Oct 19, 2026
Merged

jdx merged 4 commits into
mainfrom
claude/core-release-dates-a-80163a

Conversation

@jdx

@jdx jdx commented Oct 19, 2026 •

Copy link
Copy Markdown
Owner

https://entire.io/gh/jdx/mise/trails/892

minimum_release_age keeps undated versions (filter_by_date), so tools whose version list carries no dates silently bypass the cooldown (#14689). The core dotnet, deno and erlang plugins listed no dates at all. They now do:

  • dotnet: each SDK takes the release-date of the release entry in Microsoft's releases index that first shipped it (runtime-only entries repeat earlier SDKs, so the earliest date wins).
  • deno: the version list still comes from deno.com, dated from the GitHub releases of denoland/deno.
  • erlang (default kerl path): the version list still comes from kerl list releases all, dated from the GitHub releases of erlang/otp (OTP-x.y tags). The erlang_compile=false path was already dated.

Release listings go through the existing GitHub helpers, so with the versions host enabled (default) this is one cached request per tool and every version is dated. Checked live with mise ls-remote --json: dotnet 591/591, deno 324/324, erlang 547/547 dated.

Limitation: with use_versions_host = false, the direct GitHub API returns only the newest releases unless MISE_LIST_ALL_VERSIONS is set. Older versions (225 of 324 for deno, 447 of 547 for erlang, all more than a year old) stay undated. If GitHub can't be reached, a warning is logged and versions stay undated rather than failing ls-remote.

Tests cover the parsing and that a cutoff hides a too-new version for each plugin.

AI-assisted β€” Tool: Claude Code; model: anthropic/claude-sonnet-5-5; version: unavailable.

πŸ€– Generated with Claude Code


Note

Medium Risk
Changes remote version listing for three core backends and adds GitHub API usage for deno/erlang, but failures degrade to undated versions with warnings rather than blocking installs.

Overview
Fixes dotnet, deno, and erlang remote version lists so VersionInfo.created_at is set, allowing minimum_release_age to filter too-new releases instead of treating every version as undated.

dotnet still builds the SDK list from Microsoft’s channel release JSON but now attaches each SDK’s release-date, keeping the earliest date when the same SDK appears on later runtime-only entries. deno still uses deno.com/versions.json and merges publication dates from denoland/deno GitHub releases, with up to five per-version lookups when the bulk list is stale. erlang (kerl path) still uses kerl list releases all and dates versions from erlang/otp releases under a shared fetch timeout, with the same capped missing-version lookups; GitHub failures log a warning and leave versions undated rather than breaking ls-remote.

Unit tests cover date parsing, dedupe/sort behavior, and that VersionInfo::filter_by_date hides versions newer than a cutoff.

Reviewed by Cursor Bugbot for commit b4b4243. Bugbot is set up for automated code reviews on this repo. Configure here.

Summary by CodeRabbit

  • Improvements
    • Added release dates to Deno, .NET, and Erlang version listings when available.
    • Version lists now avoid duplicate entries and support filtering by release date.
    • If release-date data is unavailable, version listings continue without dates.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Entire-Checkpoint: 01M58SVTDA547B6NMEQKQ9NW8B
@coderabbitai

coderabbitai Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

Review in Change Stack β†’

Warning

Review limit reached

You've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository.

Next included review available in 1 minute.

Check out review usage here.

View limit details

Limit details: You’ve used all 10 included reviews currently available.

Learn how review limits work.

Review configuration:

βš™οΈ Run configuration
  • Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: c30ce3ca-afe8-4654-8cf1-0a617d9ccf1a
πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 54d4c9d and b4b4243.

πŸ“’ Files selected for processing: 2
  • src/plugins/core/deno.rs
  • src/plugins/core/erlang.rs

No actionable comments were generated in the recent review. πŸŽ‰

ℹ️ Recent review info
βš™οΈ Run configuration
  • Configuration used: Repository YAML (base), Central YAML (inherited), Organization UI (inherited)
  • Review profile: CHILL
  • Plan: Advanced
  • Run ID: bcca23a7-71be-4206-98b6-c94a0248f7c8
πŸ“₯ Commits

Reviewing files that changed from the base of the PR and between 9949a2b and 54d4c9d.

πŸ“’ Files selected for processing: 3
  • src/plugins/core/deno.rs
  • src/plugins/core/dotnet.rs
  • src/plugins/core/erlang.rs

Included review availability: This review used your included allowance. Your plan provides up to 10 included reviews per hour; 5 remain after this review.

πŸ“ Walkthrough

Deno, .NET, and Erlang version listings now include release dates when matching release metadata is available. The changes also add tests for date mapping, deduplication, sorting, missing dates, and date-based filtering.

Changes: Runtime release dates

Layer / File(s) Summary
Deno release-date mapping
src/plugins/core/deno.rs
Deno listing maps GitHub release dates to CLI versions. It keeps prefixed versions, removes the prefix, deduplicates and sorts results, and tests mapping and filtering.
.NET SDK release dates
src/plugins/core/dotnet.rs
SDK versions are deduplicated and assigned the earliest nonempty release date. Versions without a date remain undated. Tests cover date selection and filtering.
Erlang release-date mapping
src/plugins/core/erlang.rs
Erlang listing maps GitHub publication dates to kerl versions. If fetching release metadata fails, it logs a warning and continues without dates. Tests cover mapping and filtering.

Priority: ⬇️ Low

Estimated code review effort: 3 (Moderate) | ~20 minutes

Change: Bug fix

Suggested reviewers: risu729

Merge Risk: βšͺ Minimal Β· up to 54d4c

No actionable merge-blocking issue is established; the release-date changes are ready for normal checks.

Pre-merge checks: Passed 4 Β· Failed 1

Failed Failed checks: 1 warning

Check name Status Explanation Resolution
Docstring Coverage Warning Docstring coverage is 44.44% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 27 functions across 3 files. Write docstrings for the functions missing them to satisfy the coverage threshold.
Passed Passed checks: 4 passed
Check name Status Explanation
Description Check Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check Passed The title clearly and concisely summarizes the main change: adding dates to .NET, Deno, and Erlang versions so minimum_release_age can apply.
Linked Issues check Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check Passed Check skipped because no linked issues were found for this pull request.
  • Autofix Β· Keep fixing CodeRabbit findings and required CI, and resolving merge conflicts

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❀️ Share

Comment @coderabbitai help to get the list of available commands.

@greptile-apps

greptile-apps Bot commented Oct 19, 2026 •

Copy link
Copy Markdown
Contributor

RetriggerView in GreptileConfidence Score: 5/5

[Medium impact] The PR appears safe to merge; no new actionable issues were found.

Summary

The PR adds release dates to .NET, Deno, and Erlang version lists so minimum_release_age can filter recent releases.

  • Deno version listings now include GitHub release dates.
  • .NET SDK version listings now use their release dates.
  • Erlang's kerl version listings now include GitHub release dates.

Reviews (4) Β· Last reviewed commit: "fix(core): share one deadline across erl..." Β· Reviewed by Greptile

Comment thread src/plugins/core/deno.rs Resolved
Comment thread src/plugins/core/erlang.rs Resolved
…g date lookup

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Entire-Checkpoint: 01M58TKKFDSQWAP65ZYR9F83NA

@cursor cursor Bot left a comment

Copy link
Copy Markdown

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.

Fix All in Cursor

❌ Bugbot Autofix is OFF. To automatically fix reported issues with cloud agents, enable autofix in the Cursor dashboard.

Reviewed by Cursor Bugbot for commit 802292c. Configure here.

Comment thread src/plugins/core/erlang.rs Resolved
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Entire-Checkpoint: 01M58V1H7PHF97NJFFNQYG8RV4
Comment thread src/plugins/core/erlang.rs Resolved
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Entire-Checkpoint: 01M58VEK1MEEGRHBYV10MREZEY
@jdx
jdx enabled auto-merge (squash) October 19, 2026 01:31
@jdx
jdx merged commit 7099aaf into main Oct 19, 2026
63 checks passed
@jdx
jdx deleted the claude/core-release-dates-a-80163a branch October 19, 2026 02:20
jdx added a commit that referenced this pull request Oct 19, 2026
…14701)

<!-- entire-trail-link-start -->
https://entire.io/gh/jdx/mise/trails/900
<!-- entire-trail-link-end -->

The 24h `minimum_release_age` default only applied to backends that
report release dates (aqua, cargo, core, forgejo, gem, github, gitlab,
go, npm, packslip, pypi, spm, ubi). Tools from asdf, vfox, conda,
dotnet, http and s3 got no cutoff at all, even when they could be dated.

Now the default applies to every backend:

```toml
# mise.toml: no minimum_release_age configured
[tools]
"conda:ffmpeg" = "latest"   # was: newest version immediately; now: held back 24h
```

A backend can only hold back versions it knows a date for. When `mise
install`, `mise upgrade` or `mise use` is about to install a version
that has none (see the stacked #14694), mise warns once and names the
escape hatch:

```
WARN  asdf:tiny@3.1.0 has no release date, so the ... cutoff cannot be checked and it is allowed (exclude it with minimum_release_age_excludes to silence this)
```

So a tool is either held back or flagged, never silently unprotected.
Exclude a tool or backend with `minimum_release_age_excludes`, or turn
the delay off with `minimum_release_age = "0s"`.

**Stacked on #14694.** Merge after it, and ideally after the backends
that gain dates (#14691, #14692, #14693, #14695, #14696, #14697).

Behavior to know about: a brand-new tool whose only version is under 24h
old now resolves to "no versions found", as it already does on aqua and
github.

Refs #14689

*AI-assisted β€” Tool: Claude Code; model: anthropic/claude-sonnet-5-5;
version: claude-code_2-1-299_agent.*

πŸ€– Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Medium Risk**
> Changes default version resolution and install warnings for asdf,
vfox, conda, http, and other backends that previously had no release-age
cutoff.
> 
> **Overview**
> Extends the built-in **24h `minimum_release_age`** so it applies to
**all backends**, not only aqua/cargo/core/github/npm-style backends.
Backends like `asdf:`, `vfox:`, `conda:`, `http:`, and `dotnet:` now get
the same default cutoff when resolving prefixes/`latest` (still subject
to `minimum_release_age_excludes` and `minimum_release_age = "0s"`).
> 
> Implementation drops the backend-type whitelist in `install_before.rs`
and applies `DEFAULT_MINIMUM_RELEASE_AGE` whenever a tool has a backend
and is not excluded. **Versions without release dates are still not
filtered**, but installs now **warn once** that the cutoff could not be
checked, with a pointer to **`minimum_release_age_excludes`** to silence
the message. Docs and `settings.toml` describe the universal default and
the warning behavior.
> 
> Tests that rely on the latest-stable fast path disable the default
cutoff via a shared `without_default_release_age()` helper; coverage now
asserts defaults for previously unsupported backends.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
0bc8326. 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>
@github-actions

Copy link
Copy Markdown
Contributor

Instruction counts

benchmark trend instructions Ξ” wall (min) Ξ”
env β–ˆβ–…β–†β–…β–…β–†β– 30,794,986 β†’ 30,760,308 -0.11% 20.26 β†’ 20.76ms +2.47%
hook-env β–ˆβ–ƒβ–ƒβ–…β–‡β–„β– 33,047,139 β†’ 33,026,666 -0.06% 21.10 β†’ 21.44ms +1.62%
ls β–†β–…β–ƒβ–…β–ˆβ–…β– 35,045,790 β†’ 34,987,412 -0.17% 22.57 β†’ 22.66ms +0.42%
registry β–ˆβ–ƒβ–ƒβ–ƒβ–„β–„β– 43,775,791 β†’ 43,705,102 -0.16% 18.70 β†’ 18.48ms -1.18%
startup β–ƒβ–ƒβ–ˆβ–ˆβ–†β–†β– 12,023,393 β†’ 12,001,615 -0.18% 12.62 β†’ 12.55ms -0.54%

No instruction-count regression above 1%.

Only instruction counts gate. Wall clock is shown for context β€” on identical hardware it moves 4-20% run to run.

Measured by tak β€” instruction-counted CLI benchmarks, stored in this repository's git notes.

b4b42435d0e9 vs 9949a2be44be Β· measured on the runner, not pushed to the history.

mise-en-dev added a commit that referenced this pull request Oct 19, 2026
<!-- entire-trail-link-start -->
https://entire.io/gh/jdx/mise/trails/879
<!-- entire-trail-link-end -->

### πŸš€ Features

- **(backend)** serve every backend's version list from the versions
host by @jdx in [#14700](#14700)
- **(bootstrap)** add --prune-dotfiles to remove orphaned dotfiles by
@jdx in [#14681](#14681)
- **(config)** add read_json, read_yaml and read_toml template functions
by @jdx in [#14705](#14705)
- **(config)** apply the default minimum_release_age to every backend by
@jdx in [#14701](#14701)
- **(dotfiles)** add dotfiles.windows_symlinks to link files instead of
copying on Windows by @jdx in
[#14682](#14682)
- **(dotnet)** add lts and sts version aliases by @jdx in
[#14683](#14683)
- **(http)** read release dates for http versions by @jdx in
[#14696](#14696)
- **(install)** add a PowerShell installer at mise.run/powershell by
@jdx in [#14660](#14660)
- **(task)** add -a as a short alias for tasks --all by @williamsjokvist
in [#14674](#14674)
- **(vfox)** let plugins report release dates for minimum_release_age by
@jdx in [#14695](#14695)

### πŸ› Bug Fixes

- **(aqua)** find binaries in macOS universal archives by @jdx in
[#14665](#14665)
- **(aqua)** date github_tag versions so minimum_release_age applies by
@jdx in [#14691](#14691)
- **(backend)** warn when minimum_release_age cannot check a version's
date by @jdx in [#14694](#14694)
- **(conda)** report release dates so minimum_release_age applies by
@jdx in [#14693](#14693)
- **(core)** date dotnet, deno and erlang versions for
minimum_release_age by @jdx in
[#14692](#14692)
- **(core)** date more ruby, python and rust versions so
minimum_release_age applies by @jdx in
[#14697](#14697)
- **(dotfiles)** report copies instead of symlinks for symlink-each on
Windows by @jdx in [#14654](#14654)
- **(fmt)** keep multiline inline tables intact by @jdx in
[#14670](#14670)
- **(http)** retry the install rename on Windows when antivirus holds
the files by @jdx in [#14703](#14703)
- **(install)** extract 7z archives when the data dir contains `..` by
@jdx in [#14657](#14657)
- **(npm)** run allow_builds scripts despite ignore-scripts in .npmrc by
@jdx in [#14661](#14661)
- **(npm)** pin aube-lock.yaml so a user's lockfile settings don't break
mise lock by @jdx in [#14659](#14659)
- **(rust)** list channels when GitHub is unreachable behind a mirror by
@jdx in [#14662](#14662)
- **(shim)** keep the version tag in the Windows release mise-shim.exe
by @jdx in [#14656](#14656)
- **(task)** keep task commands working when one task's dir template is
broken by @jdx in [#14680](#14680)

### 🚜 Refactor

- **(schema)** generate the [deps] and [secrets] schema from their types
by @jdx in [#14658](#14658)
- **(schema)** generate the [daemons] and [daemon_providers] schema from
types by @jdx in [#14663](#14663)
- **(schema)** generate the [hooks] schema from declaration types by
@jdx in [#14666](#14666)
- **(schema)** generate the [bootstrap] raw-value schema from
declaration types by @jdx in
[#14668](#14668)
- **(schema)** generate the [tools] option schemas from declaration
types by @jdx in [#14669](#14669)
- **(schema)** generate the [env] and [vars] schema from declaration
types by @jdx in [#14671](#14671)
- **(schema)** generate the multi-shape task field schemas from
declaration types by @jdx in
[#14672](#14672)

### πŸ“š Documentation

- **(config)** add an interactive mise.toml editor and playground by
@jdx in [#14673](#14673)
- **(config)** hover over keys in every mise.toml example by @jdx in
[#14686](#14686)
- **(config)** turn the mise.toml reference into a key explorer by @jdx
in [#14687](#14687)
- **(config)** show a real example for every mise.toml reference key by
@jdx in [#14690](#14690)
- **(dotnet)** explain how private feeds authenticate by @jdx in
[#14679](#14679)
- **(schema)** describe the remaining bootstrap keys by @jdx in
[#14688](#14688)
- **(secrets)** add setup, CI and migration guidance to the fnox page by
@jdx in [#14675](#14675)
- record the landing-page showreel against current mise so its cache
fills by @jdx in [#14685](#14685)

### πŸ“¦οΈ Dependency Updates

- lock file maintenance by @renovate[bot] in
[#14708](#14708)

### πŸ“¦ Registry

- add release dates to dart, flutter, nim, julia and other http tools by
@jdx in [#14698](#14698)

### Ci

- **(release)** publish releases staged before install.ps1 existed by
@jdx in [#14684](#14684)
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.

1 participant