Files
Dune/docs/MORITANI_ASSASSINATE_LEADERS.md
Quintine eff668b202 Support Moritani assassination of captured and foreign-ghola targets
Retain printed native identity and valid original custody while projecting only
uniform potential bounty before commitment. Resolve living/dead targets once,
clear selected capture/concealment and retain ordinary Ghola return custody.
Selected concealed-outcome disclosure is explicitly provisional.

Verified: 14 affected offline files100/100, types/lint and production build;
six actual choice/gameplay/GameTable SSR journeys and twelve profile paths.
Native capture source47 actions; actual paid Ghola prefix140 actions followed
by explicit conserved seven-action battle. No saved-room/D1/reset/restart or
deployment operation. Runtime-only driver fixes reused unchanged passed checks.
2026-10-24 19:03:03 +11:00

30 KiB

Moritani: Advanced Assassinate Leaders preview

Updated24 October2026. Prototyped / Partial. Supported fresh native Advanced Moritani starts initialize this printed advantage automatically, including plain faction starts and the independent-card profile. Normal lobby access is a labelled preview, not complete-mode or publication acceptance. This battle-loss ability is separate from the random Assassination Terror token. Played saves are not assigned fabricated prior-call or opportunity history.

Native target custody — 24 October 2026

The authorized supplied revision, physical p35 D, selects a different held Traitor identity of the opposing printed faction. A valid native Harkonnen capture or ordinary Tleilaxu foreign-Ghola return does not rewrite that faction. The target pool now accepts those actual producer flags, including an already dead target. It still requires one canonical disc in the original native roster, matching printed name/value/faction and the original native controller. Unknown custodians, arbitrary foreign controllers, shared Duke's nonexistent Traitor and Auditor's explicit capture/foreign-Ghola prohibitions remain excluded. The older captured-winning-disc work below did not itself enable these targets.

Pending choices now contain only canonical card/name and printed potential bounty. Living, dead, captured, concealed-executed and ordinary foreign-ghola targets have the same choice shape; controls and minimal bots do not receive actual life/capture/Ghola fields to rank or label those choices. Every publicly qualifying loss still gets the same private opportunity, and rivals receive no candidate identities. Public completed history retains the actual awarded bounty.

Committing the original event-bound physical reveal kills a living target once, clears its territory use and awards printed value. An already-dead target adds no death or spice, retaining its existing execution/death count. Clear only the selected capturedBy and concealed; retain ordinary gholaBy for its existing return/buyback contract. A new death uses the existing global last-native Harkonnen captive-release hook and idempotent skill-return hook. Original cleanup, once-per-printed-faction use, normal-call forfeiture and one physical Mentat retirement/replacement remain unchanged. Declining changes none of the target's custody or bounty and does not spend that faction's use.

Selected outcome disclosure is provisional. Under standing 14 October choose-recommended authority, committing the selected Traitor reveal makes its actual death/zero-bounty outcome public, including a previously concealed execution. Supplied D does not expressly settle that disclosure; the publisher's captured-own-winning-disc answer is not a target-custody FAQ. Unselected discs retain existing secrecy, subject to the ordinary last-native captive release. No mode, module or roster admission is changed.

The primary fixture earns the held Emperor card, battle, Harkonnen capture, Keep/Execute decision and later Emperor victory against Moritani through actual public native Advanced play. A different surviving Fenring disc supplies the opportunity; Burseg3 remains the selected target. Only original undealt positions, scalar shuffle choices and the actual capture permutation are selected. A second fixture earns the ordinary Guild disc's combat death and paid Tleilaxu foreign revival, then explicitly stages a conserved later Guild/Mori battle and one physical Traitor swap. That branch does not claim a wholly unstaged chronology. The native capture source takes47 actual actions in either branch. The paid Ghola prefix takes140 actual actions; its separate later battle uses seven actual actions after the documented conserved positioning.

Current scoped proof

The frozen 14-file100/100 affected offline union, npm run check:quick and production build pass. Six actual choice callbacks/gameplay/full GameTable SSR journeys cover captive, concealed-executed and foreign-ghola reveal/decline, including original physical Mentat replacement. Twelve own-view paths across the existing four profiles accept twelve original actions and finish the same continuation. Ten new native/controlled engine cases, three added quote cases and the current five control cases cover eligibility, uniform choices, actual death/payment, source/event/owner rejection and decline. Earlier trained/native discs and other projected-choice consumers retain their actual rule assertions.

