Files
mantra-kmp/docs/curated-to-mantra-preview.md
Kgothatso Ngako 76055bc0a8
Some checks failed
Material Design conformance / budgets (push) Has been cancelled
Material Design conformance / tests (push) Has been cancelled
docs: record the third pull, the profile preview and the extended FAB
Eleven commits reached the fork after the second pull had landed, and
this note is their inventory, verdicts and record: the profile-preview
line pulled whole, the extended-FAB sweep pulled with its seven removed
screens resolved as still deleted, and d2a4298d -- one commit half in the
curated-entries line Mantra took out and half in the broadcast line it
kept -- pulled in part, by a PARTIAL rule that applies the kept paths and
writes the rest into the note.

Three things differed from the pulls before it and are set out: a brand
token the normaliser could not see, NotYetOnCurare, fixed by a rule and a
second rewrite that left the earlier forty-nine commits hash for hash the
same; a merge whose join files carried only the dropped half, so that for
the first time a join was not taken from the merge; and two conflicts the
compiler found where git saw none, an import Mantra's projects section
still needs and a jvmTest fixture recreated reduced to the room so that
an upstream test lands byte for byte.

The record is two phases: jvmTest 871 -> 909 -> 914, testDebugUnitTest
420 -> 424, every audit budget met at both cuts, the schema unchanged at
version 20, and an exactness check whose every movement is named. The
README gains the row and a sentence; the second plan points forward.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
2026-09-13 16:43:20 +02:00

7.7 KiB

The third pull: the profile preview, the extended FAB, and half of a commit

Eleven commits reached curated/curated on 2026-09-13, after the second pull had landed — ten ordinary and one merge, 29027f2b..272b6316 — and they sat unpushed in a local clone long enough to be asked about. This is what they are, which of them Mantra took, and the three places this pull differed from the two before it. It assumes the first plan's method and the second's exactness check, and says only what changed.

Built 2026-09-13, the day they were pushed: eight commits landed whole, one in part, one merge as nothing, in two phases, at jvmTest 871 → 914 and testDebugUnitTest 420 → 424 with every audit budget met.

The inventory

line commits what verdict
A profile preview before a chat — npub-profile-preview.md db268a53 plan · 37c6f7ea 8973c005 923b59ec d6490985 · b3bcc060 record · 80735df8 · 272b6316 ProfilePreviewScreen and its view model, with DirectMessagePeerSync behind the button's readiness; the new-chat dialog opens the person instead of starting the chat; the button knows whether a room with them already exists; the preview's action is the app's extended FAB; a member row on the group's screen opens the preview pulled, all eight
One extended FAB for every primary action ca6c16be ExtendedFab, and twenty screens moved onto it — thirteen of them Mantra's, including AddArtifact, AddChapter, AddDialect, AddTranslationArtifactVersion, TranslateChunk, DkgRitual pulled; the seven screens Mantra does not have resolve as still deleted
Broadcast every accepted entry d2a4298d a Broadcast all on the curated-entries screen, and — to make it — sendToRelays lifted into BroadcastGroupSignedEventViewModel's companion, a RelayOutcomeLabel widget, and the broadcast screen reading it pulled in part: the broadcast half; the entries half is line D
the merge f4b0347e the preview branch joining curated lands as nothing; its two join files carried only line D's side, see below

Three things that differed

1. A brand token the normaliser did not know

The preview's view model names a readiness state NotYetOnCurare. \bCurare\b cannot see a brand with no word boundary in front of it, and the first rewrite left seventeen of them across the code, the tests and the note. The fix is a rule, not an edit — (?<=[a-z0-9])Curare(?=[A-Z]|\b) → Mantra, for the Curare generation only, since a CamelCase-embedded Curated is product vocabulary at the tip — and a second rewrite: zero tokens left, and the earlier forty-nine rewritten commits came out hash for hash the same, so nothing already landed was disturbed. 0728f3f9.

2. Half of a commit, taken as a partial pick

