Releases: m-mcgowan/note-cpp
Releases · m-mcgowan/note-cpp
Release list
v0.3.1
Added
- Typed request/response coverage for fields introduced in notecard-schema v1.3.1:
note.update— newsyncrequest field (sync the Notefile immediately after the update).card.voltage—modenow accepts a string value, plus response fields includingcalibration,alert,on, andsync.card.motion.mode— response fieldsmotion,seconds,start, andstop.card.transport— additional response fields (allow,umin, and related).card.aux.serial— response fieldsmaxandms.card.location.mode/card.location.track— heartbeat fields includingjourneyandhours.- Smaller additions across
hub.status,hub.sync.status,card.temp,card.wifi, andntn.gps.
Changed
- Synced the bundled Notecard API definitions to notecard-schema v1.3.1 (upstream
fa30210), regenerating the typed API and the API reference. Existing code continues to compile unchanged — the update only adds fields.
Validation
ab4a163 · full (hardware-in-the-loop) · 17/17 steps passed · 90m40s · 2026-07-08T16:48:13Z
Validation steps
| Step | Result | Duration |
|---|---|---|
| version-check | ✅ | 0s |
| changelog-check | ✅ | 0s |
| codegen | ✅ | 1s |
| host-tests | ✅ | 943s |
| full-checks | ✅ | 1673s |
| integrations | ✅ | 2s |
| coverage | ✅ | 155s |
| fuzz | ✅ | 5s |
| mutate | ✅ | 1s |
| docs | ✅ | 335s |
| pio-build | ✅ | 658s |
| arduino-build | ✅ | 263s |
| hw-esp32-serial | ✅ | 427s |
| hw-esp32-i2c | ✅ | 720s |
| hw-esp32-arduino-serial | ✅ | 89s |
| hw-esp32-arduino-i2c | ✅ | 116s |
| avr-runtime | ✅ | 52s |
Hardware & simulation: ESP32-S3 serial + I²C (native + Arduino) against a real Notecard; AVR ATmega328P runtime via Wokwi (full execute() cycle).
v0.3.0
Added
- I2C shared-bus & multi-threaded safety — opt-in
NOTE_I2C_BUS_LOCKwith anIBusLockseam and a ready-madeFreeRtosBusLockadapter.exclusive()andkeep_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 onStaticNotecard. (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 control —
HeapResetPooland theNOTE_NO_RESPONSE_RAIIopt-out for arena-only builds. (72a5d12,420094e)
Changed
- Streaming is now the primary presentation: responses SAX-stream into typed sinks by default, with the buffered JSON-tree path as the fallback. The
NOTE_NO_BUFFEREDflag was renamed toNOTE_NO_JSON_TREE; the old spelling is honoured as a deprecated alias. (92bb655) - Wire format and parse strategy are now orthogonal — JSONB (binary) vs JSON (text) is chosen independently of streaming vs tree parsing. (
e1d3c72)
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 pastexecute()), 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-entrantrun_operationchokepoint underpins the operation lock (73d1b45).