Skip to content

chore: update coverage stats and badges - #15

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

chore: update coverage stats and badges#15
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 16:19
@matthewevans
matthewevans merged commit 07faef0 into main Apr 8, 2026
2 checks passed
@matthewevans
matthewevans deleted the chore/update-coverage-badges branch April 8, 2026 16:23
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 keloide mentioned this pull request Jul 27, 2026
4 tasks
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
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