Skip to content

chore: update coverage stats and badges - #12

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

chore: update coverage stats and badges#12
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 15:34
@matthewevans
matthewevans merged commit 6334ea5 into main Apr 8, 2026
2 checks passed
@matthewevans
matthewevans deleted the chore/update-coverage-badges branch April 8, 2026 15:39
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
Lowtrixx pushed a commit to Lowtrixx/phase that referenced this pull request Jul 12, 2026
…aralysis) (phase-rs#5663)

Implements the missing static/replacement effect for Fear of Sleep
Paralysis: "Stun counters can't be removed from permanents your
opponents control."

Changes:
- types/statics.rs: Add StaticMode::CountersCantBeRemoved { counter_type }
  variant with all required trait impls (Hash, Display, FromStr, to_kind,
  as_keyword).
- game/coverage.rs: Register in is_data_carrying_static().
- game/turns.rs: Add counter_removal_blocked() helper gating the untap-step
  stun-counter removal (both main path and Seedborn-Muse secondary path).
- parser/oracle_static/dispatch.rs: Add parse_counters_cant_be_removed_static()
  to parse the Oracle text pattern.
- game/turns.rs (tests): Two integration tests verifying the prohibition
  blocks removal and the baseline still works.

Comprehensive Rules: CR 122.1d, CR 101.2
Card: Fear of Sleep Paralysis (DSC phase-rs#12)

Co-authored-by: Whovencroft <6.60056e+06+Whovencroft@users.noreply.github.com>
lgray added a commit to lgray/phase that referenced this pull request Jul 14, 2026
…eview round 5)

Round-5 adversarial review RAN TESTS (the first four only read code) and found the
plan's spine false, its only less-conservative phase unsound, its taxonomy
incomplete, its egg section worthless, and its verification harness vacuous.
Conclusion: REWRITE, not consolidate. Patching 864 lines that six in-place
revisions already made self-contradictory reproduces the exact failure mode that
generated the first eleven errors.

THE SPINE WAS FALSE. 'Every ability that fires during the loop already lands in
delta' -- the drive measures what RESOLVES in the window; it is structurally blind
to what the window SCHEDULES. Every P5 deletion derived from that sentence.

THIRD BLIND SPOT: DEFERRED EXECUTION (CR 603.7). Enumerated over all 224 Effect
variants: CreateDelayedTrigger, Skip/ControlNextTurn, AddPendingETBCounters, the
whole replacement family (CR 614.1), ReduceNextSpellCost. KIKI-JIKI DEFEATS C1, C2,
C3 AND C4 SIMULTANEOUSLY -- nothing depletes, no threshold trips (it fires on a
CLOCK, not a count), delta is perfectly constant. All four checks pass on a loop
whose growth axis is destroyed at the next end step. => new check C5.

DELETING R6 IS UNSOUND *AND* WORTHLESS, AND THE TWO ERRORS FORM A TRAP. Measured:
AtNextPhase fires only on PhaseChanged (triggers.rs:6212) and GameState::PartialEq
pins turn_number + phase => no certifiable cycle can contain it. AND
eq_except_growable ends in  => PartialEq already compares delayed_triggers
(game_state.rs:10875) => Kiki is ALREADY rejected; deleting R6 buys ZERO rows. The
trap: implementer deletes R6, sees Kiki still rejected, follows the trail, relaxes
the delayed_triggers comparison to collect the promised rows -- and certifies a loop
whose entire growth axis dies at the next end step.

EGG: REJECTED, by measurement. Its own acceptance criterion is met by a ~10-LINE
FIX. Flipping ability_scan.rs:2456 sibling true->false un-rejects Intruder Alarm
(CR 732.2a's OWN worked example) while Gaea's Cradle STILL fails closed. Axes IS a
join -- and that is what kills egg: with zero rewrite rules, no e-class unions ever
occur, so Analysis::merge is never called; egg-minus-rewrites is a memoized
catamorphism, and ability_scan.rs already IS the catamorphism. The bug is a WRONG
ARM, not drift, and no formalism fixes a wrong arm. Keep the soundness-asymmetry
table and the Murphi scalarset prescription; delete the rest.

ERROR phase-rs#11 WAS MINE. I 'planted a calibration contradiction' at S4.10 -- but S4.10
DOES NOT EXIST. S4 runs 4.1-4.6; SS4.7-4.10 were deleted at 7469f79, two commits
before I froze the doc. I asserted from memory of a superseded revision of my own
document. Collateral: Quotient's definition died with S4.10, so it is used 3x and
defined nowhere, and P6 is unexecutable. ERROR phase-rs#12: CR 701.15 is GOAD; regeneration
is CR 701.19.

Also blocking: the default-OFF toggle (LoopDetectionMode::Off is #[default];
build_board never opts in) makes P0's live dual VACUOUS on all 10 offline rows;
'new surface drops to C2 alone' silently deletes P1, a PREREQUISITE; C3 names the
wrong gate (gate 4 is statics-only, but the threshold example is a TRIGGER = gate 1);
RC-4 cites object_content_eq, which has no ObjectId in it -- the id-keyed seam is
objects_content_eq (:10428), whose a.len()==b.len() already preserves multiplicity,
so P6 SHRINKS; ~20 drifted line numbers.

SURVIVES: all four root causes (RC-1 now confirmed BY MEASUREMENT), RC-2's asymmetry
table, the entire rules layer (20/20 CR + 15/15 Oracle verified across five audits),
and LoopProbe IS drivable through apply() => offline-vs-live is who JUDGES, not which
reducer => P0 is smaller than claimed.

Assisted-by: ClaudeCode:claude-opus-4.8
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