fix(engine): Mockingbird copy ceiling uses cast-payment stamp (#6440) - #6737
Conversation
…rs#6440) Resolve AmountSpentToCastSource ceilings from the entering object's mana_spent_to_cast_amount (objects/liminal dual lookup), including Some(0) when never cast. Stop reading PendingSpellResolution.actual_mana_spent so Chord put-into-play cannot open an unconstrained MV filter. Co-authored-by: Cursor <cursoragent@cursor.com>
|
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 (1)
🚧 Files skipped from review as they are similar to previous changes (1)
📝 WalkthroughWalkthroughMockingbird copy targeting now uses the entering object’s cast-payment stamp, including zero for uncast entries, instead of unrelated spell-resolution mana. Unit and integration tests cover cast, uncast, liminal, Clone, and parsing behavior. ChangesCopy ceiling correction
Estimated code review effort: 3 (Moderate) | ~25 minutes Possibly related PRs
Suggested reviewers: Sequence Diagram(s)sequenceDiagram
participant apply_post_replacement_effect
participant EnteringObject
participant copy_target_mana_value_ceiling
participant CopyTargetChoice
apply_post_replacement_effect->>EnteringObject: read mana_spent_to_cast_amount
EnteringObject-->>apply_post_replacement_effect: return cast-payment stamp
apply_post_replacement_effect->>copy_target_mana_value_ceiling: calculate BecomeCopy max_mana_value
copy_target_mana_value_ceiling-->>apply_post_replacement_effect: return Some(stamp) or None
apply_post_replacement_effect->>CopyTargetChoice: apply copy target limit
🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
Parse changes introduced by this PR✓ No card-parse changes detected. |
matthewevans
left a comment
There was a problem hiding this comment.
Current-head maintainer review complete. The replacement seam derives the Mockingbird ceiling from the entering object’s cast provenance, while the registered Chord → uncast/cast/recast regression covers the lifecycle and leaves copy behavior unchanged. No further findings.
Co-authored-by: Clayton <claytonlin1110@gmail.com>
matthewevans
left a comment
There was a problem hiding this comment.
Current-head maintainer re-review complete. This port contains current main plus both independent integration module registrations; it does not alter the Mockingbird lifecycle behavior or its regression coverage. No further findings.
Summary
AmountSpentToCastSourcecopy ceilings now read the entering object'smana_spent_to_cast_amountvia the same objects→liminal dual lookup used for source identity (CR 400.7d).Some(0)instead of unconstrainedNone, so MV 2+ creatures are no longer legal copy targets.PendingSpellResolution.actual_mana_spentis no longer consulted for this ceiling (hostile unit fixture proves Chord's payment cannot override the stamp).Closes #6440
Test plan
cargo fmt --allissue_6440_*(4) +typed_copy_limit_zero_stamp_is_some_zero_not_unconstrainedissue_6440_mockingbird_*(chord uncast, cast path, clone sibling, parse reach-guard)Validation Failures
Plan review completed clean via isolated agents (2 rounds). Implementation and
/review-implsubagents could not be spawned (API usage limit); implementation was done in the orchestrator thread against the approved plan. Isolated implementation review did not run — please give the PR an extra human/architecture pass before merge.Summary by CodeRabbit
Bug Fixes
Tests