The published spec says the Android client "cannot yet apply one, because
its transcript does not record a mid for each line", and that the same
gap blocks replies and reactions.
The transcript DOES record a mid, and MessageReactionTest already folds
a reaction onto a message by id — so the stated reason is false and the
consequence for §6.9 is false with it.
But relay#46's rule is the point of this commit: do not flip a claim
because the code looks present; flip it because a run proved it, and say
which run.applyEdit was implemented and wired with nothing exercising
it — InboundControlTest covers the codec and says in its own header that
the app-side application needs a Vault and is out of scope there. This is
that run, written so the correction has something behind it.
Five tests, and the two that matter most are refusals: an edit from
somebody who did not write the message, and an edit of our own message
claiming another author. Without the author check a contact could rewrite
another person's words in a transcript, which reads to the reader as the
sender having said something they never said. Both proved by removing that
check and watching exactly those two go red.
The published spec says the Android client *"cannot yet apply one, because
its transcript does not record a `mid` for each line"*, and that the same
gap blocks replies and reactions.
The transcript DOES record a mid, and `MessageReactionTest` already folds
a reaction onto a message by id — so the stated reason is false and the
consequence for §6.9 is false with it.
But relay#46's rule is the point of this commit: **do not flip a claim
because the code looks present; flip it because a run proved it, and say
which run.** `applyEdit` was implemented and wired with nothing exercising
it — `InboundControlTest` covers the codec and says in its own header that
the app-side application needs a Vault and is out of scope there. This is
that run, written so the correction has something behind it.
Five tests, and the two that matter most are refusals: an edit from
somebody who did not write the message, and an edit of our own message
claiming another author. Without the author check a contact could rewrite
another person's words in a transcript, which reads to the reader as the
sender having said something they never said. Both proved by removing that
check and watching exactly those two go red.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
The published spec says the Android client "cannot yet apply one, because
its transcript does not record a
midfor each line", and that the samegap blocks replies and reactions.
The transcript DOES record a mid, and
MessageReactionTestalready foldsa reaction onto a message by id — so the stated reason is false and the
consequence for §6.9 is false with it.
But relay#46's rule is the point of this commit: do not flip a claim
because the code looks present; flip it because a run proved it, and say
which run.
applyEditwas implemented and wired with nothing exercisingit —
InboundControlTestcovers the codec and says in its own header thatthe app-side application needs a Vault and is out of scope there. This is
that run, written so the correction has something behind it.
Five tests, and the two that matter most are refusals: an edit from
somebody who did not write the message, and an edit of our own message
claiming another author. Without the author check a contact could rewrite
another person's words in a transcript, which reads to the reader as the
sender having said something they never said. Both proved by removing that
check and watching exactly those two go red.
Co-Authored-By: Claude Opus 5 noreply@anthropic.com
assigned to @paulhitt
restored source branch
test/inbound-edit-is-appliedmentioned in commit
8c9fd8f09cchanged the description