ProtoCore v1.0.16
Deterministic, zero-heap network stack for embedded targets
Loading...
Searching...
No Matches
Changelog

All notable changes to ProtoCore are documented here.

[Unreleased]

Bug Fixes

  • an inbound accept could take the SSH slot the reverse tunnel held (e93a830)
  • the client built its own KEXINIT, and I_C / I_S were sized for one role (8dbfea8)
  • the client role could not complete a key exchange (85329fe)
  • ssh_scp.c never compiled, name the mode enum as the header declares it (0991534)
  • ssh_forward.c never compiled, add the missing session.h include (e904608)
  • the software server was the fourth site accepting an all-zero secret (4bc3977)
  • RFC 8446 7.4.2 requires aborting on an all-zero X25519 shared secret (83be793)
  • the curator's cap filled with flagged-valid entries, shipping no rejection cases (f02b770)
  • protocore_config.h is the entry point, not types.h (df81505)
  • three headers used the macro without the header that defines it (444edf0)
  • every header carries its own extern C; protocore.h stops wrapping its includes (8ffc88e)
  • the exchange hash declared a 64-byte out its SHA-256 caller does not have (92e8ce2)
  • the Ns table made every leaf an indirect always_inline call at -Og (7f0b3b0)
  • the i2c command link was shared per bus; pc_mnt_fs published a C++ type (5153630)
  • the nvs seam serialises; seven fs entry points and one spi transfer were unbounded (7a6630b)
  • put_blob and put_str judged their bounds after committing, or not at all (1f32484)
  • the two backends gave different wrong answers for a blob and a string (280fbc6)
  • the fs backend had no sync, so the WAL could not bind the only persistent store (5fe8ce5)
  • a conflicted autostash pop committed its markers into the changelog (2e47cb0)
  • modmul guarded its operand count nowhere; stale .cpp references (e527f96)
  • the RSA memory-init wait was inverted; four more the vendor arm never proved (2043db6)
  • sha256's accelerated arm dropped the work parameter; the KDF term ignored its context (81a70cb)
  • a liboqs disagreement read as liboqs being absent; scope the agent rules to tools/ (b8a07dc)
  • the vendor arm hashed at an offset only the software arm defined (5b26f3a)
  • the misaligned priming load ran with less than a word of work left (022e8ed)
  • claiming a slot orphaned both engines' borrows (c722cbf)
  • the init wipe ran through the pointer from before the split (6aac99b)
  • a re-used stream slot served the previous request's pseudo-headers (690d135)
  • the re-init split ran from a base it had already zeroed away (648b45b)
  • an invalid record is discarded, the association survives (aa16fa3)
  • legacy_record_version is ignored, per RFC 9147 sec 4 (03c5fa3)
  • a retransmitted fragment that changes a byte aborts reassembly (b423bdc)
  • illegal_parameter for a bad cookie, abort a non-empty legacy_cookie, and RFC 7250 outcome 2 (50d3c3b)
  • the key schedule reaches its own region by field, like the rest (6795e0e)
  • reach the connection's own storage, like ssh_pkt_slot_storage (c15ab56)
  • the slot picks its region of the pool's one borrow (636c63f)
  • the borrow is taken once per connection, not once per init (fd8bb4a)
  • the portable TLS arm is a third carrier of PC_ENABLE_TLS_RPK (02125b4)
  • a request past 255*HashLen has no defined answer (RFC 5869 sec 2.3) (e49c4e8)
  • the suite check uses the IANA code point constant (40801ed)
  • the offered cipher suite and legacy_compression_methods are checked (0ef116e)
  • a zero-length Handshake or Alert record is neither sent nor accepted (2d3e3a7)
  • h3_fail is defined above its first use (49067b0)
  • Fixed Bit, Reserved Bits and the 2^60 max_streams bound (RFC 9000) (a4f886f)
  • a content-length that disagrees with the DATA makes the request malformed (43d1127)
  • per-type frame length and stream-id guards, and a CONTINUATION cap (ed39a65)
  • coaps_server passed the address of a keys pointer, not the keys (73501c4)
  • a HEADERS on an open stream is a trailer section, not a stream-id error (e2f370a)
  • h2_server suite passed pc_h2_write_header its arguments out of order (a635744)
  • reject a zero or overflowing WINDOW_UPDATE (RFC 9113 sec 6.9, 6.9.1) (b439489)
  • the outbound frame borrows from the plaintext arena HTTP works out of (ce0a1e0)
  • DATA on an idle or closed stream is refused before the app sees it (RFC 9113 sec 5.1, 6.1) (0815504)
  • an oversize dynamic-table size update is a decoding error, not a clamp (7ad71ec)
  • a prefix integer that overflows 32 bits is a decoding error (RFC 7541 sec 5.1) (ca9bf33)
  • the re-key count is a power of two, bounded by RFC 4253 sec 9 and RFC 4344 sec 3.2 (b18fb31)
  • derive the re-key packet count from the 1 GB bound (RFC 4253 sec 9) (cb02d8e)
  • a wrong KEX guess is dropped, not taken as the real KEXDH_INIT (RFC 4253 sec 7.1) (3453650)
  • EXT_INFO belongs to the first NEWKEYS, not every re-key (RFC 8308 sec 2.4) (93c23bd)
  • the remaining ssh_dh_derive_keys_sid call sites take both directions (2220fc8)
  • native_ssh_pqc builds the SSH transport, so it has to define PC_ENABLE_SSH (c7f4cc6)
  • native_ssh_hardened builds the SSH stack, so it has to define PC_ENABLE_SSH (ef6f509)
  • four audit findings - session-id binding, request fields, CR NUL, channel guards (ac76ab6)
  • refuse a password-change request instead of authing on the old password (5091c67)
  • end a subnegotiation only on IAC SE, not a bare 240 (9c2dd30)
  • validate the userauth service name; pin the telnet greeting length (4792b06)
  • frame a back-to-back packet pair into the slot instead of dropping the second (a445c4a)
  • three more blob tools onto findroot; fix sibling import for -m; guard crossinstall (c8460dc)
  • blob_parity onto findroot, and guard its module-level main() (48c01fb)
  • base-less relpath printed CWD-relative paths; use findroot.rel (fa5ad66)
  • revive the owner-context guard, and single-source its root via findroot (6a806ef)
  • three files took protoframe.h through log.h or telnet.h (ede98b6)
  • twelve PC_LOGx sites still passed their values variadically (d4ec123)
  • the token frame passes its two strings as values (229d76d)
  • a refused send ends the transfer instead of writing on (8a607f0)
  • the plaintext arena covers the SSH receive nest with compression on (c52778f)
  • the two PC_key_max macros get distinct names at file scope (ce3b887)
  • the compression buffers are wiped when the slot is reset (78852ff)
  • pc_ssh_conn_send reports a refused queue instead of claiming the bytes went (cd435b1)
  • a half-finished keyboard-interactive exchange dies with its connection (ad9cbc4)
  • the derived session keys and the DTLS shared secret are wiped (291da41)
  • the slot's persistent wire binds at accept, not mid-dispatch (bc52f7a)
  • PC_WORK_SSH_CONN carries the flight, and the crypto work it already borrowed (68645ad)
  • the slot holds a flight, so the second packet of a dispatch is not dropped (9a5499f)
  • a 2-byte over-read on the wire, two dead stdio includes, three unchecked spans (4e71254)
  • the scalar and the nonce do not outlive the signature (447c799)
  • the by-value transcript parameter aliased the caller's bytes (841841c)
  • a live context cannot share the one-shot work buffer (66c2a02)
  • the seed borrow is checked before it is written through (5a31c45)
  • the hash context is a view, so a struct copy aliases it (2f68757)
  • the key schedule needs PC_TLS13_KS_BORROW, not PC_TLS13_KS_CAP (9b04dff)
  • the slot's crypto bytes are bound before anything derives out of them (145c3b9)
  • the two record layers expand their traffic keys out of the caller's bytes (747e4df)
  • the accumulator fill is the raw mover, not the aligned-span one (cedb0cb)
  • the partial word merged instead of overwriting past the span (a054a54)
  • the pad and the state copy are spans, not byte walks (d437c80)
  • mem.cpy stores a whole word, so the accumulator lost its length (87ab003)
  • the key schedule leaked a persistent borrow per handshake (7aa25f1)
  • the key schedule leaked a persistent borrow per handshake (a8421f3)
  • available() and read() step the open, so a polling caller advances its connect (deea2e7)
  • four vendor components become capabilities, named for what they include (2d5346a)
  • external-RAM placement selects on PC_HAS_PSRAM (c5632da)
  • the vendor TLS stack is a capability, not a consequence of not being the host (fa574c8)
  • pc_server_reset() drops the not-found handler, and native_swar builds no library source (c8e8af8)
  • the pin guards ask for the capability, and the drivers run against the pin table (cf45985)
  • Deflate and Inflate bind their instance inside the gate that declares its type (e526098)
  • the bus guards ask for the capability instead of asking about the build (aeb242e)
  • CodeQL traces every native env, and native_codeql links again (10c3865)
  • fold the repeated header lines gcovr emits, which SonarQube rejects outright (c3333fe)
  • gen_compiledb and compile_examples climbed two levels to the repo root, not three (9d2e963)
  • select_envs resolved affected_common under the repo root, which the tools/ move broke (9b2cfc9)

CI / Build

<<<<<<< Updated upstream

Changes

