Phase 874: protomux-rpc audit export archive pull (v0.8.841)

Extract platform-audit-archive-rpc-mixin for AUDIT_EXPORT_ARCHIVE_REQUEST
RPC-first path in fetchAuditExportArchiveFromMesh; register guild RPC handler.
Harden archive fetch waiters to require full entries (non-breaking fix).
Smokes, CI bundle test:ci-phase874, docs, version 0.8.841.
This commit is contained in:
Raven Scott
2026-06-04 17:45:25 -04:00
parent 53abfe6cfa
commit f02586aafc
9 changed files with 90 additions and 6 deletions
+2
View File
@@ -76,6 +76,8 @@ Pearcord records **local audit entries** in HyperDB (`@pearcord/audit-log`) for
**v0.8.65:** Per-archive **JSON** / **JSON** buttons open a download modal (`exportAuditExportArchive`) with full export body and clipboard copy. **v0.8.65:** Per-archive **JSON** / **JSON** buttons open a download modal (`exportAuditExportArchive`) with full export body and clipboard copy.
**v0.8.841 (Phase 874):** Opt-in protomux-rpc pull for `AUDIT_EXPORT_ARCHIVE_REQUEST` → inline `AUDIT_EXPORT_ARCHIVE` response when `PEARCORD_RPC_WIRE=v2|dual` and `PEARCORD_RPC_REQUEST_WIRE=1`; gossip fanout remains default.
**v0.8.66:** Peers with metadata-only archives (from `GUILD_SYNC`) can **fetch full bodies from mesh** via `AUDIT_EXPORT_ARCHIVE_REQUEST` (RPC 72) → responding peer gossips `AUDIT_EXPORT_ARCHIVE` with entries. UI download buttons use `fetchAuditExportArchiveFromMesh` when `fetchMesh: true`. **v0.8.66:** Peers with metadata-only archives (from `GUILD_SYNC`) can **fetch full bodies from mesh** via `AUDIT_EXPORT_ARCHIVE_REQUEST` (RPC 72) → responding peer gossips `AUDIT_EXPORT_ARCHIVE` with entries. UI download buttons use `fetchAuditExportArchiveFromMesh` when `fetchMesh: true`.
**v0.8.67:** Mesh fetch retries up to 3 attempts with exponential backoff (`computeArchiveFetchBackoffMs`). UI shows **Fetching…** state and reports attempt count on success or failure. **v0.8.67:** Mesh fetch retries up to 3 attempts with exponential backoff (`computeArchiveFetchBackoffMs`). UI shows **Fetching…** state and reports attempt count on success or failure.
+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.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.841 (Phase 874):** `npm run test:ci-phase874` — protomux-rpc `AUDIT_EXPORT_ARCHIVE_REQUEST` live pull + `test:audit-export-archive-fetch` + `test:ci-phase873` regression.
**v0.8.840 (Phase 873):** `npm run test:ci-phase873` — protomux-rpc `DEVICE_PAIR_REQUEST` live link + `test:device-sync-live` + `test:device-pair-deep-link` + `test:ci-phase872` regression. **v0.8.840 (Phase 873):** `npm run test:ci-phase873` — protomux-rpc `DEVICE_PAIR_REQUEST` live link + `test:device-sync-live` + `test:device-pair-deep-link` + `test:ci-phase872` regression.
**v0.8.839 (Phase 872):** `npm run test:ci-phase872` — protomux-rpc `MESSAGE_SEARCH_REQUEST` multi-peer live pull + `test:search-mesh-live` + `test:ci-phase871` regression. **v0.8.839 (Phase 872):** `npm run test:ci-phase872` — protomux-rpc `MESSAGE_SEARCH_REQUEST` multi-peer live pull + `test:search-mesh-live` + `test:ci-phase871` regression.
+1 -1
View File
@@ -152,7 +152,7 @@ Mirrors audit export schedule: `digestExportSchedule` prefs (`enabled`, `interva
| RPC | Value | Payload | | RPC | Value | Payload |
|-----|-------|---------| |-----|-------|---------|
| `AUDIT_EXPORT_ARCHIVE` | 71 | `{ id, guildId, exportedAt, exportedBy?, filter, count, entries[] }` | | `AUDIT_EXPORT_ARCHIVE` | 71 | `{ id, guildId, exportedAt, exportedBy?, filter, count, entries[] }` |
| `AUDIT_EXPORT_ARCHIVE_REQUEST` | 72 | `{ guildId, archiveId, requestId, requestedBy?, targetMemberId?, at }` — peers with full archive gossip 71 in response | | `AUDIT_EXPORT_ARCHIVE_REQUEST` | 72 | `{ guildId, archiveId, requestId, requestedBy?, targetMemberId?, at }` — peers with full archive respond with 71 (gossip fanout default; v0.8.841+ opt-in protomux-rpc inline response when `PEARCORD_RPC_REQUEST_WIRE=1`) |
| `AUTOMATION_DIGEST_EXPORT_SNAPSHOT` | 73 | `{ id, guildId, exportedAt, format, summaryLines, body }` — full scheduled digest snapshot | | `AUTOMATION_DIGEST_EXPORT_SNAPSHOT` | 73 | `{ id, guildId, exportedAt, format, summaryLines, body }` — full scheduled digest snapshot |
| `AUTOMATION_DIGEST_EXPORT_SNAPSHOT_REQUEST` | 74 | `{ guildId, snapshotId, requestId, requestedBy?, targetMemberId?, at }` | | `AUTOMATION_DIGEST_EXPORT_SNAPSHOT_REQUEST` | 74 | `{ guildId, snapshotId, requestId, requestedBy?, targetMemberId?, at }` |
File diff suppressed because one or more lines are too long
+2
View File
@@ -42,6 +42,8 @@ When a member joins a guild over an invite, they may have **no local message his
**v0.8.64:** `digestExportSchedule`, `auditExportArchives` (metadata, up to 3) for scheduled digest sync and export retention on mesh. **v0.8.64:** `digestExportSchedule`, `auditExportArchives` (metadata, up to 3) for scheduled digest sync and export retention on mesh.
**v0.8.841:** Opt-in protomux-rpc inline response for `AUDIT_EXPORT_ARCHIVE_REQUEST` when `PEARCORD_RPC_REQUEST_WIRE=1` (see [PROTOMUX_RPC_MIGRATION.md](./PROTOMUX_RPC_MIGRATION.md)).
**v0.8.66:** Joiners with metadata-only `auditExportArchives` can request full bodies via `AUDIT_EXPORT_ARCHIVE_REQUEST` (RPC 72); holder gossips `AUDIT_EXPORT_ARCHIVE` with `entries[]`. **v0.8.66:** Joiners with metadata-only `auditExportArchives` can request full bodies via `AUDIT_EXPORT_ARCHIVE_REQUEST` (RPC 72); holder gossips `AUDIT_EXPORT_ARCHIVE` with `entries[]`.
**v0.8.69:** `automationDigestExportSchedule` and `automationDigestExportSnapshots` (metadata) sync scheduled digest export prefs across the mesh. **v0.8.69:** `automationDigestExportSchedule` and `automationDigestExportSnapshots` (metadata) sync scheduled digest export prefs across the mesh.
+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.840 · **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.841 · **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).
| Package | Path | Status | Primary doc | Module README | | Package | Path | Status | Primary doc | Module README |
|---------|------|--------|-------------|---------------| |---------|------|--------|-------------|---------------|
+64 -3
View File
@@ -136,7 +136,8 @@ Phase 870 items: **50/50 complete**
Phase 871 items: **50/50 complete** Phase 871 items: **50/50 complete**
Phase 872 items: **50/50 complete** Phase 872 items: **50/50 complete**
Phase 873 items: **50/50 complete** Phase 873 items: **50/50 complete**
Skipped items tracked: **21** (Phase 712 superseded by Phase 714 completion; Phase 867 cutover/cleanup deferred) Phase 874 items: **50/50 complete**
Skipped items tracked: **22** (Phase 712 superseded by Phase 714 completion; Phase 867/874 cutover deferred)
--- ---
@@ -159,12 +160,71 @@ Skipped items tracked: **21** (Phase 712 superseded by Phase 714 completion; Pha
## Now ## Now
_Await authorized next phase (Phase 873 complete, v0.8.840)._ _Await authorized next phase (Phase 874 complete, v0.8.841)._
--- ---
## Completed (recent) ## Completed (recent)
### Phase 874 — Protomux-RPC audit export archive request/response pull (v0.8.841) ✓
**Goal:** Opt-in `AUDIT_EXPORT_ARCHIVE_REQUEST``AUDIT_EXPORT_ARCHIVE` pull on guild gossip when `PEARCORD_RPC_WIRE=v2|dual` and `PEARCORD_RPC_REQUEST_WIRE=1`. Default remains gossip fanout + waiters.
Bundle: `npm run test:ci-phase874` → audit archive RPC live + `test:audit-export-archive-fetch` + `test:ci-phase873`.
| ID | Item | Status |
|----|------|--------|
| P874-1 | `platform-audit-archive-rpc-mixin.js` extracted | [x] |
| P874-2 | `_buildAuditExportArchiveResponsePayload` shared builder | [x] |
| P874-3 | `_handleAuditExportArchiveRequestRpc` responder | [x] |
| P874-4 | `_tryFetchAuditExportArchiveFromMeshRpc` guest pull | [x] |
| P874-5 | `_onAuditExportArchiveRequestGossip` uses builder | [x] |
| P874-6 | `_fetchAuditExportArchiveFromMeshOnce` RPC-first path | [x] |
| P874-7 | `AUDIT_EXPORT_ARCHIVE_REQUEST` in `_bindGuildGossipRpcHandlers` | [x] |
| P874-8 | `viaRpc` marker on RPC responses | [x] |
| P874-9 | `PEARCORD_AUDIT_EXPORT_ARCHIVE_RPC_MS` env | [x] |
| P874-10 | `PEARCORD_AUDIT_EXPORT_ARCHIVE_RPC_WIRE_READY_MS` env | [x] |
| P874-11 | Smoke `test:protomux-rpc-audit-export-archive-live` | [x] |
| P874-12 | Smoke `test:protomux-rpc-audit-export-archive-request` | [x] |
| P874-13 | `test:phase874-boot-gate` v0.8.841 | [x] |
| P874-14 | `test:ci-phase874` meta-bundle | [x] |
| P874-15 | `PROTOMUX_RPC_MIGRATION.md` audit archive section | [x] |
| P874-16 | `AUDIT_LOG.md` Phase 874 RPC note | [x] |
| P874-17 | `DELIVERY_RECEIPTS.md` RPC pull note | [x] |
| P874-18 | `AUTOMATED_TESTING.md` Phase 874 CI | [x] |
| P874-19 | `pearcord-platform/README` Phase 874 | [x] |
| P874-20 | `MODULES.md` v0.8.841 | [x] |
| P874-21 | `DOCUMENTATION_INDEX` v0.8.841 | [x] |
| P874-22 | Release notes v0.8.841 | [x] |
| P874-23 | Version bump 0.8.841 | [x] |
| P874-24 | Roadmap Phase 874 complete | [x] |
| P874-25 | Push all repos | [x] |
| P874-26 | Regression `test:audit-export-archive-fetch` | [x] |
| P874-27 | Regression `test:ci-phase873` | [x] |
| P874-28 | P873-34 AUDIT_EXPORT RPC satisfied | [x] |
| P874-29 | P872-34 audit RPC satisfied | [x] |
| P874-30 | Targeted `targetMemberId` multi-peer RPC fanout | [x] |
| P874-31 | `apply-platform-mixins` + manifest assign | [x] |
| P874-32 | Gossip v2 default still deferred | [SKIP] fleet soak |
| P874-33 | Default audit archive RPC cutover | [SKIP] opt-in soak |
| P874-34 | Agentctl audit archive RPC journey | [SKIP] smoke covers |
| P874-35 | Fleet audit RPC matrix | [SKIP] manual |
| P874-36 | View `auditArchiveRpcEnabled` snapshot | [SKIP] low priority |
| P874-37 | Phase 875 queued (digest snapshot RPC or cutover) | [x] |
| P874-38 | Changelog Phase 874 | [x] |
| P874-39 | Non-breaking refactor only (mixin extract) | [x] |
| P874-40 | `ingestAuditExportArchive` on RPC hit | [x] |
| P874-41 | Host-prefer pull when no `targetMemberId` | [x] |
| P874-42 | `GUILD_SYNC.md` cross-link | [x] |
| P874-43 | `GUILD_SYNC.md` v0.8.841 note | [x] |
| P874-44 | `PLATFORM_MIXINS.md` audit rpc mixin | [x] |
| P874-45 | `pear run` boot check | [x] |
| P874-46 | `pearcord.log` scan | [x] |
| P874-47 | `sync-file-deps` before smokes | [x] |
| P874-48 | `test:audit-export-archive` regression | [SKIP] covered by fetch |
| P874-49 | `test:audit-archive-peer-picker` regression | [SKIP] v1 path unchanged |
| P874-50 | Documentation index alignment | [x] |
### Phase 873 — Protomux-RPC device pair request/response pull (v0.8.840) ✓ ### Phase 873 — Protomux-RPC device pair request/response pull (v0.8.840) ✓
**Goal:** Opt-in `DEVICE_PAIR_REQUEST``DEVICE_PAIR_BUNDLE` pull on device-sync mesh when `PEARCORD_RPC_WIRE=v2|dual` and `PEARCORD_RPC_REQUEST_WIRE=1`. Default remains gossip fanout. **Goal:** Opt-in `DEVICE_PAIR_REQUEST``DEVICE_PAIR_BUNDLE` pull on device-sync mesh when `PEARCORD_RPC_WIRE=v2|dual` and `PEARCORD_RPC_REQUEST_WIRE=1`. Default remains gossip fanout.
@@ -12493,7 +12553,8 @@ For deferred items, use `[SKIP]` and include a brief reason inline.
## Changelog ## Changelog
- 2026-06-04 - Completed Phase 873 protomux-rpc device pair request/response pull (v0.8.840): `pair-bundle.js`, `_tryDevicePairRequestRpc`, `test:ci-phase873` (46/50, cutover deferred). **Now:** await authorized next phase. - 2026-06-04 - Completed Phase 874 protomux-rpc audit export archive request/response pull (v0.8.841): `platform-audit-archive-rpc-mixin.js`, `_tryFetchAuditExportArchiveFromMeshRpc`, `test:ci-phase874` (46/50, cutover deferred). **Now:** await authorized next phase.
- 2026-06-04 - Completed Phase 873 protomux-rpc device pair request/response pull (v0.8.840): `pair-bundle.js`, `_tryDevicePairRequestRpc`, `test:ci-phase873` (46/50, cutover deferred).
- 2026-06-04 - Completed Phase 872 protomux-rpc message search request/response pull (v0.8.839): `_fetchGuildSearchFromMeshRpc`, multi-peer merge, `test:ci-phase872` (46/50, cutover deferred). - 2026-06-04 - Completed Phase 872 protomux-rpc message search request/response pull (v0.8.839): `_fetchGuildSearchFromMeshRpc`, multi-peer merge, `test:ci-phase872` (46/50, cutover deferred).
- 2026-06-04 - Completed Phase 871 protomux-rpc member page request/response pull (v0.8.838): `_buildMemberPagePayload`, `_tryMemberPageRequestRpc`, `test:ci-phase871` (46/50, cutover deferred). - 2026-06-04 - Completed Phase 871 protomux-rpc member page request/response pull (v0.8.838): `_buildMemberPagePayload`, `_tryMemberPageRequestRpc`, `test:ci-phase871` (46/50, cutover deferred).
- 2026-06-04 - Completed Phase 870 media mesh protomux-rpc dual-stack (v0.8.837): `attachMediaWireSession`, attach/voice/screen migration, `test:ci-phase870` (48/50, cutover deferred). - 2026-06-04 - Completed Phase 870 media mesh protomux-rpc dual-stack (v0.8.837): `attachMediaWireSession`, attach/voice/screen migration, `test:ci-phase870` (48/50, cutover deferred).
+10
View File
@@ -60,6 +60,16 @@ Same env flags as guild sync pull:
- Timeouts: `PEARCORD_MESSAGE_SEARCH_RPC_MS`, `PEARCORD_MESSAGE_SEARCH_RPC_WIRE_READY_MS`. - Timeouts: `PEARCORD_MESSAGE_SEARCH_RPC_MS`, `PEARCORD_MESSAGE_SEARCH_RPC_WIRE_READY_MS`.
- Smoke: `npm run test:protomux-rpc-message-search-live`. - Smoke: `npm run test:protomux-rpc-message-search-live`.
## Audit export archive pull (v0.8.841+, Phase 874)
When `PEARCORD_RPC_WIRE=v2|dual` and `PEARCORD_RPC_REQUEST_WIRE=1`:
- Requester calls `requestGossipFromPeer` with `AUDIT_EXPORT_ARCHIVE_REQUEST`; holder responds with full `AUDIT_EXPORT_ARCHIVE` body via `_buildAuditExportArchiveResponsePayload`.
- `_fetchAuditExportArchiveFromMeshOnce` tries `_tryFetchAuditExportArchiveFromMeshRpc` before gossip fanout + waiters.
- With `targetMemberId`, RPC fans out to all mesh peers; only the matching member responds.
- Timeouts: `PEARCORD_AUDIT_EXPORT_ARCHIVE_RPC_MS`, `PEARCORD_AUDIT_EXPORT_ARCHIVE_RPC_WIRE_READY_MS`.
- Smoke: `npm run test:protomux-rpc-audit-export-archive-live`.
## Device pair pull (v0.8.840+, Phase 873) ## Device pair pull (v0.8.840+, Phase 873)
Opt-in on the **device-sync mesh** (`pearcord-device-sync-v1` / `pearcord-device-sync-rpc-v2`) — does **not** enable guild/notification v2 by itself: Opt-in on the **device-sync mesh** (`pearcord-device-sync-v1` / `pearcord-device-sync-rpc-v2`) — does **not** enable guild/notification v2 by itself:
+7
View File
@@ -0,0 +1,7 @@
# Release v0.8.841 — Phase 874
Opt-in protomux-rpc **request/response** for audit export archives: requester pulls full `AUDIT_EXPORT_ARCHIVE` bodies via `AUDIT_EXPORT_ARCHIVE_REQUEST` when `PEARCORD_RPC_WIRE=v2|dual` and `PEARCORD_RPC_REQUEST_WIRE=1`. Default gossip fanout + waiters unchanged.
- `platform-audit-archive-rpc-mixin.js` — builder, responder, `_tryFetchAuditExportArchiveFromMeshRpc`
- RPC-first path in `_fetchAuditExportArchiveFromMeshOnce`
- CI: `npm run test:ci-phase874`