chore: update coverage stats and badges - #15
Merged
Conversation
matthewevans
enabled auto-merge (squash)
April 8, 2026 16:19
lgray
added a commit
to lgray/phase
that referenced
this pull request
Jul 14, 2026
…rs catalogued)
Replaces the poisoned six-revision palimpsest with a clean, internally-consistent,
single-architecture plan written from PLANNER-BRIEF.md. Every file:line was printed
by a tool, not recalled.
FOUR ROOT CAUSES, all verified:
RC-1 the fire-time observer predicate is wrong (rejects on 'references any typed
object filter', which every Commander permanent does), carries a SECOND
unconditional veto on any live continuous modification, and scans HIDDEN ZONES
RC-2 the cover forbids a bounded start-up transient (CR 732.2a explicitly permits a
non-repetitive prefix followed by a loop)
RC-3 the live path arms on ONE bespoke card shape, and ZERO corpus rows test it
RC-4 loop equality is ObjectId-keyed, which CR 400.7 makes rules-wrong
ELEVEN PHASES. Honest surface stated once: P3 (driver rewrite) + P4 (CR 113.6
predicate) + C2 + C5 + C6. The MINIMUM that fixes the reported bug is
P0+P2+P3+P4+P5+P7(a) -- the rest is soundness, composition and reach.
THE SPINE WAS FALSE AND IS RE-DERIVED. 'Everything that fires lands in delta' -- the
drive measures what RESOLVES in the window; it is blind to what the window SCHEDULES.
Third blind spot: DEFERRED EXECUTION (CR 603.7). Kiki-Jiki defeats C1, C2, C3 and C4
simultaneously -- it fires on a CLOCK, not a count, so delta is perfectly constant.
C5's classifier is MEASURED, not assumed. 7 of 9 DelayedTriggerCondition variants are
EVENT-keyed and fire INSIDE the window => C5 is not a subset of R6; it has real ADMIT
value, and R6 is wrongly killing the entire ObjectReentry engine class today. And the
window's phase-stability is a property of drive_recast_iteration (its Priority arm
returns on an empty stack), NOT of the rules -- CR 732.2a says a shortcut 'may even
cross multiple turns'. So C5 fails closed if the driven window emitted a
GameEvent::PhaseChanged: it OBSERVES the fact rather than assuming it, stays sound
under any future loop-body scope, and self-maintains. An extra-COMBAT body already in
the corpus advances the phase and RETURNS to it, so PartialEq is structurally blind --
the trap is one driver-rewrite away, not hypothetical.
USER DIRECTIVES, all measured and integrated:
- collapse LoopDetectionMode to a binary (Interactive strictly subsumes On; the code
says so: 'identical to the On auto-win')
- split WinKind -> LoopOutcome{Win, Advantage}: an enum named WinKind contains a
variant documented as not-a-win, and engine.rs:637 already hand-simulates the split
with an equality check. It is the soundness boundary in the type system, and it is
the type C5 v2 needs.
- infinites-on-top-of-infinites: the omega marks are WRITE-ONLY (both functional
readers are debug-only). A monotone fixpoint, NOT an LP -- with infinite statuses
quantities collapse to booleans, so it is reachability, terminating in <=
|ResourceAxis| rounds. ~20 lines, no solver.
- the cover reads the PRESENT BOARD only; opponent interaction is the CR 732.2b
response window's job, and that window EXISTS (WaitingFor::RespondToShortcut).
APPENDIX B: sixteen errors. EVERY ONE a code claim asserted from memory. The RULES
layer has never once failed -- 40/40 CR citations and 32/32 Oracle texts verified
across six audits. Two of the sixteen were committed WHILE WRITING THIS DOCUMENT, by
two different authors who independently invented the same false claim within an hour,
and both were caught only by re-measurement. The corollary that caught phase-rs#15: a correct
reading of the CODE is not a correct claim about the BOARD -- reachability must be
measured too.
Assisted-by: ClaudeCode:claude-opus-4.8
keloide
pushed a commit
to keloide/phase
that referenced
this pull request
Jul 29, 2026
Resolves two conflicts: - `docs/parser-misparse-backlog.md` header totals. Upstream removed one card (4733/4767 -> 4732/4766) from a different root cause while this branch removed six from root cause phase-rs#15. Both deltas compose: 4726 / 4760. Verified against the document: section 15 header 83, live bullet count 83, ranked-table row 15 83. - `crates/engine/tests/fixtures/integration_cards.json` resolved by dropping this branch's regeneration entirely and taking upstream's file. The fixture change was never needed: this branch's integration tests build every card from verbatim Oracle text via `add_spell_to_hand_from_oracle`, not from the fixture, and no other test loads any of the 17 affected cards. Regenerating it here would have added 84 cards and altered 44 unrelated ones (transform/DFC entries) purely because this checkout's MTGJSON catalog is newer than the pinned one. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019TTbBQugiEc8PYTxUvE56w
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.