Skip to content

Releases: andreagrandi/draftomen

v0.6.4

Choose a tag to compare

@github-actions github-actions released this 05 Oct 13:14
dc9f5ec
  • Stable GitHub Releases and the rolling development prerelease publish the
    unsigned Windows .exe again next to the Microsoft Store listing. The
    checksum files list it.
  • On Windows, replaying a Player.log that holds several drafts of the same
    event no longer stops with "Could not append draft audit record". Draft ids
    that Draft Omen makes up for these drafts no longer contain colons, and a
    new draft whose id has a character Windows forbids in file names now fails
    with a clear error. Drafts saved earlier keep loading. (#915)
  • On Windows, a draft that an earlier version saved with colons in its id
    now records audit entries and shows pick recommendations again. Its audit
    log file name uses underscores instead of colons. On macOS, an existing
    audit log with colons in its name keeps receiving new records.
  • Dismissing an error that is already gone, such as with a second click on
    the dismiss button, no longer logs "Unknown session error" or shows a
    background work failure.
  • The website publishes the latest released version at
    https://www.draftomen.com/version.json, so the desktop app can check for
    updates. The release output check fails when the file is missing or out of
    date. (#919)
  • Draft Omen can check version.json on the website for a newer release on a
    background thread. Network errors, HTTP errors, a bad response and an
    unknown installed version log a warning and report no update. (#920)
  • The desktop app checks the website for a newer release when it starts. If
    one exists, an "Update available" dialog names both versions and links to
    the website, the Microsoft Store listing and the GitHub releases page. The
    dialog appears at most once per launch, and the smoke and screenshot modes
    skip the check. (#921)
  • Draft Omen now loads card data for a Quick Draft pack when the log has no
    event join or course line for that draft. Before, those packs got no
    recommendations, and draftomen-tui watch --plain stopped with "Shared live
    session did not score the offered pack". (#918)

v0.6.3

Choose a tag to compare

@github-actions github-actions released this 03 Oct 17:05
34226f9
  • Draft Omen no longer fails to start the live session when you have
    completed the same event more than once. It now matches a replayed pack to
    the saved draft that recorded it, or else to the most recently updated
    one. If re-reading the Arena log at startup still fails, the app shows the
    error and keeps following Arena and Moxgate drafts. (#909)

v0.6.2

Choose a tag to compare

@github-actions github-actions released this 03 Oct 15:25
23e8bea
  • The Intel macOS app no longer hangs at startup with the Dock icon bouncing
    on macOS 26. On Intel Macs Draft Omen now verifies HTTPS with its bundled
    certificate file instead of the system trust store. (#905)
  • A release no longer updates the website. The release workflow stops checking
    website/package.json and the news page. The website version and news page
    move to a separate pull request merged after the GitHub Release is
    published, so the site's macOS download links never point at a release that
    does not exist yet.

v0.6.1

Choose a tag to compare

@github-actions github-actions released this 03 Oct 13:20
063033e
  • draftomen-tui replay now scores a draft with the profile for its own
    format, such as Pick-Two with a Premier fallback, instead of always the
    cached Quick Draft profile. It fetches the hosted profile when needed. The
    new --offline-profiles option keeps it on the local cache. (#900)
  • Card data export now adds the basic lands that 17Lands cards.csv lists
    and Scryfall has no Arena id for. The new export-set-data --cards-file
    option reads a local copy instead of downloading it. The hosted Reality
    Fracture card data now has its 25 basic lands, so they read Basic and
    score 0 instead of showing as "Unknown card" with a neutral score. (#895)
  • Pick-Two and Traditional profiles now use PremierDraft ratings and pair
    rates for cards and color pairs that have no usable data in their own
    format, as Quick Draft profiles already did. Such cards no longer get the
    neutral prior and now read Premier*. Older Draft Omen versions reject
    these profiles and keep their cached Pick-Two or Traditional profile until
    updated. (#896)
  • A draft played before Arena logs an account id, as happens after a saved-token
    login, is now saved under the first account id that the same login reports.
    Recovery, the audit log, backtest and draftomen-tui replay now see that
    draft. A later login with another account does not take it over. (#894)
  • When Draft Omen is not running, the Moxgate popup now shows how to start it
    from the desktop app, by choosing Moxgate in the draft source selector, as
    well as the draftomen-tui watch --source moxgate command. (#887)
  • The Moxgate extension has the Draft Omen icon in the Chrome toolbar and on
    the extensions page. The popup shows the icon and name in a header, a green
    or red dot for whether Draft Omen is running, and follows the system light or
    dark appearance. (#885)
  • The Moxgate extension now sends the latest snapshot again every 2 seconds
    while Draft Omen does not answer, so Draft Omen shows the current pack when
    it starts after the draft page is already open. It stops once Draft Omen accepts or rejects
    the snapshot, a newer snapshot replaces it, or the Moxgate page closes. The
    popup shows that the pick is waiting for Draft Omen. (#886)
  • The app log now records the Arena log file being followed and, for each new
    draft, the set, event and format. It also records where card data came from,
    the cache or a download with the artifact checksum, and which ratings
    version is in use. A card image host that keeps failing logs one warning and
    a count of later failures. Preferences that cannot be loaded or saved log a
    warning. (#880)
  • Fixed the macOS app failing to verify HTTPS certificates on Macs without
    Homebrew OpenSSL. Card data, ratings, 17Lands data and card images could not
    download there, because the bundled OpenSSL looked for its certificate file
    in a Homebrew folder. The app now uses the system certificate store and falls
    back to the certifi file it bundles. (#879)
  • The app log now says why a hosted download failed. Card data, the sets
    manifest, ratings and the augmented model each log the URL and the cause,
    such as an HTTP status or a certificate error. A ratings refresh that ends
    with problems logs them in one line. The startup lines also say whether the
    app runs as a bundle and which certificate file OpenSSL uses. An unexpected
    error in a desktop app worker now writes its traceback to the log. (#878)
  • Draft Omen tells you when Arena's Detailed Logs are turned off. Arena still
    writes Player.log without them, so before this change the app waited for a
    draft that never showed up. It now reads the header Arena writes at startup,
    shows a dialog with the steps to enable Detailed Logs (Plugin Support) and
    restart Arena, and keeps the same guidance in the main window. The dialog
    and the guidance clear once Arena restarts with the setting on.
  • The live draft view keeps the card list beside the card details and pool
    panels when the window is short, as on a 14-inch laptop. The card list
    scrolls, the pool panel shrinks and scrolls, and the view only switches to
    the stacked layout when the window is too narrow.
  • Quick Draft uses the PremierDraft ratings when a set has no QuickDraft
    profile yet, as Traditional and Pick-Two already do. Arena opens Quick Draft
    weeks after a set releases, so Quick Drafts and Moxgate drafts of a new set
    such as FRA showed neutral scores for every card. The ratings read
    Premier* until a QuickDraft profile is published. When no format has a
    profile, the ratings status says none are published yet instead of saying
    the refresh failed. (#871)
  • Moxgate drafts no longer need a Scryfall bulk file. Draft Omen matches each
    card by the Scryfall id in its hosted card data, or by name for other
    printings, so sets such as FRA that Scryfall has no Arena ids for work on
    release day. (#868)
  • When Draft Omen rejects a Moxgate snapshot, for example because a card is
    unknown, the desktop app shows the reason under the Moxgate status and the
    TUI shows it in the status line. The status stays on waiting until a
    snapshot is accepted, and the next accepted snapshot clears the error.
    (#869)
  • The app loads hosted card data files that contain fields it does not
    know, so future card data can add fields without breaking this version.
    Required fields are still checked, and export-set-data still rewrites
    any file that is not exactly in the current format. Versions 0.6.0 and
    earlier still reject unknown fields. (#867)

v0.6.0

Choose a tag to compare

@github-actions github-actions released this 02 Oct 11:24
b40a23e
  • 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.

v0.5.0

Choose a tag to compare

@github-actions github-actions released this 01 Oct 12:11
0497559
  • Player-facing text now calls set profiles "ratings". The desktop status
    banner and Settings, the TUI, plain watch and the README use the new word.
    Code, URLs, manifest keys, cache paths and CLI commands keep "profile".
    (#820)
  • Add Reality Fracture (FRA) card data and early Premier, Traditional and
    Pick-Two profiles. Scryfall has no Arena ids for FRA yet, so this one-time
    export takes the 280 FRA Arena ids from 17Lands ratings and matches them to
    Scryfall prints by name. The 10 Special Guests cards are left out, as in
    other sets, and so are basic lands, because 17Lands does not rate them. The
    daily refresh keeps this file until it is invalid, so a later re-export
    with Scryfall's own ids is a manual step.
  • The README, PRD, website and Store listing now describe Quick, Premier,
    Traditional and Pick-Two drafts instead of Quick Draft only. The README has a
    format table and names the limits of human drafts, including that Traditional
    drafting has no real Arena log sample yet. The log-format document covers
    format detection from event metadata, the 1-based human-draft coordinates,
    picks with one or two cards and the UTC_Log thread prefix. Pick scoring and
    audit documents explain the ratings fallback table and how a Pick-Two pick
    counts against the recommendation. The package, Windows app and
    draftomen-tui --help descriptions now read "draft assistant". A new rule
    in AGENTS.md and the README forbids committing or publishing raw Arena
    logs, anonymised third-party samples or player-identifying data. (#264)
  • A human draft whose log skips a pick submission now saves Arena's full
    CardPool from DraftCompleteDraft as its pool, so a Pick-Two draft with
    one missing request keeps all 42 cards instead of 40. The missing pick stays
    empty. The pool updates when the CardPool arrives after the draft already
    completed, and replay and plain watch print a second "Draft complete" line
    that counts the added cards. A CardPool that lacks a recorded card leaves
    the saved pool unchanged and logs a warning. (#800)
  • Mocked Draft can run a Pick-Two draft with a 4-seat pod and two cards per
    pick, chosen separately from Manual and Auto. The Mocked Draft dialog has a
    Format selector, and a manual Pick-Two pick stages the first card before
    the second press submits both. Quick Draft keeps its 8-seat
    pod and one card per pick. The test-draft command takes --format quick
    or --format pick_two, and a Pick-Two trace line lists both cards. Premier
    and Traditional are not offered, because bots would only relabel a Quick
    Draft. (#658)
  • Premier, Traditional and Pick-Two drafts are supported end to end, checked
    on real Arena logs in plain watch, the TUI and the desktop app. The parser
    now reads the "Entering table draft queue" scene line, for example
    MSH_Premier_Draft or HOB_PickTwo_Draft, as the draft event when a log
    has no EventJoin line. An EventJoin for the same set and format keeps
    its dated event name. scripts/verify_real_logs.py prints the format,
    packs, logical picks, cards, gaps and completion of each local private log
    without card IDs or UUIDs. (#779)
  • Add hand-written synthetic fixtures for a complete Premier, Traditional and
    Pick-Two draft, each running from ingestion to plain watch and replay
    output. Pick-Two ends with 21 logical picks and 42 cards, the one-card
    formats with 42 picks and 42 cards. Tests derive the variants from these
    fixtures: thread prefix, missing first notify, missing submission, failed
    pick response, repeated notify, truncated last line, and completion with
    and without DraftCompleteDraft. (#778)
  • The desktop live view names the detected draft format and shows pack and
    pick progress from the draft rules, for example "Pack 1 of 3 · Pick 4 of 7 ·
    take 2 cards" in Pick-Two. The recent picks gallery lists every card of a
    logical pick. The pre-draft view and the waiting status no longer mention
    Quick Draft: they read "Ready for your next draft" and "Waiting for a
    draft.", and name the format once it is known. (#777)
  • The desktop GUI adapter state gains a draft_progress block with the draft
    format name, pack and pick coordinates, and the pack count, picks per pack
    and cards per pick from the active rules. An unknown format publishes a
    neutral block with every value empty. The pool gains
    recent_logical_picks, which groups recent picks by logical pick so a
    Pick-Two pick lists both cards. Existing state keys are unchanged. (#776)
  • The TUI names the detected draft format in the waiting title, the detected
    title, and the status bar, and opens with a neutral "Waiting for a draft"
    state. The pack title shows progress from the draft rules, for example "Pack
    1 of 3, Pick 4 of 7, take 2 cards" in Pick-Two. The pool summary shows the
    last pick with every card, and Pick-Two pool counts read "8 cards from 4
    picks". Quick Draft counts stay unchanged. (#775)
  • watch --plain names the draft format in each pick status line and shows
    pack and pick progress from the draft rules, for example "Pack 1 of 3, Pick
    4 of 7, take 2 cards" in Pick-Two. A Pick-Two pick prints both cards on one
    "Chosen cards" line. Watch opens with a neutral "Waiting for a draft." line,
    and a Quick Draft start adds a format summary line. (#774)
  • Backtest uses the draft rules for logical pick counts and scores Pick-Two
    selections against the top recommendation. Reports show both selected cards,
    and scoring keeps the saved pool before each pick. Quick Draft output stays
    unchanged. (#773)
  • Replay names the draft format and uses its rules for pick counts. Pick-Two
    selections keep both cards at one coordinate. Audit records include the
    format and count how many of the top two cards in the active ranking were
    selected. Quick replay intentionally gains a format header. (#772)
  • Live draft progress and pool ledger totals follow the active draft rules.
    Pick-Two records 21 logical picks and 42 cards, and pending recovery keeps
    its format, coordinates and selected cards. Mocked Draft keeps its 13 or 15
    picks per pack. (#771)
  • Live Premier, Traditional and Pick-Two drafts load card data on the first
    offered pack, so recommendations and watch --plain scored rows appear
    without a restart. The load permits networking as Quick Draft detection
    does, then later packs and retries use local data only. (#801)
  • The live session now loads set profiles and ratings for the detected draft
    format instead of always asking for QuickDraft. Quick uses QuickDraft,
    Premier uses PremierDraft, Traditional tries TradDraft then
    PremierDraft, and Pick-Two tries PickTwoDraft then PremierDraft. The
    local cache and the hosted refresh both follow that order, and an exact
    profile replaces a fallback one when it appears. Snapshots expose the
    detected format, and the contextual evidence status reports a fallback.
    Rating labels name the format that supplied the rating, such as Trad, and
    add * to a fallback, such as Premier*, so Quick Draft cards now read
    Quick instead of Profile. An augmented model is used only when it was
    trained on the draft's own format or on PremierDraft; otherwise Augmented
    Intelligence reports it as unavailable for that format. (#770)
  • The log parser now reads human-draft picks and completion for Premier,
    Traditional and Pick-Two drafts. Each successful EventPlayerDraftMakePick
    request becomes one pick with 0-based pack and pick numbers, holding one card
    or two for Pick-Two. A rejected pick is dropped, and a repeated request or
    response counts once. A pick with no logged response is still recorded. The
    draft completes once, from the last pick response or from DraftCompleteDraft,
    with the picks the parser recorded. A missing pick stays a gap. The card pool
    Arena reports is only compared with those picks, and a mismatch writes a
    warning to the log. Human-draft packs now carry the pool picked so far, so
    the pool store accepts them. Malformed or unknown human-draft lines are
    ignored. (#259)
  • Live Draft keeps the two-column layout on laptop screens such as 1352x799.
    The card details column shrinks from 550 px to 350 px before the view
    switches to stacked tabs, and the card preview gives up height before the
    pool summary, so the whole mana curve stays visible. Windows narrower than
    about 1240 px or shorter than about 770 px still use stacked tabs. (#242)
  • Errors the live session shows, such as a failed ratings or card data
    download, a failed deck build or a failed backtest, are now written to
    ~/.draftomen/logs/draftomen.log with their code, id and message. Each error
    is logged once when it first appears. Recoverable errors log at WARNING and
    others at ERROR. (#796)
  • Settings has a Troubleshooting card with an "Open logs folder" button. It
    creates ~/.draftomen/logs if it is missing and opens it in the file
    manager. If the folder cannot be opened, Settings shows the folder path in
    an error message. The README now has a Troubleshooting section that lists
    the files to attach to a bug report and where they live on macOS and
    Windows. (#792)
  • Draft Omen now writes a rotating application log to
    ~/.draftomen/logs/draftomen.log. The desktop app and draftomen-tui share
    the file. Each run starts with a line holding the app version, the OS and
    the Python version. The log records unhandled exceptions from the main
    thread and worker threads with their tracebacks, Qt warnings, and the errors
    the desktop app also prints to stderr. The file rotates at 1 MB and keeps
    three older files. If the logs folder cannot be created, the app still
    starts and prints the reason to stderr. The log never copies Player.log
    lines. (#791)
  • The draft audit log now records multi-card picks. choice_made records
    store a selected_grp_ids list in place of chosen_grp_id, and the audit
    schema moves to version ...
Read more

v0.4.2

Choose a tag to compare

@github-actions github-actions released this 27 Sep 20:25
c2cc99f
  • Add docs/microsoft-store.md with what the first Microsoft Store
    submission needs: the Store listing text, runFullTrust justification,
    certification notes, age rating guidance and a publication record to fill
    in. Add Store screenshots rendered from a recorded MSH Quick Draft, two of
    them without card art. (#328)
  • The Windows CI job now builds the MSIX with MakeAppx and zips it into a
    .msixupload. It installs a test-signed copy, runs the mock smoke test from
    the installed package, and removes the package. It then uploads the
    .msixupload and the SHA-256 of the .msix inside it as a CI artifact.
    (#756)
  • Add the Microsoft Store MSIX package definition for the Windows app: a
    manifest with the Partner Center identity, the Store logos, and
    scripts/msix_package.py, which stages the package folder, maps X.Y.Z to
    X.Y.Z.0, and rejects a release version that does not increase. (#755)
  • WOE now has a published augmented model with a Card Pairs table. On held-out
    PremierDraft picks, Pool Shape raises top-1 from 0.4912 to 0.5398 and MRR
    from 0.6692 to 0.7110 over Basic DO. The Card Pairs test passed with a
    held-out gap of +3.88 pp [+3.56, +4.26]. At the selected weight of 0.25,
    pairs raise top-1 to 0.5424 and MRR to 0.7127.
  • When the Card Pairs correction moves a card up the ranking, the GUI card
    preview and the TUI focused card details show "Pairs well with ". The
    named card is the pool card with the largest pair score. Cards that pairs did
    not move up show no line. (#745)
  • The TUI can now use Augmented Intelligence. The configuration opened with
    c has an Augmented Intelligence switch, off by default and saved in
    tui-preferences.json. When it is on, the TUI loads the set's model, from the
    cache or the published manifest, and DO scores include its adjustment. (#745)
  • Pick scores now use the Card Pairs table to break close calls. Each offered
    card gets the sum of its pair scores against the current pool, centered on
    the pack average, times a weight, and clipped to ±8 points. The Card Pairs
    and Pool Shape corrections together stay within ±8 points. The build picks
    the weight with the best validation MRR, then top-1, where weight zero is
    Pool Shape alone. It stores the weight in the table and prints it with
    held-out top-1 and MRR with and without pairs. An artifact without a table, or with a table that
    has no weight, scores as before. (#744)
  • build-augmented-set now also downloads the set's 17Lands game dump
    through the checksummed draft dump cache. It builds a Card Pairs table from
    games drafted before Model C's validation period and tests it on the later
    games. The table is published under the artifact's training field only
    when decks with better pairs win more games than decks of equal card
    strength in the same colours and player rank, with a 95% lower bound above
    zero. A failed test publishes the model without a table. The build prints
    the gap, its range and the result. Released clients still load the
    artifact, because they accept any object under training. (#743)
  • build-augmented-set now matches pool columns to pack columns by card name,
    so dumps such as WOE that list them in a different order load. It still
    fails when the two column sets name different cards. (#741)
  • Add scripts/compare_augmented_candidates.py, an offline spike that ranks
    held-out picks with three candidate models next to Basic DO and Pool Shape,
    the name now used for Model C. Card Pairs scores cards by how often they win
    together in 17Lands game data. Player Picks learns the card players take
    from the exact pack and pool, and Winner Picks does the same from 7-win
    drafts only. The script uses Model C's chronological split and reports
    top-1 and mean reciprocal rank with bootstrap ranges, a view limited to
    7-win drafts, and the rank-adjusted win-rate gap of drafts that followed
    each candidate. Its --games-only mode tests the pair signal on held-out
    17Lands games: whether decks with better pairs win more than decks of equal
    card strength in the same colours and player rank. It reorders pool columns
    for dumps such as WOE that list them in a different order. No app code
    changes. (#717)
  • Show 17Lands card-rating counts in the Profile Refresh summary. Each
    successful set and format pair lists the fetched rows, the rows accepted
    into the profile, and the rejected rows grouped by reason. It also says
    whether those counts add up and how many profile ratings came from other
    formats. The static card-data counts are now labelled as set artifacts.
    (#402)
  • Update the release skill for signed macOS releases: the new asset names, the
    run time, and a check that a downloaded DMG is notarized and stapled.
  • Fix a segfault when the live adapter shuts down while its worker thread is
    finishing. shutdown() now queues the stop through an adapter signal
    instead of calling the worker, which the thread may be deleting. (#727)

v0.4.1

Choose a tag to compare

@github-actions github-actions released this 26 Sep 11:28
49de8e0
  • Publish the signed macOS DMGs as draftomen-vX.Y.Z-macos-arm64.dmg and
    draftomen-vX.Y.Z-macos-x86_64.dmg, and the checksum file as
    draftomen-vX.Y.Z-sha256sums.txt. The Windows executable keeps its
    unsigned name. The website download buttons, the README and the release
    docs use the new names. The README covers installing, Gatekeeper and
    notarization troubleshooting, and uninstalling, and docs/releasing.md
    adds a post-release check that opens a browser-downloaded DMG on a Mac that
    has never run Draft Omen. (#730)
  • Sign, notarize and staple the macOS DMGs in tag releases. release.yml
    calls native-bundles.yml with sign_macos: true, and only the macOS jobs
    of that call use the macos-release environment. Each job builds with
    Nuitka's Developer ID signing, copies the verified app to Draft Omen.app
    with ditto so the data-file signatures survive, signs and notarizes the
    DMG, and runs the smoke test on the app inside the stapled DMG. An
    always-run step deletes the temporary keychain and credential files.
    The mounted smoke test now retries a busy hdiutil detach before forcing
    it. Development builds stay unsigned. The release asset names still say
    unsigned until #730 renames them. (#729)
  • Document the macOS signing credentials in docs/releasing.md: the
    Developer ID Application certificate, the App Store Connect Team API key,
    the protected macos-release environment that only v* tags can use, the
    secret and variable names, and how to rotate or revoke each credential.
    (#728)
  • Stop publishing Draft Omen to PyPI and Homebrew. A tagged release now only
    builds the native macOS and Windows bundles and attaches them to the GitHub
    Release. The release workflow drops the wheel build, the wheel smoke tests,
    the PyPI publish job, and the Homebrew job. homebrew.yml, the formula
    template, scripts/render_homebrew_formula.py, and tests/package_smoke.py
    are removed. Version 0.4.0 stays on PyPI and in the Homebrew tap but gets no
    further updates. The README now points to the GitHub Release downloads.
  • Fix the Homebrew formula build. bidict, a dependency of
    python-socketio, builds with uv_build, which Homebrew compiles from
    source with Rust. The formula now declares rust as a build dependency.

v0.4.0

Choose a tag to compare

@github-actions github-actions released this 25 Sep 21:44
d4c62e8
  • Publish an Intel macOS DMG next to the Apple Silicon one. A second macOS
    build job runs on the macos-15-intel runner, and each macOS job fails when
    lipo -archs reports the wrong architecture for the app executable. The
    macOS release assets are now named unsigned-macos-arm64.dmg and
    unsigned-macos-x86_64.dmg, the checksum file lists both, and the website
    offers both downloads. (#347)
  • Fix the Windows native build, which had two separate faults:
    • Since #332 it failed its bundled-profile check. A Windows checkout
      converted line endings in the HOB profile snapshot and the bundled
      baseline profile, so their bytes no longer matched the recorded sizes and
      SHA-256. A new .gitattributes turns off line-ending conversion for
      profile-snapshots/ and draftomen/baseline_profiles/.
    • Since #555 the built executable failed to start because the
      pyside6-deploy specs excluded QtTest, which removed Qt6Test.dll
      while qt_gui.py imports PySide6.QtTest. The specs no longer exclude it.
  • Add a Sets page to the website at /sets/, linked from the navigation. It
    lists the supported sets, those with card data and 17Lands ratings, and
    marks the ones with an augmented model. A second list shows the sets that
    have no 17Lands ratings yet. (#707)
  • Load per-set card data in the CLI replay, build, backtest,
    benchmark-picks and refresh-structure-targets commands, the same data
    the desktop app uses. They no longer read ~/.draftomen/carddb.json, and
    ratings metadata recovery no longer writes it. --bulk-file still
    replaces the card data for fixtures and CI. refresh-data now only prints
    that card data downloads per set, and an existing carddb.json can be
    deleted. (#706)
  • Keep pipeline caches out of the user data directory. build-augmented-set
    now caches draft dumps in .draftomen/corpus-cache/profile-input-cache, and
    refresh-profile-data caches 17Lands ratings in
    .draftomen/corpus-cache/17lands, both relative to the working directory.
    Both commands take --cache-dir to use another root, and
    refresh-profile-data no longer accepts the hidden --app-dir option.
    Nothing writes ~/.draftomen/profile-input-cache or
    ~/.draftomen/set-enrichment any more, so both can be deleted.
    ~/.draftomen/17lands stays for the CLI build, replay and backtest
    ratings. (#705)
  • Check downloaded card data against the sets manifest. With network access,
    the card-data client reads sets/manifest.json once per client, rejects a
    download whose SHA-256 differs from the manifest, and downloads again when a
    cached file no longer matches it. A failed update keeps the valid cached
    file, and an unreachable manifest leaves cached sets in use. (#704)
  • Publish sets/manifest.json on the website. It lists every set with card
    data, and gives each set's name, card-data URL, size and SHA-256, profile
    formats with their maturity, and augmented model metrics. export-set-data,
    build-augmented-set and the Profile Refresh publication regenerate it.
    (#703)
  • Make build-augmented-set report its progress. It prints one line as each
    stage starts, the dump download at most every 10% and 5 seconds, and how
    many picks training and evaluation use. Basic DO scoring now reports in 25%
    steps instead of once per 5,000 picks. (#710)
  • Publish the DFT PremierDraft augmented model. On 889,392 held-out picks it
    raises Basic DO top-1 from 0.520 to 0.562 and mean reciprocal rank from
    0.690 to 0.726.
  • Make build-augmented-set train against the set profile the website
    publishes in website/public/profiles, with its checksums verified. It used
    to read only the local app cache and fall back to a generic profile without
    ratings, which calibrated DFT against the wrong baseline and reported it
    only after training. The build now stops before any download when the set
    has no published profile with ratings, and stops before training when the
    dump's format has none.
  • Let build-augmented-set train on draft dumps with bonus-sheet cards that
    the set card data does not list, such as the 10 DFT Special Guests. Their
    metadata comes from the local Scryfall bulk file, preferring an Arena
    printing, and the set's own printing wins when both exist. (#715)
  • Raise the profile input cache limits to 300 MiB per entry and 1 GiB in
    total. The DFT PremierDraft public draft dump is 205 MB, so the old 128 MiB
    limit rejected it and build-augmented-set DFT trained on the much smaller
    TradDraft dump instead.
  • Let build-augmented-set read 17Lands draft dumps that have no pick_2
    column. 17Lands added that column for Pick Two Draft, so older dumps such
    as DFT failed with "Draft dump is missing required columns: ['pick_2']".
    Without the column, no row counts as a second pick.
  • Make the weekly historical profile refresh process at most 6 set and format
    pairs per run, keeping each set whole, and skip pairs that already have a
    published profile. The old run refreshed all 128 historical pairs at once,
    17Lands stopped answering after about 105 requests, and the run published
    nothing. A
    historical pair with no 17Lands games, such as IKO TradDraft, is now listed
    as skipped and no longer fails the run. (#709)
  • Close the Mocked Draft dialog once the draft started from it is under way,
    so the live drafting view is visible. A failed start keeps the dialog open
    with its error, and reopening the dialog during a draft to leave it keeps it
    open.
  • Let Mocked Draft offer booster cards that the set card data does not list,
    such as SPG, MUL, BIG, and OTP bonus-sheet cards and 32 KTK cards. A card
    maps to another Arena printing of the same card when the set has none, and
    its metadata comes from the local Scryfall bulk file, or from the card
    fields Draftmancer sends when the printing never reached Arena. These cards
    carry no ratings and score the neutral prior. (#696, #697)
  • Make the GUI replay smoke check wait for a pending hosted profile refresh
    before it captures. A fast replay finished before the MSH profile download,
    so the check showed fallback ratings even though the session adopts the
    profile once it arrives. (#683)
  • Let Mocked Draft play Draftmancer packs that are not 14 cards. Pack events
    carry the pack size, and the pick stage, remaining picks, and pool ledger use
    it, so 15-card sets such as LCI and 13-card sets such as BLB draft all 45 or
    39 picks and reach a deck build. Arena drafts keep 14-card packs. (#695,
    #682)
  • Fix Mocked Draft booster cards that failed to map to an Arena card. The
    Scryfall mapping now reads every set in the bulk file, uses the first face's
    oracle id when the card has none, and picks the lowest Arena id when a card
    has several Arena printings, such as the LCI Travel Poster basics. This fixes
    booster decoding for LCI, M21, and SNC and startup for TDM and ECL. Booster
    errors now name the card by name, set, and collector number. (#682)
  • Add a QML regression test showing that the Mocked Draft set selector keeps
    the chosen set, such as LCI, through state updates and after Start, and that
    Start sends that set. The fix shipped with the set picker in #688. (#681)
  • Make "Refresh hosted ratings" work during a Mocked Draft. The refresh now
    uses the simulated set's profile client and updates only the Mocked Draft
    session, so the Arena profile is never touched. If no hosted profile exists,
    the ratings banner says so, and fallback scores stay active. (#687)
  • Remove the "DO recommendation" comparison sentence and the repeated
    "Pack 1, pick 6." status line from the desktop Live Draft header in wide
    and narrow layouts. The pack heading, ranked cards, and controls stay. (#655)
  • Remove the narrative score paragraph from the desktop Live Draft card
    details in wide and compact layouts. The card image and the structured
    score, win rate, grade, ALSA, and fit fields stay. (#654)
  • List every Draftmancer-supported set in the Mocked Draft picker by full name
    and code, such as "The Hobbit (HOB)", in alphabetical name order. A set
    without cached card data shows a "Download set card data" button, and Start
    stays disabled until a validated download completes. A failed download shows
    the set and the reason, and Start stays disabled. (#657)
  • Label the desktop card-detail score "Augmented DO Score" when a validated
    per-set model adjusted it, in both wide and narrow layouts and in the
    accessible description. Scores keep the plain "DO Score" label when the
    switch is off or the set has no model. (#656)
  • Remove the unused role-profile compile, load, dump, and rebuild helpers and
    the CompiledRoleProfile type. resolve_card_roles and
    RoleClassifier.resolve no longer take a profile argument and always use
    the local classifier with reviewed overrides. (#680)
  • Republish the HOB and DFT profiles as clean schema-4 profiles and remove the
    unused enrichment-publications.json record. Retrain the HOB augmented model
    against the clean Basic DO baseline. It passes both held-out gates on 274,932
    picks: top-1 rises from 0.5489 to 0.5922 and mean reciprocal rank from 0.7115
    to 0.7474. (#664)
  • Remove the enrich-set and list-enrichment commands, the offline
    semantic-enrichment extraction, review, and projection code, and its
    OpenRouter and guide clients. Profile publication and refresh no longer
    retain enriched manifest entries or report enrichment conflicts. Card-data
    export and ratings-based profile generation are unchanged. (#662)
  • Remove typed relationship scoring, pool-ledger support, and advice. Keep
    empirical SetProfile scoring, local card-role classification, generic synergy,
    and existing audit and draft-history readers. (#673)
  • Generate clean schema-4 SetProfiles. Ignore retired semantic fields when
    reading schemas 1–3 and reject them in schema 4. Keep confirmed enrichment
    artifacts standalone, treat old semantic-only...
Read more

Draft Omen v0.3.1 development build 2026-09-25 #10

Choose a tag to compare

@github-actions github-actions released this 25 Aug 19:33
98713bd

Draft Omen v0.3.1 development build 2026-09-25 #10

Changes since previous release

  • Publish an Intel macOS DMG next to the Apple Silicon one. A second macOS
    build job runs on the macos-15-intel runner, and each macOS job fails when
    lipo -archs reports the wrong architecture for the app executable. The
    macOS release assets are now named unsigned-macos-arm64.dmg and
    unsigned-macos-x86_64.dmg, the checksum file lists both, and the website
    offers both downloads. (#347)
  • Fix the Windows native build, which had two separate faults:
    • Since #332 it failed its bundled-profile check. A Windows checkout
      converted line endings in the HOB profile snapshot and the bundled
      baseline profile, so their bytes no longer matched the recorded sizes and
      SHA-256. A new .gitattributes turns off line-ending conversion for
      profile-snapshots/ and draftomen/baseline_profiles/.
    • Since #555 the built executable failed to start because the
      pyside6-deploy specs excluded QtTest, which removed Qt6Test.dll
      while qt_gui.py imports PySide6.QtTest. The specs no longer exclude it.
  • Add a Sets page to the website at /sets/, linked from the navigation. It
    lists the supported sets, those with card data and 17Lands ratings, and
    marks the ones with an augmented model. A second list shows the sets that
    have no 17Lands ratings yet. (#707)
  • Load per-set card data in the CLI replay, build, backtest,
    benchmark-picks and refresh-structure-targets commands, the same data
    the desktop app uses. They no longer read ~/.draftomen/carddb.json, and
    ratings metadata recovery no longer writes it. --bulk-file still
    replaces the card data for fixtures and CI. refresh-data now only prints
    that card data downloads per set, and an existing carddb.json can be
    deleted. (#706)
  • Keep pipeline caches out of the user data directory. build-augmented-set
    now caches draft dumps in .draftomen/corpus-cache/profile-input-cache, and
    refresh-profile-data caches 17Lands ratings in
    .draftomen/corpus-cache/17lands, both relative to the working directory.
    Both commands take --cache-dir to use another root, and
    refresh-profile-data no longer accepts the hidden --app-dir option.
    Nothing writes ~/.draftomen/profile-input-cache or
    ~/.draftomen/set-enrichment any more, so both can be deleted.
    ~/.draftomen/17lands stays for the CLI build, replay and backtest
    ratings. (#705)
  • Check downloaded card data against the sets manifest. With network access,
    the card-data client reads sets/manifest.json once per client, rejects a
    download whose SHA-256 differs from the manifest, and downloads again when a
    cached file no longer matches it. A failed update keeps the valid cached
    file, and an unreachable manifest leaves cached sets in use. (#704)
  • Publish sets/manifest.json on the website. It lists every set with card
    data, and gives each set's name, card-data URL, size and SHA-256, profile
    formats with their maturity, and augmented model metrics. export-set-data,
    build-augmented-set and the Profile Refresh publication regenerate it.
    (#703)
  • Make build-augmented-set report its progress. It prints one line as each
    stage starts, the dump download at most every 10% and 5 seconds, and how
    many picks training and evaluation use. Basic DO scoring now reports in 25%
    steps instead of once per 5,000 picks. (#710)
  • Publish the DFT PremierDraft augmented model. On 889,392 held-out picks it
    raises Basic DO top-1 from 0.520 to 0.562 and mean reciprocal rank from
    0.690 to 0.726.
  • Make build-augmented-set train against the set profile the website
    publishes in website/public/profiles, with its checksums verified. It used
    to read only the local app cache and fall back to a generic profile without
    ratings, which calibrated DFT against the wrong baseline and reported it
    only after training. The build now stops before any download when the set
    has no published profile with ratings, and stops before training when the
    dump's format has none.
  • Let build-augmented-set train on draft dumps with bonus-sheet cards that
    the set card data does not list, such as the 10 DFT Special Guests. Their
    metadata comes from the local Scryfall bulk file, preferring an Arena
    printing, and the set's own printing wins when both exist. (#715)
  • Raise the profile input cache limits to 300 MiB per entry and 1 GiB in
    total. The DFT PremierDraft public draft dump is 205 MB, so the old 128 MiB
    limit rejected it and build-augmented-set DFT trained on the much smaller
    TradDraft dump instead.
  • Let build-augmented-set read 17Lands draft dumps that have no pick_2
    column. 17Lands added that column for Pick Two Draft, so older dumps such
    as DFT failed with "Draft dump is missing required columns: ['pick_2']".
    Without the column, no row counts as a second pick.
  • Make the weekly historical profile refresh process at most 6 set and format
    pairs per run, keeping each set whole, and skip pairs that already have a
    published profile. The old run refreshed all 128 historical pairs at once,
    17Lands stopped answering after about 105 requests, and the run published
    nothing. A
    historical pair with no 17Lands games, such as IKO TradDraft, is now listed
    as skipped and no longer fails the run. (#709)
  • Close the Mocked Draft dialog once the draft started from it is under way,
    so the live drafting view is visible. A failed start keeps the dialog open
    with its error, and reopening the dialog during a draft to leave it keeps it
    open.
  • Let Mocked Draft offer booster cards that the set card data does not list,
    such as SPG, MUL, BIG, and OTP bonus-sheet cards and 32 KTK cards. A card
    maps to another Arena printing of the same card when the set has none, and
    its metadata comes from the local Scryfall bulk file, or from the card
    fields Draftmancer sends when the printing never reached Arena. These cards
    carry no ratings and score the neutral prior. (#696, #697)
  • Make the GUI replay smoke check wait for a pending hosted profile refresh
    before it captures. A fast replay finished before the MSH profile download,
    so the check showed fallback ratings even though the session adopts the
    profile once it arrives. (#683)
  • Let Mocked Draft play Draftmancer packs that are not 14 cards. Pack events
    carry the pack size, and the pick stage, remaining picks, and pool ledger use
    it, so 15-card sets such as LCI and 13-card sets such as BLB draft all 45 or
    39 picks and reach a deck build. Arena drafts keep 14-card packs. (#695,
    #682)
  • Fix Mocked Draft booster cards that failed to map to an Arena card. The
    Scryfall mapping now reads every set in the bulk file, uses the first face's
    oracle id when the card has none, and picks the lowest Arena id when a card
    has several Arena printings, such as the LCI Travel Poster basics. This fixes
    booster decoding for LCI, M21, and SNC and startup for TDM and ECL. Booster
    errors now name the card by name, set, and collector number. (#682)
  • Add a QML regression test showing that the Mocked Draft set selector keeps
    the chosen set, such as LCI, through state updates and after Start, and that
    Start sends that set. The fix shipped with the set picker in #688. (#681)
  • Make "Refresh hosted ratings" work during a Mocked Draft. The refresh now
    uses the simulated set's profile client and updates only the Mocked Draft
    session, so the Arena profile is never touched. If no hosted profile exists,
    the ratings banner says so, and fallback scores stay active. (#687)
  • Remove the "DO recommendation" comparison sentence and the repeated
    "Pack 1, pick 6." status line from the desktop Live Draft header in wide
    and narrow layouts. The pack heading, ranked cards, and controls stay. (#655)
  • Remove the narrative score paragraph from the desktop Live Draft card
    details in wide and compact layouts. The card image and the structured
    score, win rate, grade, ALSA, and fit fields stay. (#654)
  • List every Draftmancer-supported set in the Mocked Draft picker by full name
    and code, such as "The Hobbit (HOB)", in alphabetical name order. A set
    without cached card data shows a "Download set card data" button, and Start
    stays disabled until a validated download completes. A failed download shows
    the set and the reason, and Start stays disabled. (#657)
  • Label the desktop card-detail score "Augmented DO Score" when a validated
    per-set model adjusted it, in both wide and narrow layouts and in the
    accessible description. Scores keep the plain "DO Score" label when the
    switch is off or the set has no model. (#656)
  • Remove the unused role-profile compile, load, dump, and rebuild helpers and
    the CompiledRoleProfile type. resolve_card_roles and
    RoleClassifier.resolve no longer take a profile argument and always use
    the local classifier with reviewed overrides. (#680)
  • Republish the HOB and DFT profiles as clean schema-4 profiles and remove the
    unused enrichment-publications.json record. Retrain the HOB augmented model
    against the clean Basic DO baseline. It passes both held-out gates on 274,932
    picks: top-1 rises from 0.5489 to 0.5922 and mean reciprocal rank from 0.7115
    to 0.7474. (#664)
  • Remove the enrich-set and list-enrichment commands, the offline
    semantic-enrichment extraction, review, and projection code, and its
    OpenRouter and guide clients. Profile publication and refresh no longer
    retain enriched manifest entries or report enrichment conflicts. Card-data
    export and ratings-based profile generation are unchanged. (#6...
Read more