diff --git a/docs/status.md b/docs/status.md index 8be9daf..ede4c67 100644 --- a/docs/status.md +++ b/docs/status.md @@ -58,6 +58,37 @@ --- +## 2026-04-01 — FAPP: Complete E2E Flow + +### Completed (Latest) +- **E2E Encryption** — `fapp.rs`: SlotReserve/SlotConfirm with X25519 + ChaCha20-Poly1305 + - `PatientEphemeralKey`: generates X25519 keypair for reservation + - `TherapistCrypto`: decrypts reserves, creates confirms with forward secrecy + - `PatientCrypto`: creates reserves, decrypts confirmations + - Each confirmation uses fresh ephemeral key for forward secrecy + +- **FappRouter Reserve/Confirm** — `fapp_router.rs`: + - `DeliverReserve` / `DeliverConfirm` action variants + - `process_slot_reserve()`: routes to therapist or floods + - `process_slot_confirm()`: delivers to patient + - `send_reserve()` / `send_confirm()`: capability-checked sends + - `send_response()`: relay-to-patient response routing + +- **Integration Tests** — `tests/fapp_flow.rs`: + - `full_fapp_flow_announce_query_reserve_confirm`: Complete flow from announce to confirmed appointment + - `fapp_rejection_flow`: Tests therapist declining a reservation + - `fapp_query_filters`: Tests Fachrichtung, PLZ, and other filters + +### Test Coverage +- 217 total tests (198 lib + 3 fapp_flow + 16 multi_node) +- 31 FAPP-specific tests (24 fapp + 7 fapp_router) + +### What's Next +1. Wire FappRouter into P2pNode startup +2. LoRa testing for FAPP messages + +--- + ## 2026-03-31 — FAPP: Free Appointment Propagation Protocol ### Completed @@ -67,7 +98,6 @@ - **Domain model**: Fachrichtung, Modalitaet, Kostentraeger, SlotType (German enum names for domain concepts) - **FappStore**: in-memory cache with dedup (therapist_address + sequence), TTL expiry, signature verification, capacity limits - **Query matching**: filter by Fachrichtung, Modalitaet, Kostentraeger, PLZ prefix, time range, SlotType, max_results -- **Tests**: 16 inline tests covering creation, signing, verification, tampering, forwarding, expiry, CBOR roundtrip, store dedup, sequence supersede, query filters (PLZ, SlotType, Kostentraeger, max_results) - **Privacy model**: therapist identity public (Approbation-bound), patient queries anonymous ### Design Decisions @@ -77,32 +107,6 @@ - Location hint is PLZ only (e.g. "80331") — never exact address - Anti-spam: Approbation hash binding, signature verification, sequence-based dedup, rate limiting, TTL enforcement -### FAPP integration — status - -**2026-04-01: FappRouter implemented!** - -New `fapp_router.rs` module: -- `FappAction` enum: Ignore, Dropped, Forward, QueryResponse -- Wire format: 1-byte tag (0x01-0x05) + CBOR body -- `FappRouter` struct with shared `RoutingTable` + `TransportManager` -- `handle_incoming()` decodes and dispatches FAPP frames -- `process_slot_announce()` with relay/flood logic (dedup, hop check, store, forward) -- `process_slot_query()` answers from local `FappStore` -- `broadcast_announce()` / `send_query()` for outbound floods -- `drain_pending_sends()` for async send integration -- 3 unit tests passing - -**Remaining steps** -1. **Integration test:** Multi-node demo (therapist → relay → patient flow) -2. **Wire to P2pNode:** Add `FappRouter` to `start_with_mesh()` or similar -3. **SlotReserve/SlotConfirm:** E2E encrypted reservation flow -4. **LoRa test:** Verify FAPP over constrained links - -**Definition of done** -- announce → query → response works over multi-hop (automated or manual) -- SlotReserve/Confirm E2E encryption works -- LoRa test or documented blocker - --- ## 2026-03-30 — Mesh Protocol Infrastructure Sprint