Narrow feedback first caught a test that ignored Harkonnen's ordinary two-spice stronghold income when battle completion starts Collection. Runtime stays unchanged. First frozen79/82 feedback repairs old choice-schema consumers and a death assertion that read the printed registry instead of the public native roster; four selected cases pass4/4. Subsequent82/82 tests pass, then typecheck finds two further old pending-bounty consumers, which join the final union.

Final100/100/types/lint/build are in frozen-integrated-3. Private smoke feedback first stopped at entering Mentat before queued Nexus replacement, then at an owned Face Dancer choice. The corrected driver explicitly declines optional aftermath and follows original closing controls to the actual receipt. The runtime-only frozen-integrated-5 checks source equality before reusing those three passed check steps; reused-checks.json records their origin. Tests/build were not rerun after these private driver-only repairs.

All evidence binds base 61828150b951a859eb440f4987c59ef5a0038ba9, tree 2f72c115cca1bf3afdc61c9cfbcaab568be872f6db3d885d4296ca159c7006bb (2714 nonignored files). Private logs, rendered controls and source hashes stay outside Git in 20261024-moritani-assassinate-target; final checkpoint prose/ reference overlays are reviewed separately without changing engine/tests. This is no browser/hydration/mobile/deployed or complete-game certification.

Relevant paths: quote and projection, choice controls, native capture fixture, paid-Ghola prefix and controlled battle, target outcomes, quote cases and choice cases.

Full modes, wider combinations, comprehensive rules/save/privacy/custody and browser/deployed acceptance, plus full AI, remain unfinished. This prototype does not run a capture-restoration campaign or operate on saved rooms/D1.

18 October registered Skills: mixed native E1/E2/E3 seats and unused selected decks no longer need Nexus or one exact E3 family for all14. Actual Mori binds its original Advanced producer; a CHOAM native-source fee and normal loss reach unused trained Frankos4, one skill return and one real replacement. Basic, normal-call forfeiture, shared Duke and Advanced role limits remain. Current609/609 evidence and preserved original module guards.

17 October World continuation: native World/card/phase starts now retain the same Advanced power with or without Skills. Real paid World shipments and own reserve fees/typed H returns precede a normal loss; a different unused trained native target dies once, returns its skill once and yields one actual Mentat replacement. Basic, normal-call forfeiture, shared Duke and original Advanced role boundaries remain. Current World scope and459/459 proof.

Authority and Advanced duration cutover

The GF9 Ecaz & Moritani rulebook, pp. 6, 14 and 16, supplies the ability, captured-own-leader answer and Karama table. The historical publisher review found no official duration clarification. The user-authorized revised Advanced PDF now supplies an explicit game-long condition, recorded below. The runtime retains the following sequence:

  1. Native Advanced Moritani loses a normal battle against a surviving opposing leader disc, with no traitor called.
  2. Moritani may reveal a held Traitor Card of the opposing player's printed faction, naming a different leader from the disc just opposed.
  3. A living named leader goes to the Tanks and pays its printed strength from the Bank. An already-dead named leader remains a legal reveal: no repeated death or spice, but the faction use and replacement still occur.
  4. Keep the revealed physical card through battle cleanup. During Mentat Pause, set it aside face up as that faction's permanent use marker and draw one private physical replacement. Use the advantage once per opposing faction. Karama has no effect on this ability.

Authorized Advanced cutover — 2 October 2026: the supplied UNOFFICIAL_Revised_Dune_Rulebook_v.2.3_web.pdf, physical p35 / logical p33, Assassinate Leaders D condition(d), says Moritani must “not yet [have] revealed your Traitor Card normally this game.” A normal own-card reveal therefore forfeits the advantage for the rest of this game, across later turns and all opposing factions. The existing persisted normal-call flag already enforced this scope; owner guidance and public reveal history now describe the sourced forfeiture rather than an unresolved-duration guard.

This resolves the old duration question under the authorized Advanced source, not as a newly located GF9 erratum. Basic, exceptional leader interactions and the independent private-step UX/public-preview gates remain unchanged. See source identity and precedence.

