NeuralOS
GuideIntermediate

Le Gardien Inviolable · le CI qui inspecte chaque changement avant qu'il n'atteigne tes utilisateurs

Il y a un moment dans tout projet fait avec l'IA où tu cesses d'être seul. Ce n'est plus toi en train de tester sur ton ordinateur : il y a de vrais utilisateurs de l'autre côté, et chaque changement que tu publies peut les toucher. C'est là que naît la peur — parce que l'IA, en mode constructeur, se concentre sur le fait que l'app FONCTIONNE, pas sur la chasse à la clé secrète qui t'a échappé, à la brèche que tu as ouverte dans la base de données, ou au fichier que tu as cassé sans t'en rendre compte. Cette ressource te monte un gardien : un CI (intégration continue) avec 7 inspecteurs qui inspectent CHAQUE changement AVANT qu'il n'arrive en production, et si un seul échoue, ils bloquent le changement jusqu'à ce que tu le répares. Ce n'est pas de la théorie : c'est un vrai repo, vérifié, que tu copies en 4 fichiers, tu ajustes 3 données, et tu actives avec un push. Ça coûte pratiquement rien, ça se monte une fois et ça veille sur toi pour toujours. Ne confonds pas ça avec protéger ton app sur internet (ça, c'est une autre ressource) : ceci est la porte automatique par laquelle passe ton code avant d'exister pour le monde.

Jul 19, 202614 min
Pour qui est-ce ?
Pour quiconque construit avec l'IA et a déjà (ou est sur le point d'avoir) de vrais utilisateurs — tu n'as pas besoin d'être programmeur. Si ton projet vit sur GitHub et se connecte à une base de données (Supabase), ce gardien est l'une des meilleures décisions que tu puisses prendre. Tu l'installes une fois en copiant 4 fichiers, et à partir de là chaque changement passe par 7 inspecteurs automatiques avant de toucher qui que ce soit. Toi, tu approuves seulement quand tu vois le check vert.

Le moment · quand le besoin apparaît

Au début tu construis seul. Tu changes quelque chose, tu rafraîchis l'écran, tu vois que ça marche, et voilà. Il n'y a pas de risque : le seul qui subit une erreur, c'est toi, sur ta propre machine, et tu la répares en deux minutes. Cette étape est un paradis — et aussi un piège, parce que tu t'habitues à ce que « si ça marche sur mon écran, c'est bon ».

Le moment change le jour où quelqu'un d'autre dépend de ton app. Le premier utilisateur qui s'inscrit. Le client qui paie déjà. Le collègue qui touche aussi au code. À partir de là, chaque changement que tu publies ne te concerne plus seulement toi : il peut casser l'app de vraies personnes, ou pire, fuiter leurs données. Et voilà le problème — tu ne vois déjà plus tous les changements un par un. Tu demandes quelque chose à l'IA, elle fait 8 fichiers, tu en lis 2, tu approuves, et tu publies. Dans ces 6 que tu n'as pas lus peut se cacher le désastre.

Imagine-le comme ça
Pense à un aéroport. Quand tu construis seul, c'est toi qui marches dans ta maison : il n'y a pas de contrôle, et il n'en faut pas. Mais le jour où ton code va « voler » vers de vrais utilisateurs, il te faut un contrôle de sécurité à la porte d'embarquement. Le gardien de cette ressource est ce contrôle : personne ne passe sans être inspecté, et peu importe si tu es pressé ou si « c'est sûrement bon » — la machine inspecte quand même, toujours, sans se fatiguer ni se distraire.

La douleur · d'où elle vient et pourquoi elle fait si mal

La douleur n'est pas dramatique d'emblée. Ce n'est pas un film de hackers. C'est plutôt une série de petits accidents qui, mis bout à bout, te coûtent cher. Et ils naissent tous du même endroit : l'IA en mode constructeur est optimiste. Elle pense à faire fonctionner la nouvelle fonction, pas aux mille façons dont ce changement peut casser autre chose. C'est sa nature — et la tienne aussi quand tu es emballé par la construction.

