chore: update coverage stats and badges - #12
Merged
Conversation
matthewevans
enabled auto-merge (squash)
April 8, 2026 15:34
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Automated update of README coverage badges from latest card data.