Merge branch 'mantra' into claude/rename-archive-chronicle-a4a8e0
The rebuild deprecation landed on mantra while the rename was in flight, and it touched the same files by their old names. Git matched the renames itself, so the only conflict was `ChronicleRoundTripTest`'s header, where both sides had rewritten the same paragraph: mantra's says this file is now the gate on a deprecated fallback rather than on the only path, which is the newer and truer claim, so it wins and the rename is applied on top of it. Everything the merge brought in went through the same substitution as the rest: the nine `@Deprecated` messages and the "Retiring the rebuild" checklist all name `ChronicleManager`, `ChronicleRoundTripTest` and docs/member-chronicle.md, which are the files that now exist. 797 tests pass -- 500 jvm, 297 android. The five new ones are the migration's. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
commit
4890906b24
11 files changed
+170
-13
No files matched your search
+19
-11
@@ -39,22 +39,30 @@ import press.mantra.compose.nostr.nip30303.TranslationChapterEvent
|
||||
import press.mantra.compose.nostr.nip30303.TranslationChunkEvent
|
||||
|
||||
/**
|
||||
* The assumption the whole chronicle rests on: a row can be turned back into the
|
||||
* event the group signed.
|
||||
* The assumption the chronicle's *fallback* rests on: a row can be turned back
|
||||
* into the event the group signed.
|
||||
*
|
||||
* Signed events are not stored as events. `FrostSigningManager.complete` applies
|
||||
* them and what survives is a `Mantra*` row, so a chronicle has to rebuild each
|
||||
* one with `toXEvent()` and hope it comes out byte-identical. If it does not,
|
||||
* the id changes, the signature no longer covers it, and every receiver drops
|
||||
* the payload as a forgery -- silently, one kind at a time.
|
||||
* Signed events used to be stored only as rows. `FrostSigningManager.complete`
|
||||
* applied one and what survived was a `Mantra*` row, so a chronicle had to
|
||||
* rebuild each payload with `toXEvent()` and hope it came out byte-identical --
|
||||
* and if it did not, the id changed, the signature no longer covered it, and
|
||||
* every receiver dropped the payload as a forgery, silently, one kind at a time.
|
||||
*
|
||||
* That is what the round-trip note on each `toXEvent` claims and what nothing
|
||||
* asserted until now. Every kind in `ChronicleEvent.CHRONICLABLE_KINDS` is checked
|
||||
* here against a real FROST quorum, because a signature that verifies is the
|
||||
* only evidence that the rebuild is faithful -- comparing fields would only
|
||||
* asserted until this ran. Every kind in `ChronicleEvent.CHRONICLABLE_KINDS` is
|
||||
* checked here against a real FROST quorum, because a signature that verifies is
|
||||
* the only evidence that the rebuild is faithful -- comparing fields would only
|
||||
* prove the test and the code agree about which fields matter.
|
||||
*
|
||||
* A kind that fails here cannot be chronicled at all, whatever the allowlist says.
|
||||
* ### Deprecated, along with what it guards
|
||||
*
|
||||
* `GroupSignedEvent` keeps the events now, and `ChronicleManager.assemble` reads
|
||||
* them; the rebuild survives only for work signed before that table existed, and
|
||||
* so does this. Nothing else covers the `toXEvent()` methods, so **this whole
|
||||
* file goes when they do** -- see "Retiring the rebuild" in
|
||||
* docs/member-chronicle.md. Until then a kind that fails here cannot be chronicled
|
||||
* *from a row*, whatever the allowlist says, which for a pre-v13 room is the
|
||||
* same thing as not at all.
|
||||
*/
|
||||
class ChronicleRoundTripTest {
|
||||
private val participants = 3
|
||||
|
||||
Reference in new issue
Block a user