fix(deckgen): backfill basic lands after cross-category dedup to reach 99 cards

This commit is contained in:
KoalaTrapLord authored and GitHub committed 2026-03-28 00:10:52 -04:00
1 parent 9d9e8675a9
commit 08f1cb7581
1 file changed
+28 -1
@@ -208,7 +208,34 @@ def build_deck(request: BuildRequest) -> BuildResult:
"duplicates were silently dropped before singleton validation."
)
all_card_names = list(seen_names.keys())
# -- Backfill after cross-category dedup to reach 99 ----------------
_DEDUP_COLOR_TO_BASIC = {
"W": "Plains", "U": "Island", "B": "Swamp",
"R": "Mountain", "G": "Forest",
}
_target_99 = sum(target_ratios.values())
_shortfall = _target_99 - len(seen_names)
if _shortfall > 0:
logger.warning(
"Cross-category dedup dropped %d cards -- backfilling with basic lands",
_shortfall,
)
warnings.append(
f"Backfilled {_shortfall} basic land(s) after cross-category dedup"
)
_basics = [
_DEDUP_COLOR_TO_BASIC[c]
for c in sorted(commander_ci)
if c in _DEDUP_COLOR_TO_BASIC
] or ["Wastes"]
for _i in range(_shortfall):
_bname = _basics[_i % len(_basics)]
if _bname not in seen_names:
seen_names[_bname] = "lands"
# If basic already in seen_names, the quantity gets handled
# during CardEntry assembly (basics are exempt from singleton)
all_card_names = list(seen_names.keys())
card_entries = scryfall.get_cards_by_names(all_card_names)