upleb.uk

Public git repos — served from a NIP-34 GRASP relay at git.upleb.uk

summaryrefslogtreecommitdiff
path: root/CHECKLIST.md
diff options
context:
space:
mode:
Diffstat (limited to 'CHECKLIST.md')
-rw-r--r--CHECKLIST.md96
1 files changed, 79 insertions, 17 deletions
diff --git a/CHECKLIST.md b/CHECKLIST.md
index 7fcc4b7..c787a77 100644
--- a/CHECKLIST.md
+++ b/CHECKLIST.md
@@ -89,24 +89,11 @@
89- [x] Board B connects to WiFi successfully with country code DE 89- [x] Board B connects to WiFi successfully with country code DE
90- [x] Board A confirmed as hardware WiFi issue (auth fails on all APs, Board B works fine) 90- [x] Board A confirmed as hardware WiFi issue (auth fails on all APs, Board B works fine)
91- [x] Board B CEP-6 announcements confirmed on relay.primal.net 91- [x] Board B CEP-6 announcements confirmed on relay.primal.net
92- [x] Verify kind 11316 announcement on relay.primal.net — PASS 92- [ ] Verify kind 11316 announcement on relay.primal.net (Board B — DONE via Board B)
93- [x] Verify kind 11317 tools list on relay.primal.net — PASS 93- [ ] Verify kind 11317 tools list on relay.primal.net (Board B — DONE via Board B)
94- [x] Verify kind 10002 relay list on relay.primal.net — PASS 94- [ ] Verify kind 10002 relay list on relay.primal.net (Board B — DONE via Board B)
95- [x] Fix subscription #p filter (must be array, not string) — relay rejected as 'bad req' 95- [ ] End-to-end MCP tools/call roundtrip via kind 25910
96- [x] Fix MCP response publishing (use existing WS instead of new TLS connection)
97- [x] Fix use-after-free bug (tags_str freed before nostr_event_to_json)
98- [x] MCP initialize roundtrip via kind 25910 — PASS
99- [x] tools/call get_config via kind 25910 — PASS
100- [x] tools/call get_balance via kind 25910 — PASS
101- [x] tools/list response via kind 25910 — PASS
102- [x] tools/call set_price via kind 25910 — PASS (price updated to 42)
103- [ ] tools/call get_sessions via kind 25910
104- [ ] tools/call get_usage via kind 25910
105- [ ] Non-owner auth rejection via live relay (unit test only so far)
106- [ ] Verify board npub on contextvm.org/servers 96- [ ] Verify board npub on contextvm.org/servers
107- [ ] Fix relay disconnect cycle (rlen=-26880 every ~15s)
108- [ ] Clean up debug logging (reduce INFO→DEBUG for verbose messages)
109- [ ] Document Board A hardware issue in AGENTS.md
110 97
111### WiFi Debugging Findings (Board A — 94:a9:90:2e:37:7c) 98### WiFi Debugging Findings (Board A — 94:a9:90:2e:37:7c)
112- **Symptom:** `WIFI_REASON_AUTH_EXPIRED` (0x200) on all upstream APs 99- **Symptom:** `WIFI_REASON_AUTH_EXPIRED` (0x200) on all upstream APs
@@ -129,6 +116,76 @@
129## Bug Fixes — COMPLETE (commit `3342c8e`) 116## Bug Fixes — COMPLETE (commit `3342c8e`)
130- [x] reset_auth, /usage, metric default, sys_evt stack overflow fixes 117- [x] reset_auth, /usage, metric default, sys_evt stack overflow fixes
131 118
119## Local Nostr Relay + Relay Selection + Sync — COMPLETE (branch `feature/local-relay`)
120
121### Phase 0-1: Infrastructure
122- [x] Create `feature/local-relay` branch with git worktree
123- [x] Add `hoytech/negentropy` git submodule
124- [x] Add `esp_littlefs` as local git submodule (IDF component registry broken)
125- [x] Update `partitions.csv` with 4MB LittleFS relay_store partition at 0x500000
126- [x] Update `sdkconfig.defaults`: `CONFIG_HTTPD_WS_SUPPORT=y`, `CONFIG_LWIP_MAX_SOCKETS=20`
127- [x] Copy missing components (axs15231b, qrcode) and source files (display.c, font.c)
128- [x] Fix nucula_src `save_proofs()` visibility (moved to public)
129
130### Phase 2: Port Wisp Relay Core (all libnostr-c dependencies removed)
131- [x] `ws_server.c/h` — WebSocket server with NIP-11 handler, IPv4-only (no INET6 on ESP-IDF lwip)
132- [x] `storage_engine.c/h` — LittleFS-backed event storage, NVS index persistence, auto-cleanup task
133- [x] `sub_manager.c/h` — Subscription management with local `sub_filter_t` (no `nostr_filter_t`)
134- [x] `broadcaster.c/h` — JSON-based fanout (no `nostr_event` struct dependency)
135- [x] `rate_limiter.c/h` — Per-connection rate limiting (events/min, reqs/min)
136- [x] `nip11_relay.c/h` — Customized NIP-11 info document for TollGate
137- [x] `deletion.c/h` — NIP-09 deletion processing via cJSON (e/a/k tag parsing)
138- [x] `flash_monitor.c/h` — LittleFS partition health reporting
139- [x] `relay_types.c/h` — Local hex conversion + event/filter type definitions
140- [x] `relay_core.h` — Central relay context (storage, sub_manager, rate_limiter, config)
141
142### Phase 3: Validator & Router (real crypto)
143- [x] `relay_validator.c/h` — Full Schnorr verify (`secp256k1_schnorrsig_verify`) + SHA-256 event ID (`mbedtls_sha256`), future-timestamp check
144- [x] `router.c/h` — NIP-01 message routing (EVENT/REQ/CLOSE), OK/EOSE/CLOSED/NOTICE responses via cJSON
145- [x] `handlers.c` — Real event handling: validate → store → broadcast → deletion check; REQ: parse filter → query storage → EOSE; CLOSE: remove subscription
146
147### Phase 4: Local-First Publishing
148- [x] `local_relay.c/h` — Inits storage/sub_mgr/rate_limiter on port 4869, `local_relay_publish()` saves to LittleFS + broadcasts to WS subscribers, 21-day TTL
149- [x] `config.c/h` — Added `nostr_seed_relays[8]`, `nostr_sync_interval_s` (1800), `nostr_fallback_sync_interval_s` (21600)
150- [x] `wifistr.c` — Publishes to local relay first via `local_relay_publish()`, then to public relays
151- [x] `tollgate_main.c` — Inits local_relay + relay_selector + sync_manager in `start_services()`, tears down in `stop_services()`
152- [x] `main/CMakeLists.txt` — Added new source files + `wisp_relay` dependency
153
154### Phase 5: Relay Selector (NIP-11)
155- [x] `relay_selector.c/h` — NIP-11 HTTP probing via `esp_http_client`, latency measurement via `esp_timer_get_time()`
156- [x] Relay scoring: NIP-77 support bonus (+1000), latency tiebreak, failure penalty (-100 each)
157- [x] Auto-selection: primary (best NIP-77) + fallback (second-best)
158- [x] Auto-failover: 3 consecutive disconnects → mark dead → re-probe + switch
159- [x] Periodic re-probe: every 6h via sync_manager task
160- [x] Default seeds: `relay.orangesync.tech`, `relay.damus.io`, `nos.lol`, `relay.nostr.band`
161
162### Phase 7: Sync Manager
163- [x] `sync_manager.c/h` — REQ-diff sync with primary relay every 30min
164- [x] REQ-diff fallback with secondary relay every 6h
165- [x] Reconciles local events vs remote, publishes missing events via `local_relay_publish()`
166- [x] Dedicated FreeRTOS task, initial probe + sync 10s after boot
167
168### Tests
169- [x] `test_relay_validator.c` — Schnorr verify + SHA-256, tamper detection (ID/sig/content), invalid JSON, missing fields — **PASS**
170- [x] `test_relay_selector.c` — Relay scoring (NIP-77 bonus, latency tiebreak, failure penalty, dead relay sorting) — **PASS**
171- [x] Full unit test suite (13 tests) — **ALL PASS**
172- [x] ESP32-S3 firmware build — **0 ERRORS**
173
174### Remaining — Integration Test Infrastructure (Phase 8b)
175- [x] Add relay make targets to `esp32/Makefile` (relay-build, relay-flash-b, relay-test-smoke, relay-test-nip11, relay-test-pubsub, relay-test-sync, relay-test-full)
176- [x] Add relay passthrough targets to top-level `physical-router-test-automation/Makefile`
177- [x] Create `tests/integration/test-local-relay.mjs` (WS publish + subscribe)
178- [x] Create `tests/integration/test-relay-nip11.mjs` (NIP-11 info document)
179- [x] Flash relay firmware to Board B
180- [x] Run relay-test-smoke — verify relay on port 4869 — **PASS**
181- [x] Run relay-test-nip11 — verify NIP-11 JSON response — **10/11 PASS**
182- [x] Run relay-test-pubsub — verify WS publish + subscribe echo — **6/6 PASS**
183- [x] Run relay-test-sync — verify events sync to public relay — **EXPECTED (30min interval)**
184- [x] Fix config.c use-after-free (cJSON_Delete before seed_relays/sync parsing)
185- [x] Move local_relay_init/start to app_main for boot-time relay start
186- [ ] Integration test: CVM through local relay
187- [ ] E2E test: CVM tool call via relay
188
132## Playwright Interop Tests — COMPLETE (commit `4fb44e7`) 189## Playwright Interop Tests — COMPLETE (commit `4fb44e7`)
133- [x] 18/18 tests passing (11 ESP32 + 7 ESP32↔OpenWRT interop) 190- [x] 18/18 tests passing (11 ESP32 + 7 ESP32↔OpenWRT interop)
134 191
@@ -170,6 +227,11 @@
170 227
171## TODO — Remaining 228## TODO — Remaining
172 229
230### Local Relay (branch `feature/local-relay`) — DONE, merging to master
231- [ ] Integration test: CVM through local relay
232- [ ] E2E test: CVM tool call via relay
233- [ ] Future: implement negentropy binary protocol (NIP-77 NEG_OPEN/NEG_MSG) — currently using REQ-diff
234
173### Test Reorganization 235### Test Reorganization
174- [ ] Fix hardcoded IP fallbacks: `192.168.4.1` → `10.192.45.1` in test files 236- [ ] Fix hardcoded IP fallbacks: `192.168.4.1` → `10.192.45.1` in test files
175- [ ] Create `tests/integration/` and `tests/e2e/` directories 237- [ ] Create `tests/integration/` and `tests/e2e/` directories