diff --git a/CHANGELOG.md b/CHANGELOG.md index 3a236a0..bee6bf1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,27 @@ # CHANGELOG — Set-OPS +## 2026-10-11 (129) — Le runner d'un locataire conseillait de republier une face juste + +**94 preuves.** `make verifier` passe et `test_portee_console.py` compte un cas de plus. Ce +test échoue quand on retire la condition. + +### Mesuré au premier déploiement du lot 2, sur le runner de Technolibre + +Sur le runner du locataire, la vue « Lien avec le site » marquait sa face réseau « à +republier », alors que le poste la jugeait à jour. Une seule valeur différait : la clé +d'amorçage de `ops-01`. Cette clé est celle du runner du site ; la face la porte pour que le +site puisse amorcer le runner du locataire. `_cle_amorcage` va la lire dans le plan du site, +et le runner du locataire n'a pas ce plan. Il calculait donc une face sans elle. Le conseil +affiché était nuisible : republier depuis ce runner aurait retiré la clé de la face. + +La face ne se juge plus que là où la carte du site est montée, comme la fiche. Ailleurs, elle +est lue et affichée « non jugeable d'ici ». + +**Limite.** La cause reste dans le moteur : la face se veut calculable par le locataire seul, +et une de ses valeurs vient du plan du site. Si la fiche du site portait cette clé, le +locataire pourrait juger et republier sa face n'importe où. P92 n'est pas touchée : elle tourne +sur le poste, où le plan du site est présent. + ## 2026-10-11 (128) — Le site et ses locataires se lisaient par deux fichiers que leurs consoles ne montraient pas **94 preuves.** `make verifier` passe. Le banc de rendu dessine les deux nouvelles vues sur diff --git a/scripts/inventory_gui.py b/scripts/inventory_gui.py index 7e25921..22b41a7 100644 --- a/scripts/inventory_gui.py +++ b/scripts/inventory_gui.py @@ -1002,15 +1002,21 @@ def lien_du_locataire(instance: Path) -> dict: import contexte as _ctx loc = _ctx.Locataire(instance) face = loc.face_publiee() - try: - ecarts_face = _ctx.verifier_face_publiee(loc) - except Exception as exc: # une face incalculable ne doit pas masquer la publiee - ecarts_face = [f"face incalculable ici : {exc}"] fiche = loc.fiche_du_site() or {} try: site = loc.site() except _ctx.ContexteInvalide: site = None + # LA FACE NE SE JUGE QUE LA OU LA CARTE DU SITE EST MONTEE (mesure du 2026-10-11 sur + # le runner de Technolibre). Elle porte, pour le runner du locataire, la cle du runner + # du site (`_cle_amorcage`), lue dans le plan du SITE. Sans ce plan, la face calculee + # perd cette cle : la page disait « a republier », et republier d'ici l'aurait retiree. + ecarts_face = None + if site is not None and face is not None: + try: + ecarts_face = _ctx.verifier_face_publiee(loc) + except Exception as exc: # une face incalculable ne doit pas masquer la publiee + ecarts_face = [f"face incalculable ici : {exc}"] ecarts_fiche = None if site is not None and fiche: try: @@ -1022,6 +1028,7 @@ def lien_du_locataire(instance: Path) -> dict: "hebergeur": loc.nom_hebergeur(), "face": {"publiee": face is not None, "trace": _trace_git(loc.depot, _ctx.NOM_FICHIER_FACE_RESEAU), + "jugeable": site is not None, "ecarts": ecarts_face, "resume": resume_face(face) if face else None}, "fiche": {"presente": bool(fiche), @@ -4245,6 +4252,7 @@ let selMachine = null; // MA FACE RESEAU let etatFace; if (!F.publiee) etatFace = 'jamais publiée'; + else if (!F.jugeable) etatFace = 'lue, non jugeable d\'ici'; else if ((F.ecarts || []).length) etatFace = 'à republier'; else etatFace = 'à jour avec mon plan'; const face = !F.publiee ? `