0.13.0 est taguée mais pas publiée : les mécanismes de rétrofit sont injoignables par les dépôts pour qui ils ont été écrits #94

Closed
opened 2026-09-30 15:23:50 +00:00 by nicolas-fryder · 3 comments

Ce qui se passe

Le registre sert 0.12.2 pour les dix packages. Le dépôt est en 0.13.0, taguée.

$ for p in tooling config errors telemetry auth http platform-nest platform-next testing cli; do
    printf "@eqs/%-15s registre=%s\n" "$p" "$(pnpm view @eqs/$p version)"
  done
@eqs/tooling         registre=0.12.2
@eqs/config          registre=0.12.2
@eqs/errors          registre=0.12.2
@eqs/telemetry       registre=0.12.2
@eqs/auth            registre=0.12.2
@eqs/http            registre=0.12.2
@eqs/platform-nest   registre=0.12.2
@eqs/platform-next   registre=0.12.2
@eqs/testing         registre=0.12.2
@eqs/cli             registre=0.12.2

Côté dépôt, la sortie est allée jusqu'au bout sauf la publication :

$ git tag -l '*0.13.0'
@eqs/auth@0.13.0
@eqs/cli@0.13.0
@eqs/config@0.13.0
@eqs/errors@0.13.0
@eqs/http@0.13.0
@eqs/platform-nest@0.13.0
@eqs/platform-next@0.13.0
@eqs/telemetry@0.13.0
@eqs/testing@0.13.0
@eqs/tooling@0.13.0

Les dix package.json portent 0.13.0, les dix CHANGELOG.md ont leur section ## 0.13.0, et 259ac85 / 107021a (PR #91) ont fusionné « Version 0.13.0 : le rétrofit d'un existant, et trois défauts de la passe » dans main.

Autrement dit : changeset version a tourné, les tags sont posés, et le registre n'a rien reçu.

Pourquoi c'est plus gênant que d'habitude

0.13.0 est précisément la version du rétrofit. Ce qu'elle contient et qui n'est joignable par personne :

ticket / décision sans quoi
eqs.check.taches dans le manifeste #84, D-049 un dépôt qui a une tâche de plus doit garder son scripts/check.mjs, c'est-à-dire refuser la porte du socle
knipSatellite() voit une application à la racine #83 knip rend vert sur du vide sur un existant
testing.regle-jamais-jouee honore sa dispense 65aae3c porte rouge quoi qu'on écrive
tooling.eslint-etend suit le profil déclaré d0da733 conseille nest à un dépôt next-fullstack

Ces quatre-là ont été écrits en rétrofittant ATLAS, pour que le rétrofit suivant n'ait pas à les redécouvrir. Le rétrofit suivant, c'est nuage, il a commencé aujourd'hui, et il ne peut pas les installer.

C'est un mode d'échec silencieux : pnpm add @eqs/testing réussit, sert la 0.12.2, et eqs.check.taches est ignoré sans rien dire — un manifeste mal lu ne lève pas (D-049 le veut ainsi, pour de bonnes raisons). On croit avoir déclaré ses tâches ; elles ne tournent pas.

Ce que je ne sais pas

Si changeset publish a échoué après avoir posé les tags, ou s'il n'a jamais été lancé. Les deux laissent le même état. ETAT.md note au 2026-09-17 « deux changesets en attente ; rien n'est publié » pour la passe précédente, donc la publication est manuelle depuis un poste avec le jeton d'écriture d'eqs-ci (D-032) — il n'y a pas de CI qui publie, et donc rien qui constate qu'une version taguée n'est pas sortie.

Il reste par ailleurs un changeset non consommé dans .changeset/ (pile-e2e-secret-refuse.md), et dev a deux commits d'avance sur la 0.13.0 (c21ad5c, 335ae51).

