Fix edit-rejected/toast double-count in friction views
MARS-464 finding (JOIN-verified, all-time appEvents): Mars's friction double-count is NARROW, not systemic — only practica/edit-rejected co-occurs with a toast/error-shown row within ±1s (6/11 rows, 55%), same actorUserId+route+message text. create-rejected (13 rows) and self-delete-rejected (1 row) have ZERO co-occurring toasts — those stay as-is, they're the only signal for those actions. Fix once mars/pluto/venus criteria convergence lands: drop category=practica action=edit-rejected from vFrictionEvents's allowlist (the toast already covers it, matches the fleet 'toast is canonical, backend diagnostic is its echo' principle) OR repoint per whatever the converged criteria decides. Blocked on the still-open 3-way criteria fork, same as MARS-461/462 — do not implement standalone.
Questions
Activity
-
blocked on the still-open mars/pluto/venus friction-criteria convergence (bs-mrlqhi9hhir follow-on) — implement once one shared opt-out WHERE-clause shape lands
-
Converged spec landed (bs-mrlrxvqesgi, 2026-07-15): opt-out base (exclude ops-rail: email/cron/integration) + per-event anti-join (NOT EXISTS on actorUserId+short-window vs toast rows, replaces the per-action %-threshold exclude-list — supersedes this WI's original 'drop edit-rejected from allowlist' framing, edit-rejected now gets excluded by live per-event match not a hardcoded drop) + fail-closed action-classification table (user-facing|ops|test, default-excluded, CI-guard-enforced). Classification table + CI guard = Class-A DDL, routes to team (db-led, audit-mars-ca pre-implementation review), not solo.
-
DONE (migration 040, applied live 2026-07-15). Full criteria rework, not just the edit-rejected dedup: all 6 friction-family views (vFrictionEvents/NoLimit, 1w/1wNoLimit, 1m/1mNoLimit) rewritten to one shared predicate — category='toast' unconditional OR (level>=warn OR isForcedCandidate flag) AND classification != ops/test (new appEventActionClassifications table, default-INCLUDED per PM decision) AND, non-toast only, NOT EXISTS a directional toast/error-shown row same actorUserId+route within [t, t+3s) — this anti-join structurally fixes the edit-rejected double-count (and any future one) instead of a one-off allowlist edit. Design: db-mars-cc + audit-mars-ca (2 review rounds) + pm-mars-cc (resolved default-included-vs-excluded + the alert-rail pager collision coder-mars-cc caught). Acceptance-proof set-diff (old predicate vs new, all-time): 0 rows lost. mars-db-extras.md + schema.md/reference-data.tsv updated.
-
landed in migration 040, superseded the standalone edit-rejected fix with the full 3-way convergence spec