Commit Graph
75 Commits
Author SHA1 Message Date
torlando-agent[bot] 98dca8e516 feat: add bounded NomadNet forms 2026-08-16 21:36:30 +00:00
torlando-agent[bot] d9945bce24 feat: add bounded NomadNet table rendering 2026-08-16 15:33:52 +00:00
torlando-agent[bot] 9ce2f10107 fix: add NomadNet anchor navigation 2026-08-16 02:40:10 +00:00
torlando-agent[bot] 5961c791d6 Virtualize NomadNet page layout 2026-08-15 02:33:37 +00:00
torlando-agent[bot] b50ae852ac fix(nomadnet): submit configured link variables 2026-08-14 18:11:32 +00:00
torlando-agent[bot] 656f1c03cb fix(nomadnet): validate addresses before teardown 2026-08-14 00:39:04 +00:00
torlando-agent[bot] f605aa386d fix(nomadnet): release directory memory before navigation 2026-08-13 20:58:23 +00:00
torlando-agent[bot] 77e5123455 feat(nomadnet): checkpoint compact page lifecycle
Add bounded compact page rendering, serialized Link and Resource lifecycle handling, TCP reconnect corrections, and deterministic Python RNS conformance coverage.

Physically verified anonymous index retrieval and rendering on T-Deck. Same-destination Link reuse and italic rendering remain follow-up fixes.
2026-08-13 20:58:23 +00:00
torlando-agent[bot] 5a2e4757fa fix: admit outgoing messages before persistence 2026-08-07 19:30:29 +00:00
torlando-agent[bot] 117d3894bd feat: make maps SD-pack only 2026-08-07 05:26:34 +00:00
torlando-agent[bot] faff0c67ba fix: complete map route rebase resolution 2026-08-07 01:39:13 +00:00
torlando-agent[bot] 340c9c240f fix: close map integration safety review 2026-08-07 01:35:35 +00:00
torlando-agent[bot] f55b54eec0 feat: wire safe opt-in map downloads 2026-08-07 01:34:30 +00:00
torlando-agent[bot] f9219426c1 feat: add peer location sharing controls 2026-08-07 01:32:37 +00:00
torlando-agent[bot] c8ba2b5ba3 feat: add bounded offline map screen 2026-08-07 01:31:17 +00:00
torlando-agent[bot] fe0d1f7d55 fix: close location durability and router races 2026-08-07 01:27:49 +00:00
torlando-agent[bot] d7a8f17ac8 feat: persist live location state 2026-08-07 01:27:07 +00:00
torlando-agent[bot] a71e19b65c fix: serialize live router admission 2026-08-07 01:26:45 +00:00
torlando-agent[bot] 0a28266b9c fix: harden live location dispatch boundaries 2026-08-07 01:26:12 +00:00
torlando-agent[bot] 77d68a9d07 feat: route live location telemetry 2026-08-07 01:25:48 +00:00
torlando-agent[bot] 946073ca41 feat: route authenticated location telemetry 2026-08-07 01:23:28 +00:00
torlando-agent[bot] 1c8af97548 fix(nomadnet): bound remote page responses 2026-08-05 18:48:58 +00:00
torlando-agent[bot] 45496a49d4 fix(nomadnet): bound path retry and unblock navigation 2026-08-05 17:34:16 +00:00
torlando-agent[bot] 31c8a08826 fix(ui): single-own LXMF router processing 2026-08-05 16:05:04 +00:00
torlando-agent[bot] 738b7e1c51 fix(nomadnet): preserve successful resource terminal state 2026-08-05 14:08:04 +00:00
torlando-agent[bot] 38839c0229 feat(nomadnet): add scoped discovery and saved navigation 2026-08-05 03:17:00 +00:00
torlando-agent[bot] d0e1ce273c feat(ui): add app launcher and NomadNet MVP 2026-08-05 00:22:59 +00:00
torlando-agent[bot] 7daac8471e fix: make radio activity snapshots task-safe 2026-08-04 16:46:55 +00:00
torlando-agent[bot] 93760af5d5 feat: add current-channel radio activity view 2026-08-04 15:56:56 +00:00
torlando-agent[bot] dcf863e581 [verified] fix: accept LXST profile and mode signals 2026-08-03 01:20:59 +00:00
torlando-agent[bot] 61872480c9 fix: enforce ULBW-only LXST voice profile 2026-08-02 00:39:45 +00:00
torlando-agent[bot] c2c6ae5641 fix(voice): synchronize call termination and TCP announces 2026-08-01 21:32:01 +00:00
torlando-agent[bot] cfa6fa3afa test: harden LXST contention harness 2026-08-01 14:14:56 +00:00
torlando-agent[bot] bc0f95b100 fix: serialize LXST callbacks across interface tasks 2026-08-01 14:14:56 +00:00
torlando-agent[bot] 5ba41b7c59 fix: serialize LXST call start ownership 2026-08-01 14:14:56 +00:00
torlando-agent[bot] 69f16ca2bb fix: bind LXST callbacks to exact link identity 2026-08-01 14:14:56 +00:00
torlando-agent[bot] 8e33fb15ab fix: ignore stale LXST link callbacks 2026-08-01 14:14:56 +00:00
torlando-agent[bot] 360010f004 fix: reserve incoming calls during identification 2026-08-01 14:14:56 +00:00
torlando-agent[bot] 5a1f1c33b4 refactor: make call generation ownership explicit 2026-08-01 14:14:56 +00:00
torlando-agent[bot] 9d5cc32b82 fix: avoid duplicate delivery-state persistence 2026-07-27 04:24:58 +00:00
torlando-agent[bot] 0506452f77 docs: record message-store stack contract 2026-07-26 15:43:54 +00:00
torlando-agent[bot] e885f27c77 fix: prefer opportunistic delivery for short UI messages 2026-07-26 15:30:45 +00:00
torlando-agent[bot] 12d25b2acc fix: preserve retryable messages on storage failure 2026-07-24 19:02:06 +00:00
torlando-agent[bot] 4e2e74296b fix: fail closed when message persistence fails 2026-07-24 18:22:35 +00:00
torlando-agent[bot] 0f3b39bc19 fix: serialize LXST audio teardown on loopTask 2026-07-23 02:11:39 +00:00
torlando-agent[bot] efd3b0bb8f fix: address Greptile safety findings 2026-07-22 19:28:32 -04:00
torlando-agent[bot] 31631b0afd fix: make full-duplex voice fit live device memory 2026-07-22 13:28:23 -04:00
torlando-agent[bot] 9e151877cc fix(voice): stabilize LXST call lifecycle and add E2E harness 2026-07-22 10:25:45 -04:00
torlando-agent[bot]andClaude Opus 4.8 bd7b357b96 fix(audio): ES7210 mic gain saturation + heap-starvation reboots + raw-mic diagnostic harness
Confirmed fixes:
- LVGL hybrid-allocator threshold 1024->256 (lib/lv_mem_hybrid.h): moves ~45KB of
  small LVGL objects to PSRAM, fixing internal-heap starvation that made the
  call/loopback pipeline intermittently fail to allocate and reboot mid-call
  (internal free 71->116KB, largest contiguous block 61->106KB).
