diff --git a/docs/CURRENT_STATUS.md b/docs/CURRENT_STATUS.md index c1fdf3a0..ce8b6dbe 100644 --- a/docs/CURRENT_STATUS.md +++ b/docs/CURRENT_STATUS.md @@ -17,6 +17,15 @@ open mode gates. ## Current checkpoint and work +**Native zero-marker battle continuation — 29 October. Prototyped / Partial.** +The existing staged zero-reserve native No-Field journey now completes the +actual Traitor decision and final battle opportunity, preserving the physical +pool with no phantom forces. Seventeen related cases and quick type/lint +checks pass. A publisher-source recheck did not resolve Reinforcements on a +Traitor win; the provisional policy remains. This is focused playability +evidence, not complete Homeworld or deployed acceptance. +[Scope](RICHESE_NO_FIELD_RULES.md#advanced-native-homeworld-marker--29-october-2026). + **Advanced native Homeworld No-Field — 29 October. Prototyped / Partial.** A deployed marker may ship between a foreign World and native Richese, remain concealed and later leave or reveal. Native physical reserves are not duplicated @@ -32,9 +41,9 @@ user-authorized Advanced rulebook; Basic retains its original guard. Guild uses the common Advanced route even if its native transport is canceled, while already-open permission responses retain their continuation. A Homeworld battle plan guide also carries the selected Reinforcements reserve mix. Ninety-four -related cases, quick type/lint checks and the production build pass. Concealed -No-Field return, wider -interactions and deployed acceptance remain open. See [return scope](HOMEWORLD_RULES.md#advanced-native-homeworld-return--29-october-2026) +related cases, quick type/lint checks and the production build pass. The later +provisional No-Field return is described above; wider interactions and deployed +acceptance remain open. See [return scope](HOMEWORLD_RULES.md#advanced-native-homeworld-return--29-october-2026) and [guide scope](REINFORCEMENTS_RUNTIME.md#homeworld-plan-guide-with-chosen-fees--29-october-2026). **Reinforcements reserve choice — 29 October. Prototyped / Partial.** diff --git a/docs/ECAZ_TREACHERY_RULES.md b/docs/ECAZ_TREACHERY_RULES.md index 3bdcfaca..6038ff61 100644 --- a/docs/ECAZ_TREACHERY_RULES.md +++ b/docs/ECAZ_TREACHERY_RULES.md @@ -170,6 +170,18 @@ now have connected development prototypes. The linked contracts supersede the historical runtime-absence statements above within their explicit boundaries. Reinforcements and complete combined-module acceptance remain unfinished. +## Reinforcements Traitor source recheck — 29 October 2026 + +The [publisher-authored base rulebook](https://cdn.1j1ju.com/medias/37/57/71-dune-rulebook.pdf#page=11) +states that a successful Traitor caller loses nothing regardless of battle +plans. The later printed Reinforcements face requires three reserves moved to +Tanks; the Ecaz & Moritani rulebook's Treachery FAQ discusses Harass, without a +direct Reinforcements/Traitor clarification found in the reviewed material. +Both precedence readings remain plausible. The existing all-outcome charge is +still provisional; this recheck does not establish a publisher ruling or a +user decision. The older designer-linked April 2020 FAQ could not be inspected: +the publisher server returned HTTP 403, and its date predates the expansion. + ## 14 September Reinforcements cost review The printed close-up at [4:24](https://www.youtube.com/watch?v=P9ZTV1uZqsM&t=264s) diff --git a/docs/RULE_DECISIONS.md b/docs/RULE_DECISIONS.md index 9a76ebec..87b546fb 100644 --- a/docs/RULE_DECISIONS.md +++ b/docs/RULE_DECISIONS.md @@ -3334,7 +3334,7 @@ These are unresolved in the cited records. Do not infer an answer from elapsed t | --- | --- | --- | | Advanced advisor / physical Ornithopter | Supplied physical28/logical26 and10/logical8 prevent advisors from granting city access, rather than banning this physical card. Both printed modes now accept advisors through normal stance/arrival/locks/cohort rules. Range3 is independent; two-group range uses current fighter city access at each group. Empty advisor arrival can flip and grant access; advisor-only city cannot. This source cutover supersedes the older guard, not a publisher card FAQ. Wider combinations and final acceptance remain due. | [Source cutover and scoped proof](RICHESE_ORNITHOPTER_ENGINE_AUDIT.md#advanced-advisor-card-movement--18-october-2026) | | Ornithopter / Hajr | Standing choose-recommended provisionally replaces one unused ordinary/Hajr entitlement by range-three or two distinct normal groups, with no retroactive credit; a later Hajr may reuse those forces. Advanced adopts supplied physical39/logical37 immediately-after-play timing with explicit online/card-group interpretation; Basic retains broader face timing. The inventory has one physical Hajr, not several copies. A genuine paid Box retrieval now permits replaying that held card for another allowance because no once-per-turn cap is established. This is an explicit replay interpretation; other recovery producers and full combinations remain open. | [Original source cutover](RICHESE_ORNITHOPTER_ENGINE_AUDIT.md#hajr-and-unused-movement-entitlements--18-october-2026) · [Physical replay and counted Cunning](RICHESE_ORNITHOPTER_ENGINE_AUDIT.md#recovered-hajr-replay--18-october-2026) | -| Reinforcements cost | The earlier all-outcome versus sole-Traitor-winner question remains unanswered. The bounded prototype provisionally charges on every revealed outcome, chooses normal reserves first and counts the transfer as battle losses. Same-plan Harass pays the original quote before returns; future returns cannot fund or change it. Native Advanced Occupy Stone/Mirror composition keeps the fee but ignores +2 normal score in physical-token comparison. These are product interpretations, not a new publisher ruling or user answer. Other profile/module gates remain; eligibility never depends on concealed Traitors. | [Source review](ECAZ_TREACHERY_RULES.md#14-september-reinforcements-cost-review) · [Combined policy](REINFORCEMENTS_RUNTIME.md#combined-utility-plan--16-october-2026) · [Stone composition](REINFORCEMENTS_RUNTIME.md#native-stone-composition--16-october-2026) | +| Reinforcements cost | The earlier all-outcome versus sole-Traitor-winner question remains unanswered. The bounded prototype provisionally charges on every revealed outcome and counts the transfer as battle losses. The holder chooses an available ordinary/special mix; older sealed plans without a choice retain the former normal-first default. Same-plan Harass pays the original quote before returns; future returns cannot fund or change it. Native Advanced Occupy Stone/Mirror composition keeps the fee but ignores +2 normal score in physical-token comparison. These are product interpretations, not a new publisher ruling or user answer. Other profile/module gates remain; eligibility never depends on concealed Traitors. | [Source review](ECAZ_TREACHERY_RULES.md#14-september-reinforcements-cost-review) · [Combined policy](REINFORCEMENTS_RUNTIME.md#combined-utility-plan--16-october-2026) · [Stone composition](REINFORCEMENTS_RUNTIME.md#native-stone-composition--16-october-2026) | | Harass / Stone Burner | The earlier keep-gated versus compare-after-withdrawal question is unanswered. Standing choose-recommended provisionally compares counters left after successful withdrawal. Opposing Traitor cancels the return; original fixed Occupy commitment stays. Public preflight considers possible fixed Ecaz withdrawal without hidden custody. Clean Ix priority follows its separate explicitly provisional contract; new physical commitments do not remove other profile/module limits. This is implementation interpretation, not a new publisher ruling or user answer. | [Withdrawal](HARASS_WITHDRAW_RUNTIME.md#provisional-stone-burner-timing--16-october-2026) · [Clean Ix priority](MIRROR_WEAPON_ENGINE_AUDIT.md#clean-selected-ix-composition--16-october-2026) | | Stone mixed-force allocation timing | The older timing question remains unanswered by a source. Under 14 October choose-recommended, new original outcome-ambiguous Stone/Mirror battles provisionally commit each ambiguous side's undialed physical total after revealed modes/actual withdrawal and decisive Traitor/explosion branches. Storm-order owners choose privately; every original required value stays sealed until all commit. The eventual winner retains all legal typed casualty choices with the count. Ordinary/invariant and unstamped legacy frames keep their existing path. Publisher physical-count text and supplied Advanced physical12/logical10 casualty timing provide the numerical rules, not this online commitment convention. | [Source, versioned procedure and bounded proof](STONE_BURNER_ENGINE_AUDIT.md#outcome-changing-physical-totals--18-october-2026) | | Recruits late accounting and rates | The earlier one/two-further-free question remains unanswered. The prototype preserves paid spice, deducts recorded free usage from the doubled current rate and all returns from the total cap: two-free/one-paid Atreides can take two more free. Clean classic Homeworlds now provisionally recheck native thresholds on separate accepted requests, retaining completed prices/classifications; this is not a numerical user ruling or newly found timing FAQ. Unknown ledgers, pending repricing, later Fremen grants and same-turn replay remain guarded. | [Source alternatives](RECRUITS_RULES.md), [current native runtime](RECRUITS_RUNTIME.md#classic-homeworld-composition--16-october-2026) | diff --git a/tests/native-world-no-field-runtime.test.ts b/tests/native-world-no-field-runtime.test.ts index a9ddc697..58c7f827 100644 --- a/tests/native-world-no-field-runtime.test.ts +++ b/tests/native-world-no-field-runtime.test.ts @@ -210,6 +210,23 @@ void test('a concealed native zero marker with no reserves creates public battle 'The removed zero marker creates no physical native presence after reveal.'); assert.deepEqual(inventory(game),originalInventory); homeworldGameIntegrity(game); + + // Resolve the native Homeworld's actual Traitor decision and shared final + // opportunity, rather than stopping when the zero marker is revealed. + game = applyAction(game,owner,{type:'traitorCall',call:false}); + while (game.battle?.outcomeWindow && !game.battle.outcomeWindow.closed) { + const window = game.battle.outcomeWindow; + const actor = [window.attacker,window.defender].find(id=>!window.ready.includes(id)); + assert.ok(actor, 'The final battle opportunity must have an unfinished combatant'); + game = applyAction(game,actor,{type:'battleOutcomeReady',event:window.event}); + } + assert.equal(game.battle,null, 'The zero-reserve native battle must finish'); + assert.equal(game.lastBattleContext!.territory,native); + assert.equal(player(game,owner).noField!.deployed,null); + assert.equal(player(game,owner).reserves,0); + assert.deepEqual(group(game,native),{normal:0,elite:0}); + assert.deepEqual(inventory(game),originalInventory); + homeworldGameIntegrity(game); }); void test('all four legal bot profiles offer a foreign-to-native concealed marker return', () => {