31 KiB
Six-base-faction Advanced readiness audit
26 October follow-up: supplied Advanced physical9/printed7 orders Force Revival from the First Player counterclockwise. A fresh-phase cutover now connects that native queue, controls and minimal policies, with explicit force/leader grouping and unchanged Basic/already-opened legacy timing. Current contract and evidence. This supersedes the original concurrent Revival behavior without certifying complete Advanced.
Read-only runtime audit, 7 September 2026. Scope is classic GF9 Advanced with any valid selection of the six original factions, two through six players, no expansion and no optional module. This document does not enable a mode or certify complete rules compliance. It reads the full active goal and preserves its wider twelve-faction scope.
Finding
The unconditional Advanced start gate in game/engine.ts:1500 remains justified by base-only missing rules and unresolved behavior. Expansion work is not the only reason for that gate. Most distinct Advanced faction mechanisms already have substantial engine, controls and focused-test support; rebuilding them would waste useful work. The next work should close the named base gaps below, independently review the existing mechanisms, and then run authentic Advanced setup and full games before enabling the mode.
Runtime was frozen for a separate calibration during this audit. No runtime, test, package, live room, server, automation or gate was changed. Line references describe the files inspected at this checkpoint and can move after integration.
Follow-up integration
The coordinator subsequently implemented the two bounded findings concerning Fremen movement cancellation and the public Bene Gesserit setup AI prerequisite. The original finding table below is retained as the audit snapshot. See FREMEN_MOVEMENT_KARAMA_RULES.md, the Fremen checkpoint in IMPLEMENTATION_STATUS.md, and the new movement/setup/recovery tests for current evidence. Ordinary Guild cancellations, broader Truthtrance obligations, the named special-Karama interpretations and genuine Advanced start-to-finish verification remain open. This update does not remove the mode gate.
11 October 2026 — priority-2 row closed. The BG setup AI prerequisite is
connected: game/bots.ts enumerates advisorSetup only while
me.faction === 'beneGesserit' && !me.advisorSetup && me.reserves === 20 and
every seated Fremen already has exactly ten reserves, matching the engine's
advisorSetup gate. A direct four-profile probe of an Advanced forces stage
returned zero advisorSetup candidates while Fremen placement was pending and
86 candidates once it completed. The priority-2 row below and the closing
sequence item are therefore historical; keep them as the audit snapshot only.
Source-ordered setup follow-up
The later implementation now provides the shared, strict offline initializer described in ADVANCED_SETUP_TEST_SEAM.md. New Basic and offline Advanced tables enforce prediction before private traitors, all traitor selections before force placement, Fremen before the Advanced advisor, and Treachery after every placement. Legacy saved setup continues without redealing. All 456 setup combinations pass. The old tests/bots.test.ts Basic-then-flip helper discussed below has been replaced: four profiles now complete registered games from genuine Advanced creation through the shared initializer. The older descriptions below remain the original audit snapshot. The larger 456-game Advanced study now also completes with 116,270 accepted actions and zero rejections or checked failures across all base rosters and player counts. Its selected invariants and 5,943 actual JSON continuations broaden the evidence; they do not resolve the named rules, strength-calibration or browser acceptance gaps.
Authorized Advanced source follow-up — 1 October 2026
The user authorized the root UNOFFICIAL_Revised_Dune_Rulebook_v.2.3_web.pdf,
including its marked unofficial rulings. Its SHA-256 is
7077aa87a973221d86d4bd2da945b40c4dec3d371caa6a68cb209758ddf1e516.
It has 44 physical PDF pages; metadata says v.2.3 while the visible editorial
heading on physical page 3 says Version 2.2. This is a supplied unofficial
revision, not publisher provenance or a newly published application rulebook.
See the source amendment and cutover.
Physical page 6 makes every newly opened Advanced Storm after the first use a random Storm Deck card, even without Fremen. The six canonical faces are 1–6; the previous revealed card is eligible again at the next determination. First-turn nearby-player 0–20 dials remain unchanged. Native Fremen still privately learns its next card through its existing cancellable foresight; absence of Fremen grants no player that knowledge. Already recorded current Storm dials or cards finish their saved protocol without a reset or reroll. The next new Advanced turn uses the Deck. Basic's dial rules are unchanged.
Physical page 15's Alliance Constraint and explicit departure footnote, with the rationale on physical page 40, require the ending player's own shared allied force groups to go to Tanks at each Shipment and Movement end. Neither the ally's later turn nor formation this turn postpones that Advanced consequence. Advisor coexistence is exempt in both directions: neither the advisors nor the allied fighters are lost for sharing with advisors. BG fighters remain subject to ordinary separation. Polar Sink and native Ecaz peaceful coexistence, including its existing Karama conditions, remain; Homeworlds are outside this Dune-territory rule and keep their native alliance prohibitions. Basic retains its existing later-player/formation-turn policy. These clauses settle the Advanced timing and advisor questions in the earlier allied-transit audit, not every entry permission, optional arrival composition or Basic no-exit remedy.
The engine's canonical allied-separation quote supplies the existing finish
consequence and the own clean-turn GameView.advancedAllySeparation warning,
whose only payload is affected public territory names. The ordinary
endMovement action is unchanged. Pending responses retain priority; forced
loss adds no confirmation. Ending remains legal when no escape is available.
Actual loss custody continues through the native force/elite/No-Field handling,
without exposing concealed values in that warning or reevaluating completed
turns. These are core Advanced defaults, not a secret opt-in source profile.
Verification: Partial development verified. Selected native source, authenticated SQLite, controls and four-profile legal-bot checks pass 339/339 across seventeen files. Full types/lint, 6,169 offline cases and build pass. Standalone native continuation proves exact owned normal/elite loss and advisor/Ecaz/Polar exceptions, plus a genuine prior-revision Advanced dial save followed by a new no-Fremen card opening. Actual 390-pixel human Storm inspection/confirmation, first/later ending and expanded guide in three privately backed-up new QA rooms survive refresh. Saved native inventory, eight prior rooms and all 33 original seats in eleven QA rooms remain preserved after isolated build reloads. Local HTTP is 51/55, four POST 503s, not green or deployed acceptance. Earlier calibration and subsystem evidence below remain historical. Public/faction/optional-module gates and full Advanced certification remain unchanged. Duke revival/ghola, Kull and broader secrecy work remain separate.
Concrete remaining behavior
| Priority | Finding and evidence | Next edit or audit target |
|---|---|---|
| 1 | Ordinary Karama cannot cancel Fremen movement. movementRange at game/engine.ts:3098 grants Fremen range two without a canceled-advantage state. The response union at :415 and movement dispatcher at :10232 have no corresponding Fremen movement response. docs/IMPLEMENTATION_STATUS.md:341 independently records this remaining base cancellation. The publisher's Ix rulebook final Karama table explicitly reduces Fremen movement to one territory; see source discussion below. |
Add an authoritative declared-movement continuation and distinct Fremen advantage cancellation, exact route/force custody, private legal cancel-card projection, actual player controls and all four bot policies. First settle the declaration/cancellation contract: an already committed illegal two-step move cannot simply occur, and a silently selected shorter destination would choose for the player. Do not disable city ornithopter movement merely because the faction is Fremen. Audit the interaction of the printed faction cancellation with an independently available ornithopter range. |
| 1 | Ordinary Guild rate and transport cancellation are absent. guildIncome exists, but redirects income only after shipment commitment (game/engine.ts:6630, :6840, :10139). ship/guildShip validate and commit discount/transport without a separate response for the discount or cross-planet/return permission. docs/GUILD_RATE_KARAMA_RULES.md already supplies a primary-source contract and explicitly unresolved unaffordable declarations. |
Implement separate discount, transport-permission and income responses around a normalized pending transport intent. Preserve the difference between Guild itself, its ally, independent Karama rate owner/beneficiary, and payment contributors. Do not treat a canceled income response as repricing. Follow the existing unanswered affordability question; no new answer was inferred here. |
| 1 | Truthtrance does not enforce all required current-turn commitments, and AI cannot answer arbitrary valid questions. game/reference.ts:1517–1525 expressly leaves shipment promises, broader action commitments, future card/power sequences and automatic freeform enforcement unfinished. game/truthtrance.ts:314 forces an AI recipient of a freeform question to answer unknown, regardless of whether its answer is actually knowable. Current-battle structured claims and Ghola feasibility are real implemented work, not complete arbitrary-question support. |
Expand structured official game facts/action obligations and deterministic legality restrictions beyond battle slots, keeping promised resources and impossibility semantics consistent across voluntary and opposing effects. Define an honest supported interaction for remaining natural-language questions rather than claiming recorded prose is server enforcement. Add human-to-AI question cases: a blanket unknown is an implementation limitation, not a rule granting AI different Truthtrance obligations. This is also a Basic compliance gap. |
| 2 | Advanced BG setup AI emits currently illegal actions. game/bots.ts:871 offers advisorSetup whenever BG has not placed. game/engine.ts:9230 rejects it until seated Fremen has exactly ten reserves after placement. Other player candidates can eventually progress, but the emitted BG candidate itself is illegal during that legitimate wait. |
Filter the public prerequisite before enumerating advisor placement. Test BG before and after Fremen in candidate ordering, all four profiles, with human or AI Fremen. Waiting must be represented without a stream of rejected setup submissions. |
The first two rows are ordinary faction cancellations present even in Basic, and are therefore inherited by Advanced. A working Basic game loop is not evidence that all base advantages are complete.
Explicit unresolved base interpretations
These are actual recorded implementation choices, not missing expansion components. Resolve from authoritative sources where possible; do not silently turn the current tests into the rulebook.
- Unfunded auction recovery after losing Karama.
recoverAuctionPaymentatgame/engine.ts:2894–2917explicitly labels its recovery provisional. It restarts the same lot when no spice or usable Karama can back the winning bid. In Advanced this is reachable when Harkonnen's special exchange removes the only funding Karama, or a BG Worthless conversion is canceled.tests/special-karama.test.ts:223andtests/bg-karama.test.ts:285verify that software policy, including the provisional restart; they do not establish publisher authority for it.game/reference.ts:1924keeps the limitation visible. Audit what happens to the standing bid, turn, card custody and any explicit ally contribution before certifying this path. - Guild special shipment-stop settlement.
game/reference.ts:1925–1926says stopped shipment consumes the ordinary shipment opportunity while preserving forces, spice, allied credit and any rate card, then explicitly calls these settlement details provisional. The separate ordinary Guild-rate audit notes that the brief publisher power does not settle all changed-price/refund/order cases. Existing focused stop tests show safe rollback and resumption of this implementation; they do not resolve the rule interpretation. Keep ordinary permission/rate cancellation distinct from this once-per-game special stop. - Atreides special full-plan commitment order.
prepareSpecialKaramaIntentatgame/engine.ts:7325requires a pre-planfullPlanOffer, after ordinary preparation, then forces the target to commit first.game/reference.ts:1920explicitly identifies this as an implementation timing choice needing the remaining card-interaction audit. It is not evidence that full-plan prescience itself is absent. Verify Base Truthtrance, Voice, Ghola/preparation and ordinary prescience interruptions against publisher sequencing, then document the supported order and exceptions. The expansion No-Field full-plan guard at:7348is irrelevant to this base-only configuration.
The broad Truthtrance language creates an engineering and guidance gap even if some natural-language enforcement requires a later user interpretation. It should not be disguised as an ambiguity that excuses all knowable structured questions.
13 September full-plan interaction follow-up
The full-plan interaction audit now verifies the
native Voice/ordinary Prescience/Truthtrance/Ghola paths discussed above, including
seven interruption windows, all four AI profiles, private inspection and JSON
continuation. tests/full-plan.test.ts uses actual Advanced setup before staging
the battle. No runtime change was required for those paths. The special offer's
precise deadline and target-first ordering remain implementation choices not
settled by the retrieved GF9 text. Keep those source limitations and all wider
mode gates; the old statement that this particular interaction audit remains
undone is superseded by the linked record.
Implemented mechanisms to preserve and verify in integration
| Requirement | Current authoritative evidence | What that evidence does and does not prove |
|---|---|---|
| Advanced setup | start at game/engine.ts:1550 initializes Sardaukar/Fedaykin; :1577 avoids Basic BG Polar Sink placement; advisorSetup at :9224 waits for Fremen; fremenSetup at :9255 accepts sector placements and typed elitePlacements. Setup UI at components/game-table.tsx:1324–1410 exposes advisor and Fedaykin controls. |
These branches exist behind the gate. The stale public ledger's blanket “Advanced faction setup” missing label is too coarse. The whole real Advanced start-to-setup path still needs acceptance. Fremen AI at game/bots.ts:859 never supplies elite placements; leaving every Fedaykin in reserve is legal, but no strength claim follows. |
| Storm, forecast, two spice piles, worm choices | tests/advanced-phases.test.ts covers forecasts, first-turn worm handling, two separate piles, per-pile Nexus/rides, additional worms, canceled protection, typed half losses and Weather Control. game/reference.ts:1810 describes these as focused support. tests/first-storm.test.ts plus docs/IMPLEMENTATION_STATUS.md:901 record the corrected printed storm meridian/player circles. |
Do not redo the already corrected first-storm orientation based on the old coverage page. Verify interaction across actual multi-turn Advanced games, and visually inspect two-pile/forecast/worm controls and reloads. |
| Spice support, elites, casualty options | game/combat.ts, combatForces at game/engine.ts:1437, takeBattleLosses at :1475, tests/combat-karama.test.ts and tests/kwisatz.test.ts:237. |
Focused arithmetic and distinct cancellation tests exist, including Fremen support versus doubled elite strength and Sardaukar versus Fremen. Full games must preserve physical and typed force totals, one-elite-per-turn revival limits, actual support cost and survivor allocation. |
| Atreides KH and revival | tests/kwisatz.test.ts covers seven battle losses, leader/Hero requirement, one territory, death/bonus distinction, explosion and traitor precedence, cancellation privacy, leader-cycle revival and Ghola. tests/capture.test.ts:341 adds the all-native-captured revival edge. |
KH is implemented; separate finished original KH component artwork and full browser control/recovery review remain open. The tests are selected scenarios, not all Advanced interactions. |
| Harkonnen capture | tests/capture.test.ts covers optional/canceled capture, random eligible pool, private identity/execution state, one battle, traitor, release, death/revival cycles and JSON privacy. Historical engine line locations are not current code anchors. |
Base capture's integrated post-battle continuation and browser inspection still need acceptance. Residual Poison now has a separately labelled provisional normal-Tanks composition; it does not certify base-mode or general Assassination acceptance. |
| BG advisors and Worthless conversion | tests/advisors.test.ts covers entry/intrusion, lock propagation, pre-shipment flips, advisor occupancy, movement, collection, city benefit, Atomics prohibition, storm/worm/explosion, setup and canceled flips. tests/bg-karama.test.ts covers charity, conversion, nested cancellation, commitments and payment. |
The public coverage page still calling advisors simply unfinished is stale. Nested conversion and unfunded recovery remain a specific base issue. Test real setup, repeated turns and UI ownership rather than recreating the existing advisor system. |
| Guild turn timing and special powers | tests/advanced-guild.test.ts covers early, delayed, last and in-between turns and their cancellation. tests/special-karama.test.ts covers Harkonnen exchange and Emperor revival. Fremen summoned-worm and Atreides full-plan tests exist elsewhere. |
Their presence supports continued integration, not a blanket certification. Ordinary Guild cancellations and the recorded provisional special semantics remain distinct blockers. |
| Increased stronghold income/victory | tests/kwisatz.test.ts:237 checks stacked Advanced income; advisor tests exclude peaceful forces; game/reference.ts:1835 explains contested storm strongholds, prediction and final-turn fallbacks. |
Run targeted official scenario review plus full Advanced games across player counts and alliances. This bounded audit found no new specific victory defect; absence of a found defect is not completion proof. |
Missing mode-level evidence and stale guidance
tests/bots.test.ts:160 is explicitly a test of implemented Advanced subsystems. It starts a Basic table at :167, completes Basic setup, flips g.advanced = true at :188, and injects elite reserves. It runs Hard and Brutal only. It is useful regression evidence but skips real Advanced setup, starting advisors/Fedaykin placement and Easy/Medium Advanced play. The final current checkpoint in docs/IMPLEMENTATION_STATUS.md:28–45 records 1,418 registered rules/client/component tests, 113 persisted/API tests, TypeScript/lint/build and 312 Basic games with zero rejected candidates. The two 96-game studies and the two-through-six-player 120-game study are still Basic only; their successful results cannot certify Advanced. The earlier single worm-ride rejection is preserved as historical evidence in docs/AI_PLAYER_COUNTS_20260907.md, followed by its successful final rerun.
Before enabling the base Advanced gate, introduce an internal testable supported setup path that exercises the same initializer as production without weakening the public gate. Run the full matrix of player counts, relevant base-faction rosters and all four AI profiles, including all-human waiting, mixed ownership and alliances. Record every rejected candidate, stalls and complete traces with stable source fingerprints. Ensure targeted interactions actually occur; random completed games alone may never invoke a held special Karama or captive.
Browser evidence in docs/VISUAL_PLAYTEST.md explicitly distinguishes isolated Advanced/expansion fixtures from complete games. It does not demonstrate a complete Advanced base game from lobby through outcome. Required next acceptance includes actual Advanced setup, sealed spice support and elite casualty choices, KH inspection, captive ownership/execution, advisor conversion and Guild out-of-order actions, two spice piles and private forecast. Test refresh and server restart with representative pending private choices. Desktop and mobile must both show usable controls and correct waiting ownership.
app/rules/coverage/page.tsx:29–72 has stale coarse rows for Advanced setup/advisors, first-storm orientation and some already implemented powers; its expansion and portrait rows are also outdated. game/reference.ts has much more precise boundaries but remains a partial reference. Consolidate coverage into one traceable source with separate implementation, player-control, AI, documentation and verification states per rule. Updating the stale rows is useful maintenance, but does not remove any runtime blocker above.
Expansion issues which must not block this isolated readiness decision
For a no-expansion/no-module game, none of the following exists: Richese cache cards/No-Fields, CHOAM Worthless powers/Auditor, Ix forces/mobile stronghold/Poison Tooth/Sandtrout, Tleilaxu Face Dancers/gholas, Ecaz ambassadors/Duke, Moritani terror, or leader skills/stronghold cards/homeworlds/Nexus cards/discoveries/tech tokens. Their missing behavior remains required by the overall goal, but does not itself prevent a genuinely completed six-base-faction Advanced mode from being enabled later.
In particular, wider Stone/Poison Tooth and No-Field interactions, Residual Poison's provisional captive-death composition, Ornithopter-card/Hajr/advisor combinations, and foreign-ghola acquisition are not base Advanced blockers. Base city ornithopters, base Ghola card and ordinary Harkonnen capture are separate, relevant mechanisms. Do not hold an otherwise completed base mode for unrelated faction art or copy expansion guards into it. Follow each canonical feature contract for current prototype evidence rather than treating this dated inventory as absence proof.
Source basis and limits
The active goal specifies the GF9 2019 base rulebook, official errata and official FAQs; later applicable official corrections take precedence. This audit read publisher-authored local extracts /tmp/dune-rules/base.txt (matching base.pdf) and /tmp/dune-rules/ix-official-mirror.txt for the base-faction Karama reference. Base printed pages 13–19 describe Advanced phases/combat and faction advantages. The Ix reference's printed final page explicitly lists the base Fremen movement and Guild half-price/transport cancellations; referring to that clarification does not require enabling the Ix expansion at the table.
Primary provenance: GF9 base rulebook, GF9 Ixians & Tleilaxu rulebook, GF9 November 2020 FAQ. The November FAQ's Guild distinctions and precedence over April are already examined in docs/GUILD_RATE_KARAMA_RULES.md; Truthtrance provenance is recorded at docs/IMPLEMENTATION_STATUS.md:686–711. This audit did not claim a newly retrieved FAQ binary or independently settle the unanswered interpretations. No tournament, community, house or other-edition rule was adopted.
Recommended immediate sequence (original audit snapshot; the first two items were subsequently implemented — see the 11 October closure note above): fix the public BG setup candidate prerequisite; independently audit and implement Fremen movement cancellation; finish the normalized Guild cancellation contract when its material outcome is resolved; audit the named base special-Karama and Truthtrance gaps; then exercise authentic Advanced setup/full-game/browser recovery and revise the mode's complete checklist before changing the gate.