fix(parser): set-base-P/T toughness-only axis ("change ~'s base toughness to <value>")#4692
Merged
Merged
Conversation
…ness to <value>")
The base-P/T set-clause parser handled the power-only and both-axes forms
("~'s base power [and toughness] …") but not the toughness-only axis, so
"change ~'s base toughness to <value>" fell to Effect::Unimplemented.
Two symmetric adjustments in `try_parse_subject_base_pt_set_clause_ast`:
- `parse_base_pt_axes` now accepts a leading "base toughness" (set_power:false,
set_toughness:true), mirroring the existing power-only axis. It is tried first
and cannot shadow the both-axes form, which always opens with "base power".
- the possessive subject capture anchors on "'s base " instead of "'s base power"
so the toughness-only characteristic word reaches `parse_base_pt_axes` for
classification.
The per-axis emission (`SetToughnessDynamic` only, base power untouched) and every
value form (fixed / single-axis dynamic / paired referent) are reused verbatim —
no new variant. Unlocks Wall of Tombstones ("change this creature's base
toughness to 1 plus the number of creature cards in your graveyard") and completes
the axis symmetry for the class. (Sentinel additionally needs the "blocking or
blocked by ~" combat-relation target filter in its value referent — a separate
gap, left for its own change.)
Tests: toughness-only change-form test (asserts SetToughnessDynamic and that base
power is not touched). fmt + clippy + parser combinator gate clean; 2307
oracle_effect + 118 subject-module tests green (power/both-axes regression intact).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Contributor
|
Warning You have reached your daily quota limit. Please wait up to 24 hours and I will start processing your requests again! |
Parse changes introduced by this PR · 1 card(s), 2 signature(s) (baseline: main
|
matthewevans
approved these changes
Jul 1, 2026
matthewevans
left a comment
Member
There was a problem hiding this comment.
Maintainer review: passes the authorized review bar at head 7d8f10fc760363c86b9535d480f22caa559ac129.
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.
The base-P/T set-clause parser handled the power-only and both-axes forms ("~'s base power [and toughness] …") but not the toughness-only axis, so "change ~'s base toughness to " fell to
Effect::Unimplemented.Two symmetric adjustments in
try_parse_subject_base_pt_set_clause_ast:parse_base_pt_axesnow accepts a leading "base toughness" (set_power:false, set_toughness:true), mirroring the existing power-only axis. Tried first; it cannot shadow the both-axes form, which always opens with "base power"."'s base "instead of"'s base power"so the toughness-only characteristic word reachesparse_base_pt_axesfor classification.The per-axis emission (
SetToughnessDynamiconly, base power untouched) and every value form (fixed / single-axis dynamic / paired referent) are reused verbatim — no new variant. Unlocks Wall of Tombstones ("change this creature's base toughness to 1 plus the number of creature cards in your graveyard") and completes the axis symmetry for the class.Sentinel additionally needs the "blocking or blocked by ~" combat-relation target filter in its value referent — a separate gap, left for its own change.
Tests: toughness-only change-form test (asserts
SetToughnessDynamicand that base power is not touched).cargo fmt+clippy+ the parser combinator gate are clean; 2307oracle_effect+ 118subject-module tests green (power/both-axes regression intact).🤖 Generated with Claude Code