Tags

Tags give the ability to mark specific points in history as being important
  • v0.7.2

    Release: v0.7.2
    v0.7.2
    
    Commits since v0.7.1:
    - docs: two 0.7.2 sentences carried two ideas each
    - feat: sync goes both ways, and the decks page says where it stands
    - chore: declare 0.7.2, sync symmetry and the decks control
  • v0.7.1

    Release: v0.7.1
    v0.7.1
    
    Commits since v0.7.0:
    - fix: drop a dead import, and clear presence on a Drive reset
    - docs: the 0.7.1 entry names the heads-up and the cadence
    - feat: a deck says when another browser has been editing it
    - feat: the newest edit wins, and the deck says it changed elsewhere
    - docs: the 0.7.1 entry reads like the rest of the file
    - chore: declare 0.7.1, the sync simplification
  • v0.7.0

    Release: v0.7.0
    v0.7.0
    
    Commits since v0.6.0:
    - fix: the theme tool's test puts the browser globals back
    - feat: package.json carries the release, and the footer shows it
    - fix: the About page reads its Tutor key from the constant, not a literal
    - feat: the app is called Manatab, and so is the engine under it
    - fix: a sync that needs a click fills primary
    - fix: the ⋮ keeps the rightmost seat, sync sits second to last
    - fix: the deck sync control holds one shape and the last seat
    - fix: automatic sync runs on the token in hand, never on Google's door
    - refactor: the standard pool retires as a search concept
    - feat: the boot download owns up, search takes typing early, and Drive gets a reset
    - feat: every stored name moves under manatab:, spelled once
    - chore: the assistant is named Tutor, so the code says so
    - feat: a settings page, and everything account-shaped moves onto it
    - fix: sync converges, waits for boot, and stops dressing status as a button
    - feat: a preference file on Drive, and what never rides in it
    - fix: a failed Google sign-in never settled, and said nothing
    - fix: Save before share, and fill it only when Drive is not set up
    - fix: back off a failing auto-sync instead of retrying it forever
    - fix: serve package assets when the dev server runs in a worktree
    - feat: sync on its own, and fall back to the button where it can't
    - feat: thin the deck action row down to what you reach for
    - feat: one sync control on the decks page, and a dot where it matters
    - feat: a Save button on the deck page
    - feat: the store that runs a Drive sync plan
    - docs: clear 11 dead findings and stamp the 2026-08-01 verification pass
    - feat: rulings become a pinned, audited authoring source
    - docs: ENGINE and CARDS shrink to their post-CR-doctrine jobs
    - feat: the deck sync reconciler, pure and fully tabled
    - feat: Google sign-in and the Drive REST calls for deck sync
    - docs: the CR is the spec, and every doc here is style on top of it
    - docs: file the action-path architecture review
    - docs: harvest the wave-3 kernel findings and correct two stale scope claims
    - feat: the drift gate checks starting loyalty and printed keywords
    - docs: a fifth hand-list over StagedChoice, and it prompts the wrong seat
    - docs: file the DSK 90% architecture review
    - chore: sync DSK plan checkboxes after the wave 2 kernel pass
    - docs: return three doc blocks to their own declarations, drop a false control
    - docs: close the DSK wave 2 kernel pass
    - docs: give each Room-door verb back its own doc comment
    - feat: split the loss-prevention flag into a per-rule exemption mask
    - docs: triage the DSK wave 2 findings and annotate its 12 kernel skips
    - feat: "until the next end step" as a copy-effect duration, plus the Shard token
    - feat: a first-main trigger that adds mana with a printed spend restriction
    - docs: file the seven kernel specs DSK lane 1/2 skipped for
    - feat: Trial of Agony
    - docs: file the three kernel specs this batch's skips need
    - feat: Vile Mutilator
    - feat: Winter, Misanthropic Guide
    - feat: enchant player, an Aura whose host is a seat
    - feat: Unidentified Hovership
    - feat: The Jolly Balloon Man
    - feat: Fear of Impostors
    - fix: a batch sequence counts landed batches, not just live branches
    - docs: triage the 14 kernel specs DSK wave 1 filed for its skips
    - chore: sync DSK plan checkboxes after wave 1
    - docs: add the wave skill, the conductor for a coverage fan-out
    - fix: plan says where unit work goes, and flags a parked shared clone
    - fix: Altanak returns a land from your graveyard, not from any
    - docs: file the !501 review findings, including a live defect on next
    - docs: file the three shared-path defects the !502 review found
    - docs: mark Altanak landed and drop its cleared blocker
    - fix: plan merge announced a merge it never confirmed
    - docs: kernel spec for Marina Vendrell's Grimoire
    - docs: kernel specs for the six DSK lane 2/2 skips
    - docs: retire the trigger-on-becoming-the-target-of-an-opp kernel spec
    - docs: kernel specs for the seven DSK lane-1 cards this batch skipped
    - docs: fold the kernel dev's findings into the worklist
    - feat: Nashi, Searcher in the Dark
    - fix: let merge and resume take a branch its own worktree holds
    - feat: Oblivious Bookworm
    - feat: Marina Vendrell
    - feat: Cursed Recording
    - feat: Sawblade Skinripper
    - fix: a unit worktree survives another agent's plan start
    - feat: Fear of Burning Alive
    - feat: Let's Play a Game
    - feat: add the becomes-target trigger event and Altanak, the Thrice-Called
    - feat: Dazzling Theater // Prop Room
    - feat: Anthropede
    - chore: sweep 10 phantom kernel specs out of the queue
    - feat: Betrayer's Bargain
    - docs: correct the two DSK tail kernel specs against the tree
    - chore: retire dead worktrees and phantom kernel specs at the merge
    - plan: file the two DSK tail kernels and mark the eight blocked cards
  • v0.6.0

    Release: v0.6.0
    v0.6.0
    
    Commits since v0.5.0:
    - fix: shorten the shared-deck save tooltip
    - feat: /random is a link to a card nobody picked
    - fix: a shared deck opens in the read-only deck view
    - fix: Tutor's rail stops eating the widescreen page
    - fix: a failed card-data load has a way out
  • v0.5.0

    Release: v0.5.0
    v0.5.0
    
    Commits since v0.4.0:
    - fix: Tutor can see the card browser's search box
    - refactor: one cache holds the card pool, not three
    - fix: a card skipped on both mana counts keeps its reasons
    - chore: drop three rules whose markup moved out from under them
    - fix: find_decks counts one set of decks
    - fix: the pin walks only the rows the page is showing
    - fix: the search pages and the two menus follow the same key rules
    - fix: the card page leaves the browser's own keys alone
    - fix: a theme reset clears every token, however it was painted
    - fix: the board stops offering the tools it does not have
    - fix: Tutor leaves the board alone, and the docs catch up
    - refactor: repo decks are vault decks, in the code too
    - feat: Tutor can see your decks, not only the one you opened
    - fix: the mana figure answers castability, on the play
    - refactor: set_search and set_theme lose a verb Magic already owns
    - feat: trim the setup copy to the two facts that earn the button
    - feat: the empty state says where it is, in a few words
    - fix: Mod+/ leaves the caret in the composer
    - feat: Tutor moves to the app, and can drive the card browser
    - feat: drop Groq, and give the composer its caret back after a send
    - fix: set_theme's token map used a keyword Gemini rejects
    - feat: Tutor themes the whole palette, and the footer offers the way back
    - feat: Tutor can recolor the app, and will not bring it up
    - feat: the accent color turns on one hue, and /play stops carrying its own palette
    - feat: Mod+/ opens Tutor, and closing hands focus back
    - fix: the Tutor composer takes focus the first time it opens
    - feat: a search page opens ready to search, a phone does not
    - feat: Tutor can say what it does, with or without a key
    - feat: the detail pane flips, and copies follow the rules text
    - fix: a linked card pins wherever it sits, and the printings row loses a column
    - feat: a deck link from a card opens on that card
    - fix: one way to turn a two-faced card over
    - fix: the printings row gives the set name the slack
    - feat: the detail pane opens the card page
    - feat: the card page's folds are remembered, and its decks are yours
    - fix: the search links anchor the rail
    - fix: the search links sit under the decks they follow
    - fix: the printings list clears its own scrollbar
    - fix: the printings row is one line at every width
    - feat: theme returns to the footer, and the die says Random
    - fix: no shortcuts button on a phone
    - feat: the count and the page turners are one control
    - fix: a set search reports the printing it matched
    - feat: walk the card search and the set list with the arrows
    - fix: the set table's numeric headers sit over their numbers
    - feat: the gallery's view lives in the URL
    - fix: drop the gallery's format filter
    - feat: one search row, and the field sets its height
    - fix: drop the Arena list view from card search
    - feat: printings list newest first
    - feat: one pool, and legality is a search term
    - fix: artist and set search read the artwork index
    - fix: the deck count sits in a track its own size
    - feat: add a card to a deck from the card page
    - fix: drop the breadcrumbs, which said what the page already says
    - fix: the walker's ends pad optically, not equally
    - fix: no rules between the card page's sections
    - fix: name the mana value, and match the chips beside it
    - feat: the card page splits rules from provenance
    - fix: the artist is credited once, in the printings list
    - fix: the set walker sits under the card
    - fix: the card takes the width on a narrow screen
    - fix: the set walker reads as one control
    - feat: a random card is one button away
    - feat: one top bar, one search field, one key list
    - fix: removing a chip keeps the rest of the query
    - docs: plain language across the card browser
    - feat: the app has a card browser
    - feat: search speaks Scryfall's operators
    - feat: set codes carry their printed name
    - feat: the card picker ranks its results
    - feat: card data carries EDHREC rank
    - fix: Enter adds to the deck, whatever is held
    - fix: side, maybe and lint sit at one spacing
    - fix: the gallery search sits at the row's height
    - feat: the shortcuts list flows across the page
    - refactor: one search field in the design system
    - refactor: tutor settings joins the shared dialog
    - fix: a modal stands the page's shortcuts down
    - fix: the about page drops its back link
    - fix: the about page runs to the footer's edge, in one column
    - fix: the about page reads at a reading size
    - fix: the about page reads as a document
    - refactor: modals go ambient
    - fix: the lint header stops counting twice
    - feat: / focuses the deck gallery's search
    - fix: the side and maybe tables take the short name
    - refactor: one dropdown in the design system
    - fix: the copies steppers reach the pane's right edge
    - feat: the detail pane counts a card's copies in every pile
    - feat: a keyboard shortcuts list, from the footer or ?
    - fix: cost columns hold a two-face cost
    - fix: a two-faced card prints two costs
    - fix: no ellipsis on a mana cost, no P/T in a narrow picker
    - feat: search results hover over the page again
    - fix: the qty column pays for its own padding again
    - feat: cost right, P/T centered, in both tables
    - feat: the cost column aligns right, like a card prints it
    - fix: drop the P/T column on narrow phones
    - fix: trim the quantity box
    - fix: keep Rows/Group right-aligned once the lint chip is hidden
    - feat: foldable sideboard, tappable steppers, quieter phone toolbar
    - fix: close the last paths that counted the maybeboard
    - feat: maybeboard imports, Tutor can use it, and the section folds
    - feat: maybeboard, picker +/- keys, and a results list that fits
    - feat: narrow deck and search tables carry what fits
    - fix: a card's printings can't stretch the detail pane
    - fix: the description box grows with its text instead of scrolling
    - feat: deck header name fills the row, description wraps
    - fix: the detail-pane close handle is visible again
    - fix: drop the detail-pane close button at narrow widths
    - fix: deck-edit format picker dropdown matches the gallery filter
  • v0.4.0

    Release: v0.4.0
    v0.4.0
    
    Commits since v0.3.0:
    - chore: strip a milestone marker from a comment I edited
    - docs: note the mana chip fix in 0.4.0
    - fix: mana chip wears the worse of its two signals
    - docs: 0.4.0 changelog
    - chore: refresh card cache for Scryfall layout
    - refactor: tokenize the qty control and apply .card-face
    - fix: restore sideboard P/T and drop a hidden Type sort
    - fix: stop the read-only qty cell from eating the row's pin click
    - fix: request back-face art only for layouts that have one
    - feat: --r-card radius for full card faces site-wide
    - feat: dual-face tabs and card-like detail pane header
    - fix: stop card detail art from flex-shrinking in tall panes
    - feat: sticky Mana/Draw odds/Rulings folds on the card detail pane
    - feat: refine deck tables, lint column, and detail oracle chrome
    - fix: align deck row qty typography and header with body
    - feat: align deck qty header with stepper; tighten fat-row chrome
    - feat: optional fat deck rows with art crops (#600)
  • v0.3.0

    Release: v0.3.0
    v0.3.0
    
    Commits since v0.2.0:
    - docs: 0.3.0 release notes for printings, gallery art, and share links
    - fix: satisfy BlobPart/gunzipSync ArrayBuffer typings
    - fix: keep user gesture when copying a share link
    - feat: share decks via a copy-paste URL fragment
    - fix: keep every unique art for basic lands in printings
    - fix: reserve 16 basic-land printings slots for borderless arts
    - fix: keep classic basic-land arts in the printings carousel
    - fix: widen portrait art tiles and match full-art crop ratio
    - feat: split gallery art view into landscape and portrait wells
    - feat: blur letterbox behind gallery art crops in a square well
    - fix: always show the gallery lead hero even when its art crop is portrait
    - feat: honor pinned printings on gallery heroes; fold printings into import
    - feat: alternate art picker via side printings index
    - fix: widen the trailing annotation gap to 1rem
    - fix: spend the squeezed table width on name and type
    - fix: pad the trailing row annotation like every other cell
    - fix: give the trailing row annotation the gap, whichever one lands last
  • v0.2.0

    Release: v0.2.0
    v0.2.0
    
    Commits since v0.1.0:
    - feat: publish a GitLab Release described by its changelog section
    - docs: retone the 0.2.0 entry
    - docs: 0.2.0 release notes
    - fix: decide cache ownership the same way on either host
    - ci: gate next, add MR pipelines, and make CHANGELOG the version authority
    - docs: file the Card flat-scalar consolidation refactor (#768)
    - feat: separate complexity ceilings from perf ceilings in plan debt
    - chore: sync DSK plan checkboxes after the kernel wave
    - docs: trim the spell-cast cost spec to the unbuilt choose-or-reveal arm
    - docs: file the phantom-kernel-spec pattern at merge
    - chore: clear two phantom kernel specs and sync the DSK plan
    - chore: sync DSK plan checkboxes from the registry
    - docs: file the castProfile staged-cost misclassification
    - fix: bun run test builds the wasm kernel first, as dev and build already do
    - docs: retire the issue-based plan vocabulary the plan-file migration left behind
    - docs: state the UX carve-out in the FINDINGS preamble
    - docs: keep UX work in GitLab issues, out of the dev worklist
    - chore: delete the landed door-unlock-timestamp kernel spec
    - docs: restore the /play sim-support-status spike (#164) to FINDINGS
    - test: pin newest-wins on the layer-7b group base-P/T grant
    - fix: guard tap_other_count on the activation family, test the cost-arm lints
    - test: pin the lock's characteristics bump with a static that must retire
    - chore: delete the untap-during-each-other-untap-step kernel spec
    - fix: filter Alchemy (A-) variants out of the set meters
    - chore: regenerate manifest
    - docs: record LegalActionsMutatedState as a second signature of the torn-hash flake
    - chore: regenerate manifest
    - chore: sync DSK plan checkboxes after integrating next
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: migrate the open issue queue into the repo worklist
    - docs: skills + AGENTS.md for the lean worklist
    - feat: cut plan.ts to the lean core — no issues, no milestones, no claims
    - fix: charge the granted alternate cost's use, and lint its pairings
    - fix: key the whole look-top window off its acting player
    - fix: restore the Pilots doc comment RolloutPolicy displaced
    - fix: bound convoke and delve fan-out from the charging funnel
    - fix: scope the untap restriction and give the untap step one writer
    - fix: address review on Room door unlock timestamps
    - docs: record the turned-face-up scope escape, test the Inspector's own flip
    - fix: address the !431 sendback — say what plan block actually is
    - feat: exclude granted {0} casts from the convoke grant
    - chore: generate the DSK plan file from the open card-issue queue
    - docs: rewrite coverage skills + AGENTS.md for plan-file waves
    - feat: plan-file card worklists + batch MRs, retire claim/watch ceremony
    - fix: classify the combat damage window counters as unhashed by design
    - fix: rebase onto next and clear the doubled-apostrophe artifacts
    - fix: address the !444 sendback — planeswalker attacks, docs, timestamp divergence
    - feat: add the continuous group base-P/T grant and Dollmaker's Shop // Porcelain Gallery
    - fix: pin Roaring Furnace's burn to the cards in hand
    - docs: document the door-lock kernel in CARDS.md
    - fix: pin Fear of Failed Tests to the damage dealt
    - fix: pin the staged cost arm in the position hash, and document the funnel
    - fix: enforce the combat-damage dispatch pair, assert its window, retire the old idiom
    - fix: hold at fire time in Kona's never-triggered test
    - feat: add non-controller manifest dread and Unwanted Remake
    - test: pin Chainsaw's printed damage magnitude in both directions
    - test: pin Rampaging Soulrager's static to its source
    - feat: comptime-lint .target_player and document it in the consumption map
    - fix: pin Intruding Soulrager's opponent-only damage and draw count
    - test: pin Glimmer Seeker's draw count and controller constraint
    - fix: assert the printed mana amount in Enduring Vitality grant test
    - chore: regenerate manifest
    - feat: Chainsaw
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: refuse dead off-battlefield statics, assert target-walk zones, collapse the fixture zone walker
    - chore: regenerate manifest
    - feat: add HandSizeStatic.face and Roaring Furnace // Steaming Sauna
    - feat: Uncharted Haven
    - feat: Floodpits Drowner
    - feat: Patched Plaything
    - chore: regenerate manifest
    - feat: Enduring Vitality
    - fix: refuse a zig build whose cache belongs to another checkout
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: plan handoff is verified, and only draft MRs rank as resumable
    - feat: Glimmer Seeker
    - fix: restore the release branch on every plan merge exit
    - chore: correct the #734 serialization rationale in build.zig
    - feat: Intruding Soulrager
    - chore: add per-binary test steps and record the #734 isolation result
    - feat: Rampaging Soulrager
    - feat: Kona, Rescue Beastie
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add cross-zone static subtype grant and Leyline of Transformation
    - fix: address the !439 sendback — kind-aware /play label, scope correction
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Get Out
    - chore: regenerate manifest
    - fix: address the !449 sendback — both clones, optionals, and a probe that could disable itself
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: correct Ticket Booth's printing to DSK #158
    - fix: correct Moldering Gym's printing to DSK #190
    - feat: Ripchain Razorkin
    - chore: regenerate manifest
    - fix: a sent-back MR re-enters the queue immediately
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Fear of Falling
    - feat: Fear of Being Hunted, with a printed must-be-blocked static
    - chore: regenerate manifest
    - fix: run the three Zig test binaries one at a time
    - feat: Ticket Booth // Tunnel of Hate
    - feat: Underwater Tunnel // Slimy Aquarium
    - feat: Leyline of Resonance
    - feat: Painter's Studio // Defaced Gallery
    - feat: Moldering Gym // Weight Room
    - feat: Fear of Failed Tests
    - feat: add Room door unlock timestamps
    - fix: hash StagedObjectCost.kind
    - fix: clone and hash draw_cause, and gate the hand-listed enumerations
    - feat: granted alternate mana cost for spells you cast, with Leyline of Mutation
    - wip: granted alternate mana cost for spells you cast
    - feat: batch "one or more creatures deal combat damage" per damage step
    - feat: untap during each other player's untap step, with Seedborn Muse
    - feat: add the staged tap-N spell cost and Fear of Exposure
    - perf: cap convoke enumeration at the spell mana value
    - chore: regenerate manifest
    - feat: the sacrificing player chooses which creature, everywhere
    - feat: Leyline of Hope
    - chore: regenerate manifest
    - feat: Fear of Immobility
    - feat: Tribute to Hunger asks the opponent which creature to sacrifice
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: raise the default turn limit to 50
    - feat: return-a-permanent additional cost, with Fear of Isolation
    - feat: plan block — a blocked issue stays open and leaves the queue
    - feat: add door locking and Keys to the House
    - feat: continuous spell keyword grant, with Chief Engineer
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add the granted-cast zone/payment axes and Charred Foyer // Warped Space
    - feat: classify draws by cause instead of one loopAborts number
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add batched leave-the-graveyard trigger and Defiled Crypt // Cadaver Lab
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: widen the granted-cast descriptor with zone and per-turn axes
    - chore: regenerate manifest
    - chore: regenerate manifest
    - docs: record the evaluateRollout terms that were measured and rejected
    - feat: Derelict Attic // Widow's Walk
    - chore: regenerate manifest
    - feat: Fear of the Dark
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Central Elevator // Promising Stairs
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Bottomless Pool // Locker Room
    - feat: Sporogenic Infection
    - feat: Cryptid Inspector
    - feat: Osseous Sticktwister
    - feat: Twitching Doll
    - chore: regenerate manifest
    - feat: Diversion Specialist
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Omnivorous Flytrap
    - feat: selectable MCTS playout policy, measured, default unchanged
    - feat: Popular Egotist
    - feat: The Swarmweaver
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Silent Hallcreeper
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Valgavoth's Faithful
    - feat: Ragged Playmate
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Meathook Massacre II
    - feat: Piggy Bank
    - feat: Drag to the Roots
    - perf: skip the search when one representative survives filtering
    - chore: regenerate manifest
    - feat: Overgrown Zealot
    - feat: add sized token creation and move both X/X token cards onto it
    - feat: Rite of the Moth
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Unholy Annex // Ritual Chamber
    - feat: Balustrade Wurm
    - chore: regenerate manifest
    - feat: task becomes a real label instead of the absence of one
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: arrange-top write-back addresses cards by id, not library position
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: pick the discarded card at resolution, not at announcement
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Surgical Suite // Hospital Room
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Funeral Room // Awakening Hall
    - refactor: collapse eight two-spec multi-condition triggers to one ability
    - feat: Glassworks // Shattered Yard
    - feat: add the batched dies event and Vengeful Townsfolk
    - refactor: ladder tunes on repo decks, not the bench fixtures
    - chore: regenerate manifest
    - feat: Meat Locker // Drowned Diner
    - fix: drop parallel last_known_finality_counter
    - feat: Break Down the Door
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Dissection Tools
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Conductive Machete
    - feat: add noncombat_damage_to_player and fix self-inflicted damage triggers
    - feat: add the OTJ Mercenary token and Prickly Pair
    - chore: regenerate manifest
    - feat: Savior of the Small
    - feat: Cursed Windbreaker
    - chore: regenerate manifest
    - feat: Shrewd Storyteller
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Cynical Loner
    - feat: add whole-hand-to-bottom ordering and Teferi's Puzzle Box
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: House Cartographer
    - chore: regenerate manifest
    - feat: Overlord of the Balemurk
    - feat: per-seat pilot selection and the head-to-head strength ladder
    - feat: Defiant Survivor
    - feat: Unwilling Vessel
    - feat: Overlord of the Boilerbilges
    - feat: Overlord of the Mistmoors
    - feat: add the loyalty-planeswalker back face and Nicol Bolas, the Ravager
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Victor, Valgavoth's Seneschal
    - chore: regenerate manifest
    - feat: Infernal Phantom
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: measure a spell on the stack at the X its caster chose
    - feat: Stalked Researcher
    - chore: regenerate manifest
    - feat: Skullsnap Nuisance
    - feat: add player experience counters and Mizzix of the Izmagnus
    - feat: Scrabbling Skullcrab
    - feat: Dashing Bloodsucker
    - feat: Gremlin Tamer
    - feat: Undead Sprinter
    - feat: Erratic Apparition
    - feat: Entity Tracker
    - fix: one entry per color grant so a set effect cannot resurrect a wiped one
    - fix: lint the emblem granted-activated surface and pin Koth's sickness ruling
    - feat: add the owner's library-destination choice and migrate its two consumers
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: spend restrictions survive an explicit mana float
    - chore: regenerate manifest
    - feat: add proliferate and Yawgmoth, Thran Physician
    - feat: add emblem group activated-ability grants and Koth of the Hammer
    - feat: add the two-color devotion gate, the first-draw reveal, and Keranos, God of Storms
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Broodspinner
    - fix: wire color grants into the fungibility class key
    - feat: add Hammer of Bogardan, the upkeep-window representative
    - chore: regenerate manifest
    - feat: add the upkeep step and its priority window
    - chore: regenerate manifest
    - feat: Malevolent Chandelier
    - feat: Haunted Screen
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Bear Trap
    - refactor: split the agent skills into routers plus on-demand references
    - feat: bound the captured targets a resolution choice carries, and document the pool
    - feat: add additive layer-5 color and subtype grants, and Possessed Goat
    - feat: add the target-player hand choice pool and re-author Deep-Cavern Bat and Cracked Skull
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - docs: record the mirror-mana surface and pin it inside the mana memo
    - feat: add QueryCtx.sourceEnteredThisTurn and Shardmage'"'"'s Rescue
    - feat: Grab the Prize
    - feat: add the mirror-mana ability and Exotic Orchard
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add cast-target-shape narrowing, the event-spell permanent reader, and Dack Fayden
    - test: ratchet LookTopChoice under the widest staged variant
    - feat: Demonic Counsel
    - docs: name #588 at the exile-return Aura gap
    - fix: enter a look-top Aura attached to a chosen host
    - chore: regenerate manifest
    - feat: add fixed-count graveyard-exile spell cost and Abhorrent Oculus
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: wire the entering-Aura host pick through the pilots, prompt, and docs
    - fix: reject the activation-only graveyard-exile arm in a spell cost
    - feat: add reveal-top-play, the entering-Aura host pick, and Chaos Warp
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Vanish from Sight
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Cackling Slasher
    - docs: cite the discard rule that exists in the pinned CR
    - docs: fold the hand-size family into one consumption-map row
    - feat: add the all-players hand-size static and Anvil of Bogardan
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add the look-top hand fallback and Wickerfolk Thresher
    - feat: Impossible Inferno
    - chore: regenerate manifest
    - chore: regenerate manifest
    - docs: record the overload surface and its consumption map row
    - chore: regenerate manifest
    - feat: add overload and Cyclonic Rift
    - feat: Patchwork Beastie
    - feat: add Warren-Scourge Elf
    - feat: Beastie Beatdown
    - feat: add protection from a subtype
    - chore: regenerate manifest
    - chore: regenerate manifest
    - test: pin the granted-ability invariant arm for all three kinds
    - chore: regenerate manifest
    - feat: Hand That Feeds
    - feat: Peer Past the Veil
    - docs: record the grantable-ability surface, and keep the mana gate to a compare
    - chore: regenerate manifest
    - feat: add grantable activated/mana abilities and Urza's Saga
    - chore: regenerate manifest
    - feat: Disturbing Mirth
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Spineseeker Centipede
    - feat: Stay Hidden, Stay Silent
    - docs: record the cost-exile link and the cost-pick cast fan-out
    - feat: add the CR 607.2q cost-exile link and Fear of Abduction
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Unnerving Grasp
    - docs: when a look-top tail is the wrong home for a printed sentence
    - feat: Under the Skin
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add GroupManaGrant.face and Greenhouse // Rickety Gazebo
    - fix: wire cant_be_turned_face_up through the static scans and the hash
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add the until-your-next-turn grant duration and Rootwise Survivor
    - docs: record the retrieval half of the source-linked exile
    - feat: let a becomes-body declare its types additively, and Unable to Scream
    - chore: regenerate manifest
    - test: pin the exile-link incarnation scope on the count reader too
    - chore: regenerate manifest
    - feat: add card-facing retrieval over the source-linked exile and Helvault
    - fix: warn before reclaiming a claim, and refuse to resume a live one
    - chore: regenerate manifest
    - chore: regenerate manifest
    - docs: record the two arms of life-gain denial
    - fix: redact hidden-zone target ids from the per-viewer stack view
    - feat: add the per-player life-gain lock and Screaming Nemesis
    - chore: regenerate manifest
    - fix: plan sendback and claim verify the state they report
    - fix: gate a Room's Card surface with an allowlist, not a denylist
    - chore: regenerate manifest
    - docs: document discardHandCard in the discard family and the consumption map
    - feat: add discard-by-handle and Cracked Skull
    - chore: regenerate manifest
    - docs: face-down addressability and the effect-side turn-up in CARDS.md
    - feat: Hauntwoods Shrieker
    - feat: add modal activated abilities and Insidious Fungus
    - feat: Threats Around Every Corner
    - chore: regenerate manifest
    - feat: add the face-down query predicate and the effect-side turn-face-up funnel
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add non-modal resolution-time "A or B" choice and Ghostly Dancers
    - chore: regenerate manifest
    - feat: add Adjustment.add_types and Jump Scare
    - feat: add the once-ever trigger limiter and Acrobatic Cheerleader
    - feat: add the source-linked exile tag and Veteran Survivor
    - chore: regenerate manifest
    - refactor: delete the bench baseline file and its ratchet
    - chore: regenerate manifest
    - refactor: spell out zbuild.ts and clean-zig-cache.ts
    - chore: regenerate manifest
    - fix: script invocations that name a renamed verb
    - refactor: namespace sim commands under sim:, tag becomes release
    - chore: regenerate manifest
    - docs: perf is reviewed at set boundaries, not at every landing
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: no raw NUL byte in the untrusted test
    - chore: regenerate manifest
    - chore: regenerate manifest
    - docs: land tokens and the shared token entry funnel
    - fix: enforce the counter-kind checklist the Counters doc denied existed
    - chore: regenerate manifest
    - feat: add the Everywhere land token and Overlord of the Hauntwoods
    - feat: add resolution-effect door unlocking and Ghostly Keybearer
    - refactor: streamline the script surface, drop the deck coverage meter
    - docs: AGENTS.md triage-set row matches the tool
    - refactor: triage-set reports coverage, stops guessing feature families
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: render GitLab-sourced text as data, not instructions
    - chore: update build-chain deps to clear 13 advisories
    - fix: zbuild retries a crashed test step once instead of blocking every merge
    - fix: triage-set stops counting shipped mechanics as keyword gaps
    - fix: pin every graveyard_scan_events entry with a dispatch tripwire
    - chore: regenerate manifest
    - chore: regenerate manifest
    - docs: record the graveyard-sourced trigger surface in the consumption map
    - feat: add mana-spend purpose vocabulary and Creeping Peeper
    - feat: add graveyard-sourced battlefield-event triggers and Fear of Infinity
    - fix: zclean drops the whole .zig-cache, not part of it
    - fix: refuse Card-level continuous abilities on a Room
    - feat: add StaticSpec.face and Restricted Office // Lecture Hall
    - feat: add finality counters and Resurrected Cultist
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: zclean must drop h/ and b/ with o/
    - feat: add look-top window tails and Killer's Mask
    - feat: add Twist Reality and the modal look-top window composition
    - chore: regenerate manifest
    - feat: add the turned-face-up trigger event and Growing Dread
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: label both main phases in the /play phase bar
    - docs: describe the damage event boundary in ENGINE.md
    - perf: acknowledge the ~14% MCTS cost of impending's new counter kind
    - feat: add impending (alternative cast cost, time counters, conditional type suppression) and Overlord of the Floodpits
    - docs: map the permanent-damaged event and its funnel in CARDS.md
    - feat: add the permanent-damaged trigger event and Hornet Nest, Mortal Wound
    - feat: drop the Zig object cache when a unit is claimed
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add multi-condition trigger events and Balemurk Leech
    - fix: drop the gallery sort control
    - fix: drop gallery export status line, reorder header actions
    - chore: meter leads with FULL/TOTAL
    - feat: add the postcombat main phase, CR 603.4 intervening-if, and Cautious Survivor
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: reclassify WrongHandleKind as an engine defect, not a rules fizzle
    - chore: regenerate manifest
    - chore: regenerate manifest
    - fix: count phyrexian pips in every devotion reader
    - chore: regenerate manifest
    - feat: Unsettling Twins
    - chore: regenerate manifest
    - feat: add Rooms (CR 709.5) and Grand Entryway // Elegant Rotunda
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Bashful Beastie
    - feat: escalations, a `now` lever, and kernels-first ranking
    - feat: Innocuous Rat
    - chore: regenerate manifest
    - feat: Orphans of the Wheat
    - chore: regenerate manifest
    - feat: Duskmourn's Domination
    - chore: regenerate manifest
    - docs: record the delirium card-type count in CARDS.md
    - chore: regenerate manifest
    - feat: add delirium card-type count and Violent Urge, Wildfire Wickerfolk
    - feat: Midnight Mayhem
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Arabella, Abandoned Doll
    - feat: anchor the turn-face-up choice on the permanent in /play
    - chore: regenerate manifest
    - fix: a permanent under a characteristic overlay is not a Saga
    - feat: Living Phone
    - chore: regenerate manifest
    - feat: Seized from Slumber
    - chore: regenerate manifest
    - docs: face-down permanents, manifest dread, and the turn-face-up special action
    - chore: regenerate manifest
    - feat: Enduring Curiosity
    - perf: settle overlay presence in one battlefield walk
    - feat: Enduring Courage
    - feat: add face-down permanents, manifest dread, and Manifest Dread
    - chore: regenerate manifest
    - feat: Cathartic Parting
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Coordinated Clobbering
    - chore: regenerate manifest
    - docs: refresh the About page against the current app
    - chore: drop the .gemini skills mirror
    - chore: stop tracking .DS_Store
    - feat: Irreverent Gremlin
    - chore: regenerate manifest
    - feat: Attack-in-the-Box
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Don't Make a Sound
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Clockwork Percussionist
    - feat: the whole lint header toggles the panel
    - feat: the app's filled buttons are accent blue; --live stays on the board
    - fix: the deck header's filled action uses the accent, not the board's gold
    - fix: light-mode warn goes burnt orange, and the status fills are picked not mixed
    - feat: status chips carry their hue on the fill, and buttons get a real edge
    - feat: gate Play on sim coverage, tidy the header, retune the light theme
    - fix: stat chips wear the tier of the finding they'd raise
    - fix: sim chip goes last and never red, and P/T fits a 15/15
    - fix: an illegal mainboard size reads as a defect at any margin
    - feat: one switch for lint — findings list and row highlights together
    - feat: flag an oversized sideboard, and tint every linted row by its tier
    - fix: lead the mana column with the percentage, scroll lint findings to their row
    - feat: collapse the lint panel's info tier behind a toggle
    - feat: render the full lint findings list and split the mana readouts
    - feat: lint findings get a row tint and their own section, not a banner
    - feat: move deck-row chrome to trailing columns and banners into the toolbar
    - feat: Slavering Branchsnapper
    - feat: Shepherding Spirits
    - chore: regenerate manifest
    - feat: Daggermaw Megalodon
    - chore: regenerate manifest
    - feat: Bedhead Beastie
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Razorkin Needlehead
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Splitskin Doll
    - feat: Vengeful Possession
    - feat: Commune with Evil
    - feat: Live or Die
    - chore: regenerate manifest
    - feat: Thornspire Verge
    - chore: regenerate manifest
    - feat: Hushwood Verge
    - chore: regenerate manifest
    - feat: Gloomlake Verge
    - chore: regenerate manifest
    - feat: Floodfarm Verge
    - chore: regenerate manifest
    - feat: Blazemire Verge
    - chore: regenerate manifest
    - feat: Boilerbilges Ripper
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: Valgavoth's Lair
    - feat: add staged multi-permanent sacrifice costs and Westvale Abbey
    - chore: target coverage MRs at the next integration branch
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: add staged multi-card discard activation costs and Nezahal, Primal Tide
    - feat: Commander's Sphere
    - feat: Wharf Infiltrator
    - feat: add targeted card-draw triggers and Niv-Mizzet, the Firemind
    - chore: regenerate manifest
    - fix: pruned-result stub must carry the re-verify rule
    - fix: bound the assistant live provider history
    - chore: regenerate manifest
    - fix: card-db mock must keep the real module's other exports
    - chore: regenerate manifest
    - ci: give test:ts the kernel wasm it needs to load the app
    - chore: regenerate manifest
    - ci: install git in test:ts, which lint-imports needs
    - feat: add gauntlet favicon
    - chore: regenerate manifest
    - fix: give the edit delta its own column so the qty steppers stay aligned
    - chore: regenerate manifest
    - feat: import a pasted or uploaded decklist from anywhere
    - chore: regenerate manifest
    - feat: general per-deck undo/redo, replacing the Tutor-only undo
    - chore: regenerate manifest
    - feat: highlight what the last Tutor edit changed
    - chore: regenerate manifest
    - feat: /optimize replaces the cuts and upgrades chips
    - chore: regenerate manifest
    - test: pin distinct labels for discard-additional-cost casts
    - chore: regenerate manifest
    - ci: gate the TypeScript half in CI and at merge
    - chore: regenerate manifest
    - refactor: deck archive as a boundary-delimited text format
    - chore: regenerate manifest
    - fix: collapse a run of draws into one log line
    - chore: regenerate manifest
    - feat: export and import all local decks as one file
    - chore: regenerate manifest
    - feat: gallery tabs, a Starred section, and per-deck stars
    - chore: regenerate manifest
    - feat: import names implemented cards whose Oracle text changed
    - chore: regenerate manifest
    - feat: cache every printed face of a two-faced card
    - chore: regenerate manifest
    - fix: set paths.base to the deploy root so the SPA fallback boots
    - chore: regenerate manifest
    - fix: a skipped mana-health signal renders as a dash, not a blank
    - chore: regenerate manifest
    - fix: parseDeck stores the canonical section name, not the raw header
    - chore: regenerate manifest
    - refactor: one issue per card, tracked by title
    - chore: regenerate manifest
    - fix: make a plan merge 405 diagnosable instead of generic
    - chore: regenerate manifest
    - fix: an empty card checklist is never "landed" in plan sync
    - chore: regenerate manifest
    - fix: plan next takes --limit and names what it dropped
    - chore: regenerate manifest
    - docs: record the run_gauntlet single-matchup decision in the tool
    - chore: regenerate manifest
    - docs: drop the BYOK design sketch
    - chore: regenerate manifest
    - fix: group the deck header actions by intent
    - fix: bring /play into the design system
    - refactor: put the deck side of the app on the tokens
    - feat: give the app a token layer and shared controls
    - fix: let form controls inherit the page's type
    - chore: regenerate manifest
    - fix: stop the opening-hand row clipping a card's hover ring
    - fix: explain the deck grouping toggle on hover
    - chore: sort imports in hero-card test
    - feat: pick how deck cards group by type
    - chore: regenerate manifest
    - docs: trim sim/README to what it uniquely documents
    - docs: add a roadmap to the README and tighten the prose
    - docs: rewrite the README around what it does; add CONTRIBUTING
    - docs: license first-party source under PolyForm Noncommercial 1.0.0
    - chore: regenerate manifest
    - fix: hover preview shows the same face as the board
    - fix: transformed permanents image their printed back face
    - fix: plan targets main, not the deleted zig-kernel branch
    - chore: regenerate manifest
    - chore: consistent page titles, explicit hero for Sagas
    - fix: resolve card images from reactive card info where it exists
    - refactor: complete the card-id index instead of filling it lazily
    - fix: two defects found reviewing this session's work
    - feat: rebrand to Gauntlet, add an About page, split the legal footer
    - fix: skip art crops that can't fill a landscape tile
    - feat: art view — deck galleries fronted by their hero card
    - feat: cache the card artist for art attribution
    - fix: serve card images from the CDN, not the 2/second API
    - perf: gallery resolve drops from ~2s to ~300ms cold, ~2ms warm
    - fix: commanders lead a commander deck's key cards
    - feat: gallery view toggle drives both deck sections
    - feat: gallery search, sort, and a table for your own decks
    - fix: raise per-turn caps so a from-scratch build completes
    - chore: open #324 turn-caps branch
    - docs: BYOK.md reflects the shipped assistant
    - refactor: sim dot moves to its own column ahead of the card name
    - feat: playtest starter chip
    - fix: give the agent the real opponent deck list
    - feat: persist assistant threads in localStorage
    - fix: count face-name deck entries against the copy limit
    - chore: open #321 assistant UX branch
    - chore: regenerate manifest
    - feat: run_gauntlet playtests the open deck in a worker
    - feat: headless match exports in the WASM kernel
    - feat: render mana symbols in chat replies
    - feat: @ card and / shortcut completion in the composer
    - feat: empty-state starter chips over a shortcut registry
    - feat: edit_deck tool with per-edit undo
    - docs: record the prompt-shortcut design and the landed analysis split
    - feat: lint_deck tool over the shared deck analysis
    - refactor: split pure deck analysis out of the lint CLI
    - feat: gate the Tutor panel on a stored API key
    - feat: render mana symbols in oracle text and rulings
    - fix: sim badge label was painted in its own background color
    - docs: BYOK phase 1 shipped, phase 2 in progress
    - feat: name the assistant Tutor
    - fix: rail offsets match the 1.5rem body padding
    - fix: style the format-select popup via Chromium customizable select
    - fix: resolve double-faced cards by face name in get_card and click-to-pin
    - feat: dock the assistant rail on the right
    - feat: per-deck clear-conversation button
    - fix: pool caching, warmup, and touch preview race; extract card-ref parser
    - feat: hoverable card refs in assistant replies, click pins in-deck cards
    - fix: search chips show all filter params; zero-hit name lookups probe the full pool
    - feat: teach search_cards creature subtypes; double the turn tool budget
    - feat: raise the tool-call cap to 20 and add a Continue button on limit stop
    - fix: hide the card detail pane scrollbar
    - fix: structured tool-result truncation instead of JSON string slicing
    - fix: round-trip Gemini 3 thought signatures on function-call parts
    - fix: current Gemini model defaults (2.5-flash 404s for new users)
    - fix: flatten the assistant composer into one dark strip
    - fix: pin the assistant rail to the viewport instead of sticky-in-grid
    - feat: BYOK assistant phase 1 — chat + search panel on the deck page
    - docs: BYOK assistant design sketch
    - fix: push the version tag past the LFS pre-push hook
    - chore: drop the release pipeline, keep version tagging, fix the pages build
    - fix: install glab from a pinned asset and drop the release checkout dance
    - chore: regenerate manifest
    - fix: contain MCTS rollout dead-ends instead of drawing the live game (#311)
    - chore: regenerate manifest
    - fix: follow the card DBs to data/ in .gitattributes (LFS)
    - chore: sweep code and docs to the data/ layout (#304)
    - chore: move reference data under data/, unify source metadata (#304)
    - chore: regenerate manifest
    - chore: regenerate manifest
    - feat: rules freshness gate for the dev skill
    - chore: regenerate manifest
    - fix: infer repo deck formats from contents, not folder (#300)
    - feat: Cultivator Colossus with repeat-loop object picks (#290)
    - chore: regenerate manifest
    - fix: alternate-cost cast labels read as gerund payment phrases (#288)
    - feat: command-zone lite - slot, tax, cast source, death-return choice, 40 life (#302)
    - fix: gate the drain-mismatch diagnostic off the freestanding target
    - fix: audit game-state-derived std.debug.assert in engine paths (#301)
    - fix: x-divided-evenly casts enumerate canonical, budgeted variants (#289)
    - fix: drifted-empty pending trigger choice fizzles per CR 603.3d (#298 #296)
    - fix: stack creature-form invariant applies to spell items only (#298)
    - fix: negative token counts create nothing instead of asserting (#299)
    - feat: look-top choices stage at resolution; staleness campaign staging complete (#297)
    - feat: surveil stages at resolution on every surface; window tails via surveil_then (#297)
    - feat: look-top splits stage at resolution, not cast enumeration (#297)
    - chore: retire the flip-gate concept; issue bodies get a house style
    - feat: trigger pump parks behind open choice windows (#291)
    - fix: wildcard pool takes are solver-gated; a partial any-one take keeps its batch
    - fix: payability models fodder contention — each activation claims distinct fodder
    - feat: committed-pick staleness contracts — one accessor family, counted and surfaced
    - fix: bench WASM smoke follows the sim/wasm -> sim/kernel relocation
    - fix: staged divided casts carry their originating action; ward-unpayable picks are not offered
    - fix: mana payment must not eat the outer payment's reserved permanents as fodder
    - fix: the last two staleness holdouts — look-top split and exile-top pick degrade
    - fix: payability-invariant mana payment — atomic entry gate + step-gated source picks
    - fix: Role tokens skip stale hosts; colored pips prefer dedicated sources
    - fix: three more staleness crashes — exile-until links and entry-ability targets
    - fix: two more resolution-staleness crashes from the MCTS sweep
    - fix: six MCTS-surfaced crashes across combat, casts, and resolution choices
    - feat: default bun run gauntlet to the MCTS pilot
    - fix: pay mana before battlefield-consuming cost arms; raise attacker cap
    - fix: surface every committed pick in kernel choice ids, payloads, and labels
    - chore: regenerate manifest
    - docs: past-tense the flip status in CHARTER / sim README / CHANGELOG
    - feat: delete the TS sim engine; sim CLI on the Zig binary (flip gate)