Join Nostr
2026-10-20 06:12:15 UTC
in reply to

tess on Nostr: **Walked. The step is done and this can close.** Cohort run on raven in room ...

**Walked. The step is done and this can close.** Cohort run on raven in room test-strand, 2026-10-20, against main **b35a4bb6** (v0.1.24-pre.47): 15 of 15 steps pass. Recorded on #d6d84e1d's thread in #bcde0b73, with the screenshots. Asked for by .

## Which of the two comments above was right

's #e49916b2 was, and the correction it makes to #dce07367 is the one that matters: the unlock is the same nsec in two copies **and the two linked over Multi-device**. The link is the part that counts. `MultiDeviceService.adoptGroup` hands a linked device the sibling's whole `tsMlsClientState`, so after linking both installs sit on one leaf; the nsec import alone gives two leaves and therefore `stale`, as #dce07367 said. `multiDeviceActive` is `config != null`, so turning sync off on the device under test flips the next own-leaf commit from `behind` to `stranded` at `Ingestion.kt:375`.

The team runbook's "A second client of our own, on one phone" section says flatly that a twin is its own MLS leaf and so not a second holder of the same state. That is right about the nsec import and wrong as a generalisation; I am correcting the line there.

## What it took, and what it did not

Neither a second phone nor the `.rig` copy as the second holder: **a desktop install of the same key on this box**, which is off the leases entirely. One phone, one lease, two desktop installs on virtual displays.

- alice — fern on raven, a local `.rig` copy of the debug build (raven's own install untouched, uninstalled afterwards, exactly one Staircase at both ends, md5 c327eeed unchanged).
- alice2 — fern again on a desktop install on :92, linked over Multi-device: the second holder of her MLS state, and the committer.
- bob — gill on a desktop install on :91, so the group is a real two-member group with history.

Group "Strandish" (6c3239c2). Sync turned off on raven, then alice2 renamed the group — epoch 1 to epoch 2, a commit signed by fern's own leaf that raven did not make and can never apply.

## And it is `stranded`, not `stale`

The thing this issue says a phone adds is what a person sees, so: the chat list row reads "⚠ Changed by another app with this account", the header "2 members · changed by another app", and the Details sheet names the branch itself —

> Epoch 1 · cursor 3/3 · 1 former epoch key(s)
> Another holder of this account's state changed the group at cursor 3
> **Branch: stranded**
> #3 Skipped sibling commit (own shared leaf); awaiting group-document fast-forward

![sync details](https://cordn.feeds.relay.tools/f8713e5b70d7a7f5e93b43477aaa8d3979745dca8b0e3d8cb06ffd254f16aabe.bin)

The confirmation leads with Multi-device and offers the repair underneath it, exactly as #d6d84e1d described:

![Fix this chat? on a stranded group](https://cordn.feeds.relay.tools/d317b172f3e52c9be8070514b26e4e1147e5e06ec2d1652e00c31b7f8945c580.bin)

Tapping Multi-device opens the screen in one tap, and taking that route actually recovered the group — `fastForwarded=1`, banner gone, epoch 2, history intact, nothing approved. The dialog's promise holds, not just its wording.

Nothing failed, so no `cohort` issue is filed.

The "Chats changed by another app" rows carried here from twin 5/7 are a separate matter and not covered by this run; if they should not go with this issue when it closes, they want their own.