docs/profils.md : la liste des dépôts du profil next-fullstack a trois entrées fausses sur quatre #92

Closed
opened 2026-09-30 15:12:47 +00:00 by nicolas-fryder · 1 comment

Ce qui est écrit

docs/profils.md, section « Profil next-fullstack » :

Dépôts concernés aujourd'hui : ATLAS, photofront, metalfrom, nuage.

Ce qui est vrai

Vérifié par l'origine git de chaque dépôt, seul juge de qui appartient à la flotte :

annoncé origine réelle verdict
ATLAS git.equilibre-structures.fr/EQS/ATLAS ✅ exact
photofront git.equilibre-structures.fr/EQS/**LUMIX** le dépôt ne s'appelle pas comme ça
metalfrom **git.nicolasfryder.ovh**/nico/metalfrom.eu pas un dépôt Équilibre — autre forge, compte personnel
nuage git.equilibre-structures.fr/EQS-Sandbox/NUAGE mauvais profil : c'est nest

nuage est nest, pas next-fullstack

Deux applications dans un workspace pnpm :

apps/api     NestJS 11  — 15 576 lignes, 14 contrôleurs, Prisma 6, Bull, Terminus
apps/front   Next 16    — 12 757 lignes, React 19

apps/api/src/main.ts fait un NestFactory.create(AppModule) et app.listen(PORT) ; apps/front est un Next séparé qui l'appelle sur http://localhost:4002. Il n'y a aucun app/api/**/route.ts. C'est la forme du gabarit, au nom de dossier près (front plutôt que web).

metalfrom n'est pas dans la flotte

$ git remote get-url origin
https://git.nicolasfryder.ovh/nico/metalfrom.eu.git

Ce n'est pas un autre dépôt de l'organisation : c'est une autre forge. Le socle n'y publie pas, la CI n'y tourne pas, reference/satellites.md ne le connaît pas. Il n'a rien à faire dans une liste qui décide de ce que la vue de flotte juge.

Pourquoi ça compte

Le profil n'est pas décoratif. D-003 : « la vue de flotte juge un dépôt sur son profil, jamais sur un autre », et eqs migrate plan ordonne les étapes par profil (#79). Un rétrofit qui part de cette ligne installe @eqs/platform-next/server au lieu de @eqs/platform-nest — le mauvais package de plateforme, celui qui apporte creerApi() et withApi() à une application sans route handler.

C'est le symétrique de #79 : là, l'outil proposait platform-nest à un dépôt next-fullstack ; ici, c'est la documentation qui annonce next-fullstack pour un dépôt nest.

Et un dépôt hors organisation dans cette liste, c'est le même défaut que #77 sur reference/satellites.md : un registre incomplet ou faux est un registre qui ment, et on ne s'en aperçoit qu'en tombant dessus.