L'accident le plus coûteux est la clé secrète fuitée. Tu demandes à l'IA de connecter un service, et pour « que ça marche vite » elle colle ta clé d'API directement dans un fichier. Toi tu ne le remarques pas, tu approuves, tu publies sur GitHub. Cette clé est maintenant publique. Il y a des bots qui scannent GitHub 24 heures sur 24 en cherchant exactement ça — ils peuvent la trouver en quelques minutes et commencer à dépenser ton argent ou entrer dans tes systèmes. Ce n'est pas une attaque sophistiquée : c'est une négligence que la machine d'un autre a ramassée par terre, comme on ramasse un portefeuille qui t'est tombé sans que tu t'en aperçoives.

Le deuxième est la brèche dans la base de données. Un changement qui, sans le vouloir, laisse une table de tes utilisateurs accessible à n'importe qui, ou crée une fonction avec des permissions qu'elle ne devait pas avoir. Ça ne se voit pas. L'app continue de fonctionner à l'identique. Mais tu viens de laisser une fenêtre ouverte que personne ne fermera jusqu'à ce que quelqu'un la trouve — et à ce moment-là, il est déjà trop tard.

Le troisième est le plus courant et le moins glamour : tu as cassé quelque chose qui marchait avant. Tu as réparé le bouton A et sans t'en rendre compte tu as débranché le bouton B. Dans ton test rapide tu n'as touché que le A, donc tu ne l'as pas vu. L'utilisateur qui se servait du B tombe sur l'app cassée. En programmation ça a un nom — régression — et c'est 80 % de la vraie douleur du quotidien.

Honnêteté · c'est un accident, pas une apocalypse
Je ne te vends pas de la peur. La plupart de ces pannes, prises à temps, se réparent en quelques minutes. Le problème N'EST PAS qu'il s'agisse de catastrophes impossibles à résoudre — c'est qu'elles se glissent en silence et explosent au moment où tu t'y attends le moins : un vendredi soir, avec un client en colère, quand tu ne te souviens plus de ce que tu as changé. Le gardien n'évite pas que tu commettes des erreurs (nous en commettons tous). Il évite que ces erreurs atteignent tes utilisateurs. Il les attrape à la porte, quand elles coûtent encore zéro à réparer.

Et que se passe-t-il si tu NE le fais PAS ? Rien… pendant un temps. C'est ça le piège. Ça marche sans gardien pendant des semaines, tu te fais confiance, et juste au moment où le projet commence vraiment à compter — quand il y a déjà des utilisateurs, de l'argent, ou une réputation en jeu — arrive l'accident qu'il t'aurait coûté 30 secondes d'éviter. Le gardien est une assurance bon marché contre une journée très coûteuse.

Les 7 inspecteurs · ce que chacun inspecte

Le gardien n'est pas un bloc magique : ce sont 7 vérifications concrètes qui s'exécutent automatiquement à chaque changement. Si les 7 passent, tu vois un check vert et le changement peut continuer. Si UNE seule échoue, il passe au rouge et le changement reste bloqué jusqu'à ce que tu le répares. Aussi simple, aussi strict. Allons-y une par une, dans l'ordre où elles s'exécutent.

Imagine-le comme ça
Ce sont 7 inspecteurs en file au contrôle de sécurité. Le premier vérifie que tu n'as rien de dangereux dans les poches (les secrets). Le deuxième — le chef — vérifie que tu n'as pas laissé une porte ouverte dans le coffre (la base de données). Les autres vérifient que ta valise est bien faite, que rien n'est cassé, et que tout s'emboîte. Il suffit qu'un seul inspecteur dise « non » pour que tu n'embarques pas. Sans exceptions, sans « c'est que je suis pressé ».

1 · Gitleaks — as-tu glissé une clé secrète par accident ? Il scanne tout le changement à la recherche de choses qui ressemblent à des identifiants : clés d'API, mots de passe, tokens. S'il trouve quelque chose qui sent le secret, il s'arrête net. C'est l'inspecteur qui te sauve de l'accident le plus coûteux de tous, et c'est pour ça qu'il s'exécute parmi les tout premiers — avant même d'installer quoi que ce soit, sur l'arbre propre de git, pour que cette clé n'avance pas d'un pas de plus vers le dépôt public.

