mirror of
https://github.com/mwisnowski/mtg_python_deckbuilder.git
synced 2026-03-24 05:56:32 +01:00
3.5 KiB
3.5 KiB
MTG Python Deckbuilder v4.2.0
Summary
Budget Mode: full price-aware deck building with live budget tracking, post-build review, pickup suggestions, and price charts. Also includes multi-copy conflict dialogs, RandomService infrastructure, and stale price warnings.
Added
Budget Mode
- Budget configuration in the New Deck modal: total cap, optional per-card ceiling, soft/hard enforcement mode, and pool tolerance
- Card prices shown throughout the build pipeline (list and thumbnail views) with a running budget counter chip
- Over-budget cards highlighted with a yellow/gold border; basic lands excluded from all calculations
- Budget summary bar in deck summary view; budget badge and over-budget panel on saved deck view
- Post-build budget review panel (triggered when total exceeds cap by >10%): lists over-budget cards with up to 3 cheaper alternatives, each with a live Swap button
- "Accept deck as-is" button in soft mode to bypass the review
- Pickups list page (
/decks/pickups?name=) — affordable cards you don't own yet, sorted by priority tier - Pool budget filter: cards over the per-card ceiling by more than the pool tolerance are excluded before building; configurable per build (default 15%)
- Controlled by
ENABLE_BUDGET_MODEenvironment variable (default: enabled)
Price Cache Infrastructure
priceandprice_updatedcolumns added to parquet card database viarefresh_prices_parquet()- Setup page Refresh button downloads fresh Scryfall bulk data before rebuilding the cache
- Optional auto-refresh (
PRICE_AUTO_REFRESH=1) and lazy per-card refresh (PRICE_LAZY_REFRESH=1, default enabled) POST /api/price/refreshmanual rebuild endpoint- "Card Price Cache Status" section on the Setup page with last-updated date and Refresh button
- Footer shows price data date alongside Scryfall attribution
build-similarity-cacheCI workflow now commitsprices_cache.jsonandprices_cache.json.tsalongside the parquet
Price Charts
- Donut/bar chart showing deck spend by card role (9 categories: Land, Ramp, Creature, Card Draw, Removal, Wipe, Protection, Synergy, Other)
- Price histogram showing card count distribution across cost buckets
- Basic lands excluded from all chart calculations
Stale Price Warnings
- Cards with price data older than 24 hours flagged with a clock indicator (⏱) on card tiles, hover popup, budget review panel, and Pickups page
- If >50% of deck prices are stale, a single banner replaces per-card indicators
- Controlled by
PRICE_STALE_WARNING_HOURS(default: 24; set to 0 to disable)
Multi-copy Dialogs
- Include conflict dialog: typing a multi-copy archetype card (e.g., Hare Apparent) in Must Include now prompts for copy count with optional Thrumming Stone checkbox
- Exclude conflict dialog: conflict popup when the same card appears in both the Multi-Copy Package selector and Must Exclude
RandomService & Diagnostics
RandomServicewrapping seeded RNG operations with input validationInvalidSeedErrorexception for seed validation failuresGET /api/random/diagnosticsendpoint behindWEB_RANDOM_DIAGNOSTICS=1flag- Random Mode documentation in
docs/random_mode/
Changed
- Build Deck button: "Create" renamed to "Build Deck" in the New Deck modal for consistency with "Quick Build"
Fixed
- Stale price banner after refresh: Refreshing the price cache on the Setup page now correctly clears the stale warning
- Multi-copy include count: Archetype card count is now correctly applied when confirmed from the conflict dialog