From 790ae47981028872796a925bfed6a64609db04fa Mon Sep 17 00:00:00 2001 From: Constantin Jais <74049135+constantin-jais@users.noreply.github.com> Date: Mon, 26 Oct 2026 11:59:32 +0100 Subject: [PATCH 1/2] docs: split WP-4, CA-31 moves to a new work package WP-7 Owner decision of 2026-10-26: WP-4 is split in two work packages. - WP-4 keeps CA-22 (egress) and CA-32 (pass confined to its worktree). Both rest on the same mechanism (R-13: container mounts, network namespace and nftables), so they share one CI probe and one review. - WP-7 carries CA-31 (vector 4 of ADR-0045, adaptive attacks). CA-31 replays recorded model outputs against the deterministic controls (buildJobs, validateVerdict, the aggregation node); it does not depend on the R-13 mechanism, so WP-7 can be done before WP-4. Its scope is the vectors directory, the activation table (to mark its condition met) and docs/evidence for a real-model measure. The PRD gains the WP-7 row, one preamble sentence, and the door count (seven packages). The specification records the move in section 8.2, R-12 and R-15, without rewriting the decision of 2026-10-23. Norm reader (prd-read.ts, governance tools/quality/prd-model.ts): RESULT: pass. It warns that the WP-7 glob tools/review/vectors/** matches no tracked file on the served branch; the directory is created by WP-3. Exempt: docs-only Signed-off-by: Constantin Jais <74049135+constantin-jais@users.noreply.github.com> --- docs/cahier-des-charges.md | 10 ++++++---- docs/prd.md | 16 ++++++++++++---- 2 files changed, 18 insertions(+), 8 deletions(-) diff --git a/docs/cahier-des-charges.md b/docs/cahier-des-charges.md index fca8a15..fe9a424 100644 --- a/docs/cahier-des-charges.md +++ b/docs/cahier-des-charges.md @@ -11,7 +11,8 @@ table de la section 13, qui portent la décision du propriétaire du 2026-10-23 1.5, 3, 7.1, 8.1, 8.3, 10, 11.1 et 11.2, non classés ici entre décision LangGraph et réécriture de forme ; les critères CA-18 à CA-32, ajoutés à la suite des dix-sept critères de la mission (CA-32 et R-16 le 2026-10-24, par décision du propriétaire), dont le texte est -inchangé aux réécritures de forme près ; et ces réécritures, exigées par la norme des paquets de +inchangé aux réécritures de forme près ; le report de CA-31 de WP-4 à WP-7 (section 8.2, R-12 et +R-15, le 2026-10-26, par décision du propriétaire) ; et ces réécritures, exigées par la norme des paquets de travail de `libre-ai/project-governance` (`docs/specifications/WORK-PACKAGES.md`) : chaque paramètre écrit entre chevrons y est écrit en capitales (`ORG/DEPOT`, `DEPOT-CONSOMMATEUR`, `REV`, `SUJET/SHA`), le jalon B prime s'écrit `B'`, et les commandes qui enchaînent deux programmes sont @@ -394,7 +395,8 @@ mémoire sont internes à l'invocation et n'apparaissent dans aucune entrée ni fiables écrites pour une lecture humaine), et les vecteurs rouges 1 à 3 d'ADR-0045 (Conséquences), chacun prouvé rouge sans son contrôle, et le critère CA-31 pour le vecteur 4 (suite d'attaques adaptatives, taux d'utilité et taux d'attaque réussie rapportés ensemble ; - arbitrage du propriétaire du 2026-10-23 : ajouté à WP-4, R-15). La lettre d'INV-a laisse un canal + arbitrage du propriétaire du 2026-10-23 : ajouté à WP-4, R-15 ; porté par WP-7 depuis la scission + de WP-4 décidée par le propriétaire le 2026-10-26). La lettre d'INV-a laisse un canal ouvert : `read` lit hors du worktree de la passe, et le verdict, texte libre compris, est publié sous `docs/reviews/` ; réponse : le critère CA-32 (passe confinée à son worktree par une frontière appliquée hors de `pi`), sixième condition d'activation, appliquée aux deux pilotes (décision du @@ -579,10 +581,10 @@ transitive `@langchain/core` et `@langchain/langgraph-checkpoint`, aux condition | R-9 | Écart entre `evaluate_effect_attestation` et ADR-0034 D4 (accepted) pour `started` et observation indisponible | `effect.rs:277-279` rend `transition-forbidden`, `:227-229` rend `store-unavailable` | un consommateur qui lit « bloqué » sur ces deux cas lit un état que la crate ne rend pas (Q9) | | R-10 | Cinq types à `Debug` dérivé portent des identifiants et deux énumérations les portent par référence | `grep -n 'derive(.*Debug' -A2 src/control.rs src/budget.rs` | un diagnostic de l'appelant qui formate l'un de ces types journalise des identifiants de fil ; CA-5 ne les couvre pas, CA-16 les couvre | | R-11 | La valeur de LangGraph sur un orchestrateur de sous-processus est nulle ou négative (M8, H7) | écart de CA-24 défavorable sur les trois nombres | l'écart s'écrit dans la fiche, il n'interdit pas (arbitrage du 2026-10-23) ; le propriétaire relit la décision sur ce relevé ; CA-29 garde le retrait possible | -| R-12 | L'échéance ADR-0045 (2026-12-31) arrive avant WP-3 et WP-4 | M9 à 0 vecteur à la date | l'orchestrateur de revues est suspendu (ADR-0045 décision 4), avec ou sans LangGraph ; le passage en lecture seule des passes (CA-26) ne dépend pas du paquet et peut précéder WP-2 | +| R-12 | L'échéance ADR-0045 (2026-12-31) arrive avant WP-3, WP-4 et WP-7 | M9 à 0 vecteur à la date | l'orchestrateur de revues est suspendu (ADR-0045 décision 4), avec ou sans LangGraph ; le passage en lecture seule des passes (CA-26) ne dépend pas du paquet et peut précéder WP-2 | | R-13 | Le mécanisme réseau qui applique CA-22 n'existe pas sur la machine de forge (aucun plan `execution-plan-body` ne couvre `tools/review` au commit lu) | vecteur `telemetry-egress-refused` sans mécanisme nommé | l'orchestrateur sous LangGraph ne s'active pas (ADR-0058 section 3 condition 4 : « un harness qui ne produit pas ce refus n'active pas le worker ») ; décision du propriétaire du 2026-10-24 : espace de noms réseau Linux et règles nftables à compteur, le même en CI (runner `ubuntu-24.04`) et sur la machine de forge, où les campagnes réelles tournent dans un conteneur Linux ; écartés le même jour : Seatbelt sur macOS (refus mesuré, aucun compte natif, `sandbox-exec` déprécié), le harness d'`execution-sandbox` (macOS non pris en charge, Linux non qualifié), le report de CA-22 | | R-14 | Un avis de l'éditeur absent de la base `osv-scanner` | date de base et nombre d'entrées imprimés par CA-18 | le fichier `tools/review/advisories.v1.json` le porte ; l'ajout d'une entrée est une édition revue | -| R-15 | Le corpus du vecteur 4 d'ADR-0045 (suite d'attaques adaptatives, taux d'utilité et taux d'attaque réussie rapportés ensemble) est borné par ce que des cas enregistrés peuvent exercer : il prouve les contrôles déterministes, pas la robustesse d'un modèle réel | `grep -n 'AgentDojo' docs/adr/0045-*.md` dans `project-governance` rend la ligne du vecteur ; `grep -n 'CA-31' docs/cahier-des-charges.md` rend le critère | décision du propriétaire du 2026-10-23 : le vecteur est ajouté à WP-4 (CA-31) ; un rejeu avec un modèle réel est une mesure versée dans `docs/evidence/`, jamais un seuil ; M9 compte quatre vecteurs | +| R-15 | Le corpus du vecteur 4 d'ADR-0045 (suite d'attaques adaptatives, taux d'utilité et taux d'attaque réussie rapportés ensemble) est borné par ce que des cas enregistrés peuvent exercer : il prouve les contrôles déterministes, pas la robustesse d'un modèle réel | `grep -n 'AgentDojo' docs/adr/0045-*.md` dans `project-governance` rend la ligne du vecteur ; `grep -n 'CA-31' docs/cahier-des-charges.md` rend le critère | décision du propriétaire du 2026-10-23 : le vecteur est ajouté à WP-4 (CA-31) ; décision du propriétaire du 2026-10-26 : WP-4 est scindé et le vecteur est porté par WP-7, qui ne dépend pas du mécanisme de R-13 ; un rejeu avec un modèle réel est une mesure versée dans `docs/evidence/`, jamais un seuil ; M9 compte quatre vecteurs | | R-16 | L'outil `read` de `pi` n'est pas confiné au worktree de la passe et le verdict, texte libre compris, est publié : un contenu revu peut faire recopier un fichier de l'hôte dans un artefact public (relevé par les relectures de second modèle de WP-3, le 2026-10-24) | aucune condition `pass-read-confined` vraie dans `tools/review/fanout-activation.ts` (absente au commit lu, ajoutée à `satisfied: false` par WP-3) ; vecteur `pass-read-confined` absent | décision du propriétaire du 2026-10-24 : sixième condition d'activation (CA-32), appliquée aux deux pilotes ; aucune campagne réelle de `tools/review` avant WP-4 (la dernière versée est `docs/evidence/2026-08-19-first-real-fanout-campaign.md`) ; le mécanisme est celui de R-13 | ## 13. Table de conformité à SPECIFICATION-STANDARD diff --git a/docs/prd.md b/docs/prd.md index 86ace2f..b3e20d7 100644 --- a/docs/prd.md +++ b/docs/prd.md @@ -11,7 +11,10 @@ l'hypothèse H7, le quatrième défaut de la section 2 (ADR-0045), la ligne Lang phrases de la section 8 (déplacement de `tools/review`, validation du jalon par M8 et M9) et la section 9 (paquets de travail), qui portent la décision du propriétaire du 2026-10-23 (ADR-0058, premier consommateur LangGraph JS de la flotte, sous ADR-0045) ; la ligne `WP-4` de la section 9 et -trois phrases de son préambule, qui portent la décision du propriétaire du 2026-10-24 (CA-32) ; et des +trois phrases de son préambule, qui portent la décision du propriétaire du 2026-10-24 (CA-32) ; la +ligne `WP-7`, le retrait de `CA-31` de la ligne `WP-4`, une phrase du préambule et le compte de la +porte, qui portent la +décision du propriétaire du 2026-10-26 (scission de WP-4) ; et des réécritures de forme exigées par la norme des paquets de travail de `libre-ai/project-governance` (`docs/specifications/WORK-PACKAGES.md`) : chaque paramètre écrit entre chevrons y est écrit en capitales (`ORG/DEPOT`, `DEPOT-CONSOMMATEUR`, `REV`, `SUJET/SHA`), le jalon B prime s'écrit `B'`. @@ -256,7 +259,11 @@ au moins à `décision` (`ecosystem/work-package-policy.v1.yaml`, `approvedFrom` dédiée qui a promu ce document l'a fait en citant l'arbitrage du propriétaire du 2026-10-23. La ligne `WP-4` a été étendue ensuite par une pull request dédiée, qui cite l'arbitrage du propriétaire du 2026-10-24 (CA-32, et les chemins du mécanisme de R-13 et des deux pilotes) ; l'issue de ce -paquet cite le commit de cette extension. Un paquet s'ouvre par une issue qui nomme ce document et +paquet cite le commit de cette extension. Cette ligne a ensuite été scindée par une pull request dédiée, +qui cite l'arbitrage du propriétaire du 2026-10-26 : `CA-31` passe à la ligne `WP-7`, parce que son +rejeu de sorties de modèle enregistrées contre les contrôles déterministes ne dépend pas du +mécanisme de R-13, et WP-7 peut donc précéder WP-4 ; les issues de ces deux paquets citent le commit +de cette scission. Un paquet s'ouvre par une issue qui nomme ce document et sa ligne. Chaque périmètre nomme des chemins sous `tools/review/` ; `tools/review/gates/`, @@ -265,7 +272,7 @@ Chaque périmètre nomme des chemins sous `tools/review/` ; `tools/review/gates/ et le lecteur de la norme le signale comme tel ; `tools/review/confinement/`, ajouté le 2026-10-24 pour le mécanisme de R-13, est déclaré à créer par WP-4. `docs/evidence/` existe (une campagne). -Porte : les six paquets sont `two-way`. Aucun ne modifie un contrat, un lock, une fiche de phase +Porte : les sept paquets sont `two-way`. Aucun ne modifie un contrat, un lock, une fiche de phase acceptée ni un ruleset ; le paquet entre dans un espace de travail Bun propre à `tools/review`, jamais dans `Cargo.toml` ; le chemin d'exécution sans le paquet reste vivant (CA-29), de sorte que le retrait est une pull request qui défait l'ajout, sans migration d'un run ni d'un verdict enregistré ; @@ -279,6 +286,7 @@ de l'orchestrateur ou le déplacement du dépôt (AB-4), n'est pas dans ce jalon | `WP-1` | `CA-18`, `CA-21`, `CA-23` | `tools/review/gates/**`, `tools/review/advisories.v1.json`, `package.json` | `bun test tools/review/gates` | `two-way` | | `WP-2` | `CA-19`, `CA-20`, `CA-25` | `tools/review/*.ts`, `tools/review/package.json`, `tools/review/bun.lock`, `tools/review/bunfig.toml`, `package.json` | `bun run check:review-tools` | `two-way` | | `WP-3` | `CA-26`, `CA-27`, `CA-28` | `tools/review/*.ts`, `tools/review/vectors/**` | `bun test tools/review/vectors` | `two-way` | -| `WP-4` | `CA-22`, `CA-31`, `CA-32` | `tools/review/vectors/**`, `tools/review/confinement/**`, `tools/review/*.ts`, `docs/evidence/**` | `bun test tools/review/vectors` | `two-way` | +| `WP-4` | `CA-22`, `CA-32` | `tools/review/vectors/**`, `tools/review/confinement/**`, `tools/review/*.ts`, `docs/evidence/**` | `bun test tools/review/vectors` | `two-way` | | `WP-5` | `CA-24` | `docs/evidence/**`, `project.v1.yaml`, `README.md` | `grep -n 'langgraph' project.v1.yaml` | `two-way` | | `WP-6` | `CA-29`, `CA-30` | `tools/review/*.ts`, `project.v1.yaml`, `README.md` | `bun run check:review-tools` | `two-way` | +| `WP-7` | `CA-31` | `tools/review/vectors/**`, `tools/review/fanout-activation.ts`, `docs/evidence/**` | `bun test tools/review/vectors` | `two-way` | From d5f9e2ba6bd0252478a22042a793167fa458ec16 Mon Sep 17 00:00:00 2001 From: Constantin Jais <74049135+constantin-jais@users.noreply.github.com> Date: Mon, 26 Oct 2026 12:01:03 +0100 Subject: [PATCH 2/2] docs: name WP-7 among the packages that create tools/review/vectors Second-family review of #29 (GLM 5.3, ACCEPTABLE on 790ae47), one minor finding, applied: the sentence listing the packages that declare the not-yet-tracked directories under tools/review named WP-1, WP-3 and WP-4, while the new WP-7 row also declares tools/review/vectors/**. Exempt: docs-only Signed-off-by: Constantin Jais <74049135+constantin-jais@users.noreply.github.com> --- docs/prd.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/prd.md b/docs/prd.md index b3e20d7..1002230 100644 --- a/docs/prd.md +++ b/docs/prd.md @@ -268,7 +268,7 @@ sa ligne. Chaque périmètre nomme des chemins sous `tools/review/` ; `tools/review/gates/`, `tools/review/vectors/` et `tools/review/advisories.v1.json` n'existent pas encore au commit lu -(`git ls-files tools/review` rend 8 fichiers) : ils sont déclarés à créer par WP-1, WP-3 et WP-4, +(`git ls-files tools/review` rend 8 fichiers) : ils sont déclarés à créer par WP-1, WP-3, WP-4 et WP-7, et le lecteur de la norme le signale comme tel ; `tools/review/confinement/`, ajouté le 2026-10-24 pour le mécanisme de R-13, est déclaré à créer par WP-4. `docs/evidence/` existe (une campagne).