| … | … | @@ -2520,6 +2520,21 @@ SessionState's truncate / reorg / named-session machinery. |
| 2520 | 2520 | majority of 3); a parked treeHash on a wait session; applyProof with the reader's |
| 2521 | 2521 | missingNodes; verifyFullyRemote, valid and tampered. |
| 2522 | 2522 | - **Drill `m5g4b`: 20/20 red.** The first run killed 16; its 4 gaps became cases. ctest 30/30. |
| 2523 | - **M5g-4c DONE 2026-10-03** (keetd fe8f270 + the gate / drill commit): read / write / byte streams |
| 2524 | (lib/streams.js), pull-based (`read(cb)`; the end is sticky). |
| 2525 | - **Behaviour:** |
| 2526 | - A read stream ends on a null get (streamx `push(null)`). |
| 2527 | - A snapshot's end is the length at open; live applies only open-ended. |
| 2528 | - Writes made during an append are appended together. |
| 2529 | - The byte stream: update, seek, a linear prefetch range, a binary get, slicing. |
| 2530 | - **Core gate `streams` (34 ops):** ranges, a hole, mid-stream appends (snapshot vs not), a |
| 2531 | live read waiting past the length (a local append resolves it), writes before end(), |
| 2532 | and the byte stream's offsets / lengths / null TypeErrors (measured from JS: an awaited |
| 2533 | destructuring of null is "(intermediate value) is not iterable"). |
| 2534 | - **Drill `m5g4c`: 10/11 red.** |
| 2535 | - **OWED:** "bytes: no prefetch" is observable only as download requests to a peer, so it |
| 2536 | needs a pipe scenario. |
| 2537 | - ctest 30/30. |
| 2523 | 2538 | - **M5g-4 — the rest of the surface:** |
| 2524 | 2539 | - value encodings and `encodeBatch` (DECODING_ERROR); `postappend`, `onseq`, `onwait`; |
| 2525 | 2540 | - `setEncryption` / `setEncryptionKey` / `setKeyPair` / `setGroup`; |