<<<<<<< Updated upstream

  • Merge pull request #38 from dstroy0/dependabot/github_actions/github/codeql-action-4.38.2 (9eb4ec5)

    ‍Stashed changes

    - Merge pull request #40 from dstroy0/doug/laughing-davinci-stc796 (b10513a)
  • Merge pull request #39 from dstroy0/doug/laughing-davinci-stc796 (603f12a)
  • Merge Dependabot #36: build(deps-dev): bump cspell from 10.3.1 to 10.3.3 (e9958c4)
  • housekeeping (e79cbba)
  • Merge Dependabot #35: build(deps): bump github/codeql-action from 4.38.0 to 4.38.1 (d293f8d)
  • Merge Dependabot #37: build(deps-dev): bump prettier from 3.9.6 to 3.9.9 (e0108d0)
  • housekeeping (0f4c3df)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (4d1cefe)
  • housekeeping (f7ee7ed)
  • Merge branch 'worktree-prose-compliance' (8074b13)
  • Merge branch 'worktree-docs-fixes' (e8a52de)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (57becfe)
  • deps mmgr feature (23ad3ad)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (4907ac8)
  • Merge Dependabot #32: build(deps-dev): bump cspell from 10.0.1 to 10.3.1 (6545099)
  • Merge Dependabot #33: build(deps): bump github/codeql-action from 4.37.7 to 4.38.0 (0c6bc8a)
  • repo licenses bugfix (f8e0d24)
  • repo licenses rewrite (816a363)
  • Merge remote-tracking branch 'origin/main' (fd7d1fa)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (fcea3a7)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (44cf774)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (c346e8c)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (4923a9a)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (3545ad6)
  • tools checkdocs feature (5b41784)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (1ff87bc)
  • deps smoltoml bugfix (f10d243)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (c0cc846)
  • src speedopt bugfix (2b75c94)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (c7f04fb)
  • src secure comment (b19157a)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (ae79b80)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (9026969)
  • src httpclient bugfix (a60250d)
  • tools gengroup feature (0cede14)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (f59660f)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (1efe600)
  • Merge remote-tracking branch 'origin/main' into worktree-docs-fixes (03a54c3)
  • tools checkdocs bugfix (5b5f546)
  • Merge remote-tracking branch 'origin/main' (12416f7)
  • merge origin (ede0103)
  • tools gate bugfix (d9761b2)
  • tools comment bugfix (f8ba590)
  • restrict is gone, because there is nothing left for it to promise (a356bb0)
  • an operand group is not always called <entry>args (c1e1aa6)
  • thread, 120 call sites (24541a0)
  • five more, on the fixes rather than on anything new (624220e)
  • a result local always declares, with a fresh name when that one is taken (e28287b)
  • a write of the result is not a read of it, and rewriting it returned garbage (089244a)
  • the result window ends at whichever comes first, not at whichever exists (ccd2d16)
  • an operand nobody restaged is still the one the last staging set (c84088d)
  • fold a call staged in a comma expression, and the sweep runner passes real paths (fbac636)
  • the operand group reaches the last pass that was still using the entry name (a074054)
  • the scanner asks the module what its operands are instead of guessing the names (276381a)
  • the gate decided nothing the include had not already decided (9c2b1ec)
  • a module cannot lose its gate while a header it depends on still has one (a895fc4)
  • the operand guard was reading the file the rewriter had not written yet (e478def)
  • a conversion that compiled, linked, and returned the wrong number (1a54ebe)
  • three ways the pass silently produced code that could not compile (2b29a73)
  • a result local belongs to its block, not to its function (7d9a81e)
  • the dispatch layout counts past 24, because six tables are longer than that (1ef1408)
  • six more modules, and the pass learns the other spelling of a call (4c529a0)
  • seven more modules on MMgr's shape, and two gaps the batch found (e68596f)
  • pull to head, and give it a build directory short enough to compile in (6a23590)
  • ns refuses a half-conversion instead of writing one (794c7cf)
  • the ns conversion rewrites its call sites, and sha256 is on MMgr's shape (80db927)
  • two convert entries did not reach the tool they name (194208e)
  • the -O level comes from CMake, not a pragma (28e6863)
  • apply MMgr's shape (c6ea75d)
  • one definition per entry in ssh/connection, and the namespace contract (0163eca)
  • guarded stops asking modules that have no gate to have (67f3f8e)
  • remove the vendor arms, which never resolved to an implementation (71f731e)
  • give PROTOCORE_ENABLE_X509 the parser to gate (6c9a6c1)
  • split the RAM disk out of the mount registry (9d47e08)
  • stop two TUs reaching in, gate the module over its whole body (423eb31)
  • isolate the Date header's clock, gate both clocks (4caa2b8)
  • drop PROTOCORE_NEED_*, state the dependency instead (b17178c)
  • one gate rule, not two (d2ea5f8)
  • wrap 135 sources in BEGIN_DECLS / END_DECLS (b8c4779)
  • thread one down to the last stand-in sites (a596c5b)
  • convert shape: say what it guesses and what it must not move (924adb3)
  • clang-format the vendor HAL headers (b30003e)
  • black over tools/ (dbfa67e)
  • clang-format the 77 files that had drifted (a164ee8)
  • retire the stand-in arrays, 663 sites (e9cc5f6)
  • only the config include above the gate, 195 files (5928732)
  • read the gate, and see a static with no initializer (ccd315a)
  • compare the golden's shape, not its size (ec36cd7)
  • hooks commit: say to single-quote the paragraphs (fc5cc5e)
  • no call spells one as null, 63 sites (b03a90a)
  • measure cap-sweep: compile the arm the host never answers (4b12dfa)
  • the no-bus arms of hmmd, ld2410 and pmbus never compiled (2965ad1)
  • read a module blind before judging it (ce2dfa9)
  • the protocol registry moves to the layer that owns the connection (9095d18)
  • a doc comment on an entry line hid six modules, and a header need not have a sibling .c (8a2e702)
  • a call does not reserve a name (d2256ff)
  • batch 12 of the handle reshape, 24 modules to 304 (0b81033)
  • batch 11 of the handle reshape, 29 modules to 280 of 308 (6c268ef)
  • ask whether a namespace is reached in one hop, and whether the table binds every entry (64ec6d4)
  • bind a wrapped table entry, and refuse a table that leaves one unbound (9e6bdf5)
  • (housekeeping): handle reshape, 251 modules; shared implementations and local aliases (0d379f9)
  • (housekeeping): handle reshape, 228 modules; a guarded entry keeps its guard (4ce62a1)
  • (housekeeping): handle reshape, 198 modules; the table is not always in the sibling .c (5eb2b16)
  • (housekeeping): handle reshape, 168 modules; the rename needs all three conditions (b745c37)
  • (housekeeping): handle reshape, 142 modules (f6be0b4)
  • (housekeeping): handle reshape, 112 modules, and the hint that carries what it cost (7ea879c)
  • (housekeeping): handle reshape, 82 modules; rename only where the bytes are code (6049cf1)
  • (housekeeping): handle reshape, 52 modules, and three defects the tests caught (bd17fdb)
  • (housekeeping): handle reshape, first 15 modules (b462bf1)
  • (housekeeping): revert the 302-module handle sweep, keep the verb (4b602c8)
  • (housekeeping): regenerate the three CMakeLists the module graph moved (b6f1c44)
  • (housekeeping): convert handle - extern table becomes a static const one (4452162)
  • (housekeeping): scan_vtable - the last entry of every table was dropped, and a header-defined table was not seen at all (1ee0725)
  • (housekeeping): goldenize - a macro or type the preprocessor CHOOSES is one arm, not one item (6d3ad74)
  • (housekeeping): goldenize - an empty entry set built a regex that matched everything (4227d8e)
  • (housekeeping): shape audit, region alignment asserts, dead borrow null-checks out (bed4956)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (a899b96)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (d587617)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (06f023b)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (17825c1)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (f1b948a)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (a7541c7)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests, per module cmake (start removing ifdef soup) (b8c61b8)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (3fa2286)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (d204265)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (5b23bbb)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (5ee3bf6)
  • Merge Dependabot #27: build(deps): bump streetsidesoftware/cspell-action from 8 to 9 (50622ba)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (77b7d67)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (7b35b3d)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (7b76817)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests, format (3f238f9)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (51f77d2)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (50a22d0)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (88f18c9)
  • Merge Dependabot #26: build(deps): bump github/codeql-action from 4.37.6 to 4.37.7 (2a82821)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tests (9fe8aee)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (ba1189a)
  • (housekeeping): pimpl phase 3, public handles, internal ctx, fix tls tests (898f4a8)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (728de1e)
  • (housekeeping): pimpl phase 3, public handles, internal ctx (2ba91fb)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (0f7f245)
  • (housekeeping): pimpl phase 3, public handles, internal ctx (934877c)
  • (housekeeping): pimpl phase 3, public handles, internal ctx (cfb01dd)
  • (housekeeping): pimpl phase 3, public handles, internal ctx (ebbc9ec)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (21366a9)
  • (housekeeping): pimpl, alias hwcrypto registers+offsets+call order to public handles (ed640bb)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (d68c18e)
  • (ci): version tracking stamp now fires on release and file touch (3de0506)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (bda8a8a)
  • (test): test/harness.py single test entry point+sim entry point (b294293)
  • (test): RISC-V bare metal, linker alignment, QEMU setup, startup+reset __assert_func, RMW atomics (nonexclusivitey), protomem, gmtime_r (8f3f441)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (cd99eb6)
  • (test): ARM M4 bare runtime: reset path+startup __assert_func, RMW atomics (nonexclusivity) protomem, gmtime_r (e9b7def)
  • (test): QEMU integration for bare metal sim (5d0b90e)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (aab883a)
  • (test): extend to linker and os primitives (30f2e1b)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (5326ee9)
  • (housekeeping): move dirs, renames, pimpl as I work through (657cdbb)
  • (housekeeping): move dirs, renames, pimpl as I work through (25917ca)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (deb8198)
  • (housekeeping): move dirs, renames, pimpl as I work through (9b84203)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (6cda996)
  • (housekeeping): move dirs, renames, pimpl as I work through (bb4a8fd)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (ee164ab)
  • (housekeeping): move dirs, renames, pimpl as I work through (4d2cd06)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (ff936c9)
  • (housekeeping): move dirs, renames, pimpl as I work through (a362e7d)
  • (housekeeping): move dirs, renames, pimpl as I work through (f140888)
  • (housekeeping): move dirs, renames, pimpl as I work through (408fb25)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (6f95945)
  • (housekeeping): move dirs, renames, pimpl as I work through (e4ce7b5)
  • (housekeeping): move dirs, renames, pimpl as I work through (000c58e)
  • (housekeeping): move dirs, renames, pimpl as I work through (61ea2e5)
  • (housekeeping): dir moves, pimpl sweep half done (7b2d34b)
  • (housekeeping): move dirs, renames, pimple as I work through (4ecbecf)
  • (docs): rename literals/funcs (7de0c7c)
  • (docs): ssh suite first pass rfc correctness. (836b2ba)
  • ssh audit P0a/P0b/P1 in flight (ed6f704)
  • restore src/, core_setup/, tools/, ci and docs to c4368d386 (23a24a7)
  • Revert "fix(swar): the Ns table made every leaf an indirect always_inline call at -Og" (41fc9a1)
  • Revert "fix(nvs): the two backends gave different wrong answers for a blob and a string" (ea49e97)
  • Revert "test(config): the blob test pinned the host double's truncation, not the contract" (2173298)
  • Revert "fix(nvs): put_blob and put_str judged their bounds after committing, or not at all" (1a13687)
  • clang-format the tree (a0cf205)
  • Reapply "refactor(http2): the connection borrows its buffers and asserts its term" (f401107)
  • Revert "refactor(http2): the connection borrows its buffers and asserts its term" (272c11b)
  • KDF chain accumulates at an offset in the caller's region, not the stack (12e317a)
  • per-direction cipher/MAC, derived into the connection that owns the memory (cdd1463)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (809e9c2)
  • back out the flight sizing until the persistent-borrow contention is solved (a054a8d)
  • sha512 and md go back, they were not the file in hand (38620e6)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (dcdbffe)
  • rf work (b79fe2b)
  • rf work (9f5751c)
  • Bump version: 1.0.15 → 1.0.16 (dcb836c)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (f64aaf3)
  • Bump version: 1.0.14 → 1.0.15 (582ed98)
  • Bump version: 1.0.13 → 1.0.14 (bd0dac9)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (cb597cd)
  • Bump version: 1.0.12 → 1.0.13 (ebef7c8)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (8713b54)
  • Bump version: 1.0.11 → 1.0.12 (bbaa1ff)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (cc80df2)
  • Bump version: 1.0.10 → 1.0.11 (a370fce)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (06995b6)
  • Bump version: 1.0.9 → 1.0.10 (01e1aef)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (748e497)
  • Bump version: 1.0.8 → 1.0.9 (8cbcc98)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (1c261c8)
  • Bump version: 1.0.7 → 1.0.8 (9701de6)
  • Merge Dependabot #22: build(deps): bump actions/cache from 4 to 6 (20c8979)
  • Merge remote-tracking branch 'origin/main' (02ffde5)
  • Merge branch 'main' of https://github.com/dstroy0/ProtoCore (a7b482b)

