0
0
Fork 0
mirror of https://github.com/discourse/discourse.git synced 2026-08-08 14:34:02 +08:00
discourse/app/models/concerns/reports
chapoi bf0128fa86
UX: Trust level section functional redesign (#41231)
The engagement dashboard's "Trust level pipeline" showed each level's
membership
plus direction-blind "moves in / moves out" counts, colored by
**position**
(in vs. out). That mislabeled healthy movement: a member graduating
*out* of Tiers, especially New,
rendered as a red ↓, reading as negative when it's the best possible
outcome.

This PR reframes the widget as a **directional arrivals funnel** with a
focus on the flow, and specifically looks at promoted/demoted-in
  
  ## Design thinking

- **Direction, not position.** Trust-level movement has a meaningful
axis —
up (promotion) is good, down (demotion) is not. We split every move into
`promoted_in` and `demoted_in`, drop the double bars, and colour by
direction: if more promotions => green, if more demotions => red.
Leaving New is now correctly green.
- **An "arrivals" funnel.** Each rung answers one consistent question:
*how many
members arrived here this period?* For every bar it's tracked the same
way + we add an extra label for the tier that is set as the `Default
trust level`.
- **Sign-ups ≠ promotions.** Signups are excluded from both the trend
and the bar scale. It's volume would otherwise often dwarf the other
bars.

  ## Backend — `reports/trust_level_pipeline.rb`

- **Snapshot** per level: `User.real.group(:trust_level).count` + share.
No date
    filter — it's the current distribution, not a period metric.
- **Directional arrivals** from `user_histories` (`change_trust_level` +
    `auto_trust_level_change`) within the period: `promoted_in`,
    `demoted_in` per level.
- **Sign-ups**: real users created in the period, attributed to the
entry level
(`SiteSetting.default_trust_level`). Not counted as trust-level moves.
- **Trend** (`prev_period`): net = promotions − demotions across the
ladder
    (sign-ups excluded) → `climbing` / `dropping` / `stable`.

## Known limitation
  
The `Default invitee trust level` is not taken into account, which means
invitees can be counted at the wrong rung.
However, accounting for it correctly means distinguishing invited from
organic sign-ups (joining through invites, and handling that a user's
trust level may have moved since they joined), which introduces a second
entry point. That breaks the widget's core simplification and adds
complexity. Overall I'm expecting the % of invitees to usually not
meaningfully muddle the representation of the pipeline flow.
2026-07-02 13:31:28 +08:00
..
activity_by_category.rb PERF: Improve activity by category report by doing it one-pass across the (e.g.) 2 year date period (#40945) 2026-06-16 23:45:06 +08:00
admin_logins.rb DEV: rename staff_logins report to admin_logins (#39840) 2026-05-11 10:49:09 +10:00
associated_accounts_by_provider.rb FIX: Update associated accounts report to handle Discourse Connect (#34462) 2025-08-21 13:51:06 -04:00
bookmarks.rb
consolidated_api_requests.rb
consolidated_page_views.rb
consolidated_page_views_browser_detection.rb
daily_engaged_users.rb PERF: Compute dashboard KPIs in a single pass (#40705) 2026-06-10 21:09:27 +08:00
dau_by_mau.rb PERF: Compute dashboard KPIs in a single pass (#40705) 2026-06-10 21:09:27 +08:00
emails.rb
flags.rb
flags_status.rb
likes.rb
mobile_visits.rb
moderator_warning_private_messages.rb
moderators_activity.rb
new_contributors.rb PERF: Compute dashboard KPIs in a single pass (#40705) 2026-06-10 21:09:27 +08:00
notify_moderators_private_messages.rb
notify_user_private_messages.rb
post_edits.rb SECURITY: Do not leak PM post edits to moderators 2026-03-19 15:21:28 +00:00
posters_by_member_type.rb FEATURE: Who's posting section of the dashboard engagement section (#40225) 2026-05-22 12:46:32 +08:00
posts.rb
profile_views.rb
signups.rb
site_traffic.rb FEATURE: Add site traffic dashboard section (#40023) 2026-05-19 14:08:21 +08:00
storage_stats.rb
suspicious_logins.rb FIX: Suspicious login IPs bypass the moderator IP-visibility setting (#40154) 2026-05-22 13:22:32 +08:00
system_private_messages.rb
time_to_first_response.rb DEV: Fix assigned but unused variable Prism warnings (#39436) 2026-04-22 12:42:14 +02:00
top_countries_by_browser_pageviews.rb FEATURE: Drill-down and pagination for top referrers/countries (#40364) 2026-06-02 09:57:39 +08:00
top_ignored_users.rb
top_referred_topics.rb
top_referrers.rb
top_referrers_by_browser_pageviews.rb Revert "FEATURE: Surface Direct traffic in the Top referrers dashboard card (#40470)" (#40508) 2026-06-03 10:24:24 +08:00
top_traffic_sources.rb
top_uploads.rb
top_users_by_likes_received.rb
top_users_by_likes_received_from_a_variety_of_people.rb
top_users_by_likes_received_from_inferior_trust_level.rb
topic_view_stats.rb
topics.rb
topics_with_no_response.rb
trending_search.rb
trust_level_growth.rb
trust_level_pipeline.rb UX: Trust level section functional redesign (#41231) 2026-07-02 13:31:28 +08:00
user_flagging_ratio.rb
user_to_user_private_messages.rb
user_to_user_private_messages_with_replies.rb
users_by_trust_level.rb
users_by_type.rb
visits.rb DEV: Remove reporting_improvements upcoming change (#41259) 2026-07-01 07:52:02 +08:00
web_crawlers.rb
web_hook_events_daily_aggregate.rb