Understand a file somebody sent #62
@@ -93,16 +93,16 @@ From `E2E/E2EInbox.swift`, which is the real feature list.
|
||||
| Multi-device fan-out | ✅ one envelope per device, partial delivery reported |
|
||||
| History at rest | ✅ encrypted, keyed by person not device |
|
||||
| Session restore across restarts | ✅ credential and device both survive |
|
||||
| Reactions | 🟡 codec done, no UI — blocked on the transcript carrying a `mid` |
|
||||
| Edit a sent message (§6.15) | 🟡 codec done, in progress — an inbound edit is recognised and not drawn as a duplicate bubble; applying it needs the same `mid` |
|
||||
| Reactions | ✅ transcript carries a `mid`; long-press gives a five-emoji row, one emoji per person |
|
||||
| Edit a sent message (§6.15) | 🟡 codec back, and the `mid` it was blocked on now exists — applying an inbound edit and offering the control are UI work |
|
||||
| Drafts that survive a relaunch | ✅ sealed in the vault, not SharedPreferences |
|
||||
| Forwarding (§6.16) | 🟡 codec done, in progress — an inbound forward is recognised and shown as one; originating needs #10 |
|
||||
| Forwarding (§6.16) | 🟡 codec back; originating needs the UI |
|
||||
| Group message ids and quotes (§6.9) | ✅ transcript stores both; sent and queued copies share one id |
|
||||
| Mentions (§6.18) | ✅ codec, an `@` picker in the group composer, and ids recorded at pick time rather than re-derived from the text |
|
||||
| Per-message timers (§6.17) | ✅ combining rule and per-message pruning; composer control in progress |
|
||||
| Reactions | 🟡 codec done, no UI |
|
||||
| Search inside messages | ✅ scanned, never indexed |
|
||||
| Search inside messages | ✅ scanned, never indexed — no plaintext index at rest |
|
||||
| Pinned message (§6.19) | 🟡 codec done, in progress — an inbound pin is recognised and not drawn as an empty bubble |
|
||||
| Pinned message (§6.19) | 🟡 codec back; the banner and the control are UI work |
|
||||
| Photos | ✅ send via the system picker, render inline |
|
||||
| Voice notes (record + play) | ✅ AAC/MP4, tap to record, tap to send |
|
||||
| Stories, and seen-state | ✅ sent per-contact, expired bytes deleted |
|
||||
@@ -150,6 +150,30 @@ emulator.
|
||||
|
||||
---
|
||||
|
||||
## The 2 September revert
|
||||
|
||||
Twenty-five Android merge requests landed that evening and `aebf41e`
|
||||
reverted all of them — 5,016 lines across 41 files — for the same reason iOS
|
||||
was reverted an hour earlier: the branches had never existed together, and
|
||||
resolving them mechanically produced code that compiled and passed while
|
||||
being wrong.
|
||||
|
||||
**All twenty-five are back**, reinstated one at a time on
|
||||
`feat/files-and-wallet-parity`, each built and tested before the next was
|
||||
started. Six of them could not be cherry-picked at all: the originals were cut
|
||||
from a tree whose story features looked different from the versions rebuilt in
|
||||
the meantime, so applying them whole would have left two implementations of
|
||||
mute, text stories and story replies under different names — no compile error,
|
||||
and exactly the kind of divergence that rots. Those were taken by hand, feature
|
||||
by feature.
|
||||
|
||||
⚠️ One deliberate divergence from the originals: the mention wire key stays
|
||||
`men`, not `ment`, and mentions are `List<Int>` rather than `List<Long>`. That
|
||||
is what the iOS engine speaks and what the two were verified interoperating on;
|
||||
switching to match the reverted commits would have broken iOS silently.
|
||||
|
||||
---
|
||||
|
||||
## Files and Wallet
|
||||
|
||||
From `Sources/Views/Files/*` and `Sources/Wallet/*`, both of which moved into
|
||||
|
||||
Reference in New Issue
Block a user