Documentation

  • README status table reads the report's current env-count wording (f07532d)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (e1efd78)
  • docs generated restore (bf13a60)
  • docs prose bugfix (efac2fd)
  • docs prose bugfix (78ca0d8)
  • docs prose bugfix (fec9b6a)
  • docs prose bugfix (7028f46)
  • docs prose bugfix (8e4fb9c)
  • docs prefix bugfix (33c1e8a)
  • docs citation bugfix (4c07769)
  • docs generated regen (aa46daf)
  • docs security bugfix (ccf6432)
  • docs prose bugfix (d946f28)
  • docs prose bugfix (bb1718c)
  • docs citation bugfix (a14a501)
  • docs citation bugfix (ab22766)
  • docs prose bugfix (3a70b9b)
  • docs prose bugfix (63d22a9)
  • docs generated regen (e970817)
  • docs citation bugfix (59c15f7)
  • docs prose bugfix (f332146)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (a665538)
  • docs citation bugfix (a0ccb3e)
  • docs prose bugfix (13b2a9d)
  • docs generated regen (5d6bcc8)
  • docs formatting bugfix (61cc7c8)
  • docs generated regen (08853b2)
  • docs prose bugfix (be76096)
  • docs prose bugfix (01693b8)
  • docs prose bugfix (1435047)
  • docs prose bugfix (8b686f3)
  • docs prose bugfix (2fa8991)
  • docs prose bugfix (ec26038)
  • docs prose bugfix (4f0f9b8)
  • docs prose bugfix (72c77da)
  • docs prose bugfix (5343f24)
  • docs prose bugfix (1679564)
  • docs prose bugfix (6ff2c11)
  • docs prose bugfix (46d21bb)
  • docs prose bugfix (59ef675)
  • docs prose bugfix (f42400c)
  • docs prose bugfix (b66542c)
  • docs prose bugfix (4e2eff1)
  • docs prose bugfix (d680bcd)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (d525738)
  • docs prose bugfix (c3bd06a)
  • docs prose bugfix (0a6d821)
  • docs prose bugfix (b6d4b83)
  • docs prose bugfix (714b992)
  • docs prose bugfix (5ca68ea)
  • docs prose bugfix (fe4a055)
  • docs prose bugfix (98b7f3d)
  • docs prose bugfix (0a753d4)
  • docs prose bugfix (42e223d)
  • docs prose bugfix (59711cb)
  • docs prose bugfix (87883f3)
  • docs prose bugfix (6581497)
  • docs prose bugfix (214fbc1)
  • docs prose bugfix (002aef9)
  • docs prose bugfix (be60eda)
  • docs prose bugfix (41ee0ba)
  • docs prose bugfix (cd66786)
  • docs prose bugfix (28d99a2)
  • docs prose bugfix (b94ac86)
  • docs generated regen (b96de0e)
  • docs prose bugfix (7ebf94c)
  • docs prose bugfix (93136ee)
  • docs prose bugfix (13d4b11)
  • docs symbols bugfix (7bbc628)
  • docs and tooling adoption (f3e96f6)
  • take the conflict markers out of the changelog, format test/ (0d62656)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (82d5884)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (c976fea)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (4b0073f)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (b33d8d0)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (ef4d95c)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (a554e00)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (6218af9)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (f816acc)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (c0fdb0c)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (26aa29c)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (775c0d9)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (198daea)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (f729fa7)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (49e6c0a)
  • log the SFTP version-negotiation defect (5d7aab9)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (033401c)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (f21cf7c)
  • prune the pre-August bug log and fix stale .cpp references (07984a8)
  • the all-zero X25519 shared secret was accepted by all three TLS 1.3 sites (bc865d9)
  • an Arduino install cannot reach core_setup, which is outside the library src root (f98d476)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (1d8bfe0)
  • tcp_evt.h already drew this boundary; protocore.h crosses it (0e54830)
  • 330 host envs, none of them C++, and C++ is the consumption path (d9cd11e)
  • protocore.h wraps includes, not declarations, in extern C (e376fca)
  • the -Og inlining break is measured and closed (a05cd27)
  • the classic-die RSA tables were invented too (5cc946d)
  • the RSA tables contradicted the silicon they document (835df5c)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (372326b)
  • the SWAR leaves cannot be reached through their Ns table at -Og (72ae4dd)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (44417cb)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (f79357d)
  • 81 citations went stale when core_setup, the harnesses and ci_tooling moved (7346901)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (f131e5d)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (ad2d73b)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (d4eb24a)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (c690b49)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (cc04af7)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (52b7504)
  • the plaintext arena is a sum now; its placement and per-slot multiplier are not (34d1e0e)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (6210b75)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (6bb4689)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (81998f4)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (d3a0207)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (e70bbb3)
  • log the forged-datagram teardown and the legacy_record_version rejection (3cea4c4)
  • log the DTLS fragment-conflict overwrite (7b26945)
  • log the DTLS cookie alert, legacy_cookie and RFC 7250 outcome 2 (cea07f6)
  • log the tls_conn borrow leak and the unbuildable portable arm (f60a13d)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (daf3083)
  • log the HKDF-Expand vector gap (e94e498)
  • log the TLS record, ClientHello and HKDF bound fixes (61a17d0)
  • log the HTTP/3 state-machine and QUIC header-bit fixes (7958ae2)
  • log the frame-rule, CONTINUATION and content-length fixes (48ac146)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (37bffbc)
  • log the coaps_server double-address test defect (beebc0d)
  • log the HTTP/2 header-validation gap and the trailers conflation (9fe1021)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (0b84890)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (1d1e182)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (ae9621c)
  • close the h2 idle-stream DATA and WINDOW_UPDATE findings (c82be77)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (12f1553)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (b10f486)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (a867e73)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (289b418)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (cf16e2d)
  • close the HPACK size-update clamp (63327f7)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (c934425)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (dfd250d)
  • close the HPACK prefix-integer overflow (4eaeb4e)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (d7819ac)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (e15b083)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (371e62a)
  • close the KEX-guess finding (6a5f9d2)
  • close the four ssh-transport-kex findings that are fixed (fc00a07)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (aadd3e7)
  • close the four ssh/telnet audit findings and the two unflagged SSH envs (b891c89)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (35514d2)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (4acd507)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (9edb342)
  • close #4 - telnet subnegotiation injection, host-verified (5920335)
  • close #3 (userauth service name) and #15 (telnet greeting), both host-verified (f89c6c3)
  • close F1 - the dropped SSH NEWKEYS pair, fixed and host-verified (a5f6c02)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (7b3ac1c)
  • close F3, the idle sweep reclaims the leaked channel in 5 s (90c3f4e)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (8b8fa56)
  • log the undeclared SSH plaintext draw and the env gap that hides it (78b04a8)
  • log the SSH send desync that reporting the failure does not cure (25ec38b)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (6adbed5)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (5c6649b)
  • the server's NEWKEYS is dropped by the one-packet-per-slot rule (6c0d0ad)
  • log native_coaps_server's CID failures as pre-existing, and the Unity exit-code artifact (71ebdce)
  • close F1/F2's overflow claim, the worker-stack floors are enforced (2d78464)
  • log the context-aliasing class and its three forms (c46e7d1)
  • log F11's remaining half, where the buffer and the clamp move together (d87fe15)
  • log F19, where crypto_opt.h prohibits what its own bench numbers reward (77a11be)
  • the context is a view, and a struct copy aliases it (ae20425)
  • log the null crypto_work class and the stale coaps AEAD test (1ab644b)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (e6d2e8c)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (9f2f075)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (6460cf6)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (4be7e49)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (cb7845d)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (bccef65)

Features

  • src2png renders a directory tree, paged by size (7dcfc7e)
  • outbound handshake fragmentation against a per-connection PMTU (bf613d6)
  • application CONNECTION_CLOSE (0x1d), and the RFC 9114 H3 state rules (c290112)
  • RFC 9113 sec 8.2/8.3 request header validation, with a suite (800c41d)
  • password change (RFC 4252 sec 8) runs off the tick, not the worker (428b7c8)

