Skip to content

feat(policy-engine): add zero-expansion source optimization - #5

Merged
Tetrax merged 1 commit into
mainfrom
feat/policy-engine-v2-safe-source-aggregation
Aug 20, 2026
Merged

feat(policy-engine): add zero-expansion source optimization#5
Tetrax merged 1 commit into
mainfrom
feat/policy-engine-v2-safe-source-aggregation

Conversation

@Tetrax

@Tetrax Tetrax commented Aug 20, 2026

Copy link
Copy Markdown
Owner

Objectif

Ajoute une phase d’optimisation des sources strictement zéro-expansion, sans modifier les invariants du Policy Engine V2.

Architecture minimale

  1. Fusion finale de policies uniquement si partition équipement/VDOM/interfaces, destinations et serviceKeys techniques sont identiques.
  2. Vérification de chaque tuple source × destination × service dans les FlowAtoms avant fusion.
  3. Réutilisation d’un objet CIDR FortiGate seulement si toutes ses adresses correspondent exactement aux sources de la policy.
  4. Recalcul des métriques avant/après.
  5. Affichage dans Déployer : policies avant/après, fusions sources et objets réutilisés.

Sécurité

Invariants inchangés :

Coverage = 100 %
Missing = 0
Unexpected = 0
Expansion = 0 %

Le libellé n’est jamais utilisé comme identité de fusion. DNS TCP et DNS UDP restent séparés.

Un subnet existant n’est jamais réutilisé sur simple inclusion ou densité. La cardinalité et l’appartenance doivent être exhaustivement identiques.

Résultat dataset réel

Policies avant             388
Policies après             388
Sources fusionnées           0
Objets source réutilisés      0
Observed tuples           7 230
Missing                       0
Unexpected                    0
Expansion                   0 %
Temps moteur             ~1,54 s

Ce résultat est volontaire : les trois doublons visuels observés sont en réalité TCP:53 contre UDP:53, et l’objet AVR-LAN-STATIONS-10.250.16.0/23 couvre 512 adresses alors que la meilleure policy n’en prouve que 59. Les fusionner/réutiliser ouvrirait des permissions supplémentaires.

Cas synthétique prouvé

Policies avant               2
Policies après               1
Missing                      0
Unexpected                   0
Expansion                  0 %

Un objet /30 existant est réutilisé uniquement lorsque ses quatre adresses sont exactement les quatre sources autorisées. Une couverture 3/4 est refusée.

Vérifications

Tests Node                 110/110 PASS
Syntaxe                    PASS
Compose                    PASS
npm audit CRITICAL         PASS
Image candidate            fortiflow:sourceopt-0dc1ff653ffc
Replay session réelle      PASS
POST /api/deploy/generate  HTTP 200

Version applicative : 1.1.0.

@Tetrax
Tetrax merged commit 3c7ef19 into main Aug 20, 2026
4 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant