diff --git a/CHANGELOG.md b/CHANGELOG.md index c404be4..41baccb 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,63 @@ # CHANGELOG — Set-OPS +## 2026-09-20 (10) — Un vide doit avoir la forme de ce qu'il remplace + +**83 preuves, `make test` à 0 échec, 7 tests de rendu.** La console de +`console.genese.internal` — celle du runner de SITE-Chezlepro — ne montrait rien. Elle a +douze machines. + +### `charger()` levait, et la page mourait avant de dessiner + +`inventaire_api` sert `serveurs` en **liste** ; `inventaire_api_du_site` le servait en +**table**. Les deux sont « vides », et la page ne les lit pas pareil : +`(data.serveurs || []).map(...)` trouve `{}` — *truthy*, sans `.map` — et `charger()` +lève. Toute la console d'un site s'arrêtait là, avant la première vue, et le message +accusait une méthode manquante plutôt qu'une forme qui ment. + +Un vide doit avoir la **forme** de ce qu'il remplace. Sinon ce n'est pas un vide, c'est un +autre objet qui se fait passer pour lui — et le malentendu ne se voit qu'au moment où +quelqu'un appelle une méthode dessus. + +Un test compare désormais les deux charges **type par type** pour les clés qu'elles +partagent, avec deux écarts admis et motivés. Il ne demande pas les mêmes valeurs — un +site n'a pas de plan de locataire — seulement les mêmes formes. + +### Et la vue regardait au mauvais endroit + +Le registre vide était **voulu** : « on ne fabrique pas un faux plan de tenant pour +remplir l'écran ». C'est juste — un site déclare ses machines dans son propre plan, avec +`ip`, `vmid` et `noeud` **écrits**, là où un locataire les dérive de son seed ; il est le +terrain, il n'a rien dont les faire descendre. + +Mais la vue d'accueil tirait de ce registre vide le message d'un locataire sans serveurs — +« + Serveur », `make serveurs-bootstrap` — et les douze machines, servies dans `hotes`, +n'étaient dessinées nulle part. Une console de site montre maintenant **ses** machines : +mêmes tuiles que les serveurs d'un locataire, en lecture seule, avec leur adresse, leur +VMID, leurs rôles et leur point de vie ; le panneau droit dit ce que cette console peut — +matérialiser le terrain, n'entrer chez aucun locataire — et renvoie aux Assistants. + +**C'est le défaut du 2026-09-16 par une autre porte.** La première fois, l'inventaire était +vide et la page dessinait ce vide comme un plan vide. Cette fois l'inventaire est **plein** +et c'est la vue qui regarde ailleurs. Le premier correctif a donné à la console de quoi +répondre ; il ne lui a pas appris où regarder. + +### Ce qui a trouvé le défaut + +Pas une lecture : **le banc**. `test_rendu_gui.py` dessine les vues sous `node` dans un +DOM simulé. En lui donnant pour la première fois la charge d'une console de SITE, il a +levé `(data.serveurs || []).map is not a function` — c'est-à-dire la cause réelle, sous +le symptôme que je m'apprêtais à corriger. Sans lui, j'aurais livré une vue juste par +dessus un `charger()` qui lève, et la console serait restée vide. + +### Ce qui a été vérifié + +`node --check` sur le bloc `", html, re.S) assert blocs, "aucun bloc