<feed xmlns='http://www.w3.org/2005/Atom'>
<title>npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/tests, 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>test: burst-fetch integration test — all endpoints verified passing</title>
<updated>2026-05-18T20:02:53+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T20:02:53+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=a09be62cfab9a1d7f37c697c44c71aed70536e8c'/>
<id>urn:sha1:a09be62cfab9a1d7f37c697c44c71aed70536e8c</id>
<content type='text'>
Burst-fetch approach grabs all data in rapid succession before board reboots.
All 10 previously-failing tests now pass:
- GET /mints: 4 mints with boolean reachable field
- GET /wallet, /usage, /whoami: all respond correctly
- POST bad token: payment-error-invalid
- POST non-accepted mint: payment-error-mint-not-accepted
- Portal: all 4 mints listed, mint-dot indicators, JS fetches :2121/mints
</content>
</entry>
<entry>
<title>test: multi-mint integration test + test report</title>
<updated>2026-05-18T18:04:58+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T18:04:58+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=6ff7b6f381eac9215da8785d7350896e21f53390'/>
<id>urn:sha1:6ff7b6f381eac9215da8785d7350896e21f53390</id>
<content type='text'>
- 247-line integration test covering 8 sections, 32+ assertions
- Tests: config, mint list, health status, payment routing, wallet, sessions
- Fake V3 token generation for payment routing tests
- Retry logic for unstable board connectivity
- Detailed test report with results, bugs found, and untested scenarios
</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>Add test_mint_health: 14 host unit tests for mint health module</title>
<updated>2026-05-18T13:44:45+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T13:44:45+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=78d0c3795e9a90a9f99178e38346a53d9b2ebe57'/>
<id>urn:sha1:78d0c3795e9a90a9f99178e38346a53d9b2ebe57</id>
<content type='text'>
Tests: init, get_all, initial state, is_reachable, mark_unreachable,
overflow handling, empty init, callback registration, reinit, start/stop.
Adds freertos/semphr.h stub and pdTRUE to FreeRTOS.h stub.
</content>
</entry>
<entry>
<title>test: add mint_health stub for host unit tests, fix test_cashu build</title>
<updated>2026-05-18T09:23:12+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T09:23:12+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=6faa3cef6cc6206cc1579ad71f1042857a6d38d6'/>
<id>urn:sha1:6faa3cef6cc6206cc1579ad71f1042857a6d38d6</id>
<content type='text'>
</content>
</entry>
<entry>
<title>test: update test_cashu for multi-mint acceptance (14/14 pass)</title>
<updated>2026-05-18T09:09:41+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T09:09:41+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=0c3f08ac7cf8e970369ec137153107ca8edc3326'/>
<id>urn:sha1:0c3f08ac7cf8e970369ec137153107ca8edc3326</id>
<content type='text'>
</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>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>
<entry>
<title>feat: per-client NAT filtering via LWIP_HOOK_IP4_CANFORWARD</title>
<updated>2026-05-17T11:09:31+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-17T11:09:31+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=0c2c67b463d6a90aaa0bb69bf3c91dba1d9ec3ec'/>
<id>urn:sha1:0c2c67b463d6a90aaa0bb69bf3c91dba1d9ec3ec</id>
<content type='text'>
- Add lwip_tollgate_hooks.h defining LWIP_HOOK_IP4_CANFORWARD macro
- Inject hook into lwIP build via CMakeLists.txt ESP_IDF_LWIP_HOOK_FILENAME
- Filter forwarded packets by source IP against firewall allowed list
- Only filter packets from AP subnet (10.192.45.0/24), allow all others
- Fix byte order bug: use network byte order for firewall_is_client_allowed
- NAT always enabled, removed global NAT toggle functions
- Remove spent-secret tracking from session.c (mint is authority)
- Remove unused get_ap_netif() function
- Reduce API server stack from 32KB to 16KB (fixes ESP_ERR_HTTPD_TASK)
- Add esp_random.h stub for unit tests
- All 186 unit tests passing
- Verified on hardware: block-&gt;pay-&gt;allow-&gt;revoke-&gt;block E2E works
</content>
</entry>
</feed>
