INSPECTION / VUE TECHNIQUE
Tout est ouvert,
y compris ce qui manque.
Cette page ne raconte rien. Elle donne l’inventaire généré du dépôt, les frontières de données, les contrats des interfaces publiques et les réglages exacts de la recherche documentaire. Elle dit aussi ce qui n’est pas fait, à commencer par l’absence d’intégration continue.
cas de test répartis sur 35 fichiers, pour 22 routes de page et 47 composants.
Passer au parcours recruteur ↗Architecture
Une chaîne à sens unique, des sources vers le lecteur. Aucune étape ne réécrit ce que la précédente a produit, et rien ne repart vers les produits du groupe.
Le détail de chaque étape, avec le fichier ou la table qui l’implémente réellement, vit sur la page d’autoréférence. Une étape qui ne peut pas nommer son implémentation n’est pas une étape, c’est une case de schéma.
Inventaire
Aucun de ces nombres n’est écrit à la main. Ils sont la sortie d’une commande, versionnée dans le dépôt et vérifiée avant chaque envoi.
pnpm inventory
Ces nombres sont la sortie de cette commande, versionnée dans le dépôt. Aucun n’est saisi. La vérification locale s’arrête avant le typecheck si l’inventaire a bougé sans être régénéré : un dépôt dont l’inventaire ment n’a pas besoin d’être construit.
- Routes de page
- 22
- Routes d’interface
- 8
- Composants
- 47
- Modules de bibliothèque
- 44
- Tables
- 11
- Types énumérés
- 14
- Migrations
- 8
- Règles de sécurité par ligne
- 21
- Fichiers de test
- 35
- Cas de test
- 354
- Dépendances déclarées
- 52
Budget de complexité
Chaque plafond est mesuré à chaque exécution. Un dépassement fait échouer la commande, il ne produit pas un avertissement qu’on finit par ne plus lire. Un plafond se relève par écrit, jamais en silence.
- Titres dans l'accroche de la home1 1tenu
- Lignes de texte dans l'accroche de la home3 3tenu
- Actions proposees dans l'accroche de la home3 3tenu
- Cartes de competence sous l'accroche3 3tenu
- Fiches projet mises en avant sur la home3 3tenu
- Preuves sociales affichees d'un bloc dans la Couche D1 4tenu
- Experiences citees dans le bandeau de la home4 4tenu
- Marques d'organisation affichees sur le site4 5tenu
- Routes de page22 24tenu
- Routes d'API8 10tenu
- Composants47 50tenu
- Modules lib44 46tenu
- Lignes du plus gros composant624 700tenu
- Lignes du plus gros module lib459 460tenu
Plus gros composant : apps/web/components/dashboard.tsx, 624 lignes. Plus gros module : apps/web/lib/health/criteria.ts, 459 lignes.
Aucun export mort sans justification écrite.
Tirets longs dans le code et les textes publiés : aucun. La règle existait depuis le début du projet et personne ne la mesurait.
Dépendances directes réellement installées : @ai-sdk/openai, @ai-sdk/react, @eslint/js, @sentry/nextjs, @supabase/ssr, @supabase/supabase-js, ai, clsx, cmdk, drizzle-orm, eslint-config-prettier, framer-motion, geist, globals, next, postgres, posthog-js, react, react-dom, tailwind-merge, typescript-eslint.
Données et sécurité
21 règles de sécurité au niveau des lignes portent sur les 11 tables protégées de ce site. L’historique des migrations en a créé 26 au total : la différence porte sur des tables depuis supprimées ou devenues des vues, et publier ce second nombre à la place du premier gonflerait le chiffre sans mentir formellement.
Ce qu’un visiteur anonyme peut lire
- Les métriques système publiées.
- Les décisions d’architecture publiées et relues.
- La trajectoire.
- Le registre des produits, sans le nom de leurs dépôts.
- Les affirmations publiques et leurs preuves, jamais celles marquées internes.
Ce qu’il ne peut pas lire
- Le corpus documentaire et ses fragments vectoriels.
- Les prises de contact reçues.
- Les décisions non publiées ou non relues.
- Les extraits d’erreur des sondes vers les produits.
- Le nom des dépôts rattachés aux produits.
Les clés d’écriture ne quittent jamais le serveur. Un garde-fou de débit protège l’assistant, et il est couvert par un test. Le détail des frontières, y compris ce qui n’entre jamais dans ce système, vit sur la page de confiance.
Base de données partagée avec deux produits du groupe. Ce n’est pas un choix, c’est une contrainte relevée après coup, et sa conséquence est traitée : la restauration est sélective, table par table, jamais globale. Les 11 tables de ce site vivent aux côtés de celles des produits, séparées par les règles ci-dessus. 8 migrations, jouées dans l’ordre, chacune idempotente.
Intelligence documentaire
C’est le passage le plus regardé par un lecteur technique, donc celui où une approximation coûterait le plus. Voici les réglages exacts, et l’état réel du corpus.
- Modèle d’embedding
- text-embedding-3-small
- Dimension
- 1024, figée dans le schéma et dans l’index
- Plancher de récupération
- 0.15
- Fragments passés au modèle
- 6, dont 3 au maximum par document
- Index
- HNSW, distance cosinus
- Comportement en échec de récupération
- Refus explicite, aucune réponse produite
Le plancher de récupération n’est pas un seuil de pertinence. Il écarte le manifestement hors sujet avant que le modèle ne voie quoi que ce soit. Le seuil de pertinence, lui, sert à dire si le corpus couvre ce que l’écran promet, et il vaut 0.50 : en dessous de 0.45, la vérification échoue.
Dernière vérification de pertinence : échouée, meilleur score 0.67, plus faible 0.28. Un corpus partiel est assumé : l’assistant refuse de répondre sur ce qu’il ne couvre pas, plutôt que de répondre approximativement.
Contrats d’interface
7 routes publiques. Chacune répond en JSON, et chacune répond 503 avec une raison quand la base n’est pas joignable, plutôt qu’un corps vide ou un tableau vide qui ressemblerait à une absence de données.
| Route | Ce qu’elle sert | Base injoignable |
|---|---|---|
/.well-known/adama-os.json | Le registre des affirmations et de leurs preuves. | Document servi, champs vides plutôt qu’inventés. |
/api/chat | L’assistant documentaire, en flux, avec ses sources. | 503, et aucune réponse produite sans source. |
/api/decisions | Les décisions d’architecture publiées et relues. | 503, avec la raison en clair. |
/api/ecosystem | Le registre des produits, sans le nom des dépôts. | 503, avec la raison en clair. |
/api/metrics | Les métriques système publiées, avec leur classe. | 503, avec la raison en clair. |
/api/trajectory | La trajectoire, telle qu’elle est publiée. | 503, avec la raison en clair. |
/llms.txt | Le site décrit en texte simple, pour un agent. | Document servi, champs vides plutôt qu’inventés. |
Ces formes sont verrouillées par un test de contrat. Une route qui changerait de forme sans que le test change avec elle ne passe pas la vérification locale.
Le registre des preuves, lisible par un programmeLe site décrit en texte simple
Tests et vérification
354 cas répartis sur 35 fichiers. Ils ne couvrent pas le rendu visuel, et c’est délibéré : un test d’animation ou de mise en page casse à chaque retouche, pour aucun gain.
- La récupération documentaire, et son refus sans source.
- Les règles de sécurité au niveau des lignes, sur base de test.
- L’absence de tout repli chiffré dans l’interface.
- La mention de traitement automatisé, sa présence et son texte.
- La forme des réponses des routes publiques.
- Le garde-fou de débit de l’assistant.
- La convention des liens sortants.
- La purge du consentement en cas de refus.
- La dégradation des passerelles vers les produits.
- Le fait qu’aucun nœud de la carte ne soit écrit en dur.
DÉCISION DOCUMENTÉE
Il n’y a pas d’intégration continue.
Aucun automate ne construit ni ne teste ce dépôt à chaque envoi. Le quota du service d’automatisation est épuisé, et je n’ai pas voulu le remplacer par un outil de plus.
La vérification se fait en local, avant chaque envoi, par une seule séquence : inventaire, typage, tests, analyse statique, puis construction de production. Elle s’arrête à la première erreur.
./scripts/check-frontend.ps1
La conséquence est réelle et je ne la maquille pas : cette discipline dépend de moi. C’est aussi pourquoi aucune fréquence de déploiement, aucun délai de mise en production et aucun taux d’échec ne sont publiés sur ce site. Ces valeurs ne sont pas mesurées ici, et elles seraient d’autant plus crédibles qu’elles portent des noms connus.
Aucun pourcentage de couverture n’est revendiqué non plus. Un pourcentage de couverture mesure les lignes traversées, pas les comportements tenus.
Exploitation et continuité
Exécution en région européenne, en-têtes de sécurité posés au niveau du déploiement, journalisation des erreurs et sonde de disponibilité externe. Trois outils d’observation, et pas un quatrième.
pnpm integrity
10 contrôles, calculés
Exécutée le UTC, il y a 0 jour.
- 8RÉUSSI
- 1EN ÉCHEC
- 1NON EXÉCUTÉ
- RÉUSSILa commande a tourné et elle a rendu un succès.Toute donnée affichée porte sa classeAucune valeur ne se rend sans son marqueur de provenance, nulle part.
- RÉUSSILa commande a tourné et elle a rendu un succès.Aucune métrique fabriquéeUn repli chiffré, même bien intentionné, fait échouer ce contrôle.
- RÉUSSILa commande a tourné et elle a rendu un succès.Les passerelles produit sont en lecture seuleAucune méthode d’écriture n’est appelée vers un produit du groupe.
- NON EXÉCUTÉLa commande n’a pas tourné. Ce n’est pas un échec, et ce n’est pas une réussite.Les règles de sécurité au niveau des lignes tiennentSur base de TEST uniquement. Jamais contre la base de production.
- RÉUSSILa commande a tourné et elle a rendu un succès.Typage, analyse statique, tests et construction passentLa séquence complète de vérification locale, celle qui remplace l’intégration continue absente.
- RÉUSSILa commande a tourné et elle a rendu un succès.L’inventaire du dépôt est à jourUn dépôt dont l’inventaire ment n’a pas besoin d’être construit.
- EN ÉCHECLa commande a tourné et elle a rendu un échec.La récupération documentaire dépasse son seuilRamener une source ne suffit pas : elle doit être pertinente. Le seuil est mesuré, pas supposé.
- RÉUSSILa commande a tourné et elle a rendu un succès.La sauvegarde a été restaurée et datéeUne sauvegarde non testée n’est pas une sauvegarde. La restauration est sélective, jamais globale.
- RÉUSSILa commande a tourné et elle a rendu un succès.La mention de traitement automatisé est présenteAu premier contact et en permanence dans l’en-tête de l’assistant.
- RÉUSSILa commande a tourné et elle a rendu un succès.La règle de péremption des preuves est exercéeUne affirmation dont la preuve a dépassé sa durée de validité se rend périmée, jamais fraîche. La règle est exercée sur des observations simulées, y compris les réponses qui ne confirment rien. Ce contrôle n’interroge pas le registre publié : l’état réel des preuves en ligne se lit sur la page des preuves, pas ici.
La construction de production fait partie de cette exécution. Les huit modes de panne, plus le cas nominal, se comportent comme la page des pannes l’annonce.
Dernier test de restauration : 02 septembre 2026, réussi, sur 9 tables, tables du cockpit uniquement, restauration sélective, jamais la base entière. Une sauvegarde non testée n’est pas une sauvegarde.
L’état vivant de chaque capacité, et les huit façons dont ce site peut tomber, sont sur la page de santé et de pannes.
L’AUTRE PORTE
Vous cherchez plutôt un profil à recruter ?
Le même dossier, lu dans l’autre sens : ce que je cherche, ce que je sais faire, et sous quel délai.