Refactor

  • the host key validator moves into the KEX processor (afdb3c5)
  • drop the unused sec 7.2 derive wrapper, fix four .cpp comments (b4312f2)
  • the window adjust goes back to the signaling owner (8cf64eb)
  • one owner for the exchange-hash algorithm question (f0b5036)
  • one RFC 4253 sec 8 exchange hash for both roles (2b46efc)
  • reconcile the SSH tree against the control-flow audit (63a3ea2)
  • the connection borrows its handshake bytes; the secure arena sums the term (881f0bd)
  • the connection borrows its stream and CRYPTO bytes; the dead rx buffer goes (da5c60d)
  • the connection borrows its stream bytes; the caps move to the config (9b7b41b)
  • the connection borrows its buffers; the arena sums the terms (57871e8)
  • the connection borrows its buffers; the arena sums the terms (2504974)
  • the connection borrows its buffers and asserts its term (8c71bb5)
  • flight_add fragments in the file's own idiom (b11b3a1)
  • the dispatcher owns the one control-frame borrow, sized once at compile time (b21dc18)
  • delete ssh_kexdh_build_reply, dead since build_kex_reply took over (1a2fd6d)
  • the KEX derivation inputs travel by reference, not twelve arguments (ff45f66)
  • single findroot for the repo root, replacing hand-rolled walks (4ed12a4)
  • frame becomes protoframe, reached through a FrameNs like mem and str (8498ec4)
  • the frame engine takes a tagged value array, not an ellipsis (6d4f7d7)
  • the six unprefixed exports take the pc_ prefix (ae289c7)
  • a hash owns nothing, it works out of its caller's bytes (408298d)
  • the SNTP client is the client on every target (0c8fa67)
  • the mem Ns replaces every mem* call, and the TLS 1.3 key schedule borrows from the secure pool (fa4589c)
  • the codec frames and flags, the worker moves the bytes (2db6b6b)
  • non-blocking DNS and TCP client open, and the UDP send rings are gone (0dbb22d)
  • one wire format, read from RFC 5905 rather than copied per role (8e34117)
  • two paths, selected by capability - PROTOCORE_HOT is gone (ada42af)

Testing

  • report merge matches summary rows without code spans; smbus rows green (eec34ee)
  • test cryptobench bugfix (d8c040d)
  • test citation bugfix (d1cb116)
  • a build that did not happen stops looking like one that found nothing wrong (883ed43)
  • the generated env table catches up with the tree it describes (c132524)
  • the mirror is file granular, and cross-TU logic gets its own tree (8e3895d)
  • cover the ssh_conn.c logic no RFC section governs (220757f)
  • rewrite test_ssh_conn to the sections ssh_conn.c implements (2fbda75)
  • end-to-end handshake through the byte pump, to the RFC 4253 order (446a66a)
  • rewrite test_ssh_server to the RFC, labelled by section (9b70ff3)
  • label test_ssh_transport by specification section (9bdc42a)
  • repair test_ssh_transport - it did not compile, and its fixtures skipped the protocol (f7bb381)
  • label test_ssh_packet by RFC 4253 section and pin the sequence-number invariant (b25ec2c)
  • per-file coverage for the SCP server, the last SSH file no env compiled (25d1e44)
  • per-file coverage for the SFTP v3 server subsystem (f014ab4)
  • drop the duplicated AES-GCM counter test from the auth suite (70cfa2a)
  • label test_ssh_auth by RFC 4252 section (38a340b)
  • pin the RFC 4252 sec 5 abandon rule for keyboard-interactive (c9538d7)
  • label test_ssh_channel by RFC 4254 section and cover sec 6.6 (a951021)
  • per-file RFC 4254 sec 7 coverage for ssh_forward.c (2fbc768)
  • drop the pc_ct_is_zero case (ca2bec9)
  • a low-order key share must be refused, not keyed off (d159378)
  • the DigestInfo was checked against the constant that built it (25a51a7)
  • the continuity check compared the one-shot to the path it routes through (a3ca678)
  • the block loop and the rate-1 pad merge were unreached at every rate (eaf91bf)
  • use the file's own hex helper (94ffc38)
  • SHA-256 padding boundaries and the RFC 7748 masking MUST were unreached (4a95d36)
  • the aead runner sealed every vector, including the rejection ones (51e1d43)
  • regenerate kat_data.inc, which the corpus changes had not reached (6092c2e)
  • the ed25519 runner asserted vector metadata; RFC 8032 TEST 1024 was absent (f60ab02)
  • pc_ct_eq had no test; every tag and MAC check goes through it (e465c91)
  • the blob test pinned the host double's truncation, not the contract (ffe68b0)
  • host_nvs reaches str now, so its two envs compile protostr (3c5dd8e)
  • the cases share the connection slot (7ec6716)
  • the cases share two connection slots, the way the CoAPs server re-uses one (3d9e027)
  • the suite shares its two connection slots (ef97ae8)
  • the suite shares its two transports; the engine takes bytes where a stream is claimed (a6ed68f)
  • the two-connection cases get a second slot (01d857a)
  • the shared object rewrite caught a pointer deref in the finder (be58831)
  • the cases share one connection object, the way the server re-uses a slot (6f9a72c)
  • the cases share one connection object, the way a server re-uses a slot (140c9ed)
  • decode legal S=0 and L=0 records (e13b02b)
  • a path small enough that this flight actually splits (5e8cd7d)
  • the flight fragments to the connection's PMTU (75c756f)
  • zero the server config before filling it (55b7b3f)
  • drive the second peer to its own HRR before spending the cookie (a444a71)
  • a cookie minted for one peer is refused at another (7bc4769)
  • a record for an unkeyed epoch is discarded, not fatal (de7416f)
  • drop the test for a version branch that no longer exists (4a440db)
  • the PTO ladder is spelled out, not recomputed (c0c3efc)
  • the replay-window edge and the RFC 8410 published SPKI (19089e9)
  • a conflicting overlapping fragment is rejected (a144c0a)
  • a non-empty DTLS legacy_cookie aborts the parse (89310eb)
  • anchor the handshake secrets on the RFC 8448 sec 5 trace (a72d6b4)
  • one slot, re-initialised per case (caf6c9e)
  • the connection is a pool slot, zeroed before first use (c16259a)
  • drive the server half with a hand-built ClientHello (909ee46)
  • PC_TLS_SOFTWARE derives from PC_ENABLE_TLS on host (8a24254)
  • the per-file suite the driver never had (d51f5e2)
  • the ServerHello echoes a 32-byte legacy_session_id (7d25ff0)
  • anchor the dtls13 labels on the RFC structure (7f5a177)
  • the multi-block expand mirror names its external anchor (392fa3b)
  • pin HKDF-Expand against the RFC 5869 Appendix A vectors (c9211ed)
  • pin the HP mask widths and all four reserved settings ids (f93df35)
  • quic_frame.h for the transport error constants (953174a)
  • model a post-handshake connection, and pin the pre-1-RTT fallback (9b091c6)
  • the sec 4.1 / 6.2.1 / 7.2.4 rules the suite used to assert against (244e7e5)
  • pin the Fixed Bit rule and both sides of the 2^60 max_streams bound (1861b3b)
  • enumerate the Appendix A static table and the Appendix B Huffman code (d3fe3ef)
  • the idle-stream, frame-size and CONTINUATION-flood rules (8db9f95)
  • pin the SETTINGS accept-side bounds and an RFC-supplied request block (f39219b)
  • pin the RFC 7541 Appendix C vectors byte for byte (810a31d)
  • drop the h2_server wire probe now the seam is stated (df6d2c5)
  • native_h2server states PC_HAS_VENDOR_TLS so the suite owns the TLS seam (963db3b)
  • probe the h2_server wire to find why no frame reaches the callbacks (7a2c404)
  • pin the zero and overflow WINDOW_UPDATE rejections (4bdf81b)
  • DATA on an idle stream is refused, and after END_STREAM resets that stream (ce4041f)
  • native_h2conn links the arena under the plaintext allocator (ca6d01d)
  • native_h2conn compiles the plaintext arena it now borrows from (6147de1)
  • the interop matrix reads the negotiated MAC back out of the trace (48f200f)
  • pin client-preference for kex, host key and MAC, and make the cyclone repro fail-able (b083e08)
  • each RFC 4253 sec 7.2 label is pinned to its own direction and field (5875798)
  • pin the group-14 prime and generator against RFC 3526 sec 3 (170db64)
  • the GCM derive fixture takes the mpint sign-pad path its comment claimed (6a7334b)
  • two GCM packets on one key install prove the RFC 5647 counter advances (315cad3)
  • a losing KEX guess is dropped and the real KEXDH_INIT still lands (1f3ae20)
  • the re-key fixture states that the first KEX already sent EXT_INFO (87dc1bc)
  • the comp suite builds the KDF inputs struct too (e6fc118)
  • build the KDF inputs struct at the call sites (0a09951)
  • cover the three RFC 4252/4254 MUSTs the audit found uncovered (2a1190d)
  • the hardening ECDSA case models a completed KEX, so it sets have_session_id (d2751a3)
  • update the suites that pinned the four fixed behaviours (fbf033e)
  • migrate performance_benching to ESP-IDF CMake layout (cf89b00)
  • statsd host bench scaffold + shared bench_project/host_bench (945dafb)
  • the frame callers pass a tagged value array (a1e8e7b)
  • three envs link the secure pool now that ed25519 wipes (a8ed1e3)
  • audit_log links arena.c and smb links chacha20.c (468b08b)
  • the crypto entry points take their working bytes from the caller (f7bc5d0)
  • the envs that use the mem accessor link protomem.c (0459341)
  • the tail merges, so nothing past the span may move (fac7b0c)

[1.0.7] - 2026-08-08

Show Changelog for version 1.0.7 - 2026-08-08

CI / Build

Changes

  • Bump version: 1.0.6 → 1.0.7 (dc77779)
  • Merge Dependabot #25: build(deps): bump github/codeql-action from 4.37.4 to 4.37.6 (fcc991f)
  • Merge branch 'c11-target' into main (1810f10)
  • Merge pull request #24 from dstroy0/c11-target (4d9b245)

Documentation

  • update ESP32 build footprints [skip ci] (2391111)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (8ad23ae)

[1.0.6] - 2026-08-08

Show Changelog for version 1.0.6 - 2026-08-08

Changes

  • Bump version: 1.0.5 → 1.0.6 (000a002)

Features

  • the SSH host key comes from NVS, and TLS gets a software record layer (a476eb7)

Refactor

  • every backend pair selects on its capability, not on the build (22d4e53)
  • the RSA backends select on the capability, not on the build (5184397)