The captured-own-leader answer preserves original faction identity: a Moritani leader used by Harkonnen does not become a Harkonnen-faction assassination card. Thus a victorious Harkonnen using that captive can permit a reveal of a different held printed Harkonnen Traitor Card, not the captured Moritani's card. The played disc remains Moritani in the battle record. This clarification does not define every other captured or foreign-ghola target interaction.

Connected scope and private information

Without Skills, fresh selected native rosters containing Moritani retain this advantage with their actual distinct Ix/CHOAM/Ecaz family decks, including Harkonnen, the Ecaz pair and existing Homeworld occupation. Existing module profiles still govern Nexus, Discovery, Tech and Strongholds. Independent cards do not require an unrelated Nexus module or suppress assassination. With Skills, standalone or paired native Ecaz/Moritani/classic setups now work without Nexus, optionally independent cards and original Tech3+/Advanced Strongholds2+. Advanced Harkonnen, mixed families and other module envelopes retain their guards; see current phase composition. Winner Suk rescue and Rihani choice finish first; the unspent assassination receipt waits, then opens its original private choice. Already completed casualties cannot replay after reveal/decline. A different eligible trained disc returns its physical skill once; printed bounty and original Mentat replacement remain. This scope is not a printed restriction on other combinations.

7 October 2026 — original paired native Nexus composition: the exact Ecaz/Moritani/classic profiles, without Skills or with all14 and original optional modules, now admit Ecaz as an opposing printed faction. The classic-only trigger/receipt list was a software scope limit, not a printed prohibition. Two real original native Ecaz battle losses reject before, then reveal a different actual held Ecaz card, kill its original disc for printed bounty and replace it once at Mentat after the shared list gains Ecaz. Winning-disc exclusion and game-long normal-call forfeiture remain; shared/captured/Ghola and Advanced Harkonnen were still guarded at that checkpoint (the no-Skills Harkonnen follow-up is below). A foreign Homeworld's normal Traitor prohibition does not prohibit this distinct native ability. The no-Skills receipt retains its earlier pause before winner casualties; all14 retains its skill-first pause afterward. Canonical programme, game and human qualifications.

Every publicly qualifying loss gets the same private reveal-or-continue opportunity, regardless of the hidden eligible card. Only Moritani sees its candidate identities and blocked reason; rivals see the same decision and no private options. This requires Continue even for an ineligible hand, conflicting with the user's usual automatic-action preference. Moritani's uniform-private-step approval remains separate: the 11 October Mentat approval applies only to that card-show flow. The bounded native Nexus composition uses its original entry and original postbattle/assassination continuation, not a separate opt-in assassination shim. Supported normal-lobby previews use the same constructors; complete modes remain gated. A publicly spent faction or prior normal traitor call can be skipped without consulting hidden eligibility.

All four AI profiles use the same owner-only quote. They choose a legal card or decline and do not inspect rival hidden state. The public history shows only revealed cards and face-up set-aside markers; replacement identities remain private.

The Mentat replacement now draws the first distinct physical Traitor Card in the reserve rather than the reserve's first entry: the set-aside card can still sit in that list, and re-drawing it would duplicate a card instead of replacing it. When no distinct card remains, the replacement is blocked with an explicit reason instead of committing an invalid receipt. (7 October 2026) Dead-target inspection retains the printed leader strength despite its zero bounty.

Native Harkonnen battle identity — 15 October 2026

The bounded Advanced Moritani/Harkonnen E3 Nexus composition without Leader Skills, including the paired Ecaz/Moritani roster, admits an original normal Moritani loss to a victorious Harkonnen. The winning surviving battle disc may be one of Harkonnen's own five native discs, an actual captured foreign native disc (including Moritani), or the separately controlled/captured Duke Prad Vidal. The engine must bind that exact disc to the actual Harkonnen battle plan, effective control and survival before creating the opportunity; a helper identity check alone is not evidence of captivity or a completed battle.

The supplied Advanced p35 / logical p33 D conditions still govern: normal loss, surviving opposing disc, no Traitor revealed in the battle, no earlier use against that printed opposing faction, and no prior normal own-card reveal this game. The held card must be an ordinary Harkonnen-faction Traitor identity, different from the actual played disc. A native Harkonnen played disc therefore excludes its own card. A captured Atreides or Moritani disc does not exclude or become any Harkonnen card. Duke stays the separate Ecaz strength-6 disc with no Traitor Card; Cheap Hero cannot open this ability.

