docs: record what the profiles pull built, and the reverse direction measured
The plan's top now says it was built, the same day it was written: the ten commits in four phases at the dry run's numbers exactly, Phase 6's two native items done, and its other three -- pushing the removal, the two reverse-pulls, the fork decision -- named as the user's. Phase 6 gains its own Built paragraph: what the refusal changed and did not change in the DAO's welcome branch, the four re-pointed anchors, and a measurement the plan had only asserted -- that a Mantra commit offers itself to the fork cheaply. git format-patch on the refusal commit, four inverse rules over the patch text, and git apply --check on a scratch worktree of curated/curated at 29027f2b: it applies cleanly, five files. That is the shape a normaliser running the other way would take, and it is recorded so the fork can take the commit in seconds rather than by hand. The README's reading-order sentence and the first plan's pointer say "built" where they said "planned". Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
2620e43d57
commit
213535278a
3 files changed
+48
-6
No files matched your search
+4
-4
@@ -46,10 +46,10 @@ alone, except that its first decision leans on the derivation note's one rule. T
|
||||
the lines it pulled -- the group's nostr identity and the curated lists -- were taken
|
||||
out again the same day, and its record says what went and what stayed. The nsec and
|
||||
npub sign-in notes arrived with it and record what they built. The profiles pull note
|
||||
is the same exercise a second time, planned with its dry run already done; read it
|
||||
after the first, because it assumes the method and the three decisions and only says
|
||||
what changed — chiefly that the tree is no longer a superset, and what the check for an
|
||||
exact pull becomes when it is not.
|
||||
is the same exercise a second time, planned with its dry run already done and built
|
||||
the same day; read it after the first, because it assumes the method and the three
|
||||
decisions and only says what changed — chiefly that the tree is no longer a superset,
|
||||
and what the check for an exact pull becomes when it is not.
|
||||
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
|
||||
|
||||
@@ -16,6 +16,16 @@ lessons; this document assumes both and adds what changed. The one rule everythi
|
||||
still rests on is the derivation note's: two strings in this tree are hash inputs and
|
||||
are never renamed, and the normaliser cannot touch them by construction.
|
||||
|
||||
**Built 2026-09-13**, the same day, on the branch that carries this plan: the ten
|
||||
commits landed by cherry-pick in four phases, each with a `Pulled-From` trailer, at
|
||||
the dry run's numbers exactly; the phases below carry a *Built* paragraph each with
|
||||
what was measured at the cut. Phase 6's two native items are done — the refusal of a
|
||||
Welcome for a group another profile holds (`679d5249`), and the note's four line
|
||||
anchors (`2620e43d`) — and its other three are the user's: pushing the removal, the
|
||||
two reverse-pulls into the fork, and the fork decision. The reverse direction was
|
||||
measured rather than assumed: the refusal commit, rewritten into the fork's names by
|
||||
four inverse rules, applies cleanly to `curated/curated` at `29027f2b`.
|
||||
|
||||
Written against `mantra` at `776455ec` — `origin/mantra` at `0fa807a6` plus the
|
||||
removal commit, which is where this plan starts and which `origin` does not yet carry
|
||||
— and `curated/curated` at `29027f2b`. Dry run executed 2026-09-13.
|
||||
@@ -535,6 +545,38 @@ Five things, none of them a merge.
|
||||
which is best; it only shows that the third is affordable for as long as the fork's
|
||||
work stays clear of what Mantra took out.
|
||||
|
||||
**Built 2026-09-13**, items 1 and 2; items 3 to 5 are not this repository's to land.
|
||||
|
||||
*Item 1*, `679d5249`. The DAO's welcome branch already declined to overwrite an
|
||||
existing room — "Chat Room already exists", at warning level — so the joiner's MLS state
|
||||
never replaced the holder's; what it could not do was tell a redelivered Welcome for our
|
||||
own room from a Welcome for a room another profile holds, and it told nobody about
|
||||
either. The branch now reads the room's `userPublicKey`: the same profile's redelivery
|
||||
stays a quiet no-op, and another profile's Welcome is refused with a warning naming
|
||||
both keys and a membership line written into the room that exists — the holder's,
|
||||
since it is the only room on the device the group has and the holder is the one who
|
||||
can act. `TYPE_WELCOME_REFUSED_OTHER_PROFILE`, in `MEMBERSHIP_TYPES`, error tint,
|
||||
`PersonOff`; the content names inviter, invitee and holder. The key package bundle is
|
||||
left unconsumed as the branch always left it. The test is two databases with a real
|
||||
MLS group, a key package whose private keys the invitee's side holds — the fixture
|
||||
now returns the bundle beside the public package — and a Welcome sealed as the app
|
||||
seals one; three cases, refused, redelivered, joined. `jvmTest` 868 → 871.
|
||||
|
||||
*Item 2*, `2620e43d`: the four anchors re-pointed at Mantra's lines — `:404`, `:741`,
|
||||
`:537`, `:118` — each still landing on the thing its sentence describes.
|
||||
|
||||
*Item 4, measured.* `git format-patch -1 679d5249`, four inverse rules over the
|
||||
patch text (`press.mantra.` → `to.curare.`, `press/mantra/` → `to/curare/`,
|
||||
`mantra.composeapp.generated.resources` → `curare.…`, `MantraDatabase` →
|
||||
`CurareDatabase`), and `git apply --check` on a scratch worktree of `curated/curated`
|
||||
at `29027f2b`: applies cleanly, 5 files, +360 −6. That is the whole cost of offering
|
||||
a Mantra commit to the fork while both trees hold the touched files identically —
|
||||
and it is also the shape a `curated-rebrand.py`, the normaliser's inverse, would
|
||||
take if the fork wanted to pull regularly rather than by hand.
|
||||
|
||||
*Items 3 and 5* are unchanged from the plan: two small commits in the other
|
||||
repository, and a decision.
|
||||
|
||||
## Risks, and the silent ones in particular
|
||||
|
||||
**The write on first launch.** Phase 2's repair is the first time a pull has changed a
|
||||
|
||||
@@ -61,8 +61,8 @@ 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 — which is
|
||||
[curated-to-mantra-profiles.md](./curated-to-mantra-profiles.md), planned and dry-run the
|
||||
same day.
|
||||
[curated-to-mantra-profiles.md](./curated-to-mantra-profiles.md), planned, dry-run and
|
||||
landed the same day.
|
||||
|
||||
Written against `origin/mantra` at `ba26c0b1` and `curated/curated` at `86cb876b`;
|
||||
executed on 2026-09-13.
|
||||
|
||||
Reference in new issue
Block a user