docs: Phase 76 server folders (v0.8.40)

Add SERVER_FOLDERS.md, mark P76-1 complete in PLATFORM_ROADMAP and
PEARCORD_PARITY, extend AUTOMATED_TESTING and GITEA_DEVELOPER for
pearcord-server-folders, and update parity next-tranche notes.

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-22 02:27:31 -04:00
co-authored by Cursor
parent 407b6c7322
commit 6344060fe9
5 changed files with 71 additions and 3 deletions
+1
View File
@@ -33,6 +33,7 @@ Pearcord validates itself without manual QA.
| `npm run test:dm-encrypt` | DM seal roundtrip (`DM_ENCRYPT_SMOKE_OK`) |
| `npm run test:threads` | Thread channels (`THREADS_SMOKE_OK`) |
| `npm run test:threads-panel` | Threads panel unread + archived (`THREADS_PANEL_SMOKE_OK`) |
| `npm run test:server-folders` | Server rail folders + prefs CRUD (`SERVER_FOLDERS_SMOKE_OK`) |
| `npm run test:slash` | Slash commands + gossip (`SLASH_SMOKE_OK`) |
| `npm run test:bot-events` | Bot event fanout (`BOT_EVENTS_SMOKE_OK`) |
| `npm run test:contacts` | Friend request gossip + accept (`CONTACTS_SMOKE_OK`) |
+1
View File
@@ -112,6 +112,7 @@ git remote -v
| `pearcord-bot-runner` | Headless bot worker |
| `pearcord-notifications` | Inbox + badges |
| `pearcord-settings` | User appearance prefs + `USER_PREFS_UPDATE` gossip |
| `pearcord-server-folders` | Client-side server rail folder layout (prefs-backed) |
| `pearcord-step-up` | Local step-up PIN for sensitive actions |
| `pearcord-forum` | Forum post tags + palette helpers |
| `pearcord-forum-search` | Forum post search haystack helpers |
+2 -2
View File
@@ -145,7 +145,7 @@ Phases **02** and **4** are largely complete; **3** (live audio) and **5** (n
| P63-1 | Role-restricted emoji manage UI (v0.8.28) | [x] |
| P64-1 | Discovery mesh live sync (v0.8.29) | [x] |
**Next tranches (Phase 75+):** Server folders · Electron live `open-url` · activity feed.
**Next tranches (Phase 76+):** Electron live `open-url` · activity feed · channel topic UI.
When Phase 5 checklist is `[x]`, copy open items here into tracked rows in `PLATFORM_ROADMAP.md`.
@@ -168,7 +168,7 @@ When Phase 5 checklist is `[x]`, copy open items here into tracked rows in `PLAT
| ID | Item | Status |
|----|------|--------|
| P76-1 | Server folders (client-side guild grouping) | [ ] |
| P76-1 | Server folders (client-side guild grouping) | [x] |
| P76-2 | Electron `open-url` when Pear appling ships custom bundle | [ ] |
| P76-3 | Activity / Now Playing feed (P2P presence extension) | [ ] |
| P76-4 | Channel topic + description UI | [ ] |
+15 -1
View File
@@ -249,6 +249,19 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
---
### Phase 76 — Server folders (v0.8.40)
| ID | Item | Status |
|----|------|--------|
| P76-1 | `pearcord-server-folders` layout + prefs CRUD | [x] |
| P76-2 | Platform methods + `view.serverRail` | [x] |
| P76-3 | Rail UI (stack/collapse) + folder IPC | [x] |
| P76-4 | smoke-server-folders + SERVER_FOLDERS.md | [x] |
**Next:** Electron live `open-url` · activity / Now Playing feed · channel topic UI.
---
### Phase 75 — Threads panel (v0.8.39)
| ID | Item | Status |
@@ -258,7 +271,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
| P75-3 | Archived toggle + `set-threads-panel-archived` IPC | [x] |
| P75-4 | smoke-threads-panel + THREADS_PANEL.md | [x] |
**Next:** Server folders · Electron `open-url` · activity feed.
**Next:** ~~Server folders~~ (Phase 76) · Electron `open-url` · activity feed.
---
@@ -936,6 +949,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
### Changelog
- **2026-05-22** — v0.8.40: server folders (`pearcord-server-folders`, rail layout, folder IPC, `test:server-folders`, SERVER_FOLDERS.md).
- **2026-05-22** — v0.8.39: threads panel (`threadsPanel` view, unread badges, archived toggle, `test:threads-panel`, THREADS_PANEL.md).
- **2026-05-22** — v0.8.38: invite + guild `pearcord://` links (`formatInviteDeepLink`, `navigateDeepLink` kinds, invite modal link, `test:invite-deep-link`, `test:guild-deep-link`).
- **2026-05-22** — v0.8.37: OS `pearcord://` handler (`pearcord-protocol`, argv launch, `register-protocol`, `test:os-deep-link`, PEARCORD_PROTOCOL.md).
+52
View File
@@ -0,0 +1,52 @@
# Server folders
Client-side **server folder** grouping for the left server rail (Discord-style). Folder state is stored in **user prefs** (`serverFolders`) and synced P2P via `USER_PREFS_UPDATE` gossip — no central server.
## Module
`pearcord-server-folders` — pure layout + CRUD helpers:
| Export | Role |
|--------|------|
| `normalizeServerFolders` | Validate prefs shape |
| `buildServerRailLayout` | Ordered `segments` + `ungrouped` guild rows |
| `createFolder` / `deleteFolder` / `assignGuildToFolder` | Immutable state updates |
| `setFolderCollapsed` / `renameFolder` | UI state |
| `FOLDER_COLORS` | Preset accent colors |
## Platform API
| Method | Description |
|--------|-------------|
| `getServerFolders()` | Normalized prefs |
| `createServerFolder({ name, color })` | New folder |
| `deleteServerFolder(folderId)` | Remove folder (guilds ungrouped) |
| `assignGuildToFolder(guildId, folderId \| null)` | Move guild |
| `setServerFolderCollapsed(folderId, collapsed)` | Expand/collapse |
| `renameServerFolder(folderId, name)` | Rename |
`view()` includes `serverRail` (layout) and `folderColors`.
## UI / IPC
| IPC `type` | Action |
|------------|--------|
| `create-server-folder` | Create; optional `initialGuildId` assigns first guild |
| `delete-server-folder` | Delete folder |
| `assign-guild-to-folder` | Move guild (`folderId` null = ungroup) |
| `set-server-folder-collapsed` | Toggle expand |
| `rename-server-folder` | Rename |
- **Right-click** a server icon → create folder / move to folder / remove from folder.
- **Right-click** folder head/stack → rename / delete.
- **📁** button on rail → create empty folder.
## Smoke test
```bash
cd apps/pearcord && npm run test:server-folders
```
## P2P note
Folders are **per-user** organization only. Other peers see the same guilds on the mesh; folder layout is local preference replicated on your devices via settings gossip.