- ES7210 mic PGA gain 21dB->12dB (lxst_audio.cpp): 21dB saturated the ADC -- an
  rms-7003 noise floor in silence + 0x8000 negative-rail spikes + a spectral-peak
  shift that masqueraded as a "+17% pitch warp". At 12dB idle silence is clean (rms 48).

Diagnostic harness (PYXIS_TEST_HOOKS, test-only): T:RAWMIC[stage], T:REG, and
T:RECORD/T:DUMPREC add a raw-mic UDP tap plus a reliable PSRAM recorder with a
checksummed serial transfer, and T:LOOPBACK wiring, for objective mic-capture
analysis (offboard Whisper STT scoring).

Exploratory / still unresolved: captured speech remains garbled (oscillating static,
likely an ES7210 sigma-delta capture instability -- under investigation). Includes a
16kHz/main-PLL clock path + MICBIAS exploration; the "warp" was the gain artifact, not
a clock issue, so the 16kHz path can later be simplified back to 8kHz.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UWZuYkHBRqNb6BZHV8sTG5
2026-06-24 17:21:25 -04:00
torlando-agent[bot]andClaude Opus 4.8 36d93f965f fix: announce/sync interval units+defaults, live Settings clock, OTA repair
Settings/clock (user-reported):
- Announce interval: default 1h (was 60s); the field is now MINUTES (label
  "Announce Interval (min):", populate /60, read *60).
- Prop sync interval: default 4h (was 1h); the field is now HOURS (label
  "Prop Sync Interval (hrs):", populate /3600, read *3600); log prints hours.
- Settings clock now ticks live: SettingsScreen::tick() (throttled ~1s) is hooked
  into UIManager::update() like the announce-list tick, so the Time/GPS/system
  readouts refresh while the screen is open instead of being a static snapshot.

OTA repair (was broken two ways; diagnosed via an ultracode workflow):
- patch_nimble.py hardcoded the `tdeck` libdeps path, so building any OTHER env
  (tdeck-ota gets its own libdeps tree) never received the NimBLE patch that
  DEFINES nimble_host_reset_reason -> undefined-reference link error. Made it
  env-aware (env.get("PIOENV",...)), matching the four sibling pre-scripts. Also
  restores 3 NimBLE stability patches that were silently missing from OTA builds.
- ArduinoOTA onStart synchronously called TCPClientInterface::stop() (blocks up to
  30s), overrunning espota's ~10s connect-back window -> "No response from device"
  (phase 2), and its un-fed watchdog tripped reboots. Made onStart non-blocking.
- [env:tdeck-ota] upload_command invoked a non-existent tools/espota.py -> switched
  to upload_protocol=espota.
- Do NOT WiFi.setSleep(false): the ESP32 requires WiFi modem-sleep when WiFi+BT
  coexist (aborts at boot otherwise) -- documented inline.

Verified on device: tdeck-ota links; OTA over WiFi completes 100% (Result: OK) and
the device reboots clean.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01UWZuYkHBRqNb6BZHV8sTG5
2026-06-22 23:28:48 -04:00