# Cascade Forget (oubli en cascade)

*Supprimer les dérivés en suivant le lignage, traiter l’historique selon la classe de rétention, et signaler ce qui n’a pas pu être fait.*

> **Cascade Forget** est une suppression qui suit le lignage : quand une source est supprimée, ou que quelqu’un demande à être oublié, le NAS retrouve tout ce qui en dérive, y compris résumés, embeddings, notes qui la citent, caches et liens de partage, le supprime ou le re-dérive sans cette source, et délivre un **rapport** : ce qui a été fait, et ce qui n’a pas pu l’être.

**AN-09** · Niveau de conformité : L3 Guard · Groupe : Connaissance

## Le problème

Supprimer un fichier ne supprime ni ses embeddings, ni ses résumés, ni les faits que la mémoire en a déduits ; les instantanés et les sauvegardes subsistent ; et le contenu reste dans l’historique des versions.

« Récupérable » et « oubliable » sont les deux bouts d’un même axe, et la plupart des systèmes ne confient pas ce choix à une personne. Si l’on ne pense à l’oubli qu’après l’écriture, c’est généralement trop tard.

## Fonctionnement

- **Lignage.** Chaque dérivé enregistre ses entrées ; un index inverse répond à « tout ce qui dépend de X » ; le champ `sources` d’une note est aussi du lignage.
- **Classe de rétention, décidée à l’écriture** (car on ne peut pas réécrire l’historique ensuite) : `scratch` (TTL court, hors sauvegardes, nettoyable à la fin de l’exécution), `normal` (versionné, récupérable) et `sensitive` (son propre domaine de clés, qui peut être détruit en détruisant la clé).
- **La tension entre reprise et oubli.** Récupérable dans la fenêtre de suppression logique ; supprimé définitivement seulement après ; une demande d’oubli peut sauter la fenêtre.
- **Processus.** Une demande (émise par une personne ou un opérateur ; un agent peut seulement demander, pas exécuter), parcours du lignage, suppression des dérivés et re-dérivation des faits d’origine mixte, réécriture de l’historique des chemins concernés et nettoyage des instantanés pour la classe `normal`, destruction des clés pour la classe `sensitive`, et enfin le rapport.
- **Le rapport :** le nombre de fichiers supprimés, de dérivés retirés, si l’historique a été réécrit, les clés détruites, les instantanés pas encore expirés, et une **liste explicite de ce qu’il ne couvre pas :** copies hors du NAS, journaux du fournisseur de modèle et poids du modèle.
- Il passe toujours par une [Human Gate](https://agentnas.com/fr/concepts/human-gate/) (ou une politique d’autorisation préalable) ; une **conservation juridique (legal hold)** bloque l’oubli et est enregistrée.

## Commencer petit

- Commencez par les classes de rétention et la suppression logique, et enregistrez les entrées de chaque dérivé.
- Atteignez d’abord « quand un fichier source est supprimé, lister et supprimer tous ses dérivés ».
- Gardez l’effacement cryptographique pour la classe `sensitive` ; il n’est pas nécessaire de le faire partout au début.

## Esquisse d’interface

À titre d’illustration seulement. Les noms de champs peuvent changer avant la spécification v0.3.

*forget-report.json*

```json
{
  "forget_id": "fgt_3b7c",
  "selector": { "paths": ["/shared/crm/acme/**"], "subject": "customer/acme" },
  "retention_class": "sensitive",
  "report": {
    "files_removed": 142,
    "derived_removed": { "embeddings": 3621, "summaries": 210, "notes_rewritten": 6 },
    "history": "rewritten (3 commits)",
    "keys_destroyed": ["key_acme"],
    "snapshots_pending": ["nightly-2026-11-10 (expires 2026-11-17)"],
    "not_covered": ["copies outside the NAS", "model provider logs", "model weights"]
  },
  "state": "pending_expiry"
}
```

## Ce que demande la spécification

- L’oubli DOIT se propager en suivant le lignage, de la source à chaque dérivé.
- La classe de rétention DOIT être attribuée à l’écriture (`normal` par défaut).
- Un rapport d’oubli DOIT énumérer ce qu’il ne couvre pas : copies hors du NAS, journaux du fournisseur et poids du modèle.
- Une conservation juridique DOIT bloquer l’oubli et DOIT être enregistrée.
- Un agent PEUT demander l’oubli mais NE DOIT PAS l’exécuter.
- Un rapport NE DOIT PAS prétendre qu’un modèle a « oublié » quoi que ce soit.

## Ce qui est emprunté, et ce qui est nouveau

Tout ce qui précède est établi. **Ce qui est nouveau :** traiter la **classe de rétention** comme une propriété explicite du stockage, et admettre que « récupérable » et « oubliable » sont un compromis sur un même axe.

- [OpenLineage](https://openlineage.io)
- [GDPR Article 17](https://gdpr-info.eu/art-17-gdpr/)
- [Long-term memory security survey (forget and rollback)](https://arxiv.org/abs/2604.16548)

## Limites assumées

- Les sauvegardes, les copies hors du NAS et les journaux des fournisseurs de modèles sont hors du périmètre.
- Pour les faits déduits de plusieurs sources, le « périmètre touché » est difficile à définir.
- Réécrire l’historique est coûteux et comporte des risques.

## Questions ouvertes

- Comment définir le périmètre touché par un fait d’origine mixte ?
- Quel doit être le processus quand une conservation juridique entre en conflit avec une demande d’oubli ?

## Questions

### Peut-il faire oublier un modèle ?

Non, et il ne prétendra pas le faire. Ce qu’il peut faire, c’est supprimer des fichiers et des dérivés dans le NAS et, pour la classe `sensitive`, l’historique et les clés ; les journaux des fournisseurs de modèles et les poids des modèles sont hors du périmètre, et le rapport le dit explicitement.

### Pourquoi choisir une classe de rétention à l’écriture ?

Parce que l’historique est difficile à réécrire ensuite : ce qui est déjà entré dans les sauvegardes et l’historique ne peut qu’être réécrit ou attendre d’expirer. Décider à l’écriture si une donnée est `scratch`, `normal` ou `sensitive` est la condition préalable pour pouvoir supprimer proprement plus tard.

### Un agent peut-il demander tout seul d’oublier quelque chose ?

Il peut émettre une demande mais pas l’exécuter. L’oubli est irréversible et doit passer par une personne ou une politique d’autorisation préalable, et une conservation juridique peut le bloquer.

## Concepts liés

- [Agent Memory (mémoire de l’agent)](https://agentnas.com/fr/concepts/agent-memory/): Des notes que vous pouvez lire et modifier font la vérité. Les index sont un cache que vous pouvez jeter.
- [Flight Recorder (enregistreur de vol)](https://agentnas.com/fr/concepts/flight-recorder/): Un enregistrement par exécution, chaîné par hachage, qui inclut ce que l’exécution a lu.
- [Agent Branch (branche d’agent)](https://agentnas.com/fr/concepts/agent-branch/): Chaque exécution travaille sur une branche en copy-on-write. Seule une fusion relue atteint la ligne principale.

---

URL canonique : https://agentnas.com/fr/concepts/cascade-forget/
Mis à jour le: 2026-11-11 · Brouillon de spécification v0.2 · CC BY 4.0
