PD-293 — Rapport de confrontation (Étape 8 — Gate Closure)¶
Ce rapport est produit par l'orchestrateur Claude avant la gate PMO 8. Il confronte les documents produits pour identifier convergences, divergences et zones d'ombre.
1. Sources confrontées¶
| Document | Étape | Version |
|---|---|---|
Specification (PD-293-specification.md) | 1 | v2 corrigée |
Tests (PD-293-tests.md) | 2 | v2 corrigés |
Plan d'implémentation (PD-293-plan.md) | 4 | v2 (post-review) |
Code contracts (PD-293-code-contracts.yaml) | 4 | v2 aligné |
Acceptabilité (PD-293-acceptability.md) | 7 | v1 |
2. Convergences¶
-
Machine d'états : Les 8 états (
STARTING,RUNNING,ESCALADED,PAUSED,DONE,ABORTED,CRASHED,START_FAILED) et leurs transitions autorisées sont identiques dans la spec §5.2, le plan C1 (matricedeclare -A TRANSITIONS), les tests TC-INV-01/TC-INV-02, le code-contracts modulestate-machine, et confirmés par l'acceptabilité (21/21 tests FSM passent). -
14 invariants : Tous les INV-293-01 à INV-293-14 sont tracés de manière cohérente dans la spec, la matrice de couverture des tests (§2), le mapping invariants→mécanismes du plan (§3), et les contracts. L'acceptabilité confirme 12/14 PASS et 2 réserves documentées.
-
7 commandes
/gov-lord:start,status,escalade,respond,pause,resume,stop— identiques dans spec §4.2, plan C5/C6, tests (couverture fonctionnelle), et code-contracts modulecommands. -
Idempotence : Le mécanisme 3 états (
NEW,REPLAY,CONFLICT) est cohérent entre spec §5.1, plan C4, tests TC-NOM-08/TC-ERR-08/TC-ERR-11, et code-contractspersistence. -
FIFO multi-escalade : La file d'escalades ordonnée par
created_atavec traitement FIFO est convergente dans spec INV-293-13, plan §2.2, tests TC-NOM-13, et contracts modulepersistence. -
Détection crash : ≤ 2 cycles polling →
CRASHEDest cohérent dans spec INV-293-08, plan §2.4 (missed_polls), tests TC-NOM-06/TC-ERR-07, et acceptabilité. -
Isolation Ringbearer : Chaque Ringbearer = process
claude -pséparé, aucun partage — convergent entre spec INV-293-03, plan §3 mapping, tests TC-NOM-09/TC-NR-03, et acceptabilité. -
Validation stricte §5.1 : Les regex/enum/bornes sont cohérents entre spec, plan C2, tests TC-NEG-01..10, code-contracts module
validator, et acceptabilité (24/24 tests validator passent). -
Schéma JSON §5.4 : Le format
.gov-lord-state.jsonest identique entre spec et plan, avec la décisionpeer_idsentinelle"pending-{story_id}"documentée dans les deux (H-TECH-09). -
Format log rejet §6.1 : Le format JSONL normatif avec convention
peer_id="sovereign"pour les commandes Sovereign est cohérent entre spec, plan §6, et code-contracts modulevalidator.
3. Divergences¶
⚠️ Les conflits ne doivent JAMAIS être lissés. Chaque divergence est rendue visible.
- DIV-01 : Ordre des gardes
start— 3 gardes (spec) vs 4 gardes (plan) - Spec §5.1 règle 3 :
quota -> doublon idempotence -> validation format complete(3 gardes) - Plan §2.1 :
quota -> idempotence -> format -> doublon story(4 gardes, "story déjà active" est un 4e garde distinct) - Le plan et les contracts module
orchestratorlistent explicitement :"Ordre des gardes pour start : quota -> idempotence -> format -> story non-dupliquee." - La spec ERR-293-02 (
startsurstory_iddéjà active → rejet) existe mais n'est pas dans la liste ordonnée de gardes §5.1. -
Impact : TC-INV-03 teste uniquement
quotaen première garde. Le 4e garde (doublon story) n'a pas de test d'ordre dédié. Incohérence formelle entre le nombre de gardes dans la spec et le plan. Gravité : mineure — le comportement final est correct (doublon rejeté dans tous les cas), seule la position relative de la garde 4 est non spécifiée. -
DIV-02 : Couverture tests réelle vs plan — 45 tests (C1+C2) vs couverture complète attendue
- Acceptabilité Phase 1 : 21/21 FSM (C1) + 24/24 validator (C2) = 45 tests
- Plan §5 / Périmètre de test : liste des tests unitaires C4, intégration C5, perf TC-NOM-04, non-régression TC-NR-01..04 comme in scope
- Acceptabilité review QA : confirme explicitement que C3 (broker), C4 (persistence), C5 (orchestrator) n'ont pas de tests unitaires dédiés
-
Impact : L'acceptabilité déclare "prêt pour Gate 8" avec seulement C1+C2 testés. Le plan promettait une couverture minimale de 80% sur C1-C6. Les tests d'intégration C5, persistence C4, et broker C3 listés dans le plan ne sont pas implémentés. Gravité : majeure — 3 composants sur 6 sans couverture de test, dont l'orchestrateur C5 qui porte la logique métier principale.
-
DIV-03 : Transition
ESCALADED->RUNNING— ambiguïté spec vs décision plan - Spec INV-293-06 : "Une escalade suspend la progression de la story jusqu'à réception d'un
PO_RESPONSEvalide." (au singulier) - Spec §5.3 point 5 : "
respond: injection d'une décision humaine sur la plus ancienne escalade ouverte de la story cible (FIFO intra-story)." - Plan §2.2 précision : "La transition
ESCALADED->RUNNINGne s'effectue que lorsque TOUTES les escalades OPEN de la story sont traitées." - Code-contracts orchestrator : "Multi-escalade : transition ESCALADED->RUNNING uniquement quand TOUTES les escalades OPEN de la story sont traitées."
- La spec ne dit jamais explicitement si la story reste
ESCALADEDaprès réponse à une escalade quand d'autres sont encore OPEN. Le plan tranche dans un sens (TOUTES doivent être traitées). C'est une décision d'implémentation non couverte par un invariant spec. -
Impact : Le test TC-NOM-13 vérifie l'ordre FIFO mais pas le maintien en
ESCALADEDtant que des escalades restent OPEN. Gravité : mineure — la décision du plan est plus conservatrice et cohérente avec l'esprit de INV-293-06, mais elle devrait être explicitement documentée dans la spec. -
DIV-04 : INV-293-02 — réserve acceptabilité sur diagrammes de séquence
- Spec §5bis diagramme séquence : flèches directes
O->>RetR->>O(One Ring → Ringbearer) - Plan §9.4 : "INV-293-02 fait foi. Les flèches directes du diagramme §5bis sont des raccourcis visuels."
- Acceptabilité review code : "INV-293-02 : diagrammes séquence montrent flèches directes O→R (raccourci visuel, tout passe par broker en réalité)"
-
Impact : Le diagramme de la spec contredit textuellement l'invariant INV-293-02. Même si c'est un raccourci visuel admis, le document de spec n'a pas été corrigé. Gravité : mineure — réserve documentée, le plan corrige avec le diagramme enrichi §2ter.
-
DIV-05 : INV-293-05 — réserve acceptabilité sur timestamps
- Spec §5.1 : regex
timestampdécrite comme "horodatage UTC parseable (suffixeZou offset UTC)" - Plan H-TECH-08 : "Strictement
Zuniquement. Tout offset non-zero est rejeté." - Acceptabilité review code : "INV-293-05 : timestamp Z strict dans code vs spec autorisant offsets — décision H-TECH-08 documentée"
- Impact : Le code implémenté est plus restrictif que la spec. La spec autorise les offsets, le code les rejette. La décision est tracée mais la spec n'a pas été amendée. Gravité : mineure — plus restrictif est plus sûr, mais la divergence formelle reste.
4. Zones d'ombre¶
- ZO-01 : TTL escalade et pause — pas de tests ni d'implémentation visible
-
La spec §5.1 définit
escalade_wait_ttl(72h) etpause_ttl(24h) avec alertes répétées à expiration. Ni le plan, ni les tests, ni l'acceptabilité ne mentionnent l'implémentation de ces mécanismes d'alerte temporelle. Le plan §9.2 mentionne D1 ("pas d'état ESCALADE_EXPIRED") mais ne traite pas les alertes répétées que la spec prévoit pourescalade_wait_ttldépassé. -
ZO-02 : Reconnexion broker — timing exact des retries non testé
-
La spec et le plan spécifient "1s, 2s, 4s, 8s, 10s max" (backoff exponentiel borné). TC-ERR-10 teste "mode dégradé puis reprise" mais aucun test ne vérifie les intervalles exacts de retry. L'acceptabilité ne mentionne pas ce test.
-
ZO-03 :
missed_pollsabsent du schéma §5.4 -
Le plan §2.4 utilise un compteur
missed_pollspar story pour la détection crash. Ce champ n'apparaît pas dans le schéma JSON §5.4 de la spec ni dans le schéma du plan. Si One Ring crash et redémarre,missed_pollsest perdu et la détection crash reprend à zéro. Aucun document ne traite ce cas de reprise. -
ZO-04 : TC-NOM-14 (ajouté par le plan) — statut d'implémentation inconnu
-
Le plan ajoute TC-NOM-14 pour couvrir CA-02 (start nominal complet). L'acceptabilité ne le mentionne pas dans ses 45 tests passants. Il n'est pas clair si ce test a été implémenté.
-
ZO-05 :
lord_count_open_escalades(story_id)— interface orpheline -
Cette interface est définie dans le code-contracts module
persistencemais n'est mentionnée ni dans la spec ni dans les tests. Elle est nécessaire pour la précision multi-escalade du plan §2.2 (vérifier s'il reste des escalades OPEN avant transition ESCALADED→RUNNING), mais aucun test ne la couvre explicitement. -
ZO-06 : Hypothèse H-293-04 — protocole messages non vérifié
-
La spec et le plan identifient tous deux que le protocole de messages requis doit être supporté par les peers "sans adaptation de
/gov". L'acceptabilité ne mentionne aucune vérification de cette hypothèse. Le plan §9.1 R2 identifie ce risque comme "Élevé". Si les Ringbearers ne produisent pas deSTATUS_UPDATE,ESCALADE, etc., l'intégralité du système est non fonctionnelle. -
ZO-07 : Comportement exact de
startsi broker DOWN - La spec ERR-293-06 dit "État dégradé + alerte Sovereign + retries reconnection". Le plan §2.1 lance le Ringbearer (
claude -p) puis la supervision prend le relais. Mais que se passe-t-il si le broker est DOWN au moment dustart? Le Ringbearer est-il lancé quand même (il ne pourra pas s'enregistrer) ? Aucun document ne clarifie ce cas.
5. Recommandation¶
- Procéder — convergence confirmée, aucun conflit bloquant
- Rework nécessaire — divergences à résoudre avant de continuer
- Escalade — décision humaine requise sur un point structurant
Justification :
DIV-02 est le point critique : l'acceptabilité déclare "prêt pour Gate 8" avec seulement 2 composants sur 6 testés (C1, C2). L'orchestrateur (C5), la persistence (C4) et le broker-adapter (C3) — qui portent respectivement la logique métier, l'intégrité des données et la communication — n'ont aucun test dédié. Le plan promettait 80% de couverture sur C1-C6.
Actions minimales pour lever le blocage : 1. Documenter explicitement que la couverture C3/C4/C5 est reportée en v2 (dette technique acceptée), OU implémenter les tests manquants. 2. Amender la spec §5.1 garde start pour inclure le 4e garde "doublon story" (DIV-01) ou justifier l'écart. 3. Clarifier le comportement multi-escalade ESCALADED→RUNNING dans la spec (DIV-03) pour aligner avec la décision du plan.
Les divergences DIV-04 et DIV-05 sont des réserves mineures documentées, acceptables en l'état. Les zones d'ombre ZO-01 à ZO-07 sont des points de vigilance pour la review PMO mais ne sont pas individuellement bloquants.