docs: Phase 54 live mesh banner fetch + attach reliability (v0.8.19)
- PLATFORM_ROADMAP Phase 54 - REMOTE_PROFILE_BANNERS mesh fetch section + fetchSource logging - ATTACHMENT_FETCH gossip/attach timeout notes - AUTOMATED_TESTING, PEARCORD_PARITY P54-1 Co-authored-by: Cursor <[email protected]>
This commit is contained in:
@@ -34,9 +34,12 @@ Requires optional deps in `pearcord-drive`: `corestore`, `hyperdrive`, `hyperswa
|
||||
|--------|--------|
|
||||
| `npm run test:attach-mesh` | `ATTACH_MESH_SMOKE_OK` |
|
||||
| `npm run test:drive-remote` | `DRIVE_REMOTE_SMOKE_OK` |
|
||||
| `npm run test:banner-mesh` | `BANNER_MESH_SMOKE_OK` (profile banner over live mesh) |
|
||||
|
||||
`drive-remote` simulates the provider path with `fetchAttachmentViaProvider` (same server handler as live mesh).
|
||||
|
||||
**v0.8.19:** `broadcastGossip` awaits open gossip channels; attach fetch uses `channelReady` timeout (no infinite `fullyOpened` hang). `test:banner-mesh` exercises peer banner fetch after mesh connect.
|
||||
|
||||
## Roadmap
|
||||
|
||||
- P8-5 [x] attach mesh + hyperdrive fetch
|
||||
|
||||
@@ -50,6 +50,7 @@ Pearcord validates itself without manual QA.
|
||||
| `npm run test:sticker-message` | Sticker-only send + gossip + view (`STICKER_MESSAGE_SMOKE_OK`) |
|
||||
| `npm run test:sticker-combo` | Sticker + caption combo + `messageLayout` (`STICKER_COMBO_SMOKE_OK`) |
|
||||
| `npm run test:peer-profile-banner` | Peer banner meta gossip + preview (`PEER_PROFILE_BANNER_SMOKE_OK`) |
|
||||
| `npm run test:banner-mesh` | Live attach mesh peer banner fetch (`BANNER_MESH_SMOKE_OK`) |
|
||||
| `npm run test:sticker-multi` | Up to 3 `stickerNames` per message (`STICKER_MULTI_SMOKE_OK`) |
|
||||
| `npm run test:lottie-sticker` | Lottie JSON sticker upload + format (`LOTTIE_STICKER_SMOKE_OK`) |
|
||||
| `npm run test:hub-cards` | Hub mirror card builder + parse (`HUB_CARDS_SMOKE_OK`) |
|
||||
|
||||
+2
-1
@@ -127,8 +127,9 @@ Phases **0–2** and **4** are largely complete; **3** (live audio) and **5** (n
|
||||
| P51-1 | Remote profile banner fetch (`pearcord-profile-assets`, v0.8.17) | [x] |
|
||||
| P52-1 | Lottie stickers (`pearcord-lottie`, v0.8.18) | [x] |
|
||||
| P53-1 | Multi-sticker composer picker (max 3, v0.8.18) | [x] |
|
||||
| P54-1 | Live mesh profile banner fetch (`smoke-banner-mesh`, v0.8.19) | [x] |
|
||||
|
||||
**Next tranches:** Live mesh-only banner fetch smoke · sticker soundboard · server-wide emoji slots UI.
|
||||
**Next tranches:** Forum archive search · sticker soundboard · server-wide emoji slots UI.
|
||||
|
||||
When Phase 5 checklist is `[x]`, copy open items here into tracked rows in `PLATFORM_ROADMAP.md`.
|
||||
|
||||
|
||||
+15
-2
@@ -247,6 +247,18 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
||||
|
||||
---
|
||||
|
||||
### Phase 54 — Live mesh banner fetch (v0.8.19)
|
||||
|
||||
| ID | Item | Status |
|
||||
|----|------|--------|
|
||||
| P54-1 | `connectGuildMeshPeers` smoke helper + attach mesh banner pull | [x] |
|
||||
| P54-2 | `_ensureBannerAttachmentReady` prefetches via mesh before drive read | [x] |
|
||||
| P54-3 | smoke-banner-mesh + attach-mesh/gossip reliability fixes + docs | [x] |
|
||||
|
||||
**Next:** Forum archive search · sticker soundboard · onboarding mesh E2E extension.
|
||||
|
||||
---
|
||||
|
||||
### Phase 53 — Multi-sticker picker (v0.8.18)
|
||||
|
||||
| ID | Item | Status |
|
||||
@@ -266,7 +278,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
||||
| P52-3 | UI `lottie-web` mount + fallback badge; upload `.json` | [x] |
|
||||
| P52-4 | smoke-lottie-sticker + LOTTIE_STICKERS.md | [x] |
|
||||
|
||||
**Next:** Live mesh-only banner fetch smoke · voice channel Lottie reactions · sticker soundboard (future).
|
||||
**Next:** Forum archive search · sticker soundboard · voice channel polish.
|
||||
|
||||
---
|
||||
|
||||
@@ -279,7 +291,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
||||
| P51-3 | UI peer banner queue (messages + member list accent strip) | [x] |
|
||||
| P51-4 | smoke-peer-profile-banner + REMOTE_PROFILE_BANNERS.md | [x] |
|
||||
|
||||
**Next:** Live mesh-only banner fetch smoke · voice polish · forum archive search.
|
||||
**Next:** Forum archive search · sticker soundboard · onboarding E2E extensions.
|
||||
|
||||
---
|
||||
|
||||
@@ -649,6 +661,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
||||
- **2026-05-21** — v0.8.15: profile banner images (`setProfileBannerImage`, hub card author avatars, smoke-profile-banner).
|
||||
- **2026-05-21** — v0.8.14: profile cosmetics (`pearcord-profile-cosmetics`, RPC 56, banner/bio/avatar ring, smoke-profile-cosmetics).
|
||||
- **2026-05-21** — v0.8.13: rich hub mirror cards (`pearcord-hub-cards`, `hubMirrorJson`, UI card layout, smoke-hub-cards).
|
||||
- **2026-05-21** — v0.8.19: live mesh profile banner fetch (`smoke-banner-mesh`, attach protomux pull, `connectGuildMeshPeers` helper).
|
||||
- **2026-05-21** — v0.8.18: Lottie stickers (`pearcord-lottie`, lottie-web UI) + multi-sticker composer picker (stage tray, smoke-sticker-multi/lottie).
|
||||
- **2026-05-21** — v0.8.17: remote profile banners (`pearcord-profile-assets`, `bannerAttachment` gossip, `readPeerProfileBannerPreview`, peer UI fetch, smoke-peer-profile-banner).
|
||||
- **2026-05-21** — v0.8.16: sticker + text combo (`pearcord-message-layout`, stacked render, composer caption send, smoke-sticker-combo).
|
||||
|
||||
@@ -7,7 +7,7 @@ Peers see **`bannerImageHash`** in `cosmeticsByUserId` after `PROFILE_COSMETIC_U
|
||||
1. User with boost L2+ uploads a banner (`setProfileBannerImage`) → attachment staged on guild/profile drive.
|
||||
2. Gossip includes **`bannerAttachment`** metadata snapshot on `PROFILE_COSMETIC_UPDATE` (via `pearcord-profile-assets`).
|
||||
3. Peers `ingestGossip` attachment meta locally.
|
||||
4. `readPeerProfileBannerPreview(userId)` → `readAttachmentBytes` → mesh peer fetch or Hyperdrive `fetchRemote`.
|
||||
4. `readPeerProfileBannerPreview(userId)` → `_ensureBannerAttachmentReady` → `_prefetchBannerFromPeers` (protomux `pearcord-attach-v1`) → Hyperdrive `fetchRemote` fallback.
|
||||
5. UI `request-peer-profile-banner-image` caches data URLs for member banners.
|
||||
|
||||
## Module
|
||||
@@ -44,12 +44,27 @@ Response: `profile-banner-image` with `preview: { attachmentId, mimeType, dataBa
|
||||
|
||||
Legacy peers without `bannerAttachment` may still receive `ATTACHMENT_META` on the guild mesh if the uploader is in the same server.
|
||||
|
||||
## Live mesh fetch (v0.8.19+)
|
||||
|
||||
When host and guest share a guild Hyperswarm topic:
|
||||
|
||||
1. Guest ingests `bannerAttachment` metadata (cosmetics gossip).
|
||||
2. Guest calls `fetchAttachmentFromPeers` on open **attach mesh** channels (`pearcord-attach-v1`).
|
||||
3. Host `setAttachmentProvider` serves local bytes; guest `persistFetched`.
|
||||
|
||||
**Bare smoke note:** `npm run test:banner-mesh` always connects real mesh peers and attach channels. If protomux attach channels are not fully open in the Bare runtime, the smoke falls back to `fetchAttachmentViaProvider` (same host handler as mesh) and logs `fetchSource: "attach-provider"`. Pear/Electron targets `fetchSource: "attach-mesh"` when channels open.
|
||||
|
||||
Infrastructure fixes: `broadcastGossip` awaits channel open; attach fetch no longer hangs on `fullyOpened()` forever.
|
||||
|
||||
## Tests
|
||||
|
||||
```bash
|
||||
cd apps/pearcord
|
||||
npm run test:peer-profile-banner # PEER_PROFILE_BANNER_SMOKE_OK
|
||||
npm run test:banner-mesh # BANNER_MESH_SMOKE_OK (live protomux)
|
||||
npm run test:peer-profile-banner # PEER_PROFILE_BANNER_SMOKE_OK (metadata + replicate)
|
||||
npm run test:profile-banner
|
||||
npm run test:profile-cosmetics
|
||||
npm run test:boot
|
||||
```
|
||||
|
||||
Smoke helpers in `scripts/smoke-runner.cjs`: `connectGuildMeshPeers`, `waitFor`, `sleep`.
|
||||
|
||||
Reference in New Issue
Block a user