The original five native Harkonnen targets pay their printed strength if living, or zero with no second death if already in the Tanks. Use is still once per printed opposing faction, with the revealed physical card held until the original automatic Mentat face-up retirement and one distinct private replacement. The normal-call forfeiture is game-long; decline spends no use. Karama behavior, private uniform opportunity, casualty cleanup and replacement ordering remain the original ability, not new Harkonnen-specific mechanics.

game/moritani-assassinate.ts admits the distinct native/captive/Duke battle identity while retaining version1 state, receipt shape and the original signature. Its target pool remains the opposing faction's native identities, not the winner's battle-use pool. Existing missing/altered, captured, concealed, foreign-Ghola or foreign-controlled target guards remain unchanged; admitting Harkonnen's captured battle disc is not a general relaxation of those policies or a ruling on other profiles.

tests/moritani-harkonnen-assassinate.test.ts supplies pure trigger/receipt/ choice regressions for native, captured foreign/Moritani and Duke identities, native-card exclusion, wrong-faction and Cheap Hero rejection, dead bounty, once-use, normal-call forfeiture and physical replacement. The frozen affected22-file union passes 195/195, with types/lint/build. Original three-seat native play produces Harkonnen's actual capture, original Karama cancellation and a real Harkonnen win using captive Duke6. The engine binds the original surviving battle reference before its custody release; Moritani then reveals its actual held Beast Rabban4, receives four Bank spice and kills that native disc. Original Mentat retires the card face up and draws distinct Esmar Tuek privately. Actual styled390px GameTable performs the cancellation/reveal and displays the replacement, without overflow or browser errors. Four-profile response smoke is legal, not calibrated strategy. The separate random Terror pool is not derived from this captured-own FAQ. At that checkpoint, non-Harkonnen foreign/shared winning discs remained unconnected; the following native-disc cutover supersedes that boundary.

Canonical winning discs and native targets — 15 October 2026

Played physical identity and victorious player's printed faction are separate. The existing engine binds the actual surviving controlled disc to the winner's real plan before its battle-use release. The shared helper now recognizes canonical ordinary discs, shared Duke and CHOAM's actual optional Auditor, without requiring an ordinary native disc of that victor. The cached printed catalog also includes Auditor's matching physical Traitor and printed two. Auditor still cannot be captured or acquired as a foreign Ghola; its played identity is CHOAM-only. Cheap Hero does not become a physical leader disc, and Duke still has no Traitor Card.

Targets remain the victorious player's printed faction, different from the played disc. Original native examples now connect:

  • Ecaz / Duke6: original paid reusable Ambassador acquisition, real native battle and surviving Duke produce a native Ecaz choice. Actual Sanya Ecaz4 dies for four, while the same used Duke remains alive and set aside.
  • Tleilaxu / foreign Guild5: original projectiles kill Guild's Staban Tuek and a different native Tleilaxu disc; the real next Revival buys that foreign disc for three. Its later Tleilaxu victory opens Zoal3, not a Guild target or copied five-spice bounty. The surviving ghola retains Guild identity, its death history and actual Tleilaxu custody.
  • CHOAM / Auditor2: a real Auditor victory opens Frankos Aru4. Conversely, a different surviving CHOAM disc permits the actual held Auditor Traitor for two. If Auditor itself was played, its card is excluded and the original private Continue spends no card, death, bounty or faction use.

Every real reveal retains the original physical card until automatic Mentat face-up retirement and one distinct private replacement. Once-use and game-long normal-call forfeiture are unchanged. No state/signature-version cutover, target-custody relaxation or new public pause is introduced.

The genuine Ecaz producer also exposed an obsolete future Guild income arrival guard. Ordinary reserve shipment now uses the existing income-then-entry queue, rather than rejecting before Guild permission. Human controls ship one for Moritani12→11/reserves14→13, Guild6→7, then offer the actual Ambassador and Duke acquisition. This changes no tariff, funding, payment or token rule. Arrival contract and remaining gates.