[1.0.5] - 2026-08-08

Show Changelog for version 1.0.5 - 2026-08-08

Bug Fixes

  • every buffer in these modules is borrowed, and ban 19 has no waiver (ce65d0a)

Changes

  • Bump version: 1.0.4 → 1.0.5 (6d9549a)

Features

  • a portable SNTP client, so the wall clock exists off the SDK's (d8ef1ae)

[1.0.4] - 2026-08-07

Show Changelog for version 1.0.4 - 2026-08-07

Bug Fixes

  • three shell scripts resolved the repo root one directory short (cbb581f)

Changes

  • Bump version: 1.0.3 → 1.0.4 (3ede876)

Features

  • a portable responder, so mDNS exists on a part with no vendor component (5650016)
  • one DNS name codec, and dns_server reads names through it (2fcff15)

Refactor

  • one path, and the UDP bind is covered on the wire (29518f7)

[1.0.3] - 2026-08-07

Show Changelog for version 1.0.3 - 2026-08-07

Bug Fixes

  • the QUIC server closes its port, and its tests drive the real listener (f885604)
  • sequence the finish before the strlen it is compared against (1eb34c4)
  • build_src_filter reaches core_setup with a step up (9101e43)
  • TcpListener bound add to stop's slot - positional init against a reordered struct (c16e6d8)
  • put the repo root on the include path so core_setup/ resolves from src/ (04bbc72)
  • repoint every board_drivers/ include at core_setup/, which the move left dead (8ee96f8)
  • the crypto vector generators resolved test/ relative to their own dir, which the move broke (f64434d)
  • drop baseline entries for core_setup, which is not source (12913d8)
  • two generators could not run, and three wrote the tree when asked to check it (1b2dadf)
  • the paths the move left behind - tools/crypto, core_setup, and the report the two runners disagreed on (baae144)
  • rx_feed include landed inside a feature guard in two suites (552dfe0)
  • unfuck the runners' hook and quic_tls's two dead relative includes (6214032)
  • the runners were reading Unity output for a tree that no longer exists (3f142fe)
  • a checker that scans nothing was exiting 0 (31c2342)
  • the code behind arms nothing compiles, which a rename rotted (ca2cf36)
  • the third wake site, which no build in the matrix compiles (4278260)
  • the target build of the tcp transport, which reached through the session join for a table it already had (64934ac)
  • each ssh table lands after its declaration region, and children before parents (4b57ef0)
  • rng's envs link protomem, and test_ssh_pqc finds the KAT the restructure moved (be24170)
  • dtls_conn forward-declares the one function it calls above its definition (459363f)
  • the OAuth2 form-body builder passed the address of its own parameter (771b103)
  • base64.h takes protocore_config.h, the entry point that sets the widths (8635bf3)
  • the workers suite names Workers, not the layer above it (6101f95)
  • a module's own policy list and suite name the module, not the layer root (c66cb41)
  • the preempt-queue header order, and two TUs naming Session without it (e485fb0)
  • Physical carries the interface registry it was silently handing the radio (889c247)
  • forward reset no longer clears a table it does not own (dc441ec)
  • restore the host busy_hold and busy_release my ps_get removal ate (1202db5)
  • physical is a layer, not a vendor seam, and carries eth and ip6 unconditionally (4037f0a)
  • physical.h names RadioNs instead of including it, so the dependency runs one way (c691be3)
  • forward-declare the two close helpers and take the join header in the listener (4f6ea1b)
  • forward-declare the two teardowns and take the join header for Tcp (8372f26)
  • forward.h drops the flat declarations its definitions no longer match (e01684c)
  • the generators and the CI drift gate follow the suites into the new tree (02eff20)
  • a stack base is a section, not an env, so nothing has to ignore tests (1fc7f09)
  • send_text measures its body with str.len, not a runops scan (69f7d6d)
  • response.c takes the runops include send_text needs (ae31c0d)
  • the guards the dispatch-chain move left behind in protocore.c (e1b59c8)
  • the env that builds protocore.c builds the mount registry it now resets (4a910ea)
  • the mount-point table empties with the routes it is indexed from (537e6bf)
  • the credential table empties with the routes it is indexed from (b728733)
  • the two long-lived tables take the arena end no mark walks, and declare their span (c601ae9)
  • the route table borrowed from an init nothing called, so every registration failed (943d1ba)
  • the presentation envs build protostr, which the layer's string ops come through (3c79ba6)
  • presentation.c includes runops.h for the header scan, and the route envs build protomem.c (d84f016)
  • every env that builds protocore.c builds the network table it reaches through (9ffa670)
  • native_stack_http never built network.c, whose network table protocore.c reaches through (14e3ae3)
  • auth.c closed its feature guard before check() and the Auth table, which need it (1122998)
  • native_client never built ip.c, whose Ip table the listener's allowlist matches through (bf4d521)
  • the worker-queue members gate with PC_WORKER_COUNT, and native_client builds the join (f348ce3)
  • an env that builds the Tcp join builds all three halves it names (9d4ecfa)
  • the moved tcp modules reach their siblings, and the observability trio gates with its flag (a022535)
  • the moved tcp headers reach tcp_evt.h one directory up (e983163)
  • rebinding a bound udp port reuses its slot, and the four suites assert the ring contract (29e4220)
  • pc_ip tags its family in .family, not .type (cf58a0c)
  • the udp envs never built ip.c, whose Ip table the halves parse and format through (9422e02)
  • native_stack_http never built protomem.c, so its 25 children failed to link (73f0496)
  • the two include breaks a full-matrix run turned up, and the stack bases it ran by mistake (0278e26)
  • the base flags that defeated PROTOCORE_HOT_FORCE, so the target path gets a test env (8a7a743)
  • the dns server takes the raw mover's header, not the span module's (7ec4a3a)

CI / Build

  • one example-discovery action instead of the same 29 lines in two workflows (f19b5b5)
  • build the platform the project ships on, and pull before committing to a tree CI writes (3b0d362)
  • drop the scratch bucket map that rode along with the test move (300d62d)
  • the byte ops and the libc string/stdio includes become enforced bans (beadbf0)
  • the exec bit on the 16 shell scripts that carry a shebang and never had one (aee9c25)

Changes

  • Bump version: 1.0.2 → 1.0.3 (7e1854b)
  • clang-format the tree, and pin the one macro run it cannot converge on (c2d5301)
  • clang-format the two rig sketches, and the hook's own package invocation (13e8bda)
  • back out the ssh table conversion until it carries per-member feature guards (8b329ff)
  • Revert "refactor: the listener registry moves to the listener that owns the pool" (a4e4145)

Documentation

  • name the crypto arms HW path and SW path, and stop calling the fallback a test path (12d88ab)
  • stop sending readers to hardware for what the host now covers (447abcf)
  • log the fieldbus audit findings incl. a verified out-of-bounds axis read (81bb6ff)
  • log the remaining audit findings, all ten scopes now reported (d214d2d)
  • log the security, storage and transport audit findings (a851419)
  • log the QUIC and HTTP/3 conformance findings (fa1e87b)
  • log the audit findings so far, and move the forwarding plane to L3 (22b3490)
  • log the HTTP/2 spec violations and the untested request bridge (798767f)
  • the runner comment matches how a base is emitted (ed3fec2)
  • drop the BUGS.md entry for a defect I introduced and logged (8639666)
  • SRCBANNED is the ban list (b260cac)
  • stdio is banned, and every header path in SRCBANNED now resolves (2b1715f)
  • cut the three law docs by 55 percent, and correct the type-name row (9cfc4f8)
  • log the arena sizing and id-table reset defects (c881d70)

Features

  • float_bits.h, and membuild reads IEEE-754 fields through it (8d5acf4)
  • the ring answers which slot, and what a held one keeps out (6498e32)

Refactor

  • one path through the SSH client, the H3 RNG, and the packet framer (0f343c1)
  • one path, and the DMA lane runs off the DMA driver (aaa2547)
  • one path for the worker tasks, and designate the table (6858153)
  • one path, the redundant host arm is gone (9349a6e)
  • size the outbound path from the secure pool (dae9b42)
  • designate the namespace tables, and cover net egress (fda58d0)
  • designate UdpListener's initializer (ac33d37)
  • one slot allocator - tcp's free_mask and udp's linear scan are pc_slot* (9069585)
  • one CCOUNT measurement, and the rig build scripts find the repo again (c6ae4a2)
  • one repo_root, and gen_theme_blobs imports gen_themes instead of exec'ing it (8e0b9b1)
  • board_drivers out of src/, the benching trees into test/, ci_tooling under tools/ (3e59ead)
  • one rx-feed helper instead of 24 private copies of the same loop (8efdfdd)
  • one package, so the tools import each other instead of guessing (12af671)
  • name the dns files after their subject, which their guards already did (b141a61)
  • one dma path, and the host drives the one the target takes (8c0eecb)
  • each ssh layer names its own message numbers, and a ring index wraps with a mask (0425962)
  • ssh reaches its functions through tables cut along RFC 4251's layering (9951a49)
  • crypto owns the generator, and a caller only ever asks for bytes (b4d5399)
  • telnet and the three dtls modules reach their functions through tables (3dddfe1)
  • the codec sub-tree reaches its functions through per-module tables (a07e3b8)
  • base64 reaches its four functions through Base64, and gets its C linkage back (633285f)
  • layer 5 gets its tables and its root (3fbefd2)
  • one enum for what an interface is and which one to match (f808fd1)
  • the interface registry moves to L1, which is what puts bytes on the wire (3516c75)
  • one enum for modem sleep (b97ec7e)
  • every caller above L1 reaches the physical interfaces through the handle (369b676)
  • layer 1 gets the namespace struct a device interface should have (c57ea07)
  • tcp_conn exports one symbol; alloc_free and sndbuf join the table (790408c)
  • tcp_listener exports one symbol; add and add_dynamic join the table (a43155e)
  • the forwarding plane exports one symbol and the network layer carries it (af66f56)
  • tcp_client drops the flat surface no caller was using (d9337b9)
  • the per-connection and per-listener DSCP marks move to the objects that own them (276e5c5)
  • session stops re-declaring the presentation functions it does not call (6df2655)
  • the HTTP route table leaves the network layer and takes an HTTP name (4bfcef0)
  • the HTTP/3 request bridge gets the TU its h2 twin has (619e880)
  • the HTTP poll pump moves to the HTTP root (be71cfe)
  • the response senders move to server/response.c (32d062d)
  • the QUIC running flag goes back to the QUIC server (484ed74)
  • the listener registry moves to the listener that owns the pool (e85c964)
  • auth and the no-match fallback move to the HTTP root (cee6e7e)
  • the request dispatch chain moves to the HTTP root (4068015)
  • HttpMethod is the presentation layer's, not the application layer's (c1a761d)
  • the HTTP root takes the version-agnostic surface out of the application layer (c10e60e)
  • keep-alive is an HTTP/1.1 header rule, so it moves down to presentation beside its tally (52a8735)
  • tcp splits into conn / listener / client under a Tcp join, and 865 call sites move (3efeee8)
  • the udp sends take an address, so a tag is serviced once by the service that owns it (2719548)
  • udp.h becomes the join, and every caller moves onto Udp.listener / Udp.client (dabd807)
  • diffserv becomes a table (67f01c8)
  • ip is a shared primitive, not a network-layer module (75df9fd)
  • ip becomes a table, reached through network (0c16338)
  • the dns server moves off implicit libc onto mem and str (0c3a467)
  • dns joins under network; Route carries ids, not other modules' state (4e123fd)

