<feed xmlns='http://www.w3.org/2005/Atom'>
<title>npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/main, branch backup/multi-mint-support-pre-rebase</title>
<subtitle>[no description]</subtitle>
<id>https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/atom?h=backup%2Fmulti-mint-support-pre-rebase</id>
<link rel='self' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/atom?h=backup%2Fmulti-mint-support-pre-rebase'/>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/'/>
<updated>2026-05-18T22:42:32+00:00</updated>
<entry>
<title>fix: merge readiness — display_enabled config, real pubkey, probe interval, dedup services</title>
<updated>2026-05-18T22:42:32+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T22:42:32+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=3aa372ccc3e11c837458b00088ffb6cbe99ff6ca'/>
<id>urn:sha1:3aa372ccc3e11c837458b00088ffb6cbe99ff6ca</id>
<content type='text'>
- Add display_enabled config field (default true, parsed from config.json)
- Guard display_init/display_update behind display_enabled check
- Fix discovery pubkey: replace hardcoded all-zeros with identity_get()-&gt;npub_hex
- Revert MINT_HEALTH_PROBE_INTERVAL_S from 30 (testing) to 300 (production)
- Remove duplicate services_start_task call in IP event handler
- Fix UTF-8 arrow in STA auth threshold log message
- Gitignore compiled test binaries (test_mcp_handler, test_mint_health, etc.)
- Remove tracked test binaries from git

Verified on Board B (stable):
- make test-discovery-b: pubkey=d6bfe100..., metric=milliseconds, price_per_step tags
- make test-mints-b: 4 mints listed with reachable field
- Wallet: 40 sats balance with 4 proofs from previous payment
- All API endpoints responding (discovery, mints, wallet, whoami, portal)
- 75/75 unit tests passing
</content>
</entry>
<entry>
<title>wip: disable display for stability testing — board survives 2+ min without it</title>
<updated>2026-05-18T22:04:12+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T22:04:12+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=b38798277ad5d485a49752744e938e4db8032db5'/>
<id>urn:sha1:b38798277ad5d485a49752744e938e4db8032db5</id>
<content type='text'>
</content>
</entry>
<entry>
<title>feat: WPA auto-detect, STA connectivity fix, lwip crash fix</title>
<updated>2026-05-18T21:14:17+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T21:14:17+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=2ad2ed45f3ca82b1244a8b9e3e5efa89502413a9'/>
<id>urn:sha1:2ad2ed45f3ca82b1244a8b9e3e5efa89502413a9</id>
<content type='text'>
- Add wifi_auth_mode config field (WPA2/WPA3) parsed from config.json
- Default to WPA2 (accepts both WPA2 and WPA3 networks)
- Replace hardcoded WIFI_AUTH_WPA3_PSK with runtime threshold mapping
- Reduce MINT_HEALTH_PROBE_INTERVAL_S from 300 to 30 for testing
- Add 3s delay before service start + 5s DNS stabilization for health probes
- Fixes lwip mem_free crash caused by concurrent HTTP at boot

Verified on hardware:
- STA connects to WPA2 home router (Got IP:192.168.2.16)
- All 4 mint health probes complete successfully
- API endpoints return correct data with reachable mint filtering
- 4/4 wallets initialized with real keysets from live mints
</content>
</entry>
<entry>
<title>fix: divide-by-zero crash when no WiFi networks configured</title>
<updated>2026-05-18T14:25:33+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T14:25:33+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=65b4c9dc8626757f5f7cda279881b059e926916c'/>
<id>urn:sha1:65b4c9dc8626757f5f7cda279881b059e926916c</id>
<content type='text'>
- Guard tollgate_config_get_next_wifi against network_count=0
- Add fallback parsing for wifi_ssid/wifi_password flat fields
- Add heap info to API server failure log for debugging
- All 75 unit tests passing
</content>
</entry>
<entry>
<title>Move /mints to API server (port 2121), fix services persistence</title>
<updated>2026-05-18T13:37:08+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T13:37:08+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=859f9b14e033de9a0690ccbbb975b4b472b688ce'/>
<id>urn:sha1:859f9b14e033de9a0690ccbbb975b4b472b688ce</id>
<content type='text'>
- /mints handler moved from captive portal (port 80) to API server (port 2121)
  where it belongs (JSON endpoint, matches portal JS fetch URL)
- Remove stop_services() from STA disconnect and IP loss handlers
- Services now persist across WiFi STA reconnections
- Reduce MAX_STA_RETRY from 5 to 3
</content>
</entry>
<entry>
<title>fix: format-truncation warning in captive portal mint list</title>
<updated>2026-05-18T09:41:04+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T09:41:04+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=46169e5645ce1b1e33661f82734a4beeda828e39'/>
<id>urn:sha1:46169e5645ce1b1e33661f82734a4beeda828e39</id>
<content type='text'>
- Use tracked offset + snprintf instead of strncat
- Avoid -Werror=format-truncation= on 255-byte URL in HTML template
</content>
</entry>
<entry>
<title>feat: multi-mint health tracker, discovery, portal, multi-wallet (Phase 3-8)</title>
<updated>2026-05-18T09:20:41+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T09:20:41+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=2a86bec93273e2f4ceeab60683058c65dbb1da3d'/>
<id>urn:sha1:2a86bec93273e2f4ceeab60683058c65dbb1da3d</id>
<content type='text'>
- mint_health.h/c: FreeRTOS probing task, GET /v1/info every 5min,
  recovery threshold 3, immediate failure, mutex-protected state
- cashu.c: health-gated acceptance (config match AND reachable)
- tollgate_api.c: one price_per_step tag per reachable mint in discovery
- captive_portal.c: mint list with green/grey indicators, /mints API,
  auto-refresh every 30s via JS
- nucula_wallet.h/cpp: multi-wallet (up to 4), route receive to correct
  wallet by mint URL, balance sums across all wallets
- tollgate_main.c: init health tracker + multi-wallet on service start
- CMakeLists.txt: add mint_health.c
</content>
</entry>
<entry>
<title>feat: multi-mint config array and acceptance check (Phase 1+2)</title>
<updated>2026-05-18T09:07:29+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T09:07:29+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=b9477ef84e14f473793391a2b1d61ccb58c8de0d'/>
<id>urn:sha1:b9477ef84e14f473793391a2b1d61ccb58c8de0d</id>
<content type='text'>
- config.h: increase TOLLGATE_MAX_MINT_URLS to 8, add accepted_mints[] to config struct
- config.c: parse accepted_mints JSON array, fallback to mint_url for backward compat
- cashu.c: cashu_is_mint_accepted() iterates accepted_mints[] instead of single mint_url
</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>
</feed>
