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>
This commit is contained in:
@@ -24,6 +24,7 @@ silent, or a decision that looked arbitrary and was not.
|
||||
| [material-design-conformance.md](./material-design-conformance.md) | what the M3 foundations actually require, measured against all 43 screens — the colour pairing that renders the app's own proposals invisible, and eight phases that put the decisions back in the theme |
|
||||
| [curated-to-mantra.md](./curated-to-mantra.md) | pulling the Curated fork's thirty-nine commits back under Mantra's names — which lines of work to take, the three decisions, and a measured way to replay a twice-rebranded history without touching seven hundred files by hand |
|
||||
| [curated-to-mantra-profiles.md](./curated-to-mantra-profiles.md) | the second pull: the fork's several-profiles line, ten commits and its first schema migration — which of it is a fix Mantra has today, who allocates a schema version number when two trees share one history, and the one conflict, which was Mantra's own |
|
||||
| [curated-to-mantra-preview.md](./curated-to-mantra-preview.md) | the third pull: the profile preview and the extended FAB, eleven commits — a brand token hidden in CamelCase, a commit half in a removed line taken as a partial pick, and the two conflicts the compiler found where git saw none |
|
||||
|
||||
Start with the ceremony if you are new to this area; the Marmot notes all assume it.
|
||||
Read the skipped-keys note before debugging any "the other device never got it"
|
||||
@@ -50,7 +51,8 @@ npub sign-in notes arrived with it and record what they built. The profiles pull
|
||||
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.
|
||||
and what the check for an exact pull becomes when it is not. The preview pull note is
|
||||
the third and shortest; read it for the two kinds of resolution the first two never needed.
|
||||
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
|
||||
|
||||
111
docs/curated-to-mantra-preview.md
Normal file
111
docs/curated-to-mantra-preview.md
Normal file
@@ -0,0 +1,111 @@
|
||||
# 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](./curated-to-mantra-profiles.md) 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](./curated-to-mantra.md)'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](./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.
|
||||
@@ -16,6 +16,9 @@ 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.
|
||||
|
||||
A third pull followed the same day — eleven commits for a profile preview and an
|
||||
extended FAB — and is recorded in [curated-to-mantra-preview.md](./curated-to-mantra-preview.md).
|
||||
|
||||
**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
|
||||
|
||||
Reference in New Issue
Block a user