Release notes

Draft Omen 0.6.0

Released on .

  • scripts/patch_scryfall_arena_ids.py adds Arena ids from 17Lands card ratings to Scryfall default-cards data. Use its output with export-set-data --bulk-file for a set Scryfall has no Arena ids for. docs/set-profiles.md describes 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)
  • watch and replay no 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 moxgate says 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 moxgate and 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 moxgate shows Moxgate drafts in the TUI. --plain is 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 --plain saves Moxgate drafts under the fixed account id moxgate and 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 gui job. The gui nox 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/moxgate reads the Moxgate draft page and posts each pack and pool to draftomen-tui watch --source moxgate --plain on 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 new extension CI job runs its tests. (#828)
  • draftomen watch --source moxgate --plain starts the Moxgate receiver instead of following Player.log and shows recommendations for each pack the browser extension posts. --moxgate-port overrides the default port 47326. Card data for all sets comes from one local Scryfall bulk file, --bulk-file or the Mocked Draft download in the app dir, and watch fails at startup when that file is missing. The Moxgate source needs --plain for 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 0 to 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 CI tests job no longer runs the Qt test files, which the gui job 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/snapshot from chrome-extension:// origins that send the X-Draftomen-Moxgate header, 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.