feat(kudos): /kudos recognition command + leaderboard (LC-526) #504
Loading…
Reference in a new issue
No description provided.
Delete branch "feat/LC-526-kudos"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Adds team recognition: a
/kudos @user <reason>slash command and a leaderboard, the culture feature from the round-2 brainstorm shortlist.Giving:
/kudos @user <reason>records a kudos and posts a "Kudos to @user: reason" message authored by the giver. The@mentionrides the existingfinalize_message_sendpipeline, so the receiver is notified for free. Self-kudos and unknown users are rejected; the reason is optional and capped at 500 chars.Leaderboard:
GET /kudos(new sidebar nav row) shows two lists - Most appreciated (top receivers) and Most generous (top givers) - over the past 30 days, scoped to the enclaves the viewer belongs to so cross-enclave tallies never leak. It is a plain aggregate over the newkudostable (migration 0081), reusing the pins/highlights page shape.Shipped as four small logical commits: db layer, slash command, leaderboard page + nav, tests.
Moderation posture (per the brainstorm's call-outs): additive only (no downvotes, no remove path), enclave-scoped so only teammates see a board, and the recognition messages are normal room posts that mods already see and can delete. Deferred: a per-user opt-out of the public board (noted for follow-up; the enclave scoping + positive-only design covers the main concern).
Tests: db-layer ranking / enclave-scoping / window / limit (db_kudos.rs); i18n parity (en + es).
just test+just test-saas+just checkgreen. The/kudosHTTP path is not integration-tested (SSO-gated harness); its parsing is trivial and the aggregation it feeds is covered.Not operator-visible (no env/config/security change).
🤖 Generated with Claude Code