chore(rtc): add evidence runbook for dual-loop blocker and hw traces
This commit is contained in:
+29
-46
@@ -1,71 +1,54 @@
|
||||
{
|
||||
"timestamp_utc": "2026-02-21T03:15:00Z",
|
||||
"scope": "esp32_audio_dev_a252_only",
|
||||
"overall_passed": true,
|
||||
"bench_context": {
|
||||
"active_env": "esp32dev",
|
||||
"flash_port": "/dev/cu.SLAB_USBtoUART",
|
||||
"s3_present": false
|
||||
},
|
||||
"timestamp_utc": "2026-02-21T18:20:29.000908+00:00",
|
||||
"overall_passed": false,
|
||||
"results": [
|
||||
{
|
||||
"name": "ZeroClaw preflight",
|
||||
"passed": true,
|
||||
"name": "SLIC transition A252",
|
||||
"passed": false,
|
||||
"details": {
|
||||
"command": "python3 scripts/zeroclaw_hw_preflight.py --require-port --zeroclaw-bin /Users/cils/Documents/Lelectron_rare/Kill_LIFE/zeroclaw/target/release/zeroclaw",
|
||||
"ports_seen": [
|
||||
"/dev/tty.SLAB_USBtoUART",
|
||||
"/dev/tty.usbserial-0001",
|
||||
"/dev/tty.usbmodem5AB90753301"
|
||||
]
|
||||
"error": "Timeout waiting response to 'CALL' on /dev/cu.usbmodem5AB90753301; last='UNKNOWN CALL'"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "esp32dev build",
|
||||
"passed": true,
|
||||
"name": "SLIC transition S3",
|
||||
"passed": false,
|
||||
"details": {
|
||||
"command": "pio run -e esp32dev"
|
||||
"ring_state": "OFF_HOOK",
|
||||
"offhook_state": "OFF_HOOK",
|
||||
"idle_state": "OFF_HOOK"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "esp32dev upload",
|
||||
"passed": true,
|
||||
"name": "A252 full-duplex",
|
||||
"passed": false,
|
||||
"details": {
|
||||
"command": "pio run -e esp32dev -t upload --upload-port /dev/cu.SLAB_USBtoUART"
|
||||
"duration_s": 120,
|
||||
"error": "Timeout waiting response to 'RESET_METRICS' on /dev/cu.usbmodem5AB90753301; last='UNKNOWN RESET_METRICS'"
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "serial smoke",
|
||||
"passed": true,
|
||||
"name": "S3 local mode",
|
||||
"passed": false,
|
||||
"details": {
|
||||
"ping": "PONG",
|
||||
"status_keys": [
|
||||
"board_profile",
|
||||
"telephony",
|
||||
"hook",
|
||||
"full_duplex",
|
||||
"audio_drop_frames"
|
||||
],
|
||||
"status_snapshot": {
|
||||
"board_profile": "ESP32_A252",
|
||||
"full_duplex": true,
|
||||
"audio_drop_frames": 0
|
||||
}
|
||||
"duration_s": 20,
|
||||
"telephony_state": "OFF_HOOK",
|
||||
"audio_drop_frames": 0,
|
||||
"bench_latency_ms": 9999
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "startup stability",
|
||||
"name": "A252 web endpoints",
|
||||
"passed": true,
|
||||
"details": {
|
||||
"fixed_issue": "lwIP Invalid mbox reboot loop",
|
||||
"evidence": [
|
||||
"[RTC_BL_PHONE] AP ready: ssid=RTC_BL_PHONE ip=192.168.4.1",
|
||||
"[WebServerManager] HTTP server started"
|
||||
]
|
||||
"skipped": true
|
||||
}
|
||||
},
|
||||
{
|
||||
"name": "S3 web endpoints",
|
||||
"passed": true,
|
||||
"details": {
|
||||
"skipped": true
|
||||
}
|
||||
}
|
||||
],
|
||||
"notes": [
|
||||
"Run execute on ESP32 audio dev only; S3 validation skipped for this bench."
|
||||
]
|
||||
}
|
||||
|
||||
@@ -1,78 +1,13 @@
|
||||
# Rapport campagne globale de tests fonctionnels — RTC_BL_PHONE
|
||||
# Rapport validation HW
|
||||
|
||||
## Résumé global
|
||||
Tous les modules ont été testés individuellement et en intégration. Les résultats sont détaillés par module ci-dessous.
|
||||
- Date UTC: 2026-02-21T18:20:29.000908+00:00
|
||||
- Verdict global: FAIL
|
||||
|
||||
---
|
||||
|
||||
### AudioManager
|
||||
- Initialisation : OK
|
||||
- Abstraction codec (ES8388, PCM5102, Generic) : OK
|
||||
- Volume/mute : OK, tests edge cases
|
||||
- Monitoring signal : OK
|
||||
- Logs : conformes, traçabilité assurée
|
||||
- Robustesse : aucun crash, gestion d’erreur efficace
|
||||
|
||||
### RTOSManager
|
||||
- Multitâche : création et gestion de tâches FreeRTOS OK
|
||||
- Watchdog : activation, feed, timeout OK
|
||||
- Audit des tâches : reporting complet
|
||||
- Logs : conformes, traçabilité assurée
|
||||
- Robustesse : aucun deadlock, timing stable
|
||||
|
||||
### BluetoothManager
|
||||
- Initialisation : OK
|
||||
- Connexion/déconnexion : OK (HFP, BLE)
|
||||
- Sécurité : activation/désactivation OK
|
||||
- Logs : conformes, traçabilité assurée
|
||||
- Robustesse : gestion des erreurs, fallback ESP32-S3 OK
|
||||
|
||||
### Endpoints HTTP
|
||||
- Tests GET/POST sur tous les endpoints : OK
|
||||
- Sécurisation (authentification, validation) : OK
|
||||
- Charge et scénarios multi-utilisateurs : OK
|
||||
- Logs et artefacts centralisés
|
||||
|
||||
### Sécurité
|
||||
- Authentification endpoints : OK
|
||||
- Validation des données : OK
|
||||
- Tests d’intrusion : aucun accès non autorisé
|
||||
- Traçabilité : logs et artefacts CI
|
||||
|
||||
---
|
||||
|
||||
## Conclusion
|
||||
Tous les modules sont validés, robustes et intégrés. La traçabilité, la sécurité et la documentation sont assurées. Prêt pour la phase suivante ou la livraison.
|
||||
|
||||
**Version :** 2026-02-17
|
||||
|
||||
---
|
||||
|
||||
## Campagne terrain ZeroClaw — 2026-02-21 (ESP32 audio dev)
|
||||
|
||||
Contexte:
|
||||
|
||||
- Cible active: `esp32dev` (ESP32 audio dev)
|
||||
- Port flash: `/dev/cu.SLAB_USBtoUART`
|
||||
- Scope: terminal build/flash/smoke, sans carte S3 sur ce bench
|
||||
|
||||
Resultats:
|
||||
|
||||
- Preflight ZeroClaw USB: OK
|
||||
- Build `pio run -e esp32dev`: OK
|
||||
- Upload `pio run -e esp32dev -t upload --upload-port /dev/cu.SLAB_USBtoUART`: OK
|
||||
- Smoke serie:
|
||||
- `PING` => `PONG` (OK)
|
||||
- `STATUS` => JSON complet (OK)
|
||||
|
||||
Incident corrige pendant la campagne:
|
||||
|
||||
- Reboot loop `lwIP Invalid mbox` au demarrage web.
|
||||
- Cause: `AsyncWebServer::begin()` lance avant init reseau.
|
||||
- Correctif applique:
|
||||
- init Wi-Fi AP (`RTC_BL_PHONE`) avant `g_web.begin()`
|
||||
- correction payload `STATUS` (`doc.as<JsonObject>()` au lieu de `doc.to<JsonObject>()`)
|
||||
|
||||
Verdict campagne 2026-02-21:
|
||||
|
||||
- PASS pour le flux `esp32dev` en terminal.
|
||||
| Scénario | Verdict | Détails |
|
||||
|---|---|---|
|
||||
| SLIC transition A252 | FAIL | `{"error": "Timeout waiting response to 'CALL' on /dev/cu.usbmodem5AB90753301; last='UNKNOWN CALL'"}` |
|
||||
| SLIC transition S3 | FAIL | `{"ring_state": "OFF_HOOK", "offhook_state": "OFF_HOOK", "idle_state": "OFF_HOOK"}` |
|
||||
| A252 full-duplex | FAIL | `{"duration_s": 120, "error": "Timeout waiting response to 'RESET_METRICS' on /dev/cu.usbmodem5AB90753301; last='UNKNOWN RESET_METRICS'"}` |
|
||||
| S3 local mode | FAIL | `{"duration_s": 20, "telephony_state": "OFF_HOOK", "audio_drop_frames": 0, "bench_latency_ms": 9999}` |
|
||||
| A252 web endpoints | PASS | `{"skipped": true}` |
|
||||
| S3 web endpoints | PASS | `{"skipped": true}` |
|
||||
|
||||
@@ -68,3 +68,23 @@ Note technique:
|
||||
|
||||
- Sur `esp32dev`, il faut initialiser le stack reseau avant `AsyncWebServer::begin()`
|
||||
pour eviter le crash `lwIP Invalid mbox`.
|
||||
|
||||
## 5) Preuve boucle complète (2026-02-21)
|
||||
|
||||
Etat courant:
|
||||
|
||||
- `PR #20` (RTC) et `PR #22` (repo_state) sont déjà intégrées.
|
||||
- `Kill_LIFE`: PR `#11` intégrée pour le watcher 1min + realtime log.
|
||||
- `Zacus`: PR `#101` et `#103`/`#105` déjà intégrées.
|
||||
|
||||
Run proof:
|
||||
|
||||
- `python3 scripts/zeroclaw_hw_preflight.py --require-port --zeroclaw-bin /Users/cils/Documents/Lelectron_rare/Kill_LIFE/zeroclaw/target/release/zeroclaw` ✅
|
||||
- `pio run -e esp32dev -e esp32-s3-devkitc-1` ✅
|
||||
- `python3 scripts/hw_validation.py --port-a252 ... --port-s3 ... --bench-port ... --flash` ❌
|
||||
- bloqué: ports sérielles non distincts / indisponibles pour l’état bench (erreurs Resource busy + commandes inconnues).
|
||||
|
||||
Actions:
|
||||
|
||||
- Poursuivre sur l’issue RTC dédiée: https://github.com/electron-rare/RTC_BL_PHONE/issues/23
|
||||
- Re-lancer la boucle dès que les ports A252, S3 et bench sont explicitement valables.
|
||||
|
||||
Reference in New Issue
Block a user