-- Per-user rate limit for social writes (likes, comments, comment deletions). -- -- These were the only writes in the app with no limit at all. Every other mutating -- path -- upload, join, recover, export, admin login -- carries one; social.rs -- carried none, so the coverage was asymmetric rather than deliberately open. -- -- Severity is genuinely low for an invited-guest event, and the amplification worry -- turned out to be contained: a like fans an SSE broadcast to ~100 clients, but the -- export regeneration it could otherwise trigger is debounced (REGEN_DEBOUNCE 20s) -- and superseded workers are inert. So this closes the gap for symmetry, not urgency, -- and the ceiling is set high enough that no real guest will ever meet it -- a -- double-tapping enthusiast at a wedding is not the thing being defended against. INSERT INTO config (key, value) VALUES ('social_rate_per_min', '120'), ('social_rate_enabled', 'true') ON CONFLICT (key) DO NOTHING;