docs: Phase 124 complete (v0.8.89) and Phase 125 planned
Mark Phase 124 items done (search GUILD_SYNC slice, live prefs mesh, companion pear run boot, folder unread badges). Document new smokes, guildSearchIndex payload field, mux-wire notifications mesh, and plan Phase 125 for per-device settings swarms and live search mesh E2E. Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -154,6 +154,10 @@ Pearcord validates itself without manual QA.
|
||||
| `npm run test:companion-readonly` | Read-only companion mode (`COMPANION_READONLY_SMOKE_OK`) |
|
||||
| `npm run test:companion-boot` | Companion stack + stage entry (`COMPANION_BOOT_SMOKE_OK`, `COMPANION_STAGE_OK`) |
|
||||
| `npm run test:search-index-persist` | Persisted guild search index (`SEARCH_INDEX_PERSIST_SMOKE_OK`) |
|
||||
| `npm run test:search-index-guild-sync` | Search index via `GUILD_SYNC.guildSearchIndex` (`SEARCH_INDEX_GUILD_SYNC_SMOKE_OK`) |
|
||||
| `npm run test:onboarding-search-index-guild-sync` | Onboarding + search index GUILD_SYNC (`ONBOARDING_SEARCH_INDEX_GUILD_SYNC_SMOKE_OK`) |
|
||||
| `npm run test:notification-prefs-mesh-live` | Live SETTINGS_UPDATE mesh + platform prefs (`NOTIFICATION_PREFS_MESH_LIVE_SMOKE_OK`) |
|
||||
| `npm run test:server-folder-unread` | Folder rail badge aggregates guild unread (`SERVER_FOLDER_UNREAD_SMOKE_OK`) |
|
||||
| `npm run test:onboarding-search-mesh-toggle` | Search mesh IPC toggle (`ONBOARDING_SEARCH_MESH_TOGGLE_SMOKE_OK`) |
|
||||
| `npm run test:threads-panel-filter-live` | Live mesh thread in panel filter (`THREADS_PANEL_FILTER_LIVE_SMOKE_OK`) |
|
||||
| `npm run test:worker-stage` | Pear stage dry-run includes worker entry |
|
||||
|
||||
+1
-1
@@ -33,4 +33,4 @@ Boot gate (chained after desktop `test:boot`):
|
||||
cd apps/pearcord && npm run test:companion-boot
|
||||
```
|
||||
|
||||
Runs `smoke-companion-boot.cjs` plus `companion:stage-dry` verifying `/companion/index.js` is staged.
|
||||
Runs `smoke-companion-boot.cjs`, verifies `/companion/index.js` is staged, then **`test-companion-pear-run.sh`** (`pear run` pre-run, `COMPANION_PEARRUN_OK`). Chained from `npm run test:boot` after Phase 124 smokes.
|
||||
|
||||
+4
-1
@@ -29,7 +29,8 @@ When a member joins a guild over an invite, they may have **no local message his
|
||||
"automationDigestNotifyPrefs": { "notifyOnExport": true, "muteNotifications": false, "digestInboxChannelId": null, "digestRelayEnabled": false, "activeRelayPluginId": null, "updatedAt": 0 },
|
||||
"digestRelayPlugins": [ { "id", "pluginId", "label", "transport", "relayLabel", "manifestVersion" } ],
|
||||
"digestRelayHandoff": { "exportedAt": 0, "snapshotId": null, "format": "text", "subject": "…" },
|
||||
"hookFailureDigest": { "digest": { "totalFailures": 0, "topHooks": [] }, "exportedAt": 0 }
|
||||
"hookFailureDigest": { "digest": { "totalFailures": 0, "topHooks": [] }, "exportedAt": 0 },
|
||||
"guildSearchIndex": { "guildId": "…", "rows": [ { "messageId", "channelId", "content", "authorId", "createdAt" } ], "exportedAt": 0 }
|
||||
}
|
||||
```
|
||||
|
||||
@@ -73,6 +74,8 @@ When a member joins a guild over an invite, they may have **no local message his
|
||||
|
||||
**v0.8.84:** `auditExportSchedule.filter` gossips on `GUILD_SYNC`. Mods can enable `pushCsvOnMemberJoin` to re-push signed CSV when members join (debounced). New members discovered via `GUILD_SYNC` ingest also trigger the debounced push (not only live `MEMBER_JOIN` RPC). Combined onboarding + GUILD_SYNC smoke: `test:onboarding-guild-sync-audit-csv`.
|
||||
|
||||
**v0.8.89:** `guildSearchIndex` (up to 200 compact rows from `pearcord-search`) syncs on `GUILD_SYNC` so joiners can search guild history without a full local rebuild. Persisted under `{storagePath}/guild-search-index/{guildId}.json` after ingest.
|
||||
|
||||
## When sync is sent
|
||||
|
||||
| Trigger | Who pushes |
|
||||
|
||||
+4
-1
@@ -68,12 +68,15 @@ pearcord:settings:{userId}
|
||||
|
||||
When you save notification prefs, the newest `updatedAt` wins across peers (last-write-wins). No central server.
|
||||
|
||||
**v0.8.89:** Settings gossip uses `pearcord-drive/mux-wire` (`openWireChannel` + `wireReady`) so live mesh delivery matches guild/contacts meshes. Smoke: `npm run test:notification-prefs-mesh-live` (live wire + platform `updateNotificationPrefs` ingest).
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
cd apps/pearcord && npm run test:settings-sync
|
||||
cd apps/pearcord && npm run test:notification-prefs-mesh-live
|
||||
```
|
||||
|
||||
## Module
|
||||
|
||||
`modules/pearcord-notifications` — protomux `pearcord-settings-v1`
|
||||
`modules/pearcord-notifications` — protomux `pearcord-settings-v1` over `mux-wire`
|
||||
|
||||
+19
-6
@@ -308,16 +308,29 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
||||
|
||||
---
|
||||
|
||||
### Phase 124 — Notifications & search polish (planned)
|
||||
### Phase 125 — Settings mesh & search depth (planned)
|
||||
|
||||
| ID | Item | Status |
|
||||
|----|------|--------|
|
||||
| P124-1 | Search index GUILD_SYNC gossip slice for multi-device | [ ] |
|
||||
| P124-2 | Push notification prefs mesh sync smoke | [ ] |
|
||||
| P124-3 | Companion pear run live boot (display) smoke | [ ] |
|
||||
| P124-4 | Discord parity: channel folders + unread badges refresh | [ ] |
|
||||
| P125-1 | Per-device settings swarm keypair (multi-device live prefs) | [ ] |
|
||||
| P125-2 | Search index mesh fanout query live E2E (RPC 77/78) | [ ] |
|
||||
| P125-3 | Companion send queue read-only → compose draft sync | [ ] |
|
||||
| P125-4 | Server folder drag-reorder + collapse state mesh sync | [ ] |
|
||||
|
||||
**Next:** Search index mesh sync · notification prefs E2E.
|
||||
**Next:** Device-specific settings swarm · live message search mesh · companion drafts.
|
||||
|
||||
---
|
||||
|
||||
### Phase 124 — Notifications & search polish (v0.8.89)
|
||||
|
||||
| ID | Item | Status |
|
||||
|----|------|--------|
|
||||
| P124-1 | Search index GUILD_SYNC gossip slice for multi-device | [x] |
|
||||
| P124-2 | Live notification prefs SETTINGS_UPDATE mesh (`mux-wire`) + smoke | [x] |
|
||||
| P124-3 | Companion `pear run` live boot in boot gate | [x] |
|
||||
| P124-4 | Server folder rail badge aggregates guild unread | [x] |
|
||||
|
||||
**Next:** ~~Search index GUILD_SYNC · prefs mesh wire · companion pear run · folder badges~~ (Phase 124).
|
||||
|
||||
---
|
||||
|
||||
|
||||
@@ -23,6 +23,8 @@ Guild and forum scopes are only available in server (`guild`) mode. Forum scope
|
||||
|
||||
**v0.8.87:** `GuildSearchIndexStore` persists compact rows under `{storagePath}/guild-search-index/{guildId}.json`. Chat header **Mesh** checkbox toggles `includeMesh` on `update-search`. `view.searchIndexMeta` reports persisted row count.
|
||||
|
||||
**v0.8.89:** `GUILD_SYNC` carries `guildSearchIndex` (`exportGuildSearchIndexSlice` / `ingestGuildSearchIndexSlice`) so linked devices and new members receive a compact search index without rebuilding from full history. Smokes: `test:search-index-guild-sync`, `test:onboarding-search-index-guild-sync`.
|
||||
|
||||
HyperDB engine scans per `channelId` when the index is cold. JSON engine uses `{ guildId }` find as fallback.
|
||||
|
||||
## IPC
|
||||
|
||||
Reference in New Issue
Block a user