d2a4298d is one commit in two lines. Its button, view model, state, tests, five strings and nav-host wiring belong to the curated-entries screen, which Mantra took out; but the send it lifted out of the broadcast screen into sendToRelays, the widget that turns a relay's answer into words, and the screen reading it are the broadcast line Mantra kept, and they touch only files both trees hold. Dropping the commit whole would have left four shared files differing from the fork's and put the FAB commit, which edits the same screen, on a base the fork's never had. The driver gained a PARTIAL rule: the diff restricted to the kept paths, applied and committed under the original message and trailer, with what was left out written into the note. b3379f81, and the FAB commit then applied to the screen cleanly.

What this does to the merge: f4b0347e's two join files, strings.xml and the nav host, carried the preview side's additions — which the preview commits had already brought — plus d2a4298d's entries strings and wiring. So the merge was not a source of anything Mantra wanted, and for the first time a join's files were not taken from the merge. The residual records the difference exactly: five strings and their comment, and two nav-host hunks, one of which is a comment that says "as the entries screen is for its Broadcast all" where Mantra's still says "the one screen", which on Mantra is true.

3. Two conflicts the compiler found, not git

Both in 272b6316, which applied without a textual conflict.

  • Upstream's ChatRoomDetailScreen had no use left for ImplementationPendingRoute once 808a3459 dropped the library, dialects and projects sections, so the commit removes the import. Mantra kept the sections, and its projects section still routes Add new project through that import. Kept, with the reason in the commit.
  • The test it adds, ChatRoomMemberRowJvmTest, composes the screen against GroupSignedWorkFixtures, a jvmTest fixture that went with lines B, D and H. The test uses three of its members — the room id, the active key, localChatRoom() — and none of the signed work. The fixture is recreated on Mantra reduced to the room alone, under the same names, so the test lands byte for byte and the next upstream test written against the room compiles here too. It is the one file this pull turned from upstream only into both have, differently.

The seven modify/delete conflicts at ca6c16be were the expected kind and resolved by rule: AcceptCuratedSuggestion, AddGroupPost, EditGroupCuratedSchema, EditGroupNostrProfile, EditGroupRelays, GroupCuratedEntries, ProposeGroupEvent — all still deleted.

The record

Phase A — the preview line to its record Phase B — the broadcast half, the FAB, the two on top
commits 69aa43a1 f84ae133 39c056a2 5ba888d9 2adc5036 a8ba589e b3379f81 (partial) 883bf1c8 (seven deletes) e66c174b 4899dcbc (two hand fixes)
picks 6 clean 1 partial, 1 by rule, 2 clean
exactness 139 residual files before and after; nothing moved 140; moved: strings.xml (the five strings), MantraNavHost.kt (the two hunks), ChatRoomDetailScreen.kt (one import), GroupSignedWorkFixtures.kt (recreated); twelve upstream-only files changed upstream, all of them line D's or the removed screens'
compile both targets clean both targets clean
jvmTest 871 → 909 909 → 914
testDebugUnitTest 420 → 424 (DirectMessagePeerSyncTest) 424
audit all budgets met; composable literals 30 all budgets met; 30
strings.xml 455 → 460 460
schema unchanged, v20 unchanged, v20

The rewrite: 60 commits in 128 s, twice. The library pin: 84cc44c throughout.

What the user gets

A member's row on a group's screen, and the person a new chat is started with, open a profile preview: the cached profile at once while the relays refresh it, and one button that says whether a chat with them exists, can be started, or cannot yet because they have not set up messaging on Mantra. And one extended FAB, the same shape and the same disabled state, on every screen whose primary action used to spell it its own way — including the translation screens Curare kept and fixed.

What is left

  • The other half of d2a4298d is line D and stays out; the residual names its lines.
  • The reverse direction. ExtendedFab and the preview are now identical on both trees; the only Mantra-side edits in this pull are the kept import and the reduced fixture, neither of which the fork wants. Nothing new to offer upstream from here.
  • The fork decision stands as the first plan left it. Three pulls in one day with the tooling in place cost minutes each of machine time; each also found one thing — a pin, a CamelCase brand, a commit in two lines — that a rebrand-free fork would not have had to find.