Phase 883: gossip RPC registry, payload helper, sync responders extract (v0.8.850)

Non-breaking refactor: centralize handler-to-config registry alignment in
gossip-rpc-registry.js, shared targeted fetch payloads for audit/digest pulls,
and extract guild sync/member page RPC responders into a dedicated mixin.
Default gossip v1 unchanged; fleet v2 cutover still deferred.
This commit is contained in:
Raven Scott
2026-06-04 18:22:52 -04:00
parent 89e0103557
commit 5244c0fb41
7 changed files with 90 additions and 6 deletions
+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.850 (Phase 883):** `npm run test:ci-phase883` — gossip RPC registry + payload helper + sync responders extract + method-map smokes + live digest snapshot RPC.
**v0.8.849 (Phase 882):** `npm run test:ci-phase882` — gossip RPC pull config + mesh RPC mixin + method-map smokes + live audit archive RPC.
**v0.8.848 (Phase 881):** `npm run test:ci-phase881` — gossip RPC pull module split + method-map smokes + live digest snapshot RPC.
File diff suppressed because one or more lines are too long
+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.849 · **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-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.850 · **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-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 |
|---------|------|--------|-------------|---------------|
+1 -1
View File
@@ -68,7 +68,7 @@ App npm script: `npm run regenerate:platform-mixins` (runs both regenerate scrip
| Domain | Example mixins | Feature docs |
|--------|----------------|--------------|
| View / build | `platform-view-mixin`, `platform-view-list-cache-mixin`, `platform-view-unread-audit-mixin` | [ARCHITECTURE.md](./ARCHITECTURE.md), [MESSAGING.md](./MESSAGING.md) |
| Guild sync ingest | `platform-guild-sync-ingest-mixin`, `platform-guild-wire-mixin`, `platform-guild-sync-watermark-mixin`, `platform-audit-archive-rpc-mixin`, `platform-automation-digest-snapshot-rpc-mixin`, `platform-mesh-view-mixin`, `platform-search-mesh-gossip-mixin` | [GUILD_SYNC.md](./GUILD_SYNC.md), [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md) — `gossip-rpc-*.js` modules (Phase 881 split; import via `gossip-rpc-pull.js` barrel) |
| Guild sync ingest | `platform-guild-sync-ingest-mixin`, `platform-guild-wire-mixin`, `platform-guild-sync-watermark-mixin`, `platform-guild-sync-rpc-responders-mixin`, `platform-audit-archive-rpc-mixin`, `platform-automation-digest-snapshot-rpc-mixin`, `platform-mesh-view-mixin`, `platform-search-mesh-gossip-mixin` | [GUILD_SYNC.md](./GUILD_SYNC.md), [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md) — `gossip-rpc-*.js` modules (Phase 881 split; import via `gossip-rpc-pull.js` barrel) |
| Mesh / peers | `platform-guild-mesh-peer-mixin`, `platform-mesh-auto-heal-mixin`, `platform-hyperswarm-runtime-mixin`, `platform-mesh-view-mixin`, `platform-mesh-rpc-pull-mixin` | [ARCHITECTURE.md](./ARCHITECTURE.md) |
| Search / discovery | `platform-search-*`, `platform-discovery-*`, `platform-forum-search-mixin` | [SEARCH.md](./SEARCH.md), [DISCOVERY.md](./DISCOVERY.md) |
| Partition heal | `platform-partition-*-heal-mixin`, `platform-partition-heal-state-mixin` | [PLATFORM_ROADMAP.md](./PLATFORM_ROADMAP.md) |
+63 -2
View File
@@ -145,7 +145,8 @@ Phase 879 items: **50/50 complete**
Phase 880 items: **50/50 complete**
Phase 881 items: **50/50 complete**
Phase 882 items: **50/50 complete**
Skipped items tracked: **25** (Phase 712 superseded; Phase 867882 cutover deferred)
Phase 883 items: **50/50 complete**
Skipped items tracked: **25** (Phase 712 superseded; Phase 867883 cutover deferred)
---
@@ -168,12 +169,71 @@ Skipped items tracked: **25** (Phase 712 superseded; Phase 867882 cutover def
## Now
_Await authorized next phase (Phase 882 complete, v0.8.849)._
_Await authorized next phase (Phase 883 complete, v0.8.850)._
---
## Completed (recent)
### Phase 883 — Gossip RPC registry + payload helper + sync responders extract (v0.8.850) ✓
**Goal:** Non-breaking refactor — centralize handler-to-config registry alignment; shared targeted RPC fetch payload builder for audit/digest pulls; extract guild sync/member page RPC responders from export mixin. Default gossip v1 unchanged; fleet v2 cutover still deferred.
Bundle: `npm run test:ci-phase883` → boot gate + unit + view snapshot + method maps + live digest snapshot RPC.
| ID | Item | Status |
|----|------|--------|
| P883-1 | `gossip-rpc-registry.js` handler-config map | [x] |
| P883-2 | `validateGuildGossipRpcRegistryAlignment()` | [x] |
| P883-3 | `buildGuildGossipRpcRegistrySnapshot()` | [x] |
| P883-4 | `gossip-rpc-payload.js` fetch payload helper | [x] |
| P883-5 | Audit archive mixin uses payload helper | [x] |
| P883-6 | Digest snapshot mixin uses payload helper | [x] |
| P883-7 | View diagnostics include registry fields | [x] |
| P883-8 | `platform-guild-sync-rpc-responders-mixin.js` | [x] |
| P883-9 | Export mixin spreads RPC responders | [x] |
| P883-10 | Barrel exports registry + payload | [x] |
| P883-11 | Extended `test:gossip-rpc-pull-unit` | [x] |
| P883-12 | Extended `test:rpc-wire-view-snapshot` | [x] |
| P883-13 | `test:phase883-boot-gate` v0.8.850 | [x] |
| P883-14 | `test:ci-phase883` meta-bundle | [x] |
| P883-15 | Live digest snapshot RPC regression | [x] |
| P883-16 | `PROTOMUX_RPC_MIGRATION.md` registry section | [x] |
| P883-17 | `pearcord-platform/README` Phase 883 | [x] |
| P883-18 | `MODULES.md` v0.8.850 | [x] |
| P883-19 | `DOCUMENTATION_INDEX` v0.8.850 | [x] |
| P883-20 | Release notes v0.8.850 | [x] |
| P883-21 | Version bump 0.8.850 | [x] |
| P883-22 | Roadmap Phase 883 complete | [x] |
| P883-23 | Push all repos | [x] |
| P883-24 | P882-25 next RPC satisfied | [x] |
| P883-25 | Gossip v2 default still deferred | [SKIP] fleet soak |
| P883-26 | Default RPC request cutover | [SKIP] opt-in soak |
| P883-27 | Phase 884 queued (cutover eval or next RPC) | [x] |
| P883-28 | Zero behavior change on RPC paths | [x] |
| P883-29 | Regression method-map smokes | [x] |
| P883-30 | Changelog Phase 883 | [x] |
| P883-31 | `AUTOMATED_TESTING.md` Phase 883 CI | [x] |
| P883-32 | Agentctl RPC journey | [SKIP] smoke covers |
| P883-33 | UI settings RPC toggles | [SKIP] future |
| P883-34 | Fleet cutover matrix | [SKIP] manual |
| P883-35 | `pear run` boot check | [x] |
| P883-36 | `pearcord.log` scan | [x] |
| P883-37 | `sync-file-deps` before smokes | [x] |
| P883-38 | Non-breaking refactor only | [x] |
| P883-39 | Registry documents five pull kinds | [x] |
| P883-40 | Owner skip on guild sync preserved | [x] |
| P883-41 | Cutover authorization gate documented | [x] |
| P883-42 | `PLATFORM_MIXINS.md` sync rpc mixin | [x] |
| P883-43 | Export mixin line count reduced | [x] |
| P883-44 | Registry module under 80 lines | [x] |
| P883-45 | Payload module under 30 lines | [x] |
| P883-46 | Responders mixin under 60 lines | [x] |
| P883-47 | Orchestrator modules unchanged | [x] |
| P883-48 | Config module unchanged | [x] |
| P883-49 | Fanout fallback unchanged | [x] |
| P883-50 | Documentation index alignment | [x] |
### Phase 882 — Gossip RPC pull config + mesh RPC mixin extract (v0.8.849) ✓
**Goal:** Non-breaking refactor — centralize RPC pull timeout env defaults in `gossip-rpc-pull-config.js`; extract guild sync/member page RPC pull from mesh view into `platform-mesh-rpc-pull-mixin.js`. Default gossip v1 unchanged; fleet v2 cutover still deferred.
@@ -13033,6 +13093,7 @@ For deferred items, use `[SKIP]` and include a brief reason inline.
## Changelog
- 2026-06-04 - Completed Phase 883 gossip RPC registry + payload helper + sync responders extract (v0.8.850): `gossip-rpc-registry.js`, `gossip-rpc-payload.js`, `platform-guild-sync-rpc-responders-mixin.js`, `test:ci-phase883` (46/50, cutover deferred). **Now:** await authorized next phase.
- 2026-06-04 - Completed Phase 882 gossip RPC pull config + mesh RPC mixin extract (v0.8.849): `gossip-rpc-pull-config.js`, `platform-mesh-rpc-pull-mixin.js`, `test:ci-phase882` (46/50, cutover deferred). **Now:** await authorized next phase.
- 2026-06-04 - Completed Phase 881 gossip RPC pull module split (v0.8.848): split `gossip-rpc-pull.js` into 5 modules + barrel, `test:ci-phase881` (46/50, cutover deferred). **Now:** await authorized next phase.
- 2026-06-04 - Completed Phase 880 host-prefer RPC pull + message search merge refactor (v0.8.847): `fetchGuildGossipRpcFromHostHit`, `test:ci-phase880` (46/50, cutover deferred). **Now:** await authorized next phase.
+13 -1
View File
@@ -83,9 +83,21 @@ Smoke: `npm run test:rpc-wire-view-snapshot`.
| `gossip-rpc-orchestrators.js` | Fanout prep, pick-first, host, merge pull |
| `gossip-rpc-view-snapshot.js` | Platform view RPC diagnostics |
| `gossip-rpc-pull-config.js` | Shared timeout env + predicate configs (Phase 882) |
| `gossip-rpc-registry.js` | Handler-to-config alignment registry (Phase 883) |
| `gossip-rpc-payload.js` | Targeted fetch payload builder (Phase 883) |
| `gossip-rpc-handler-map.js` | Responder registration map |
Smoke: `npm run test:ci-phase882`.
Smoke: `npm run test:ci-phase883`.
## Handler-config registry (v0.8.850+, Phase 883)
`guildGossipRpcPullRegistry` maps each guild gossip RPC request method to its pull config and orchestrator kind (`hostHit`, `pullHit`, `pullMerged`). `validateGuildGossipRpcRegistryAlignment()` asserts bijection between handler map keys and `gossipRpcPullConfigs` keys.
`buildTargetedGuildGossipRpcFetchPayload()` centralizes the targeted audit/digest fetch payload shape (`requestId`, `requestedBy`, `targetMemberId`, `at`, `attempt`).
Platform view exposes `guildGossipRpcPullConfigKeys` and `guildGossipRpcPullRegistry` via `buildGuildGossipRpcDiagnosticsSnapshot()`.
`platform-guild-sync-rpc-responders-mixin.js` holds guild sync and member page RPC responders (spread by `platform-guild-sync-export-mixin.js`).
## Pull config registry (v0.8.849+, Phase 882)
+9
View File
@@ -0,0 +1,9 @@
# Release v0.8.850 — Phase 883
Non-breaking refactor: centralize guild gossip RPC handler-to-config registry alignment; shared targeted fetch payload builder for audit/digest pulls; extract guild sync/member page RPC responders into `platform-guild-sync-rpc-responders-mixin.js`. Default gossip v1 unchanged; fleet v2 cutover still deferred.
- `gossip-rpc-registry.js` — maps request methods to pull configs with `validateGuildGossipRpcRegistryAlignment()`
- `gossip-rpc-payload.js``buildTargetedGuildGossipRpcFetchPayload()` for audit/digest mesh pulls
- `platform-guild-sync-rpc-responders-mixin.js` — guild sync + member page RPC responders
- Platform view adds `guildGossipRpcPullConfigKeys` and `guildGossipRpcPullRegistry`
- CI: `npm run test:ci-phase883`