2 · Barrière de sécurité (Supabase advisors) — ce changement a-t-il ouvert une brèche dans la base de données ? C'est l'inspecteur chef, et c'est pour ça qu'il s'exécute en premier parmi ceux qui inspectent ton code. Il demande directement à Supabase : une table d'utilisateurs est-elle restée sans son verrou (RLS) ? quelqu'un a-t-il créé une fonction avec des permissions dangereuses ? un accès qu'il ne fallait pas a-t-il été accordé ? Si la réponse est oui, il bloque. C'est celui qui protège les données de tes utilisateurs d'une négligence silencieuse.

3 · Type-check — les types s'accordent-ils ? Dans la programmation moderne, chaque donnée a un « type » (ceci est un nombre, ceci est un texte, ceci est une date). Cet inspecteur confirme que tu n'es pas en train, par exemple, d'additionner un texte avec une date. Il attrape une énorme famille de bugs avant même que l'app ne démarre — des erreurs qui, sinon, apparaîtraient au visage de l'utilisateur au pire moment.

4 · Lint — le code est-il propre ? Le linter est l'inspecteur des mauvaises habitudes : des variables qui se déclarent et ne s'utilisent jamais, du code mort, des schémas qu'on sait causer des problèmes. Ce n'est pas de l'esthétique par caprice — le code sale est là où se cachent les bugs. Un linter oblige à garder la maison rangée pour qu'on voie la vraie saleté.

5 · Format — le formatage est-il cohérent ? Que tout le code se présente pareil : mêmes espaces, mêmes guillemets, même style. Ça sonne comme une manie, mais c'est un langage commun. Quand plusieurs personnes (ou plusieurs sessions d'IA) touchent au même projet sans un format convenu, chaque changement mêle ce que tu as fait à un essaim de guillemets déplacés et d'indentations réordonnées — et tu ne distingues plus l'idée du bruit. L'inspecteur impose le même dialecte pour tous, une fois pour toutes, ainsi personne n'a jamais à en discuter.

6 · Tests — ce qui marchait avant marche-t-il encore ? C'est celui qui attrape les régressions, la douleur nº 3 ci-dessus. Ce sont des tests automatiques qui vérifient que les fonctions clés donnent toujours le bon résultat. Tu as réparé le bouton A ; les tests confirment que le B, le C et le D marchent toujours. C'est l'inspecteur qui te laisse faire de gros changements sans peur, parce que tu sais que si tu casses quelque chose, il te prévient à l'instant.

7 · Build — est-ce que ça compile vraiment ? Le dernier inspecteur assemble l'app depuis zéro, comme si elle allait être publiée. Parce qu'une chose est que « ça marche sur ton ordinateur » et une autre qu'on puisse la construire proprement depuis le départ. Si le build échoue ici, à la porte, c'est infiniment mieux que d'échouer en production avec des utilisateurs qui fixent un écran blanc.

L'ordre compte · le chef d'abord
Remarque que la barrière de sécurité s'exécute en premier (avant type-check, lint, format, tests et build). C'est exprès : la sécurité des données de tes utilisateurs est ce qu'il y a de plus important, alors on la vérifie avant de dépenser du temps sur le reste. S'il y a une brèche dans la base de données, peu importe que le code soit joli — le changement se bloque net. Des priorités ordonnées par le dégât, pas par le confort.

Le coût · pourquoi c'est pratiquement gratuit

On s'attendrait à ce qu'un gardien de niveau entreprise coûte de l'argent. Non. Celui-ci coûte ~$0 et ajoute environ ~15 secondes par inspection. Décomposition honnête : les advisors de Supabase sont gratuits. GitHub Actions (le moteur qui exécute les inspecteurs) te donne 2.000 minutes gratuites par mois dans les dépôts privés — et c'est illimité et gratuit dans les dépôts publics. Une inspection des 7 prend quelques secondes, donc avec 2.000 minutes tu fais des milliers d'inspections par mois sans payer un centime.

Le calcul de coin de table
Si tu fais 10 changements par jour, ça fait ~300 par mois. À ~15 secondes chacun, tu dépenses ~75 minutes sur les 2.000 gratuites. Il t'en reste 1.925. Traduction : pour un projet normal, c'est gratuit pour toujours. Et en échange tu t'épargnes le premier accident coûteux — qui, rien qu'en ne fuitant pas une clé d'API, s'est déjà payé mille fois. Peu de décisions dans ta vie de constructeur ont un rapport coût-bénéfice aussi effrontément en ta faveur.

Le repo · ce que tu vas copier

