Tags give the ability to mark specific points in history as being important
-
v0.7.2
Release: v0.7.23273f16c · ·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.12d7241b9 · ·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.07e7b9bfa · ·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.0b368d53e · ·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.0a9f78c32 · ·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.026baef11 · ·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.06e109dfa · ·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.0e1ac5807 · ·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)