From b92659fe92218c74c8e541aab83a46835fa94950 Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Sun, 13 Sep 2026 15:54:28 +0200 Subject: [PATCH] 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 --- docs/curated-to-mantra-profiles.md | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/docs/curated-to-mantra-profiles.md b/docs/curated-to-mantra-profiles.md index 72cdd26a..a6062dc1 100644 --- a/docs/curated-to-mantra-profiles.md +++ b/docs/curated-to-mantra-profiles.md @@ -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