Skip to content

chore: update coverage stats and badges - #28

Merged
matthewevans merged 1 commit into
mainfrom
chore/update-coverage-badges
Apr 8, 2026
Merged

chore: update coverage stats and badges#28
matthewevans merged 1 commit into
mainfrom
chore/update-coverage-badges

Conversation

@matthewevans

Copy link
Copy Markdown
Member

Automated update of README coverage badges from latest card data.

@matthewevans
matthewevans enabled auto-merge (squash) April 8, 2026 18:56
@matthewevans
matthewevans force-pushed the chore/update-coverage-badges branch from ebaae6a to 1917441 Compare April 8, 2026 19:03
@matthewevans
matthewevans merged commit 6c5168a into main Apr 8, 2026
2 checks passed
@matthewevans
matthewevans deleted the chore/update-coverage-badges branch April 8, 2026 19:08
lgray added a commit to lgray/phase that referenced this pull request Jul 5, 2026
…drift (a8dbe10 -> 19b55b6)

Companion to the earlier phase-rs#5072 rebase-adaptation commit in this stack. Folds
the four semantic drifts that main's 42-commit advance introduced but the
textual 3-way merge did not resolve. Each fix COULD have been folded into its
owning commit; they are collected here instead because upstream squash-merges
this PR — intermediate-commit compile health buys nothing once per-commit
bisectability dies at the squash-merge. This is a cost decision under the
token budget, NOT a cross-commit dependency constraint (all four fold cleanly
into their owners).

- manabrew-compat convert_available_action (owner: phase-rs#28 Rhys, cd2231c):
  Rhys's new GameAction::ChooseCountersToRemove needs an arm in main's
  now-exhaustive convert_available_action match (main removed the catch-all
  wildcard). Mirrors the sibling ChooseRemoveCounterCostDistribution =>
  Unsupported("local.counter-removal-unsupported").
- parser/oracle_effect/lower.rs x2 (owner: phase-rs#12 P2f grant-abilities, fddfcce):
  allow-noncombinator annotations on (a) a TextPair dual-string strip_prefix
  and (b) a multi-line Effect::Unimplemented DESTRUCTURE pattern the gate regex
  cannot distinguish from a construction (false-positive). Both were
  --no-verify'd on the original base; annotated so check-parser-combinators
  passes vs 19b55b6.
- game/mana_abilities.rs (owner: phase-rs#30 Foraging Wickermaw, 688fde6): main added
  PendingManaAbility.ability_snapshot; the pending_for test helper constructs
  the literal without it (caught by clippy --all-targets, not cargo check
  --workspace). Adds ability_snapshot: None.

HEAD-state green: cargo check --workspace, clippy --all-targets -D warnings,
cargo test -p engine (15303 + 1772 pass, 0 fail across 196 blocks),
check-parser-combinators vs 19b55b6.

Assisted-by: ClaudeCode:claude-opus-4.8
andriypolanski pushed a commit to andriypolanski/phase that referenced this pull request Jul 19, 2026
…urn costs less" (phase-rs#6196)

"The second spell you cast each turn costs {N} less to cast" (Highspire
Bell-Ringer, Uthros Psionicist, Raging Battle Mouse, Monk Class, Alisaie
Leveilleur) parsed with spell_filter: None and condition: None — the ordinal
"second ... each turn" gate was silently dropped, so the reducer cheapened EVERY
spell the controller cast instead of only the second.

Root cause: `parse_first_qualified_spell_filter` (grammar.rs) hard-coded the
literal prefix "the first " and a `SpellsCastThisTurn == 0` gate, so any ordinal
past "first" returned NotApplicable and fell through to the generic, filterless,
conditionless cost-modifier path.

Fix: parameterize the existing seam by ordinal (FirstQualifiedSpell ->
NthQualifiedSpell { filter, timing, ordinal }; "first" -> 1, "second" -> 2, ...)
so the gate becomes `SpellsCastThisTurn(you) == ordinal - 1` -- exactly
ordinal-1 qualifying spells already cast this turn => the spell now being cast is
the Nth. "first" is the unchanged ordinal=1 (== 0) case, so merged first-spell
behavior is byte-for-byte preserved. A "parameterize, don't proliferate" refactor
of one combinator seam, not a new sibling. New `parse_spell_ordinal_prefix` +
`parse_ordinal_word` combinators cover first..tenth.

Parse-only: the runtime already evaluates the SpellsCastThisTurn static condition
at cost determination (collect_battlefield_cost_modifiers ->
evaluate_cost_mod_static_condition).

CR 601.2f (total cost determination) / CR 107.3 (numeric/ordinal values).

Tests: parser unit test asserting "second" -> SpellsCastThisTurn == 1; registered
runtime cast-pipeline regression (nth_spell_ordinal_cost_reduction) proving the
first spell pays full {2}, the second is discounted to {1}, and the third pays
full {2} again (fails on revert -- the pre-fix reducer discounts the first cast).

Backlog: removed Uthros Psionicist and Raging Battle Mouse from root cause phase-rs#2 and
Highspire Bell-Ringer from root cause phase-rs#28 (all now parse fully clean); decremented
the associated counts. Monk Class and Alisaie Leveilleur retain other misparses
and stay listed.

Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant