ESP-IDF CI / Host Tests (Unity) (push) Successful in 1m8s
CI / firmware-native (push) Successful in 2m57s
Rust Protection Tests / Cargo test (host) (push) Failing after 3m21s
ESP-IDF CI / ESP-IDF Build (v5.4) (push) Failing after 6m55s
ESP-IDF CI / Memory Budget Gate (push) Has been skipped
qa-cicd-environments / qa-kxkm-s3-build (push) Successful in 8m53s
qa-cicd-environments / qa-sim-host (push) Successful in 2m2s
qa-cicd-environments / qa-kxkm-s3-memory-budget (push) Successful in 11m17s
Context: the project archive (KXKM_Batterie_Parallelator-main) had no git history locally; a fresh repository is needed to host it on git.saillant.cc (electron/KXKM_Batterie_Parallelator). Approach: initialize a new repo on branch main, stage the archive content, and harden .gitignore before the first commit. Changes: - Import the full project tree: firmware/, firmware-idf/, firmware-rs/, iosApp/, kxkm-bmu-app/, kxkm-api/, hardware/, docs/, specs/, scripts/, models/, tests/ - Keep project dotfiles tracked despite the trailing '.*' ignore rule: .github/, .claude/, .superpowers/, .gitattributes, .markdownlint.json - Extend .gitignore: firmware/src/credentials.h (local secrets, template kept), kxkm-bmu-app/**/build/ (66 MB compiled iOS framework), .remember/ (session data) Impact: the project can now be maintained on the self-hosted Gitea forge with a clean, secret-free initial history.
3.1 KiB
3.1 KiB
Feature Map BMU
Date: 2026-03-30 Statut: post-audit
Inventaire F01-F11
| Feature | Priorité | Module | Test principal | Statut audit |
|---|---|---|---|---|
| F01 Mesure tension | MUST | INAHandler | test_protection | ✅ OK |
| F02 Mesure courant | MUST | INAHandler | test_protection | ✅ OK |
| F03 Coupure sur surtension | MUST | BatteryParallelator | test_protection | ⚠️ CRIT-A: unité mV/V cassée |
| F04 Coupure sur sous-tension | MUST | BatteryParallelator | test_protection | ⚠️ CRIT-A: unité mV/V cassée |
| F05 Coupure sur sur-courant | MUST | BatteryParallelator | test_protection | ⚠️ HIGH-1: négatif non couvert |
| F06 Coupure sur déséquilibre | MUST | BatteryParallelator | test_protection | ⚠️ CRIT-B: compare config au lieu de fleet max |
| F07 Reconnexion automatique | MUST | BatteryParallelator | test_protection | ⚠️ MED-1: pas de lock permanent implémenté |
| F08 Verrouillage permanent | MUST | BatteryParallelator | test_protection | ⚠️ MED-1: nb_switch=5 tombe dans CONNECTED |
| F09 Observabilité logs | SHOULD | KxLogger/SD_Logger | validation runtime | ✅ OK |
| F10 Supervision web | COULD | WebServerHandler | test_web_route_security | ⚠️ CRIT-C/D: deadlock + auth cassée |
| F11 Support 16 batteries | MUST | main/BatteryManager | tests intégration | ✅ OK |
Matrice de couverture tests
| Feature | L1 Unitaire | L2 Simulation | L3 Hardware | Audit |
|---|---|---|---|---|
| F01-F02 | ✅ | ✅ | ⬜ TB02-03 | OK |
| F03-F04 | ✅ stub | ✅ | ⬜ TB05-06 | CRIT-A bloquant |
| F05 | ✅ stub | ✅ | ⬜ TB07 | HIGH-1 partiel |
| F06 | ✅ stub | ✅ | ⬜ TB08 | CRIT-B bloquant |
| F07-F08 | ✅ stub | ✅ | ⬜ TB09-10 | MED-1 incomplet |
| F09 | — | — | ⬜ TB12 | OK |
| F10 | ✅ web tests | — | ⬜ TB13 | CRIT-C/D bloquant |
| F11 | — | ✅ | ⬜ TB11 | OK |
Note: "stub" = les tests vérifient une logique correcte re-implémentée, pas le code réel de BatteryParallelator.
Gaps prioritaires (post-audit 2026-03-30)
- P0 — CRIT-A/B: Corriger unités mV/V dans BatteryParallelator + main.cpp (bloque F03-F06)
- P1 — CRIT-C: Supprimer double I2CLockGuard dans validateBatteryVoltageForSwitch (bloque F10)
- P2 — CRIT-D: Migrer routes web vers POST + câbler token JS (bloque F10)
- P3 — HIGH-1: Ajouter
fabs()dans ERROR handler overcurrent (bloque F05 négatif) - P4 — MED-1: Implémenter verrouillage permanent quand nb_switch > max (bloque F08)
- P5: Réaligner tests avec code réel (pas de stub isolé) — ou ajouter tests d'intégration
- P6: Préparer banc hardware L3 (2 PSUs + charges + multimètres)
Dépendances croisées
flowchart TD
CRITA[CRIT-A\nUnités mV/V] --> F03[F03 Surtension]
CRITA --> F04[F04 Sous-tension]
CRITB[CRIT-B\nFleet max] --> F06[F06 Déséquilibre]
CRITC[CRIT-C\nDeadlock] --> F10[F10 Web]
CRITD[CRIT-D\nAuth web] --> F10
HIGH1[HIGH-1\nNégatif] --> F05[F05 Sur-courant]
MED1[MED-1\nLock] --> F08[F08 Verrouillage]
F03 --> S3[S3 Validation terrain]
F04 --> S3
F05 --> S3
F06 --> S3
F08 --> S3
F10 -.-> S3