From 0fa807a6fbd85ca7915043cb127c8cb1298e05f5 Mon Sep 17 00:00:00 2001 From: Kgothatso Ngako Date: Sun, 13 Sep 2026 12:06:46 +0200 Subject: [PATCH] docs: record what the pull built, and the seven places it chose differently Phases 0 to 5 of docs/curated-to-mantra.md are landed on this branch: thirty commits pulled from curated/curated, each carrying a `Pulled-From` trailer naming the commit it came from, on top of Phase 0's two native ones. The plan is kept as written and its status line now says what happened, with the table the house keeps for a plan that has been built -- what it said against what it turned out to be -- and the README's sentence about it follows. **Seven differences, and none of them are corrections to the plan's decisions.** The three decisions -- drop the brand line but keep its reasoning, keep Mantra's sections by dropping 808a3459, take the curated lists -- all held, and the measured predictions about them (the screen's order, the tests, the audit) came true to the number. What changed was mechanics: the phased replay is a cherry-pick per commit rather than a rebase of each cut, because a recreated merge cannot reach a parent that was replayed in an earlier phase; the library pin follows the commit rather than staying put, because the compiler said the nsec line does not build against 84cc44c; the join files are taken from upstream's own merges rather than unioned, for three reasons that each took a failed attempt to learn; and the exactness residual is seventeen files rather than sixteen plus a logo, because Mantra's own side had moved too. Each is written in the table with the reasoning beside it, so the next pull starts from what happened. **The numbers are per phase, so a regression later can be placed.** jvmTest 736, 864, 905, 1,007, 1,039 and testDebugUnitTest 403, 486, 495, 530, 530 across Phases 0 to 5; both compilers clean and every m3 audit budget met at each; the final jvmTest executed rather than restored from the build cache, 1,039 tests in 46 seconds of test time, 0 failures. The plan's own dry run predicted 1,036; the three extra are 39fb64b6's pin of the library's nostrPublicKey() against NIP-06. **What is not done is named rather than implied.** Phase 6's two reverse-pulls -- 39fb64b6, since the fork still carries the app-side WalletManagerExtension.kt it made redundant, and Phase 0's Torch retirement -- land in the other repository and are not this branch's to make. Its last item is a decision about what the fork becomes, and the plan's recommendation stands: converge the source package so the next pull is a plain cherry-pick. And the upstream has already moved on -- ten commits for several profiles on one device, one of them the fork's first schema migration -- which are the next pull, kept separate because a migration landing on Mantra's database deserves a decision of its own. Co-Authored-By: Claude Opus 5 --- docs/README.md | 7 ++++--- docs/curated-to-mantra.md | 30 +++++++++++++++++++++++++----- 2 files changed, 29 insertions(+), 8 deletions(-) diff --git a/docs/README.md b/docs/README.md index 74c605cd..6e93b973 100644 --- a/docs/README.md +++ b/docs/README.md @@ -38,9 +38,10 @@ once it has a key, and what it can say about a group that does not yet. The Material Design note is a phased plan that has not been built, and is the only one about what the app looks like rather than what it does; read the jvm-target note first if you want to know why its adaptive-layout phase exists. -The curated-to-mantra note is a phased plan that has not been built, though its dry -run has: it is about the repository rather than the app, and reads alone, except that -its first decision leans on the derivation note's one rule. +The curated-to-mantra note is a phased plan that has been built, save for its last +phase, which is a decision: it is about the repository rather than the app, and reads +alone, except that its first decision leans on the derivation note's one rule. The +nsec and npub sign-in notes arrived with it and record what they built. The nsec sign-in note is a phased plan that has been built; it inherits the key-storage decision from the jvm-target note and drives the navigation state machine `NavigationViewModel.processLocalAccount` implements, so read it with the diff --git a/docs/curated-to-mantra.md b/docs/curated-to-mantra.md index 6865de7c..21629146 100644 --- a/docs/curated-to-mantra.md +++ b/docs/curated-to-mantra.md @@ -14,11 +14,31 @@ rule this whole exercise is built around — that two strings in this tree are h and must never be renamed — and the rebrands upstream were careful about it, which is the only reason a mechanical pull is possible at all. -**Not built.** Phase 1's dry run *has* been done, once, on 2026-09-13, on a scratch -worktree that was thrown away; every number below is measured on that run, not -estimated. Written against `origin/mantra` at `ba26c0b1` (with `f4434ab1` and -`39fb64b6` on the update branch) and `curated/curated` at `86cb876b`. Curated moves -daily: the numbers will drift, the method will not. +**Built, Phases 0–5, on 2026-09-13**, on the branch that also carries `f4434ab1` and +`39fb64b6`: thirty commits pulled from the fork, each with a `Pulled-From` trailer, on +top of Phase 0's two native ones. Phase 6 is not done: its two reverse-pulls land in the +other repository, and its last item is a decision. The plan below is kept as written, +because the code reads better against the argument it came from than against a summary +of itself; where the execution chose differently the [Phase 1 record](#phase-1--the-dry-run) +says so, and it did so in seven places worth reading: + +| what the plan said | what it turned out to be | +|---|---| +| each phase is a `rebase --rebase-merges --onto` of a cut | a cherry-pick per commit, in topological order. A recreated merge whose other parent was replayed in an earlier phase would be pointed at the *pre*-replay commit; so the four merges land as nothing and their resolutions are folded in where the conflicts surface. The driver is [`docs/scripts/curated-replay.py`](./scripts/curated-replay.py) | +| the pin stays at `84cc44c` throughout | it follows the commit. The nsec line writes through `NostrKeyManager`, which `84cc44c` renamed away; the compiler produced eight unresolved references at the Phase 3 cut. `366b0177` moves the pin to `59c11ed` and `5efeae76` brings it to `84cc44c`, so every commit builds against the library it names. A populated submodule made git fast-forward the gitlink past the rule once, silently; the rule is now unconditional | +| take the rebrand residue *or* leave it for Phase 2 | Phase 0 took it, natively worded, so the three rewritten brand commits were dropped outright rather than squashed | +| Phase 2, 3 and 5 replay with no conflicts | Phase 3 had two, both foreseen in kind: the import block `39fb64b6` had already moved (theirs), and one word of a class comment the dropped rebrand had capitalised (theirs). Phase 5 had none | +| Phase 4's three conflicts, resolved by hand | the same three, but the join files are taken from upstream's own merges (`c8de3a1f`, `fedbe724`) rather than unioned: a union duplicates shared lines, ignores the other side's deletions, and — the one that hid longest — orders the joined blocks its own way so later commits miss their base. `fcc19f95`'s deletion of two strings survived two attempts before that was understood | +| the exactness diff is the logo plus `808a3459`'s three files | plus the fourteen files Mantra changed on its own side: Phase 0's prose at the protected names, `39fb64b6`'s four, and this document with its two scripts. Seventeen files, every one accounted for, at every cut | +| 1,036 jvm tests at the end | 1,039 — the three from `39fb64b6` — and per phase 736, 864, 905, 1,007, 1,039; `testDebugUnitTest` 403, 486, 495, 530, 530; every phase clean on both compilers with every audit budget met | + +The upstream moved before this landed: `curated/curated` went from `86cb876b` to +`29027f2b`, ten commits for several profiles on one device, one of them the fork's +first schema migration (version 20). They are the next pull, and the schema change is +why they get their own decision rather than a ride on this one. + +Written against `origin/mantra` at `ba26c0b1` and `curated/curated` at `86cb876b`; +executed on 2026-09-13. ## The shape of the fork