Offer Semuta on printed native battle cancellation costs

This commit is contained in:
Quintine committed 2026-10-12 06:57:15 +11:00
1 parent 74768647f4
commit bab8f3403d
14 files changed
+818 -14

No files matched your search

+21
View File
@@ -29,6 +29,27 @@ optional skill bands, combinations and public expansion starts remain open.
Rules implementation continues; comprehensive assurance and administration
remain deferred until all rules are implemented.
**Semuta / printed native battle-cancellation costs — 11 October.** One
`karamaBattleDiscard` receipt now pauses the physical printed Karama before
native capture, Auditor, quoted battle-income, Ixian-substitution or Basic
Moritani-retention cancellation. Claim/pass restores the original response
and cancels once; acquiring its cost cannot restore the canceled effect.
Original quotes and signed physical facts remain authoritative. Auditor
validation recognizes its saved response; no module, Worthless conversion,
source ruling or public gate is opened.
Targeted gaps fail before and pass after. Types/lint and 203 affected unit
cases across 18 files pass. Forty-eight isolated runtime cases cover all five
families, both Ix modes, enemy/ally cancelers, distinct/full-hand holders,
claim/pass/four legal AI profiles and native cleanup/markets. Actual styled
GameTable at390px completes all five Cancel→Commit paths. CHOAM11/10 wallets,
canceled Ix board2Suboids/Tanks1Cyborg and Guild4/4→2/4 with only Worthless and
Karama demonstrate original consequences; no inspection or keeper choice
reopens. The first temporary harness omitted Tailwind PostCSS; it was corrected
from the app config and all five styled paths plus the enlarged inspector
were repeated. Earlier unstyled captures do not certify styled presentation.
No existing game/store, deployment or mode gate changed. See
[cost and ordering contract](SEMUTA_SOURCE_UPDATE_20260907.md#30-september-2026--bounded-clean-discard-runtime).
**Semuta / native casualty and retention continuations — 11 October.**
Mandatory loser discards now react while the original compulsory winner card
remains reserved. Native Ixian casualties/substitution still finish before
+47
View File
@@ -1,5 +1,52 @@
# Dune implementation status
## 11 October 2026 — printed native battle-cancellation cost reactions
One shared `karamaBattleDiscard` receipt extends the existing response-discard
pipeline to printed Karama canceling capture, Auditor, quoted battle income,
Ixian substitution or Basic native Moritani retention. Accepted public cost is
singleton; original response/native opportunity remains pending across neutral
Semuta. Retirement restores saved controls and cancels once. Taking that cost
cannot undo cancellation. Original quotes remain authoritative; the new kind
signs battle/retention/Tech and physical force/leader/wallet/hand facts without
changing old charity/Inflation JSON shapes. Auditor validation finds its saved
response inside the new receipt. No native effect algorithm, ruling, module,
Worthless conversion or public gate changed.
The native Moritani fail-before probe immediately discarded losing cards and
cleared retention after the cost, without offering that Karama. Capture/income
likewise skipped the cost; corrected Auditor setup reaches the same gap.
Twenty meaningful new regressions cover eligible distinct holders, claim/pass,
native finality and legal AI. Self-discard claim rows and forwarding/signature-
length assertions were removed. Existing income/retention cases now retire the
new cost before testing the later canceled-effect/card batch.
Types/lint and 203 unit cases across 18 files pass; final types pass after the
existing income timing migration. Forty-eight runtime cases cover all five
families, both Ix modes, enemy/ally cancelers, distinct/full-hand holders and
four legal profiles. Original Tooth/Shield/allied batches and markets finish,
with physical inventory, casualties and costs once. The initial fixture's
inferred ordering was wrong: force income precedes Auditor, so its1 is already
paid before audit cancellation. Canceled capture then gets ordinary Arrakeen
Collection13→15; comparison uses the native baseline, not a frozen phase6
wallet through phase7. Neither correction required a native rule change.
Styled real GameTable at390px completes all five Cancel with Karama→Commit
paths. CHOAM wallets11/10 distinguish pre-Auditor paid from canceled income.
Ix inspection shows board2Suboids, Tanks1Cyborg, reserves17 after canceled1/1;
Tooth acknowledgements and original Shield choice finish. Guild4/4 claims
the foreign cost, both played cards discard, and final hand is Worthless/
Karama2/4 without another retention choice. No tested surface overflows;
enlarged Semuta guidance is readable. The first temporary Vite harness omitted
the app's Tailwind PostCSS plugin; it was corrected and all five styled paths
repeated, without production dialog changes. Earlier unstyled captures are not
styled-presentation certification.
Two disjoint fixture/test slices were integrated by one owner. Temporary
probes/services/tabs removed; existing games, storage, user PDF and deployment
untouched. Reference/tooltips and Semuta/retention contracts updated. Complete
Semuta/mode and deployed acceptance remain unfinished.
## 11 October 2026 — native casualty and allied-retention Semuta continuations
Two disjoint native slices supply genuine setup fixtures and consumer-visible
+9
View File
@@ -121,6 +121,15 @@ played cards are reserved in this envelope, so no losing `battleResolved`
batch precedes retention; that distinct pending-retention path stays gated.
Advanced native Moritani and Nexus/Skills compositions are not opened.
An enemy or the defeated ally spending a printed Karama to cancel the proposed
keep now produces an earlier singleton cost offer through `karamaBattleDiscard`.
The original response/keep proposal remains pending across that reaction.
Claim/pass then completes cancellation once and discards all original played
IDs in the later allied batch. A distinct holder may acquire the activating
cost, including the approved full-hand exchange, but it never joins that
played pool or restores retention. Own discarded costs are not eligible.
The original Moritani power owner still cannot cancel its own power.
Thirty-four isolated runtime cases cover keep either/none, claim/pass/four legal
AI profiles, both preceding winner batches and original enemy/ally Karama
allowance or cancellation. Actual GameTable at390px declines native retention,
+8
View File
@@ -269,6 +269,14 @@ For each batch retain actual former owner per entry, exact physical ID, a face s
| Generic Hajr/Ghola/Harvester/Weather/Atomics (~13103) | One public played card from actor, one batch each. | Effects have already happened before the shared discard. `afterOrdinaryCard {owner,cardId,cardName,effect}` → log and normal finalization; do not reapply movement allowance, Ghola revival/tech/income, spice multiplier, weather setting or Wall casualties. A Ghola-created revival-income response must survive the pause. |
| `resolveTruthAction` callback in `game/truthtrance.ts` (~460) | One public Truthtrance belonging to queued asker, **not the answering actor**. Multiple queued questions are successive events, not one batch. Unknown/save does not discard. | Definite answer, promise binding, public history and answer log already committed. `afterTruthtranceDiscard {queueHeadPlayer,queueHeadCard,questionBinding,remainingWindow}` activates the next queued question exactly once; do not answer/bind/history again. Detach the consumed head into this frame before exposing the pause: the saved-shipment-question validator requires a live queued Truthtrance still be held. Preserve the remaining queue privately in the continuation until Semuta ends. A generic top-level `truthtrance` early return must not prevent this nested claim. |
Printed Karama cancellation of native capture, Auditor, quoted battle income,
Ixian substitution or Basic Moritani retention now uses `karamaBattleDiscard`.
The original accepted response is detached, not canceled early. Only the
public activating cost is fresh; claim/pass restores that response and calls
the original cancellation once before its later native cleanup. A claimed
cost cannot undo cancellation or enter the original losing-ally played pool.
Worthless conversion and other cancellation families retain their boundaries.
## Special Karama stage inventory
`executeSpecialKaramaIntent` (~9579) already has a typed, validated declaration for each power. It is useful input to an **after-activation** executor, but cannot simply be called again after discarding: preparation assumes the activating physical card is still held. Every activating Karama face is public and belongs to its player. These are separate from any later discard caused by the power.
+38
View File
@@ -665,3 +665,41 @@ frames and original enemy/ally Karama allowance/cancellation. Real390px table
declines native retention, commits and privately selects Maula Pistol from the
two fresh cards, then reaches phase7 without re-offering retention or overflow.
These are local bounded continuation proofs, not complete Semuta/mode acceptance.
**11 October 2026 — printed native battle-cancellation costs.** The shared
response-discard pipeline now admits one `karamaBattleDiscard` receipt for
printed Karama canceling native Harkonnen capture, CHOAM Auditor or quoted
battle income, Ixian casualty substitution, or Basic native Moritani retention.
Only the activating physical Karama is fresh. Its accepted cancellation,
original response and pending native facts remain suspended until claim/pass;
retirement restores the saved controls and calls the original cancellation
once. Acquiring that cost cannot restore capture, inspection/payment, income,
the declared exchange or the proposed kept card.
The original native quotes still validate the pending opportunity. Signature
binding preserves its response, battle facts, physical counters, leaders,
wallets and hand custody; old charity/Inflation signature shapes are unchanged.
Auditor validation now recognizes the saved response inside this receipt,
rather than requiring the detached live window. No Skills, Nexus, Homeworld,
Worthless conversion, optional-module composition or public start is opened.
Forty-eight isolated runtime cases cover all five native families, both Ix
modes, enemy/ally retention cancelers, distinct and full-hand defeated holders,
claim/pass and four legal AI profiles. The cost is spent once, later native
Tooth/Shield or allied-card batches finish, inventories remain physical and
original costs/casualties stay committed. Canceled income remains unpaid;
Auditor cancellation samples nothing. Its original income precedes the audit
and already paid1 remains. Native capture cancellation reaches ordinary
Arrakeen Collection13→15, not a second capture/bounty.
Actual styled GameTable at390px completes all five Cancel with Karama →
Commit paths and original markets/cleanup. CHOAM wallets11/10 distinguish
already allowed pre-Auditor income from canceled income. Actual Ix inspection
shows board2Suboids, Tanks1Cyborg, reserves17 after the canceled exchange.
A Guild4/4 holder claims the cost and ends with only its original Worthless
and Karama2/4 after both played cards discard; retention is not re-offered.
The updated Semuta inspector is readable. The first isolated harness lacked
the app's Tailwind PostCSS plugin; that was corrected from `vite.config.ts`,
and all five styled paths were repeated. Earlier unstyled screenshots do not
certify styled presentation. No production dialog patch was needed.
These are local changed-path proofs, not complete mode or deployed acceptance.