mtg_python_deckbuilder/docker-compose.yml

161 lines
9.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

services:
web:
build: .
container_name: mtg-deckbuilder-web
ports:
- "8080:8080"
environment:
PYTHONUNBUFFERED: "1"
TERM: "xterm-256color"
DEBIAN_FRONTEND: "noninteractive"
# ------------------------------------------------------------------
# Core UI Feature Toggles
# (Enable/disable visibility of sections; most default to off in code)
# ------------------------------------------------------------------
# UI features/flags
SHOW_LOGS: "1" # 1=enable /logs page; 0=hide
SHOW_SETUP: "1" # 1=show Setup/Tagging card; 0=hide (still runs if WEB_AUTO_SETUP=1)
SHOW_DIAGNOSTICS: "1" # 1=enable /diagnostics & /diagnostics/perf; 0=hide
ENABLE_PWA: "0" # 1=serve manifest/service worker (experimental)
ENABLE_THEMES: "1" # 1=expose theme selector; 0=hide (THEME still applied)
ENABLE_PRESETS: "0" # 1=show presets section
WEB_VIRTUALIZE: "1" # 1=enable list virtualization in Step 5
ALLOW_MUST_HAVES: "1" # 1=enable must-include/must-exclude cards feature; 0=disable
SHOW_MISC_POOL: "0"
# ------------------------------------------------------------------
# Random Build (Alpha) Feature Flags
# RANDOM_MODES: backend enablement (seeded selection endpoints)
# RANDOM_UI: enable Surprise/Reroll controls in UI
# RANDOM_MAX_ATTEMPTS: safety cap on retries for constraints
# RANDOM_TIMEOUT_MS: per-attempt timeout (ms) before giving up
# ------------------------------------------------------------------
# Random Modes (feature flags)
RANDOM_MODES: "0" # 1=enable random build endpoints and backend features
RANDOM_UI: "0" # 1=show Surprise/Theme/Reroll/Share controls in UI
RANDOM_MAX_ATTEMPTS: "5" # cap retry attempts
RANDOM_TIMEOUT_MS: "5000" # per-build timeout in ms
# Theming
THEME: "dark" # system|light|dark
# ------------------------------------------------------------------
# Setup / Tagging / Catalog Controls
# WEB_AUTO_SETUP: auto-run initial tagging & theme generation when needed
# WEB_AUTO_REFRESH_DAYS: refresh card data if older than N days (0=never)
# WEB_TAG_PARALLEL + WEB_TAG_WORKERS: parallel tag extraction
# THEME_CATALOG_MODE: merge (Phase B) | legacy | build | phaseb (merge synonyms)
# WEB_AUTO_ENFORCE: 1=run bracket/legal compliance auto-export JSON after builds
# WEB_CUSTOM_EXPORT_BASE: override export path base (optional)
# APP_VERSION: surfaced in UI/health endpoints
# ------------------------------------------------------------------
# Setup/Tagging performance
WEB_AUTO_SETUP: "1" # 1=auto-run setup/tagging when needed
WEB_AUTO_REFRESH_DAYS: "7" # Refresh cards.csv if older than N days; 0=never
WEB_TAG_PARALLEL: "1" # 1=parallelize tagging
WEB_TAG_WORKERS: "4" # Worker count when parallel tagging
THEME_CATALOG_MODE: "merge" # Use merged Phase B catalog builder (with YAML export)
THEME_YAML_FAST_SKIP: "0" # 1=allow skipping per-theme YAML on fast path (rare; default always export)
WEB_AUTO_ENFORCE: "0" # 1=auto-run compliance export after builds
WEB_CUSTOM_EXPORT_BASE: "" # Optional: custom base dir for deck export artifacts
APP_VERSION: "dev" # Displayed version label (set per release/tag)
# ------------------------------------------------------------------
# Misc / Land Selection (Step 7) Environment Tuning
# Uncomment to fine-tune utility land heuristics. Theme weighting allows
# matching candidate lands to selected themes for bias.
# ------------------------------------------------------------------
# Misc land tuning (utility land selection Step 7)
# MISC_LAND_DEBUG: "1" # 1=write misc land debug CSVs (post-filter, candidates); off by default unless SHOW_DIAGNOSTICS=1
# MISC_LAND_EDHREC_KEEP_PERCENT_MIN: "0.75" # Lower bound (01). When both MIN & MAX set, a random keep % in [MIN,MAX] is rolled each build
# MISC_LAND_EDHREC_KEEP_PERCENT_MAX: "1.0" # Upper bound (01) for dynamic EDHREC keep range
# MISC_LAND_EDHREC_KEEP_PERCENT: "0.80" # Legacy single fixed keep % (used only if MIN/MAX not both provided)
# (Optional theme weighting overrides)
# MISC_LAND_THEME_MATCH_BASE: "1.4" # Multiplier if at least one theme tag matches
# MISC_LAND_THEME_MATCH_PER_EXTRA: "0.15" # Increment per extra matching tag beyond first
# MISC_LAND_THEME_MATCH_CAP: "2.0" # Cap for total theme multiplier
# ------------------------------------------------------------------
# Deck Export / Directory Overrides (headless & web browsing paths)
# DECK_EXPORTS / DECK_CONFIG: override mount points inside container
# OWNED_CARDS_DIR / CARD_LIBRARY_DIR: inventory upload path (alias preserved)
# ------------------------------------------------------------------
# Paths (optional overrides)
# DECK_EXPORTS: "/app/deck_files" # Where the deck browser looks for exports
# DECK_CONFIG: "/app/config" # Where the config browser looks for *.json
# OWNED_CARDS_DIR: "/app/owned_cards" # Preferred path for owned inventory uploads
# CARD_LIBRARY_DIR: "/app/owned_cards" # Back-compat alias for OWNED_CARDS_DIR
# ------------------------------------------------------------------
# Headless / Non-interactive Build Configuration
# Provide commander or tag indices/names; toggles for which phases to include
# Counts optionally tune land/fetch/ramp/etc targets.
# ------------------------------------------------------------------
# Headless-only settings
# DECK_MODE: "headless" # Auto-run headless flow in CLI mode
# HEADLESS_EXPORT_JSON: "1" # 1=export resolved run config JSON
# DECK_COMMANDER: "" # Commander name query
# DECK_PRIMARY_CHOICE: "1" # Primary tag index (1-based)
# DECK_SECONDARY_CHOICE: "" # Optional secondary index
# DECK_TERTIARY_CHOICE: "" # Optional tertiary index
# DECK_PRIMARY_TAG: "" # Or tag names instead of indices
# DECK_SECONDARY_TAG: ""
# DECK_TERTIARY_TAG: ""
# DECK_BRACKET_LEVEL: "3" # 15
# DECK_ADD_LANDS: "1"
# DECK_ADD_CREATURES: "1"
# DECK_ADD_NON_CREATURE_SPELLS: "1"
# DECK_ADD_RAMP: "1"
# DECK_ADD_REMOVAL: "1"
# DECK_ADD_WIPES: "1"
# DECK_ADD_CARD_ADVANTAGE: "1"
# DECK_ADD_PROTECTION: "1"
# DECK_FETCH_COUNT: "3"
# DECK_DUAL_COUNT: ""
# DECK_TRIPLE_COUNT: ""
# DECK_UTILITY_COUNT: ""
# DECK_TAG_MODE: "AND" # AND|OR (if supported)
# Entrypoint knobs (only if you change the entrypoint behavior)
# APP_MODE: "web" # web|cli — selects uvicorn vs CLI
# HOST: "0.0.0.0" # Uvicorn bind host
# PORT: "8080" # Uvicorn port
# WORKERS: "1" # Uvicorn workers
# (HOST/PORT honored by entrypoint; WORKERS for multi-worker uvicorn if desired)
# ------------------------------------------------------------------
# Testing / Diagnostics Specific (rarely changed in compose)
# SHOW_MISC_POOL: "1" # (already above) expose misc pool debug UI if implemented
# ------------------------------------------------------------------
# ------------------------------------------------------------------
# Editorial / Theme Catalog (Phase D) Controls
# These drive automated description generation, popularity bucketing,
# YAML backfilling, and regression / metrics exports. Normally only
# used during catalog curation or CI.
# ------------------------------------------------------------------
# EDITORIAL_SEED: "1234" # Deterministic seed for description & inference ordering.
# EDITORIAL_AGGRESSIVE_FILL: "0" # 1=borrow extra synergies for sparse themes (<2 curated/enforced).
# EDITORIAL_POP_BOUNDARIES: "50,120,250,600" # Override popularity bucket boundaries (4 comma ints).
# EDITORIAL_POP_EXPORT: "0" # 1=emit theme_popularity_metrics.json alongside theme_list.json.
# EDITORIAL_BACKFILL_YAML: "0" # 1=enable YAML metadata backfill (description/popularity) on build.
# EDITORIAL_INCLUDE_FALLBACK_SUMMARY: "0" # 1=include description_fallback_summary block in JSON output.
# EDITORIAL_REQUIRE_DESCRIPTION: "0" # (lint script) 1=fail if a theme lacks description.
# EDITORIAL_REQUIRE_POPULARITY: "0" # (lint script) 1=fail if a theme lacks popularity bucket.
# EDITORIAL_MIN_EXAMPLES: "0" # (future) minimum curated example commanders/cards (guard rails).
# EDITORIAL_MIN_EXAMPLES_ENFORCE: "0" # (future) 1=enforce above threshold; else warn only.
volumes:
- ${PWD}/deck_files:/app/deck_files
- ${PWD}/logs:/app/logs
- ${PWD}/csv_files:/app/csv_files
- ${PWD}/config:/app/config
- ${PWD}/owned_cards:/app/owned_cards
working_dir: /app
restart: "no"