18 KiB
Ecaz Duke revival: production readiness
Read-only review, 7 September 2026. Recommend a shared-disc revival contract before adding a selectable Duke to ordinary revival or Ghola. The printed permission and price are clear; post-revival active custody and subsequent six-disc cycles remain material interpretation boundaries already recorded in ECAZ_REVIVAL_RULES.md. This review does not silently resolve them, enable full Ecaz starts, or certify all expansion rules.
Runtime follow-up, 28 September 2026: The user selected the set-aside interpretation for a revived living Duke. Ecaz ordinary paid revival and Ghola now return the same physical disc alive and unclaimed, preserving death history; this is an explicit product decision, not an official clarification. The first five-disc ordinary cohort (including Duke) opens and stays recorded after a return. Repeated six-disc native cycles, exotic capture/Ghola custody and Advanced Harkonnen remain guarded. The gap table and in-memory probe below are historical pre-implementation observations, not present runtime status.
Verified rule boundary
Fresh official indexed retrieval confirms Ecaz can revive Duke at a normal price of five spice without a dead-leader threshold. Five Ecaz leaders in the Tanks, counting Duke, permit ordinary revival even with a survivor. Only Ecaz may revive Duke, including through Ghola. His battle strength remains six and he has no Traitor card. These are Basic Ecaz rules as well as Advanced rules. GF9 E3, printed pp.8–9
The same clarification says Ecaz obtains Duke through its Ambassador and describes its tenure after acquisition. It does not expressly assign a controller after revival. Ordinary revived leaders are playable, supporting active Ecaz control as a composition; the competing reading leaves the living shared disc aside. This retrieval found no Duke-specific answer choosing between them. Do not spend five spice or a Ghola and quietly decide whether the resulting leader can be used. GF9 E3, p.9, GF9 Quick Start, p.7
Normal revival grants one leader per faction per Revival phase; Tleilaxu early revival does not add slots. Its allied leader discount halves the normal price, rounded up. Thus applying that existing discount to Duke gives three spice, with cancellation restoring five rather than six. Payment remains the reviver’s responsibility; Tleilaxu cannot pay for its ally. These are compositions of existing powers, not a Duke-specific discount example. GF9 November 2020 FAQ, p.6, GF9 Ixians & Tleilaxu, p.7
Local corroboration: publisher-authored /tmp/dune-rules/ecaz-audit.txt:329–331,349–365, /tmp/dune-rules/base.txt:511–527,1347–1351, and /tmp/dune-rules/ix-official-mirror.txt:250–270. E3 mirror provenance is recorded in ECAZ_AMBASSADOR_EFFECTS_AUDIT.md. Search crawl/publish metadata is not a rules revision date. No forum or tournament rule was adopted.
Current concrete gaps and dependencies
Line references identify the inspected source and may move during parent integration.
| Current path | Consequence and required change |
|---|---|
game/revival.ts:92–149, leaderRevivalOptions |
Enumerates only p.leaders; Duke is absent. normalRevivalCycle requires all native discs unavailable and misses four dead natives plus dead Duke. Keep the shared disc outside the five native slots. |
game/engine.ts:14588–14645, reviveLeader |
Looks up the requested ID only in the native array and uses its strength as normal price. A canonical Duke branch must choose shared custody and five spice, without a fabricated native leader or earlyRevival request. |
game/revival-resume.ts:227–283; game/revival-cancellation.ts:119–150,245–254 |
Both bind leader custody to the native arrays. Widen their shared physical leader resolver before emitting a pending Duke request. Preserve frozen normalCost=5, chosen cost and queue through Tleilaxu stop/discount responses and JSON reload. |
game/engine.ts:9851–9939, finishRevival |
The actual commit searches native arrays, flips death state and sets leaderRevived. It needs an explicit shared-disc outcome consumed from a pure quote. Do not use acquireDuke on a dead disc or manufacture a second leader. |
game/engine.ts:7900–7915,8293–8330 |
Ghola selects controlledLeaders. Real Duke battle death consumes temporary control, so the dead shared disc no longer belongs to any displayed active pool. Ecaz therefore cannot target it. Conversely, a synthetic legacy dead Moritani-controlled disc passes this generic selector. Duke needs an Ecaz-only identity branch independent of temporary control. |
game/engine.ts:8421–8447, gholaPreparationActions |
Battle-promise and prescience preparation also starts from controlledLeaders. Update this finite candidate source alongside actual Ghola; otherwise a newly legal Duke preparation may be omitted from legal-answer feasibility. |
game/engine.ts:2129–2180, ordinaryDiscardSignature |
Already signs the complete shared Duke state, tech income and normal revival counters for the consumed-Ghola continuation. Reuse it; no new discard family is necessary. |
game/engine.ts:14507–14549, foreign Ghola |
Present lookup is native-only and incidentally excludes Duke. Add a deliberate canonical Ecaz-only check before any shared resolver is reused here. Do not turn incidental absence into an unintended Tleilaxu permission. |
game/engine.ts:15954–15976, projected leader lists |
A shared leader is appended to the temporary controller’s public roster only. A dead unheld Duke is still in g.dukeVidal, not me.leaders. Revival choices should come from an explicit owner-only eligibility list rather than changing roster projection to grant default control. |
The new Ecaz acquisition implementation is useful infrastructure, but its quoteEcazDukeAcquisition explicitly rejects dead Duke and must not be reused as a revival quote. It correctly preserves usedAt and death history for acquisition; revival needs its own decision about existing battle-use restrictions under the ordinary Ghola rule. Current applyGholaEffect preserves usedAt for ordinary leaders, so changing it globally is an independent behavior change requiring source-backed tests.
In-memory evidence
Ran /tmp/dune-ecaz-duke-revival-probe.ts; exit 0; results in /tmp/dune-ecaz-duke-revival-probe.log. The probe stages explicit isolated Revival positions with a canonical dead shared disc, not a complete played game. It does not mutate runtime files, SQL or live rooms. Every public action left its input unchanged.
- Paid Ecaz Duke request with native leaders alive rejects as “Choose a dead leader”; the normal projected option list is empty.
- Four first-death native leaders plus first-death Duke and one living native produces
cycle:0, no eligible leaders, and rejects a native revival request. - A shared set-aside dead Duke is rejected by both Ecaz and Moritani Ghola requests. Ecaz’s rejection is the missing printed feature; Moritani’s rejection is required.
- A deliberately synthetic retained Moritani controller plus dead Duke is accepted by Ghola and remains Moritani-controlled. This is a malformed/legacy-custody admission gap, not a demonstrated reachable legal-action exploit. Normal battle death clears control via
consumeDuke.
tests/ordinary-card-discard-continuations.test.ts:1029–1067 already tests a similarly explicit retained Ecaz-control saved-state precondition and labels that limitation. Its passing recovery assertion must not be described as complete Duke Ghola support. New tests/ecaz-duke-acquisition.test.ts verifies real acquisition → battle death and clears temporary custody; that is a suitable genuine prefix for revival lifecycle tests.
Minimal shared contract and integration order
- Implement the unambiguous identity/eligibility foundation. A pure shared resolver accepts native leader IDs or the canonical shared Duke and returns an explicit source discriminator. Duke requires a seated Ecaz reviver, one canonical physical disc, dead state, valid history, and no unresolved capture/ghola/concealed record or duplicate native copy. Missing Ecaz means nobody may revive him. Preserve the existing Advanced Harkonnen/exotic-custody support boundary uniformly, rather than exposing private availability differences.
- Expose the known ordinary quote without inventing a new transaction kind.
leaderRevivalOptionscan add a Duke choice withnormalCost:5, discounted cost,early:false, affordability and sourceshared.{type:'reviveLeader',leader:'duke-vidal'}can retainPendingRevival.kind:'leader'after its resolver is widened. The request uses the existing ordinary slot, turn/phase/prevention checks and actual Tleilaxu stop opportunity. Queue only the existing discount check when relevant; fewer dead native leaders must not produce an invented early-revival permission check. - Make post-revival custody an explicit resolved input before activating payment. A proposed pure outcome may take a required internal policy enum
activeEcaz | setAside, with no default and no user-submitted bypass. Once the supported interpretation is selected, return the full nextDukeState, preserving ID, strength, death history and applicable battle-use metadata. If active Ecaz is selected, persist explicit shared controller/tenure rather than inserting the disc intop.leaders. Do not automatically claim the acquisition helper’ssource:'ecaz'semantics resolve this revival question. - Compose existing accounting, do not copy a force revival. Ordinary paid Duke sets
leaderRevived=true, spends its frozen price once, leaves force/free-force/elite counters unchanged and routes the existing Tleilaxu income response.free:0produces no CHOAM free-force interception or Axlotl free-force accrual. Discount cancellation must validate the shared source before the cost and later allowance, with unchanged five-spice normal price. Preserve unfunded fizzle and actual manual stop boundaries. - Implement the separate Ghola branch with the same identity/custody outcome. Require Ecaz even when the old temporary controller is Moritani. Do not require ordinary leader-cycle eligibility or spend the ordinary leader slot: current Ghola does neither. Preserve its existing legal card windows and its independent Tleilaxu one-spice income behavior. Current Ghola calls
techIncome('axlotl', actor)for leader as well as force returns; compose and test the existing module behavior rather than silently deleting it. The existing consumed-card frame binds the complete outcome. Update both real execution and speculative preparation candidates together. - Treat the Ecaz five-disc threshold as a separate cycle change. Start with explicit first-cycle examples and persist the opened eligibility; do not recheck raw dead count after each return. A separate cohort/eligibility record can avoid appending Duke to a native roster. Its repeated-cycle transition policy must be established before activation across arbitrary games; a minimum of six death counters is not a sourced replacement for that policy.
The safe immediate production improvement without either unresolved interpretation is the canonical Ecaz-only Ghola rejection guard, including synthetic retained foreign-control saves, plus reusable shared-disc identity/price quoting kept behind the existing activation boundary. The five-dead-native-count defect can be developed with explicit first-cycle tests independently, but should not silently enable an invented general cycle algorithm.
UI and AI contract
Ordinary UI at components/game-table.tsx:3283–3335 already uses g.revival.leaders and submits IDs. Adding an authoritative Duke option should suffice for the core selector; its disabled explanation should distinguish used ordinary slot, insufficient spice, prevention and unfinished shared-custody interpretation. Keep battle strength six visible separately from price five. Update the Duke inspector’s revival coverage only after actual commit/recovery is supported.
Ghola UI at components/game-table.tsx:4320–4365 uses dead me.leaders filtered by controlsLeader; it needs a shared authoritative gholaLeaderOptions list or equivalent explicit Ecaz Duke option. Native/foreign negotiation UI in components/revival-commerce.tsx must not accidentally offer Duke as an ordinary Tleilaxu foreign ghola or mandatory negotiated request. All projections must preserve non-owner hand/traitor privacy and give one generic unavailable descriptor for concealed custody.
game/bots.ts:2289–2455 consumes authoritative normal revival options, so all four profiles can use a new legal Duke choice automatically. Its early-request and foreign-ghola enumerators still inspect projected leaders and need explicit shared-disc exclusions. There is no ordinary stand-alone Ghola-selection branch in current bots.ts; finite battle/shipment preparation witnesses can supply card actions in their own contexts. Add a bounded strategic Ghola choice using the same own-view eligible IDs if this feature is intended to be exercised in ordinary full games. Do not infer dead-Duke availability from an opponent’s hidden leader fields.
Required evidence and remaining rulings
Before release, test genuine acquisition/battle death → paid revival at five or allied three → cancellation to five, paid-once and native-slot exclusion, current Tleilaxu stop/prevention and income; Basic/Advanced, absent Ecaz, missing/duplicate shared disc and every other faction’s Ghola rejection. Exercise Ghola outside Revival and in a real Battle preparation, its consumed-card JSON/SQLite recovery, all four AI profiles, truthful option projection, and a browser selector/inspector check.
Cycle tests need four dead natives plus Duke, five dead natives with Duke living, continuation after the first return, a persistent sixth survivor, repeated Duke deaths, first death of a late survivor after another cohort has progressed, and the captured-native unavailability exception. Do not count a living unavailable Duke as actually in the Tanks. A read-only quote cannot advance a cycle.
Open decisions remain: post-revival active controller/tenure, precise repeated six-disc cycle transitions, the existing cross-territory usedAt interaction when Ghola revives Duke during Battle, and whether Ecaz’s special revival advantage itself has a separate generic Karama cancellation. The E3 table has no dedicated Ecaz Revival row; that absence is not proof of immunity. Existing discount, prevention and income response families remain independent. Ambassador Tleilaxu revival, allied loans, exceptional capture returns and Occupy are separate unfinished features.
Snapshot
Inspected engine SHA-256 d98727b2e1682fa5d0128436fa83ef339e231a45c414a4e63c3bb233b9c7ff10; revival 679a33b68d6eac4a419bded2f3e506b466a68c337413a1798f2999f234b50c3c; revival-resume cf31770745b2a32e498feef936f8f177d2e54624cbe546af912efe241356946f; revival-cancellation 374fe003aae4c27b5e5c70ed97f448f012e5a36dc5b8d0945aef790e96ed9a65; bots e48d0a59cfa187d3c1617325fad76c2fab7a79e3e8c7edeb0766021a3aac370b. Parent source work may continue after this snapshot. No permanent runtime or test edits were made for this audit.