scripts/patch_scryfall_arena_ids.pyadds Arena ids from 17Lands card ratings to Scryfall default-cards data. Use its output withexport-set-data --bulk-filefor a set Scryfall has no Arena ids for.docs/set-profiles.mddescribes the steps. (#861)- The daily profile refresh uses the committed card data for a set when Scryfall has no Arena ids for it, so sets such as FRA no longer fail with card-metadata-unavailable. The refresh summary lists the sets that used it.
- Draft Omen keeps following a human draft after Arena restarts in the middle of it. The parser picks the draft up from the in-progress course in the EventGetCoursesV2 course list, so the packs after the restart show up. Arena does not log the picks made before the restart. When Draft Omen saved them before the restart, recommendations and the pool still use them, and the full pool from DraftCompleteDraft fills any gap at the end. (#856)
watchandreplayno longer fail in the middle of a human draft when Arena answers a failed pick with the table state. The parser drops the failed pick and records the card from the resubmitted request. Other unknown pick response bodies are ignored. (#855)- Before the first draft arrives,
draftomen-tui watch --source moxgatesays it is waiting for the Moxgate extension to send a draft instead of waiting for Arena. (#851) - The desktop app no longer has a Mocked Draft button in the header. Mocked
Draft is now an option in the draft source selector next to Arena and
Moxgate, and choosing it opens the Mocked Draft dialog. With Moxgate
selected, the account shows as
moxgateand cannot be changed. (#850) - The TUI Moxgate snapshot test waits for the receiving phase as well as the rendered pack. The pack can render before the phase changes, which failed at random on a busy CI runner.
draftomen-tui watch --source moxgateshows Moxgate drafts in the TUI.--plainis no longer required. Quitting the TUI stops the receiver and frees the port. (#833)- The TUI account-cycling tests wait for the ChooseAccount worker to finish after pressing “a” instead of pausing once, which failed at random on a busy CI runner.
- The desktop app has a draft source selector next to Settings. Choosing
Moxgate starts the receiver on 127.0.0.1:47326 and shows whether it is
loading card data, waiting for the extension or receiving a draft. Choosing
Arena stops the receiver and frees the port. A port already in use shows an
error naming the port. Card data comes from the Mocked Draft Scryfall bulk
file set in Settings or passed with
--scryfall-bulk-file. (#829) draftomen-tui watch --source moxgate --plainsaves Moxgate drafts under the fixed account idmoxgateand prints a deck build sheet after “Draft complete”. Moxgate snapshots carry no account id, so these drafts were not saved before. (#839)- The Qt adapter startup coalescing test waits for the post-start state to
arrive instead of reading the observed states as soon as the session is
ready, which failed at random in the parallel CI
guijob. Theguinox session now runs the Qt test files one at a time, because several of them failed at random with parallel workers on the 4-core CI runner. Other tests still run in parallel. - A Chrome extension in
extensions/moxgatereads the Moxgate draft page and posts each pack and pool todraftomen-tui watch --source moxgate --plainon 127.0.0.1. Load it unpacked from chrome://extensions. Its popup shows whether Draft Omen is running and what happened to the last snapshot. A newextensionCI job runs its tests. (#828) draftomen watch --source moxgate --plainstarts the Moxgate receiver instead of following Player.log and shows recommendations for each pack the browser extension posts.--moxgate-portoverrides the default port 47326. Card data for all sets comes from one local Scryfall bulk file,--bulk-fileor the Mocked Draft download in the app dir, and watch fails at startup when that file is missing. The Moxgate source needs--plainfor now. (#832)- Tests run in parallel with pytest-xdist by default. The full suite takes
about a quarter of the time it took before on a 10-core machine. Pass
-n 0to run tests one at a time. The Moxgate receiver also checks for shutdown every 0.05 seconds instead of 0.5, so stopping it is faster. The CItestsjob no longer runs the Qt test files, which theguijob already runs, and a Qt adapter test now waits for each published state before reading it. - Add a loopback receiver for Moxgate snapshots. It listens only on a loopback
address, accepts
POST /moxgate/snapshotfromchrome-extension://origins that send theX-Draftomen-Moxgateheader, caps the body at 256 KiB and answers a malformed snapshot with 400. Accepted snapshots go on a queue that the session thread turns into draft events. Nothing starts the receiver yet. (#831) - Add a Moxgate snapshot adapter that turns successive draft page snapshots into the existing draft events. It derives each pick and its pack and pick coordinates from the change between snapshots, and rejects out-of-order, skipped or unresolvable snapshots with an error. (#826)
- The website has a News page that shows the release notes of each version,
taken from this changelog. Releases now write the page with
scripts/write_release_news.py, and the release check fails if it is missing.