Coulisses techniques du site cotejardin.pizza. Récit distinct de l'article court « de la vitrine au CMS » : ici, journal épique, ton de voyage, leçons de terrain. Aucun fait commercial inventé.
Date : 15 août 2026
Prologue — L'appel d'Évaux
Mes chers voyageurs, asseyez-vous près du feu — ou plutôt près du four, car dans cette histoire le feu sert d'abord à cuire des pizzas. Je m'appelle… disons que mon nom n'importe guère. Appelez-moi le vieux guide. On m'a confié la carte d'un petit royaume creusois, une pizzeria de village nommée Côté Jardin, au 14 avenue de la République, à Évaux-les-Bains. Et l'on m'a dit : « Il faut un site. Pas un château de verre. Un chemin clair jusqu'au téléphone. »
Ah ! Vous souriez. « Un site pour une pizzeria ? En 2026 ? N'est-ce pas déjà fait cent fois ? » Précisément. Cent fois on a bâti des temples trop lourds pour un passant affamé. Cent fois on a mesuré les mauvaises choses. Cent fois on a inventé des horaires « à peu près » parce que le carton papier avait l'air sérieux.
Moi, j'ai une règle de vieille barbe : le seul indicateur de succès, c'est que le téléphone sonne. Pas les pages vues. Pas le temps passé à scroller une animation de fromage qui fond. Le coup de fil. Le « allo, vous êtes ouverts ? » suivi du « alors une Auvergnate… ».
Si vous cherchez un récit de startup qui « disrupt » la restauration, tournez page. Ici, nous allons parler d'OVH mutualisé, de HTML qui reste lisible sans JavaScript, de cookies que l'on refuse d'allumer, d'agents qui travaillent en parallèle sans se marcher sur les bottes, et d'une leçon plus précieuse que toutes les frameworks : une donnée plausible et fausse coûte plus cher qu'une donnée manquante.
Préparez vos chaussures de marche. La quête a commencé vers le 13 août 2026. Elle n'est pas finie. Mais le chemin est déjà digne d'une chanson.
Chapitre I — La carte et le territoire
Toute quête commence par une carte. La nôtre n'était pas une mappemonde
magique : c'était un hébergement OVH mutualisé, un domaine
cotejardin.pizza, et une contrainte de sage : le site public devait rester
statique. Pas de PHP pour servir chaque pizza au passant. PHP, oui —
mais dans l'atelier secret (/admin/) et pour une petite sonde d'audience
first-party (/api/). Le visiteur, lui, reçoit des fichiers HTML, CSS, JS,
photos. Un serveur local de fichiers purs révèle immédiatement toute
dépendance accidentelle. C'est voulu.
Pourquoi cette sobriété ? Parce que le passant affamé, à 11 h 45, sur un
téléphone dont la batterie agonise, ne veut pas attendre qu'une application
cliente reconstruise la carte. Il veut savoir : est-ce ouvert ? C'est où ?
Comment j'appelle ? Trois questions. Trente secondes. Puis le tel: sous le
pouce.
Nous avons nommé ce filtre « Proposition C — Grand & clair ». Grand pour les yeux fatigués des curistes. Clair pour ne pas transformer la page en foire aux badges. Une barre d'appel permanente sur mobile. Des zones tactiles d'au moins 44 pixels. Une police lisible auto-hébergée (Atkinson Hyperlegible), pas un CDN qui espionne au passage. Fraunces pour la marque — parce qu'une pizzeria sans visage typographique est une auberge sans enseigne.
Le territoire impose aussi ses lois d'équipe. Plusieurs agents (humains et
artificiels) travaillent sur le même dépôt. Alors on a écrit des interdits
plutôt que des recommandations. Une règle négative se vérifie ; une règle
positive s'interprète — et l'interprétation dérive quand personne ne se voit.
Ne jamais écrire dans dist/ (artefact régénéré). Ne jamais committer
medias/, ni les secrets. Ne jamais inventer un fait client. Ne jamais
déployer sans verifier.php au vert. Ne jamais permuter robots.txt hors de
la fiche SEO. Et un crochet mécanique, garde_fou.py, refuse les écritures
interdites. Rencontrer le garde-fou, ce n'est pas « contourner avec une
bonne excuse » : c'est s'être trompé de fichier.
— Mais Gandalf, pourquoi tant de formalisme pour une pizzeria ? — Parce qu'un site qui ment sur les horaires envoie un client un mardi. Et le mardi, Côté Jardin est fermé.
Chapitre II — Les fausses pistes (ou : le carton qui mentait)
Le 13 août 2026, en ouvrant le dossier de passation, on a découvert un dragon déguisé en papeterie. Le site annonçait, d'après un carton papier périmé, un service du midi, fermé le dimanche. La réalité — celle qu'il fallait sourcer et corriger — était tout autre : ouverture large en continu, fermeture le mardi.
Trois erreurs distinctes. Une vingtaine d'occurrences. Métadonnées, accroches, FAQ, JSON-LD destiné à Google. Toute la prémisse éditoriale à réécrire. Ce n'était pas « une ligne à changer » : c'était un monde construit sur une mauvaise carte.
Google affiche les horaires en direct. Un client pouvait se déplacer le mauvais jour. Voilà pourquoi la règle 4 du dépôt est devenue la plus importante : horaire, prix, garniture, avis, allergène — ce qui n'est pas sourcé ne va pas sur le site. On marque 🟠 dans le handoff. On attend. On n'invente pas « pour faire joli ».
Vous voyez la tentation, n'est-ce pas ? Remplir les cases vides. Estimer le GPS « à peu près ». Déduire les allergènes des garnitures. Publier un avis « typique » faute de vrai témoignage. Chaque fois, la même voix douce chuchote : « Personne ne vérifiera. » Et chaque fois, la réponse du vieux guide est la même : la donnée plausible fausse ne déclenche aucune question. La case vide, si. Elle gêne. Elle force l'appel à Yann. Elle protège le client.
Depuis, les horaires corrigés vivent dans donnees/site.json : service
continu, mardi fermé, et la FAQ « Êtes-vous ouverts le soir ? » répond enfin
la vérité. Reste une confirmation écrite du gérant — marquée 🟠 — parce que
Google ne plaisante pas avec le badge « Ouvert ».
Chapitre III — Forger la vitrine (HTML, zéro cookie, plan au clic)
Quand la carte du monde est juste, on forge la vitrine.
Une source de vérité, puis du feu
Les faits affichés vivent dans site.json. Un générateur PHP
(bin/generer.php) les valide, les injecte dans des gabarits, et produit
dist/ — HTML statique. Le contenu n'est plus prisonnier du markup. Changer
un prix ne demande pas de chasser vingt chaînes dans un fichier de 900
lignes. Et surtout : la carte reste aplatie en HTML au moment de la
génération. « Auvergnate », « Saint-Nectaire », « Savoyarde » — ce que les
gens tapent — sont dans le source, pas reconstruits après coup en JavaScript.
Les filtres de la page carte masquent du DOM déjà présent ; ils ne
réinventent pas le menu.
Vingt-quatre pizzas. Trois familles. Une taille. Des prix en centimes
entiers (parce qu'un flottant monétaire est un petit démon). Schema.org
Menu et Restaurant pour aider les moteurs sans mentir.
Le design qui sert le coup de fil
Proposition C n'est pas une mode : c'est un alignement sur l'indicateur.
Barre d'appel. Infos vitales au-dessus de la ligne de flottaison. Badge
ouvert/fermé dérivé du JSON-LD à l'heure de Paris (horaires.js), avec
repli sans JavaScript. Animations qui respectent le réglage de mouvement
réduit. Plus tard, on a même réordonné l'accueil (exception documentée) :
le récit du pâton et de la biga remonte juste après le héros, parce que
c'est la signature de la maison — pas un appendice SEO.
Zéro cookie, zéro bandeau — un choix, pas un oubli
Aucun traceur au chargement. Aucun bandeau de consentement qui mange l'écran du passant. Le plan Google s'ouvre au clic, pas en embarquant la moitié d'Internet dès la première visite. La mesure d'audience est maison : compteurs agrégés par page et par jour, hors webroot, purge à 90 jours, aucune IP, aucun User-Agent, aucun cookie. Matomo aurait demandé MySQL et des CVE à surveiller sur un mutualisé ; on a choisi la sobriété.
Est-ce que ça mesure « l'engagement » ? Non. Est-ce que ça répond à la seule question utile ? Non plus — seul le téléphone le fait. Mais ça aide à voir quelles pages existent réellement dans la vie du site, sans transformer le visiteur en gibier.
Ce que le site ne fait pas (et c'est bien)
Pas de faux avis. Le tableau avis peut rester vide ; un avis actif sans
source est refusé par le rendu. Pas de banque d'images : les photos viennent
du réel, ou n'entrent pas. Pas de FAQ activée sans réponse. Pas de champ
légal inventé : les mentions affichent clairement « À COMPLÉTER » tant que
Yann n'a pas saisi SIRET et compagnie.
Chapitre IV — L'atelier secret (admin, publication, guide pour Yann)
Derrière la vitrine, un atelier. Pas un CMS monstrueux importé d'ailleurs : une administration PHP native sur l'OVH déjà payé. Yann doit pouvoir éditer depuis son téléphone — horaires, carte, FAQ, textes, avis, légal — puis publier sans toucher au code.
La géométrie du déploiement
L'admin ne vit pas niaisement dans le webroot public. Dépôt applicatif hors
racine web, wrappers /admin/ et /api/ qui font require, miroir de
dist/ vers le webroot après chaque publication réussie — en préservant
ces points d'entrée et surtout robots.txt (l'indexation reste fermée
jusqu'à la bascule SEO dédiée). Sur le mutualisé, un symlink hors webroot
donne un 403 Apache : on l'a appris. PHP_BINARY pointe vers FPM,
inutilisable pour lancer publier() en CLI : il faut
/usr/local/php8.4/bin/php. Tout cela est écrit dans ADR-002, pour que le
prochain voyageur ne rejoue pas la même scène.
Publier sans casser la rue
publier() enchaîne verifier.php puis generer.php en sous-processus.
Cible de génération paramétrable. Journal append-only hors webroot. En cas
d'échec, l'ancienne version reste servie. Ce n'est pas de la paranoïa : c'est
du respect pour le client qui appelle pendant que l'on corrige une virgule.
Le guide du gérant
Un tuto humain, aussi en PDF, explique les gestes sans jargon. Parce qu'un outil que seul le développeur comprend n'est pas un outil : c'est une dépendance déguisée. L'intégration admin a été harmonisée ; le guide est déployé. Reste — côté opérationnel — le mot de passe temporaire à remplacer proprement (coffre, pas chat), et les saisies que Yann seul peut confirmer.
Chapitre V — Les sentinelles (tests, verifier, garde-fou)
Une quête sans sentinelles devient une légende mensongère.
verifier.php : onze contrôles et trois attentes
Avant déploiement, le vérificateur doit rester au vert. Il connaît aussi les attentes Yann (allergènes, légaux, GPS) : ce ne sont pas des échecs honteux, ce sont des feux orange assumés. On ne les « passe » pas en inventant.
Casser pour croire
Leçon de méthode de la session : un contrôle mal branché ne produit pas du bruit aléatoire. Il produit du vert. Deux fois, un test a « réussi » pour la mauvaise raison ; une fois, la documentation a affirmé le faux — toujours du même côté, vers « tout va bien ».
Alors on a adopté la règle du forgeron prudent : casser volontairement
l'invariant et vérifier que ça échoue, avant de faire confiance. Prix
divergent. Mardi ouvert à tort. FAQ activée sans réponse. Pizza renommée
le temps d'un essai : dist/ a changé, preuve que le moteur lit bien
site.json.
Garde-fou et tests légaux
garde_fou.py bloque mécaniquement les écritures interdites. Les tests
légaux surveillent, entre autres, l'absence de requêtes tierces au
chargement et la discipline des avis. Un faux positif a même pris le mot
du gérant pour un avis (blockquote) — corrigé en ciblant
blockquote.avis. Les instantanés de rendu, eux, demandent encore une
remise à jour après le réordonnancement de l'accueil : fiche ouverte, pas
balayée sous le tapis.
Agents, Possède, non-concurrence
Chaque tâche a un bloc « Possède » : les fichiers qu'elle peut toucher. Deux tâches dont les possessions s'intersectent ne tournent jamais en parallèle. Des worktrees, des vagues, cinq tours d'agents légers… et aussi des collisions de numéros de fiches (portable vs origin) qui enseignent l'humilité : on dispatch par chemin de fiche, jamais par numéro nu.
Chapitre VI — Les images et la lumière
Le réel photographié vaut mieux qu'une banque d'images souriante et vide. Des dizaines de clichés ont été analysés ; une poignée publiée. Le pipeline dérive webp/jpg, strip EXIF, réduit avant de nettoyer (sinon Pillow explose sur les panoramas). Certaines photos de personnes identifiables attendent une autorisation écrite (article 9 du Code civil) : le document est prêt, la signature manque. Une photo de client sans consentement n'est pas « à valider plus tard » : c'est une porte fermée. Pour le pizzaiolo et la façade, l'écrit signé est la clé.
Le chantier médias plus large (tri, recadrages, floutages, staging) est
en pause volontaire : medias/ reste hors dépôt (~800 Mo), on ne
commit pas, on ne promeut pas un staging non validé. Reprendre seulement
avec un GO explicite.
La lumière du site, ce n'est pas un dégradé violet de générateur d'images. C'est le bois de la salle, le four, la pizza réelle — ou rien.
Chapitre VII — Ce qui est déjà sur le chemin
Au 15 août 2026, dressez le camp et regardez en arrière :
- Lots A à G techniquement livrés : arborescence, règles, moteur de rendu, tests, admin, mesure, design, déploiement.
- Site public en production sur
cotejardin.pizza, HTTPS ok. - Indexation encore fermée (
robots.txtenDisallow: /) — délibéré. - Admin ouverte : écrans, publication atomique, miroir webroot.
- Annonce ponctuelle du 15 août (braderie) : désactivée après l'événement.
- Audit du 15 août : bugs P0 corrigés et redéployés (T-095) ; dette et divergences documentées sans les cacher.
- ADR-001 (PHP OVH) et ADR-002 (déploiement admin) acceptées ; ADR-003 (architecture en couches) proposée, pas encore tranchée.
verifier.php: contrôles verts + attentes Yann visibles.
Le passant affamé a déjà un parcours court. Le gérant a déjà les clefs de l'atelier. Ce qui manque n'est plus surtout « du code » : ce sont des faits que seule la maison peut confirmer.
Chapitre VIII — Ce qui reste à venir (sans inventer la suite)
Voici la roadmap réelle, telle que le dépôt la connaît — pas un catalogue de rêves marketing.
Bloqué sur Yann (lot H)
- Les 9 infos légales (SIRET, forme juridique, etc.) — saisissables dans l'admin, pas inventables.
- Les allergènes par pizza (décret 2015-447, emporter compris) — ne se déduisent pas des garnitures.
- Les modalités du sans gluten (supplément, contamination croisée).
- Confirmation écrite des horaires ; vrais avis (texte, prénom, mois, source) ; seuil de réservation, terrasse, congés ; GPS relevé sur place ; autorisations photo.
Sans ces réponses, pas de bascule SEO sérieuse (permuter robots.txt,
Search Console, etc.). On peut préparer les fiches ; on ne brûle pas les
étapes.
Lot I — CMS natif (planifié, non implémenté)
Apparences prédéfinies, événements temporaires datés, aperçu admin isolé, retour automatique à l'apparence stable. HTML et carte toujours générés côté serveur. Pas d'éditeur libre qui casse la page. Pas de Canva dans le navigateur. Ordre de dispatch prévu ; avant de le lancer, trancher ADR-003 (sinon l'ADR devient obsolète par construction).
Attention aux collisions de numéros T-064…T-069 / T-070…T-072 entre familles de fiches : toujours le chemin complet.
Technique ouverte, sans GO
- Remplacer le MDP temporaire admin.
- Remettre au vert les instantanés de rendu (T-094) si encore ouverts.
- MySQL OVH provisionné mais non branché (T-080) : idée, pas un ordre de marche.
- Chantier médias : reprise sur demande seulement.
- Vidéos de
medias/: usage non décidé. - Petites dettes listées par l'audit (factorisations, CSP, etc.) : pistes, pas inventaire magique.
Ce que l'on ne fera pas « en attendant »
Inventer. Activer une FAQ muette. Publier un avis fantôme. Estimer le GPS. Brancher MySQL parce que « la base est là ». Ouvrir l'indexation parce que « ça presse ». La patience est une compétence technique.
Chapitre IX — Digressions du guide (pour le lecteur curieux)
Pourquoi pas un framework à la mode ?
Parce que Composer en production sur ce mutualisé n'est pas le contrat.
Parce que le site public n'a pas de front controller. Parce que chaque
dépendance est une porte à surveiller. L'autoloader maison suffit. Les
écrans admin s'annoncent en existant (is_file). C'est rustique. Ça
marche. Ça se lit.
Pourquoi des agents en parallèle ?
Parce que le temps compte, et que des blocs Possède disjoints
permettent de fusionner sans guerre de territoires — à condition de tenir
le protocole : fiche, STATUS, verifier, commit préfixé T-###. Le chaos
n'est pas l'absence d'outils : c'est l'absence de frontières.
Pourquoi raconter tout ça sur le blog du site ?
Parce qu'une pizzeria de village mérite aussi la transparence de son outil. Parce que d'autres auberges croiront peut-être qu'il faut un monstre cloud pour exister en ligne. Parce que la leçon du carton papier doit voyager. Et parce qu'un vieux guide aime les longues veillées — pourvu qu'elles restent vraies.
Épilogue — Le téléphone, encore
Vous vous souvenez de l'indicateur ? Il n'a pas changé.
Quand un curiste trouve le numéro sans se battre contre un bandeau ; quand un habitant vérifie la carte sans télécharger un PDF ; quand Yann corrige un horaire sans appeler un développeur à minuit ; quand Google, le jour venu, affichera des faits sourcés — alors la quête aura tenu sa promesse.
Le site n'est pas devenu plus compliqué pour le passant. Il est devenu plus sûr à modifier. C'est toute la différence entre une vitrine figée et une auberge vivante.
Moi, je range ma pipe (métaphorique : on ne fume pas près du four). Le chemin continue : réponses de Yann, bascule SEO quand ce sera juste, CMS d'apparence sans trahir la carte HTML, photos autorisées, peut-être une base MySQL un jour si un ADR le dit.
Jusque-là, si vous passez à Évaux-les-Bains et que vous avez faim : regardez d'abord si c'est ouvert — et ce n'est pas le mardi — puis téléphonez. Le site aura fait son travail dès que votre pouce aura touché le bon lien.
Fin du journal — pour l'instant.
Annexe du guide — Lexique express pour non-devs
site.json: le cahier des faits que le site affiche.generer.php: la forge qui transforme ce cahier en pages HTML.verifier.php: le sentinelle avant publication.dist/: le résultat jetable ; on ne l'édite pas à la main.- JSON-LD : des faits structurés pour les moteurs (horaires, menu…).
- First-party : mesure faite chez soi, sans revendre le passant à un tiers.
- Mutualisé : un hébergement partagé, économique, avec des limites honnêtes — qu'il faut connaître (CLI PHP, wrappers, pas de symlink magique).
Si ce lexique vous a paru trop court, c'est bon signe : vous êtes prêt pour la prochaine étape du voyage. Si trop long, commandez une pizza et relisez demain. Les bonnes quêtes se digèrent lentement — comme une pâte à biga.
Chapitre X — Chronique détaillée des lots (pour les archivistes)
Laissez-moi, pour les plus patient·es, dérouler la chronique telle que le dépôt la consigne. Ce n'est pas une changelog sèche : c'est la mémoire des choix, pour ne pas les refaire à l'envers.
Lot A — Assainir le campement
On a réorganisé l'arborescence (renommages soigneux, historique Git
préservé), écrit CLAUDE.md, posé STATUS.md, branché le hook
garde-fou, levé des bloquants techniques, activé la redirection HTTPS,
réconcilié la documentation avec le réel. Sans ce lot, les agents suivants
auraient construit sur du sable — ou pire, sur une checklist qui mentait
dans les deux sens (des items « faits » qui ne l'étaient pas, et
l'inverse).
Lot B — La forge du contenu
site.json, schéma, moteur de rendu, gabarits (accueil, carte, mentions,
confidentialité), generer.php qui exécute vraiment les gabarits PHP au
lieu de recopier bêtement, verifier.php. C'est le cœur battant : après
B, on ne « code plus le menu dans le HTML », on le déclare.
Lots C à F — Sentinelles, atelier, mesure, visage
Tests techniques et légaux, socle admin puis écrans, collecte d'audience
sobre, design Grand & clair porté jusque dans les détails (filtres carte,
badge horaires, barre d'appel sous bandeau d'annonce, métas locales). Des
worktrees parallèles, des fusions sans conflit grâce aux frontières
Possède. verifier.php repassé au vert après chaque fusion, pas
seulement à la fin — parce qu'un vert final qui cache dix verts fragiles
n'est qu'un théâtre d'ombres.
Tours 1 à 5 — Compléter la v1 technique
Publication paramétrable, câblage mesure et confidentialité, écrans restants, sauvegardes, tableau de bord des mesures, tests d'instantanés, déploiement FTP récursif, vérifications post-déploiement. Puis T-063 : la forme exacte de l'admin sur OVH. Puis la mise en production du site public avec indexation volontairement fermée.
Consolidation — ADR, correctifs, audit
ADR-003 documentée (proposition). Correctifs de connexion et miroir qui
préserve robots.txt. Test du mouvement réduit récupéré d'un stash et
prouvé par mutation. Audit du 15 août : cartographie des écarts, bugs P0
corrigés, docs réalignées, redéploiement. Deux défauts de tests cadrés en
fiches distinctes pour ne pas mélanger les combats.
Ce que la chronique enseigne
La technique avance par lots bornés, pas par big bang. La vérité avance par sources, pas par intuition. La confiance avance en cassant ce qui prétend être vert. Et la production avance quand le miroir sait quoi préserver : admin, api, robots.
Si vous ne retenez qu'une strophe : ne laissez jamais un document de suivi devenir plus optimiste que le code.
Chapitre XI — Dialogue au bord du four
Lecteur : Tout ça pour des pizzas ?
Guide : Tout ça pour que les pizzas arrivent aux bonnes personnes, au bon moment, sans mensonge d'horaire, sans cookie inutile, sans que le gérant dépende d'un magicien pour changer une garniture.
Lecteur : Et si Yann ne répond pas vite ?
Guide : Alors le site reste honnête. Cases vides. Mentions incomplètes visibles. Indexation fermée. Mieux vaut un site prudent qu'un site brillant et faux.
Lecteur : Je peux copier cette architecture ?
Guide : Vous pouvez en copier l'esprit : un indicateur clair, des interdits vérifiables, du HTML indexable, zéro traceur au chargement, une admin à la taille de l'hébergement, et le courage de laisser vide ce qui n'est pas sourcé. Les détails, eux, appartiennent à Évaux.
Le four crépite. Une Margherita sort. Quelqu'un, quelque part, compose peut-être déjà le numéro. Si le site a bien fait son travail, vous ne le saurez pas à une courbe d'analytics — vous le saurez au bruit du téléphone dans la salle.
Allons, le journal est long, et les quêtes aussi. Merci d'avoir marché jusqu'ici. Que votre prochaine recherche « pizzeria Évaux-les-Bains » tombe sur des faits justes — et que votre estomac, lui, tombe sur une pâte qui a pris son temps.
À bientôt sur le chemin.
Chapitre XII — Petits dragons techniques (anecdotes vraies)
Toute quête a ses dragons minuscules. Voici ceux qui ont déjà mordu — pour que vous ne tendiez pas la main au même endroit.
PHP et le PATH. Installé, mais invisible dans un terminal déjà ouvert.
Solution : rouvrir le shell, ou viser le chemin absolu Winget. Un
php.ini écrit à la main ajoute mbstring ; un winget upgrade peut
l'effacer, et soudain les accents dansent de travers.
Git Bash et les antislashes. Un echo qui mange les échappements
produit un JSON de test invalide ; le garde-fou le laisse passer en
silence ; le test « réussit » pour la mauvaise raison. Depuis, les
charges utiles de test se construisent en Python, pas au shell.
Pillow et les panoramas. Nettoyer les métadonnées avant de réduire, c'est inventer une liste de 200 millions d'éléments. Réduire d'abord, nettoyer ensuite. Et lever prudemment la limite anti-bombe : ce sont les photos du client, pas une attaque.
Serveur local fantôme. Un http.server oublié sur le port 4173 sert
un dist/ d'hier pendant que vous croyez tester aujourd'hui. Vérifier
les processus avant de relancer. Et ne pas supprimer un worktree tant
qu'un serveur y verrouille des fichiers.
Secrets entre postes. Git ne transporte pas ftp_logs.env. Le second
ordinateur reconstruit le fichier depuis le coffre, champ par champ —
jamais depuis un chat. Sinon : authentification refusée, et la tentation
de « juste coller le mot de passe quelque part ».
Documentation qui ment. handoff/06 affirmait des bloquants levés qui
ne l'étaient pas. D'où la règle : toute tâche terminée met à jour
STATUS.md dans le même commit. La mémoire humaine n'est pas un
système de fichiers.
Ces dragons ne sont pas glorieux. Ils sont utiles. Une quête se gagne souvent contre l'outillage, pas contre l'ennemi imaginaire.
Chapitre XIII — Pourquoi le HTML indexable est un sort de protection
Imaginez deux auberges. La première affiche sa carte sur un beau tableau interactif qui se remplit après le chargement d'un fichier JSON. La seconde grave les noms des plats dans la pierre de la page.
Un moteur de recherche, un outil d'assistance, un navigateur textuel, un lien partagé qui prévisualise le contenu : tous préfèrent la pierre. Les mots Auvergnate, Saint-Nectaire, Savoyarde sont des passerelles entre la faim d'un humain et la réalité d'une cuisine. Les enfouir derrière une reconstruction JavaScript, c'est demander au monde de faire confiance à un tour de magie à chaque visite.
Nous avons donc choisi la pierre — générée, certes, depuis site.json,
mais pierre quand même une fois publiée. Les filtres « sans viande » ou
autres ne font que tirer un rideau sur des tables déjà dressées. Si le
rideau tombe (JS cassé, script bloqué), le repas reste lisible.
C'est cela, un sort de protection : non pas l'éclat, mais la robustesse.