Testing

  • unwind a task entry, and honor the queue depth create asked for (d23634c)
  • the host platform can run a started task (3563ce2)
  • close two gaps in the DMA host mock (3babdc4)
  • per-file test groups under the owning layer (a766764)
  • a suite for the ring, and the shift it could not survive (39caf49)
  • give the multi-worker hot arm a witness (24097ea)
  • the host queue holds what is posted to it (f375c11)
  • the L1 interface registry gets its own suite, and the dead forward sizing goes (14611df)
  • native_forward links L1, the layer it now sends through (4708320)
  • native_net_egress links the radio the layer handle carries (b1bb3e8)
  • native_radio_power links the L1 core whose phy functions the radio table names (850301f)
  • native_tcp_hot links the arena that carries worker identity (6c50d36)
  • native_tcp_hot links the Tcp join and the worker its target arm calls (6d0a4e5)
  • native_tcp_hot drives the TCP target path through the mock harness (4021535)
  • the runner finds pio in the venv both Linux envs install it to (266e436)
  • a protocol's crypto suite sits with the protocol, not under crypto (bab7762)
  • the suite tree sorts by what a test stands up, then by the module it covers (4d34ef3)
  • a base env says it runs no suite instead of the runner blocklisting it (4b47961)
  • native_h3_server builds the bridge TU and calls it by its own name (e1b2ac0)
  • the v3 trap test asserts the refusal the service actually makes (5a8a9ba)
  • the suites hand the sends an address, and statsd is given one it can parse (7aff713)
  • the client-side suites read the client capture, after the poll that writes it (49b318e)

[1.0.2] - 2026-08-05

Show Changelog for version 1.0.2 - 2026-08-05

Bug Fixes

  • the four auth examples now enable PC_ENABLE_AUTH (2eaec7a)
  • five examples still calling the C++ default-argument forms, and WebTerminal's missing dependency flag (98e6838)
  • the coverage union aborted on a function with two build-time definitions (1dd0cc0)
  • declare pc_ntp_http_date where it is defined, not behind PC_ENABLE_NTP (ad646a1)
  • give the whole public API C linkage at the umbrella, not header by header (4605ea5)
  • extern C guards on the SHA headers (33fd865)
  • extern C guards on the five MAC and stream-cipher headers (27bc4b0)
  • extern C guard on aes128gcm.h, and drop the std includes types.h already owns (75203df)
  • three headers declared C functions with no extern C guard (36f572a)
  • esp_aes128gcm named C++ alignof in a C11 file (6a82448)
  • esp_aes128gcm used C++ alignof in a C11 file (81e3039)
  • the crypto bench's SecureScope use (fa68f69)
  • the crypto bench passes the DTLS record keys by pointer (2af2fb2)
  • the crypto bench's hkdf_expand_label arity (7dae4a8)
  • the crypto bench's scoped-enum uses, left over from the C11 conversion (6237858)
  • the crypto bench's stale mmgr include path (8bddf97)
  • bound the two RSA accelerator status polls (99ba4e2)
  • read the AES-GCM block through the raw accessors instead of a punned pointer (5b047bd)
  • nine dropped status returns in the SFTP and file-serving paths (24a6f97)
  • four signed-overflow parsers, an unbounded UART drain, and oidc's unwritten out-params (b8c11bf)
  • link the NVS backend into the codeql coverage env (6c5a2f2)
  • two CI gates, the clang-format blind spot, and config_io's missing backend (f057523)
  • run the peripheral drivers' real body wherever a bus seam exists (52418a6)
  • route every timing call through the library clock (09e8d2b)
  • include the header declaring pc_worker_set_self in worker.c (c0a548e)
  • read instruction bytes, and classify what each blob difference changes (652052d)
  • give the ESP-NOW radio callbacks C internal linkage (ff4649e)
  • define the SSH client identification frame spec (1526bc4)
  • name every omitted parameter, and move the I2C drivers onto the bus owner (f3cf57d)
  • the service headers give their declarations C linkage (375a461)
  • examples pointed at pre-migration header paths (d704047)
  • the conversion left .cpp paths in the asset generator and two docs (fcf87ac)

CI / Build

  • rename the format workflow, since clang-format is one step of several (098c792)
  • gate Python formatting, and keep vendored components out of the C style sweep (225a20c)
  • unblock the two formatting gates (8660430)
  • update CHANGELOG.md [skip ci] (8a6e286)
  • update test report + coverage [skip ci] (bbb0215)
  • update CHANGELOG.md [skip ci] (c247de8)
  • move to pioarduino so the toolchain is current (3e1561d)
  • unpin the espressif32 platform so the toolchain tracks latest (349cbf9)
  • the naming law stops demanding a C++ construct, and reads the enum's real name (0eee3a2)

Changes

  • Bump version: 1.0.1 → 1.0.2 (cf46e12)
  • Merge remote-tracking branch 'origin/main' into c11-target (a2a5fff)
  • Merge pull request #23 from dstroy0/c11-target (3d74266)
  • survey a JTAG DRAM dump for dispatch tables (744ca7f)

Documentation

  • the radio keep-awake note names Radio.busy_hold (afe2fcd)
  • regenerate what the two new feature flags feed, and name the stack idemIP (c9587e6)
  • regenerate the README feature tables for SMBus and PMBus (5905026)
  • the docs badge names ProtoCore, not the host it sits on (1ec8834)
  • state the namespace struct as the module's public surface (20bcec8)
  • state the C11 object as the endorsed shape in ban 22, and add the bench that prices it (7fa7048)
  • update ESP32 build footprints [skip ci] (d3fde32)
  • record the SMBus and PMBus flags, and the third .cpp exemption (3a46de4)
  • log three bugs the bus-owner work surfaced (a106b19)
  • inventory the radio functions that must stay in IRAM (bdfef8e)
  • diff the radio blobs' code between installs, function by function (ebc29b6)
  • compare the radio blob symbols between the Arduino and IDF installs (8b92f56)
  • extend radio blob parity to every ESP die IDF ships (3f565c0)
  • cross-reference the radio blobs across every ESP variant (2969c14)
  • decode the analog bus primitive out of libphy's own iram1 (87a5ed2)
  • capture the analog RF programming sequences from the radio blobs (01f13e6)
  • map the radio blobs' registers by function, and roadmap our own stack (06e1168)

Features

  • protomem, the byte-span module (a24ded6)
  • gate the comment law, and sweep the CRC history clause (f64a89f)
  • per-transfer log with timestamps in the host bus capture (4b4e0a3)
  • record the wire on host builds, so driver output is testable end to end (af9fe85)
  • capture the live PHY dispatch table off an ESP32-S3 (affc928)
  • the full I2C and SPI master protocol behind the bus owners (411026f)
  • a microsecond delay, measured on the raw counter (0ef3ae6)
  • a microsecond delay beside the millisecond one (f33c51d)
  • a shared SPI bus owner beside the I2C one (f3f7e59)

Refactor

  • mmgr owns the byte layer; auth owns its credentials (a469bad)
  • the route table lives in the secure pool (3ef5c5a)
  • route exports one symbol, carried as network.route (b602404)
  • network exports one symbol, Network (3c36382)
  • roaming moves its bytes through mem (8179f74)
  • roaming exports one symbol, Roam (2a41dc3)
  • datalink exports one symbol, Datalink (ad3f5fd)
  • radio_power exports one symbol, Radio (7ee0de9)
  • fold five copies of the hex digit table onto PC_HEX_LOWER (9c0726a)
  • move the last three drivers onto the bus owners (6e5116a)
  • split the xtensa-only radio tools into their own subdirectory (0dd66cd)
  • move the radio reverse-engineering tooling to reverse_engineering/esp32_mac (2d7b324)
  • the INA219 driver reaches the bus through the i2c owner (4cf6985)
  • the DMA submit moves its span through proto_raw_read (4c2c420)

Testing

  • pointer nesting instead of by value (3a57057)
  • does a layer object embed a module's struct by value across a TU (72e1e29)
  • roaming borrows its BTM hint instead of declaring it (79a31df)
  • native_roaming builds protomem (7a8881a)
  • a consumer TU for the converted radio module (a8eb1be)
  • keep the canary's build to the library and its own main (ed37c2f)
  • measure whether the namespace-struct fold survives a TU boundary (3cfd435)
  • a C ESP-IDF canary for the conversion (339f235)
  • price the namespace struct in C on the target toolchain (4628a54)
  • keep the bench leaves out of line so the strip is what gets measured (1525354)
  • assert the INA219 wire output instead of a host refusal (0b3fc66)
  • assert the drivers' wire output instead of a host refusal (dfa44ac)
  • assert the SMBus and PMBus wire output instead of a host refusal (8bc0806)
  • assert the INA219 register write per transaction, not across the stream (9d3db6c)

[1.0.1] - 2026-08-04

Show Changelog for version 1.0.1 - 2026-08-04

