Skip to content

Feedback mapping

What happens to your ranking when you press a button. Every feedback control has a documented, tested effect.

The code is the source of truth: REASON_EFFECTS in backend/app/services/ranking/feedback_map.py, tested by backend/tests/test_api/test_feedback_reasons.py. This page is the readable version.

Reason tags (thumbs-down → "Why?")

Tag Label y Confidence Cluster weight Source trust Notes
too_basic 0.35 0.8 −0.10 None Also raises the depth expectation for the cluster (carried by the label; A4)
already_knew 0.35 0.8 −0.10 None Same behavior as too_basic
off_topic 0.0 1.0 −0.20 None Strongest cluster weakening (A4: "weaken that cluster link")
too_tangential 0.0 1.0 −0.20 None Legacy spelling of off_topic; same effect
wrong_depth 0.45 0.6 None None Calibration only: depth preference, not interest
clickbait 0.20 0.8 None −0.10 Source-quality failure, not an interest miss

Behavior labels feed pairwise weight learning (A5); the cluster/source effects are applied immediately when the tag is recorded (POST /api/v1/feedback/interaction). Effects fire once per stored reason: retries repeating the same reason do not compound, and a changed reason applies its own effect (no inverse-delta of the old one). The cluster delta targets the item's top cluster, defined as topic_clusters[0] (the summarizer emits the primary label first).

Direct controls

Control Where Mechanism
Useful / Not for me Digest cards, reader, email one-click explicit_rating ±1 → label (1.0 / 0.0, c 1.0)
Save Cards, reader, email one-click saved=true → strong positive once read (UX-12 semantics)
Snooze topic Preferences → interest graph (suppress, 30 d) POST /feedback/adjust-interests {action: suppress, duration_days}
Mute source Sources page PATCH /sources/{id} {is_active: false}
Boost / suppress cluster Preferences → interest graph POST /feedback/adjust-interests {action: boost \| suppress}

Not on the cards yet

"More like this" and "Less like this" buttons aren't on digest cards yet. The mechanism (adjust-interests) exists and the interest-graph page uses it.

What each signal sees

  • explicit_feedback (signal 4): similarity-weighted mean of previously rated items, plus the depth/tangency adjustments.
  • Interest-graph node weights: changed by the cluster deltas above and by direct controls; the graph drives the semantic signal's medoid weighting.
  • source_trust (signal 5): Beta posterior over per-source behavior; the clickbait delta nudges its prior (sources.trust_weight).