mirror of
https://github.com/vitorpamplona/amethyst.git
synced 2026-10-05 19:28:25 +00:00
A migration moves every group's MLS state, cursor, draft, read position and KeyPackages to the new phone — and left the conversations behind. Every other piece has a second source: MLS state re-derives from the coordinator's stream, a KeyPackage can be republished. A cordn message has none. It is readable exactly once, at ingest, because both seal keys are epoch-derived and the cursor this very document carries has already advanced past everything behind it. A device seeded without the messages arrives holding every group and no conversation, permanently. Carried as `amethystMessages` on the group document, beside the other additive `amethyst*` fields, so an older reader ignores it rather than failing. Bounded per group by a byte budget, newest first. These blobs go to hosts whose limits we do not know, and a handoff that fails outright because one group is chatty is a worse outcome than one that carries a deep but bounded history. Budgeted in bytes rather than messages because a single long message can cost as much as a hundred short ones. Written before the cursor on import, for the same reason the live path writes them in that order: a seeding that saved the cursor and then failed would leave a device holding a cursor past a conversation it never wrote, with no way to ask for it again. My first version had the comment saying that and the code doing the opposite. Mutation-checked: a document that silently drops the messages fails the round-trip test and nothing else. Backup still excluded, per the plan — that call is still open. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012BfD4txdnsaPRXmNXbup9n
commons plans
Audited 2026-06-30 (+ 2026-09-12 split entry). 7 plans: 3 shipped, 2 in-progress, 2 queued, 0 abandoned.
In progress
| Plan | Summary |
|---|---|
| 2026-05-04-custom-feeds-plan.md | Custom feed creation/discovery/management for Desktop; core model + builder + kind 31890 + desktop UI shipped, but relay-filter layer, DVM marketplace, kind 10090 sync, and list resolution still pending. |
| 2026-05-06-nest-subscription-manager-extraction.md | Split the per-speaker subscription state machine out of NestViewModel; only the ActiveSubscription stepping-stone is extracted so far. |
Queued
| Plan | Summary |
|---|---|
| 2026-04-21-event-renderer.md | Cross-platform UI-agnostic RenderedEvent subsystem shared by Amy, Desktop, and Android; not started. |
| 2026-05-30-amethyst-to-commons-migration.md | Roadmap to move shared amethyst Android code into commons; keystone Account/LocalCache extraction not begun. |
| 2026-08-03-poll-results-page.md | Extended NIP-88 poll results page (per-option counts + who voted for what) for Android and Desktop; also specifies four tally-correctness fixes and the missing poll-relay subscription. Proposed, not started. |
Shipped
| Plan | Summary |
|---|---|
| 2026-09-12-audit-findings.md | Bug/performance audit of commons + commonsUI after the split: 34 verified fixes shipped, 4 deferred with rationale, 6 rejected. |
| 2026-09-12-commons-ui-split.md | Split the Compose half of commons into the new :commonsUI module (same packages, api(:commons)), so cli no longer carries Compose/Skiko; records the classification method and follow-ups. |
Archived (shipped)
| Plan | Summary |
|---|---|
| archive/2026-05-04-custom-feeds-testing-sheet.md | Test sheet recording the completed custom-feeds phases (unit + manual coverage). |
| archive/2026-05-05-feed-builder-enhancements-plan.md | Six FeedBuilderDialog enhancements (npub decode, author search, kind filters, edit/delete, save-as-feed, exclude authors) — all landed. |