diff --git a/CHANGELOG.md b/CHANGELOG.md
index 9687d2c..d0df2d4 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,28 @@
# CHANGELOG — Set-OPS
+## 2026-08-03 (suite 2) — le panneau présente les deux devis
+
+La vue *Réseau* n'affichait que le devis des commutateurs : **le devis frontière était
+totalement absent de l'interface**, alors qu'il porte les règles de la bordure et ses
+avertissements — dont celui sur « Block private networks », invisible dans les règles
+elles-mêmes.
+
+Ajouté : `/api/devis-opnsense` et son bloc d'affichage, avec bouton de copie. Vérifié **par
+HTTP** que les deux points d'API servent exactement ce que le CLI produit — 181 et 125 lignes,
+identiques au caractère près.
+
+L'import est paresseux et gardé : ce module lit l'underlay et les inventaires de tous les
+tenants, et une erreur y aurait sinon empêché l'affichage du reste de la vue.
+
+### Corrigé — le texte d'aide était périmé sur trois points
+Il annonçait les VLAN tenants « uniques **sur le trunk** » — faux en SDN, où aucun ne circule ;
+renvoyait le dialecte à `SETOPS_DIALECTE` alors que c'est un **intrant** de la section
+*Fabric* ; et disait que « la route par défaut vers OPNsense reste à adapter » alors que la
+section 5 l'émet depuis hier.
+
+Il dit maintenant ce qui reste réellement à nommer à la main : les **ports physiques** et, en
+SDN, le **nœud de sortie EVPN**. Rien d'autre — adresses, VLAN et routes se dérivent.
+
## 2026-08-03 (suite) — le devis frontière rattrape la bascule SDN
Trois affirmations du devis frontière étaient devenues fausses, dont une qui cassait le
diff --git a/scripts/inventory_gui.py b/scripts/inventory_gui.py
index 04457d4..7564465 100644
--- a/scripts/inventory_gui.py
+++ b/scripts/inventory_gui.py
@@ -1403,8 +1403,9 @@ HTML = r"""
Lecture seule. Éditer les meta/flux.yml des rôles, puis make flux.
Chaque instance fédérée dérive son adressage de son seed index (VLAN = 1000 + index×10 + zone, unique sur le trunk). La vue liste la flotte, signale toute collision d'index, et génère le devis des switches.
-
Lecture seule, régénéré du plan — make instances / make devis-reseau. Masques d'ACL selon le dialecte (SETOPS_DIALECTE=cisco|binardat ou make devis-reseau DIALECTE=binardat). Le reste (HSRP, route par défaut vers OPNsense, port de trunk) reste à adapter à ta plateforme.
`;
+
Chaque instance fédérée dérive son adressage de son seed index (VLAN/VNI = 1000 + index×10 + zone, unique dans la fédération). La vue liste la flotte, signale toute collision d'index, et génère les deux devis : commutateurs et frontière nord/sud.
+
Lecture seule, régénérés du plan — make devis-reseau / make devis-opnsense. Le dialecte de CLI et le mode de routage (commutateur ou SDN EVPN) se règlent dans la section Fabric du panneau « Intrants de base ». En mode SDN, les commutateurs ne portent ni VLAN tenant, ni SVI, ni ACL : le routage et le filtrage inter-zone vivent sur les hyperviseurs.
+
Ce qui reste à nommer à la main : les ports physiques (<PORT-VERS-…>) et, en SDN, le nœud de sortie EVPN. Rien d'autre — adresses, VLAN et routes se dérivent.
`;
} else {
d.innerHTML = `
Reconstruction
L'ordre part du socle et remonte : chaque couche suppose la précédente debout. Le tri intra-couche vient du graphe des dépendances.
@@ -1430,6 +1431,7 @@ HTML = r"""
}
let devisReseauTexte = '';
+ let devisFrontiereTexte = '';
function tableauFlotte(inst, coll, fmodeles, findexPris) {
if (!inst.length) return '
Aucune instance découverte (dépôts frères avec plan/nomenclature.yml).