chore: sync multi-repo dev layout

This commit is contained in:
Raven Scott
2026-06-04 21:32:39 -04:00
parent 88761d3e41
commit 721fb1f888
9 changed files with 165 additions and 17 deletions
+1 -1
View File
@@ -163,7 +163,7 @@ 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. Gossip uses wire **v2** by default ([protomux-rpc](https://www.npmjs.com/package/protomux-rpc), string method keys on `*-rpc-v2` protocols). Legacy wire **v1** (`encodeRpc` compact frames on `*-v1` protocols) via `PEARCORD_RPC_WIRE=v1`; dual-stack `dual` for mixed fleets. RPC request pull defaults on (`PEARCORD_RPC_REQUEST_WIRE=0` to disable). See [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md). Guild peers multiplex **protomux** channels. Gossip uses wire **v2 only** ([protomux-rpc](https://www.npmjs.com/package/protomux-rpc), string method keys on `*-rpc-v2` protocols) since Phase 926 — legacy `encodeRpc` gossip paths and the dual-stack bridge are removed. RPC request pull defaults on (`PEARCORD_RPC_REQUEST_WIRE=0` to disable). Device-sync and media planes may still use v1 buffer framing. 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. 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.
+4
View File
@@ -6,6 +6,10 @@ Pearcord validates itself without manual QA.
**v0.8.837 (Phase 870):** `npm run test:ci-phase870` — media mesh protomux-rpc attach live (`PEARCORD_MEDIA_RPC_WIRE=1`) + attach/voice regression + `test:ci-phase869`. **v0.8.837 (Phase 870):** `npm run test:ci-phase870` — media mesh protomux-rpc attach live (`PEARCORD_MEDIA_RPC_WIRE=1`) + attach/voice regression + `test:ci-phase869`.
**v0.8.893 (Phase 926):** `npm run test:ci-phase926` — legacy encodeRpc gossip removal (P867-50) + v2-only shared-mux guard + gossip roundtrip + live digest snapshot RPC.
**v0.8.892 (Phase 925):** `npm run test:ci-phase925` — dual-stack bridge removal + dual alias smoke + live audit archive RPC.
**v0.8.891 (Phase 924):** `npm run test:ci-phase924` — protomux-rpc v2 default cutover + fleet cutover matrix + gossip roundtrip + live digest snapshot RPC. **v0.8.891 (Phase 924):** `npm run test:ci-phase924` — protomux-rpc v2 default cutover + fleet cutover matrix + gossip roundtrip + live digest snapshot RPC.
**v0.8.890 (Phase 923):** `npm run test:ci-phase923` — export mesh validate alignment scope extract + diagnostics snapshot re-export + lookup facade + live audit archive RPC. **v0.8.890 (Phase 923):** `npm run test:ci-phase923` — export mesh validate alignment scope extract + diagnostics snapshot re-export + lookup facade + live audit archive RPC.
File diff suppressed because one or more lines are too long
+1 -1
View File
@@ -38,7 +38,7 @@ npm run dev
User data persists at **`~/.config/pearcord`** (not inside the repo). Set `PEARCORD_STORAGE` to use another directory. User data persists at **`~/.config/pearcord`** (not inside the repo). Set `PEARCORD_STORAGE` to use another directory.
Mesh wire (v0.8.891+): `PEARCORD_RPC_WIRE=v2` (default), `v1` for legacy peers, or `dual` for mixed fleets — see [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md). RPC request/response (guild sync pull, etc.) defaults on; set `PEARCORD_RPC_REQUEST_WIRE=0` to disable. Opt-in media planes (attach/voice/screen): `PEARCORD_MEDIA_RPC_WIRE=1` with `v2` or `dual`. Gossip wire (v0.8.893+): protomux-rpc **v2 only**`PEARCORD_RPC_WIRE` is ignored (always v2). RPC request/response (guild sync pull, etc.) defaults on; set `PEARCORD_RPC_REQUEST_WIRE=0` to disable. Opt-in media planes (attach/voice/screen): `PEARCORD_MEDIA_RPC_WIRE=1`. See [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md).
1. Enter a username (onboarding — only on first run). Guild-loading pauses register/create/join controls while switching servers (v0.8.474). 1. Enter a username (onboarding — only on first run). Guild-loading pauses register/create/join controls while switching servers (v0.8.474).
2. Click **Create Server** in the member sidebar (or **P** for DMs first). Open **User settings** (⚙ on home) or **Server settings** in a guild — controls pause during server switch (v0.8.475). 2. Click **Create Server** in the member sidebar (or **P** for DMs first). Open **User settings** (⚙ on home) or **Server settings** in a guild — controls pause during server switch (v0.8.475).
+1 -1
View File
@@ -2,7 +2,7 @@
All **`pearcord-*`** packages under `modules/`. Each has its own Gitea repo and a **module README** with API tables, P2P topics, and examples. All **`pearcord-*`** packages under `modules/`. Each has its own Gitea repo and a **module README** with API tables, P2P topics, and examples.
**App release:** v0.8.891 · **Platform facade:** `pearcord-platform` ([PLATFORM_MIXINS.md](./PLATFORM_MIXINS.md)) · **Automation:** `pearcord-ui-flow` + `pearcord-agentctl` · **Full index:** [DOCUMENTATION_INDEX.md](./DOCUMENTATION_INDEX.md). Wire: [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md) (`test:ci-phase924`, `test:ci-phase923`, `test:ci-phase922`, `test:ci-phase921`, `test:ci-phase920`, `test:ci-phase919`, `test:ci-phase918`, `test:ci-phase917`, `test:ci-phase916`, `test:ci-phase901`, `test:ci-phase900`, `test:ci-phase899`, `test:ci-phase898`, `test:ci-phase897`, `test:ci-phase896`, `test:ci-phase895`, `test:ci-phase894`, `test:ci-phase893`, `test:ci-phase892`, `test:ci-phase891`, `test:ci-phase890`, `test:ci-phase889`, `test:ci-phase888`, `test:ci-phase887`, `test:ci-phase886`, `test:ci-phase885`, `test:ci-phase884`, `test:ci-phase883`, `test:ci-phase882`, `test:ci-phase870`, `test:ci-phase869`, `test:ci-phase868`, `test:ci-phase867`). Guild mesh: [PRODUCTION_MESH.md](./PRODUCTION_MESH.md) (`test:ci-phase866`, `test:ci-phase865`, `test:ci-phase864`, `test:ci-phase863`, `test:ci-phase862`, `test:ci-phase861`, `test:ci-phase860`, `test:ci-phase859`, `test:ci-phase858`, `test:ci-phase857`, `test:ci-phase856`, `test:ci-phase855`, `test:ci-phase854`, `test:ci-phase853`, `test:ci-phase852`, `test:ci-phase851`, `test:ci-phase850`, `test:ci-phase849`, `test:ci-phase848`, `test:ci-phase847`, `test:ci-phase846`, `test:ci-phase845`, `test:ci-phase844`, `test:ci-phase843`, `test:ci-phase842`, `test:ci-phase841`, `test:ci-phase840`, `test:ci-phase839`, `test:ci-phase838`, `test:ci-phase837`, `test:ci-phase836`, `test:ci-phase835`, `test:ci-phase834`, `test:ci-phase833`, `test:ci-phase832`, `test:ci-phase831`, `test:ci-phase830`, `test:ci-phase829`, `test:ci-phase828`, `test:ci-phase827`, `test:ci-phase826`, `test:ci-phase825`, `test:ci-phase824`, `test:ci-phase823`, `test:ci-phase822`, `test:ci-phase821`, `test:ci-phase820`, `test:ci-phase819`, `test:ci-phase818`, `test:ci-phase817`, `test:ci-phase816`, `test:ci-phase815`, `test:ci-phase814`, `test:ci-phase813`, `test:ci-phase812`, `test:ci-phase811`, `test:ci-phase810`, `test:ci-phase809`, `test:ci-phase808`, `test:ci-phase807`, `test:ci-phase806`, `test:ci-phase805`, `test:ci-phase804`, `test:ci-phase803`, `test:ci-phase802`, `test:ci-phase801`, `test:ci-phase800`, `test:ci-phase799`, `test:ci-phase798`, `test:ci-phase797`, `test:ci-phase796`, `test:ci-phase795`, `test:ci-phase794`, `test:ci-phase793`, `test:ci-phase792`, `test:ci-phase791`, `test:ci-phase790`, `test:ci-phase789`, `test:ci-phase788`, `test:ci-phase787`, `test:ci-phase786`, `test:ci-phase785`, `test:ci-phase784`, `test:ci-phase783`, `test:ci-phase782`, `test:ci-phase781`, `test:ci-phase780`). Members: [MEMBERS.md](./MEMBERS.md). Settings/roles/permissions: [SETTINGS.md](./SETTINGS.md), [ROLE_EDITOR.md](./ROLE_EDITOR.md), [PERMISSIONS.md](./PERMISSIONS.md). **App release:** v0.8.893 · **Platform facade:** `pearcord-platform` ([PLATFORM_MIXINS.md](./PLATFORM_MIXINS.md)) · **Automation:** `pearcord-ui-flow` + `pearcord-agentctl` · **Full index:** [DOCUMENTATION_INDEX.md](./DOCUMENTATION_INDEX.md). Wire: [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md) (`test:ci-phase926`, `test:ci-phase925`, `test:ci-phase924`, `test:ci-phase923`, `test:ci-phase922`, `test:ci-phase921`, `test:ci-phase920`, `test:ci-phase919`, `test:ci-phase918`, `test:ci-phase917`, `test:ci-phase916`, `test:ci-phase901`, `test:ci-phase900`, `test:ci-phase899`, `test:ci-phase898`, `test:ci-phase897`, `test:ci-phase896`, `test:ci-phase895`, `test:ci-phase894`, `test:ci-phase893`, `test:ci-phase892`, `test:ci-phase891`, `test:ci-phase890`, `test:ci-phase889`, `test:ci-phase888`, `test:ci-phase887`, `test:ci-phase886`, `test:ci-phase885`, `test:ci-phase884`, `test:ci-phase883`, `test:ci-phase882`, `test:ci-phase870`, `test:ci-phase869`, `test:ci-phase868`, `test:ci-phase867`). Guild mesh: [PRODUCTION_MESH.md](./PRODUCTION_MESH.md) (`test:ci-phase866`, `test:ci-phase865`, `test:ci-phase864`, `test:ci-phase863`, `test:ci-phase862`, `test:ci-phase861`, `test:ci-phase860`, `test:ci-phase859`, `test:ci-phase858`, `test:ci-phase857`, `test:ci-phase856`, `test:ci-phase855`, `test:ci-phase854`, `test:ci-phase853`, `test:ci-phase852`, `test:ci-phase851`, `test:ci-phase850`, `test:ci-phase849`, `test:ci-phase848`, `test:ci-phase847`, `test:ci-phase846`, `test:ci-phase845`, `test:ci-phase844`, `test:ci-phase843`, `test:ci-phase842`, `test:ci-phase841`, `test:ci-phase840`, `test:ci-phase839`, `test:ci-phase838`, `test:ci-phase837`, `test:ci-phase836`, `test:ci-phase835`, `test:ci-phase834`, `test:ci-phase833`, `test:ci-phase832`, `test:ci-phase831`, `test:ci-phase830`, `test:ci-phase829`, `test:ci-phase828`, `test:ci-phase827`, `test:ci-phase826`, `test:ci-phase825`, `test:ci-phase824`, `test:ci-phase823`, `test:ci-phase822`, `test:ci-phase821`, `test:ci-phase820`, `test:ci-phase819`, `test:ci-phase818`, `test:ci-phase817`, `test:ci-phase816`, `test:ci-phase815`, `test:ci-phase814`, `test:ci-phase813`, `test:ci-phase812`, `test:ci-phase811`, `test:ci-phase810`, `test:ci-phase809`, `test:ci-phase808`, `test:ci-phase807`, `test:ci-phase806`, `test:ci-phase805`, `test:ci-phase804`, `test:ci-phase803`, `test:ci-phase802`, `test:ci-phase801`, `test:ci-phase800`, `test:ci-phase799`, `test:ci-phase798`, `test:ci-phase797`, `test:ci-phase796`, `test:ci-phase795`, `test:ci-phase794`, `test:ci-phase793`, `test:ci-phase792`, `test:ci-phase791`, `test:ci-phase790`, `test:ci-phase789`, `test:ci-phase788`, `test:ci-phase787`, `test:ci-phase786`, `test:ci-phase785`, `test:ci-phase784`, `test:ci-phase783`, `test:ci-phase782`, `test:ci-phase781`, `test:ci-phase780`). Members: [MEMBERS.md](./MEMBERS.md). Settings/roles/permissions: [SETTINGS.md](./SETTINGS.md), [ROLE_EDITOR.md](./ROLE_EDITOR.md), [PERMISSIONS.md](./PERMISSIONS.md).
| Package | Path | Status | Primary doc | Module README | | Package | Path | Status | Primary doc | Module README |
|---------|------|--------|-------------|---------------| |---------|------|--------|-------------|---------------|
+124 -4
View File
@@ -129,7 +129,7 @@ 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: **49/50 complete** (1 deferred) Phase 867 items: **50/50 complete**
Phase 868 items: **50/50 complete** Phase 868 items: **50/50 complete**
Phase 869 items: **50/50 complete** Phase 869 items: **50/50 complete**
Phase 870 items: **50/50 complete** Phase 870 items: **50/50 complete**
@@ -187,7 +187,9 @@ Phase 921 items: **50/50 complete**
Phase 922 items: **50/50 complete** Phase 922 items: **50/50 complete**
Phase 923 items: **50/50 complete** Phase 923 items: **50/50 complete**
Phase 924 items: **50/50 complete** Phase 924 items: **50/50 complete**
Skipped items tracked: **52** (Phase 712 superseded; Phase 867 P867-50 cleanup deferred) Phase 925 items: **50/50 complete**
Phase 926 items: **50/50 complete**
Skipped items tracked: **50** (Phase 712 superseded)
--- ---
@@ -210,12 +212,130 @@ Skipped items tracked: **52** (Phase 712 superseded; Phase 867 P867-50 cleanup d
## Now ## Now
_Await authorized next phase (Phase 924 complete, v0.8.891). Protomux-rpc v2 default cutover complete; export mesh modularization may resume._ _Await authorized next phase (Phase 926 complete, v0.8.893). Dual-stack bridge removed; legacy encodeRpc gossip paths dropped (P867-50); export mesh modularization may resume._
--- ---
## Completed (recent) ## Completed (recent)
### Phase 926 — Legacy encodeRpc gossip removal + P867-50 cleanup (v0.8.893) ✓
**Goal:** Complete P867-50 — gossip wire is v2-only (`mux-wire/gossip.js` drops `openWireChannel`/`decodeRpc`/`broadcastRpcToSessions`); `getRpcWireMode()` always returns `v2`; trim unused direct `protomux`/`protomux-rpc` deps from `apps/pearcord/package.json`. `encodeRpc` retained in `pearcord-shared` for device-sync/media v1 buffer planes.
Bundle: `npm run test:ci-phase926` → boot gate + shared-mux v2-only guard + fleet matrix + gossip roundtrip + live digest snapshot RPC.
| ID | Item | Status |
|----|------|--------|
| P926-1 | `gossip.js` v2-only `attachGossipWireSession` | [x] |
| P926-2 | Remove `decodeRpc` from gossip wire | [x] |
| P926-3 | Remove `openWireChannel` from gossip wire | [x] |
| P926-4 | Remove `broadcastRpcToSessions` from gossip broadcast | [x] |
| P926-5 | `broadcastGossipToSessions` v2 events only | [x] |
| P926-6 | `getRpcWireMode()` returns `v2` only | [x] |
| P926-7 | `isRpcWireV1()` always false | [x] |
| P926-8 | `isRpcWireV2()` always true | [x] |
| P926-9 | `useMediaWireV1/V2` simplified (media-only) | [x] |
| P926-10 | `media.js` doc update | [x] |
| P926-11 | Fleet matrix: v1 env deprecated alias | [x] |
| P926-12 | `smoke-protomux-rpc-shared-mux` v2-only guard | [x] |
| P926-13 | `test:phase926-boot-gate` v0.8.893 | [x] |
| P926-14 | `test:ci-phase926` meta-bundle | [x] |
| P926-15 | Remove `protomux` from apps/pearcord deps | [x] |
| P926-16 | Remove `protomux-rpc` from apps/pearcord deps | [x] |
| P926-17 | P867-50 complete | [x] |
| P926-18 | `PROTOMUX_RPC_MIGRATION.md` v2-only gossip | [x] |
| P926-19 | `ARCHITECTURE.md` v2-only wire | [x] |
| P926-20 | `GETTING_STARTED.md` env update | [x] |
| P926-21 | `pearcord-shared/README` gossip v2-only | [x] |
| P926-22 | `pearcord-drive/README` Phase 926 | [x] |
| P926-23 | `MODULES.md` v0.8.893 | [x] |
| P926-24 | `DOCUMENTATION_INDEX` v0.8.893 | [x] |
| P926-25 | Release notes v0.8.893 | [x] |
| P926-26 | Version bump 0.8.893 | [x] |
| P926-27 | Roadmap Phase 926 complete | [x] |
| P926-28 | Push all repos | [x] |
| P926-29 | P924-33 P867-50 closed | [x] |
| P926-30 | Live gossip roundtrip regression | [x] |
| P926-31 | `AUTOMATED_TESTING.md` Phase 926 CI | [x] |
| P926-32 | Changelog Phase 926 | [x] |
| P926-33 | `sync-file-deps` before smokes | [x] |
| P926-34 | Device-sync encodeRpc retained | [x] |
| P926-35 | Media v1 buffer retained | [x] |
| P926-36 | v1.js retained for non-gossip planes | [x] |
| P926-37 | Regression method-map smokes | [x] |
| P926-38 | Agentctl RPC journey | [SKIP] smoke covers |
| P926-39 | UI settings RPC toggles | [SKIP] future |
| P926-40 | Phase 927 queued (export mesh resume) | [x] |
| P926-41 | `pear run` boot check | [x] |
| P926-42 | `pearcord.log` scan | [x] |
| P926-43 | Export mesh behavior preserved | [x] |
| P926-44 | RPC request pull default on | [x] |
| P926-45 | Gossip session `legacy` field removed | [x] |
| P926-46 | Dual alias still resolves v2 | [x] |
| P926-47 | Boot gate no direct protomux in app | [x] |
| P926-48 | pearcord-drive protomux dep unchanged | [x] |
| P926-49 | Regression `test:ci-phase925` | [x] |
| P926-50 | Phase 867 fully complete (50/50) | [x] |
### Phase 925 — Dual-stack bridge removal (v0.8.892) ✓
**Goal:** Remove dual-stack gossip bridge — `PEARCORD_RPC_WIRE=dual|both` resolves to v2-only (no parallel v1 leg); `isRpcWireV1`/`isRpcWireV2` no longer treat `dual` as both stacks. v1 gossip opt-out retained until Phase 926.
Bundle: `npm run test:ci-phase925` → boot gate + fleet matrix + dual alias smoke + method maps + live audit archive RPC.
| ID | Item | Status |
|----|------|--------|
| P925-1 | `dual`/`both` env aliases resolve to `v2` | [x] |
| P925-2 | Remove `dual` return from `getRpcWireMode` | [x] |
| P925-3 | `isRpcWireV1` excludes dual mode | [x] |
| P925-4 | `isRpcWireV2` excludes dual as separate mode | [x] |
| P925-5 | Gossip no dual-stack parallel channels | [x] |
| P925-6 | `smoke-protomux-rpc-dual-stack` → dual alias v2 | [x] |
| P925-7 | Fleet matrix dual resolves v2 | [x] |
| P925-8 | `test:phase925-boot-gate` v0.8.892 | [x] |
| P925-9 | `test:ci-phase925` meta-bundle | [x] |
| P925-10 | Live audit archive RPC regression | [x] |
| P925-11 | `PROTOMUX_RPC_MIGRATION.md` dual removed | [x] |
| P925-12 | `ARCHITECTURE.md` dual deprecated | [x] |
| P925-13 | `GETTING_STARTED.md` dual note | [x] |
| P925-14 | `MODULES.md` v0.8.892 | [x] |
| P925-15 | Release notes v0.8.892 | [x] |
| P925-16 | Version bump 0.8.892 | [x] |
| P925-17 | Roadmap Phase 925 complete | [x] |
| P925-18 | Push all repos | [x] |
| P925-19 | P924-32 dual-stack bridge closed | [x] |
| P925-20 | P867-49 dual-stack leg removed | [x] |
| P925-21 | v1 gossip opt-out retained (Phase 926) | [x] |
| P925-22 | `AUTOMATED_TESTING.md` Phase 925 CI | [x] |
| P925-23 | Changelog Phase 925 | [x] |
| P925-24 | `sync-file-deps` before smokes | [x] |
| P925-25 | Phase 926 queued (v1 gossip removal) | [x] |
| P925-26 | Method-map smokes regression | [x] |
| P925-27 | Fleet cutover matrix updated | [x] |
| P925-28 | `pear run` boot check | [x] |
| P925-29 | `pearcord.log` scan | [x] |
| P925-30 | Export mesh behavior preserved | [x] |
| P925-31 | RPC request pull default on | [x] |
| P925-32 | Media dual-stack leg unchanged | [x] |
| P925-33 | Device-sync wire unchanged | [x] |
| P925-34 | `test:ci-phase868` dual smoke still valid | [x] |
| P925-35 | Agentctl RPC journey | [SKIP] smoke covers |
| P925-36 | UI settings RPC toggles | [SKIP] future |
| P925-37 | Boot gate dual alias check | [x] |
| P925-38 | Dual alias live gossip roundtrip | [x] |
| P925-39 | Non-breaking for v2-default peers | [x] |
| P925-40 | `pearcord-platform/README` Phase 925 | [x] |
| P925-41 | `DOCUMENTATION_INDEX` v0.8.892 | [x] |
| P925-42 | `pearcord-shared/README` dual note | [x] |
| P925-43 | Regression `test:ci-phase924` | [x] |
| P925-44 | Gossip broadcast single stack | [x] |
| P925-45 | P867-50 still queued Phase 926 | [x] |
| P925-46 | View snapshot wire v2 | [x] |
| P925-47 | `pearcord-drive` gossip dual comment removed | [x] |
| P925-48 | `PROTOMUX_RPC_MIGRATION` cutover note | [x] |
| P925-49 | Fleet soak satisfied | [x] |
| P925-50 | Dual env backward compat alias | [x] |
### Phase 924 — Protomux-rpc v2 default cutover + fleet matrix (v0.8.891) ✓ ### Phase 924 — Protomux-rpc v2 default cutover + fleet matrix (v0.8.891) ✓
**Goal:** Complete deferred Phase 867 cutover — default `PEARCORD_RPC_WIRE=v2`, default `PEARCORD_RPC_REQUEST_WIRE=1` (opt-out via `0`), fleet cutover matrix smoke, v2 gossip roundtrip + digest live regression. Dual-stack retained for v1 peer compatibility. **Goal:** Complete deferred Phase 867 cutover — default `PEARCORD_RPC_WIRE=v2`, default `PEARCORD_RPC_REQUEST_WIRE=1` (opt-out via `0`), fleet cutover matrix smoke, v2 gossip roundtrip + digest live regression. Dual-stack retained for v1 peer compatibility.
@@ -3652,7 +3772,7 @@ Bundle (target): `npm run test:ci-phase867` → gossip roundtrip smokes + attach
| P867-47 | Version bump + changelog entry for protomux-rpc migration phase | [x] | | P867-47 | Version bump + changelog entry for protomux-rpc migration phase | [x] |
| P867-48 | `DOCUMENTATION_INDEX` + `AUTOMATED_TESTING.md` Phase 867 entries | [x] | | 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 | [x] Phase 924 — default v2; dual-stack retained for v1 peers | | P867-49 | Cutover: default `PEARCORD_RPC_WIRE=v2` after smokes green; remove dual-stack bridge | [x] Phase 924 — default v2; dual-stack retained for v1 peers |
| 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 | | P867-50 | Final cleanup: drop unused `openWireChannel` gossip paths + trim direct `protomux` from `apps/pearcord/package.json` if unused | [x] Phase 926 |
### Phase 866 — Guild multi-guild production matrix + offline recovery (v0.8.833) ✓ ### Phase 866 — Guild multi-guild production matrix + offline recovery (v0.8.833) ✓
+19 -9
View File
@@ -6,11 +6,9 @@ Pearcord gossip meshes historically used `pearcord-drive/mux-wire` `openWireChan
| Version | Env | Channel protocol | Framing | | Version | Env | Channel protocol | Framing |
|---------|-----|------------------|---------| |---------|-----|------------------|---------|
| v2 (default) | `PEARCORD_RPC_WIRE=v2` or unset | `*-rpc-v2` (e.g. `pearcord-gossip-rpc-v2`) | protomux-rpc `event` / `request` / `respond` with string method keys | | v2 (only) | `PEARCORD_RPC_WIRE` unset or any value (v0.8.893+) | `*-rpc-v2` (e.g. `pearcord-gossip-rpc-v2`) | protomux-rpc `event` / `request` / `respond` with string method keys |
| v1 (legacy) | `PEARCORD_RPC_WIRE=v1` | `*-v1` (e.g. `pearcord-gossip-v1`) | `uint8 method` + JSON payload buffer |
| 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. **Removed (Phase 925926):** gossip `dual` dual-stack bridge and legacy `encodeRpc` v1 gossip paths. `PEARCORD_RPC_WIRE=v1|dual|both` are ignored aliases — gossip always uses v2. `encodeRpc`/`decodeRpc` remain for device-sync and media v1 buffer planes only.
## Module layout (v0.8.835+) ## Module layout (v0.8.835+)
@@ -145,6 +143,18 @@ Smoke: `npm run test:rpc-wire-view-snapshot`.
Smoke: `npm run test:ci-phase923`. Smoke: `npm run test:ci-phase923`.
## Legacy encodeRpc gossip removal + P867-50 (v0.8.893+, Phase 926)
Gossip wire is **v2-only**`attachGossipWireSession` uses `openRpcChannel` only; `broadcastGossipToSessions` uses `broadcastEventToSessions` only. `getRpcWireMode()` always returns `v2`.
Smoke: `npm run test:ci-phase926`.
## Dual-stack bridge removal (v0.8.892+, Phase 925)
`PEARCORD_RPC_WIRE=dual|both` no longer opens parallel v1+v2 gossip channels; env resolves to v2-only. Dual alias live smoke: `npm run test:protomux-rpc-dual-stack`.
Smoke: `npm run test:ci-phase925`.
## Protomux-rpc v2 default cutover + fleet matrix (v0.8.891+, Phase 924) ## Protomux-rpc v2 default cutover + fleet matrix (v0.8.891+, Phase 924)
Default gossip wire is **v2** (`PEARCORD_RPC_WIRE` unset or `v2`); RPC request pull defaults **on** (`PEARCORD_RPC_REQUEST_WIRE=0` to disable). `smoke-protomux-rpc-fleet-cutover-matrix.cjs` validates v1/request opt-out and dual-stack. Dual-stack bridge retained for mixed v1 peers. Default gossip wire is **v2** (`PEARCORD_RPC_WIRE` unset or `v2`); RPC request pull defaults **on** (`PEARCORD_RPC_REQUEST_WIRE=0` to disable). `smoke-protomux-rpc-fleet-cutover-matrix.cjs` validates v1/request opt-out and dual-stack. Dual-stack bridge retained for mixed v1 peers.
@@ -546,13 +556,13 @@ Smoke: `npm run test:protomux-rpc-attach-mesh-live`.
| `pearcord-voice-media` | `mesh.js` | `pearcord-voice-v1` | | `pearcord-voice-media` | `mesh.js` | `pearcord-voice-v1` |
| `pearcord-screen-share` | `mesh.js` | `pearcord-screen-v1` | | `pearcord-screen-share` | `mesh.js` | `pearcord-screen-v1` |
## Cutover (P867-49 — complete Phase 924) ## Cutover (P867-49/50 — complete Phase 924926)
1. **Done (v0.8.891):** Default `PEARCORD_RPC_WIRE=v2` and `PEARCORD_RPC_REQUEST_WIRE=1`. Opt-out: `PEARCORD_RPC_WIRE=v1` or `PEARCORD_RPC_REQUEST_WIRE=0`. 1. **v0.8.891:** Default `PEARCORD_RPC_WIRE=v2` and `PEARCORD_RPC_REQUEST_WIRE=1`. Opt-out request pull: `PEARCORD_RPC_REQUEST_WIRE=0`.
2. Dual-stack bridge **retained** for mixed v1/v2 fleets (`PEARCORD_RPC_WIRE=dual`). 2. **v0.8.892 (Phase 925):** Dual-stack bridge removed; `dual`/`both` env aliases resolve to v2-only.
3. **Deferred (P867-50):** Remove legacy `encodeRpc` gossip paths after all peers ship v2. 3. **v0.8.893 (Phase 926):** Gossip v2-only — `mux-wire/gossip.js` drops `encodeRpc` paths; direct `protomux`/`protomux-rpc` trimmed from `apps/pearcord/package.json`.
Smoke: `npm run test:protomux-rpc-fleet-cutover-matrix` · CI: `npm run test:ci-phase924`. Smoke: `npm run test:protomux-rpc-fleet-cutover-matrix` · CI: `npm run test:ci-phase926`.
## Diagnostics ## Diagnostics
+7
View File
@@ -0,0 +1,7 @@
# Release v0.8.892 — Phase 925
Dual-stack bridge removal: `PEARCORD_RPC_WIRE=dual|both` resolves to v2-only gossip (no parallel v1 leg). v1 gossip opt-out retained until Phase 926.
- `rpc-wire-env.js` — dual/both aliases map to `v2`; `isRpcWireV1`/`isRpcWireV2` no longer treat dual as both stacks
- `smoke-protomux-rpc-dual-stack.cjs` — verifies dual alias v2 gossip
- CI: `npm run test:ci-phase925`
+7
View File
@@ -0,0 +1,7 @@
# Release v0.8.893 — Phase 926
P867-50 complete: legacy `encodeRpc` gossip paths removed; gossip wire is v2-only. Direct `protomux`/`protomux-rpc` deps trimmed from `apps/pearcord/package.json` (retained in `pearcord-drive`).
- `mux-wire/gossip.js` — v2-only `attachGossipWireSession` + `broadcastGossipToSessions`
- `rpc-wire-env.js``getRpcWireMode()` always `v2`
- CI: `npm run test:ci-phase926`