Skip to content

v0.3.0

Choose a tag to compare

@github-actions github-actions released this 03 Jul 01:36

Added

  • I2C shared-bus & multi-threaded safety — opt-in NOTE_I2C_BUS_LOCK with an IBusLock seam and a ready-made FreeRtosBusLock adapter. exclusive() and keep_ready() group several exchanges into one atomic operation (with optional RTX/CTX readiness signalling), so a shared I²C bus can be driven safely from multiple tasks. (429458b, ae53234)
  • nc.ping() — one-shot echo connectivity probe (single attempt, short timeout, no retry/CRC/reset); safe before any other transaction. Also on StaticNotecard. (65217f8)
  • Compile-time body_template — build request bodies (nested objects and arrays) at compile time, emitted as either JSON text or JSONB. (b8be3dc)
  • Raw JSON body literals now work under NOTE_JSONB, re-encoded to binary opcodes via SAX replay. (cd94afa)
  • First-class memory controlHeapResetPool and the NOTE_NO_RESPONSE_RAII opt-out for arena-only builds. (72a5d12, 420094e)

Changed

Fixed

  • Singleton (NOTE_SINGLETON) correctness: the streaming-parse flag is set on the singleton path, Notecard error messages get allocator-backed lifetime (no longer dangle past execute()), and safety / request IDs / array fields are plumbed through the singleton thunks. (7b7664b, d8006d4, 9985116)

Internal

  • Testing: JSON/JSONB parser fuzzing under ASan/UBSan added to the release gate (b69854f); an on-demand mutation-testing harness (ci.sh --mutate) that drove new assertions into the COBS, retry, JSONB, and dispatch tests (cb20035, 6dee91a); a hardware-in-the-loop sweep over ESP32-S3 serial + I²C (17f95a2); device coverage extended to the I²C interface (b5abf7b).
  • Refactoring: Notecard::execute()'s type-independent prologue collapsed into a non-template core (525dd4b); a re-entrant run_operation chokepoint underpins the operation lock (73d1b45).