Tu n'as rien à inventer. Tout le gardien est empaqueté dans un dépôt public, vérifié, prêt à copier. Ce sont 4 fichiers qu'on emporte dans ton projet, plus un guide d'installation en espagnol pas à pas. C'est écrit en JavaScript pur et ça ne dépend de rien de bizarre.

MentexDev/NeuralOS-CI-Blindaje
REPO

Modèle de CI réutilisable avec les 7 inspecteurs : le workflow de GitHub Actions (backend-ci.template.yml), la configuration de Gitleaks (gitleaks.toml.template), le script de la barrière de sécurité de Supabase (scripts/supabase-advisors-gate.mjs) avec sa allowlist (scripts/supabase-advisors-allowlist.json), le guide en espagnol (GUIA-agregar-ci-a-un-proyecto.md) et le standard BACKEND_SUPABASE_STANDARDS.md — « les 10 règles inviolables » que la barrière fait respecter. Tu copies, tu ajustes 3 données, et tu actives avec un push.

JavaScriptView on GitHub
Les 4 fichiers que tu copies dans ton projet
`backend-ci.template.yml` → le workflow avec les 7 inspecteurs (va dans ton dossier .github/workflows/).
`gitleaks.toml.template` → la configuration du chasseur de secrets.
`scripts/supabase-advisors-gate.mjs` → le script qui demande à Supabase les brèches de sécurité.
`scripts/supabase-advisors-allowlist.json` → la liste des exceptions approuvées (commence vide).

Le protocole d'installation · une seule fois, pour toujours

Voilà la bonne partie : tu l'installes une fois et il veille sur toi pour toujours. Il n'y a pas de maintenance quotidienne, pas besoin de se souvenir de l'exécuter. Il vit dans ton dépôt et se déclenche tout seul à chaque changement. L'installation, ce sont 6 étapes, et le prompt maître plus bas les colle à ton IA pour qu'elle les fasse avec toi. Regarde d'abord la carte complète pour comprendre ce qui va se passer.

Les 6 étapes de l'installation
Copier les 4 fichiers du repo dans ton projet (le .template se retire en copiant le workflow vers .github/workflows/).
Ajuster 3 données marquées avec <<<CAMBIAR>>> dans les fichiers : le dossier de ton projet, les chemins, et le nom de ton paquet.
Ajouter 1 script à ton package.json pour que la barrière de sécurité puisse s'exécuter.
Copier le PROJECT_REF de ton projet Supabase (tu le trouves dans la configuration de ton projet).
Créer 2 secrets dans GitHub (Settings → Secrets) : SUPABASE_PROJECT_REF et SUPABASE_ACCESS_TOKEN. Ils ne vont jamais dans le code — ils sont gardés dans le coffre de GitHub.
Activer Leaked Password Protection dans Supabase (Auth → Settings) et faire un push. Au push tu vois les 7 checks s'exécuter — vise le vert.
json
// Paso 3: el script que añades a tu package.json (en la sección "scripts")
{
  "scripts": {
    "db:advisors:gate": "node scripts/supabase-advisors-gate.mjs"
  }
}
bash
# Los 2 secrets del paso 5 se crean en GitHub, NO en el código:
# Repositorio → Settings → Secrets and variables → Actions → New secret
#
#   SUPABASE_PROJECT_REF   → el ref de tu proyecto (cambia por proyecto)
#   SUPABASE_ACCESS_TOKEN  → tu token de cuenta (el mismo para todos tus proyectos)
#
# El gate está hecho para saltarse solo (con aviso) si estos secrets faltan,
# así que nunca rompe un proyecto que aún no los tiene configurados.
La règle d'or des secrets
Les 2 données de Supabase se gardent dans les Secrets de GitHub, JAMAIS dans un fichier du projet. C'est tout l'intérêt : le gardien qui attrape les secrets fuités ne peut pas lui-même fuiter des secrets. Le token d'accès est celui de ton compte (il sert pour tous tes projets) ; le PROJECT_REF change à chaque projet. Si un jour tu vois l'une de ces deux choses écrite dans un fichier .yml ou .js, quelque chose a mal été fait — sors-la de là.

Le prompt maître · colle-le à ton IA et qu'elle te l'installe