Affected15-file union 134/134 and types/lint pass. Twenty-five original API/policy scenarios cover the three Auditor positions, Ecaz/shared Duke, Tleilaxu/foreign Ghola and all four legal owner policies in each. Actual styled390px GameTable performs the three Auditor controls, paid Guild→Ambassador→Duke acquisition, Sanya4 and Zoal3 reveals and physical Mentat replacement. Final Guild/Ghola surfaces have no overflow or browser errors. An earlier rejected Guild fixture also exposed a temporary QA-client error handling invalid metadata; that handling was repaired before final proof. Only original undealt entropy and conserved unplayed Spice/Nexus ordering are directed; no wallet, hand, force, leader, phase or battle is staged.

Exceptional captured/Ghola targets, Skills/Harkonnen, private-step UX, remaining arrival combinations, full assurance and deployed acceptance remain separate. Passing these local native paths does not certify complete modes.

Physical replacement roles and retired-card zone — 15 October 2026

The original Mentat draw takes a physical Traitor Card, not necessarily a faction leader-disc identity. With the original Ix deck selected, the single Cheap Hero / Heroine Traitor is a legal replacement. It remains a Traitor: no physical leader, native-faction assassination target or Duke Traitor is manufactured. Original native Ix play kills Dominic Vernius4, retires its real held card and draws that original reserve Hero once.

Retired victims remain permanently out of circulation. The shared NexusTraitorSnapshot.removed zone derives from actual stage: 'replaced' victim cards, not from historical replacement IDs. It participates in the canonical full census, retaining the existing Ecaz Loyalty exclusion, but cannot appear in reserve, ordinary hands or Face Dancers. Harkonnen exchange, Tleilaxu Cunning, Betrayal source/replacement and Rihani consumers preserve that zone. This is distinct from Face Dancers temporarily set aside before their own return shuffle, or a Betrayal-declared card returned to the deck.

A replacement's recorded ID is a historical draw, not permanent ownership. Its real card can later be exchanged, returned and drawn again. Keep the old receipt/signature unchanged; count current custody once, not once per past reference. Original native CHOAM/Auditor play draws Hasimir6, Harkonnen Secret Ally returns that card while keeping Esmar3, then a real turn-three Guild loss retires Esmar3 and original Mentat draws the same Hasimir6 again. Both public victim markers stay out; one live Hasimir card remains.

New Nexus exchange sources carry/sign the optional permanent zone when present. Absent-zone records retain their original grammar/signature; completed history validates its recorded physical state rather than adopting later live markers. No old receipt is rewritten when a second victim retires. Engine application never rewrites the derived Game marker zone from an exchange result. Existing actor/card authorization, full current census, native target guards and revealed-card reservation remain.

Affected15-file 134/134 passes, including adjacent engine/continuation consumers. Eleven original API/policy paths cover Hero/next Storm, all four Ready paths through actual owned Mentat initialization, legal old-card return, the repeated native draw and all four pending-return policies. All four return policies legally keep Hasimir; the human/scripted return chooses to give it back. This is legal participation, not strategic calibration.

Actual styled390px GameTable completes final Collection readiness, displays the private Hero inspector, draws two real Nexus cards, returns Hasimir/Caid through the native checkboxes, restores the original Mori placement, passes it and reaches the next Storm. A separate original recycled chronology reveals Esmar3 and displays one Hasimir6 after the second draw. No overflow/browser errors. Only original deal/return-shuffle entropy and conserved unplayed Spice/Nexus ordering are directed; no hand, wallet, force, leader, phase or battle is staged. No saved/deployed rooms or broad assurance are covered.

The wider consumer run exposed older fixtures skipping the real borrowed-Voice opportunity before native Prescience/plans. They now consume the original canonical preparation actions; no engine legality is weakened. Old permanent replacement-ownership/uniqueness and wording/markup pins were removed, not re-pinned. Receipt consistency is not a claim of authenticated past save history.

Save and physical custody

The resolved battle binds the opportunity's event, opposing faction and surviving leader. Its saved continuation is also bound to a separate battle obligation before the decision opens. Reveal/decline resumes that exact cleanup once. A normal traitor call has a separate event ledger; its explanatory log waits until the normal public reveal, preserving sealed submissions.

