refactor(parser): route Frozen-in-Ice replacement through IR lowering (05b tranche 2) - #6328
Merged
Merged
Conversation
…ering (05b T2 row 51) Adds ReplacementIr::from_definition (execute_ir: None, mirroring StaticIr's body_ir: None) and DocEmitter::replacement_ir_at (emit-only; replacement_at never maintained a last_* peek). Routes the single try_split_and_cant_become_untapped replacement producer (Frozen-in-Ice class) through OracleNodeIr::Replacement. Behavioral no-op: full-pool card-data.json regen is byte-identical to baseline (sha256 b6c79b7a…); no IR snapshot test covers this path (0 churn); engine lib 17479 passed. The IR Replacement node is already a live lowered path (tranche 1's compound-static path emits it). Out-of-scope replacement_at sites (drain, ETB) untouched.
matthewevans
enabled auto-merge
July 22, 2026 07:55
Contributor
|
No actionable comments were generated in the recent review. 🎉 ℹ️ Recent review info⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: 📒 Files selected for processing (2)
📝 WalkthroughWalkthroughThe Oracle parser adds a ChangesOracle replacement IR emission
Estimated code review effort: 2 (Simple) | ~10 minutes Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
Parse changes introduced by this PR✓ No card-parse changes detected. |
jsdevninja
pushed a commit
to jsdevninja/phase
that referenced
this pull request
Jul 24, 2026
…ering (05b T2 row 51) (phase-rs#6328) Adds ReplacementIr::from_definition (execute_ir: None, mirroring StaticIr's body_ir: None) and DocEmitter::replacement_ir_at (emit-only; replacement_at never maintained a last_* peek). Routes the single try_split_and_cant_become_untapped replacement producer (Frozen-in-Ice class) through OracleNodeIr::Replacement. Behavioral no-op: full-pool card-data.json regen is byte-identical to baseline (sha256 b6c79b7a…); no IR snapshot test covers this path (0 churn); engine lib 17479 passed. The IR Replacement node is already a live lowered path (tranche 1's compound-static path emits it). Out-of-scope replacement_at sites (drain, ETB) untouched. Co-authored-by: matthewevans <matthewevans@users.noreply.github.com>
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.
Plan 05b — Tranche 2: Frozen-in-Ice replacement → IR lowering
Routes the single
try_split_and_cant_become_untappedreplacement producer (Frozen-in-Iceclass) from the legacy
DocEmitter::replacement_atthrough the IR path, via a newReplacementIr::from_definition(source_text, definition)seam andDocEmitter::replacement_ir_at.Behavioral no-op: pure routing, no new parsing logic.
replacement_ir_atemits only —unlike
static_at,replacement_atnever maintained alast_*peek.execute_ir: Nonemirrors
StaticIr'sbody_ir: None(the untap-prevention replacement has no execute body).The IR
Replacementnode is already a live lowered path (tranche 1's compound-static pathemits it), so this routes one more producer into a proven node type.
Correctness evidence
card-data.jsonregen is sha256-identical to baseline (b6c79b7a…).-D warningsclean; engine lib 17,479 passed / 0 failed; integration 3,702 / 0.Scope guard: the two out-of-scope
replacement_atsites (drain_result_vectors, ETB) areuntouched — they belong to later tranches. Second of the 05b tranches feeding the Plan-05
gate-1 zero-hit ratchet.
Summary by CodeRabbit