Ce que je proposerais

  1. Publier 0.13.0. C'est l'urgence : dix tags qui ne correspondent à rien de téléchargeable.
  2. Un contrôle qui compare les tags au registre. eqs doctor sur le dépôt du socle, ou une tâche de sa porte : pour chaque package, version du package.json versus pnpm view <pkg> version. Une divergence est soit une publication en attente, soit une publication ratée — dans les deux cas quelqu'un doit le savoir, et aujourd'hui personne ne l'apprend avant qu'un satellite ne tombe dessus.
  3. À défaut, une ligne dans ETAT.md qui dise ce qui est publié, distinct de ce qui est versionné. ETAT.md décrit « ce qui est vrai » ; « 0.13.0 existe » et « 0.13.0 est installable » sont deux vérités différentes, et c'est la seconde qui intéresse les trente satellites.

Contournement

Aucun de propre. nuage déroule son étage 0 (les planchers de version : Node 22, pnpm 11, vitest 3, TypeScript 5.9, class-validator 0.15, @nestjs/swagger 12) qui ne dépend pas des packages, et s'arrête avant de les installer. Installer la 0.12.2 pour « avancer » reviendrait à rétrofitter avec la version d'avant les correctifs du rétrofit, puis à tout revérifier — c'est le contournement hasardeux que ce chantier s'interdit.

Contexte

Rétrofit de nuage (EQS-Sandbox/NUAGE, branche retrofit-socle-eqs), profil nest, tâche 6 sur 11 du plan docs/superpowers/plans/2026-09-30-retrofit-etages-0-2.md. Trouvé à la première commande qui interrogeait le registre. Voir aussi #93 : un guide de rétrofit aurait dit « vérifier que la version dont vous avez besoin est publiée » en étape 1.

