mtg_python_deckbuilder/docs/releases/v4.2.1.md
2026-03-23 17:31:46 -07:00

1.7 KiB

MTG Python Deckbuilder v4.2.1

Summary

Patch release fixing two issues introduced in v4.2.0: budget/price styling missing from DockerHub image builds, and a crash in the CI similarity-cache workflow when rebuilding the price cache.

Fixed

Budget/price CSS missing from DockerHub builds

All budget badges, price chart bars (category stacked bar + histogram), card price overlays, stale price indicators, and pickups page styles were invisible when pulling the image from DockerHub. The root cause: custom CSS was written into styles.css (the compiled Tailwind output) rather than tailwind.css (the source). The Dockerfile deletes and regenerates styles.css from tailwind.css during the image build, silently wiping all custom classes. All budget/price CSS has been moved into tailwind.css so it survives every Docker build.

Affected elements:

  • .budget-badge / .budget-badge--under/soft_exceeded/hard_exceeded
  • .tier-badge / .tier-badge--s/m/l
  • .card-price-overlay, .card-price-inline, .card-price-tip
  • .card-tile.over-budget, .stack-card.over-budget, .list-row.over-budget
  • .budget-price-bar, .budget-review-panel and all child classes
  • .price-cat-* (stacked category bar)
  • .price-hist-* (histogram bars)
  • .stale-price-indicator, .stale-price-badge, .stale-banner
  • .running-budget-chip, .pickups-table

Workflow price cache crash

The build-similarity-cache CI workflow failed with AttributeError: 'PriceService' object has no attribute '_lazy_ts'. This attribute is only initialized when start_lazy_refresh() is called (which the web app does on startup), but the CI setup script instantiates PriceService bare. Added a hasattr guard in _rebuild_cache() to lazy-initialize _lazy_ts on first use.