docs: Phase 110 complete (v0.8.74), Phase 111 roadmap

Document digest-relay hook action, hookFailureDigestNotifyPrefs,
archivePeerSeen health on GUILD_SYNC, and four new smoke tests.
Mark Phase 110 done and plan Phase 111 (relay plugins, DM summaries).

Co-authored-by: Cursor <[email protected]>
This commit is contained in:
Raven Scott
2026-05-22 06:11:06 -04:00
co-authored by Cursor
parent 004c0b6664
commit 96661f0aed
5 changed files with 37 additions and 7 deletions
+4
View File
@@ -103,6 +103,10 @@ Pearcord validates itself without manual QA.
| `npm run test:digest-inbox-channel` | Digest inbox channel (`DIGEST_INBOX_CHANNEL_SMOKE_OK`) |
| `npm run test:worker-semver-constraint` | Worker semver constraint (`WORKER_SEMVER_CONSTRAINT_SMOKE_OK`) |
| `npm run test:automation-health-dashboard-live` | Live health dashboard (`AUTOMATION_HEALTH_DASHBOARD_LIVE_SMOKE_OK`) |
| `npm run test:digest-relay-hook-action` | `digest-relay` hook action (`DIGEST_RELAY_HOOK_ACTION_SMOKE_OK`) |
| `npm run test:digest-relay-handoff-sync-live` | Mesh `digestRelayHandoff` sync (`DIGEST_RELAY_HANDOFF_SYNC_LIVE_SMOKE_OK`) |
| `npm run test:hook-failure-digest-notify` | Hook failure digest push prefs (`HOOK_FAILURE_DIGEST_NOTIFY_SMOKE_OK`) |
| `npm run test:archive-peer-health-sync` | `archivePeerSeen` health on GUILD_SYNC (`ARCHIVE_PEER_HEALTH_SYNC_SMOKE_OK`) |
| `npm run test:worker-stage` | Pear stage dry-run includes worker entry |
| `npm run test:worker-release` | Optional Pear key release dry-run (`WORKER_RELEASE_OK` or skip) |
| `npm run test:automation-export` | Automation manifest export/import (`AUTOMATION_EXPORT_SMOKE_OK`) |
+7
View File
@@ -22,6 +22,7 @@ Webhook-style **delivery acknowledgments** for Pearcord automation hooks — ful
| `log` | Emit `automation-hook-log` on platform (default) |
| `notify` | Push local inbox notification (`kind: automation`) |
| `fanout-local` | Re-deliver event to local `AppEventBridge` with `hookFanout` metadata |
| `digest-relay` | Log last digest relay handoff + audit `automation.hook.digest-relay` (v0.8.74) |
## Dispatch flow
@@ -169,6 +170,8 @@ Retention: max 8 archives per guild, 30-day prune. `appendAuditExportArchive` me
**v0.8.71:** `exportArchivePeerSeenSlice` / `ingestArchivePeerSeenRow` on `GUILD_SYNC`. Digest snapshot mesh fetch uses `computeArchiveFetchBackoffMs` retry loop (max 5 attempts).
**v0.8.74:** `digest-relay` hook action on `AUTOMATION_DIGEST_EXPORT` events. `@pearcord/hook-failure-digest-notify-prefs` mirrors automation digest notify prefs for mesh digest push. `archivePeerSeen` exports `healthScore` / `healthLabel`; ingest merges health when `lastSeenAt` is unchanged.
**v0.8.72:** `@pearcord/automation-digest-notify-prefs` + per-user digest mute. `computeArchivePeerHealthScore` (0100) on archive fetch peers. `buildAutomationHealthDashboard` merges schedules, mesh health, worker hint, and delivery metrics.
**v0.8.73:** `buildDigestRelayHandoff` P2P email relay stub (no SMTP). Inbox channel routing via `digestInboxChannelId`. Notify prefs extended with relay toggle.
@@ -212,6 +215,10 @@ Retention: max 8 archives per guild, 30-day prune. `appendAuditExportArchive` me
| `npm run test:digest-inbox-channel` | Inbox channel post → `DIGEST_INBOX_CHANNEL_SMOKE_OK` |
| `npm run test:worker-semver-constraint` | Worker semver gate → `WORKER_SEMVER_CONSTRAINT_SMOKE_OK` |
| `npm run test:automation-health-dashboard-live` | Live mesh health dash → `AUTOMATION_HEALTH_DASHBOARD_LIVE_SMOKE_OK` |
| `npm run test:digest-relay-hook-action` | `digest-relay` hook action → `DIGEST_RELAY_HOOK_ACTION_SMOKE_OK` |
| `npm run test:digest-relay-handoff-sync-live` | Mesh relay handoff → `DIGEST_RELAY_HANDOFF_SYNC_LIVE_SMOKE_OK` |
| `npm run test:hook-failure-digest-notify` | Hook failure digest push notify → `HOOK_FAILURE_DIGEST_NOTIFY_SMOKE_OK` |
| `npm run test:archive-peer-health-sync` | Archive peer health GUILD_SYNC → `ARCHIVE_PEER_HEALTH_SYNC_SMOKE_OK` |
| `npm run test:integration-worker` | Retention + worker templates |
| `npm run test:delivery-metrics` | `DELIVERY_METRICS_SMOKE_OK` |
| `npm run test:app-events` | App event bridge (unchanged) |
+4 -1
View File
@@ -24,7 +24,8 @@ When a member joins a guild over an invite, they may have **no local message his
"auditExportArchives": [ { "id", "exportedAt", "count", "filter" } ],
"automationDigestExportSchedule": { "enabled": false, "intervalHours": 24, "format": "text", "lastExportAt": 0 },
"automationDigestExportSnapshots": [ { "id", "exportedAt", "format", "summaryLines" } ],
"archivePeerSeen": [ { "userId", "lastSeenAt", "source" } ],
"archivePeerSeen": [ { "userId", "lastSeenAt", "source", "healthScore", "healthLabel" } ],
"hookFailureDigestNotifyPrefs": { "notifyOnPush": true, "muteNotifications": false, "updatedAt": 0 },
"automationDigestNotifyPrefs": { "notifyOnExport": true, "muteNotifications": false, "digestInboxChannelId": null, "digestRelayEnabled": false, "updatedAt": 0 },
"digestRelayHandoff": { "exportedAt": 0, "snapshotId": null, "format": "text", "subject": "…" },
"hookFailureDigest": { "digest": { "totalFailures": 0, "topHooks": [] }, "exportedAt": 0 }
@@ -51,6 +52,8 @@ When a member joins a guild over an invite, they may have **no local message his
**v0.8.73:** Extended `automationDigestNotifyPrefs` with `digestInboxChannelId` and `digestRelayEnabled`. `digestRelayHandoff` metadata syncs last P2P relay bundle (full body via local store / mesh export).
**v0.8.74:** `archivePeerSeen` rows include `healthScore` (0100) and `healthLabel` for mesh archive/digest peer pickers. `hookFailureDigestNotifyPrefs` syncs guild-wide notify-on-push toggles for hook failure digest mesh sync.
## When sync is sent
| Trigger | Who pushes |
+2
View File
@@ -156,6 +156,8 @@ Phases **02** and **4** are largely complete; **3** (live audio) and **5** (n
**Next tranches (Phase 106+):** Automation digest snapshot mesh body gossip · archive peer last-seen · publish announce + matrix E2E.
**v0.8.74 (Phase 110):** `digest-relay` automation hook action, hook failure digest push notification prefs, archive peer health on GUILD_SYNC, live digest relay handoff mesh ingest.
**v0.8.73 (Phase 109):** Digest relay handoff stub, mod digest inbox channel, worker semver constraints, live automation health dashboard mesh sync.
**v0.8.72 (Phase 108):** Digest export notification prefs + app event, archive peer health score, worker release audit, automation health dashboard.
+20 -6
View File
@@ -307,16 +307,29 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
---
### Phase 110Digest webhook action & relay live E2E (planned)
### Phase 111Relay plugins & digest DM summaries (planned)
| ID | Item | Status |
|----|------|--------|
| P110-1 | Automation hook action `digest-relay` (log handoff to hooks) | [ ] |
| P110-2 | Live mesh digest relay handoff ingest smoke | [ ] |
| P110-3 | Hook failure digest notify prefs (mirror digest) | [ ] |
| P110-4 | Archive peer health on GUILD_SYNC | [ ] |
| P111-1 | External relay plugin manifest (`@pearcord/digest-relay-plugin`) | [ ] |
| P111-2 | Mod digest DM summary on hook failure digest push | [ ] |
| P111-3 | Worker prerelease channel tag on release announce | [ ] |
| P111-4 | `digest-relay` hook dry-run preview in server settings | [ ] |
**Next:** External relay plugin manifest · mod digest DM summary · worker prerelease channel tag.
**Next:** SMTP bridge opt-in doc · digest relay webhook signing · archive peer health decay.
---
### Phase 110 — Digest-relay hooks & mesh health sync (v0.8.74)
| ID | Item | Status |
|----|------|--------|
| P110-1 | Automation hook action `digest-relay` + dispatch on `AUTOMATION_DIGEST_EXPORT` | [x] |
| P110-2 | Live mesh `digestRelayHandoff` GUILD_SYNC ingest smoke | [x] |
| P110-3 | `hookFailureDigestNotifyPrefs` + push notifications on mesh sync | [x] |
| P110-4 | `archivePeerSeen` health score/label on `GUILD_SYNC` | [x] |
**Next:** ~~Digest webhook action · relay live E2E · hook failure digest notify · archive peer health sync~~ (Phase 110).
---
@@ -1398,6 +1411,7 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
### Changelog
- **2026-05-22** — v0.8.74: `digest-relay` automation hook action, `hookFailureDigestNotifyPrefs` on GUILD_SYNC, archive peer health in `archivePeerSeen`, relay handoff before event fanout, `test:digest-relay-hook-action`, `test:digest-relay-handoff-sync-live`, `test:hook-failure-digest-notify`, `test:archive-peer-health-sync`.
- **2026-05-22** — v0.8.73: digest relay handoff stub, digest inbox channel routing, worker semver constraints, live health dashboard mesh smoke, `test:digest-relay-handoff`, `test:digest-inbox-channel`, `test:worker-semver-constraint`, `test:automation-health-dashboard-live`.
- **2026-05-22** — v0.8.72: digest export notify prefs, archive peer health score, worker release audit rows, automation health dashboard, `test:automation-digest-notify`, `test:archive-peer-health`, `test:worker-release-audit`, `test:automation-health-dashboard`.
- **2026-05-22** — v0.8.71: digest snapshot fetch retry/backoff, `GUILD_SYNC.archivePeerSeen`, digest fetch UI loading states, `test:digest-fetch-retry`, `test:archive-peer-seen-sync`, `test:automation-digest-snapshot-fetch-live`.