Files
L'électron rare f55093d6fe
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
chore: import KXKM Batterie Parallelator
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.
2026-07-04 12:32:28 +02:00

66 lines
3.1 KiB
Markdown

# 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)
1. **P0 — CRIT-A/B:** Corriger unités mV/V dans BatteryParallelator + main.cpp (bloque F03-F06)
2. **P1 — CRIT-C:** Supprimer double I2CLockGuard dans validateBatteryVoltageForSwitch (bloque F10)
3. **P2 — CRIT-D:** Migrer routes web vers POST + câbler token JS (bloque F10)
4. **P3 — HIGH-1:** Ajouter `fabs()` dans ERROR handler overcurrent (bloque F05 négatif)
5. **P4 — MED-1:** Implémenter verrouillage permanent quand nb_switch > max (bloque F08)
6. **P5:** Réaligner tests avec code réel (pas de stub isolé) — ou ajouter tests d'intégration
7. **P6:** Préparer banc hardware L3 (2 PSUs + charges + multimètres)
## Dépendances croisées
```mermaid
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
```