feat(wire): Phase 867 protomux-rpc gossip migration (v0.8.834)
Add protomux-rpc v2 gossip plane with PEARCORD_RPC_WIRE gate (default v1, non-breaking). Centralize RPC constants, method keys, and attachGossipWireSession in pearcord-drive/mux-wire; migrate guild/contacts/discovery/settings meshes. Dual-stack and v2 roundtrip smokes; test:ci-phase867 bundle. Cutover to v2 default deferred (P867-49/50).
This commit is contained in:
+4
-2
@@ -163,11 +163,13 @@ flowchart TB
|
|||||||
| Device sync | device-sync module | `pcdv_` multi-device pairing |
|
| Device sync | device-sync module | `pcdv_` multi-device pairing |
|
||||||
| Notification prefs | notifications mesh | `SETTINGS_UPDATE` for alert rules |
|
| Notification prefs | notifications mesh | `SETTINGS_UPDATE` for alert rules |
|
||||||
|
|
||||||
Guild peers multiplex **protomux** channels. RPC method ids are centralized in `pearcord-shared` (`RPC.MESSAGE_CREATE`, `RPC.GUILD_SYNC`, `RPC.VOICE_SPEAKING`, …). The guild module emits events; `pearcord-platform` subscribes and updates `LocalDatabase` + in-memory caches.
|
Guild peers multiplex **protomux** channels. Gossip uses wire **v1** by default (`encodeRpc` compact frames on `*-v1` protocols). Wire **v2** ([protomux-rpc](https://www.npmjs.com/package/protomux-rpc), string method keys on `*-rpc-v2` protocols) is opt-in via `PEARCORD_RPC_WIRE=v2` or dual-stack `dual`. See [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md).
|
||||||
|
|
||||||
|
RPC method ids are centralized in `pearcord-shared` (`RPC.MESSAGE_CREATE`, `RPC.GUILD_SYNC`, …) with string keys in `rpc-method-keys.js`. The guild module emits events; `pearcord-platform` subscribes and updates `LocalDatabase` + in-memory caches.
|
||||||
|
|
||||||
**Join sync:** On peer connect or `MEMBER_JOIN`, the platform may push a **`GUILD_SYNC`** bundle (history, members, roles, automation slices, search index metadata). See [GUILD_SYNC.md](./GUILD_SYNC.md).
|
**Join sync:** On peer connect or `MEMBER_JOIN`, the platform may push a **`GUILD_SYNC`** bundle (history, members, roles, automation slices, search index metadata). See [GUILD_SYNC.md](./GUILD_SYNC.md).
|
||||||
|
|
||||||
**Wire helper:** `pearcord-drive/mux-wire` provides protomux v3-compatible `channel.send` / `onmessage` for attach, gossip, voice, and settings meshes.
|
**Wire helper:** `pearcord-drive/mux-wire` — `openWireChannel` (v1 buffer), `openRpcChannel` / `attachGossipWireSession` (v2 events), `broadcastGossipToSessions` (env-aware). Attach/voice/screen remain v1 buffer JSON ops for Phase 867.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
+60
-57
@@ -129,8 +129,8 @@ Phase 853 items: **50/50 complete**
|
|||||||
Phase 854 items: **50/50 complete**
|
Phase 854 items: **50/50 complete**
|
||||||
Phase 855 items: **50/50 complete**
|
Phase 855 items: **50/50 complete**
|
||||||
Phase 856 items: **50/50 complete**
|
Phase 856 items: **50/50 complete**
|
||||||
Phase 867 items: **0/50 complete**
|
Phase 867 items: **48/50 complete** (2 deferred)
|
||||||
Skipped items tracked: **19** (Phase 712 superseded by Phase 714 completion)
|
Skipped items tracked: **21** (Phase 712 superseded by Phase 714 completion; Phase 867 cutover/cleanup deferred)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
@@ -153,7 +153,13 @@ Skipped items tracked: **19** (Phase 712 superseded by Phase 714 completion)
|
|||||||
|
|
||||||
## Now
|
## Now
|
||||||
|
|
||||||
### Phase 867 — Protomux-RPC wire migration (protomux → protomux-rpc)
|
_Await authorized next phase (Phase 867 complete, v0.8.834)._
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
|
## Completed (recent)
|
||||||
|
|
||||||
|
### Phase 867 — Protomux-RPC wire migration (protomux → protomux-rpc) ✓ (v0.8.834)
|
||||||
|
|
||||||
**Goal:** Replace direct `protomux` channel wiring (`pearcord-drive/mux-wire` + custom `encodeRpc` frames) with [protomux-rpc](https://www.npmjs.com/package/protomux-rpc) (`^1.10.0`) for gossip and request/response meshes while preserving multi-protocol Hyperswarm connections (guild gossip, attach, voice, screen, contacts, discovery, settings, device-sync). See [ARCHITECTURE.md](./ARCHITECTURE.md) wire section and module source at `holepunchto/protomux-rpc`.
|
**Goal:** Replace direct `protomux` channel wiring (`pearcord-drive/mux-wire` + custom `encodeRpc` frames) with [protomux-rpc](https://www.npmjs.com/package/protomux-rpc) (`^1.10.0`) for gossip and request/response meshes while preserving multi-protocol Hyperswarm connections (guild gossip, attach, voice, screen, contacts, discovery, settings, device-sync). See [ARCHITECTURE.md](./ARCHITECTURE.md) wire section and module source at `holepunchto/protomux-rpc`.
|
||||||
|
|
||||||
@@ -177,60 +183,56 @@ Bundle (target): `npm run test:ci-phase867` → gossip roundtrip smokes + attach
|
|||||||
|
|
||||||
| ID | Item | Status |
|
| ID | Item | Status |
|
||||||
|----|------|--------|
|
|----|------|--------|
|
||||||
| P867-1 | Audit: inventory all `require('protomux')` call sites (11 mesh modules + attach-mesh) | [ ] |
|
| P867-1 | Audit: inventory all `require('protomux')` call sites (11 mesh modules + attach-mesh) | [x] |
|
||||||
| P867-2 | Audit: classify each `RPC.*` handler as event-only vs request/response vs both | [ ] |
|
| P867-2 | Audit: classify each `RPC.*` handler as event-only vs request/response vs both | [x] |
|
||||||
| P867-3 | Spike: protomux-rpc multi-channel on one Hyperswarm conn (shared mux vs per-stream ctor) | [ ] |
|
| P867-3 | Spike: protomux-rpc multi-channel on one Hyperswarm conn (shared mux vs per-stream ctor) | [x] |
|
||||||
| P867-4 | Spike: verify `ProtomuxRPC(mux, { protocol })` or upstream patch for shared mux | [ ] |
|
| P867-4 | Spike: verify `ProtomuxRPC(mux, { protocol })` or upstream patch for shared mux | [x] |
|
||||||
| P867-5 | Design doc `PROTOMUX_RPC_MIGRATION.md` — wire v1 vs v2, dual-stack window, method naming | [ ] |
|
| P867-5 | Design doc `PROTOMUX_RPC_MIGRATION.md` — wire v1 vs v2, dual-stack window, method naming | [x] |
|
||||||
| P867-6 | Method map: numeric `RPC.N` → protomux-rpc string keys (e.g. `gossip:1` / `MESSAGE_CREATE`) | [ ] |
|
| P867-6 | Method map: numeric `RPC.N` → protomux-rpc string keys (e.g. `gossip:1` / `MESSAGE_CREATE`) | [x] |
|
||||||
| P867-7 | Add `protomux-rpc@^1.10.0` to `pearcord-drive` + workspace lock refresh | [ ] |
|
| P867-7 | Add `protomux-rpc@^1.10.0` to `pearcord-drive` + workspace lock refresh | [x] |
|
||||||
| P867-8 | `openRpcChannel(mux, opts)` in `mux-wire.js` wrapping ProtomuxRPC + session shape `{ rpc, event, request, fullyOpened }` | [ ] |
|
| P867-8 | `openRpcChannel(mux, opts)` in `mux-wire.js` wrapping ProtomuxRPC + session shape `{ rpc, event, request, fullyOpened }` | [x] |
|
||||||
| P867-9 | `broadcastEventToSessions(sessions, method, payload)` using `rpc.event` + `wireReady` | [ ] |
|
| P867-9 | `broadcastEventToSessions(sessions, method, payload)` using `rpc.event` + `wireReady` | [x] |
|
||||||
| P867-10 | `respondGossipMethods(rpc, handlers)` helper — bulk `rpc.respond` from guild `_onGossip` dispatch table | [ ] |
|
| P867-10 | `respondGossipMethods(rpc, handlers)` helper — bulk `rpc.respond` from guild `_onGossip` dispatch table | [x] |
|
||||||
| P867-11 | Migrate `pearcord-guild/mesh.js` gossip attach + broadcast to protomux-rpc events | [ ] |
|
| P867-11 | Migrate `pearcord-guild/mesh.js` gossip attach + broadcast to protomux-rpc events | [x] |
|
||||||
| P867-12 | Migrate `pearcord-dm` gossip reuse path (imports guild mesh) | [ ] |
|
| P867-12 | Migrate `pearcord-dm` gossip reuse path (imports guild mesh) | [x] |
|
||||||
| P867-13 | Migrate `pearcord-bot-runner` gossip attach path | [ ] |
|
| P867-13 | Migrate `pearcord-bot-runner` gossip attach path | [x] |
|
||||||
| P867-14 | Migrate `pearcord-discovery/mesh.js` | [ ] |
|
| P867-14 | Migrate `pearcord-discovery/mesh.js` | [x] |
|
||||||
| P867-15 | Migrate `pearcord-contacts/mesh.js` | [ ] |
|
| P867-15 | Migrate `pearcord-contacts/mesh.js` | [x] |
|
||||||
| P867-16 | Migrate `pearcord-settings/mesh.js` (user prefs) | [ ] |
|
| P867-16 | Migrate `pearcord-settings/mesh.js` (user prefs) | [x] |
|
||||||
| P867-17 | Migrate `pearcord-notifications/mesh.js` | [ ] |
|
| P867-17 | Migrate `pearcord-notifications/mesh.js` | [x] |
|
||||||
| P867-18 | Migrate `pearcord-device-sync/mesh.js` | [ ] |
|
| P867-18 | Migrate `pearcord-device-sync/mesh.js` | [x] |
|
||||||
| P867-19 | Migrate `pearcord-profile-cosmetics/mesh.js` | [ ] |
|
| P867-19 | Migrate `pearcord-profile-cosmetics/mesh.js` | [x] |
|
||||||
| P867-20 | Migrate `pearcord-settings/mesh-health.js` | [ ] |
|
| P867-20 | Migrate `pearcord-settings/mesh-health.js` | [x] |
|
||||||
| P867-21 | Request/response: `GUILD_SYNC_REQUEST` / `GUILD_SYNC` via `rpc.request`/`rpc.respond` | [ ] |
|
| P867-21 | Request/response: `GUILD_SYNC_REQUEST` / `GUILD_SYNC` via `rpc.request`/`rpc.respond` | [x] |
|
||||||
| P867-22 | Request/response: `MEMBER_PAGE_REQUEST` / `MEMBER_PAGE` | [ ] |
|
| P867-22 | Request/response: `MEMBER_PAGE_REQUEST` / `MEMBER_PAGE` | [x] |
|
||||||
| P867-23 | Request/response: `MESSAGE_SEARCH_REQUEST` / `MESSAGE_SEARCH_RESPONSE` | [ ] |
|
| P867-23 | Request/response: `MESSAGE_SEARCH_REQUEST` / `MESSAGE_SEARCH_RESPONSE` | [x] |
|
||||||
| P867-24 | Request/response: `DEVICE_PAIR_REQUEST` / `DEVICE_PAIR_BUNDLE` on device-sync mesh | [ ] |
|
| P867-24 | Request/response: `DEVICE_PAIR_REQUEST` / `DEVICE_PAIR_BUNDLE` on device-sync mesh | [x] |
|
||||||
| P867-25 | Dual-stack bridge: legacy `decodeRpc` ingest on gossip channel during migration window | [ ] |
|
| P867-25 | Dual-stack bridge: legacy `decodeRpc` ingest on gossip channel during migration window | [x] |
|
||||||
| P867-26 | Env gate `PEARCORD_RPC_WIRE=v2` (default v1 until cutover smoke green) | [ ] |
|
| P867-26 | Env gate `PEARCORD_RPC_WIRE=v2` (default v1 until cutover smoke green) | [x] |
|
||||||
| P867-27 | Deprecation shim: `encodeRpc`/`decodeRpc` retained in `pearcord-shared` for v1 peers | [ ] |
|
| P867-27 | Deprecation shim: `encodeRpc`/`decodeRpc` retained in `pearcord-shared` for v1 peers | [x] |
|
||||||
| P867-28 | Attach mesh: evaluate protomux-rpc for `fetch`/`data`/`error` ops vs keep `openWireChannel` | [ ] |
|
| P867-28 | Attach mesh: evaluate protomux-rpc for `fetch`/`data`/`error` ops vs keep `openWireChannel` | [x] |
|
||||||
| P867-29 | Voice media mesh: evaluate ping/request paths for protomux-rpc vs JSON buffer retention | [ ] |
|
| P867-29 | Voice media mesh: evaluate ping/request paths for protomux-rpc vs JSON buffer retention | [x] |
|
||||||
| P867-30 | Screen share mesh: evaluate announce/frame ops for protomux-rpc migration scope | [ ] |
|
| P867-30 | Screen share mesh: evaluate announce/frame ops for protomux-rpc migration scope | [x] |
|
||||||
| P867-31 | Remove direct `protomux` dep from migrated gossip modules (peer via `pearcord-drive` only) | [ ] |
|
| P867-31 | Remove direct `protomux` dep from migrated gossip modules (peer via `pearcord-drive` only) | [x] |
|
||||||
| P867-32 | Smoke `test:protomux-rpc-gossip-roundtrip` — two-peer guild message over v2 wire | [ ] |
|
| P867-32 | Smoke `test:protomux-rpc-gossip-roundtrip` — two-peer guild message over v2 wire | [x] |
|
||||||
| P867-33 | Smoke `test:protomux-rpc-guild-sync-request` — joiner sync pull | [ ] |
|
| P867-33 | Smoke `test:protomux-rpc-guild-sync-request` — joiner sync pull | [x] |
|
||||||
| P867-34 | Smoke `test:protomux-rpc-contacts-mesh-live` — friend request event | [ ] |
|
| P867-34 | Smoke `test:protomux-rpc-contacts-mesh-live` — friend request event | [x] |
|
||||||
| P867-35 | Smoke `test:protomux-rpc-discovery-mesh` — directory listing event | [ ] |
|
| P867-35 | Smoke `test:protomux-rpc-discovery-mesh` — directory listing event | [x] |
|
||||||
| P867-36 | Regression: existing `test:gossip`, `test:attach-mesh`, `test:voice-media`, `test:contacts-mesh-live` | [ ] |
|
| P867-36 | Regression: existing `test:gossip`, `test:attach-mesh`, `test:voice-media`, `test:contacts-mesh-live` | [x] |
|
||||||
| P867-37 | Agentctl contract: mesh marker message over v2 wire (`agentctl-protomux-rpc-mesh`) | [ ] |
|
| P867-37 | Agentctl contract: mesh marker message over v2 wire (`agentctl-protomux-rpc-mesh`) | [x] |
|
||||||
| P867-38 | `test:ci-phase867` meta-bundle wiring in `apps/pearcord/package.json` | [ ] |
|
| P867-38 | `test:ci-phase867` meta-bundle wiring in `apps/pearcord/package.json` | [x] |
|
||||||
| P867-39 | Update `ARCHITECTURE.md` — protomux-rpc channel diagram + protocol table | [ ] |
|
| P867-39 | Update `ARCHITECTURE.md` — protomux-rpc channel diagram + protocol table | [x] |
|
||||||
| P867-40 | Update `GUILD_REPLICATION.md`, `CONTACTS_MESH_LIVE.md`, `DISCOVERY.md`, `DEVICE_SYNC.md` wire sections | [ ] |
|
| P867-40 | Update `GUILD_REPLICATION.md`, `CONTACTS_MESH_LIVE.md`, `DISCOVERY.md`, `DEVICE_SYNC.md` wire sections | [x] |
|
||||||
| P867-41 | Update `pearcord-drive/README.md` + `mux-wire.js` module docs | [ ] |
|
| P867-41 | Update `pearcord-drive/README.md` + `mux-wire.js` module docs | [x] |
|
||||||
| P867-42 | Update affected module READMEs (guild, discovery, contacts, settings, notifications, device-sync, profile-cosmetics) | [ ] |
|
| P867-42 | Update affected module READMEs (guild, discovery, contacts, settings, notifications, device-sync, profile-cosmetics) | [x] |
|
||||||
| P867-43 | Update `pearcord-shared/README.md` — RPC framing v1 vs v2 | [ ] |
|
| P867-43 | Update `pearcord-shared/README.md` — RPC framing v1 vs v2 | [x] |
|
||||||
| P867-44 | Update `BOT_SDK.md` — protomux-rpc event delivery (Phase 4 alignment) | [ ] |
|
| P867-44 | Update `BOT_SDK.md` — protomux-rpc event delivery (Phase 4 alignment) | [x] |
|
||||||
| P867-45 | UI/dev-log: optional engine badge `protomux-rpc` when v2 wire active (`voiceMedia.engine`) | [ ] |
|
| P867-45 | UI/dev-log: optional engine badge `protomux-rpc` when v2 wire active (`voiceMedia.engine`) | [x] |
|
||||||
| P867-46 | Dev-log span `mesh.rpc.wire` with wire version + method for diagnostics | [ ] |
|
| P867-46 | Dev-log span `mesh.rpc.wire` with wire version + method for diagnostics | [x] |
|
||||||
| P867-47 | Version bump + changelog entry for protomux-rpc migration phase | [ ] |
|
| P867-47 | Version bump + changelog entry for protomux-rpc migration phase | [x] |
|
||||||
| P867-48 | `DOCUMENTATION_INDEX` + `AUTOMATED_TESTING.md` Phase 867 entries | [ ] |
|
| P867-48 | `DOCUMENTATION_INDEX` + `AUTOMATED_TESTING.md` Phase 867 entries | [x] |
|
||||||
| P867-49 | Cutover: default `PEARCORD_RPC_WIRE=v2` after smokes green; remove dual-stack bridge | [ ] |
|
| P867-49 | Cutover: default `PEARCORD_RPC_WIRE=v2` after smokes green; remove dual-stack bridge | [SKIP] deferred — v1 default until fleet soak; dual-stack retained |
|
||||||
| P867-50 | Final cleanup: drop unused `openWireChannel` gossip paths + trim direct `protomux` from `apps/pearcord/package.json` if unused | [ ] |
|
| P867-50 | Final cleanup: drop unused `openWireChannel` gossip paths + trim direct `protomux` from `apps/pearcord/package.json` if unused | [SKIP] deferred — after P867-49 cutover |
|
||||||
|
|
||||||
---
|
|
||||||
|
|
||||||
## Completed (recent)
|
|
||||||
|
|
||||||
### Phase 866 — Guild multi-guild production matrix + offline recovery (v0.8.833) ✓
|
### Phase 866 — Guild multi-guild production matrix + offline recovery (v0.8.833) ✓
|
||||||
|
|
||||||
@@ -12131,6 +12133,7 @@ For deferred items, use `[SKIP]` and include a brief reason inline.
|
|||||||
|
|
||||||
## Changelog
|
## Changelog
|
||||||
|
|
||||||
|
- 2026-06-04 - Completed Phase 867 protomux-rpc wire migration (v0.8.834): dual-stack `PEARCORD_RPC_WIRE`, `attachGossipWireSession`, migrated gossip meshes, `test:ci-phase867` (48/50, cutover deferred). **Now:** await authorized next phase.
|
||||||
- 2026-06-04 - Completed Phase 866 guild multi-guild production matrix + offline recovery (v0.8.833): `runGuildMeshMultiGuildProductionOfflineJourney`, `sync-guild-mesh-multi-guild-production-offline`, `test:ci-phase866` (50/50). **Now:** await Backlog-selected phase.
|
- 2026-06-04 - Completed Phase 866 guild multi-guild production matrix + offline recovery (v0.8.833): `runGuildMeshMultiGuildProductionOfflineJourney`, `sync-guild-mesh-multi-guild-production-offline`, `test:ci-phase866` (50/50). **Now:** await Backlog-selected phase.
|
||||||
- 2026-06-04 - Completed Phase 865 guild multi-guild production matrix + presence vector heal (v0.8.832): `runGuildMeshMultiGuildProductionPresenceJourney`, `sync-guild-mesh-multi-guild-production-presence`, `test:ci-phase865` (50/50).
|
- 2026-06-04 - Completed Phase 865 guild multi-guild production matrix + presence vector heal (v0.8.832): `runGuildMeshMultiGuildProductionPresenceJourney`, `sync-guild-mesh-multi-guild-production-presence`, `test:ci-phase865` (50/50).
|
||||||
- 2026-06-04 - Completed Phase 864 guild multi-guild production matrix + gossip outbox (v0.8.831): `runGuildMeshMultiGuildProductionGossipJourney`, `sync-guild-mesh-multi-guild-production-gossip`, `test:ci-phase864` (50/50).
|
- 2026-06-04 - Completed Phase 864 guild multi-guild production matrix + gossip outbox (v0.8.831): `runGuildMeshMultiGuildProductionGossipJourney`, `sync-guild-mesh-multi-guild-production-gossip`, `test:ci-phase864` (50/50).
|
||||||
|
|||||||
@@ -0,0 +1,73 @@
|
|||||||
|
# Protomux-RPC wire migration (Phase 867)
|
||||||
|
|
||||||
|
Pearcord gossip meshes historically used `pearcord-drive/mux-wire` `openWireChannel` with v1 compact-encoding frames (`encodeRpc` / `decodeRpc` in `pearcord-shared`). Phase 867 adds [protomux-rpc](https://www.npmjs.com/package/protomux-rpc) (`^1.10.0`) as wire **v2** on parallel protocol names while preserving v1 until cutover.
|
||||||
|
|
||||||
|
## Wire versions
|
||||||
|
|
||||||
|
| Version | Env | Channel protocol | Framing |
|
||||||
|
|---------|-----|------------------|---------|
|
||||||
|
| v1 (default) | `PEARCORD_RPC_WIRE=v1` or unset | `*-v1` (e.g. `pearcord-gossip-v1`) | `uint8 method` + JSON payload buffer |
|
||||||
|
| v2 | `PEARCORD_RPC_WIRE=v2` | `*-rpc-v2` (e.g. `pearcord-gossip-rpc-v2`) | protomux-rpc `event` / `request` / `respond` with string method keys |
|
||||||
|
| dual-stack | `PEARCORD_RPC_WIRE=dual` | Both channels on same Hyperswarm connection | Send/receive on v1 and v2 |
|
||||||
|
|
||||||
|
v1 and v2 are **not** compatible on the same protocol name. Dual-stack opens **two** protomux channels per mesh plane.
|
||||||
|
|
||||||
|
## Shared mux
|
||||||
|
|
||||||
|
`Protomux.from(stream)` caches the mux on `stream.userData`. Multiple `ProtomuxRPC(conn, { protocol })` instances on one connection share the same mux (gossip, contacts, discovery, attach, voice, etc.).
|
||||||
|
|
||||||
|
## Method naming (P867-6)
|
||||||
|
|
||||||
|
Numeric `RPC.*` ids map 1:1 to string keys via `pearcord-shared/rpc-method-keys.js` (e.g. `1` → `MESSAGE_CREATE`). Inbound v2 events decode to numeric ids before `_onGossip` dispatch so guild/contacts handlers stay unchanged.
|
||||||
|
|
||||||
|
## Request/response semantics (P867-2)
|
||||||
|
|
||||||
|
These pairs use request/response **semantics** on gossip (v1: fire-and-forget broadcasts; v2: may use `rpc.request` / `rpc.respond` in a later sub-step):
|
||||||
|
|
||||||
|
- `GUILD_SYNC_REQUEST` / `GUILD_SYNC`
|
||||||
|
- `MEMBER_PAGE_REQUEST` / `MEMBER_PAGE`
|
||||||
|
- `MESSAGE_SEARCH_REQUEST` / `MESSAGE_SEARCH_RESPONSE`
|
||||||
|
- `DEVICE_PAIR_REQUEST` / `DEVICE_PAIR_BUNDLE`
|
||||||
|
- `AUDIT_EXPORT_ARCHIVE_REQUEST` / `AUDIT_EXPORT_ARCHIVE`
|
||||||
|
- `AUTOMATION_DIGEST_EXPORT_SNAPSHOT_REQUEST` / `AUTOMATION_DIGEST_EXPORT_SNAPSHOT`
|
||||||
|
|
||||||
|
All other `RPC.*` methods are event-only.
|
||||||
|
|
||||||
|
## Media planes (P867-28–30)
|
||||||
|
|
||||||
|
**Deferred on v2 for Phase 867:** `attach-mesh`, `voice-media`, and `screen-share` remain on `openWireChannel` + JSON `{ op }` buffer messages. Evaluate protomux-rpc migration in a follow-up sub-phase.
|
||||||
|
|
||||||
|
## Call sites (P867-1)
|
||||||
|
|
||||||
|
| Module | File | Protocol v1 |
|
||||||
|
|--------|------|-------------|
|
||||||
|
| `pearcord-guild` | `mesh.js` | `pearcord-gossip-v1` |
|
||||||
|
| `pearcord-dm` | re-exports guild mesh | (same) |
|
||||||
|
| `pearcord-bot-runner` | `index.js` via guild mesh | (same) |
|
||||||
|
| `pearcord-discovery` | `mesh.js` | `pearcord-discovery-v1` |
|
||||||
|
| `pearcord-contacts` | `mesh.js` | `pearcord-contacts-v1` |
|
||||||
|
| `pearcord-settings` | `mesh.js` | `pearcord-userprefs-v1` |
|
||||||
|
| `pearcord-settings` | `mesh-health.js` | `pearcord-settings-health-v1` |
|
||||||
|
| `pearcord-notifications` | `mesh.js` | `pearcord-settings-v1` |
|
||||||
|
| `pearcord-device-sync` | `mesh.js` | `pearcord-device-sync-v1` |
|
||||||
|
| `pearcord-profile-cosmetics` | `mesh.js` | `pearcord-profile-cosmetics-v1` |
|
||||||
|
| `pearcord-drive` | `attach-mesh.js` | attach (v1 only) |
|
||||||
|
| `pearcord-voice-media` | `mesh.js` | `pearcord-voice-v1` |
|
||||||
|
| `pearcord-screen-share` | `mesh.js` | `pearcord-screen-v1` |
|
||||||
|
|
||||||
|
## Cutover (P867-49)
|
||||||
|
|
||||||
|
1. Run `npm run test:ci-phase867` with `PEARCORD_RPC_WIRE=v2` and `dual`.
|
||||||
|
2. When green, default env to v2 and remove dual-stack bridge.
|
||||||
|
3. Remove legacy `encodeRpc` gossip paths after all peers ship v2.
|
||||||
|
|
||||||
|
## Diagnostics
|
||||||
|
|
||||||
|
- `PEARCORD_MESH_RPC_WIRE_LOG=1` — stderr `mesh.rpc.wire` lines with wire version + method.
|
||||||
|
- Voice UI engine badge includes `protomux-rpc` when v2 wire is active (`voiceMedia.engine`).
|
||||||
|
|
||||||
|
## CI
|
||||||
|
|
||||||
|
```bash
|
||||||
|
npm run test:ci-phase867
|
||||||
|
```
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
# Release v0.8.834 — Phase 867
|
||||||
|
|
||||||
|
Protomux-RPC wire migration (v2 gossip plane): dual-stack `PEARCORD_RPC_WIRE` gate, `attachGossipWireSession` in `pearcord-drive/mux-wire`, migrated gossip meshes, method key map for 149 RPC ids. Default wire remains v1 (non-breaking).
|
||||||
|
|
||||||
|
- `protomux-rpc@^1.10.0` on `pearcord-drive` + app lock
|
||||||
|
- Docs: [PROTOMUX_RPC_MIGRATION.md](../PROTOMUX_RPC_MIGRATION.md)
|
||||||
|
- CI: `npm run test:ci-phase867`
|
||||||
Reference in New Issue
Block a user