Skip to content

v0.1.142

Choose a tag to compare

@github-actions github-actions released this 27 Aug 20:46
· 49 commits to main since this release
1ea363b

⚠️ La 0.1.141 n'existe pas, et voici pourquoi. Son tag a été poussé sur le commit de main
précédent la fusion du train — un commit où package.json déclare encore 0.1.140 et où cette
section n'existait pas. Le job verifier a refusé (tag v0.1.141 != package.json version) et
rien n'a été publié : ni npm, ni Release, ni attestation. La garde a fait exactement son
travail, sur la sortie même du dépôt.

Le tag ne peut pas être retiré — le ruleset des tags interdit leur suppression, ce que
docs/RELEASING.md annonçait déjà (« tag protection then makes awkward to withdraw »). Plutôt
que de désarmer cette protection pour contourner sa propre garde, ce train sort en 0.1.142 : le
tag mort cesse alors d'être le plus haut, et image-reconcile — qui exige que le plus haut tag ait
une image servie — redevient sain sans qu'on touche à rien. Le numéro sauté est le prix, et il est
écrit ici pour qu'aucun lecteur n'ait à deviner.

Security

  • ⚠️ Dix étiquettes d'erreur que l'appelant choisissait, et rien ne les bornait.
    route: String(body.action || "(sans action)"), écrit dix fois à l'identique dans trois fichiers
    de routes. body.action vient du corps de la requête, donc de n'importe qui muni d'un lien : un
    mégaoctet de texte, des retours à la ligne, des guillemets, des octets de contrôle. Ça partait
    ensuite dans le puits d'erreurs de l'hôte — Sentry, un journal ligne-par-ligne, un fichier —
    dont ce paquet ne connaît ni le format ni les échappements.
    ⚠️ Ce qui est empêché n'est pas « une grosse chaîne », c'est la forgerie de structure : un
    saut de ligne ouvre une entrée de journal qui n'a jamais eu lieu, un guillemet ouvre un champ dans
    un puits qui concatène du JSON. Seuls les caractères dont une action est faite traversent
    désormais, et la troncature se dit () plutôt que de se lire comme un nom véritable.
    (sans action) et (action illisible) restent deux constats distincts. Aucune action légitime
    n'est affectée. Rien à faire côté hôte.

Fixed

  • ⚠️ docs/HOST-CONTRACT.md demandait aux hôtes plus que ce dont la purge a besoin, et le geste
    « évident » pour s'y conformer aurait été destructeur.
    La page disait « write it with the same
    fingerprint the player computes, and nothing else »
    ; la seule propriété nécessaire est que le
    hash de la ligne soit le nom de base de l'objet. Un hôte a rapporté le 27/08 un troisième
    écrivain utilisant preview-fr-v2 là où le lecteur utilise v2 : parfaitement sain, non conforme
    sur le papier, et réaligner sa formule aurait orphelinné définitivement 908 objets — les fichiers
    portent l'ANCIENNE empreinte dans leur nom. La page distingue désormais l'exigence (le balayage)
    de l'option (partager un clip avec la route du lecteur), et nomme le banc qui tient la propriété.
  • Le tableau des verdicts de schema avait perdu sa cinquième valeur. indetermine vivait
    depuis la 0.1.64 (18/08) en ligne de tableau avalée par le paragraphe précédent, faute d'une ligne
    vide — donc rendue en prose, au milieu d'un avertissement sur un autre sujet. Un hôte qui parse ce
    tableau y trouvait quatre valeurs pour cinq possibles.
  • non-sonde et partiel portent maintenant leur piège dans leur cellule, comme le fait déjà
    presenceDurcissement trois lignes plus haut : la sonde est PARESSEUSE et locale au processus,
    donc ces deux verdicts disent ce que ce processus a demandé jusqu'ici, jamais l'état du schéma.
    Un hôte a relevé trois valeurs différentes en une journée sur une base inchangée et a failli
    signaler une régression inexistante.
  • ⚠️ La sentinelle des exemples se réannonçait à chaque tour. L'issue #412 a reçu son corps puis
    quatre commentaires identiques au caractère près en dix heures, pour zéro information nouvelle —
    le mécanisme de fatigue d'alarme que l'en-tête de publication.yml condamne chez les autres.
    Elle ne parle désormais que sur changement de FAIT (version servie ou état d'un exemple), via une
    empreinte portée dans le corps de l'issue. Un aller-retour sur la même version reste un fait neuf.
    ⚠️ Et ce marqueur ne peut plus sortir de son commentaire : l'empreinte est bâtie sur des chemins
    lus sur le disque, et un > les fermait en avance — auquel cas la forge aurait comparé à un
    marqueur différent de celui publié, donc alarme répétée sans fin ou muette pour toujours. Relevé
    par CodeQL sur le banc qui vérifiait la forme ; le défaut était sous l'assertion, pas dedans.

Added

  • ctx.has(name) est documentée, après avoir été mesurée : implémentée dans le contexte
    autonome, appelée par aucune ligne de server/, absente du contrat, et recopiée dans 57 fixtures
    sur 45 fichiers. Un hôte l'implémentait correctement sans le savoir, parce que le type la
    déclarait. Rien n'est câblé — la page dit ce qu'elle est, pour qu'une couture qui fonctionne
    cesse d'être un accident à un renommage près de la suppression.

What changed in the package, by zone — 0.1.1400.1.142

Measured on the two tarballs, by the release workflow. Not written by hand.

Zone What it is Added Removed Changed
documents what a human reads 0 0 1
manifest package.json — version, exports, dependencies 0 0 1
server the code the host executes 0 0 4
context the injected-context implementations 0 0 0
browser-types the declarations the host's tsc reads for « ./bridge » — breaks a build, never a page 0 0 0
browser what the visitors' page executes 0 0 0
cli the command-line entry point 0 0 0
types declarations for the server and context entry points — breaks a build, never runtime 0 0 0
database the schema and the migrations the host applies itself 0 0 0
The files themselves
~ docs/HOST-CONTRACT.md
~ package.json
~ server/reponses.js
~ server/routes-agent.js
~ server/routes-direct.js
~ server/routes-liens.js