feat: connect Semuta to reactive CHOAM denial discards

This commit is contained in:
Quintine committed 2026-10-12 02:43:16 +11:00
1 parent 11487e0cf9
commit 3171afc522
9 files changed
+208 -26

No files matched your search

+46 -9
View File
@@ -131,22 +131,23 @@ The same one-range effect then applies exactly once. Fixed-range
Ornithopter combinations, reactive movement parents and other
Worthless powers retain their original automatic paths.
A clean proactive La La La response also pauses after its named
A clean proactive or reactive La La La response also pauses after its named
public Worthless card cost but before blocking the selected
target's remaining free force revival. The saved receipt binds the
target and old Revival rules; claim or decline installs the block
once without replaying the response. Paid revival remains legal.
A reactive free-revival request, Nexus conversion and other
Worthless effects retain their earlier automatic paths.
once without replaying the response. Paid revival remains legal. A reactive
free-revival request is already stopped without revival or payment. Nexus
conversion and other Worthless contexts retain their automatic paths.
A clean proactive Baliset response pauses after its public
A clean proactive or reactive Baliset response pauses after its public
Worthless card cost but before restricting the selected player
from moving into the CHOAM-occupied territory. The saved
receipt binds that target, territory, current CHOAM occupancy
and existing restrictions. Claim or decline installs one
restriction without replaying the response. Shipment remains
legal. Reactive declared movement, Nexus conversion and
competing arrivals retain their original automatic paths.
legal. A clean ordinary declared move is already stopped without spending a
movement. Movement-card/Ambassador parents, Nexus conversion and competing
arrivals retain their original automatic paths.
A clean proactive ordinary Trip to Gamont response pauses after
its named public card cost but before moving one selected force
@@ -165,8 +166,8 @@ spice-clearance sequence. Canceled Jubba, Nexus conversion
and competing parents retain their original direct paths.
An early-ended Ornithopter advances the saved queue; a completed
flight resumes one committed arrival only without BG, Ecaz or
Moritani entry reactions. Distrans's gift remains private with its
flight may resume native Bene Gesserit Intrusion; Ecaz and Moritani entry
reactions remain separate. Distrans's gift remains private with its
recipient; Truthtrance answer/history and Sapho first/last order are
already bound. A clean Once Around Sapho discard commits its public
finite bidder order, retains prior bids/funding and frees the holder's
@@ -247,6 +248,42 @@ separate [reaction privacy audit](SEMUTA_PRIVACY_REVIEW.md) explains why
auto-closing only when nobody secretly holds the card would leak
possession. The main game and public expansion gates remain closed.
**11 October 2026 — reactive Baliset and La La La.** Accepted native
declarations now offer their used public card in the clean reactive paths too.
After the cost, the uncommitted ordinary move or force-revival request is
detached as already stopped; the existing typed receipt carries only
`stoppedMovement` or `stoppedRevival`, not a request to execute. Claim or all-seat
decline installs the original restriction and stopped-request notice once.
No forces, movement allowance, revival usage or spice payment were consumed by
the denied request. Another legal move or a paid revival remains available.
When another parent prevents the offer, the temporary pointer is restored and
the original automatic handler runs. Proactive receipts retain their existing
signature when the new optional marker is absent.
Both permanent regressions fail before and pass after, covering claim/pass,
unchanged request resources, retained restrictions, a legal alternate move or
paid two-force revival and retired-event rejection. Twenty-four isolated
runtime scenarios cover both effects, Basic/Advanced, claim/pass and four legal
AI profiles. Four additional printed-Karama cancellations retain the Worthless
and Semuta, open no Worthless discard reaction, and complete the original move
or free revival. The first cancel probe pinned absent-versus-null internal state;
its corrected assertion observes the actual public reaction instead.
Real GameTable at 390px uses Prevent movement, Commit Semuta, the unchanged
Imperial Basin source and the visible Carthag restriction, then moves one force
legally to Arrakeen and ends the turn with one movement. A second memory-only
case uses La La La, commits Semuta, displays zero free allowance and the actual
four-spice quote, then revives two paid forces to reserves19/Tanks1/spice6.
Neither surface overflows horizontally. The isolated Vite dependency reload
caused one browser-open timeout; the optimized server opened successfully
without restarting any existing service. Temporary scripts/server/browser are
removed or stopped; no saved store or deployed game was targeted.
Types/lint and 130 affected unit cases across seven files pass.
Nexus, movement-card/Ambassador and other competing parents remain separate.
This is bounded reaction coverage, not a new publisher cancellation/timing
ruling, complete CHOAM/Semuta or deployed acceptance.
**11 October 2026 — clean battle Distrans.** A completed clean private
Distrans transfer now offers its public used card during battle. Only the
battle-presence guard gained that existing receipt exception; transfer legality,