A physical Traitor Card belongs to reserve, an ordinary/Face Dancer hand, or a public permanent marker in the existing canonical census. Revealed assassination cards remain held until their actual Mentat retirement. Retired victims never return. Historical replacement references may recur after legal physical exchanges; they are not additional live cards or a permanent hand-ownership constraint. Cross-zone duplication and altered pending continuations still reject.

Replacement runs during original Mentat initialization, after the owned phase opening; merely displaying phase8 does not mean that initialization finished. The current native Nexus path can pause/resume original Mori placement without repeating retirement, drawing or payment. Complete timing/optional-module and save-authenticity assurance remain separate from these exercised local paths.

Reproduction and evidence

Use the existing private backup/CAS workflow with a fresh ready lobby:

node --import tsx tools/start-prototype.ts --profile moritani-assassinate --db /absolute/games.sqlite --room ABCDEFGH --version 1 --out /private/new-checkpoint
npm test -- moritani-assassinate prototype-room

Rules and engine tests use genuine Advanced setup followed by explicitly staged, conserved forces and physical traitor swaps. They cover living and dead targets, no-use paths, all four profiles, private indistinguishability, sealed normal calls, per-faction limits, a real later-turn replacement chain, rejected-action immutability and corrupt saves. Authenticated SQLite tests exercise pending restoration, Truthtrance interruption, competing submissions and the actual Mentat replacement. The local writer test preserves seats and unrelated rooms and rejects repeat starts.

Independent rules/privacy/persistence review and the 32-case focused union pass: eight pure quote cases, eleven engine cases, three controls cases, five authenticated SQLite cases and five prototype-writer cases (one added for this profile).

Two genuine Advanced four-player samples, with all four AI profiles rotated, finish in 296 and 101 accepted actions with no rejected candidates. Neither sample stages hands, decks, forces or phases. Ten periodic JSON rounds and all eight final seat views restore; physical Treachery, Traitor, force and elite custody hold throughout. The first game offers two assassination opportunities, both declined; the second offers none. These samples prove continuation, not natural reveal/replacement use.

A separate browser exercise starts from genuine setup with explicitly staged, conserved battle forces and one physical traitor swap. Real battle actions produce the pending choice. Revealing Master Bewt kills that live leader and pays three spice once; the card stays held until automatic Mentat replacement, then becomes a public set-aside marker. Pending and resolved refresh preserve the human seat. Choice and retired-card inspectors show readable, context-correct guidance. Exact card/force custody and private projections pass; Guild separately collects two spice from Arrakeen. The game remains saved at human Terror placement.

All 801 opening games remain unchanged after the reported power failure. The healthy server is reused. Broad checks, source fingerprint, final saved-game preservation and Git delivery are recorded with the checkpoint. Focused and staged evidence does not certify a complete faction, all combinations or public Advanced readiness.

29 September 2026 — five-roster game continuation

The reusable faction-game runner now exercises this exact gated Advanced preview from two through six seats with Moritani and only the supported classic opponents except Harkonnen. Five games at seed 20260929 completed in 2,511 accepted actions, with zero rejected candidates and 65 JSON continuations. The six-seat game opened two genuine private assassination decisions; both were declined. The existing staged battle/replacement cases and the external physical custody check cover the actual reveal, retirement and new-card draw, but the natural full-game samples do not demonstrate a reveal. The source boundaries and pending user timing/UX questions above remain unchanged.

29 September 2026 — natural revealed-card game

An additional unchanged-source six-seat Advanced game using base seed 20261307 and the existing moritani-assassinate profile completed 1,666 accepted actions, zero rejected candidates and 45 JSON view restores. A genuine turn-six battle loss first produced a private offer that Moritani declined. A second loss let its Easy bot reveal its actually held emperor-1 Traitor Card against a different Emperor leader. That named leader was already dead, so the legal reveal paid no second bounty. The physical card remained held at accepted action 987; automatic Mentat replacement at action 995 set it aside and privately drew fremen-4. A separate Node replay JSON-restored every seat view at both boundaries; the whole-game runner checked physical custody after every accepted action through final turn ten.

Source-bound private report: /tmp/dune-assassinate-natural-reveal-20261307/report.json, based on 583cd97a250bce4b2a9f570bc1e2893e9d49db41. This establishes one natural dead-target reveal and replacement, not a natural living-target kill, full module composition, an official resolution of normal-traitor duration, or public Advanced Moritani readiness.