Began fixing cursor.update race conditions, which had been leading to glitches in Chrome
Fixed race condition (not that it matters much in this case, as the race condition failing would just mean that day-old PER would be displayed).
Generalized db.getObjectStore a bit more, so that if a transaction is requested and an objectStore is passed, it will still work.
Fixed race condition.
Fixed race condition. Now trading seems to work fine in Chrome.
Partially fix race condition in js/core/draft.js. Complete fix will require more substantial refactoring.
Fixed race condition in core/draft.js. Eliminated transactions as arguments to db.getDraftOrder and db.setDraftOrder. The downside is that drafting is slower since each pick now has its own transaction. But I don't see a better way to make this work (within reason) since I need to be sure that a pick is recorded when calling selectPlayer manually (i.e. in testing or in response to the user's pick). However, this sureness is not needed within draft.untilUserOrEnd, so that could be sped up, but it would be very messy.
Documentation for core/draft.js
Fixed race condition.
Depending on whether a transaction is passed to rosterAutoSort or not, maybe wait for the transaction to complete before calling the callback.
Partially fix race condition in js/core/contractNegotiation.js.
Fixed race condition (well, mostly... see documentation for core.contractNegotiation.create).
Got rid of potential race condition in core.season.newPhasePlayoffs.
Fixed race condition in core.season.newPhaseBeforeDraft.
Fixed race condition in core.season.newPhaseFreeAgency.
Fixed race condition in core.season.newPhasePreseason.
Fixed race condition in core.season.newSchedulePlayoffsDay. This completes fixing all the cursor.update-related race conditions (hopefully).
Simplified db.setGameAttributes while eliminating a potential race condition.
Updated TODO
Fixed race condition in core.season.awards.