Tiered scholarship slots — Scholarships are now a funded, per-class pool instead of an unbounded admin grant. Each class earns slots from ticket sales, and there's a new "Sponsor a seat" donation option to fund slots for a specific class directly. The scholarship application now asks which class you're applying for, along with a short intent statement. Slot availability shows on the class page, including one-day intensive classes. (#662, #668)
Admin review queue for the Risk Atlas news ingester — Staff can now approve or reject AI-surfaced Risk Atlas timeline candidates with Apply/Reject buttons, instead of running a script by hand. (Admin/staff-facing) (#660)
Improved
Anonymous visitors now see one clean theme until they sign up — First-time and returning visitors who haven't created an account stay on the clear, CTA-forward "original" theme instead of being randomly rotated through the ~25 more expressive themes (several of which could visually bury the signup button). Signed-in users' theme experience is unchanged. (#651)
Fixed
A wedged internal event queue could freeze the entire site — The site went fully unreachable twice this week when an internal notification/analytics connection got stuck, blocking every request thread behind it. Publishing those events is now fully non-blocking, so a stuck connection can no longer take the whole site down. (#648)
Two crash guards — Submitting the admin "create Stripe product" form with no description no longer errors, and malformed ?page= values on public pages like /changelog no longer cause a server error. (#654)