Bug Fixes

  • drop an unreachable release left behind the return in ssh_conn (c48abc0)
  • the RSA HAL reaches the entry point for the widths it is written in (3824d55)
  • protocore.h gives its declarations C linkage, so a C++ sketch can link them (0a5950c)
  • the last two bodies that inherited tcp.h now name it (14514c8)
  • the transport and session bodies include tcp.h themselves (289f442)
  • listener.h names the address type it uses instead of inheriting it (2266af4)
  • examples spell the cfg argument the C API no longer defaults, and Mnt carries its root (f1c1abf)
  • tls.h stubs had unnamed parameters and empty parameter lists (b62eb53)
  • crypto headers reach the entry point, not stdint and a board header (fe142bf)
  • crypto headers tested PROTOCORE_HOT before anything defined it (1b229f7)
  • physical_esp is C++ (Arduino WiFi/ETH), so it is .cpp again (6bcb1fe)
  • an OIDC arena leak that rejected every token, and two more lost scope guards (713d3a7)
  • the last of the test/ residue, and three envs that never linked their own deps (fc0a924)
  • brace assignment, lambdas, and six more defaulted arguments in test/ (463ddae)
  • restore the ESP mount adapter's extension, and three gaps behind it (8472e1b)
  • the scoped-enum residue in test/, resolved by the compiler not by guessing (a2d479a)
  • the C++ the native suites could not see, and the WAL's missing barrier (f38924b)

CI / Build

Changes

Features

  • an NVS seam in board_drivers; the core stops naming Preferences, String and FreeRTOS (136c8df)

Refactor

  • drop the rationale that only justified a coverage exclusion (a05bf55)
  • remove every gcovr exclusion marker from src/ (bfd0d5f)
  • the event record leaves tcp.h, so the sketches stop parsing the slots (a798027)
  • move stdatomic.h from types.h to ring.h (26ea42b)

Testing

  • the config-store env builds the host NVS backend it now sits on (d553ce1)

[1.0.0] - 2026-08-04

Show Changelog for version 1.0.0 - 2026-08-04

Bug Fixes

  • the GPIO direction enum a board profile's macro was rewriting (6e9d561)
  • the RAII scope guards and member initializers left in .c files (6652612)
  • the C++ residue the .c rename hid, and the API drift under it (49543ac)
  • -std=c11 hid strnlen from every native build (262ab91)
  • dma.c's byte_ring becomes free functions over a pointer (1306696)
  • static inline in the C headers (52c571e)
  • hand the listen pcb back to the stack on listener_stop (b70bb7e)
  • restore the SNMP_TAG_ prefix, WAL pointer params, and the BerEnc forward typedef (88efecc)
  • refuse to remove a mount root, at the layer that knows it is one (a1d50e6)
  • search the Allow buffer to its NUL, not to its capacity (3a93744)
  • do not drive the fixture volume to the block littlefs cannot recover from (ca03735)
  • close open files before unmounting the fixture volume (52c5a07)
  • a reserved handle must never reach littlefs (3b64a8a)
  • spell swar's width assert so C++ can parse it, and typedef MockHdr (e8e3296)
  • stop 404-ing a static mount that named no backend (e407e63)
  • stop two envs overriding the src filter they inherit (94db75d)
  • reset the middleware chain with the rest of the server (48eccdd)
  • give the host driver's state one instance instead of one per TU (43f9c41)
  • drop the leftovers of the query redesign (d5698d2)
  • restore the v0.0.1 query and path-parameter behavior (6050ce4)
  • route the session drain through the platform queue seam (a8fa333)
  • repoint the checker baselines the C conversion orphaned (1476252)
  • name the incomplete struct tag in the SSH GCM wipe casts (770fa67)
  • repoint the Sonar suppressions the C conversion orphaned (20d73cb)
  • link the clock TU into every native env that reads it (183e693)
  • convert four more owned-context structs out of C++ (586cfd4)
  • strip 772 verified scope qualifiers from test/ and examples/ (eb59261)
  • finish the C to C++ residue in the CoAP server (bb25d76)
  • drop the in-class initializers from OpcuaCtx and hoist proto_handler.h (e398dfb)
  • replace the pc_atomic template and in-class initializers in two servers (fd1a387)
  • spell the opaque H3Conn tag and hoist a lambda out of test_quic_server (794cd33)
  • strip 516 verified C++ scope qualifiers from code (fb95b57)
  • spell the opaque QuicConn tag and drop a missed reinterpret_cast (03a3609)
  • strip the QuicTp scope qualifier in quic_tp (7428210)
  • replace the SecureBorrow RAII in quic_crypto with the C pool API (960430e)
  • spell alignof and the opaque AEAD key the C way in the portable backend (506a3d5)
  • finish the C++ to C conversion in the QUIC/TLS handshake path (f657d7e)
  • restore constant names mangled by the C++ to C conversion (2a639ea)
  • emit binary_asset_blobs as C and drop the resurrected .cpp (3da92d9)
  • read .c sources in the checkers the C conversion left behind (8eb81fa)
  • give ip.h C linkage so C++ callers link against it (c1ad16a)
  • restore the enum widths the C conversion dropped (6bc50b1)
  • make the checkers agree with a C11 tree (0c2bd52)

CI / Build

Changes

  • Revert "test: copying onto the root collection is refused, not created" (7cda282)
  • Revert "test: remount after filling, so the fixture starts from the medium" (e19b85f)
  • Revert "fix: do not drive the fixture volume to the block littlefs cannot recover from" (a348f72)
  • Merge Dependabot #21: build(deps): bump github/codeql-action from 4 to 4.37.4 (e587e2a)
  • clang-format the two benches the layer move left unformatted (2db2997)

Documentation

  • log the HTTP/2 refusal that RSTs stream 0 (58c2913)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (3d8b3c4)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (aaffcd0)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (b193396)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (a3760f2)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (0331ff5)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (823cc89)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (506e29c)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (18ca7d1)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (33e79ed)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (9a18380)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (97e73b6)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (aa3d2f2)
  • correct what the SSH-mount entry claims is already tested (95e96ce)
  • roadmap the SSH mount and the multipoint mnt it needs (39a1a99)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (cc3e721)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (d1cea96)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (e8a0034)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (0af15b8)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (4fc79d3)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (7ca75f0)
  • repoint the BUGS.md citation of the presentation layer to its .c path (c3cdaaa)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (ac0ff85)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (5656c29)
  • add pass-the-reference-down to the end of the roadmap (fe124e7)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (f50be82)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (ec1fbd1)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (f48be9f)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (c25ce38)
  • document the mmgr memory model (a2b6c58)
  • strip narrative from the i2c and proto_builtins comments (8e303b5)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (29e3da9)
  • describe diag as the runtime frame build it is (2e4176f)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (5127742)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (7f88800)

Features

  • add a mock vendor so the hot path is testable on a host (a53832c)

Refactor

  • finish the C11 conversion - the last seven .cpp files (eb378e6)
  • the member initializers the renamed files still carried (b87038c)
  • convert the last ten src/ .cpp files except ssh_transport (667989a)
  • drop the enum scope qualifiers and the last peripheral member initializers (499751f)
  • fifteen more src/ .cpp files that were already C become .c (59d01c2)
  • the file-local helpers take their owning context by pointer (5e179c0)
  • replace the C++ in-class member initializers (59b92b8)
  • write the C++ temporaries as compound literals (1cdc9f6)
  • drop the DTLS ciphertext default arguments, state them at every call (e5cc867)
  • spell the opaque handles as struct at every use (f509479)
  • the eight src/ .cpp files that were already C become .c (ed97f45)
  • convert SecureScope, the DTLS key references, and the opaque GCM handles (4e1954c)
  • replace the SecureBorrow RAII holder with the mark/span/release shape (8d94018)
  • convert the HTTP client to C and unblock the edge-cache suites (01858c0)
  • pass the config-store owner by pointer (640069f)
  • convert the web terminal to C (4d6f64f)
  • convert the chunked-send reference variables to pointers (a5d1823)
  • convert the SSE module to C (a3f0813)
  • convert the WebSocket module to C (2de589f)
  • convert the multipart codec to C (4227997)
  • convert the HTTP parser to C (ef8dea4)
  • convert the presentation layer entry to C (b01e8ac)
  • move stdatomic into types.h (d7d2093)
  • convert the session layer to C (8eb49f4)
  • rename pentesting/ to penetration_testing/ and analyze the repo's Python (9cdad1a)
  • drop the C++ default arguments from the SSH KDF entry points (ef9541c)
  • convert the remaining using-aliases to C typedefs (13ebde2)
  • move the upload service onto the mnt storage seam (9a2bbaa)
  • move mDNS, NTP, NTS and PTP into the L7 application layer (bcf041b)
  • restore internal linkage, bridge I2C, convert six files to C11 (ef26ac7)
  • split WebDAV into the L7 wire codec and the server handler (593e45a)
  • move HTTP authentication into the L7 application layer (a602846)
  • move the TLS 1.3 key schedule into network_drivers/tls (ba1f6f2)
  • mirror the layer each module moved to (f575b3d)
  • move exc_decoder and power_mgmt into server/ (d14ca1e)
  • move each module under the layer that owns it (bddf3f4)

