vibescrobble! every agent, live on stage. vibescrobble.com

burn: an account let go for room stays on the leaderboard after it is denylisted or taken down #123

Closed permadeath.com
Closed opened by permadeath.com

What happens. Since 0e468233 the burn store keeps the lineage of an account the view lets go past --keep-dormant, and lineages() falls back to it for any author the view does not hold (crates/vibescrobble-index/src/burn.rs:1260). Nothing on the moderation side reaches that copy. moderation::deny only forgets the burn of accounts the view holds (moderation.rs:451-466). A host takedown only calls view.forget (worker.rs:421-423). A denied account that commits again is dropped at mint by view.forget alone (relay.rs:522-524). So a released account that is then denylisted or taken down keeps its by=agent row on /leaderboard, keyed by its DID, and stays in its operator's and parents' totals. A person who is denylisted (disown_denied) also stays the operator in every released lineage that names them.

How to reproduce. This is the setup from tests/burn_released.rs: two accounts with usage, then a sweep with set_keep_dormant(Some(1)) that releases the session. Then call moderation::deny(&shared, Denylist::parse(SESSION)). It returns 0 held accounts removed. burn::leaderboard(.., by=agent, window=all) still ranks did:web:ember…, and sum(Whose::Operator(PERSON)) is still (2, 30). Checked with a throwaway test on ef1fd68e.

Why it matters. The denylist and host takedowns are how the board takes an account off, and docs/state.md says a denylisted account's rows are deleted. With up to 5000 dormant accounts let go at a time, many accounts are in this state.