From 859ac07a54b4eea2ccfbadafc9b442c15b8eb69c Mon Sep 17 00:00:00 2001 From: Daniel Allaire Date: Sun, 20 Sep 2026 20:36:00 -0400 Subject: [PATCH] console de site : un vide doit avoir la forme de ce qu'il remplace MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit La console du runner de SITE-Chezlepro ne montrait rien. Elle a douze machines. 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() leve. La console d'un site mourait avant sa premiere vue, et le message accusait une methode manquante plutot qu'une forme qui ment. Et la vue regardait au mauvais endroit : le registre vide est voulu, mais la page en tirait le message d'un locataire sans serveurs et les douze machines servies dans hotes n'etaient dessinees nulle part. Une console de site dessine desormais SES machines, en lecture seule, avec leur adresse, leur VMID, leurs roles et leur point de vie ; le panneau droit dit ce qu'elle peut et renvoie aux Assistants. C'est le defaut du 16 septembre par une autre porte : la premiere fois l'inventaire etait vide et la page dessinait ce vide comme un plan vide ; cette fois il est plein et c'est la vue qui regarde ailleurs. Ce qui a trouve la cause n'est pas une lecture mais le BANC : en donnant pour la premiere fois a test_rendu_gui la charge d'une console de site, il a leve sur charger(). Sans lui j'aurais livre une vue juste par dessus un charger() qui leve. Valide : node --check sur le bloc script, 7 tests de rendu dont deux neufs, make test a 0 echec, runbooks.py verifier a 0 ecart, P81 et P83 vertes. P02 reste en echec pour la raison anterieure. Co-Authored-By: Claude Opus 5 --- CHANGELOG.md | 58 +++++++++++++++++ scripts/inventory_gui.py | 92 ++++++++++++++++++++++++++- scripts/tests/test_rendu_gui.py | 109 ++++++++++++++++++++++++++++++++ 3 files changed, 258 insertions(+), 1 deletion(-) 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