Testing

  • copy the trace samples at their real width (bc9bec9)
  • trace_capture reads its window through a pointer (33cc8a6)
  • gateway and trace_capture record into fixed tables (1c0133e)
  • read the dma record payload directly (30c79d2)
  • dma records completions into a fixed table (b012d3c)
  • the last ikev2 element assignment as a compound literal (60e8a41)
  • ikev2's sized vectors become fixed arrays (28e7aed)
  • the KAT suite uses the keyed GCM handle and the explicit tag output (53c3d6d)
  • typedef the KAT structs, name ntlm's nibble lambda, restore SMB2_SIGN_ALGO_AES_CMAC (a06f4da)
  • name the hex-nibble lambdas, five more suites to C (45046ce)
  • call proto_tcp_conn_timeout_ms instead of comparing its address (569d2c7)
  • the transport helpers the qualifier strip left bare (6a3dbe6)
  • the host seam grows the one-shot failure hooks the transport suite drives (9ebb0c2)
  • give the host seam the one-shot close failure, pass the worker id to the sweep (9d9d8be)
  • transport reads the host seam's control-block and error types (28caacf)
  • restore the std:: qualifiers the sweep wrongly stripped, convert statsd + spa_router (8c43357)
  • drop the STL includes the C suites no longer need (710f311)
  • four more suites to C (coap, transport, spa_router, statsd) (e681d79)
  • enable keep-alive in native_range (1267ccf)
  • mount the store test_range serves from (edfdef5)
  • strip the verified scope qualifiers, typedef RamDisk (aef4dbf)
  • finish the six suites (ec21e1a)
  • count aborts on the host seam (8b9e96e)
  • serve test_range from the real filesystem instead of the Arduino FS mock (b9856b2)
  • fixed accumulators in place of the vectors, six more suites to C (fbbd051)
  • sweep the mechanical C++ tokens out of the suites (53cfef4)
  • hoist the dns_server resolver callback to file scope (e73f033)
  • name the lambdas and drop the heap from three suites (72867d5)
  • use the transport layer's C names (111f9cc)
  • index the hpack roundtrip table instead of a range-for (8f4993c)
  • finish the tier-1 suite conversions (423c920)
  • convert the low-residue suites from .cpp to .c (b73b584)
  • strip the default arguments from the suite-local helpers (b64541a)
  • take the address at the remaining DTLS record-key call sites (ff461f5)
  • pass the DTLS record keys by address now that the parameter is a pointer (e696260)
  • restore the DtlsCipher member prefix and the explicit AEAD tag argument (ba56fd8)
  • enable SSE in native_sse, drop the lwIP mock from two host suites (a22dd37)
  • stop tcp_capture_disable() from wiping the capture, build arena.c for native_workers (227973e)
  • give the host seam the write-failure hook the lwIP mock owned (b763ab2)
  • convert the workers suite to C (b8ad778)
  • drop the default arguments from build_v3_raw_scoped (caae75e)
  • restore the SnmpTag member prefix across the snmp suites (3a3decc)
  • typedef the struct tags the scope strip left bare (2b43c6e)
  • latch the PUT error on a real mid-stream refusal (79215a3)
  • refuse the abort-path PUT through the store, not a node table (098343d)
  • COPY onto the root collection answers 409, observed not assumed (bd32327)
  • temporary diagnostic on the COPY-onto-root response (422f1b4)
  • copying onto the root collection is refused, not created (124b6b7)
  • a real filesystem always has a root, so the bare mount resolves (94115b5)
  • stop a WebDAV delete through the write it needs, not a handle (28620ea)
  • add a medium that refuses every write (1345032)
  • WebDAV storage refusals now come from the medium (5b0624b)
  • refuse through the medium instead of through exhaustion (5f6a8ce)
  • remount after filling, so the fixture starts from the medium (86bcc96)
  • measure whether a larger fixture volume survives exhaustion (b6eca8a)
  • check the store still answers after a full fill (464b6ee)
  • check the fixture supports the concurrent handles a COPY needs (ab2e29a)
  • use the proven fill for the remaining WebDAV creation-refused cases (4d3376b)
  • prove the fill helper actually exhausts the store (00c4ca1)
  • fill the volume for the copy-destination-refused case (3c89931)
  • leave headroom so the 507 case fails on the write, not the open (db8fbe1)
  • express the WebDAV storage-failure cases as real conditions (11eb59a)
  • create the WebDAV mount root before serving from it (8735ff7)
  • force the WebDAV failure paths by causing them, not flagging them (6d0cbf0)
  • create the collections above a fixture write (6bf5651)
  • build the route table and signaling for the WebDAV suite (4b5d1cf)
  • build the accessor and mount seam for the WebDAV suite (c17d8bb)
  • include the littlefs fixture in the WebDAV suite (0d0407b)
  • move the WebDAV suite onto the littlefs fixture (4a11475)
  • back the host mount fixture with real littlefs (26c6ba4)
  • depend on littlefs, the filesystem the device runs (ec4ec8b)
  • build the signaling TU for the upload suite (8f0555f)
  • build the route table and mount seam for the upload suite (21f6be5)
  • move the upload suite onto the mount seam (74f9f78)
  • restore the SCP mode names after the scope strip (48888d8)
  • restore the hotswap state names after the scope strip (9f745df)
  • size the host send capture for a whole multi-window response (392d378)
  • mount the file-serving fixture (0441bd0)
  • build the filesystem accessor and mount seam in the http stack (a528ad4)
  • enable PC_ENABLE_FILE_SERVING for its own suite (94413d8)
  • set the mock send buffer through its setter (b4b9a64)
  • give the hoisted handlers their state and the defaulted mtime (d7152c2)
  • hoist the file-serving handlers out of lambdas (22a0087)
  • give the host a pc_mnt_backend fixture and move file serving onto it (18a0c36)
  • use on_http_iface for the interface-scoped overload (93920a6)
  • spell the infinite loop without the C++ keyword (030b761)
  • convert the defer and presentation suites to C (b0d3177)
  • enable PC_ENABLE_AUTH for the auth suites (102cc67)
  • finish the auth arity and give the host seam a settable send buffer (84a9c6c)
  • match the arities C left behind (201dcb5)
  • convert the remaining JSON writers to the C API (2900695)
  • move the JSON suite onto the C writer API (5e95259)
  • give the host seam the send-capture accessors, and build route + signaling (25435d5)
  • bind slots through the host seam and fix the value-init assignments (fa14afe)
  • enable the dependencies the feature gates require (c7e7725)
  • pass the tls flag listener_add no longer defaults (d8048bc)
  • convert test_session to C (6d760e4)
  • convert test_forward to C (cd51377)
  • build the clock TU in native_clock (5ab8253)
  • make the host mocks compile as C and restore the virtual clock (940c3fd)
  • restore packml enum member names after the C++ scope strip (cfd42e8)
  • give the remaining 134 suites the library's own truth type (3661181)
  • fix a missed ks_handshake call site and the Ext case table (70f03b6)
  • spell the local case-table structs as typedefs in test_tls13_msg (98641c1)
  • give the QUIC/TLS suites the library's own truth type (c68d9a8)
  • convert the mechanically-convertible suites to C11 (79e56d1)
  • assert the six enum widths at compile time (4ef3417)

[0.0.7] - 2026-08-02

Show Changelog for version 0.0.7 - 2026-08-02

CI / Build

Changes

  • Bump version: 0.0.6 → 0.0.7 (4a6ac90)

Documentation

  • state C11 in the law, and retire DONE as a status in the sweep notes (0a52923)

[0.0.6] - 2026-08-02

Show Changelog for version 0.0.6 - 2026-08-02

Bug Fixes

  • convert the C++ type declarations behind sqlite, aes128gcm and hkdf (a437340)

CI / Build

Changes

  • Bump version: 0.0.5 → 0.0.6 (0b8de8e)

Documentation

  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (90e44e7)

[0.0.5] - 2026-08-02

Show Changelog for version 0.0.5 - 2026-08-02

Bug Fixes

  • restore the constant names the constexpr sweep truncated, and close the guard chain (0e46ddf)

CI / Build

Changes

  • Bump version: 0.0.4 → 0.0.5 (df66a22)

Documentation

  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (ab43d04)

[0.0.4] - 2026-08-02

Show Changelog for version 0.0.4 - 2026-08-02

Bug Fixes

  • reattach the three envs left extending a base the rename deleted (e7cb3db)
  • pin LF in every generator that writes a text file (2573320)
  • unbreak the default link, and stop the tree walk storing every path ten times (2602f75)
  • stop protocore.h from defining a secret and declaring six symbols nobody can link (e8e2853)
  • native_ssh satisfies the SFTP/SCP guard through the mount, not FILE_SERVING (8915c33)

CI / Build

Changes

  • Bump version: 0.0.3 → 0.0.4 (4619ab9)
  • Merge remote-tracking branch 'origin/main' into refactor/lib-wide (dd7a7a1)
  • Merge pull request #20 from dstroy0/refactor/json-codec (3103251)
  • Merge remote-tracking branch 'origin/main' into refactor/json-codec (f12ca3f)

Documentation

  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (27a9294)
  • move the CI badges to the top of the README (75a9345)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (9346b62)
  • publish features.html and the diagrams, and cut the README down (5dca79b)
  • update ESP32 build footprints [skip ci] (f2dcdce)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (181b870)
  • make every badge a link (31fb989)
  • interactive SVG diagrams, and a README that is not half feature table (a452865)
  • update ESP32 build footprints [skip ci] (3f08774)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (8f56a71)

Features

  • give the server's state one place to be read from (10b5eba)

Refactor

  • convert src/ to C11 and split the build into PROTOCORE_HOT / PROTOCORE_HOST (40d217a)
  • split swar into an access layer and bounded-run operations (d5d947e)
  • finish removing the PC class, and default every feature off (65a3886)
  • give the filesystem accessor the tree operations, and mnt back its blindness (09227b6)
  • delete the PC class and give the vfs/mnt split its boundary back (8b089bb)

[0.0.3] - 2026-07-31

Show Changelog for version 0.0.3 - 2026-07-31

Bug Fixes

  • reject a wire length that overflows the bounds check on 32-bit targets (ae8cad2)
  • derive forced feature dependencies instead of rewriting the user's flags (88e22b3)

CI / Build

Changes

  • Bump version: 0.0.2 → 0.0.3 (bb17397)
  • Bump version: 0.0.1 → 0.0.2 (2c6672b)
  • drop the clip mode; logging takes the one contract (6195264)
  • delete the duplicate web_assets copy that broke every example link (7df281f)
  • close ban 20 - the three printf APIs take a frame spec (6505d73)
  • build the last fixed-shape frames with pc_sb, not snprintf (114a275)
  • ban nondeterministic dispatch, retire the last format-string appender (210dd35)
  • pin LF checkout on every platform (692024f)

Documentation

  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (7f8fed4)
  • update ESP32 build footprints [skip ci] (c80866d)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (5b76ba0)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (b79f161)
  • update ESP32 build footprints [skip ci] (2389946)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (1d9135c)
  • update ESP32 build footprints [skip ci] (61e6e03)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (fae0bdb)
  • close out the Sphinx entries in the delivery record (49ea705)
  • rebuild the Doxygen theme, group the sidebar, drop the Sphinx site (8cf35ee)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (486bef5)
  • update ESP32 build footprints [skip ci] (494a04f)
  • regenerate feature tables + configurator + build_opt.h + example index [skip ci] (10bac7c)

Refactor

  • give storage one owner and take the vendor out of the file-transfer servers (5081912)
  • take the codec's tag byte out of the shared read cursor (d4956d8)
  • collapse the codec cursors onto pc_span and give SSH signaling an owner (e2d0b4e)

[0.0.1] - 2026-07-31

Show Changelog for version 0.0.1 - 2026-07-31

Changes