Operations now report the SQLite database size and page count, read through PRAGMA page_count/page_size in the same authority-checked batch as the lifecycle counters with non-numeric values clamped to zero; the page renders both and states that free disk space is still unknown. replaceMoritaniAssassinationTraitors draws the first distinct physical Traitor Card from the reserve instead of the reserve's first entry, because the face-up set-aside card can still sit in that list: re-drawing it produced a receipt whose replacement equalled the revealed card, which the assassination integrity check rejects mid-Mentat. With no distinct card left the step is blocked with an explicit reason instead of committing an invalid receipt. Four tests were made reproducible after measuring their real failure rates, because a suite that fails for random reasons cannot act as a checkpoint gate: the Discovery typed Spice Blow test now removes other cards for the same territory so one blow deposits the printed amount (0/20 after, ~20% before); the Discovery E2 skills deal is pinned with the new shared tests/deterministic-random.ts helper so a Lasgun-shield explosion cannot pre-empt its skill consumer (0/12 after, ~20% before); the Ecaz Occupy Ix/CHOAM policy check accepts any legal continuation and still asserts the phase it reaches (0/30 after, ~10% before); and the mixed-E3 Moritani Cunning test keeps the random storm off red_chasm's single sector (0/25 after, ~20% before). Offline suite 7,801/7,801 with typecheck and lint clean. No game, seat, saved state or deployment changes.
12 KiB
Moritani: Advanced Assassinate Leaders preview
14 September 2026. Prototyped / Partial, in an explicitly opted-in local preview. Normal game-start and publication gates remain closed. This is the battle-loss ability, separate from the random Assassination Terror token.
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:
- Native Advanced Moritani loses a normal battle against a surviving opposing leader disc, with no traitor called.
- Moritani may reveal a held Traitor Card of the opposing player's printed faction, naming a different leader from the disc just opposed.
- 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.
- 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. It does not define every other captured or foreign-ghola target interaction.
Connected scope and private information
The preview supports native Moritani with Atreides, Bene Gesserit, Emperor, Fremen and Guild opponents, Advanced rules and the Ecaz faction expansion, without optional modules. Harkonnen presence is excluded uniformly from public configuration so candidate availability cannot reveal secret captures. Other expansion factions, Nexus, Stronghold Cards, Homeworlds, Discoveries and other faction combinations retain their separate integration boundaries. The bounded all14 native skill composition now extends this same non-Harkonnen roster without opening public starts. 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, game-long normal-call forfeiture, shared/captured/Ghola and Advanced Harkonnen guards remain. 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. A uniform-private-step UX question is pending, shared with Mentat. Until resolved, activation requires an explicit development preview; no ordinary action or room API enables it. 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.
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 one of three zones: reserve deck, player hands, or this ability's public set-aside markers. Revealed cards stay held until Mentat; retired cards never return to the deck in this profile. A replacement remains with Moritani or becomes the card consumed by a later-turn assassination against another faction. Cross-zone duplication, missing replacements, duplicate draws, forged same-turn chains and altered continuation receipts fail validation.
Replacement runs automatically when Mentat begins. In this bounded profile it does not compete with other traitor draws, and Terror placement does not alter traitor custody. Ordering with Face Dancers, Nexus/Rihani draws, Extortion and other modules remains an explicit integration boundary, not an inferred universal ordering.
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.