Prototype native Ecaz Nexus Duke Cunning

This commit is contained in:
Quintine committed 2026-09-28 14:20:18 +10:00
1 parent 1bda2ec31e
commit 1b36402dd6
19 files changed
+829 -23

No files matched your search

+11 -1
View File
@@ -52,7 +52,17 @@ through human controls, legal bot action, JSON and in-memory SQL continuation,
and focused gameplay, race and restart tests. A local browser fixture rendered
the holder-only offer and rival Karama notice without writing a room. The
Secret Ally inquiry has a bounded private prototype; its native-leader
scope/answer audience, Duke Cunning and combined modes remain release gates.
scope/answer audience and combined modes remain release gates.
The bounded [native Ecaz Nexus Cunning](NEXUS_ECAZ_RULES.md#bounded-native-cunning-duke-vidal)
prototype spends the one card to take the existing living Duke from Moritani
at a quiet Battle boundary in paired Ecaz/Moritani Nexus games. Owner controls,
legal AI, ordinary battle selection, temporary end-turn custody and signed
saved continuation are connected in Basic/Advanced outside Advanced Harkonnen
tables, where the battle path cannot select Duke. Captured, dead and Ghola
destinations and all combined modules remain gated. The Battle-only timing
is a documented product boundary rather than printed phase text. This code
is not yet in the live image.
The main page
labels its build's Git commit in the lobby and active-table masthead; local
Git HEAD does not represent uncommitted work. The main-branch container
+47 -3
View File
@@ -78,9 +78,53 @@ pending snapshot binds the card's discard position, ally and exact typed board
group through the Karama window, even if another Nexus card is discarded
during that response. The ally's reserve counters are validated before any
board return. Saved receipts reject replay but are not cryptographic proof of
historical save authenticity. Ecaz Cunning's Duke override remains
unimplemented; Secret Ally's exceptional leader scope and audience remain
unsettled beyond the bounded runtime below.
historical save authenticity. The bounded Duke Cunning path below is separate;
Secret Ally's exceptional leader scope and audience remain unsettled beyond
the bounded runtime below.
## Bounded native Cunning: Duke Vidal
When Ecaz and Moritani are both seated in a three-to-six-player Basic or
Advanced game using only their expansion and Nexus cards (other seats may be
classic factions), an unallied Ecaz holder may spend the physical Ecaz Nexus
card at a quiet Battle phase boundary to take the **existing** living,
uncaptured, non-Ghola Duke Vidal. This transfers the one shared disc even if
Moritani controls him; it does not add a leader or Traitor Card to a native
roster. The owner's private offer reports the current public controller and
availability. Other seats see no held-card-dependent offer or pause.
Acceptance binds the original controller, source, turn, seated factions and
event to a signed saved receipt, discards the single card, changes Duke custody
and retains independent replay markers. The ordinary battle leader path may
then select Duke, and battle use sets him aside through its existing lifecycle.
Unused **Nexus** custody ends at turn end. This distinct temporary source does
not shorten the ordinary Ecaz Ambassador tenure, which lasts until battle use
or a later Moritani acquisition. JSON restoration and saved-room replay retain
the completed play without recomputing historical custody from a later turn.
The printed Cunning explicitly reaches Duke in capture, Tanks or Ghola custody;
this **bounded prototype does not**. Those return destinations and exceptional
priority interactions need a coherent physical-custody contract before they
are enabled. The face does not print a Battle-only timing restriction; the
quiet phase-six window is a product implementation boundary, **not** a GF9
ruling. Advanced Harkonnen tables are also excluded: the existing shared
leader battle path cannot select Duke there, so the card must not be spent
for an unusable disc. Other expansion factions, Homeworlds, Discoveries,
Leader Skills and combined optional modules remain gated. This is not full
Ecaz, Moritani or Nexus module acceptance.
[The focused Duke tests](../tests/nexus-ecaz-duke-engine.test.ts) exercise
genuine Ecaz/Moritani setup, physical draw/spend, Basic and Advanced transfer,
ordinary leader projection, actual end-turn expiry, blocked custody,
Advanced-Harkonnen rejection, stale commands and historical integrity.
[Owner/bot controls](../tests/nexus-ecaz-duke-controls.test.ts) and
[in-memory SQLite recovery](../tests/nexus-ecaz-duke-recovery.test.ts) cover
private availability, four legal AI profiles, restart and competing writes.
A local read-only browser fixture displayed the owner action and no rival
offer; no room was written. The final offline suite passed 5,623 tests across
712 files; scoped lint, isolated type diagnostics outside the concurrent
Fremen draft and production build passed. The repository-wide `npm run check`
remains blocked by that separately owned draft, not by this Duke path.
## Bounded Secret Ally traitor inquiry runtime
+1
View File
@@ -85,6 +85,7 @@ These are unresolved in the cited records. Do not infer an answer from elapsed t
| CHOAM Secret Ally battle timing | The printed after-victory inspection is optional and the Nexus identity stays secret. The connected prototype chooses a uniform use-or-continue window for every winner when Nexus is enabled and CHOAM absent; nonholders pass, while a holder may decide after the result. This privacy-preserving prompt is a product inference, not publisher text. A holder-only pause would reveal custody and a precommitment would remove the printed choice. Ordinary Karama cancellation remains unestablished by retrieved sources; no response is invented. | [After-victory inspection boundary](NEXUS_CHOAM_SECRET_ALLY.md#after-victory-inspection-audit) |
| Moritani Secret Ally battle timing | The printed after-loss retention is optional and the Nexus card remains secret. The connected prototype offers the same choice to every loser when Moritani is absent and at least one publicly revealed played card is retainable; a loser with no eligible public card has no useful choice, independent of hidden custody. Only an unallied holder may spend the physical card. This prompt is a privacy-preserving product inference, not publisher timing text. Native Moritani alliance retention and its Karama response remain separate; no generic Secret Ally counter is invented. | [Nexus retention boundary](NEXUS_CARD_RULES.md#moritani-secret-ally-retention-timing) |
| Ecaz Secret Ally traitor inquiry | The printed panel asks one selected player whether they hold any of the holder's leaders as Traitors, without identifying a leader; it specifies neither native-versus-controlled scope nor answer audience. The connected prototype chooses native printed faction leaders (including dead/captured), ordinary Traitor Cards rather than Face Dancers, and a holder-only historical yes/no. This is a privacy-preserving product interpretation, **not** a publisher ruling. Foreign Ghola/captive scope and table-wide disclosure remain release boundaries. | [Ecaz inquiry source and bounded runtime](NEXUS_ECAZ_RULES.md#bounded-secret-ally-traitor-inquiry-runtime) |
| Ecaz native Nexus Cunning timing | The printed Cunning takes Duke Vidal for this turn even from capture, Tanks or Ghola custody, but names no phase. The connected first version chooses the quiet Battle phase boundary and a living, uncaptured, non-Ghola shared disc, including a Moritani-controlled Duke. This is a bounded product timing and custody decision, **not** a publisher restriction. Advanced Harkonnen is gated because its existing battle path cannot select Duke. Exceptional return destinations, response priority and combined modules remain gated; ordinary Ecaz Ambassador custody is unaffected. | [Source and bounded runtime](NEXUS_ECAZ_RULES.md#bounded-native-cunning-duke-vidal) |
| Emperor Secret Ally purchase timing | The bounded normal bank-auction prototype chooses a uniform winner payment confirmation in classic-faction Nexus-only games with Emperor absent, including otherwise sole spice payments. This prevents a holder-only pause from exposing hidden card eligibility. It is a provisional product privacy choice, **not** a user or publisher ruling; the previously asked confirmation-versus-gate question remains open. Seller-paid/allied purchases and other sources stay gated. | [Source contract and bounded prototype](NEXUS_EMPEROR_RULES.md#secret-ally-retain-the-actual-purchase-price), [runtime](NEXUS_EMPEROR_SECRET_ALLY_RUNTIME.md#bank-auction-purchase-alternative) |
| Discovery prototype inferences | Free entry uses storm order and ordinary source-storm restrictions; these are general-rule inferences. Great Maker currently follows ordinary first-turn worm skipping and Sandtrout suppression; an exhausted token type creates no replacement token. These preserve current source interpretation and physical inventory but are not separately confirmed rulings or complete combined-module certification. | [Interpretations for refinement](DISCOVERY_PROTOTYPE.md#interpretations-retained-for-refinement) |
| Other Homeworld combinations | Population/force splitting, removal custody, replacement shortages, income accounting and placement ordering remain local to their detailed contracts. | [Homeworld rules](HOMEWORLD_RULES.md), [occupation](HOMEWORLD_OCCUPATION_RULES.md) and the effect documents above |