Commit Graph
15 Commits
Author SHA1 Message Date
mikecarper 982f96ca96 Avoid Companion request tag collisions after login 2026-10-05 01:47:05 -07:00
mikecarper 9c43efb0bc Coalesce ESP background contact I/O and defer backup cleanup 2026-10-04 11:50:12 -07:00
mikecarper 15bdb7fc4d Batch ESP background contact CRC checks without growing scratch storage 2026-10-04 09:27:54 -07:00
mikecarper 55e4f47338 Service ESP received advert cache writes between loop passes 2026-10-04 08:20:28 -07:00
mikecarper 62d76b7bab Reduce ESP contact save backend work with bounded buffering 2026-10-04 08:20:28 -07:00
mikecarper 0a3187ac30 Stage ESP contact transaction startup between loop passes
Heltec V4 timing measured 2.19 seconds for recovery checks, temporary-file cleanup, open and buffer configuration combined in one lazy-save pass. Defer those startup operations across guarded companion loops while explicit durability callers still initialize synchronously.

Track ownership only after attempting to create the temporary file, preserve unowned stale files on early cancellation, and reject premature writes or commits. Cover startup faults, interruption, mutation, cache pressure and synchronous-construction negative controls with native sanitizer tests.
2026-10-04 05:27:09 -07:00
mikecarper 7e1750ceac Bound ESP contact transaction file buffers between loop passes
Arduino defaults to 4 KiB stdio buffering, so small record writes and CRC
reads could still trigger large SPIFFS batches. Set the newly opened ESP
writer buffer to one 152-byte contact record and verifier buffer to 64
bytes before I/O. Fail closed if either setup fails; keep other platforms
unchanged.

Model backend buffering separately from logical File operations. Validate
mutation cancellation, durability, setup failures, and negative controls
which restore the hidden default writer or reader batching. Update API
seams in existing uncached, radio and telemetry fixtures.
2026-10-04 04:32:37 -07:00
mikecarper 4f114e914b Keep ESP contact saves responsive on PSRAM boards
Extend the cooperative contact transaction to uncached ESP32 storage,
including the PSRAM policy used by the XIAO and V4. Preserve owned contact
copies, the 152-byte disk format, revision cancellation and synchronous
durability operations. Keep contact capacities unchanged.

Avoid SDK error logs when optional blob or transaction cleanup files are
absent, while preserving metadata and deletion failure handling.

Validate cached ESP/nRF and uncached PSRAM paths under ASan/UBSan,
including bounded writes, mutation cancellation, faults, recovery and
reboot readback. Update the existing uncached production fixture.
2026-10-04 04:01:40 -07:00
mikecarper a71b99fd62 Service cached contact persistence between companion loop passes 2026-10-04 03:39:27 -07:00
mikecarper c3d3c4e294 Retain and isolate delayed Companion results under backpressure 2026-10-03 23:22:34 -07:00
mikecarper c93bc84b0a Cover ESP32 migration identity recovery in host tests 2026-09-24 19:17:28 -07:00
mikecarper b847b46ef7 Retry identity startup and harden replay state and permissions
Read identities up to three times before allowing replacement, publish only complete reads, and require new startup keys to be saved with bounded retries.

Use authoritative replay-file metadata throughout persistence and clock recovery. Validate setperm input before narrowing or mutating roles, and add production-path regression coverage.
2026-09-15 17:33:50 -07:00
mikecarper b4315dabdb Harden storage transactions and deferred radio settings 2026-09-15 16:01:46 -07:00
mikecarper 95aca52b4e Add per-profile TX routing and bridge filtering
Persist Companion TX preferences per contact and channel. Default repeater,
room, and sensor replies to both active TX profiles, with a reply-only force
option for an RX-only secondary profile. Track both reply copies before a
temporary-radio handoff and account for OTA copies under queue backpressure.

Add bridge/crossover filter modes and the third built-in wardriving filter,
plus compact filter CLI syntax, documentation, and CI coverage.

Fix quoted target names being interpreted as slot/key selectors, partial
recovery of invalid saved reply settings, filter suspension during tempradio2,
and unnecessary packet allocation while OTA traffic is throttled.

Validation: 1,477 native tests, 52 Python integration tests, 29 filter UI tests,
and five firmware builds covering ESP32, nRF52, and STM32 passed.
2026-09-15 01:58:43 -07:00
mikecarper be41d9dd79 Cache Full Companion paths and shared secrets to recover RAM 2026-09-08 12:21:30 -07:00