C'est le seul prompt dont tu as besoin. Tu le colles à ton agent de code (Claude Code, Cursor, ou celui que tu utilises) placé à l'intérieur de ton projet, et il te guide à travers les 6 étapes, en ajustant les 3 données pour toi et en t'expliquant chaque mouvement. Remplis les [crochets] avec tes infos avant de l'envoyer.

Prompt maître · installe le gardien de CI dans mon projettexte
Je veux monter dans ce projet un gardien d'intégration continue (CI) qui inspecte chaque changement avant qu'il n'arrive en production. Le modèle est dans le repo public github.com/MentexDev/NeuralOS-CI-Blindaje et apporte 7 inspecteurs : Gitleaks (secrets), barrière de sécurité de Supabase advisors (qui s'exécute EN PREMIER parmi ceux qui inspectent le code), type-check, lint, format, tests et build. Si UN échoue, le changement se bloque.

Contexte de mon projet :
- Base de données : Supabase.
- Gestionnaire de paquets : [npm / pnpm / yarn].
- Nom de mon paquet (le "name" de package.json) : [nombre].

Guide-moi pas à pas, sans que je doive savoir programmer, et dans cet ordre :

1. Apporte les 4 fichiers du modèle (backend-ci.template.yml, gitleaks.toml.template, scripts/supabase-advisors-gate.mjs et scripts/supabase-advisors-allowlist.json) et place-les où ils vont. Le workflow doit se retrouver dans .github/workflows/ SANS le suffixe .template.

2. Cherche dans les fichiers les 3 marqueurs <<<CAMBIAR>>> et remplace-les par les vraies données de mon projet (dossier, chemins, nom du paquet). Montre-moi exactement ce que tu as changé dans chacun.

3. Ajoute à mon package.json le script "db:advisors:gate": "node scripts/supabase-advisors-gate.mjs" sans effacer mes scripts existants.

4. Explique-moi EXACTEMENT où je trouve mon PROJECT_REF dans Supabase, et comment je génère mon ACCESS_TOKEN de compte.

5. Dis-moi pas à pas comment créer les 2 secrets dans GitHub (SUPABASE_PROJECT_REF et SUPABASE_ACCESS_TOKEN). Rappelle-moi qu'ils ne doivent JAMAIS aller à l'intérieur d'un fichier du projet, seulement dans les Secrets de GitHub.

6. Rappelle-moi d'activer "Leaked Password Protection" dans Supabase (Auth → Settings).

À la fin :
- Donne-moi la commande exacte pour faire commit et push de ces fichiers, et dis-moi ce que je devrais voir dans l'onglet des checks de GitHub (les 7 inspecteurs s'exécutant, et lequel s'exécute en premier).
- Si un inspecteur passerait au rouge avec mon projet tel qu'il est maintenant (par exemple, je n'ai pas de tests, ou mon code a des erreurs de type), préviens-moi AVANT et dis-moi la façon la plus simple de le mettre au vert honnêtement, sans désactiver l'inspecteur.
Ce que tu ne dois JAMAIS faire pour « passer » le gardien
Quand un inspecteur passera au rouge, la tentation sera de le désactiver pour que « ça passe tout de suite ». Ne le fais pas. Désactiver un inspecteur pour sauter une inspection, c'est comme bander les yeux de l'agent de sécurité de l'aéroport : le problème ne disparaît pas, tu cesses simplement de le voir. Si un inspecteur échoue, répare ce qu'il signale — c'est pour ça qu'il est là. Un gardien que tu désactives quand il dérange n'est pas un gardien, c'est un ornement.

L'habitude · où ça vit dans ton quotidien

La beauté du gardien, c'est qu'il n'exige pas de discipline de ta part. Ce n'est pas une habitude que tu dois te rappeler comme « boire de l'eau » ou « faire de l'exercice ». Une fois installé, il se déclenche tout seul chaque fois que tu publies un changement. Ton seul travail est de regarder la couleur : vert, tu continues ; rouge, tu répares ce que l'inspecteur signale avant de poursuivre.

Le moment où tu le vis est justement en publiant un changement sur GitHub (ou en ouvrant une « pull request », si tu travailles avec des branches — voir la ressource des branches parallèles). Là GitHub lance les 7 inspecteurs automatiquement. En quelques secondes tu as le verdict. Si tu travailles avec l'IA, c'est le point où son optimisme de constructeur rencontre un auditeur qui ne s'emballe pas : la machine inspecte à froid ce que l'IA a construit à chaud.

