<feed xmlns='http://www.w3.org/2005/Atom'>
<title>npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate, branch feature/local-relay</title>
<subtitle>[no description]</subtitle>
<id>https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/atom?h=feature%2Flocal-relay</id>
<link rel='self' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/atom?h=feature%2Flocal-relay'/>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/'/>
<updated>2026-05-18T17:47:22+00:00</updated>
<entry>
<title>docs: add local relay + negentropy sync implementation plan</title>
<updated>2026-05-18T17:47:22+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T17:47:22+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=25eb0c5e4edf8074b52c6f1b67e928e10b933b49'/>
<id>urn:sha1:25eb0c5e4edf8074b52c6f1b67e928e10b933b49</id>
<content type='text'>
</content>
</entry>
<entry>
<title>docs: update checklist with Board B WiFi success + CEP-6 announcements confirmed</title>
<updated>2026-05-18T15:11:59+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T15:11:59+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=83967b17b234629fc0a3679296cafda08f5a9f37'/>
<id>urn:sha1:83967b17b234629fc0a3679296cafda08f5a9f37</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: WiFi country code DE + retry delay + updated docs</title>
<updated>2026-05-18T15:11:16+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T15:11:16+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=7344b1b50bcb3e1fc24b164cd601dd7cbce582c1'/>
<id>urn:sha1:7344b1b50bcb3e1fc24b164cd601dd7cbce582c1</id>
<content type='text'>
- Add esp_wifi_set_country_code('DE') before WiFi start for EU regulatory compliance
- Add 2s delay between WiFi auth retries to avoid AP rate limiting
- Update AGENTS.md with CVM modules, board C, per-board locks, WiFi notes
- Update CHECKLIST.md with Phase 7b completion, 7c integration progress
- Update PLAN.md with test cases 53-73, WiFi country code findings
- Update Makefile port defaults (A=ACM0, B=ACM1)
- Board B connects to WiFi successfully with these fixes
- Board A has hardware WiFi issue (auth fails on all APs)
</content>
</entry>
<entry>
<title>fix: restore APSTA mode, WiFi auth debug notes</title>
<updated>2026-05-18T13:58:13+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T13:58:13+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=06de1143037399bb96308df0ea4290faa79de9dc'/>
<id>urn:sha1:06de1143037399bb96308df0ea4290faa79de9dc</id>
<content type='text'>
- Restored APSTA mode (STA-only experiment showed same auth failure)
- WiFi auth failure persists even in STA-only mode without AP
- Root cause: ESP32 radio can't authenticate with nearby APs
- Laptop hotspot also fails (auth expired)
- Likely hardware antenna issue on Board A
- PMF capable + all-channel scan enabled
- Default networks: EnterSSID-2.4GHz, c03rad0r, TK-GAESTE
</content>
</entry>
<entry>
<title>fix: WiFi auth + AP channel + PMF for upstream connectivity</title>
<updated>2026-05-18T13:00:43+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T13:00:43+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=1b1743672a5d5005601d8ba628f6ba1b72008885'/>
<id>urn:sha1:1b1743672a5d5005601d8ba628f6ba1b72008885</id>
<content type='text'>
- Add TK-GAESTE open network as fallback
- Fix EnterSSID-2.4GHz password (c03rad0r123!)
- Set auth threshold to WIFI_AUTH_OPEN for open network support
- Enable PMF capable mode for WPA2 AP compatibility
- Set AP channel to 6 (ESP-IDF auto-adjusts to match STA channel)
- Use WIFI_ALL_CHANNEL_SCAN for STA scan method
</content>
</entry>
<entry>
<title>feat: per-board hardware locks (board-a/b/c.lock), fix port assignments</title>
<updated>2026-05-18T11:08:29+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T11:08:29+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=e0eeeab6eb714ab22d0bc6697730b71d2381746e'/>
<id>urn:sha1:e0eeeab6eb714ab22d0bc6697730b71d2381746e</id>
<content type='text'>
- Lock files in physical-router-test-automation/locks/
- Each board has its own lock: board-a.lock, board-b.lock, board-c.lock
- All hardware-touching targets (flash, monitor, erase-nvs, reset, serial-log, tests) require the corresponding board lock
- Read-only targets (build, cvm-pubkey, lock-status) work without lock
- Fixed port assignments: A=ACM1, B=ACM2, C=ACM0
- Router hardware lock kept separate (for OpenWRT operations)
</content>
</entry>
<entry>
<title>fix: EVENT msg buffer underflow + WS write loop + WPA3 auth</title>
<updated>2026-05-18T08:32:55+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T08:32:55+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=36fa7451a3be1c49932e944859364fe4e9f9fcc4'/>
<id>urn:sha1:36fa7451a3be1c49932e944859364fe4e9f9fcc4</id>
<content type='text'>
- Fix buffer size for ["EVENT",...] wrapper: was 8+event_len+1,
  needed 10+event_len+2 (9 char prefix + ] + null). snprintf was
  truncating the closing bracket, causing relay JSON parse errors.
