| Commit message (Expand) | Author | Age | Files | Lines |
| * | mnp 3.1: per-account blobs the node cannot read | Christophe Besson | 9 days | 1 | -4/+48 |
| * | docs: playlists — storage split, queue ops, and the UI design | Christophe Besson | 10 days | 2 | -290/+831 |
| * | feat(hub): drop files and folders onto Files to upload them | Christophe Besson | 10 days | 1 | -0/+12 |
| * | feat(hub): Videos and Music list their cards a page at a time | Christophe Besson | 10 days | 1 | -0/+9 |
| * | feat(hub): session lifetime is an admin setting, and a browser signs out when... | Christophe Besson | 11 days | 1 | -0/+15 |
| * | feat(hub): usernames are at least 8 characters at registration | Christophe Besson | 11 days | 1 | -1/+2 |
| * | feat: a group can be left out of Search, and Search tries every node | Christophe Besson | 11 days | 2 | -0/+17 |
| * | chore: bump version to 0.14.0 | Christophe Besson | 11 days | 1 | -1/+1 |
| * | fix(hub): Argon2 runs off the event loop, on exactly one worker | Christophe Besson | 12 days | 1 | -1/+1 |
| * | fix(hub): a per-account sign-in lockout, and a reviewed unauthenticated surface | Christophe Besson | 12 days | 1 | -1/+44 |
| * | fix(hub): federation is closed until two hubs have run it | Christophe Besson | 12 days | 1 | -1/+24 |
| * | docs: what this week's review left open, and a harness that lies | Christophe Besson | 12 days | 1 | -0/+7 |
| * | fix(hub): a node that hosts nothing is not a free target, and a private group... | Christophe Besson | 12 days | 1 | -0/+19 |
| * | fix(node): chat is bounded in size and in rate | Christophe Besson | 12 days | 1 | -0/+26 |
| * | fix(node): the node's own controls take no authority from a hub token | Christophe Besson | 12 days | 1 | -0/+13 |
| * | fix(node): a transfer id names a lease, or it names nothing | Christophe Besson | 12 days | 1 | -0/+12 |
| * | fix(node): an uploaded file records who sent it | Christophe Besson | 12 days | 1 | -6/+20 |
| * | fix(packaging): the hub unit can start, and nothing carries the migration path | Christophe Besson | 13 days | 1 | -0/+1 |
| * | feat(hub): the mail state is a panel section, and a ceiling falling is an event | Christophe Besson | 13 days | 1 | -1/+2 |
| * | docs: AV16–AV17, and why node --check is not the check | Christophe Besson | 13 days | 1 | -0/+2 |
| * | docs: AV13–AV15, and two lessons from how they were found | Christophe Besson | 13 days | 1 | -2/+15 |
| * | docs: AV9–AV12, and the two shapes that keep producing them | Christophe Besson | 13 days | 1 | -1/+21 |
| * | docs: availability between members is a finding category | Christophe Besson | 13 days | 1 | -0/+29 |
| * | fix: an empty group claim is a claim on nothing | Christophe Besson | 13 days | 2 | -2/+20 |
| * | fix(hub): an administrator can erase an account that owns groups | Christophe Besson | 2026-09-11 | 1 | -5/+19 |
| * | fix(hub): the asset fingerprint covers every file under static/ | Christophe Besson | 2026-09-11 | 2 | -4/+6 |
| * | docs: remove the documents MESHBAY_DESIGN.md replaces | Christophe Besson | 2026-09-11 | 27 | -19148/+29 |
| * | docs(guide): mark USERGUIDE.md deprecated | Christophe Besson | 2026-09-10 | 2 | -1/+30 |
| * | fix(node): the handshake ack dropped one app's directories | Christophe Besson | 2026-09-10 | 1 | -1/+23 |
| * | docs: point the superseded drafts at the design document | Christophe Besson | 2026-09-10 | 23 | -10/+255 |
| * | docs(mnp): the protocol reference, brought to the cleanup push | Christophe Besson | 2026-09-10 | 2 | -0/+2713 |
| * | docs: MESHBAY_DESIGN.md — one reference for the design | Christophe Besson | 2026-09-10 | 2 | -0/+3787 |
| * | feat(hub): pin the app controls while a library scrolls | Christophe Besson | 2026-09-10 | 1 | -1/+16 |
| * | fix(node): a video the browser cannot decode is re-encoded, not refused | Christophe Besson | 2026-09-09 | 1 | -1/+1 |
| * | fix(spa): a reconnect must give the Chat composer back | Christophe Besson | 2026-09-09 | 1 | -1/+2 |
| * | feat(client): create the system tray at launch, not on first minimise | Christophe Besson | 2026-09-08 | 1 | -0/+33 |
| * | feat(hub): cap a directory zip at 512 MB | Christophe Besson | 2026-09-08 | 1 | -1/+6 |
| * | fix(hub): stop badging every poster "unmatched" when TMDB is off | Christophe Besson | 2026-09-08 | 1 | -0/+45 |
| * | feat(chat): Tier 2 — a member verifies another member's device itself | Christophe Besson | 2026-09-07 | 1 | -35/+77 |
| * | Merge origin/main into the chat encryption work | Christophe Besson | 2026-09-07 | 2 | -2/+2 |
| |\ |
|
| | * | feat(mnp)!: seal the upload under the group key | Christophe Besson | 2026-09-07 | 1 | -1/+1 |
| | * | refactor(mnp)!: remove stream_seg, the last unencrypted content message | Christophe Besson | 2026-09-07 | 1 | -1/+1 |
| * | | feat(chat): encrypt group chat under per-device epoch keys (MNP 2.0) | Christophe Besson | 2026-09-07 | 3 | -27/+863 |
| |/ |
|
| * | fix(node): remove --upload-dir rather than document it | Christophe Besson | 2026-09-07 | 1 | -0/+10 |
| * | chore(node): finish Phase 3 — CLI deprecations, Windows shapes, docs | Christophe Besson | 2026-09-07 | 1 | -4/+67 |
| * | feat(node): an upload lands in the folder it was sent to | Christophe Besson | 2026-09-06 | 1 | -2/+12 |
| * | docs(groups): the upload-policy migration is not optional after all | Christophe Besson | 2026-09-06 | 1 | -2/+15 |
| * | feat(client): Phase 2 — per-app settings panes, folder tree, multi-directory | Christophe Besson | 2026-09-06 | 2 | -6/+123 |
| * | fix(groups): finish Phase 1 — MNP root management, upload targets, eject state | Christophe Besson | 2026-09-06 | 3 | -39/+177 |
| * | feat: groups refactor Phase 1 — root RO/RW model + shared directories UI | Christophe Besson | 2026-09-06 | 1 | -0/+657 |