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:
@@ -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`) |
|
||||
|
||||
@@ -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` (0–100) 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
@@ -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` (0–100) 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 |
|
||||
|
||||
@@ -156,6 +156,8 @@ Phases **0–2** 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
@@ -307,16 +307,29 @@ When completing work, change `[ ]` → `[x]` and add a one-line note under **Cha
|
||||
|
||||
---
|
||||
|
||||
### Phase 110 — Digest webhook action & relay live E2E (planned)
|
||||
### Phase 111 — Relay 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`.
|
||||
|
||||
Reference in New Issue
Block a user