Node.js : l'ardoise Current a deux mineurs, l'ardoise LTS en a quinze
Le 14 octobre, Richard Lau publie Node.js 26.12.0 (Current) et Node.js 24.22.0 « Krypton » (LTS). L'ardoise du Current a deux lignes SEMVER-MINOR. Celle du LTS en a quinze, plus deux lignes de doc, et le bon de cuisine du LTS ajoute un SEMVER-MINOR qui n'est pas sur l'ardoise.
Deux ardoises sont accrochées le même soir, dans la même cuisine, signées du même nom. Sur la première, le plat du jour tient en deux lignes. Sur la seconde, la craie a beaucoup plus parlé. Les bons de cuisine, derrière, sont plus longs que les ardoises, et ils ne recopient pas la même chose. Si tu commandes « la mise à jour du 14 octobre », tu n'as pas encore dit laquelle des deux ardoises tu lis.
Le 14 octobre 2026, Richard Lau publie Node.js 26.12.0 (Current) et Node.js 24.22.0 (LTS). Les deux titres de section du markdown portent cette date. Le Current s'arrête à Version 26.12.0 (Current), @richardlau. Le LTS écrit Version 24.22.0 'Krypton' (LTS), @richardlau prepared by @aduh95. Nom de code d'un côté. « Préparé par » de l'autre. Le champ date du fichier source, lui, n'est pas la même seconde : 15:23:06.239Z pour le 26.12.0, 15:26:48.742Z pour le 24.22.0. C'est le champ. Ce n'est pas une ligne que le billet t'imprime sous le titre. Je ne la déplace pas.
L'ardoise, c'est la section Notable Changes
Sur le Current, la section a deux lignes, et les deux portent SEMVER-MINOR. La première, Paolo Insogna : lever une erreur s'il manque le support WebAssembly ou RX. La seconde, James M Snell : ajouter websocketMask() et websocketUnmask(). Le sujet nomme les fonctions. Il ne donne pas leur signature. Je ne l'invente pas.
Sur le LTS, j'ai compté dix-sept lignes dans la même section. Quinze sont taguées SEMVER-MINOR. Les deux autres sont de la doc : ajouter araujogui aux collaborateurs, et déprécier Server.prototype._listen2 dans node:net. Les quinze mineurs, dans l'ordre du billet : crypto.parsePKCS12(), une API MAC générique, la découverte des ciphers depuis les providers OpenSSL, la découverte des hashes depuis ces providers, les modes SIV et GCM-SIV dans Cipher et Decipher, l'envoi d'un net.BoundSocket vers des threads et des processus enfants, SlidingWindowHistogram, l'analyse qrde dans Histogram, meanCI sur Histogram, l'export et l'import CBOR d'un histogramme, StatementSync.prototype.close(), StatementSync.prototype[Symbol.dispose](), util.markPromiseAsHandled, util.throttle, et debounce sur une ligne dont le préfixe est util. Quinze plats sur l'ardoise. Deux sur l'autre. Le mot SEMVER-MINOR est le même. Le nombre ne l'est pas.
Le bon de cuisine ne s'arrête pas à l'ardoise
Sous Commits, j'ai compté 105 puces dans le markdown du 26.12.0, et 339 dans celui du 24.22.0. Les deux mineurs du Current sont répétés dans son bon. Ils n'y sont pas seuls.
Le bon du Current a des lignes qui ne sont pas montées sur l'ardoise. build: support Python 3.15. deps: update sqlite to 3.54.0. deps: update acorn to 8.19.0. deps: update simdjson to 5.0.3. src: mark config file as stable. process: mark process.finalization as release candidate. « Stable » et « release candidate » sont les mots du sujet de commit. Je ne les allonge pas en description d'API. Et je ne les transporte pas sur le LTS : ces sujets-là, je ne les ai pas trouvés dans le billet 24.22.0. La ligne Python 3.15 non plus. Absence dans un billet. Pas un refus du runtime.
Le bon du LTS a le décalage inverse, plus petit. Les quinze SEMVER-MINOR de son ardoise y sont répétés. Une seizième puce porte le même tag et n'était pas sur l'ardoise : test: expand histogram test coverage. C'est un commit de test. Je n'en fais pas une fonction que tu appellerais.
Ce que le bon du Current ne monte pas à la craie
Je ne vais pas recopier les 105 puces. J'en pose quelques-unes qui restent en cuisine, parce que leur sujet dit déjà quelque chose, et que l'ardoise ne les a pas reprises.
module: synchronously load most ES modules. sqlite: throw on oversized strings instead of aborting. sqlite: persist enableDefensive() across reopen. child_process: propagate config-file permission flags to children. À côté, quatre lignes quic : reject closed stream writer writes with a TypeError, give each BindingData its own allocator state, validate session close error codes, destroy stream on invalid promise body. Et la ligne déjà citée, src: mark config file as stable, partage son numéro de pull request, #66431, avec src: fix config file handling. Deux sujets, un même numéro. L'un dit « fix ». L'autre dit « stable ». L'ardoise n'a ni l'un ni l'autre.
Rien de tout ça n'est tagué SEMVER-MINOR dans le bon du Current. Le tag, sur ce billet-là, je ne l'ai vu que sur les deux lignes de l'ardoise, répétées dans le bon. Je ne promeus pas une puce de commit au rang de mineur parce que le sujet a l'air gros. « Synchronously load most ES modules » a l'air gros. Le tag n'y est pas. Je le laisse où il est.
Sur le LTS, l'ardoise a déjà fait le tri inverse : les quinze mineurs sont devant, et le seizième tagué est un test resté dans le bon. Deux cuisines, le 14 octobre. L'une met le mineur sur l'ardoise et garde le test derrière. L'autre met deux mineurs sur l'ardoise et laisse « stable », « release candidate » et Python 3.15 dans le bon.
✍️ À toi : le
node -vque ton projet lance vraiment, et s'il est sur la ligne Current ou sur la ligne LTS. Les deux ardoises sont datées du même jour. Ton binaire n'en a qu'une.
Le 14 octobre, la cuisine a sorti deux services. L'ardoise du Current a deux mineurs, WebAssembly ou RX, et deux fonctions de masque WebSocket. L'ardoise du LTS, nommée Krypton, en a quinze, plus deux lignes de doc. Derrière, le bon du Current parle d'un fichier de config marqué stable et d'un process.finalization marqué release candidate, sans les avoir écrits à la craie. Le bon du LTS a un SEMVER-MINOR de plus que son ardoise, et c'est une couverture de tests. Même date. Deux ardoises. Tu commandes à celle que ton binaire a affichée.