docs: record Phase 4 of the profiles pull, the migration to version 20

759199f2 landed as 72afe8aa, a clean pick, and with it the database's
first migration since the fork: version 20, two nullable owner columns on
the fetch queues by AutoMigration, the export committed as
composeApp/schemas/press.mantra.compose.database.MantraDatabase/20.json.

The check this phase exists for passed: after a full build of both
targets, git status shows nothing under composeApp/schemas/, and the
committed 20.json is byte-identical to the rewritten fork's, identity
hash 4414c373. Room derived the same twenty tables from Mantra's entities
as from Curare's, which is the second decision's rule -- whichever tree
migrates first owns the number, the other pulls before it adds its own --
holding on its first use.

Exactness unchanged at 135 residual files with nothing moved. Both
compilers clean, jvmTest 858 -> 864, testDebugUnitTest 420, every audit
budget met. Read in review rather than assumed: the inbox sweep runs
inside the canSign branch before the broadcast pump and the live
subscriptions launch, returns zero without a query for a key pair that
holds no private key, re-indexes each wrap in a transaction of its own
and logs rather than throws when one cannot be opened; the DAO's own
placeholder and participant syncs carry no owner; the seal now links to
the wrap it came out of; and the migration's comment says why the
broadcast queue was given no owner column.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
Kgothatso Ngako
2026-09-13 15:54:28 +02:00
parent 72afe8aa40
commit b92659fe92

View File

@@ -462,8 +462,21 @@ full compile, then `git status` — nothing under `composeApp/schemas/`.
Exit: `OwnedRequestQueueJvmTest` and `ReadOnlyGiftWrapDaoJvmTest` green; an npub
signed in, sent a DM by someone else, then upgraded with its nsec reads the DM on the
next activation;
schema files 1–20 committed and regenerated identically.
next activation; schema files 1–20 committed and regenerated identically.
**Built 2026-09-13**, `72afe8aa`, a clean pick. Exactness unchanged at 135, nothing
moved. Both compilers clean; `jvmTest` 858 → 864 (`OwnedRequestQueueJvmTest` and the
sweep cases added to `ReadOnlyGiftWrapDaoJvmTest`); `testDebugUnitTest` 420; audit all
budgets met. The schema check, which is what this phase is for: after a full build of
both targets `git status` shows nothing under `composeApp/schemas/`, and the committed
`20.json` is byte-identical to the rewritten fork's, identity hash `4414c373…` — Room
computed the same twenty tables from Mantra's entities as from Curare's, which is the
second decision's rule holding on its first use. Read in review: the sweep runs inside
`identity.canSign`, before the broadcast pump and the live subscriptions are launched;
it returns 0 without a query for a key pair with no private key; each wrap is re-indexed
in its own transaction and a failure is logged and skipped rather than thrown; the DAO's
own requests carry no owner; `GiftWrapMessage.toGiftWrapSeal` sets `giftWrapMessageId`;
the migration's comment says why the broadcast queue has no owner column.
### Phase 5 — the exits, the round trip, the record