chore: sync multi-repo dev layout

This commit is contained in:
Raven Scott
2026-06-04 21:20:54 -04:00
parent 5002d7d097
commit 88761d3e41
8 changed files with 94 additions and 17 deletions
+1 -1
View File
@@ -163,7 +163,7 @@ flowchart TB
| Device sync | device-sync module | `pcdv_` multi-device pairing |
| Notification prefs | notifications mesh | `SETTINGS_UPDATE` for alert rules |
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).
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).
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.
+2
View File
@@ -6,6 +6,8 @@ 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.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.889 (Phase 922):** `npm run test:ci-phase922` — export mesh diagnostics build extract + validate pull keys helper + live digest snapshot 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.
Optional mesh wire: `PEARCORD_RPC_WIRE=v1` (default), `v2`, or `dual` for protomux-rpc gossip — see [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md). Opt-in RPC request/response (e.g. guild sync pull): `PEARCORD_RPC_REQUEST_WIRE=1` with `v2` or `dual`. Opt-in media planes (attach/voice/screen): `PEARCORD_MEDIA_RPC_WIRE=1` with `v2` or `dual`.
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`.
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).
+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.
**App release:** v0.8.890 · **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-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.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).
| Package | Path | Status | Primary doc | Module README |
|---------|------|--------|-------------|---------------|
+64 -4
View File
@@ -129,7 +129,7 @@ Phase 853 items: **50/50 complete**
Phase 854 items: **50/50 complete**
Phase 855 items: **50/50 complete**
Phase 856 items: **50/50 complete**
Phase 867 items: **48/50 complete** (2 deferred)
Phase 867 items: **49/50 complete** (1 deferred)
Phase 868 items: **50/50 complete**
Phase 869 items: **50/50 complete**
Phase 870 items: **50/50 complete**
@@ -186,7 +186,8 @@ Phase 920 items: **50/50 complete**
Phase 921 items: **50/50 complete**
Phase 922 items: **50/50 complete**
Phase 923 items: **50/50 complete**
Skipped items tracked: **55** (Phase 712 superseded; Phase 867923 cutover deferred)
Phase 924 items: **50/50 complete**
Skipped items tracked: **52** (Phase 712 superseded; Phase 867 P867-50 cleanup deferred)
---
@@ -209,12 +210,71 @@ Skipped items tracked: **55** (Phase 712 superseded; Phase 867923 cutover def
## Now
_Await authorized next phase (Phase 923 complete, v0.8.890). Protomux-rpc v1 default confirmed; fleet v2 / gossip v2 / default RPC request cutover remain deferred per user authorization._
_Await authorized next phase (Phase 924 complete, v0.8.891). Protomux-rpc v2 default cutover complete; export mesh modularization may resume._
---
## Completed (recent)
### 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.
Bundle: `npm run test:ci-phase924` → boot gate + fleet cutover matrix + unit/view snapshot + method maps + gossip roundtrip + live digest snapshot RPC.
| ID | Item | Status |
|----|------|--------|
| P924-1 | Default `PEARCORD_RPC_WIRE=v2` in `rpc-wire-env.js` | [x] |
| P924-2 | Default `PEARCORD_RPC_REQUEST_WIRE=1` with opt-out `0` | [x] |
| P924-3 | `isRpcGossipRequestEnabled` opt-out semantics | [x] |
| P924-4 | `smoke-protomux-rpc-fleet-cutover-matrix.cjs` | [x] |
| P924-5 | Fleet matrix: default v2 + request on | [x] |
| P924-6 | Fleet matrix: v1 opt-out | [x] |
| P924-7 | Fleet matrix: request opt-out | [x] |
| P924-8 | Fleet matrix: dual-stack opt-in | [x] |
| P924-9 | Fleet matrix: platform view snapshot | [x] |
| P924-10 | Update `test:gossip-rpc-pull-unit` v2 defaults | [x] |
| P924-11 | Update `test:rpc-wire-view-snapshot` v2 defaults | [x] |
| P924-12 | `test:phase924-boot-gate` v0.8.891 | [x] |
| P924-13 | `test:ci-phase924` meta-bundle | [x] |
| P924-14 | Live gossip roundtrip regression | [x] |
| P924-15 | Live digest snapshot RPC regression | [x] |
| P924-16 | Method-map smokes unchanged | [x] |
| P924-17 | `PROTOMUX_RPC_MIGRATION.md` cutover complete | [x] |
| P924-18 | `ARCHITECTURE.md` v2 default | [x] |
| P924-19 | `GETTING_STARTED.md` env table | [x] |
| P924-20 | `pearcord-shared/README` v2 default | [x] |
| P924-21 | `pearcord-platform/README` Phase 924 | [x] |
| P924-22 | `MODULES.md` v0.8.891 | [x] |
| P924-23 | `DOCUMENTATION_INDEX` v0.8.891 | [x] |
| P924-24 | Release notes v0.8.891 | [x] |
| P924-25 | Version bump 0.8.891 | [x] |
| P924-26 | Roadmap Phase 924 complete | [x] |
| P924-27 | Push all repos | [x] |
| P924-28 | P867-49 default v2 cutover satisfied | [x] |
| P924-29 | P923-27 fleet v2 cutover closed | [x] |
| P924-30 | P923-35 gossip v2 default closed | [x] |
| P924-31 | P923-36 default RPC request cutover closed | [x] |
| P924-32 | Dual-stack bridge retained for v1 peers | [x] |
| P924-33 | P867-50 cleanup still deferred | [SKIP] after fleet soak |
| P924-34 | `AUTOMATED_TESTING.md` Phase 924 CI | [x] |
| P924-35 | Changelog Phase 924 | [x] |
| P924-36 | `sync-file-deps` before smokes | [x] |
| P924-37 | `pear run` boot check | [x] |
| P924-38 | `pearcord.log` scan | [x] |
| P924-39 | Agentctl RPC journey | [SKIP] smoke covers |
| P924-40 | UI settings RPC toggles | [SKIP] future |
| P924-41 | Media v2 default unchanged | [x] |
| P924-42 | Device pair RPC default unchanged | [x] |
| P924-43 | Export mesh behavior preserved | [x] |
| P924-44 | Guild sync RPC pull default on | [x] |
| P924-45 | Member page RPC pull default on | [x] |
| P924-46 | Message search RPC pull default on | [x] |
| P924-47 | Audit archive RPC pull default on | [x] |
| P924-48 | Digest snapshot RPC pull default on | [x] |
| P924-49 | Phase 925 queued (export mesh resume) | [x] |
| P924-50 | Regression `test:ci-phase923` method maps | [x] |
### Phase 923 — Export mesh validate alignment scope extract + diagnostics snapshot re-export + lookup facade (v0.8.890) ✓
**Goal:** Non-breaking refactor — `gossip-rpc-export-mesh-registry-validate-alignment-scope.js` extracts alignment-from-scope logic; validate-alignment becomes scope-wrapper only; `gossip-rpc-export-mesh-registry-diagnostics-snapshot.js` re-exports snapshot builder; lookup facade imports diagnostics-snapshot instead of diagnostics root. Default gossip v1 unchanged; fleet v2 cutover still deferred.
@@ -3591,7 +3651,7 @@ Bundle (target): `npm run test:ci-phase867` → gossip roundtrip smokes + attach
| 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 | [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 | [SKIP] deferred — v1 default until fleet soak; dual-stack retained |
| 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 |
### Phase 866 — Guild multi-guild production matrix + offline recovery (v0.8.833) ✓
+17 -9
View File
@@ -1,13 +1,13 @@
# 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.
Pearcord gossip meshes historically used `pearcord-drive/mux-wire` `openWireChannel` with v1 compact-encoding frames (`encodeRpc` / `decodeRpc` in `pearcord-shared`). Phase 867 added [protomux-rpc](https://www.npmjs.com/package/protomux-rpc) (`^1.10.0`) as wire **v2** on parallel protocol names. **Phase 924 (v0.8.891)** defaults gossip to v2 with RPC request pull on; set `PEARCORD_RPC_WIRE=v1` or `dual` for legacy/mixed fleets.
## 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 |
| 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 |
| 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.
@@ -32,9 +32,9 @@ v1 and v2 are **not** compatible on the same protocol name. Dual-stack opens **t
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 pull (v0.8.836+, Phase 869)
## Request/response pull (v0.8.836+, Phase 869; default on v0.8.891+)
When **`PEARCORD_RPC_WIRE=v2`** (or `dual`) and **`PEARCORD_RPC_REQUEST_WIRE=1`**:
When **`PEARCORD_RPC_WIRE=v2`** (or `dual`) and **`PEARCORD_RPC_REQUEST_WIRE` is not `0`** (default `1` since Phase 924):
- Joiner calls `guild.requestGossipFromPeer(hostPk, RPC.GUILD_SYNC_REQUEST, payload)` → protomux-rpc `request`.
- Host registers `GUILD_SYNC_REQUEST` responder (owner/mod) returning a `GUILD_SYNC` bundle from `_buildGuildSyncBundle`.
@@ -145,6 +145,12 @@ Smoke: `npm run test:rpc-wire-view-snapshot`.
Smoke: `npm run test:ci-phase923`.
## 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.
Smoke: `npm run test:ci-phase924`.
## Export mesh validate alignment scope extract + diagnostics snapshot re-export + lookup facade (v0.8.890+, Phase 923)
`validateExportMeshFetchRegistryAlignmentFromScope()` moves to validate-alignment-scope; validate-alignment becomes scope-wrapper only; lookup facade imports diagnostics-snapshot instead of diagnostics root.
@@ -540,11 +546,13 @@ Smoke: `npm run test:protomux-rpc-attach-mesh-live`.
| `pearcord-voice-media` | `mesh.js` | `pearcord-voice-v1` |
| `pearcord-screen-share` | `mesh.js` | `pearcord-screen-v1` |
## Cutover (P867-49)
## Cutover (P867-49 — complete Phase 924)
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.
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`.
2. Dual-stack bridge **retained** for mixed v1/v2 fleets (`PEARCORD_RPC_WIRE=dual`).
3. **Deferred (P867-50):** Remove legacy `encodeRpc` gossip paths after all peers ship v2.
Smoke: `npm run test:protomux-rpc-fleet-cutover-matrix` · CI: `npm run test:ci-phase924`.
## Diagnostics
+7
View File
@@ -0,0 +1,7 @@
# Release v0.8.891 — Phase 924
Protomux-rpc v2 default cutover: gossip wire defaults to v2, RPC request pull defaults on. Fleet cutover matrix smoke validates v1/request opt-out and dual-stack. Dual-stack bridge retained for mixed v1 peers.
- `rpc-wire-env.js` — default `PEARCORD_RPC_WIRE=v2`, `PEARCORD_RPC_REQUEST_WIRE=1` (opt-out `0`)
- `smoke-protomux-rpc-fleet-cutover-matrix.cjs` — default + opt-out matrix
- CI: `npm run test:ci-phase924` (fleet matrix + gossip roundtrip + live digest snapshot RPC)