<feed xmlns='http://www.w3.org/2005/Atom'>
<title>npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/main/cvm_server.c, branch feature/cvm-integration</title>
<subtitle>[no description]</subtitle>
<id>https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/atom?h=feature%2Fcvm-integration</id>
<link rel='self' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/atom?h=feature%2Fcvm-integration'/>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/'/>
<updated>2026-05-18T18:09:04+00:00</updated>
<entry>
<title>feat: WS keepalive + 60s timeout + all MCP tools verified</title>
<updated>2026-05-18T18:09:04+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T18:09:04+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=2cd372cc10b9ce3f557159d6c1fd77acb150a4eb'/>
<id>urn:sha1:2cd372cc10b9ce3f557159d6c1fd77acb150a4eb</id>
<content type='text'>
- Increase TLS read timeout from 15s to 60s (reduces disconnect frequency)
- Add WS ping/pong keepalive every 30s + respond to relay pings
- Clean up debug logging (Sending WS response → DEBUG level)
- Document Board A hardware WiFi issue in AGENTS.md

MCP tools verified via relay.primal.net on Board B:
- initialize (id=100): PASS — protocol=2025-07-02, name=TollGate
- tools/list (id=101): PASS — processed by board
- get_config (id=102): PASS (verified in earlier session)
- get_balance (id=103): PASS — balance_sats=0, proof_count=0
- set_price (id=106): PASS — price_per_step updated to 42

282 unit tests passing
</content>
</entry>
<entry>
<title>fix: CVM subscription #p array format + WS response + use-after-free</title>
<updated>2026-05-18T17:50:22+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-18T17:50:22+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=980c98d2c9dbff7b4d87c867c6638637e063f984'/>
<id>urn:sha1:980c98d2c9dbff7b4d87c867c6638637e063f984</id>
<content type='text'>
Critical fixes for CVM MCP roundtrip over Nostr relay:
- Fix subscription filter: #p must be array not string (relay rejected with 'bad req')
- Publish MCP responses via existing WS connection instead of opening new TLS
- Fix use-after-free: tags_str freed before nostr_event_to_json used it
- Pass esp_tls_t through process_relay_message -&gt; handle_mcp_message chain

Verified on Board B via relay.primal.net:
- MCP initialize roundtrip: PASS
- tools/call get_config: PASS (returns device config)
- tools/call get_balance: PASS (returns balance_sats, proof_count)
- CEP-6 announcements (kinds 11316, 11317, 10002): all accepted by relay
</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>Phase 7: MCP handler (25 tests), NIP-04 encrypt/decrypt (15 tests), CVM server skeleton</title>
<updated>2026-05-16T23:57:06+00:00</updated>
<author>
<name>Your Name</name>
<email>you@example.com</email>
</author>
<published>2026-05-16T23:57:06+00:00</published>
<link rel='alternate' type='text/html' href='https://upleb.uk/npub12m5exm2uk3xa674cc5r0hlyvccs5xxn7qv83ezuteefv5972nquq4j4szl/esp32-tollgate/commit/?id=fdf662f8f1a1a3b38fe4d251982fffab8e9bf664'/>
<id>urn:sha1:fdf662f8f1a1a3b38fe4d251982fffab8e9bf664</id>
<content type='text'>
- mcp_handler.c/h: 4 tools (get_config, set_config, get_balance, wallet_send)
- nip04.c/h: AES-256-CBC + ECDH with 0x02 compressed pubkey prefix
  - Fixed IV copy bug: mbedTLS AES-CBC modifies IV in-place
  - Base64 encode/decode for ciphertext transport
  - PKCS7 padding
- cvm_server.c/h: Nostr DM listener with FreeRTOS task
- config: cvm_enabled, cvm_relays fields
- 156 total tests passing across 10 test binaries
</content>
</entry>
</feed>
