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.md103
1 files changed, 96 insertions, 7 deletions
diff --git a/CHECKLIST.md b/CHECKLIST.md
index c5dfbe4..7fcc4b7 100644
--- a/CHECKLIST.md
+++ b/CHECKLIST.md
@@ -48,10 +48,83 @@
48## Phase 6: Bytes-Based Billing — COMPLETE (commit `edd125d`) 48## Phase 6: Bytes-Based Billing — COMPLETE (commit `edd125d`)
49- [x] Dual-metric session support (milliseconds + bytes) 49- [x] Dual-metric session support (milliseconds + bytes)
50 50
51## Phase 7: MCP Handler + NIP-04 + CVM Server — COMPLETE (commit `fdf662f`) 51## Phase 7: MCP Handler + NIP-04 + CVM Server — SKELETON (commit `fdf662f`)
52- [x] mcp_handler.c/h (4 tools, 25 unit tests) 52- [x] mcp_handler.c/h (4 tools, 25 unit tests)
53- [x] nip04.c/h (AES-256-CBC + ECDH, 15 unit tests) 53- [x] nip04.c/h (AES-256-CBC + ECDH, 15 unit tests)
54- [x] cvm_server.c/h (Nostr DM listener) 54- [x] cvm_server.c/h (Nostr DM listener skeleton)
55
56## Phase 7b: ContextVM Protocol Rewrite — COMPLETE
57- [x] Add 6 new tools to mcp_handler.c/h (get_sessions, get_usage, set_payout, set_metric, set_price, wallet_melt)
58- [x] Update test_mcp_handler.c with tests for 6 new tools
59- [x] Rewrite cvm_server.c: persistent WebSocket listener, kind 25910 subscription
60- [x] MCP protocol handlers: initialize, notifications/initialized, tools/list, tools/call, ping
61- [x] Auth check: only accept from owner npub
62- [x] CEP-6: publish kind 11316 server announcement on startup
63- [x] CEP-6: publish kind 11317 tools list on startup
64- [x] CEP-17: publish kind 10002 relay list on startup
65- [x] Update config.c: default cvm_enabled = true
66- [x] Create test_cvm_server.c unit test (event parsing, announcement construction, auth)
67- [x] Update tests/unit/Makefile with test_cvm_server target
68- [x] Create tests/integration/test-cvm.mjs (nak-based integration test)
69- [x] Update Makefile with cvm-* targets (test-cvm, cvm-pubkey, cvm-test-tool)
70- [x] WS frame masking fix (RFC 6455 client-to-server)
71- [x] EVENT msg buffer underflow fix (snprintf buffer size)
72- [x] TLS write loop for large payloads
73- [x] WS ping/pong keepalive (30s interval)
74- [x] Subscription REQ fix (removed invalid limit field)
75- [x] SNTP init after STA gets IP
76- [x] 282 unit tests passing (61 CVM + 60 MCP + 161 existing)
77
78## Phase 7c: CVM Integration Testing — IN PROGRESS
79- [x] Per-board hardware locks implemented (board-a/b/c.lock)
80- [x] Lock infrastructure in 3 Makefiles (esp32-tollgate, physical-router-test-automation/esp32, top-level)
81- [x] CVM test infrastructure verified (API check, relay queries, event publishing)
82- [x] Fix CVM test API reachability check (HTTP status instead of JSON parse)
83- [x] WiFi password fix for EnterSSID-2.4GHz (c03rad0r123! — was missing `!`)
84- [x] WiFi auth threshold fix (WPA3_PSK → WPA2_PSK → WIFI_AUTH_OPEN, now WPA2_PSK)
85- [x] PMF capable mode enabled
86- [x] WIFI_ALL_CHANNEL_SCAN enabled
87- [x] WiFi country code fix (ESP-IDF defaults to CN, need DE for EU regulatory compliance)
88- [x] 2s retry delay between WiFi auth attempts
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)
91- [x] Board B CEP-6 announcements confirmed on relay.primal.net
92- [x] Verify kind 11316 announcement on relay.primal.net — PASS
93- [x] Verify kind 11317 tools list on relay.primal.net — PASS
94- [x] Verify kind 10002 relay list on relay.primal.net — PASS
95- [x] Fix subscription #p filter (must be array, not string) — relay rejected as 'bad req'
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
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
111### WiFi Debugging Findings (Board A — 94:a9:90:2e:37:7c)
112- **Symptom:** `WIFI_REASON_AUTH_EXPIRED` (0x200) on all upstream APs
113- **APs tested:** EnterSSID-2.4GHz (ch11, WPA2), c03rad0r (not in range), laptop hotspot (ch6, WPA2)
114- **Modes tested:** APSTA (ch1/6/11), STA-only (no AP at all)
115- **MAC tested:** Custom (derived from nsec) and factory MAC
116- **Result:** Auth fails in ALL configurations, even STA-only 1m from laptop hotspot
117- **Root cause hypothesis 1:** Missing WiFi country code — ESP-IDF defaults to CN regulatory domain, boards are in DE. Different TX power limits and channel parameters may cause APs to ignore ESP32 auth frames.
118- **Root cause hypothesis 2:** Hardware antenna issue on Board A — needs testing on other boards to confirm
119- **Spectrum:** Dense environment (ch1: 2 APs, ch6: 4 APs, ch11: 4 APs) but laptop connects fine at 100%
120- **Next step:** Add `esp_wifi_set_country_code("DE")` and test Board A, then Board B/C if needed
121
122### Per-Board Hardware Locks
123- [x] Lock files in `physical-router-test-automation/locks/` (board-a.lock, board-b.lock, board-c.lock)
124- [x] `lock-a/b/c`, `unlock-a/b/c`, `force-unlock-a/b/c` targets
125- [x] All hardware-touching targets require corresponding board lock
126- [x] Read-only targets (build, cvm-pubkey, lock-status) work without lock
127- [x] Board port mapping updated: A=ACM0, B=ACM1, C=ACM3
55 128
56## Bug Fixes — COMPLETE (commit `3342c8e`) 129## Bug Fixes — COMPLETE (commit `3342c8e`)
57- [x] reset_auth, /usage, metric default, sys_evt stack overflow fixes 130- [x] reset_auth, /usage, metric default, sys_evt stack overflow fixes
@@ -78,6 +151,21 @@
78- [x] Update `tests/unit/test_session.c` 151- [x] Update `tests/unit/test_session.c`
79- [x] 186 unit tests passing 152- [x] 186 unit tests passing
80 153
154## TFT Display (JC3248W535 / AXS15231B) — IN PROGRESS
155- [x] Create QR code component (port qrcoded from NSD, fix bool/pragma/comparison warnings)
156- [x] Create AXS15231B QSPI display driver component (init sequence, PSRAM framebuffer, chunked flush)
157- [x] Create 8x8 bitmap font (ASCII 32-127)
158- [x] Create display abstraction layer (display.h/c — boot/ready/payment/error states)
159- [x] Integrate display into tollgate_main.c and main/CMakeLists.txt
160- [x] Build succeeds (binary 1.2MB, 71% free in partition)
161- [x] Wi-Fi QR code encoding: `WIFI:S:<escaped_ssid>;T:nopass;;` with special char escaping (`\;:,"`)
162- [x] QR cycling: alternate between Wi-Fi QR and portal URL QR every 5 seconds
163- [ ] Flash to JC3248W535 board at `/dev/ttyACM0` and test
164- [ ] Verify Wi-Fi QR is scannable by Android/iOS camera
165- [ ] Verify portal URL QR is scannable and loads captive portal
166- [ ] Add unit tests for QR generation and escape_wifi_field()
167- [ ] Update AGENTS.md with display module docs
168
81--- 169---
82 170
83## TODO — Remaining 171## TODO — Remaining
@@ -125,12 +213,13 @@
125 213
126## Reminders 214## Reminders
127- **Commit + push every time a test passes that previously didn't pass** 215- **Commit + push every time a test passes that previously didn't pass**
128- Board A: `/dev/ttyACM0`, SSID `TollGate-C0E9CA`, AP IP `10.192.45.1` 216- Board A: `/dev/ttyACM0`, MAC `94:a9:90:2e:37:7c`, SSID `TollGate-B96D80`, AP IP `10.185.47.1`
129- Board B: `/dev/ttyACM1`, SSID `TollGate-b96d80`, AP IP `10.185.47.1`, nsec `9af47906...` 217- Board B: `/dev/ttyACM1`, MAC `fc:01:2c:c5:50:50`, SSID `TollGate-C0E9CA`, AP IP `10.192.45.1`
130- OpenWRT Router: SSH `root@10.47.41.1`, port 2121 218- Board C: `/dev/ttyACM3`, MAC `20:6e:f1:98:d7:08`
131- `source ~/esp/esp-idf/export.sh` before `idf.py` 219- `source ~/esp/esp-idf/export.sh` before `idf.py`
132- Latest commit: `0c2c67b`
133- 186 unit tests + 18 Playwright tests — all passing
134- sudo password: `c03rad0r123` 220- sudo password: `c03rad0r123`
135- Token generation: `cashu -h https://testnut.cashu.space send --legacy 21` 221- Token generation: `cashu -h https://testnut.cashu.space send --legacy 21`
222- SPIFFS offset `0x410000`, size `0xF0000`
136- See `AGENTS.md` for full testing rules 223- See `AGENTS.md` for full testing rules
224- **Per-board locks:** `make lock-a PHASE="desc"` before hardware access
225- **WiFi country code:** Must set `esp_wifi_set_country_code("DE")` before `esp_wifi_start()`