## Ce qui se passe Le registre sert **0.12.2** pour les dix packages. Le dépôt est en **0.13.0**, taguée. ``` $ for p in tooling config errors telemetry auth http platform-nest platform-next testing cli; do printf "@eqs/%-15s registre=%s\n" "$p" "$(pnpm view @eqs/$p version)" done @eqs/tooling registre=0.12.2 @eqs/config registre=0.12.2 @eqs/errors registre=0.12.2 @eqs/telemetry registre=0.12.2 @eqs/auth registre=0.12.2 @eqs/http registre=0.12.2 @eqs/platform-nest registre=0.12.2 @eqs/platform-next registre=0.12.2 @eqs/testing registre=0.12.2 @eqs/cli registre=0.12.2 ``` Côté dépôt, la sortie est allée jusqu'au bout **sauf la publication** : ``` $ git tag -l '*0.13.0' @eqs/auth@0.13.0 @eqs/cli@0.13.0 @eqs/config@0.13.0 @eqs/errors@0.13.0 @eqs/http@0.13.0 @eqs/platform-nest@0.13.0 @eqs/platform-next@0.13.0 @eqs/telemetry@0.13.0 @eqs/testing@0.13.0 @eqs/tooling@0.13.0 ``` Les dix `package.json` portent `0.13.0`, les dix `CHANGELOG.md` ont leur section `## 0.13.0`, et `259ac85` / `107021a` (PR #91) ont fusionné « Version 0.13.0 : le rétrofit d'un existant, et trois défauts de la passe » dans `main`. Autrement dit : `changeset version` a tourné, les tags sont posés, **et le registre n'a rien reçu**. ## Pourquoi c'est plus gênant que d'habitude 0.13.0 est précisément la version du **rétrofit**. Ce qu'elle contient et qui n'est joignable par personne : | | ticket / décision | sans quoi | | --- | --- | --- | | `eqs.check.taches` dans le manifeste | #84, D-049 | un dépôt qui a une tâche de plus doit garder son `scripts/check.mjs`, c'est-à-dire refuser la porte du socle | | `knipSatellite()` voit une application à la racine | #83 | knip rend **vert sur du vide** sur un existant | | `testing.regle-jamais-jouee` honore sa dispense | 65aae3c | porte rouge quoi qu'on écrive | | `tooling.eslint-etend` suit le profil déclaré | d0da733 | conseille `nest` à un dépôt `next-fullstack` | Ces quatre-là ont été écrits **en rétrofittant ATLAS**, pour que le rétrofit suivant n'ait pas à les redécouvrir. Le rétrofit suivant, c'est `nuage`, il a commencé aujourd'hui, et il ne peut pas les installer. C'est un mode d'échec silencieux : `pnpm add @eqs/testing` réussit, sert la 0.12.2, et `eqs.check.taches` est ignoré **sans rien dire** — un manifeste mal lu ne lève pas (D-049 le veut ainsi, pour de bonnes raisons). On croit avoir déclaré ses tâches ; elles ne tournent pas. ## Ce que je ne sais pas Si `changeset publish` a échoué après avoir posé les tags, ou s'il n'a jamais été lancé. Les deux laissent le même état. `ETAT.md` note au 2026-09-17 « deux changesets en attente ; rien n'est publié » pour la passe précédente, donc la publication est manuelle depuis un poste avec le jeton d'écriture d'`eqs-ci` (D-032) — il n'y a pas de CI qui publie, et donc rien qui constate qu'une version taguée n'est pas sortie. Il reste par ailleurs un changeset non consommé dans `.changeset/` (`pile-e2e-secret-refuse.md`), et `dev` a deux commits d'avance sur la 0.13.0 (`c21ad5c`, `335ae51`). ## Ce que je proposerais 1. **Publier 0.13.0.** C'est l'urgence : dix tags qui ne correspondent à rien de téléchargeable. 2. **Un contrôle qui compare les tags au registre.** `eqs doctor` sur le dépôt du socle, ou une tâche de sa porte : pour chaque package, `version` du `package.json` versus `pnpm view <pkg> version`. Une divergence est soit une publication en attente, soit une publication ratée — dans les deux cas quelqu'un doit le savoir, et aujourd'hui personne ne l'apprend avant qu'un satellite ne tombe dessus. 3. À défaut, une ligne dans `ETAT.md` qui dise **ce qui est publié**, distinct de ce qui est versionné. `ETAT.md` décrit « ce qui est vrai » ; « 0.13.0 existe » et « 0.13.0 est installable » sont deux vérités différentes, et c'est la seconde qui intéresse les trente satellites. ## Contournement Aucun de propre. `nuage` déroule son étage 0 (les planchers de version : Node 22, pnpm 11, vitest 3, TypeScript 5.9, `class-validator` 0.15, `@nestjs/swagger` 12) qui ne dépend pas des packages, et s'arrête avant de les installer. Installer la 0.12.2 pour « avancer » reviendrait à rétrofitter avec la version d'avant les correctifs du rétrofit, puis à tout revérifier — c'est le contournement hasardeux que ce chantier s'interdit. ## Contexte Rétrofit de `nuage` (`EQS-Sandbox/NUAGE`, branche `retrofit-socle-eqs`), profil `nest`, tâche 6 sur 11 du plan `docs/superpowers/plans/2026-09-30-retrofit-etages-0-2.md`. Trouvé à la première commande qui interrogeait le registre. Voir aussi #93 : un guide de rétrofit aurait dit « vérifier que la version dont vous avez besoin est publiée » en étape 1.
Author
Owner

La prémisse est fausse, et ça change l'action

0.13.0 est publiée. Elle est sous l'étiquette next depuis le 2026-09-21, exactement là où D-037 la met.

Le ticket a interrogé pnpm view @eqs/x version, qui ne rend que latest. La lecture complète :

@eqs/tooling         latest=0.12.2   next=0.13.0
@eqs/config          latest=0.12.2   next=0.13.0
@eqs/errors          latest=0.12.2   next=0.13.0
@eqs/telemetry       latest=0.12.2   next=0.13.0
@eqs/auth            latest=0.12.2   next=0.13.0
@eqs/http            latest=0.12.2   next=0.13.0
@eqs/platform-nest   latest=0.12.2   next=0.13.0
@eqs/platform-next   latest=0.12.2   next=0.13.0
@eqs/testing         latest=0.12.2   next=0.13.0
@eqs/cli             latest=0.12.2   next=0.13.0

Ce qui n'a pas eu lieu, c'est l'étape 5 (pnpm promouvoir). Et elle n'a pas eu lieu parce que l'étape 4 était rouge : le bac à sable d'eqs-demo a trouvé le BREAK_GLASS_SECRET de la pile e2e. c21ad5c le dit lui-même — « Mesuré sur eqs-demo contre 0.13.0 fraîchement publié ».

Autrement dit : il n'y a pas de publication ratée à rattraper. La procédure a fonctionné comme elle est écrite, et s'est arrêtée au feu rouge.

0.13.0 ne sera jamais promue : elle porte un défaut mesuré. Le correctif est sur dev et sortira en 0.14.0, qui contient tout 0.13.0.

Le contournement existe, et il est propre

Le ticket écrit « Aucun de propre ». Il y en a un : la version exacte.

pnpm add @eqs/testing@0.13.0   # ou @next

Les quatre mécanismes que le rétrofit attend y sont — eqs.check.taches (#84, D-049), knipSatellite() sur une application à la racine (#83), la dispense de testing.regle-jamais-jouee, tooling.eslint-etend qui suit le profil déclaré. Le seul défaut connu de 0.13.0 ne mord qu'à eqs e2e up, hors de portée des étages 0-2 de nuage.

Le manque, lui, était réel

Le ticket écrivait : « Si changeset publish a échoué après avoir posé les tags, ou s'il n'a jamais été lancé. Les deux laissent le même état. » La question était bonne — il manquait la commande qui y répond.

pnpm check:publication (scripts/etat-publication.mjs) distingue quatre états que latest seul confondait :

état verdict
promue rien à faire
candidate en attente l'étape 4 n'a pas rendu son verdict
candidate dépassée le dépôt a avancé depuis le tag — ne pas promouvoir
jamais publiée le seul vrai défaut, celui que ce ticket croyait voir

Sur le dépôt aujourd'hui, il rend « candidate dépassée, 2 commits après le tag », et renvoie vers une version neuve au lieu d'une promotion. C'est la bonne réponse.

Éprouvé en le cassant, sur quatre fixtures hors du dépôt : version absente du registre (code 1), versions divergentes en mode fixed (code 1), version promue (code 0), candidate dépassée (code 0). Chacune rend le bon message et le bon code de sortie — la première version les rendait toutes en 127, parce qu'un process.exit() juste après un fetch lève Assertion failed: !(handle->flags & UV_HANDLE_CLOSING) sous Windows.

Sur la proposition 2 du ticket (« comparer les tags au registre ») : telle quelle, elle aurait été rouge à chaque fenêtre de candidate, donc apprise comme du bruit et ignorée. C'est pour ça que le contrôle distingue les états au lieu de signaler une divergence. Il n'est pas dans pnpm check : celui-ci tient hors ligne, et le pre-push dépasse déjà son budget. Il est joué en étape 0 et en étape 6 de la sortie (AGENTS.md).

La proposition 3 est faite aussi : ETAT.md porte maintenant deux tableaux, « ce qui est versionné » et « ce qui est installable ».

Ce qui reste, et pourquoi ce ticket reste ouvert

Publier 0.14.0. Il se ferme quand elle est promue, pas avant — la seule chose qui débloque vraiment nuage est une version sous latest.

PR #95. Voir aussi #92 et #93, ouverts par le même rétrofit et corrigés dans la même passe.

## La prémisse est fausse, et ça change l'action 0.13.0 **est publiée**. Elle est sous l'étiquette `next` depuis le 2026-09-21, exactement là où D-037 la met. Le ticket a interrogé `pnpm view @eqs/x version`, qui ne rend que `latest`. La lecture complète : ``` @eqs/tooling latest=0.12.2 next=0.13.0 @eqs/config latest=0.12.2 next=0.13.0 @eqs/errors latest=0.12.2 next=0.13.0 @eqs/telemetry latest=0.12.2 next=0.13.0 @eqs/auth latest=0.12.2 next=0.13.0 @eqs/http latest=0.12.2 next=0.13.0 @eqs/platform-nest latest=0.12.2 next=0.13.0 @eqs/platform-next latest=0.12.2 next=0.13.0 @eqs/testing latest=0.12.2 next=0.13.0 @eqs/cli latest=0.12.2 next=0.13.0 ``` Ce qui n'a pas eu lieu, c'est l'**étape 5** (`pnpm promouvoir`). Et elle n'a pas eu lieu **parce que l'étape 4 était rouge** : le bac à sable d'`eqs-demo` a trouvé le `BREAK_GLASS_SECRET` de la pile e2e. `c21ad5c` le dit lui-même — « Mesuré sur `eqs-demo` contre 0.13.0 fraîchement publié ». Autrement dit : il n'y a pas de publication ratée à rattraper. La procédure a fonctionné comme elle est écrite, et s'est arrêtée au feu rouge. **0.13.0 ne sera jamais promue** : elle porte un défaut mesuré. Le correctif est sur `dev` et sortira en 0.14.0, qui contient tout 0.13.0. ## Le contournement existe, et il est propre Le ticket écrit « Aucun de propre ». Il y en a un : la version exacte. ```bash pnpm add @eqs/testing@0.13.0 # ou @next ``` Les quatre mécanismes que le rétrofit attend y sont — `eqs.check.taches` (#84, D-049), `knipSatellite()` sur une application à la racine (#83), la dispense de `testing.regle-jamais-jouee`, `tooling.eslint-etend` qui suit le profil déclaré. Le seul défaut connu de 0.13.0 ne mord qu'à `eqs e2e up`, hors de portée des étages 0-2 de `nuage`. ## Le manque, lui, était réel Le ticket écrivait : « Si `changeset publish` a échoué après avoir posé les tags, ou s'il n'a jamais été lancé. Les deux laissent le même état. » La question était bonne — il manquait la commande qui y répond. `pnpm check:publication` (`scripts/etat-publication.mjs`) distingue quatre états que `latest` seul confondait : | état | verdict | | --- | --- | | **promue** | rien à faire | | **candidate en attente** | l'étape 4 n'a pas rendu son verdict | | **candidate dépassée** | le dépôt a avancé depuis le tag — **ne pas promouvoir** | | **jamais publiée** | le seul vrai défaut, celui que ce ticket croyait voir | Sur le dépôt aujourd'hui, il rend « candidate dépassée, 2 commits après le tag », et renvoie vers une version neuve au lieu d'une promotion. C'est la bonne réponse. Éprouvé en le cassant, sur quatre fixtures hors du dépôt : version absente du registre (code 1), versions divergentes en mode `fixed` (code 1), version promue (code 0), candidate dépassée (code 0). Chacune rend le bon message **et** le bon code de sortie — la première version les rendait toutes en 127, parce qu'un `process.exit()` juste après un `fetch` lève `Assertion failed: !(handle->flags & UV_HANDLE_CLOSING)` sous Windows. Sur la proposition 2 du ticket (« comparer les tags au registre ») : telle quelle, elle aurait été **rouge à chaque fenêtre de candidate**, donc apprise comme du bruit et ignorée. C'est pour ça que le contrôle distingue les états au lieu de signaler une divergence. Il n'est pas dans `pnpm check` : celui-ci tient hors ligne, et le pre-push dépasse déjà son budget. Il est joué en étape 0 et en étape 6 de la sortie (`AGENTS.md`). La proposition 3 est faite aussi : `ETAT.md` porte maintenant deux tableaux, « ce qui est versionné » et « ce qui est installable ». ## Ce qui reste, et pourquoi ce ticket reste ouvert Publier 0.14.0. Il se ferme quand elle est promue, pas avant — la seule chose qui débloque vraiment `nuage` est une version sous `latest`. PR #95. Voir aussi #92 et #93, ouverts par le même rétrofit et corrigés dans la même passe.
Author
Owner

0.14.0 est promue. Fermé.

Par la commande même que ce ticket avait utilisée pour constater le problème :

$ for p in tooling config errors telemetry auth http platform-nest platform-next testing cli; do
    printf "@eqs/%-15s %s\n" "$p" "$(pnpm view @eqs/$p version)"
  done
@eqs/tooling         0.14.0
@eqs/config          0.14.0
@eqs/errors          0.14.0
@eqs/telemetry       0.14.0
@eqs/auth            0.14.0
@eqs/http            0.14.0
@eqs/platform-nest   0.14.0
@eqs/platform-next   0.14.0
@eqs/testing         0.14.0
@eqs/cli             0.14.0

Et par le contrôle neuf, qui lit les étiquettes plutôt que la seule latest :

$ pnpm check:publication
Dépôt en 0.14.0 · 10 paquets

  @eqs/auth           latest=0.14.0   next=0.14.0   promue
  … les dix, idem

Les 10 paquets sont promus en 0.14.0.

0.13.0 n'a jamais été promue et ne le sera jamais. Son contenu est dans 0.14.0, latest a donc sauté de 0.12.2 à 0.14.0. Les quatre mécanismes que ce ticket réclamait pour le rétrofit — eqs.check.taches (D-049), knipSatellite() sur une application à la racine, la dispense de testing.regle-jamais-jouee, tooling.eslint-etend qui suit le profil déclaré — sont maintenant servis par latest. nuage peut reprendre son étage 3.

La sortie, pour mémoire

D-037 déroulé en entier, avec l'étape 4 qui n'est pas une formalité :

statut : finished
servi sur https://web.eqs-cible.sslip.io
tout CE QUI POUVAIT ÊTRE VÉRIFIÉ répond, et comme convenu

Une seule sonde non exécutable, déclarée : auth.403-audience, faute de variables Entra sur l'instance jetable. eqs-demo résolvait bien les dix depuis les tarballs du registre, ce qui est tout l'intérêt de l'étape.

Ce que ce ticket a produit au-delà de son objet

  • scripts/etat-publication.mjs / pnpm check:publication : quatre états distingués là où latest seul les confondait. Il a servi immédiatement — c'est lui qui a dit « aucun tag, et un arbre de travail modifié : changeset version a tourné, la suite non », alors que le bump de version n'avait pas été committé.
  • La procédure de publication était fausse depuis le début, et ce ticket l'a fait sortir. AGENTS.md et D-037 disaient de committer la version « sur main fusionné » ; main est protégé et la forge refuse (Not allowed to push to protected branch main). La 0.13.0 avait pourtant fait le bon geste — son tag pointe sur le commit de fusion 107021a, pas sur le commit de version 259ac85. La pratique était juste, le document décrivait autre chose, et personne ne l'avait vu parce que celui qui publie connaît le chemin sans relire. D-037 porte son second « Amendé le ».
  • Un piège de méthode consigné : git push --dry-run annonce un succès sur une branche protégée — il ne joue pas le hook de pré-réception. Un essai à blanc ne prouve rien sur une protection.
  • Deux défauts dans le contrôle lui-même, corrigés : un process.exit() après fetch qui le faisait sortir en 127 sous Windows y compris sur le chemin vert, et un message qui affirmait « les tags sont posés » sans les avoir regardés — la faute de ce ticket, reproduite par l'outil censé la prévenir. Le tag est maintenant mesuré, et les trois causes sont éprouvées séparément.

ETAT.md porte la distinction demandée au point 3 : « ce qui est versionné » et « ce qui est installable » sont deux tableaux, avec l'heure du relevé.

Une découverte en marge, plus grave que ce ticket

Le portail d'eqs-demo a refusé le commit de trace, et pour une bonne raison : next porte un RCE CRITICAL (GHSA-vcvr-r3jv-pc5j, next/og ImageResponse), vulnérable en >=16.2.0 <16.3.6. Sept dépôts de la flotte sont dedans, dont eqs-satellite-template — celui que les satellites clonent — et MCP et CODEX qui épinglent 16.3.4 exactement, donc qu'aucune mise à jour d'intervalle ne sauvera. eqs-demo est corrigé (16.3.7) ; les six autres ne le sont pas et ce n'est pas l'objet de ce ticket.

## 0.14.0 est promue. Fermé. Par la commande même que ce ticket avait utilisée pour constater le problème : ``` $ for p in tooling config errors telemetry auth http platform-nest platform-next testing cli; do printf "@eqs/%-15s %s\n" "$p" "$(pnpm view @eqs/$p version)" done @eqs/tooling 0.14.0 @eqs/config 0.14.0 @eqs/errors 0.14.0 @eqs/telemetry 0.14.0 @eqs/auth 0.14.0 @eqs/http 0.14.0 @eqs/platform-nest 0.14.0 @eqs/platform-next 0.14.0 @eqs/testing 0.14.0 @eqs/cli 0.14.0 ``` Et par le contrôle neuf, qui lit les étiquettes plutôt que la seule `latest` : ``` $ pnpm check:publication Dépôt en 0.14.0 · 10 paquets @eqs/auth latest=0.14.0 next=0.14.0 promue … les dix, idem Les 10 paquets sont promus en 0.14.0. ``` **0.13.0 n'a jamais été promue et ne le sera jamais.** Son contenu est dans 0.14.0, `latest` a donc sauté de 0.12.2 à 0.14.0. Les quatre mécanismes que ce ticket réclamait pour le rétrofit — `eqs.check.taches` (D-049), `knipSatellite()` sur une application à la racine, la dispense de `testing.regle-jamais-jouee`, `tooling.eslint-etend` qui suit le profil déclaré — sont maintenant servis par `latest`. `nuage` peut reprendre son étage 3. ### La sortie, pour mémoire D-037 déroulé en entier, avec l'étape 4 qui n'est pas une formalité : ``` statut : finished servi sur https://web.eqs-cible.sslip.io tout CE QUI POUVAIT ÊTRE VÉRIFIÉ répond, et comme convenu ``` Une seule sonde non exécutable, déclarée : `auth.403-audience`, faute de variables Entra sur l'instance jetable. `eqs-demo` résolvait bien les dix **depuis les tarballs du registre**, ce qui est tout l'intérêt de l'étape. ### Ce que ce ticket a produit au-delà de son objet - `scripts/etat-publication.mjs` / `pnpm check:publication` : quatre états distingués là où `latest` seul les confondait. Il a servi immédiatement — c'est lui qui a dit « aucun tag, et un arbre de travail modifié : `changeset version` a tourné, la suite non », alors que le bump de version n'avait pas été committé. - **La procédure de publication était fausse depuis le début**, et ce ticket l'a fait sortir. `AGENTS.md` et D-037 disaient de committer la version « sur `main` fusionné » ; `main` est protégé et la forge refuse (`Not allowed to push to protected branch main`). La 0.13.0 avait pourtant fait le bon geste — son tag pointe sur le commit de fusion `107021a`, pas sur le commit de version `259ac85`. La pratique était juste, le document décrivait autre chose, et personne ne l'avait vu parce que celui qui publie connaît le chemin sans relire. D-037 porte son second « Amendé le ». - Un piège de méthode consigné : **`git push --dry-run` annonce un succès sur une branche protégée** — il ne joue pas le hook de pré-réception. Un essai à blanc ne prouve rien sur une protection. - Deux défauts dans le contrôle lui-même, corrigés : un `process.exit()` après `fetch` qui le faisait sortir en **127** sous Windows y compris sur le chemin vert, et un message qui affirmait « les tags sont posés » sans les avoir regardés — la faute de ce ticket, reproduite par l'outil censé la prévenir. Le tag est maintenant mesuré, et les trois causes sont éprouvées séparément. `ETAT.md` porte la distinction demandée au point 3 : « ce qui est versionné » et « ce qui est installable » sont deux tableaux, avec l'heure du relevé. ### Une découverte en marge, plus grave que ce ticket Le portail d'`eqs-demo` a refusé le commit de trace, et pour une bonne raison : **`next` porte un RCE CRITICAL** (`GHSA-vcvr-r3jv-pc5j`, `next/og` ImageResponse), vulnérable en `>=16.2.0 <16.3.6`. Sept dépôts de la flotte sont dedans, dont `eqs-satellite-template` — celui que les satellites clonent — et MCP et CODEX qui **épinglent `16.3.4` exactement**, donc qu'aucune mise à jour d'intervalle ne sauvera. `eqs-demo` est corrigé (16.3.7) ; les six autres ne le sont pas et ce n'est pas l'objet de ce ticket.
Author
Owner

Levé. Le registre sert 0.14.0 pour les dix, vérifié depuis nuage :

@eqs/tooling         0.14.0      @eqs/http            0.14.0
@eqs/config          0.14.0      @eqs/platform-nest   0.14.0
@eqs/errors          0.14.0      @eqs/platform-next   0.14.0
@eqs/telemetry       0.14.0      @eqs/testing         0.14.0
@eqs/auth            0.14.0      @eqs/cli             0.14.0

Les mécanismes de rétrofit que ce ticket disait injoignables sont dedans : la section ## 0.13.0 des CHANGELOG est bien présente sous la ## 0.14.0.

Et les planchers n'ont pas bougé entre les deux, ce qui compte pour un rétrofit en cours : tooling exige toujours typescript >=5.9, eslint >=9.22, knip >=6 ; testing toujours vitest >=3 ; platform-nest toujours @nestjs/swagger ^12.0.1 et class-validator ^0.15.1. L'étage 0 de nuage, calibré sur la 0.13.0, tient sans retouche.

Je ferme sur le fait constaté. La proposition 2 du corps — un contrôle qui compare la version du manifeste au registre — reste la partie qui empêcherait la récidive, et elle n'est pas faite ; je l'ouvre à part plutôt que de la laisser dans un ticket fermé.

Levé. Le registre sert **0.14.0** pour les dix, vérifié depuis `nuage` : ``` @eqs/tooling 0.14.0 @eqs/http 0.14.0 @eqs/config 0.14.0 @eqs/platform-nest 0.14.0 @eqs/errors 0.14.0 @eqs/platform-next 0.14.0 @eqs/telemetry 0.14.0 @eqs/testing 0.14.0 @eqs/auth 0.14.0 @eqs/cli 0.14.0 ``` Les mécanismes de rétrofit que ce ticket disait injoignables sont dedans : la section `## 0.13.0` des CHANGELOG est bien présente sous la `## 0.14.0`. Et les planchers n'ont pas bougé entre les deux, ce qui compte pour un rétrofit en cours : `tooling` exige toujours `typescript >=5.9`, `eslint >=9.22`, `knip >=6` ; `testing` toujours `vitest >=3` ; `platform-nest` toujours `@nestjs/swagger ^12.0.1` et `class-validator ^0.15.1`. L'étage 0 de `nuage`, calibré sur la 0.13.0, tient sans retouche. Je ferme sur le fait constaté. La proposition 2 du corps — **un contrôle qui compare la version du manifeste au registre** — reste la partie qui empêcherait la récidive, et elle n'est pas faite ; je l'ouvre à part plutôt que de la laisser dans un ticket fermé.
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
Infrastructure/eqs-platform#94
No description provided.