Ce que je proposerais

  1. Corriger les trois lignes : nuage passe au profil nest, photofront devient LUMIX (ou le nom d'usage est explicité à côté du dépôt), metalfrom sort de la liste.
  2. Surtout : ne plus tenir cette liste à la main. eqs migrate inspect sait déduire le profil d'un dépôt, et l'origine git dit s'il est de la flotte. Une liste écrite à la main dans un document se périme en silence — c'est exactement la leçon que reference/satellites.md a déjà apprise en #74 et #77. À défaut, la dater et dire d'où elle vient.

Contexte

Trouvé en démarrant le rétrofit de nuage (EQS-Sandbox/NUAGE, branche retrofit-socle-eqs), en lisant profils.md pour savoir quel package de plateforme installer. Conception du rétrofit : docs/superpowers/specs/2026-09-30-retrofit-socle-eqs-design.md.

@eqs/* 0.13.0.

## Ce qui est écrit `docs/profils.md`, section « Profil `next-fullstack` » : > Dépôts concernés aujourd'hui : ATLAS, photofront, metalfrom, nuage. ## Ce qui est vrai Vérifié par l'origine git de chaque dépôt, seul juge de qui appartient à la flotte : | annoncé | origine réelle | verdict | | --- | --- | --- | | ATLAS | `git.equilibre-structures.fr/EQS/ATLAS` | ✅ exact | | photofront | `git.equilibre-structures.fr/EQS/**LUMIX**` | le dépôt ne s'appelle pas comme ça | | metalfrom | `**git.nicolasfryder.ovh**/nico/metalfrom.eu` | **pas un dépôt Équilibre** — autre forge, compte personnel | | nuage | `git.equilibre-structures.fr/EQS-Sandbox/NUAGE` | mauvais profil : c'est `nest` | ### `nuage` est `nest`, pas `next-fullstack` Deux applications dans un workspace pnpm : ``` apps/api NestJS 11 — 15 576 lignes, 14 contrôleurs, Prisma 6, Bull, Terminus apps/front Next 16 — 12 757 lignes, React 19 ``` `apps/api/src/main.ts` fait un `NestFactory.create(AppModule)` et `app.listen(PORT)` ; `apps/front` est un Next séparé qui l'appelle sur `http://localhost:4002`. Il n'y a **aucun** `app/api/**/route.ts`. C'est la forme du gabarit, au nom de dossier près (`front` plutôt que `web`). ### `metalfrom` n'est pas dans la flotte ``` $ git remote get-url origin https://git.nicolasfryder.ovh/nico/metalfrom.eu.git ``` Ce n'est pas un autre dépôt de l'organisation : c'est une **autre forge**. Le socle n'y publie pas, la CI n'y tourne pas, `reference/satellites.md` ne le connaît pas. Il n'a rien à faire dans une liste qui décide de ce que la vue de flotte juge. ## Pourquoi ça compte Le profil n'est pas décoratif. D-003 : « la vue de flotte juge un dépôt sur son profil, jamais sur un autre », et `eqs migrate plan` ordonne les étapes par profil (#79). Un rétrofit qui part de cette ligne installe `@eqs/platform-next/server` au lieu de `@eqs/platform-nest` — le mauvais package de plateforme, celui qui apporte `creerApi()` et `withApi()` à une application sans route handler. C'est le symétrique de #79 : là, l'outil proposait `platform-nest` à un dépôt `next-fullstack` ; ici, c'est la documentation qui annonce `next-fullstack` pour un dépôt `nest`. Et un dépôt hors organisation dans cette liste, c'est le même défaut que #77 sur `reference/satellites.md` : **un registre incomplet ou faux est un registre qui ment**, et on ne s'en aperçoit qu'en tombant dessus. ## Ce que je proposerais 1. Corriger les trois lignes : `nuage` passe au profil `nest`, `photofront` devient `LUMIX` (ou le nom d'usage est explicité à côté du dépôt), `metalfrom` sort de la liste. 2. Surtout : **ne plus tenir cette liste à la main.** `eqs migrate inspect` sait déduire le profil d'un dépôt, et l'origine git dit s'il est de la flotte. Une liste écrite à la main dans un document se périme en silence — c'est exactement la leçon que `reference/satellites.md` a déjà apprise en #74 et #77. À défaut, la dater et dire d'où elle vient. ## Contexte Trouvé en démarrant le rétrofit de `nuage` (`EQS-Sandbox/NUAGE`, branche `retrofit-socle-eqs`), en lisant `profils.md` pour savoir quel package de plateforme installer. Conception du rétrofit : `docs/superpowers/specs/2026-09-30-retrofit-socle-eqs-design.md`. `@eqs/*` 0.13.0.
nicolas-fryder changed title from docs/profils.md range nuage en next-fullstack : il est nest (api NestJS + front Next) to docs/profils.md : la liste des dépôts du profil next-fullstack a trois entrées fausses sur quatre 2026-09-30 15:14:36 +00:00
Author
Owner

Corrigé par 84d4dcc (PR #95). Fermeture à la fusion.

Le ticket disait trois entrées fausses sur quatre. Il y en avait bien trois, mais l'une comptait double

Chaque ligne re-vérifiée contre l'origine git et contre la forme de l'arbre de travail :

annoncé mesuré verdict
ATLAS EQS/ATLAS, pas de apps/, 103 route.ts exact
photofront EQS/LUMIX, apps/api NestJS 11 + apps/web Next, 0 route handler nom faux et profil faux
metalfrom git.nicolasfryder.ovh/nico/metalfrom.eu autre forge, hors flotte
nuage EQS-Sandbox/NUAGE, apps/api NestJS + apps/front Next, 0 route handler profil faux : nest

Le ticket proposait un renommage pour photofront. Ça n'aurait pas suffi : LUMIX n'est pas non plus next-fullstack. C'est apps/api avec un NestFactory.create(AppModule) et apps/web en Next — la forme exacte du gabarit, donc profil nest. Une entrée fausse cachait une seconde faute derrière la première qu'on voyait.

La chasse a rendu trois instances de plus

La classe : un dépôt nommé dans un document, jamais confronté au dépôt. Consignée en chasse 22.

fichier ce qui était écrit corrigé
reference/satellites.md nuage : « hors socle », « (hors flotte EQS) » oui
reference/satellites.md Topologie : dépôt EQS/eqs-homepage oui
docs/glossaire.md Topologie : dépôt eqs-homepage oui

Deux choses valent d'être retenues.

profils.md et satellites.md se contredisaient sur le même dépôt. L'un donnait à nuage un profil de la flotte, l'autre le mettait hors de la flotte, et aucun des deux n'avait raison. C'est la forme de la chasse 16 appliquée à un registre : quand deux listes tenues à la main divergent, la tentation est d'en croire une.

Le piège « nom de dossier ≠ nom de dépôt » s'est déclenché deux fois. photofront est EQS/LUMIX ; eqs-homepage est EQS/Topologie. Qui écrit sa liste en regardant un explorateur de fichiers nomme des dossiers, pas des dépôts.

Ce que j'ai fait de la proposition 2

Vous proposiez de ne plus tenir la liste à la main, via eqs migrate inspect. Je n'ai pas fait ça, et voici pourquoi : un contrôle qui comparerait le profil déduit au profil déclaré doit lire les dépôts depuis eqs-platform — exactement ce que la chasse 18 a montré impossible pour satellites.md (« un registre hors du dépôt contrôlé n'est pas opposable »). Le mécanisme attend eqs-fleet (D-030).

C'est donc votre repli qui est en place, et il est explicite : le relevé de profils.md porte sa date, la mention que chaque ligne a été mesurée sur l'arbre et non recopiée, et les deux commandes qui le démentiraient. On retire l'autorité à la liste au lieu de faire semblant de l'automatiser.

Le guide neuf (#93) dit par ailleurs le critère qui a mal classé trois dépôts : ce sont les route handlers qui tranchent, pas la présence de Next.

Reste à regarder

  • les profils nest + front annoncés pour Topologie, MCP Hub et CODEX : leurs origines sont vérifiées, leurs profils non ;
  • atelier (nicolas-fryder/projet), déclaré nest, porte 8 route.ts dans apps/web — à regarder.

Les deux sont dans le « reste à regarder » de la chasse 22.

Corrigé par `84d4dcc` (PR #95). Fermeture à la fusion. ## Le ticket disait trois entrées fausses sur quatre. Il y en avait bien trois, mais l'une comptait double Chaque ligne re-vérifiée contre l'origine git **et** contre la forme de l'arbre de travail : | annoncé | mesuré | verdict | | --- | --- | --- | | ATLAS | `EQS/ATLAS`, pas de `apps/`, 103 `route.ts` | exact | | photofront | `EQS/LUMIX`, `apps/api` NestJS 11 + `apps/web` Next, **0 route handler** | nom faux **et profil faux** | | metalfrom | `git.nicolasfryder.ovh/nico/metalfrom.eu` | autre forge, hors flotte | | nuage | `EQS-Sandbox/NUAGE`, `apps/api` NestJS + `apps/front` Next, 0 route handler | profil faux : `nest` | Le ticket proposait un **renommage** pour `photofront`. Ça n'aurait pas suffi : LUMIX n'est pas non plus `next-fullstack`. C'est `apps/api` avec un `NestFactory.create(AppModule)` et `apps/web` en Next — la forme exacte du gabarit, donc profil **`nest`**. Une entrée fausse cachait une seconde faute derrière la première qu'on voyait. ## La chasse a rendu trois instances de plus La classe : **un dépôt nommé dans un document, jamais confronté au dépôt.** Consignée en chasse 22. | fichier | ce qui était écrit | corrigé | | --- | --- | --- | | `reference/satellites.md` | `nuage` : « hors socle », « (hors flotte EQS) » | oui | | `reference/satellites.md` | Topologie : dépôt `EQS/eqs-homepage` | oui | | `docs/glossaire.md` | Topologie : dépôt `eqs-homepage` | oui | Deux choses valent d'être retenues. **`profils.md` et `satellites.md` se contredisaient sur le même dépôt.** L'un donnait à `nuage` un profil de la flotte, l'autre le mettait hors de la flotte, et aucun des deux n'avait raison. C'est la forme de la chasse 16 appliquée à un registre : quand deux listes tenues à la main divergent, la tentation est d'en croire une. **Le piège « nom de dossier ≠ nom de dépôt » s'est déclenché deux fois.** `photofront` est `EQS/LUMIX` ; `eqs-homepage` est `EQS/Topologie`. Qui écrit sa liste en regardant un explorateur de fichiers nomme des dossiers, pas des dépôts. ## Ce que j'ai fait de la proposition 2 Vous proposiez de ne plus tenir la liste à la main, via `eqs migrate inspect`. Je n'ai pas fait ça, et voici pourquoi : un contrôle qui comparerait le profil **déduit** au profil **déclaré** doit lire les dépôts depuis `eqs-platform` — exactement ce que la chasse 18 a montré impossible pour `satellites.md` (« un registre hors du dépôt contrôlé n'est pas opposable »). Le mécanisme attend `eqs-fleet` (D-030). C'est donc votre repli qui est en place, et il est explicite : le relevé de `profils.md` porte sa **date**, la mention que chaque ligne a été **mesurée sur l'arbre** et non recopiée, et les deux commandes qui le démentiraient. On retire l'autorité à la liste au lieu de faire semblant de l'automatiser. Le guide neuf (#93) dit par ailleurs le critère qui a mal classé trois dépôts : **ce sont les route handlers qui tranchent, pas la présence de Next.** ## Reste à regarder - les profils `nest + front` annoncés pour Topologie, MCP Hub et CODEX : leurs **origines** sont vérifiées, leurs **profils** non ; - `atelier` (`nicolas-fryder/projet`), déclaré `nest`, porte **8 `route.ts`** dans `apps/web` — à regarder. Les deux sont dans le « reste à regarder » de la chasse 22.
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#92
No description provided.