Commit Graph
5 Commits
Author SHA1 Message Date
mikecarper 7b808eae47 Reconcile uncertain LittleFS writes and preserve storage authority
Verify public images after every rename attempt, expose publication outcomes, and use an independent CRC32C fingerprint so valid IEEE-CRC-tailed images cannot mask a stale target. Preserve persistent formats and reject directories for empty images.

Reconcile uncertain migration journals before choosing filesystem authority. Preserve retained contact snapshots when page publication is unconfirmed without clearing dirty state or acknowledging the new page generation.

Add readback, rename, CRC-tail, migration reboot/quarantine, and snapshot eviction regressions. Keep complete RAK Full Companion within the unchanged OTA ceiling through equivalent code compaction, with no feature or validation cuts.
2026-10-16 06:37:59 -07:00
mikecarper 32ea186f9f Reduce ESP contact save backend work with bounded buffering 2026-10-04 08:20:28 -07:00
mikecarper 1f71840989 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 764eb496fb 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 acfcfb6008 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