> ## Documentation Index
> Fetch the complete documentation index at: https://doc.agent-l.integria.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Politiques et garde-fous

> Contrôlez toute action avec DEFAULT, ALLOW, DENY, NEVER et l’approbation.

Le moteur de politiques est indépendant du LLM. Aucun chemin d’exécution n’atteint un outil sans le traverser.

## Une politique fermée par défaut

```text theme={"theme":{"light":"github-light","dark":"vesper"}}
POLICY {
    DEFAULT DENY

    ALLOW inspect_endpoint
    ALLOW isolate_endpoint IF P(credential_attack) >= 0.95

    NEVER isolate_endpoint
        WHEN asset.criticality == CRITICAL

    REQUIRE APPROVAL FOR isolate_endpoint
        WHEN action.risk >= HIGH
}
```

`DEFAULT DENY` signifie qu’ajouter un nouvel outil ne l’autorise pas. Une règle `ALLOW` explicite est nécessaire.

## Ordre de décision

```mermaid theme={"theme":{"light":"github-light","dark":"vesper"}}
flowchart TD
    N{NEVER applicable ?} -->|oui| D[DENIED]
    N -->|non| X{DENY applicable ?}
    X -->|oui| D
    X -->|non| A{ALLOW satisfait ?}
    A -->|non| D
    A -->|oui| H{Approbation requise ?}
    H -->|oui| R[APPROVAL_REQUIRED]
    H -->|non| O[ALLOWED]
```

`NEVER` est irrévocable. Une approbation humaine ne le lève pas et une règle `ALLOW` plus spécifique ne gagne pas contre lui.

## Variables de décision

Les gardes peuvent lire l’état et les propriétés de la requête courante :

| Chemin              | Valeur                   |
| ------------------- | ------------------------ |
| `action.tool`       | nom de l’outil           |
| `action.risk`       | niveau de risque déclaré |
| `action.origin`     | `plan`, `llm` ou `event` |
| `action.confidence` | confiance associée       |
| `action.args.*`     | arguments proposés       |

L’échelle de risque intégrée est ordonnée : `NONE < INFO < LOW < MEDIUM < HIGH < SEVERE < CRITICAL`.

## Gardes indéterminées

Les politiques utilisent une logique trivalente. Un chemin absent n’est pas traité comme un faux rassurant.

| Règle              | Garde indéterminée  |
| ------------------ | ------------------- |
| `NEVER`, `DENY`    | s’applique          |
| `ALLOW`            | ne satisfait pas    |
| `REQUIRE APPROVAL` | route vers l’humain |

Cette convention échoue fermé tout en conservant la logique forte de Kleene pour les expressions composées.

<Warning>
  Un identifiant nu non résolu est une constante symbolique. Préférez un chemin pointé comme `maintenance.window` pour les gardes critiques ; l’analyseur signale les noms simples suspects.
</Warning>

## Écrire des politiques testables

<Steps>
  <Step title="Déclarez le défaut">
    Utilisez `DEFAULT DENY` pour que la surface permise reste explicite.
  </Step>

  <Step title="Autorisez le nominal">
    Ajoutez la condition minimale sous laquelle l’action peut être proposée.
  </Step>

  <Step title="Écrivez les interdits absolus">
    Réservez `NEVER` aux situations qu’aucune approbation ne doit lever.
  </Step>

  <Step title="Déclarez la sortie humaine">
    Utilisez `REQUIRE APPROVAL` pour les risques acceptables mais non autonomes.
  </Step>

  <Step title="Ajoutez un contre-factuel">
    Créez un `SCENARIO` où l’action serait utile mais doit être bloquée.
  </Step>
</Steps>

<Columns cols={2}>
  <Card title="Vérifier les théorèmes" icon="badge-check" href="/core/verifier">
    Examinez routes interdites, replis et surface LLM.
  </Card>

  <Card title="Chaîne de qualité" icon="list-checks" href="/core/quality-gates">
    Intégrez les contrôles dans votre boucle de livraison.
  </Card>
</Columns>