Le pont avec le C-A-R
Ce gardien est la version automatisée et permanente de la phase d'audit du [protocole C-A-R](/recursos/protocolo-car-construir-sin-bugs). Le C-A-R t'apprend à séparer le mode constructeur du mode auditeur dans ta tête. Le gardien le fait pour toi dans la machine : chaque changement passe obligatoirement par un auditeur froid avant d'exister pour le monde. Construire pense à ce que ça fonctionne ; le gardien pense à comment ça peut échouer — et il ne se fatigue jamais.

Les chemins les plus faciles · ce que tu fais toi et ce que fait la machine

Pour que ce soit hyper clair où tu mets la main et où tu ne la mets pas : l'installation, tu la fais UNE fois (avec le prompt ci-dessus, ton IA t'accompagne). Après, tout est automatique. Voici la vraie répartition de l'effort.

Toi (une seule fois, à l'installation)
Tu colles le prompt maître à ton IA et tu suis les 6 étapes avec elle.
Tu copies ton PROJECT_REF de Supabase et tu crées les 2 secrets dans GitHub.
Tu actives la protection des mots de passe fuités dans Supabase.
Tu fais le premier push et tu vois les 7 checks s'exécuter.
La machine (pour toujours, à chaque changement)
Elle déclenche les 7 inspecteurs automatiquement à chaque push.
Elle bloque le changement si un seul échoue, avec le détail de ce qui a échoué.
Elle saute la barrière avec un avis si un projet n'a pas encore les secrets (elle ne casse rien).
Elle te montre le check vert quand tout passe — ton signal qu'il est sûr de continuer.
Un détail honnête à propos des tests
Si ton projet n'a pas encore de tests (des tests automatiques), l'inspecteur nº 6 n'attrapera pas de régressions parce qu'il n'y a rien à vérifier — et c'est bien pour commencer. Le gardien continue de te protéger avec les 6 autres (secrets, sécurité des données, types, propreté, format et build). Les tests sont la pièce que tu ajoutes avec le temps ; le gardien est prêt à les utiliser dès que tu les auras. N'attends pas d'avoir des tests parfaits pour monter le reste.

Clôture · un gardien qui ne dort pas

Construire avec l'IA est rapide et addictif, et cette vitesse est justement ce qui la rend dangereuse : tu vas si vite que tu ne vois pas tout ce qui est publié. Le gardien ne te freine pas — il te laisse aller vite avec un filet en dessous. Chaque changement passe par 7 inspecteurs en quelques secondes, et si quelque chose sent mauvais, il s'arrête avant de toucher un seul utilisateur. Ça coûte zéro, ça se monte une fois, et ça te donne quelque chose que l'argent n'achète normalement pas : dormir tranquille en sachant que rien de cassé n'arrive en production par négligence.

Dans NeuralOS, ce gardien fait déjà partie de la maison
Tout ce que tu viens de monter à la main est, dans NeuralOS, une partie de la façon dont on construit la plateforme elle-même : la barrière de sécurité de Supabase advisors est de priorité maximale et bloque un changement si elle détecte un avis, exactement comme l'inspecteur nº 2 de cette ressource. « Chaque changement inspecté par un auditeur automatique avant de toucher qui que ce soit » n'est pas une promesse d'avenir — c'est la vraie discipline avec laquelle le produit se construit. Et l'honnêteté est totale : ici on ne t'a rien vendu, on t'a donné le même gardien pour ton propre projet, avec le repo réel et ouvert, pour que tu l'aies, toi.
Avant le gardien · sauvegarde tout dans GitHub
Le gardien vit dans GitHub et inspecte chaque changement. Si tu n'as pas encore ton projet sauvegardé là, commence par celle-ci — c'est l'étape zéro.
Le protocole C-A-R · auditer avant de publier
Le gardien est la version automatique de l'audit. Cette ressource t'enseigne l'état d'esprit derrière — séparer le constructeur de l'auditeur — qui fait que tout s'emboîte.
#ci-cd#seguridad#automatizacion#supabase#github-actions#produccion
Ready to build?

Start building in
under 3 minutes

Join 4,200+ builders. No credit card. Build your first app with AI in minutes.