167 lines
31 KiB
Markdown
167 lines
31 KiB
Markdown
# 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](ADVANCED_REVIVAL_ORDER.md). 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](FREMEN_MOVEMENT_KARAMA_RULES.md), the Fremen checkpoint in [IMPLEMENTATION_STATUS.md](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](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](AI_ADVANCED_SETUP_CALIBRATION_20260907.md) 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](RULE_DECISIONS.md#advanced-core-cutover--1-october-2026).
|
||
|
||
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](ALLIED_TRANSIT_RULES.md), 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.
|
||
|
||
1. **Unfunded auction recovery after losing Karama.** `recoverAuctionPayment` at `game/engine.ts:2894–2917` explicitly 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:223` and `tests/bg-karama.test.ts:285` verify that software policy, including the provisional restart; they do not establish publisher authority for it. `game/reference.ts:1924` keeps the limitation visible. Audit what happens to the standing bid, turn, card custody and any explicit ally contribution before certifying this path.
|
||
2. **Guild special shipment-stop settlement.** `game/reference.ts:1925–1926` says 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.
|
||
3. **Atreides special full-plan commitment order.** `prepareSpecialKaramaIntent` at `game/engine.ts:7325` requires a pre-plan `fullPlanOffer`, after ordinary preparation, then forces the target to commit first. `game/reference.ts:1920` explicitly 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 `:7348` is 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](ATREIDES_FULL_PLAN_TIMING.md) 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](RICHESE_RESIDUAL_POISON_ENGINE_AUDIT.md#native-captive-death--18-october-2026); 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](https://www.gf9games.com/dunegame/wp-content/uploads/Dune-Rulebook.pdf), [GF9 Ixians & Tleilaxu rulebook](https://www.gf9games.com/dunegame/wp-content/uploads/2020/09/IxianAndTleilaxuRulebook.pdf), [GF9 November 2020 FAQ](https://www.gf9games.com/dune/wp-content/uploads/2020/11/Dune-FAQ-Nov-2020.pdf). 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.
|