Skip to content

fix(dependencies): 🐛 Never pick a Modrinth/Smithed lib made for a newer MC version - #57

Merged
Stoupy51 merged 3 commits into
mainfrom
fix/modrinth-newer-mc-fallback
Sep 24, 2026
Merged

Stoupy51 merged 3 commits into
mainfrom
fix/modrinth-newer-mc-fallback

Conversation

@Stoupy51

@Stoupy51 Stoupy51 commented Sep 24, 2026 •

Copy link
Copy Markdown
Owner

Problème

Survisland (MC 26.2) a embarqué Furnace NBT Recipes 1.11.0 et Cinemalya 1.0.3, deux versions faites pour la 26.3.

Modrinth : dans resolve_modrinth_lib, StewBeet commence par demander à Modrinth les versions taguées game_versions=["<mc>"]. Si la liste revient vide (aucune version n'est taguée exactement 26.2 : FNR 1.10.1 est taguée 1.21.8–1.21.11, et 1.10.2/1.11.0 sont taguées 26.3), il se rabat sur toutes les versions et prend la plus récente. Aucune vérification de la version MC n'est faite et rien n'est affiché.

Smithed : il y a deux problèmes dans mc_compatible / resolve_smithed_lib :

  • parse_version("26.3-snapshot-1") renvoie (26,), qui est inférieur à (26, 2). Une version faite pour un snapshot 26.3 était donc jugée compatible avec 26.2.
  • max(compat or versions, ...) se rabattait sans rien afficher sur la dernière version quand aucune n'était compatible.

Correctif

  • Les versions MC sont comparées avec stp.version_to_float (déjà utilisé dans plugins/finalyze/dependencies), via mc_floats, qui ignore infinite. Avec cette fonction, 26.3-snapshot-1 est plus récent que 26.2 et 26.2-rc1 plus ancien.
  • Modrinth : dans le repli, modrinth_older_versions ne garde que les versions dont toutes les game_versions sont ≤ la version MC du projet. L'ordre de Modrinth est conservé.
  • Smithed : la logique est regroupée dans latest_smithed_compatible, qui est utilisée pour la version épinglée comme pour la version non épinglée. Les noms de version sont aussi triés avec version_to_float, pour que 1.0.0rc1 passe avant 1.0.0.
  • Quand aucune version compatible n'existe, le comportement actuel est conservé (on prend la dernière version), mais avec un stp.warning.

Tests

Réponses d'API simulées, avec un projet en 26.2 (sauf mention contraire).

Modrinth :

Cas Avant Après
Aucune version taguée 26.2 1.11.0 (26.3) 1.10.1
Version taguée 26.2 trouvée inchangé inchangé
Aucune version assez ancienne 1.11.0, sans message 1.11.0 + warning
API injoignable ignorée ignorée

Smithed (versions : 1.2.0→26.3, 1.1.0→26.3-snapshot-1, 1.0.0→1.21.11, 26.2, 0.9.0→1.21.8) :

Cas Après
Projet en 26.2 (correspondance exacte) 1.0.0
Projet en 26.1 0.9.0 (avant : 1.1.0, à cause du snapshot parsé en (26,))
Uniquement des versions 26.3 / snapshot la dernière + warning
Version épinglée introuvable 1.0.0 + warning
Version épinglée trouvée inchangé

Les 5 doctests du module et ruff check passent.

🤖 Generated with Claude Code

https://claude.ai/code/session_01QuzqbqTP5ARxz8b3MZyEy1

…rsion

When no Modrinth version is tagged with the project's exact MC version, the
fallback fetched every version and took the latest one, silently picking a
lib built for a newer MC (ex: Furnace NBT Recipes 1.11.0 for 26.3 on a 26.2
project). Now only versions whose release game_versions are all <= the
project's MC version are kept, with a warning if none remain.

Claude-Session: https://claude.ai/code/session_01QuzqbqTP5ARxz8b3MZyEy1
…sion

- Ignore snapshot/pre-release MC versions when comparing: '26.3-snapshot-1'
  was parsed as (26,), which is lower than (26, 2), so a lib made for a 26.3
  snapshot was considered compatible with 26.2.
- Warn when no Smithed release supports the project's MC version (or older)
  instead of silently falling back to the latest one.
- Share the release version parsing between the Smithed and Modrinth providers.

Claude-Session: https://claude.ai/code/session_01QuzqbqTP5ARxz8b3MZyEy1
@Stoupy51 Stoupy51 changed the title fix(dependencies): 🐛 Never pick a Modrinth lib made for a newer MC version fix(dependencies): 🐛 Never pick a Modrinth/Smithed lib made for a newer MC version Sep 24, 2026
…on_to_float

Replace the custom release-only regex by stouputils' version_to_float, which
handles snapshots, release candidates and pre-releases (ex: '26.3-snapshot-1'
is newer than 26.2, '26.2-rc1' is older). Lib version names are also sorted
with it so that '1.0.0rc1' comes before '1.0.0'.

Claude-Session: https://claude.ai/code/session_01QuzqbqTP5ARxz8b3MZyEy1
@Stoupy51
Stoupy51 merged commit 50adda4 into main Sep 24, 2026
4 of 6 checks passed
@Stoupy51
Stoupy51 deleted the fix/modrinth-newer-mc-fallback branch September 24, 2026 11:42
Stoupy51 added a commit that referenced this pull request Oct 6, 2026
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