mtg_python_deckbuilder/docs/user_guides/include_exclude.md
mwisnowski ac6c9f4daa
Some checks failed
CI / build (push) Has been cancelled
docs: documentation overhaul - archive, user guides, env parity (#62)
* docs: archive CLI runner scripts and Windows Docker guide, update web runner scripts

* docs: overhaul README and DOCKER.md, add 10 user guides

- README: Budget Mode section, corrected Further Reading links, theme badge descriptions, diagnostics expansion
- DOCKER.md: Windows path note, Budget Mode + Include/Exclude sections, env table additions
- docs/user_guides/: 10 new feature guides covering budget mode, include/exclude, locks/replace/permalinks, batch build, theme browser, random build, owned cards, partner mechanics, bracket compliance, quick build & skip controls

* fix: map PriceTimeoutError→503, add budget exceptions to status map; update error_handling.md

* docs: env var parity — add missing vars to .env.example and README table
2026-03-23 22:00:50 -07:00

2.8 KiB
Raw Blame History

Include / Exclude Lists

Pin specific cards into every build or permanently block them from selection.


Overview

The Include / Exclude feature (also called "Must-Haves") lets you control card selection at the individual card level, outside the normal theme and pool logic.

  • Must Include: cards are always added to the deck, before pool selection runs.
  • Must Exclude: cards are never added, regardless of theme, bracket, or pool filtering.

Requires ALLOW_MUST_HAVES=1 (default: on).


Enabling the UI Controls

The include/exclude buttons are hidden by default to keep the Step 5 interface clean. To show them:

SHOW_MUST_HAVE_BUTTONS=1

When enabled, each card row in Step 5 gains a Must Include (+) and Must Exclude () button. You can also manage lists via the quick-add input at the top of the section.


Adding Cards

Via Step 5 UI

  1. Enable SHOW_MUST_HAVE_BUTTONS=1.
  2. In Step 5, click + on a card to add it to Must Include, or to add it to Must Exclude.
  3. Use the quick-add input at the top to add cards by name without scrolling.

Via JSON Config

Supply lists in your deck config file:

{
  "must_include": ["Sol Ring", "Arcane Signet"],
  "must_exclude": ["Thassa's Oracle"]
}

Both keys accept an array of card names. Names are matched case-insensitively.


Priority Order

When include/exclude interacts with other filters, this order applies:

  1. Must Exclude — always wins; card is never selected.
  2. Must Include — card is always added, before pool selection.
  3. Budget filter — applied to the remaining pool after Must Include cards are inserted.
  4. Bracket filter — applied after budget.

Must Include cards are inserted directly and are not subject to budget pool filtering. They may appear as over-budget in the summary if they exceed the ceiling, and they may trigger bracket warnings if they violate bracket rules.


Multi-Copy Archetypes

If a card is in Must Include and the builder detects it supports multi-copy (e.g., Relentless Rats), a count picker dialog appears. Set the desired copy count before confirming.


Conflict Resolution

Scenario Behavior
Card is in both Must Include and Must Exclude A conflict dialog prompts you to resolve before building. Exclude wins if unresolved.
Must Include card not in color identity Build silently skips the card (does not hard-fail). Verify color identity before including.
Must Include card violates bracket rule Card is added; bracket compliance report flags it. Resolve in Step 5 or adjust bracket.

Headless / CLI

Set include and exclude lists in the JSON config. Environment variable overrides are not supported for per-card lists; use the config file.

{
  "must_include": ["Swiftfoot Boots"],
  "must_exclude": ["Demonic Tutor"]
}