PD-42 — Retour d'experience (REX)¶
1. Resume executif¶
Objectif initial : Definir et implementer un mecanisme de recherche deterministe sur keywords tokenises (primitive cryptographique client), permettant l'execution de requetes cote serveur sans acces aux keywords en clair (zero-knowledge contractuel).
Resultat obtenu : Module client src/crypto/search/ fonctionnel avec 70 tests PASS (Canonicalizer, KeyDeriver, Tokenizer). Les composants serveur (MetadataValidator, SearchIndex, TokenStorage) sont specifies dans le plan mais implementes dans PD-236.
Verdict d'acceptabilite : - 2026-01-24 : REFUSE (E-01 bloquant, E-02 majeur) - 2026-01-25 : ACCEPTE (E-01/E-02 resolus par delegation formalisee a PD-236)
Etat des tests contractuels : - Tests client (PD-42) : 70/70 PASS - Tests serveur (PD-236) : 135/135 PASS - Vecteurs deterministes VEC-01, VEC-02, VEC-03 : PASS
2. Points fluides¶
-
Specification canonique solide : La structure en invariants (INV-01..05), criteres d'acceptation (CA-01..05), parametres contractuels (4.1..4.5) et cas d'erreur (ERR-01..05) a fourni un referentiel non ambigu.
-
Vecteurs de test deterministes : Les 3 vecteurs VEC-01/02/03 avec valeurs hexadecimales intermediaires (K_search, HMAC-SHA256, b64url) ont permis une validation cryptographique bit-a-bit.
-
Decoupage client/serveur explicite : La separation des responsabilites (client = tokenisation, serveur = stockage/recherche) a permis un developpement parallele avec PD-236.
-
Tests contractuels automatisables : La formulation Given/When/Then des scenarios TC-* a permis une transposition directe en tests vitest.
-
Hors-perimetre explicite : L'enumeration des elements hors-perimetre (full-text, fuzzy, frequence, dictionnaire) a clarifie les attentes et evite les debats lors de la revue.
3. Points difficiles¶
-
Ambiguite plan/code sur les composants serveur : Le plan d'implementation (§4.4-4.6) decrivait des modules serveur (MetadataValidator, SearchIndex, TokenStorage) sans preciser qu'ils etaient hors-scope du code PD-42. Cela a conduit a l'ecart E-01 (bloquant).
-
Hypotheses supplementaires non prevues : Les hypotheses H-04 a H-09 ont ete introduites dans le plan et la matrice de couverture, au-dela des H-01 a H-03 contractuels de la spec. Cela a conduit a l'ecart E-02 (majeur).
-
Coordination inter-repos : La primitive PD-42 (app) et sa consommation PD-236 (backend) ont ete developpees dans des repos distincts, necessitant une synchronisation sur les contrats d'interface.
-
Checklist de livraison client/serveur melee : La checklist §14 originale melangeait items client et serveur sans distinction, masquant l'etat reel de completude.
4. Hypotheses revelees tardivement¶
| ID | Hypothese | Decouverte |
|---|---|---|
| H-04 | Bibliotheque crypto conforme (HKDF, HMAC-SHA256) | Prerequis implicite client, explicite lors de la revue plan |
| H-05 | Implementation Unicode NFC disponible et conforme UAX #15 | Prerequis implicite client, explicite lors de la revue plan |
| H-06 | Base64 URL-safe sans padding disponible | Decouvert comme hypothese serveur, delegue a PD-236 |
| H-07 | Comparaison byte-to-byte sans normalisation cote serveur | Decouvert comme hypothese serveur, delegue a PD-236 |
| H-08 | Stockage supporte VARCHAR(22) | Decouvert comme hypothese serveur, delegue a PD-236 |
| H-09 | user_id gere cote serveur (contexte auth) | Decouvert comme hypothese serveur, delegue a PD-236 |
Impact : Ces hypotheses ont ete integrees a la spec §10 et au plan §10.2 lors de la correction de E-02.
5. Invariants complexes¶
| ID | Complexite | Mecanisme | Test(s) | Risque residuel |
|---|---|---|---|---|
| INV-01 | Faible | HMAC-SHA256 est une PRF deterministe | TC-NOM-01, TC-NR-01 | Aucun (propriete mathematique) |
| INV-02 | Faible | Resistance aux collisions HMAC-SHA256 dans l'espace nominal | TC-NOM-03 | Collision theorique (2^-132) |
| INV-03 | Elevee | API serveur n'accepte que T_kw + metadonnees | TC-NOM-06, TC-NEG-01 | Ajout futur d'un champ "keyword" par erreur |
| INV-04 | Moyenne | HKDF derive K_search par K_master_user ; scope USER | TC-NOM-05 | Partage accidentel de K_master_user |
| INV-05 | Faible | Comparaison byte-to-byte sur T_kw | TC-NOM-04 | Normalisation serveur non desiree |
Note : INV-03 (zero-knowledge serveur) est l'invariant le plus sensible ; sa verification repose sur des tests d'inspection probatoire (TC-NOM-06) implementes dans PD-236.
6. Dette technique¶
| Element | Description | Criticite | Impact |
|---|---|---|---|
| Documentation API | Non produite (checklist §14.3) | Faible | Documentation a completer |
| Tests d'integration client/serveur | Pas de tests end-to-end croises PD-42/PD-236 | Moyenne | Regression possible a l'interface |
| Corpus Unicode diversifie | Tests canonicalisation limites aux cas basiques | Faible | Cas limites Unicode non couverts |
7. Risques residuels¶
| Risque | Probabilite | Impact | Mitigation actuelle |
|---|---|---|---|
| Attaque par frequence/dictionnaire | Accepte | Moyen | Hors perimetre (spec §2.2) |
| Collision fonctionnelle | Tres faible | Eleve | 132 bits (2^-132), monitoring |
| Reindexation apres rotation K_master_user | Certaine | Eleve | Procedure documentee (plan §9.3) |
| Derive de l'interface client/serveur | Faible | Moyen | Contrat fige par algorithm_id/canonicalization_id |
8. Ameliorations de processus¶
-
Expliciter la delegation inter-US des le plan : Lorsqu'un plan d'implementation decrit des composants implementes dans une autre US, ajouter une note de delegation explicite des la redaction initiale (pas en correction).
-
Separer les hypotheses client/serveur dans la spec : Distinguer H-xx client (environnement d'execution) et H-xx serveur (delegues a une autre US) pour eviter l'ambiguite.
-
Structurer la checklist par repo/US : Organiser la checklist de livraison avec des sous-sections explicites par responsable (PD-42 client, PD-236 serveur) pour visualiser l'etat reel.
-
Revue croisee des plans avant implementation : Lorsqu'une US depend d'une autre (PD-42 → PD-236), effectuer une revue croisee des plans pour verifier la coherence des interfaces.
-
Inclure les references de delegation dans les References : Ajouter systematiquement une section "Delegation" dans les References pointant vers les US dependantes.
9. Enseignements cles¶
-
La delegation doit etre explicite et tracable : Un ecart BLOQUANT (E-01) a ete resolu par l'ajout de notes de delegation formelles dans le plan. La traçabilite plan → code doit couvrir les delegations, pas seulement le code local.
-
Les hypotheses supplementaires doivent etre integrees a la spec : Les hypotheses revelees en cours d'implementation (H-04..H-09) ont ete retro-integrees a la spec §10 pour maintenir la coherence contractuelle.
-
Le verdict peut evoluer sans reexecution des tests : Le passage de REFUSE a ACCEPTE entre le 24 et le 25 janvier a ete obtenu par correction documentaire (delegation, hypotheses), les 70 tests client etant deja PASS.
-
La coordination multi-repos necessite des contrats d'interface figes : Les identifiants normatifs (algorithm_id, canonicalization_id, k_search_scope) servent de contrat stable entre PD-42 (client) et PD-236 (serveur).
-
Le hors-perimetre protege le perimetre : L'enumeration explicite des elements hors-perimetre (frequence, dictionnaire, full-text) a evite les derives de scope et clarifie les attentes de la revue d'acceptabilite.