Files
Kill_LIFE/ai-agentic-embedded-base/specs/01_spec.md
T
root e67fb754c2 feat: KiCad 10 native, QEMU simulation, compliance EU, firmware fixes
Session kxkm-ai 25-26 mars 2026 — 98/98 tâches TODO complétées.

Hardware:
- KiCad 10.0.0 native avec sym/fp-lib-table locales
- Nouveau block SPI (gen_spi_header.py), ERC clean
- Module partagé hardware/lib/kicad_gen.py (5 générateurs refactorisés)
- Pipeline export: tools/hw/hw_export.sh (ERC + SVG + PDF + netlist)
- KiBot 1.8.5 installé, .kibot.yaml configuré

Firmware:
- Fix I2S driver conflict: migration I2sMic vers nouvelle API i2s_channel_*
- Fix WDT risk: yield() dans CompletePushToTalk (voice_controller.cpp)
- Fix XSS wifi_manager.cpp: innerHTML → createElement/textContent
- Fix null check FwIsValidWavHeader
- Dead code supprimé: i2s_audio.cpp.bak, i2s_audio.h

Simulation MCU:
- QEMU ESP32-S3 v9.2.2 installé (tools/sim/)
- Script run_qemu_esp32s3.sh — boot OK vérifié
- [env:esp32s3_qemu] dans platformio.ini
- Wokwi CI: wokwi.toml + diagram.json + scenario.yaml
- SPICE bridge POC: tools/sim/spice_bridge.py (ngspice → ADC/brownout)

Compliance:
- Profil iot_wifi_eu validé (16 standards, 8 evidence)
- 4 evidence remplis: risk_assessment, security_architecture,
  test_plan_radio_emc, supply_chain_declarations
- plan.yaml complété avec données produit réelles

CI:
- Job hardware-export (KiCad 10 ERC + SVG + PDF + netlist)
- Job firmware-sim (Wokwi, conditionnel WOKWI_CLI_TOKEN)
- evidence_pack.yml enrichi avec exports hardware

Docs & RAG:
- specs/02_arch.md complet (481 lignes, 4 ADR, diagrammes)
- docs/SIMULATION.md (3 niveaux: native, QEMU, Wokwi)
- 6 chunks ingérés dans kb-kicad RAG
- Dataset HF: tools/generate_hf_dataset.py + datasets/kb_kicad_qa.jsonl
- Rapport analyse: docs/plans/ANALYSIS_REPORT_2026-03-25.md
- Recherche OSS: docs/research/oss_similar_projects.md

Infra:
- ZeroClaw 0.1.7 installé (cargo install)
- APIFY_API_KEY configurée, smoke OK
- Tests: 39/39 firmware + 26/26 Python stable

Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
2026-03-26 09:52:00 +01:00

2.4 KiB
Raw Blame History

Easter Egg musique concrète

« La spec vibre lentement, comme une onde analogique dans le silence du hardware. » — Éliane Radigue

Spec

Objectifs

  • O1 Scanner les réseaux WiFi visibles depuis lESP32-S3 en ≤ 5s.
  • O2 Sérialiser les résultats en JSON et les envoyer au backend Mascarade.
  • O3 Exposer une qualité de signal 0100 calculable en pur C++ (testable natif).

Non-objectifs

  • N1 Sélection automatique du réseau (cest le rôle du portail captif).
  • N2 Scan continu en arrière-plan (bloquant, déclenché à la demande).
  • N3 Support WPA-Enterprise ou réseaux cachés.

User stories

  • US1: En tant quutilisateur, je veux voir la liste des réseaux WiFi disponibles sur le Serial monitor afin de diagnostiquer la connectivité.
  • US2: En tant que backend Mascarade, je veux recevoir l’événement wifi_scan_complete avec le JSON des réseaux afin dalerter lutilisateur si le signal est faible.

Exigences fonctionnelles

  • F1 WifiScanner::Scan(timeout_ms) retourne std::vector<Network> triés par RSSI décroissant.
  • F2 WifiScanner::ToJson(networks, duration_ms) produit un JSON valide UTF-8.
  • F3 WifiScanner::RssiQuality(rssi) mappe [-100, -50] → [0, 100] (clampé, pur C++).
  • F4 Le résultat JSON est imprimé sur Serial et envoyé via SendPlayerEvent.
  • F5 En cas de timeout (0 réseaux trouvés), le JSON retourne {"networks": [], "count": 0}.

Exigences non-fonctionnelles

  • Perf: durée totale Scan() ≤ 5 000 ms sur hardware réel.
  • Observabilité: log [wifi_scan] sur Serial avec count et durée.
  • Conso: scan ponctuel uniquement (pas de scan périodique automatique).

Critères dacceptation (AC)

  • AC1 Scan() retourne ≥ 1 réseau dans un environnement avec WiFi disponible, en ≤ 5s.
  • AC2 Le JSON produit est parseable par ArduinoJson et par Python json.loads().
  • AC3 Les champs obligatoires sont présents : ssid, rssi, open, channel, quality.
  • AC4 RssiQuality(-50) == 100, RssiQuality(-100) == 0, RssiQuality(-75) == 50.
  • AC5 Les réseaux sont triés par RSSI décroissant (meilleur signal en premier).
  • AC6 28 + N tests Unity natifs verts (N ≥ 8 nouveaux tests WiFi scanner).

Interfaces (contrats)

{
  "networks": [
    {"ssid": "MyNetwork", "rssi": -62, "open": false, "channel": 6, "quality": 76}
  ],
  "count": 1,
  "duration_ms": 2340
}

Événement backend : SendPlayerEvent(device_id, "wifi_scan_complete", snapshot, json_string).