Add T'Chaka, Venerable King - #6946
Conversation
|
Note Currently processing new changes in this PR. This may take a few minutes, please wait... ⚙️ Run configurationConfiguration used: Path: .coderabbit.yaml Review profile: CHILL Plan: Pro Plus Run ID: ⛔ Files ignored due to path filters (2)
📒 Files selected for processing (6)
📝 WalkthroughWalkthroughThe change adds ChangesTarget-context damage resolution
Commander-control restriction support
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant TriggeringSpell
participant LadyLoki
participant QuantityResolver
participant DamageEachPlayer
participant ReplacementEffect
participant CastFromZone
TriggeringSpell->>LadyLoki: trigger on matching spell
LadyLoki->>QuantityResolver: resolve event-source and target mana values
QuantityResolver-->>LadyLoki: return mana-value difference
LadyLoki->>DamageEachPlayer: apply opponent damage
DamageEachPlayer->>ReplacementEffect: pause and stash remaining damage
ReplacementEffect->>DamageEachPlayer: resume with target context
DamageEachPlayer->>CastFromZone: forward free-cast tail with parent target
Possibly related PRs
Suggested reviewers: 🚥 Pre-merge checks | ✅ 5✅ Passed checks (5 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
Generated for head Parse changes introduced by this PR · 1 card(s), 1 signature(s) (baseline: main
|
matthewevans
left a comment
There was a problem hiding this comment.
Blocking changes requested for reviewed head f3a8e1e73fd78f7af06afb8020ae62bca24be1aa.
-
This T’Chaka PR contains the unresolved Lady Loki implementation: commit
269497e4f41257e72d74169f9049c9451335191eis its ancestor, and open #6945 remainsCHANGES_REQUESTED. The current-head parse artifact also reports unclaimed Lady Loki and O-Kagachi changes: #6946 (comment). Please provide a clean split: remove the inherited #6945 work, or wait until independently fixed #6945 is merged and rebase onto that result. Then regenerate the parse-diff evidence bound to the new head. -
The new
ParsedCondition::ControlsCommander { ownership: Any }runtime path is not covered by the added production test: T’Chaka exercises only the owner-scopedOwnactivation branch. Add a production cast/activation regression for generic “you control a commander” (for example Deadly Rollick/Deflecting Swat), including the positive stolen-commander case, so the newAnyevaluator is exercised rather than only parser shape/snapshots.
|
@matthewevans thanks — replying to both points. 1. Inherited #6945 work / parse blast radius. I've pushed the same type-qualifier narrowing here ( That makes the parse-diff honest, but it does not on its own give you the clean split you asked for — this branch still carries the Lady Loki implementation. Plan: land the now-fixed #6945 first, then rebase this PR onto main so the inherited work drops out, and regenerate the parse-diff evidence bound to the new head. If you'd rather I strip the inherited commits and re-scope this PR to T'Chaka-only right now instead of waiting on #6945, say the word and I'll do that. 2. |
matthewevans
left a comment
There was a problem hiding this comment.
Blocking changes requested for current head 014011cc7733c7e511ee722212368299164f9eb7.
-
[HIGH] Clean split remains absent. Commit
269497e4f41257e72d74169f9049c9451335191eremains an ancestor of this head, while open #6945 is stillCHANGES_REQUESTED. The PR therefore carries independently unresolved Lady Loki work alongside T’Chaka. Please remove that inherited work, or wait for a fixed #6945 to merge and rebase, then publish a fresh, narrowly scoped parse diff. -
[HIGH]
ControlsCommander { ownership: Any }still lacks runtime coverage.crates/engine/src/game/restrictions.rshas the newAnyevaluator, butcrates/engine/tests/integration/tchaka_venerable_king.rscovers only owner-scopedOwn. Add a production cast/activation regression for generic “you control a commander” (for example Deadly Rollick or Deflecting Swat), including the positive stolen-commander case. -
[HIGH] Current-head parser evidence is missing. The only parse-diff artifact linked from this PR is bound to prior head
f3a8e1e73fd78f7af06afb8020ae62bca24be1aa(artifact); the current head changedcrates/engine/src/parser/oracle_nom/quantity.rs. Regenerate the artifact against the clean, updated head so the parser change can be reviewed.
…ree-cast
T'Chaka only exercises the owner-scoped `Own` activation gate; the any-owner
`Any` evaluator (game::commander::controls_any_commander) had no cast-pipeline
regression. Add one via Deadly Rollick's "If you control a commander, you may
cast this spell without paying its mana cost" free cast:
- own commander on the battlefield -> offered (positive reach-guard)
- STOLEN opponent's commander controlled by you -> still offered (the
discriminator: `Any` is any-owner, so this fails if the runtime delegated to
the owner-scoped controls_own_commander)
- no commander -> not offered (empty pool, printed {3}{B} unpayable)
The spell sits in hand with an empty mana pool, so castability turns solely on
the commander free-cast condition, and a vanilla creature is always on the
battlefield so "Exile target creature" never confounds the gate. Mirrors the
existing owner-scoped activation test's structure, with the stolen case flipped
from rejected to accepted.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
matthewevans
left a comment
There was a problem hiding this comment.
Blocking changes requested for current head 04417fa9f0d757c8fa3bc9c51b83a6c8697d4ca3.
-
[HIGH] This is still not a clean T’Chaka PR. Commit
269497e4f41257e72d74169f9049c9451335191e(Lady Loki) remains an ancestor, and open #6945 remainsCHANGES_REQUESTED. The current parse artifact is valid and bound to this head, but it confirms the scope problem: it reports both Lady Loki and T’Chaka changes (artifact). Please remove the inherited #6945 work, or rebase after a fixed #6945 has merged, then publish the clean current-head artifact. The artifact is not stale; it is evidence of the remaining contamination. -
[HIGH] The new restriction-layer
CommanderOwnership::Anypath is still unproven by a production runtime test.crates/engine/src/game/restrictions.rs:1643-1645introduces the evaluator, whilecrates/engine/tests/integration/tchaka_venerable_king.rs:125-180exercises only owner-scopedOwnand intentionally rejects a stolen commander. Add a real parsed/cast pipeline regression for Deadly Rollick or Deflecting Swat with P0 controlling a stolen P1 commander and no own commander; assert the free-cast branch is offered and can be used, while preserving a no-commander negative. -
[HIGH] Required CI is red because this PR moved a line-pinned production census without refreshing it.
crates/engine/src/game/engine.rs:15209-15211still expectsgame/effects/mod.rs:5996,6073, and9048; the current merge-tree test sees5999,6076, and9051. The PR’scrates/engine/src/game/effects/mod.rs:2523-2526formatting/visibility change shifts those downstream coordinates by three lines. Rebuild/read the CI merge tree as the census guidance requires (engine.rs:15198-15208), verify the producer bodies are unchanged, then update the documented drift/pins from that evidence and rerun CI.
04417fa to
24b7830
Compare
matthewevans
left a comment
There was a problem hiding this comment.
Current head 24b7830351dc34a9acea836a8b54f8723d2dacf1 needs one production-pipeline discriminator before approval.
[MED] The any-owner Deadly Rollick test stops at legal-action enumeration. Evidence: crates/engine/tests/integration/tchaka_venerable_king.rs:265-274 defines cast_offered solely as a legal_actions probe, and the stolen-commander (CommanderOwnership::Any) case at :293-301 only asserts that a cast action is offered. Why it matters: this does not exercise selecting the free Alternative, selecting a Bystander target, or resolving the spell; a later alternative-cost/target/resolve-path regression could leave the test green while the advertised card behavior fails. Suggested fix: add a scenario that controls the opponent-owned commander, selects Deadly Rollick's Alternative cast decision, targets a Bystander, resolves it, and asserts that Bystander is exiled.
Summary
Adds engine support for T'Chaka, Venerable King.
Files changed
CR references
Track
Developer
LLM
Model: claude-opus-4-8
Thinking: high
Tier: Frontier
Verification
cargo fmt --all— pass./scripts/check-parser-combinators.sh (Gate A)— passcargo clippy-strict— incomplete-still-compilingcargo test -p phase-engine— not-run./scripts/gen-card-data.sh— not-runcargo coverage— not-runcargo semantic-audit— not-runRe-verified at chunk-1 checkpoint with freshly regenerated card-data: all listed cards supported:true gap:0, semantic-audit clean. The run-time 'partial' was a stale-card-data artifact, not a code defect.
Scope Expansion
Stayed within the approved plan; additionally updated the anticipated deadly_rollick insta snapshots (per the plan's serialized-surface note) and deferred gitignored card-data.json / python3-dependent integration_cards.json regeneration to the pipeline (functionally proven by the new integration test).
Validation Failures
See review/cross-check notes.
CI Failures
Summary by CodeRabbit
Bug Fixes
Tests