Imports included, undo restored
- changelog
Python: the imports are already there
A recurring piece of feedback from Python solvers: on LeetCode you can reach for Counter, deque, heappush or bisect_left without writing the import, and here you could not. Now you can. Every Python submission runs with the common standard-library names imported above your code: typing, collections, itertools, functools and heapq in full, bisect, math, operator, string, re, random and copy as modules, plus the by-name favourites such as bisect_left, inf, gcd, lcm, isqrt, comb, prod, itemgetter, deepcopy, dataclass and Enum.
Two deliberate omissions: math and operator are never wildcard-imported, because both would replace the built-in pow and break the three-argument pow(base, exp, mod) that modular arithmetic relies on. Only the standard library is covered, so sortedcontainers still is not available. Your own imports keep working exactly as before, and error line numbers still point at your code.
Undo, restored
Someone reported that Ctrl/Cmd+Z no longer undid anything in the editor. Chasing it turned up three unrelated faults, each of which looked identical from the outside: you press undo, nothing happens.
Draw mode was taking the chord. Ctrl/Cmd+Z undoes your last stroke while the pen is armed, which is useful — but arming the pen only captures the mouse, never the keyboard. The editor keeps focus, so you carry on typing code with the pen out, and every undo went to the drawing instead. Worse, before you had drawn anything at all the shortcut was swallowed and did nothing.
Undo now follows the keyboard. With the cursor in the editor, Ctrl/Cmd+Z undoes code; with focus anywhere else it still walks strokes back, and the toolbar's undo button always does. If there is no stroke to remove, the shortcut is left alone rather than eaten.
Opening a past submission threw the history away. Clicking a submission in the Submissions tab replaced the editor, and "Back to editor" built a fresh one — your code came back, because that is kept separately, but everything you could have undone was gone. Your editor is now hidden behind a submission rather than torn down, so its history survives the round trip. Switching to a spectated tab and back does the same.
Reset was permanent. Resetting to the starter template replaced the whole document in a way the editor treats as a fresh start, so Ctrl/Cmd+Z could never bring your work back. Now it can. The same applies to a recovered draft. Switching language still starts clean, on purpose — undo should not be able to paste C++ into a Python buffer.
The largest test suites no longer time out
A handful of problems ship test data in the 10–25 MB range, and submitting those could come back as a timeout that had nothing to do with your solution being slow: we were hanging up on the judge before it had finished writing the submission. The waiting budget now scales with the size of what is actually sent instead of sitting at a flat 45 seconds, so those problems judge normally.
Three layout fixes
Example blocks wrap. A long Input: nums = [...] line in a problem description used to put a horizontal scrollbar inside the description pane, so reading the whole example meant dragging sideways. Example blocks now word-wrap, with each Input, Output and Explanation still on its own line.
Crowded study groups. With eight or more members the study-group sidebar's leaderboard grew past the panel, the chat collapsed to nothing, and its composer painted over the leaderboard header. Each section now has its own bounded scroll region: the leaderboard takes at most half the panel, the chat always keeps its tabs and composer on screen, and the online-member chips cap at three rows and scroll beyond that. Leaderboard usernames also use the row's full width rather than truncating early.
The Learn map going blank. For a stretch last night the Learn map showed no categories and no problems, and kept showing nothing after the database was responsive again. A single timed-out query during a maintenance window had been cached as "there are no categories" and served to every visitor for five minutes. A failed query is no longer cached, so the next request simply retries.
Account email
Confirmation, password reset, magic link, email change, and invite mail now use branded templates rather than the stock ones, and the sending domain picked up the authentication records that keep them out of junk folders — a signup confirmation had landed in one.
Plus: a stream titled for AlgoBlazer never showed up on the dashboard because it was in Twitch's "Co-working & Studying" category, which we were not watching; that category is covered now, and the scan runs every minute instead of every five.