PD-172 — Rapport d'acceptabilité¶
Prérequis acceptabilité¶
- Tests CI : 246 tests passés, 0 échec, 17 suites
- Coverage : config 98%, normalizer 93%, circuit-breaker 85%, guard 78%, evaluator 65%, service 13%, observability 30% — couverture unitaire partielle (intégration NestJS requise pour service/profiles)
- TODO non tracés : aucun
- Code DEV ONLY : aucun
Phase 1 — Reviews automatisées¶
| Check | Résultat |
|---|---|
TypeScript (tsc --noEmit) | ✅ 0 erreur rate-limit (1 erreur merkle hors périmètre) |
| ESLint | ✅ 0 erreur, 0 warning |
| Tests Jest | ✅ 246/246 passés |
| Coverage rate-limit | ⚠️ Partiel (modules core >80%, service/profiles <20%) |
Phase 1.5 — Analyse Sonar¶
- Quality Gate : SKIP (Docker indisponible, tier degraded)
- Sonar sera vérifié au pipeline post-merge
Phase 2 — Reviews LLM (Codex gpt-5.3-codex)¶
Review combinée code + tests + sécurité : 1 BLOQUANT, 7 MAJEURS, 3 MINEURS
BLOQUANT¶
| ID | Description |
|---|---|
| PD172-RV-001 | RATE_LIMIT_V2_ENABLED=false ne désactive pas le APP_GUARD — le guard continue d'exécuter le rate-limit |
MAJEURS¶
| ID | Cat. | Description |
|---|---|---|
| PD172-RV-002 | SEC | catch évaluateur traite toutes erreurs comme "Redis indisponible" — erreur interne peut devenir BYPASS_DEGRADED |
| PD172-RV-003 | CODE | Chemin fallback __unrouted__ peut produire ERR-172-05 au lieu de REJECTED_INVALID_CONTEXT |
| PD172-RV-004 | CODE | Health probe accepte undefined/null comme ping OK → faux NOMINAL |
| PD172-RV-005 | SEC | Routes non matchées silencieusement en read_standard — endpoint sensible sans politique restrictive |
| PD172-RV-006 | SEC | Token bucket local dégradé indexé par profile seul — tenant bruyant épuise budget tous tenants |
| PD172-RV-007 | TEST | Pas de tests dédiés au resolver C2 avec DiscoveryService |
| PD172-RV-008 | TEST | Pas de tests unitaires sur LuaScriptService (NOSCRIPT, parsing, timeout) |
MINEURS¶
3 mineurs identifiés (documentation, logging format, retry backoff config).
Verdict acceptabilité¶
NON_CONFORME — 1 bloquant + 7 majeurs à traiter en Gate 8.