| … | … | @@ -2506,6 +2506,20 @@ SessionState's truncate / reorg / named-session machinery. |
| 2506 | 2506 | now takes the header. |
| 2507 | 2507 | - **Drill `m5g4a`: 24/25 red.** "byteLength unsigned" is equivalent (same two's-complement |
| 2508 | 2508 | value). ctest 30/30. |
| 2509 | - **M5g-4b DONE 2026-10-03** (keetd a3bd63e + the gate / drill commit). |
| 2510 | - **Session:** `treeHash` (fetches a missing last block first), `signable`, `missingNodes`, |
| 2511 | an async `proof`, `applyProof`, `verifyFullyRemote`; `treeHashFromStorage`. |
| 2512 | - **`createManifest` over a `ManifestInput`**, in JS's order: version, quorum, |
| 2513 | parseSigner / validateSigner, blake2b, prologue, userData, linked; plus decodeManifest. |
| 2514 | - **Statics:** `key` (a public key, encoded bytes, or a manifest; compat / version / |
| 2515 | namespace), `parseManifest`, `discoveryKey`, `blockEncryptionKey`. |
| 2516 | - **Moved to 4e** (replicator level): `Hypercore.enable(SMALL_WANTS)`, which needs the |
| 2517 | non-COMPAT wants (keetd's wants port is COMPAT), plus `createProtocolStream`, |
| 2518 | `getProtocolMuxer` and `replicate`. |
| 2519 | - **Core gate `proofs`:** 13 manifest refusals; key() defaults (v2 from userData, a |
| 2520 | majority of 3); a parked treeHash on a wait session; applyProof with the reader's |
| 2521 | missingNodes; verifyFullyRemote, valid and tampered. |
| 2522 | - **Drill `m5g4b`: 20/20 red.** The first run killed 16; its 4 gaps became cases. ctest 30/30. |
| 2509 | 2523 | - **M5g-4 — the rest of the surface:** |
| 2510 | 2524 | - value encodings and `encodeBatch` (DECODING_ERROR); `postappend`, `onseq`, `onwait`; |
| 2511 | 2525 | - `setEncryption` / `setEncryptionKey` / `setKeyPair` / `setGroup`; |