v0.1.144
0.1.143 est partie à
15:10. La règle de cadence de docs/RELEASING.md dit « un train par jour au plus » avec trois
exceptions — sécurité, paquet cassé sur le registre, réparation de la chaîne de publication — et
celui-ci n'en est aucune. C'est une décision du mainteneur, dont le document dit qu'elle lui revient
(« ce qui est dans ce train, et s'il en vaut un »). Elle est consignée ici parce que le contraire a
déjà coûté : le 25/08, la règle annonçait deux exceptions, la pratique en utilisait une troisième, et
un audit externe a demandé laquelle des deux mentait. Un écart énoncé vaut mieux qu'un écart tu.
Changed
⚠️ La carte publie un NOM de migration, plus un chemin — parce qu'une garde de sécurité d'hôte
tirait dessus, et que la doctrine de ce dépôt dit que c'est à l'émetteur de céder. Une garde de
la session STUDIO refuse toute carte d'identité contenantsupabase|secret|key|token: un
balayage de texte volontairement grossier, qui protège une réponse publique contre la fuite
d'une URL de projet, d'une clé ou d'un jeton. Nos valeurs étaient préfixées
supabase/migrations/…— faux positif sans ambiguïté, mais le refus était bien fondé.
⚠️ Le préfixe part, la garde reste.presenceJetonsporte ce nom (et nonpresenceTokens)
parce que cette même garde avait déjà tiré une fois, et le commentaire qui l'accompagne posait
déjà la règle : le bon geste face à son refus est de changer ce qu'on émet, jamais de desserrer
la garde. Nous avions donc la doctrine, et nous l'avons ratée à la première occasion où l'émetteur
c'était nous sur une valeur plutôt que sur un nom de champ. Le répertoire ne se perd pas : il
est dit une fois dansHOST-CONTRACT.md, et le journal de l'exploitant continue d'imprimer le
chemin complet — ce message s'adresse à quelqu'un qui le lit, pas à un balayage.
⚠️ Le cas est instructif par la façon dont il s'est réveillé :manquantpubliait ces chemins
depuis toujours, mais restait[]chez cet hôte — la garde était donc verte depuis des mois dans
une configuration où son sujet ne pouvait pas apparaître. Il a falluconnues, qui les liste
sans condition, pour la faire tirer. Même motif que la carte qui disait « complet » sans couvrir
une migration, sur une garde de sécurité cette fois.
⚠️ Et retirer le préfixe ne règle que la collision du jour, pas la classe — remarque du même
hôte, et elle est juste : le nom de fichier reste une valeur que nous choisissons, donc
0031-refresh-token-rotation.sqlrouvrirait le même refus des mois plus tard, chez tous les hôtes
à la fois. Deux bancs ferment ça, et convertissent une habitude de nommage en règle mesurée :
l'un balaiesupabase/migrations/et refuse un nom fautif au moment où on l'écrit ; l'autre
rend la carte réelle et passe le JSON sérialisé, clés comprises, au motif de l'hôte. Chacun a
ses contrôles positifs : sans eux, ils passeraient aussi bien sur une carte vide ou un motif mort.
What changed in the package, by zone — 0.1.143 → 0.1.144
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 | 1 |
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/schema.js