diff --git a/AGENTS.md b/AGENTS.md index 7a8681e..ab56ca5 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -2575,12 +2575,27 @@ shared `filterAdminHidden` drops muted authors across every list; the flagged notice has a Mute action. **Alerts landed:** `useNetworkAlerts` + `/alerts` (`pages/NetworkAlertsPage.tsx`) list accounts you follow that trusted people reported/muted, with Ignore/Unfollow/Mute/Report; Settings → Trust links to it -with a count (ignored set in `skatespots:trust:alerts-ignored`). Still open: -running our own GrapeRank-style scorer in `cvm-server` — the full confidence -model is provider-side today. Check +with a count (ignored set in `skatespots:trust:alerts-ignored`). Deferred: our +own GrapeRank-style scorer — see the dated note below. Check `TRUST_SCORE.md` before touching `useTrustScore` / `useRelatrScore` / `trustFilter`. +**Own GrapeRank-style scorer — DEFERRED (2026-10-09).** Do NOT build the +`cvm-server` per-observer scorer yet. The full confidence model is provider-side +and already consumed via NIP-85, and the client fallback now has a local +confidence gate (`useViewerGraph`, `FOF_MIN_RATERS`). Why hold: personalized +kind-30382 needs a **per-observer signing key** (server key custody or per-user +delegation — a trust/key-management burden, not a checkbox); an 8-hop traversal is +heavy without a graph store; plus a provider identity, the publish/delete +lifecycle, deploy to the external host and monitoring. With ~zero users the ROI is +negative. Cheaper path if a controlled score is ever wanted: a +**house-perspective** scorer (one key, one observer, computed on a schedule, +publishes kind-30382) — Settings → Trust's provider choice consumes it with no +client change. **Revisit when:** there are users, no trustworthy provider exists, +or there are skate-specific signals (vouches, trade attestations) worth baking +into a score only we can compute. The client is already provider-ready +(`useTrustAssertions` + kind-10040 choice), so this decision costs nothing today. + **Keep the door open (cheap):** admin keys and relay sets must stay *data you can swap*, not constants. Hardcoded `ADMIN_PUBKEYS` is fine now — converting it later is a small refactor, not a trap. diff --git a/TRUST_SCORE.md b/TRUST_SCORE.md index 1dd3937..701e164 100644 --- a/TRUST_SCORE.md +++ b/TRUST_SCORE.md @@ -91,9 +91,11 @@ flagged notice's reporter breakdown, and Settings → Trust. `deriveLocalScore` returns `verified` only at `FOF_MIN_RATERS` (2) or more. A lone endorsement no longer reads as trust. - Provider assertions are unaffected: the full GrapeRank confidence model lives - in the provider and we consume it via NIP-85. Running our own scorer (planned - for `cvm-server`, publishing kind-30382) remains the open item — it is the only - way to get the real confidence gate and a server-published score. + in the provider and we consume it via NIP-85. Running our own scorer is + **deferred** — see the dated decision in `AGENTS.md` ("Own GrapeRank-style + scorer — DEFERRED"): the per-observer signing key and 8-hop compute are the + blockers, and the client is already provider-ready. A house-perspective scorer + (one key, one observer) is the cheaper path if ever wanted.