Implement Emperor Nexus Cunning with physical casualty recovery

This commit is contained in:
Quintine committed 2026-09-10 11:42:01 +10:00
1 parent b05125de9a
commit ba0b5647e1
27 files changed
+2487 -64

No files matched your search

+2
View File
@@ -1,5 +1,7 @@
# Component inventory and verification ledger
**Emperor Nexus Cunning update, 10 September 2026:** five existing ordinary counters can temporarily count as Sardaukar for one Advanced battle after the native Karama response allows the declared enhancement. No starred piece is created or transferred; casualties remain ordinary counters. Shared strength/support limits drive the editor and bots, and public notices distinguish pending versus active roles. This uses existing Nexus and force components without new artwork. Five-counter eligibility, existing commitments and all other Emperor mode gates remain explicit. [NEXUS_SARDAUKAR_RUNTIME.md](NEXUS_SARDAUKAR_RUNTIME.md) records 35 new cases, browser inspection, private recovery and the full-project checks; complete module acceptance remains pending.
**Bene Gesserit Nexus Cunning update, 10 September 2026:** existing physical advisors now have an owned whole-territory conversion checklist with counts, select-all control and explicit blocked reasons. One played Nexus card opens one Karama response for the entire public selection; no additional card, token or artwork is created. Legal selected groups become fighters in place without consuming shipment, movement or spice. Fresh accompanied advisors and storm cases remain explicitly pending rulings. Borrowed Voice, Betrayal and incomplete mode starts remain gated. [NEXUS_ADVISOR_RUNTIME.md](NEXUS_ADVISOR_RUNTIME.md) records the bounded runtime and verification status; final acceptance is pending.
**Nexus update, 10 September 2026:** all twelve physical Nexus identities and all thirty-six effect panels are verified against the original printed components. The separate inventory preserves one card per faction, independent of the selected roster; held cards remain private. The internal rules gallery and owner panel provide complete original-language effect text, existing bundled faction artwork and enlarged inspection. Common draws, replacement, preselected own-faction redraw, alliance forfeiture and saved phase progress are integrated. Atreides Cunning and Secret Ally have inspected battle controls and private history. Harkonnen Cunning and Secret Ally now draw from the physical Traitor Deck before an exact private return; Tleilaxu receives Face Dancers while previously revealed dancers stay protected. The owner selects actual leader identities with enlarged inspection, and observers receive only pending metadata. Native Tleilaxu Cunning now replaces all revealed Face Dancers atomically, drawing before returning the old identities and preserving unrevealed custody and ordinary cycling. Ixian Cunning gives Suboids strength one without support spice for the rest of the turn, while Cyborgs retain their own rules. Both use existing physical components and private offers; Ixian activation becomes public. This adds no duplicate physical deck or new artwork. Tleilaxu Secret Ally, Betrayal, remaining effects and complete module games remain unfinished and gated. See [NEXUS_HARKONNEN_RUNTIME.md](NEXUS_HARKONNEN_RUNTIME.md), [NEXUS_ATREIDES_RUNTIME.md](NEXUS_ATREIDES_RUNTIME.md), [NEXUS_CARD_RULES.md](NEXUS_CARD_RULES.md) and [NEXUS_CARD_RUNTIME.md](NEXUS_CARD_RUNTIME.md) for prior verification and limits. [NEXUS_CUNNING_RUNTIME.md](NEXUS_CUNNING_RUNTIME.md) records the new native Cunning behavior; its final checkpoint acceptance remains pending.
+2
View File
@@ -1,5 +1,7 @@
# Dune implementation status
**Emperor Nexus Cunning checkpoint, 10 September 2026:** [NEXUS_SARDAUKAR_RUNTIME.md](NEXUS_SARDAUKAR_RUNTIME.md) records five ordinary counters temporarily using Sardaukar strength and support in one Advanced battle. Physical counters, starred reserves and ordinary losses remain distinct. Shared editor and bot calculations handle the Fremen exception and Salusa support. Review fixed a canceled-enhancement Prescience deadlock and retained durable winner casualty choices across competing SQLite requests. **Types, lint, all 4,006 offline tests, production build and 40 HTTP/session tests pass.** Thirty-five new cases cover independent counter arithmetic, real Homeworld thresholds, future commitments, hidden information and recovery. Two three-seat browser rooms passed desktop/phone allowance, cancellation, reanswer, sealed planning and private refresh. All **3,421** opening room versions/hashes remain unchanged; only thirty HTTP rooms and two browser rooms were added. Fewer-than-five interpretation, Emperor Secret Ally, Betrayal and complete module acceptance remain gated. No release gate opened; no restart was due, and automation remains removed.
**Bene Gesserit Nexus advisor checkpoint, 10 September 2026:** [NEXUS_ADVISOR_RUNTIME.md](NEXUS_ADVISOR_RUNTIME.md) records whole-territory, multi-sector Cunning conversion during the native owner’s Advanced Shipment and Movement action. One Karama cancels the entire declared batch; source positions, counts and action allowances are preserved. Saved responses survive Truthtrance, Harkonnen exchanges and paid Nullentropy. Shared controls and all four bot profiles consume the public legality quote. **Types, lint, all 3,971 offline tests, production build and 40 HTTP/session tests pass.** Thirty-five new cases include pending-parent corruption, physical custody and concurrent production SQLite recovery. Two three-seat browser rooms passed desktop/phone selection, allowance/cancellation and private refresh; review also fixed checkbox spacing, accessible SVG titles and stale Nexus guidance. All **3,389** opening saved rooms retain their versions/hashes; only two isolated browser rooms and thirty HTTP-test rooms were added. Fresh advisor/storm rulings, borrowed Voice, Betrayal and complete module acceptance remain gated. The Emperor source audit prepares the next family. No release gate opened; no restart was due, and automation remains removed.
**Tleilaxu and Ixian Nexus Cunning checkpoint, 10 September 2026:** [NEXUS_CUNNING_RUNTIME.md](NEXUS_CUNNING_RUNTIME.md) records atomic revealed Face Dancer replacement and full-strength Suboids in every battle for the rest of the turn. Basic and Advanced retain Cyborg support costs and exact physical losses. Review fixed fresh Ixian Nexus setup, future-plan search through an unspent Cunning card and its private preparation hint; prior commitments remain binding. **Types, lint, all 3,936 offline tests, production build and 40 HTTP/session tests pass.** Fifty-one new cases include real Face Dance, all four bots, mixed-force support, concurrent SQLite recovery and future Truthtrance/Prescience commitments. Desktop/phone card play, private refresh and a seven-strength/two-support sealed plan passed. The hourly restart preserved all **3,359** then-existing games; final comparison preserves all **3,327** opening room versions/hashes. Tleilaxu Secret Ally, Betrayal and remaining Nexus effects stay gated pending their recorded requirements. No expansion release gate opened; automation remains removed.
+2
View File
@@ -38,6 +38,8 @@ Supported composition:
Karama can suppress Emperor's Sardaukar advantage before plan revelation. Cunning enhances that native advantage, so suppression applies to its temporary Sardaukar too; it does not destroy or move counters. The card supplies no general Karama immunity. [November FAQ, p.7](https://www.gf9games.com/dune/wp-content/uploads/2020/11/Dune-FAQ-Nov-2020.pdf#page=7)
The selected implementation composition treats a Cunning declaration as the new advantage use: allowing it grants the temporary role; canceling it prevents that role entirely. Those ordinary counters consequently gain neither doubled strength nor Salusa's support exemption. This differs from canceling the strength of actual starred Sardaukar, whose physical identity survives that cancellation. Keep the new use and its response separate from the earlier native starred-force response; one Karama must not consume two independently declared uses.
Salusa high names Sardaukar, without limiting support relief to starred tokens. Applying that relief to counters currently counted as Sardaukar is supported composition. Salusa population still uses its physical native starred pool; Cunning cannot raise its threshold. Preserve the existing [mid-battle Salusa threshold guard](HOMEWORLD_BENEFITS_RULES.md). Occupation effects remain subject to their unresolved lifecycle. [Homeworld components](HOMEWORLD_COMPONENT_AUDIT.md)
## Secret Ally: retain the actual purchase price
+48
View File
@@ -0,0 +1,48 @@
# Emperor Nexus temporary Sardaukar
10 September 2026. This checkpoint implements the bounded native **Cunning** effect in [NEXUS_EMPEROR_RULES.md](NEXUS_EMPEROR_RULES.md). It extends the [Nexus lifecycle](NEXUS_CARD_RUNTIME.md) without enabling Emperor Secret Ally, Betrayal, undersized groups or incomplete mode starts.
## Five existing counters, one battle
An unallied Emperor holding its own Nexus card can declare Cunning during its current Advanced battle before submitting its plan. The eligible army must contain at least five ordinary counters and no actual Sardaukar. A canceled starred-force advantage does not turn a physical Sardaukar into an ordinary counter or satisfy that absence condition.
The declaration spends the Nexus card and opens one ordinary Karama response for the native enhancement. While pending, no temporary roles are active. Allowing the response makes five ordinary counters count as Sardaukar for this battle. Cancellation prevents the whole enhancement and leaves the Nexus card spent. This response is distinct from suppressing actual starred Sardaukar.
The five counters retain their physical identity. No starred counter is created, shipped, revived or removed from reserves. Effective strength and support use a temporary role over the ordinary pool; every loss still removes an ordinary counter. The role ends with its original battle and does not carry to a later battle that turn. A Homeworld army retains its existing physical eligibility and size limits.
| Opponent | Each temporary Sardaukar, supported | Unsupported |
| --- | --- | --- |
| Non-Fremen | 2 strength | 1 strength |
| Fremen | 1 strength | 0.5 strength |
Current applicable Salusa support rules are evaluated through the same combat profile. The effect does not confer free support on the whole Emperor army, and cancellation does not leave a support exemption on counters that never acquired the temporary role.
## Plans, controls and privacy
The shared combat helpers distinguish maximum strength from the number of counters that can receive support. The editor and bots use those helpers for their projected own/opposing armies. For example, seven ordinary counters with five temporary Sardaukar can supply strength twelve against a non-Fremen opponent, but at most seven paid support. Casualty options still contain zero physical starred losses.
Existing Prescience and Truthtrance commitments remain binding when activation is allowed. The authoritative offer checks that activation can preserve them; it cannot reopen an already submitted plan. The controls submit the exact current event and display the engine's blocked reason. A future-strength Prescience answer can include the held Cunning in its reachable preparation without spending the actual card during the search. Its private hint explicitly names Emperor Cunning, followed by the genuine Karama response. Preparation steps can remain open where the battle workflow permits them; live responses, Truthtrance and other action locks retain priority.
If Karama cancels the enhancement and makes an existing inspection impossible, the owner answers that same field again. Other feasible disclosures remain binding, including a disclosed leader. The shared reconciliation also preserves the existing Residual Poison restrictions; it does not decide the unresolved case of two individually feasible but jointly incompatible Cunning answers. Earlier observations remain private historical evidence. Native Prescience, both orders of Cunning fields and Secret Ally inspection have regressions.
Winner casualties retain a saved commitment to the original effective forces, dial, support and every legal physical loss allocation. Independent battle markers detect removed history. Current and suspended choices must match that commitment, and competing requests can settle only one allocation. Completion records survive subsequent battles without applying the temporary role again.
Independent review also caught a pending display inconsistency: the response was still open while force profiles already showed temporary strength. Only an allowed declaration now affects public force profiles. Private future-plan search explicitly models allowance on its own copy; pending and active projections have a regression.
The holder gets one **Use five forces as Sardaukar** action. Declaration and allowance become public, with a pending response notice followed by an active-battle notice. The board and loss explanations identify the counters as physically ordinary. The standard response panel supplies Karama/pass controls and a readable effect name without printing its internal event.
All four bot profiles consume the owner's current offer and wait for the response before boosted planning. The legal-plan search uses the projected temporary-role profile; it does not infer eligibility from another player's hand. Existing Hard/Brutal response policy can cancel a hostile enhancement in the bot's battle. This is legal-policy integration, not a new strategy calibration.
## Verification status and boundaries
The **35 new cases** cover six pure combat/Stone Burner cases, twelve engine cases, eight controls/bot cases, three Homeworld interactions and six production SQLite recovery cases. The independent counter enumeration verifies mixed support and physical loss mapping. SQL cases exercise competing plays and casualty choices, lost acknowledgments, private projections, replay and corrupted source/role/choice records. The genuine Salusa fixtures test high, low and the one-to-two threshold without counting temporary counters as physical stars.
The full-project check passes **4,006 offline cases**, types and lint. The production build and **40 HTTP/session cases** pass. Two isolated three-seat browser rooms exercise declaration/allowance, a twelve-strength/seven-support sealed plan, cancellation after a future-strength inspection and a revised dial of five. Desktop and phone controls, private refresh across all six seats and absence of page errors pass. Screenshots were visually inspected; the 390-pixel phone layout has no horizontal overflow. The non-inspecting third seat receives neither private answer nor sealed plan.
All **3,421** opening saved rooms retain their original versions and state hashes. Thirty HTTP-test rooms and two isolated browser rooms account for all additions. The existing development server was reused; no hourly restart was due at this checkpoint. No recurring automation was created.
An independent review found that a concealed Emperor-owned No-Field cannot arise from the implemented real allied Richese shipment: that path immediately reveals the token and materializes ordinary recipient counters. No fabricated hidden-Emperor fixture is counted as combination coverage. Mandatory discard and Homeworld suspended casualty corruption are validated by the shared receipt checks, but do not yet have separate corruption fixtures for this effect.
Implementation: [shared combat helpers](../game/combat.ts), [owned options](../game/nexus-sardaukar-options.ts), [controls](../components/nexus-sardaukar.tsx), [bots](../game/bots.ts), [table](../components/game-table.tsx), [engine](../game/engine.ts). Evidence: [controls](../tests/nexus-sardaukar-controls.test.ts), [bots](../tests/nexus-sardaukar-bots.test.ts), [physical combat solver](../tests/nexus-sardaukar-combat.test.ts), [engine and inspection](../tests/nexus-sardaukar-engine.test.ts), [Homeworld](../tests/nexus-sardaukar-homeworld.test.ts), [declaration recovery](../tests/nexus-sardaukar-recovery.test.ts), [casualty recovery](../tests/nexus-sardaukar-casualty-recovery.test.ts).
Fewer-than-five interpretation, Emperor Secret Ally purchases/revival and Betrayal remain outside this package. The existing source questions and reaction-policy gate remain explicit. Passing this battle enhancement cannot certify complete Emperor Nexus effects, complete module games or the full expansion goal.