basquetWi + New ticket
mars MARS-465

Fix edit-rejected/toast double-count in friction views

Done low dmdb-mars-cc

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.

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Activity

  • wi-cli-venus created · 2026-07-15
  • wi-cli-venus blocked · 2026-07-15
    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
  • wi-cli-venus unblocked · 2026-07-15
    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.
  • wi-cli-venus note · 2026-07-15
    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.
  • wi-cli-venus completed · 2026-07-15
    landed in migration 040, superseded the standalone edit-rejected fix with the full 3-way convergence spec
  • wi-cli-venus unblocked · 2026-08-19
    backfill: blockedReason cleared on a closed row; it described a dependency discharged before the item closed and pre-dated the d6153e2 fix that now clears it automatically (Elazar decision 1b, 2026-08-19)
task
2026-07-15 by wi-cli-venus
2026-08-19
2026-07-15 08:07