- Add write loop in ws_send_text for large payloads that don't fit
  in a single esp_tls_conn_write call.
- Change STA auth threshold from WPA2_PSK to WPA3_PSK for
  compatibility with WPA3 access points.
- Announcements now successfully stored on relay.primal.net!
</content>
</entry>
<entry>
<title>feat: ContextVM (MCP over Nostr) server with WS masking fix</title>
<updated>2026-05-17T22:07:27+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-17T22:07:27+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=8a2f7a6c9423e0c00fae3c1233bee9e0bb3ae239'/>
<id>urn:sha1:8a2f7a6c9423e0c00fae3c1233bee9e0bb3ae239</id>
<content type='text'>
- Full CVM server: persistent WS relay listener, kind 25910 subscription
- MCP protocol handlers: initialize, tools/list, tools/call, ping
- 10 MCP tools: get_config, set_config, get_balance, wallet_send,
  get_sessions, get_usage, set_payout, set_metric, set_price, wallet_melt
- CEP-6 announcements via WS (kinds 11316, 11317, 10002)
- Auth check: owner npub only
- Fix: WebSocket client-to-server frame masking (RFC 6455 requirement)
- Fix: Raw event JSON in EVENT wrapper (no re-parsing that breaks sig)
- SNTP init after STA gets IP
- 282 unit tests passing (61 CVM + 60 MCP handler + 161 existing)
- Integration test scaffold: tests/integration/test-cvm.mjs
</content>
</entry>
<entry>
<title>fix: move MAC set after wifi_set_mode, start services without STA</title>
<updated>2026-05-17T20:16:49+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-17T20:16:49+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=fe7c3be2fd9d464dbc837d1913409d2691bd50f5'/>
<id>urn:sha1:fe7c3be2fd9d464dbc837d1913409d2691bd50f5</id>
<content type='text'>
- esp_wifi_set_mac requires WIFI_MODE_APSTA set first (fixes Board B crash)
- Start services immediately when no STA network is configured
  (standalone TollGate without upstream WiFi)
</content>
</entry>
<entry>
<title>refactor: reorganize test suite, add integration tests for NAT filter</title>
<updated>2026-05-17T11:48:43+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-17T11:48:43+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=8071741815f0b0938701e80a63e80b0ec94b2778'/>
<id>urn:sha1:8071741815f0b0938701e80a63e80b0ec94b2778</id>
<content type='text'>
- Move integration tests (api, network, phase2, smoke) to tests/integration/
- Move Playwright specs (captive-portal, interop-happy-path) to tests/e2e/
- Move playwright.config.mjs to tests/e2e/
- Fix hardcoded IP fallbacks: 192.168.4.1 → 10.192.45.1
- Add test-reset-auth.mjs: reset→pay→allow→revoke→block cycle
- Add test-session-expiry.mjs: pay→wait 65s→verify blocked (slow test)
- Add test-dns-firewall.mjs: DNS hijack/forward + per-client NAT filter
- Update Makefile with test-unit, test-integration, test-e2e, test-all targets
- Update package.json scripts for new paths
- Fix Playwright video: retain-on-failure instead of always-on
- Update AGENTS.md: per-client NAT filter description
- Update CHECKLIST.md: mark completed items, add Board B identity
- Board B nsec: 9af47906... → SSID TollGate-b96d80, AP IP 10.185.47.1
- 186 unit tests passing
</content>
</entry>
</feed>
