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).