Dependency: READY — start now. No blockers, independent of #172/#174. Can reuse the atomic-upsert budget pattern from #160/#171.
Rate-cap validation matches
Every submission immediately schedules a validation match (SubmissionController.java:144-156) with no rate limit on this path at all — the only submission throttle is a cumulative storage-size quota. During a submission rush this adds one match per upload on top of matchmaking, on the same shared queue.
Fix
Apply a per-team cooldown or an in-flight cap on validation matches (the atomic-upsert budget introduced for the scrim endpoint #160 / T2 fetch budget #171 is reusable here), or debounce repeated submissions from the same team within a short window.
Part of the wait-time track (#172, #174, cs3600_2026#34/#35).
Rate-cap validation matches
Every submission immediately schedules a validation match (
SubmissionController.java:144-156) with no rate limit on this path at all — the only submission throttle is a cumulative storage-size quota. During a submission rush this adds one match per upload on top of matchmaking, on the same shared queue.Fix
Apply a per-team cooldown or an in-flight cap on validation matches (the atomic-upsert budget introduced for the scrim endpoint #160 / T2 fetch budget #171 is reusable here), or debounce repeated submissions from the same team within a short window.
Part of the wait-time track (#172, #174,
cs3600_2026#34/#35).