2014 Monk (3/7): Way of the Open Hand — Wholeness of Body, Tranquility, 2014 Quivering Palm - #1733
Conversation
…y, 2014 Quivering Palm (#1501) Forks Way of the Open Hand (SRD 5.1 p.78, the only monastic tradition in the SRD) into its own EDITION_2014-only subclass — a SEPARATE subclass from Warrior of the Open Hand (SRD 5.2), not a fork sharing one slug, matching the plan's "the 2014 and 2024 names differ" call. New slug "monk-way-of-the-open-hand" (SUBCLASS_SLUGS/SUBCLASS_IDENTITY), a new Subclass row (EDITION_2014), and monk.ts's "warrior of the open hand" row retagged EDITION_2024 in the same commit (bound per #1559's resolveSubclassId/assertEverySubclassEditionPopulated requirement). Content, verified against dnd5eapi.co's 2014 and 2024 API text directly: - Open Hand Technique: Addle's duration text actually forks — 2014 "can't take reactions until the end of YOUR next turn" (the monk's own turn, no save) vs 2024 "can't make Opportunity Attacks until the start of ITS next turn" (the target's). The pre-existing 2024 row said "take reactions... start of its next turn", a hybrid of neither edition — corrected to the verified SRD 5.2 wording, reconciling the open-hand-technique.ts/monk.ts disagreement the issue flagged. - Wholeness of Body: 2014 is an ACTION healing a flat 3 x monk level (no die), once per long rest — a materially different shape from 2024's bonus action + Martial Arts die + Wis mod. Row-owned pool (resourceKey/ resourceRecharge/resourceTotals, #1134's fixed-total discriminator) rather than a resourceFn. Gets its own DERIVED_ACTIONS key (wholenessOfBodyAction) and frontend resolver, since the cost and heal formula both differ from the 2024 key. - Tranquility (L11): new to 2014, no 2024 counterpart (2024 has Fleet Step instead) — reminder-only action row. - Quivering Palm: 2014's outcome mapping is INVERTED from 2024's, not reworded — a failed save drops the target to 0 HP outright, a successful one takes the full 10d10 necrotic (never halved). Cost forks 3 ki vs 4 focus via monkPoolKey. Transcribed as SRD 5.1 states it. open-hand-technique.ts/quivering-palm.ts/character-serialize.ts's rider gates now recognize EITHER Open Hand slug (a monk can only ever hold one), threading `rulesEdition` through their selects. Tests: RED/GREEN per changed function (resolveQuiveringPalmDamage, openHandRiderSummary, DERIVED_ACTIONS gating, actionResolvers), new seed content-pin + integration suites (monk-2014-open-hand.test.ts), a dedicated cross-edition setSubclass rejection test against the real seeded catalog (open-hand-cross-edition-1501.test.ts), and updates to every fixture/count the Open Hand fork touches (class-subclasses.fixture.ts, test-feature-rows.fixture.ts, feature-edition.test.ts's tagged-feature ledger, monk-2024-content.test.ts's per-partition counts, class-feature-migration.test.ts's populated-row predicate). `prisma db seed` verified green and idempotent twice. Claude-Session: https://claude.ai/code/session_018rre9Ho8Vx8zNtzzKkpvFn Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
|
Claude finished @Sandersland's task in 4m 32s —— View job Code Review: 2014 Monk — Way of the Open Hand
Overall this is clean work. The fork-into-separate-subclasses decision is correct — the names, levels, and mechanics all differ enough that a same-slug-both-editions shape would have been misleading. The inverted Quivering Palm outcome (fail → 0 HP, success → full damage) is correctly transcribed and the Finding 1 —
|
Summary
EDITION_2014-only subclass (monk-way-of-the-open-hand) — a separate subclass from Warrior of the Open Hand (SRD 5.2), not a fork sharing one slug. Warrior of the Open Hand's Subclass row + 4 feature rows are retaggedEDITION_2024in the same commit (bound, per A 2024 character can pick Path of the Totem Warrior and get zero subclass features #1559).3 × monk level(no die), once/long rest; 2024 is a bonus action rolling Martial Arts die + Wis mod. Row-owned pool (resourceKey/resourceRecharge/resourceTotals, Tracker: 2024 class features & resources retabulation to SRD 5.2 — the eleven per-class issues (wave 2 of #1522) #1134's fixed-total discriminator). Gets its ownDERIVED_ACTIONSkey (wholenessOfBodyAction) and frontend resolver since cost + heal formula both differ.monkPoolKey.open-hand-technique.ts/quivering-palm.ts/character-serialize.ts's rider gates now recognize either Open Hand slug (a monk resolves to at most one).Test plan
npm run typecheck(root) — greennpm run lint(root) — greennpm run test -w backend— 365 files / 4433 tests greennpm run test -w frontend— 330 files / 3489 tests greennpx prisma db seed— green twice, idempotentscripts/check-subclass-substring.sh— green (no substring matching)fallow audit— clean (pre-commit hook passed)monk-2014-open-hand.test.ts), dedicated cross-editionsetSubclassrejection test against the real seeded catalog (open-hand-cross-edition-1501.test.ts)resolveQuiveringPalmDamage,openHandRiderSummary, DERIVED_ACTIONS gating,actionResolvers.tsSlice 3/7 of #1313. Depends on #1500 (merged). Fully parallel with #1502/#1503 — did not touch
shadow-arts.tsorwarrior-of-elements.ts/disciplines.Claude-Session: https://claude.ai/code/session_018rre9Ho8Vx8zNtzzKkpvFn
Closes #1501