Files
Dune/docs/REINFORCEMENTS_RUNTIME.md
Quintine 16f10beecf
Verify and publish checkpoint container / container (push) Canceled after 0s
Enable Basic Kull preview with Tech Tokens
2026-10-29 05:10:06 +11:00

387 lines
26 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Reinforcements battle prototype
The separate Ecaz Treachery Cards variant shuffles one physical Reinforcements
card independently of choosing the Ecaz faction. Its bounded handler supports
Basic/Advanced classic-faction tables, clean selected Ix and/or CHOAM native/base
rosters, and clean Ecaz/Moritani expansion tables. Classic and selected E1/E2
Worlds retain native sources and their original Tech/Stronghold envelope;
see the [World phase contract](ECAZ_TREACHERY_RULES.md#native-world-phase-modules--17-october-2026).
Supported native Basic/Advanced Occupy retains its own co-present armies;
Basic Ecaz/Richese mixed-marker co-sides also have a focused card journey;
other unprofiled co-sides remain guarded.
The holder may commit it in either Battle Plan card slot. It is neither a weapon
nor a defense: Prescience of a category receives **None**, while the physical
slot stays occupied and hidden until reveal. A named-card inspection still
fixes the exact card. Harass & Withdraw may share the plan under the
[provisional original-cost-first policy](#combined-utility-plan--16-october-2026).
Original or copied Stone Burner composes in clean selected Ix/CHOAM families
and the existing native Advanced Occupy envelope. Other profile boundaries remain.
## Basic mixed-marker co-side — 29 October 2026
**Prototyped / Partial.** Existing Basic Occupy supports a Richese army with
both ordinary forces and a concealed No-Field alongside Ecaz, with the lead
using Reinforcements and Harass together. The [focused actions](../tests/basic-ecaz-mixed-card-battle.test.ts)
exercise each lead, marker reveal, allocation, physical costs and normal
settlement. They use real setup, alliance and marker shipment, with labelled
conserved board and card staging. This supersedes the older mixed-marker guard
statement for this case; it does not certify other combinations or modes.
## Homeworld plan guide with chosen fees — 29 October 2026
**Prototyped / Partial.** Native Homeworld battle-plan completion now carries
its selected Reinforcements special-reserve count with the exact source allocation.
The [focused journey](../tests/reinforcements-homeworld-guide-choice.test.ts)
asks a real named-card and dial Truthtrance and seals a compliant plan whose
legal dial requires the nondefault fee. A Planetologist alternate role clears
both fee fields. Other promises and full battle acceptance remain open.
## Chosen reserve mix — 29 October 2026
**Prototyped / Partial.** When sealing Reinforcements, its owner can select any
available combination of three ordinary and special reserves. The chosen mix is
private with the plan and is paid exactly once when the battle settles. On
Homeworlds the owner also selects valid native source allocations for that mix;
those counters cannot also fund an own-World dial. Existing sealed plans without
a mix keep the earlier normal-first payment. The game enforces availability,
physical source and original No-Field materialization constraints.
The printed card requires three reserve forces, while the source review found
no printed normal-first restriction; this player choice is a rules-based
interpretation, not a new publisher ruling. The existing provisional all-outcome
payment and timing interpretations remain unchanged. The [normal battle](../tests/reinforcements-typed-choice-runtime.test.ts),
[Homeworld](../tests/reinforcements-homeworld-choice.test.ts) and
[controls](../tests/reinforcements-typed-choice-controls.test.tsx) cases cover
actual actions, physical pools, private plan and minimal legal bot paths. Full
card interactions and deployed acceptance remain open.
## Independent Discovery composition — 18 October 2026
Original selected36/38/50 cards now compose with Discovery7/8 and optional
Nexus, World/all14/phase modules. Real Jacurutu reveal/free entry and paid
shipment precede purchased R/Harass settlement; typed native fees and returns
retain existing policies. The [canonical source-bound programme](NEXUS_CARD_RULES.md#independent-cards-with-discovery--18-october-2026)
records actual later Recruits revival, focused proof and remaining limits.
This prototype does not certify full card/module combinations or complete modes.
## Independent World/Nexus temporary roles — 18 October 2026
Fresh classic independent36 + Homeworlds + Nexus12 now composes in Basic and
Advanced, retaining optional all14, Tech3+ and Advanced Strongholds2+. Original
host controls select these modules before readiness and native setup. Other
native-family, Discovery and unrelated preview envelopes retain their limits.
This is prototype integration, not complete-mode certification.
The shared own-World fee pool now removes a temporary role only when its
physical normal counter pays the fee. Provisionally, ordinary non-role counters
pay first. Kaitain7 with five Cunning roles paying three here leaves normal4 /
temporary4, a valid physical pool with maximum dial8. A fee on the other native
World leaves all seven Kaitain counters and five roles. Pre-fee printed face and
support traits remain; the reserve fee cannot enter dial casualties or Suk rescue.
The original Cunning receipt retains count5. A reduced-role casualty record
additionally identifies its local reserve fee; unchanged historical five-role
records keep their existing form.
This extends the existing provisional fee-exclusion policy, using the user's
choose-recommended direction. The sources establish the original three-counter
fee and five-counter declaration, not the ordering of this overlap. It is not a
new publisher ruling. Engine, human selected-source maximum and minimal bot
source pools all use [the same physical quote](../game/reinforcements-homeworld.ts).
The source selector explains the policy and the table displays the remaining
temporary count.
Original-action cases: [native battles](../tests/nexus-world-independent-battles.test.ts),
[Recruits/Harass and setup](../tests/nexus-world-independent-cards.test.ts), and
[physical role quote](../tests/reinforcements-temporary-role.test.ts).
Full combinations and comprehensive assurance remain deferred.
## Original Skills/phase composition — 17 October 2026
Supported original all14/card profiles retain Tech3–6 Basic/Advanced and
Strongholds2–6 Advanced without World/Nexus/Discovery. Original reserve-fee
funding stays separate from earned support: Bank2/personal0 cannot finance
three missing reserve counters. Suk rescues only actual committed losses,
never the fee; native marker materialization and mandatory disposal remain.
[Current471/471 composition and physical programmes](LEADER_SKILLS_RUNTIME.md#independent-cards-with-original-phase-modules--17-october-2026).
## Clean selected Ix/CHOAM families — 16 October 2026
Plain selected `ix`, `choam`, or both now admit Reinforcements with native/base
rosters in Basic and Advanced. This closes a profile-admission gap: original
independent pre-setup cards were present, but the plan rejected the profile.
Original setup keeps selected35/47 plus three physical cards (38/50 total),
native HMS/cyborgs, Face Dancers, Auditor and the separate ten-card Richese cache.
No Homeworlds, Nexus, Skills, Discovery, Sandtrout, mixed E3 or unrelated preview
is added. Original Tech/Advanced Strongholds separately use the phase-module
contract above. Classic, paired E3 and selected Advanced Occupy remain separate;
public starts and played-save conversion stay gated.
At this checkpoint the provisional fee used normal-first, all-outcome payment
and fee-before-Harass order. The later [reserve-choice update](#chosen-reserve-mix--29-october-2026) replaces normal-first for newly chosen plans. Native casualty origins
alone feed Ixian substitution; do not substitute a second copy of the fee.
Tleilaxu Face Dance and Advanced Auditor/CHOAM phase opening remain native.
Richese first materializes its own No-Field, then pays three original remaining
reserves, then returns successful Harass counters. Marker0/3/5, insufficient
funding and physical original/copied Stone reuse those same rules.
Two fixture programmes retain genuine setup, paid shipments, physical armies,
wallets and native continuations. The Richese Basic route funds actual tuning
shipments through original collection over four turns, not assigned spice or
board counters. An initial contributed board-reset fixture was rejected and
rewritten before accepted proof. Physical card/identity positioning is explicit,
conserved staging; a Stone cache-to-hand move is not claimed as a natural purchase.
Advanced Richese uses its funded turn-one route at20 reserves for markers0/3/5;
the low/capped multi-turn tuning evidence is Basic, not an Advanced storm matrix.
Changed-path runtime proof: seven actual390×844 control journeys reach Collection
with native aftercare: mixed Ixian payment, Tleilaxu loss/Face Dance decline,
Advanced Auditor inspection, funded Richese marker, short-budget Harass fallback,
copy-first Mirror/Stone, and Advanced union-family fee/return. No horizontal
overflow or app exception was observed; initial Vite dependency aborts are separate.
Four legal policies exercise32 native programmes/1594 engine-validated reserve
proposals/136 continuations and16 Richese programmes/1428 proposals/58 continuations.
Policy proof is bounded legal participation, not strategy or calibration.
Frozen related20-file union passes262/262 after removing two obsolete profile
rejections; types/lint, build and actual prototype help pass. Build retains
Node deprecation, large-chunk and dynamic-route classification warnings.
No HTTP/database boundary changed or deployed evidence is claimed.
The [combined-army follow-up](ECAZ_OCCUPY_RULES.md#independent-cards-with-combined-armies--2-october-2026)
retains own-holder reserve cost and selected lead card/payment ownership.
It does not revise the provisional outcome accounting below.
The holder must have three own reserve counters when sealing the plan. The owner-only battle offer displays availability and the exact provisional cost. The holder selects an available ordinary/elite mix, transferring precisely three physical counters to the corresponding Tanks subpools when the battle settles. Earlier plans without a choice retain normal-first payment. There is no spice payment or on-board arrival. The +2 changes the calculated normal-outcome battle score, **not** the committed physical dial, support payment, casualty count or leader survival. The card is discarded after any revealed result, including an own, opposing or mutual Traitor call and Lasgun/Shield explosion. The cost is likewise paid on each of those outcomes. A successful Traitor call still supersedes the normal score; the modifier never overrides it. Public history records the transfer; the sealed card and owner reserve mix stay private until the reveal. JSON-restored decisions and transactional room updates cannot charge the same cost twice.
**Provisional interpretations, not publisher rulings:** The card says “increase the dialed number by 2” and transfer three reserves, but no retrieved combined ruling answers whether a sole successful Traitor caller instead keeps their reserves, how the transfer orders against an explosion, whether +2 adds Advanced support or physical losses, which reserve types the holder may select, or whether the three spent reserves count as battle losses for Atreides. For this bounded prototype, payment is at battle settlement before on-board casualties on every outcome; the engine counts the three as battle losses, permits an available typed reserve choice, and keeps the score bonus separate from physical dial. [The source review](ECAZ_TREACHERY_RULES.md#14-september-reinforcements-cost-review) records the competing reading and pending user question. These choices are visible so they can be revised without changing prior hands or inventing hidden information.
The owner receives a card-slot explanation and disabled reason when fewer than three reserve counters remain or the bounded mode is unsupported. All four AI profiles generate legal candidates in the classic and Ecaz/Moritani profiles and can select either slot, including an Advanced plan. The current scoring is a minimal legal participation heuristic, not difficulty calibration. The prototype does not certify the whole three-card variant, other expansion combinations, optional modules, historical-save compatibility or public mode starts.
Focused rule, engine, controls and in-memory SQLite tests cover both slots, Basic/Advanced payment, elite subpool conservation, traitor/explosion disposal, private sealed views, JSON restoration, rejected-action immutability and competing final room commits, now including a paired Ecaz/Moritani saved battle. The test results and actual browser/UI evidence for the current checkpoint are recorded in [Implementation status](IMPLEMENTATION_STATUS.md); test coverage is not a publisher ruling.
## Combined utility plan — 16 October 2026
The standing choose-recommended priority selects the existing native settlement
order for the two physical specials in one plan: quote and debit three
**original own reserve** counters before Harass returns any undialed counters.
This is an implementation interpretation, not a newly retrieved publisher FAQ
or an answer to the earlier reserve-payment question. The source audit's printed
effects and original provisional all-outcome cost were unchanged at that checkpoint; the later typed reserve choice is described above.
Three original own reserves must remain funded at commitment after projecting
any own No-Field revelation. A future return cannot fund a deficient plan or
change its quoted normal/elite mix. For example, two original ordinary
and one elite reserve are spent even when Harass subsequently returns four
ordinary counters. Both cards discard once. The +2 remains normal-score-only,
not extra physical dial, support or winner casualties. Opposing successful
Traitor cancels only Harass; Reinforcements still pays under its existing
provisional all-outcome policy.
Both slot orders compose in the existing Basic/Advanced and selected Advanced
Occupy envelopes. Only the card user's reserves and undialed forces change;
original fixed Ecaz commitment and the other ally's pool stay separate.
Basic/unprofiled co-side and other module gates stay; Stone uses the
[physical-token composition below](#native-stone-composition--16-october-2026).
No persisted state or fresh/public profile is added.
### Own concealed No-Field funding
The existing native battle path materializes a No-Field after both seals and
before card costs. Precommit availability now forecasts that same owner's
remaining reserves. Three must remain at that point, before any future Harass
return; another player's marker/reserves cannot affect or fund this card.
This is the explicitly provisional existing-order composition, not a new
publisher ruling or a waiver of the original fee.
Before-state token3/reserves3 accepted Reinforcements, revealed into reserves0
and then failed the first Traitor action. The new first-plan check rejects that
unfunded commitment without reserving cards or revealing a token; Harass alone
remains legal. Token0/reserves3 remains funded. Native actual revelation,
reserve-cap, token identity/history, support and fixed/variable losses stay.
That earlier checkpoint did not admit Basic Richese. The clean selected-family
composition above now admits it without changing this funding order.
Selected native Worlds now compose the same funding order. A real marker3/
reserves5 owner preview correctly left2 and blocked, but the newly reachable
native-source API path accepted its first R plan. It now rejects unchanged
before source quotation and still permits H-only. Richese's ordinary primary
World pool debits at the actual reveal; the three-counter native fee remains
separate. See the [native World contract](ECAZ_TREACHERY_RULES.md#native-selected-family-world-composition--17-october-2026).
### Scoped proof
The affected eleven-file offline union passes **134/134**, with types/lint and
production build passing (module-register, large-chunk and Unknown-route
warnings). Six new behavioral regressions cover both slots, original typed
costs, deficient original reserves, all Traitor outcomes, explosion and both
active Occupy card-user roles. The test battle uses rock so automatic
collection income cannot obscure support accounting.
Fresh Node programs exercise eight Basic/Advanced cases across all four
profiles, both slot orders and16 accepted continuation actions. A real styled
390px journey starts at three reserves (two normal, one elite), selects both
cards and shows the explicit provisional order. Original dial1/support1 with
leader2 plus bonus2 beats opposing leader4. Four ordinary fighters return;
the original elite reserve is spent, leaving reserves4/Tanks16/elite Tanks5,
spice29 and no army, battle or decision. Both cards discard once; native
collection opens. No root overflow or browser/application error occurred.
Current guide parse, combined-policy anchor and38 evidence paths across the
two topics resolve; all ten checklist facets remain Partial. Removed the
obsolete pair rejection and an incidental absent-card candidate pin. No
human server, saved room, D1, deployment or public gate changed; no new broad,
HTTP, recovery/privacy/custody assurance campaign ran. Private proof artifacts
remain outside Git; the owned source host and throwaway scripts were removed.
## Native Stone composition — 16 October 2026
Reinforcements now composes with same-plan or opposing Stone Burner, including
a physical Mirror Weapon copying Stone. This uses the existing fresh native
Advanced Occupy envelope with the independent Ecaz cards and actual Richese
cache. No new profile, Basic Richese eligibility, public start or optional
module is enabled.
Stone still compares only physical undialed counters, including original
fixed Ecaz and native variable ally contributions. Reinforcements adds no
physical tokens, extra dial, support or on-board casualties; its +2 normal-score
bonus is inactive for Stone comparison. Its original own-reserve cost still
pays once under the existing provisional all-outcome policy. Original/copy
kill-or-ignore modes and Traitor precedence remain unchanged. Reinforcements
discards once; a winning physical Stone or Mirror keeps ordinary retention.
The printed physical-token instruction and the existing score-only reserve
card implementation are composed here. The reserve-payment question remains
unanswered; no new publisher ruling or user answer is implied.
### Scoped native Stone proof
The affected sixteen-file offline union passes **167/167**, with types/lint
and production build passing (module-register, large-chunk and Unknown-route
warnings). New pure/native cases cover physical-token victory despite +2,
same-plan/opposing cost, original elite reserves, fixed/variable card users,
copied kill mode, Traitor precedence and physical retention.
Eight fresh Node programs cover both lead roles and all four legal profiles,
with original/Mirror attacks and36 accepted continuation actions. The native
fixture initially exceeded hand capacity when a third selected card was added;
it now returns unselected real hands to the conserved deck before lead choice
and checks four-card limits. The actual390px journey was repeated on that
corrected fixture, starting with only three held cards.
Original total dial4/support1 compares five undialed coalition counters against
four, never seven. All three native voters decline Traitor through actual
controls. Ecaz pays reserves15→12 plus original fixed3 losses (Tanks6);
Guild loses only variable1, leaving Ecaz2/Guild3 in the territory. Support
costs Ecaz9→8. Reinforcements discards once; Stone is retained through its
original choice, and battle/decision clear into collection. No root overflow,
browser/application error or over-capacity hand occurs in the corrected journey.
The earlier overfull fixture is not accepted evidence of a legal hand.
Current reference parses; the composition anchor and23 evidence paths across
both topics resolve, with all ten facets Partial. No human server, saved room,
D1, deployment, public profile or new broad/HTTP/recovery/privacy/custody
assurance campaign changed. Owned hosts/scripts are removed; private proof
artifacts stay outside Git.
## Classic Homeworld reserve fees — 16 October 2026
Fresh `ecaz-treachery --homeworlds` composes original classic2–6 Basic/Advanced
and all three independent physical cards (base33+3). Reinforcements may be
used on Arrakis, a foreign World **or an own World**; it does not inherit
Harass's printed own-World ban. Original Tech/Advanced Strongholds now follow
the [classic World phase contract](ECAZ_TREACHERY_RULES.md#classic-world-phase-module-composition--16-october-2026).
Selected native E1/E2 Worlds use the [native setup contract](ECAZ_TREACHERY_RULES.md#native-selected-family-world-composition--17-october-2026)
and [original phase-module composition](ECAZ_TREACHERY_RULES.md#native-world-phase-modules--17-october-2026);
other rosters/overlays, public starts and save conversion remain gated.
### Sources, physical pool and original quote
The then-provisional normal-first/all-outcome fee consumed exactly3
own native reserve counters into matching normal/special Tanks subpools before
Harass returns and battle casualties. Visitors, an ally and future returns
cannot pay. Canonical native withdrawal updates World custody and aggregate
reserves together, not fake board keys or revival. Population observation
follows the complete typed fee. The +2 remains score-only.
An owner-only finite source list exposes every exact legal split, including
real normal counters moved between Kaitain/Salusa. A unique source may derive;
ambiguous omission, foreign IDs, wrong types, nonphysical counts and overdraw
reject. `Plan.reinforcementsSources` records the chosen fee before both seals;
sealing pays nothing early. Sources are not a new ordinary Prescience element.
Named full-plan inspection receives the actual committed sources privately.
On an own World, native reserves and the battle army are the same physical
counters. Under the explicit choose-recommended composition, reserve the
on-location fee from the physical dial/support/casualty pool while retaining
the original pre-fee printed face and combat traits. An off-World fee does
not shrink that army. This is provisional composition, not a newly retrieved
card-specific FAQ or permission to spend one counter twice.
For example, Kaitain3 paying3 here can still play its printed-strength/leader
plan at physical dial0, but not dial1. Taking3 normal from Salusa instead
leaves those three Kaitain natives available. With Kaitain5, a split1 Kaitain/
2 Salusa fee crosses low at4; its explosion still loses the original high2,
not the later low3. The optional nested World-loss `faceAtResolution` keeps
that exact original choice through mandatory disposal. No new game root is
added; the new nested source/face fields are not described as no saved fields.
Controls show exact allocations and a wrapped selected-fee caption, project
the own-World physical maximum, retain sealed source guidance, and carry the
whole source choice when filling a legal completion. Private full-plan and
compliant-plan reviews display the same real source map. Four minimal policies
generate explicit legal source-bearing plans and native-only continuations.
### Canonical named questions and native locations
The constrained-plan smoke found the old whitelist omitted the independent
cards. `game/truthtrance-card-names.ts` now supplies canonical ordinary/Ix,
Richese-cache and independent names to current hand/count controls and named
battle conditions. Every consumer moved; no obsolete re-export remains.
Names do not select/deal a family or change a utility card into a weapon.
A real Reinforcements-and-dial3 question then exposed the formatter's
Arrakis-only lookup. Server logging, active preview/answer and history now
provide canonical combat-location names explicitly. A real Kaitain promise
can answer Yes, find the necessary off-World Salusa fee and execute it. Its
legal-completion button replaces an invalid own-World fee draft as well as
the dial/support/cards. Old copied-registry and incidental wording assertions
are deleted, not re-pinned; native action/physical-outcome regressions replace
that evidence.
### Scoped native proof
Six actual390px GameTable journeys reach Collection with no battle/decision/
World-loss frame: foreign split2K/1S, scarce own3K/physical0, split1K/2S
threshold explosion, Fremen three-Fedaykin fee before15 normal Harass returns,
entitled full-plan source inspection, and the named R+dial3 Kaitain promise.
The source review/selection stays readable; its current metadata never pays
early. Native-only votes, original support, exact Tanks and mandatory discard
are observed.
Thirty-two fresh programmes/four policies validate1682 generated R candidates
against the actual engine and accept114 plan/vote/loss continuation actions,
including the underfunded-card fallback. These are separate counts, not1682
continuations. Actual setup, shipment, native movement and battles produce
the positions; only conserved hands/Traitors/unopened first-Blow cards are
positioned explicitly. This is not unstaged full-game card acquisition.
The original inspection probe initially stopped before native elite-strength
priority passed; completing that original response fixed the probe without
changing timing rules. The named-question failures above were real runtime
gaps and are repaired. Across two owned Vite startups, eight old dependency
requests abort before rendered journeys; no overflow/application exception.
Owned hosts/tabs/scaffolds are removed and proof artifacts remain outside Git.
No saved game, DB, human service, public gate or deployment changed. Whole
mode/variant acceptance, calibration and final assurance remain unfinished.
Frozen related41 offline files464/464, types/lint and production build pass.
Existing module-register/large-chunk/Unknown-route warnings remain. CLI help
executes;218 unique guide evidence paths, both new anchors and related IDs
resolve. Homeworlds, Reinforcements and Truthtrance coverage remains Partial.
No HTTP route or DB boundary changed; no broad/final assurance campaign ran.