From bb9d292c4c4a6ad89df13dc2308fac25ff2be89d Mon Sep 17 00:00:00 2001 From: Quintine <15965533+Quintine@users.noreply.github.com> Date: Sun, 18 Oct 2026 11:21:28 +1100 Subject: [PATCH] Compose native Ecaz Betrayal and Moritani Atomics Retain original selected modules, typed native returns, advisors and hidden No-Field recall. Preserve a full unspent Guild/Sapho opening, paid ordered arrivals, capped provisional No-Field destruction and native World Sneak withdrawal. Bind desert Aftermath to its original Moritani Cunning placement. Validation: frozen 16-file115/115, types/lint/build, eight finite original-action and GameTable SSR programmes, four minimal legal policies. Document provisional overlaps and corrected genuine recipes. No stored-game change or deployment; full combinations, comprehensive assurance and deployed acceptance remain required. --- components/moritani-terror.tsx | 4 +- components/nexus-ecaz-betrayal.tsx | 5 +- docs/CURRENT_STATUS.md | 30 ++- docs/IMPLEMENTATION_STATUS.md | 20 ++ docs/MORITANI_TERROR_RULES.md | 48 ++++ docs/NEXUS_CARD_RULES.md | 61 ++++- docs/NEXUS_ECAZ_RULES.md | 52 +++- docs/NEXUS_MORITANI_RUNTIME.md | 6 +- docs/RULE_DECISIONS.md | 27 ++ game/engine.ts | 77 ++++-- game/moritani-atomics.ts | 21 +- game/nexus-ecaz-betrayal.ts | 145 ++++++++--- game/reference.ts | 29 ++- game/richese-no-field.ts | 22 +- tests/ecaz-betrayal-modules.test.ts | 167 ++++++++++++ tests/fixture-ecaz-betrayal-modules.ts | 226 +++++++++++++++++ tests/fixture-moritani-atomics-modules.ts | 238 +++++++++++++++++ tests/fixture-nexus-moritani-atomics.ts | 132 ++++++++++ tests/moritani-atomics-modules.test.ts | 180 +++++++++++++ tests/moritani-atomics.test.ts | 52 +++- tests/nexus-ecaz-betrayal-quotes.test.ts | 253 ++++++++++++++++++- tests/nexus-moritani-atomics-runtime.test.ts | 73 ++++++ tests/richese-no-field-hidden-return.test.ts | 44 ++++ 23 files changed, 1824 insertions(+), 88 deletions(-) create mode 100644 tests/ecaz-betrayal-modules.test.ts create mode 100644 tests/fixture-ecaz-betrayal-modules.ts create mode 100644 tests/fixture-moritani-atomics-modules.ts create mode 100644 tests/fixture-nexus-moritani-atomics.ts create mode 100644 tests/moritani-atomics-modules.test.ts create mode 100644 tests/nexus-moritani-atomics-runtime.test.ts create mode 100644 tests/richese-no-field-hidden-return.test.ts diff --git a/components/moritani-terror.tsx b/components/moritani-terror.tsx index e2055dfa..5384326e 100644 --- a/components/moritani-terror.tsx +++ b/components/moritani-terror.tsx @@ -601,7 +601,9 @@ export function MoritaniEntry({ does too, if you have one. Each hand over its new limit discards one random card per excess card. Under the provisional persistent-target interpretation, later alliance changes do not - move this penalty to a new ally. + move this penalty to a new ally. A caught concealed No-Field + provisionally reveals and places only its available reserve + forces before those forces go to the Tanks.

)} {entry.kind === 'sneakAttack' && sneak && ( diff --git a/components/nexus-ecaz-betrayal.tsx b/components/nexus-ecaz-betrayal.tsx index 51b173ef..2bd9a831 100644 --- a/components/nexus-ecaz-betrayal.tsx +++ b/components/nexus-ecaz-betrayal.tsx @@ -21,7 +21,7 @@ export function NexusEcazBetrayal({ game, act, busy }: Props) {

Ecaz Nexus · Betrayal

{nexusCardReference('ecaz').betrayal}

- {ally &&

Ecaz’s ally: {ally.name}. Their entire physical group in the selected territory returns to reserves after the Karama response.

} + {ally &&

Ecaz’s ally: {ally.name}. Their entire group in the selected territory returns to reserves if the Karama response allows Betrayal.

} {offer.territories.length > 1 && } - {choice &&

Selected: {boardTerritory(choice.territory).name} · {choice.total.normal} normal · {choice.total.elite} elite forces

} + {choice &&

Selected: {boardTerritory(choice.territory).name} · {choice.total.normal} visible normal · {choice.total.elite} visible elite forces{choice.concealed ? ' · one concealed No-Field' : ''}

} + {choice?.concealed &&

The No-Field returns face-down without revealing its value. Cancellation leaves the marker and all forces in place.

} {offer.blocked &&

{offer.blocked}

}