feat(random): multi-theme groundwork, locked reroll export parity, duplicate export fix, expanded diagnostics and test coverage

This commit is contained in:
matt 2025-09-25 15:14:15 -07:00
parent a029d430c5
commit 73685f22c8
39 changed files with 2671 additions and 271 deletions

View file

@ -13,7 +13,7 @@
# HOST=0.0.0.0 # Uvicorn bind host (only when APP_MODE=web).
# PORT=8080 # Uvicorn port.
# WORKERS=1 # Uvicorn worker count.
APP_VERSION=v2.2.9 # Matches dockerhub compose.
APP_VERSION=v2.2.10 # Matches dockerhub compose.
############################
# Theming
@ -27,6 +27,8 @@ THEME=system # system|light|dark (initial default; user p
# DECK_EXPORTS=/app/deck_files # Where finished deck exports are read by Web UI.
# OWNED_CARDS_DIR=/app/owned_cards # Preferred directory for owned inventory uploads.
# CARD_LIBRARY_DIR=/app/owned_cards # Back-compat alias for OWNED_CARDS_DIR.
# CSV_FILES_DIR=/app/csv_files # Override CSV base dir (use test snapshots or alternate datasets)
# CARD_INDEX_EXTRA_CSV= # Inject an extra CSV into the card index for testing
############################
# Web UI Feature Flags
@ -41,6 +43,14 @@ WEB_VIRTUALIZE=1 # dockerhub: WEB_VIRTUALIZE="1"
ALLOW_MUST_HAVES=1 # dockerhub: ALLOW_MUST_HAVES="1"
WEB_THEME_PICKER_DIAGNOSTICS=0 # 1=enable uncapped synergies, diagnostics fields & /themes/metrics (dev only)
############################
# Random Modes (alpha)
############################
# RANDOM_MODES=1 # Enable backend random build endpoints
# RANDOM_UI=1 # Show Surprise/Reroll/Share controls in UI
# RANDOM_MAX_ATTEMPTS=5 # Cap retry attempts for constrained random builds
# RANDOM_TIMEOUT_MS=5000 # Per-attempt timeout (ms)
############################
# Automation & Performance (Web)
############################
@ -50,6 +60,8 @@ WEB_TAG_PARALLEL=1 # dockerhub: WEB_TAG_PARALLEL="1"
WEB_TAG_WORKERS=2 # dockerhub: WEB_TAG_WORKERS="4"
WEB_AUTO_ENFORCE=0 # dockerhub: WEB_AUTO_ENFORCE="0"
# WEB_CUSTOM_EXPORT_BASE= # Custom basename for exports (optional).
# THEME_CATALOG_YAML_SCAN_INTERVAL_SEC=2.0 # Poll for YAML changes (dev)
# WEB_THEME_FILTER_PREWARM=0 # 1=prewarm common filters for faster first renders
############################
# Headless Export Options
@ -116,11 +128,41 @@ DEBIAN_FRONTEND=noninteractive # Suppress apt UI in Docker builds.
# EDITORIAL_MIN_EXAMPLES=0 # (Future) minimum curated examples (cards/commanders) target.
# EDITORIAL_MIN_EXAMPLES_ENFORCE=0 # (Future) enforce vs warn.
############################
# Sampling & Rarity Tuning (advanced)
############################
# SPLASH_ADAPTIVE=0 # 1=enable adaptive off-color penalty
# SPLASH_ADAPTIVE_SCALE=1:1.0,2:1.0,3:1.0,4:0.6,5:0.35
# RARITY_W_MYTHIC=1.2
# RARITY_W_RARE=0.9
# RARITY_W_UNCOMMON=0.65
# RARITY_W_COMMON=0.4
# RARITY_DIVERSITY_TARGETS=mythic:0-1,rare:0-2,uncommon:0-4,common:0-6
# RARITY_DIVERSITY_OVER_PENALTY=-0.5
############################
# Theme Preview Cache & Redis (optional)
############################
# THEME_PREVIEW_CACHE_MAX=400 # Max previews cached in memory
# WEB_THEME_PREVIEW_LOG=0 # 1=verbose cache logs
# THEME_PREVIEW_ADAPTIVE=0 # 1=adaptive cache policy
# THEME_PREVIEW_EVICT_COST_THRESHOLDS=5,15,40
# THEME_PREVIEW_BG_REFRESH=0 # 1=background refresh worker
# THEME_PREVIEW_BG_REFRESH_INTERVAL=120 # seconds
# THEME_PREVIEW_TTL_BASE=300
# THEME_PREVIEW_TTL_MIN=60
# THEME_PREVIEW_TTL_MAX=900
# THEME_PREVIEW_TTL_BANDS=0.2,0.5,0.8
# THEME_PREVIEW_TTL_STEPS=2,4,2,3,1
# THEME_PREVIEW_REDIS_URL=redis://localhost:6379/0
# THEME_PREVIEW_REDIS_DISABLE=0 # 1=disable redis even if URL set
######################################################################
# Notes
# - CLI arguments override env vars; env overrides JSON config; JSON overrides defaults.
# - For include/exclude card functionality enable ALLOW_MUST_HAVES=1 (Web) and use UI or CLI flags.
# - For Random Modes UI, set RANDOM_MODES=1 and RANDOM_UI=1; see /random.
# - Path overrides must point to mounted volumes inside the container.
# - Remove a value or leave it commented to fall back to internal defaults.
######################################################################