354 lines
22 KiB
Markdown
354 lines
22 KiB
Markdown
# Homeworld setup and native reserve runtime
|
||
|
||
9 September 2026. This checkpoint connects the physical Homeworld model to
|
||
the authoritative game, player table and AI. **Public Homeworld starts remain
|
||
disabled.** It does not certify Homeworld battles, occupation, card effects or
|
||
complete Advanced/expansion games. The earlier component checkpoint remains
|
||
in [HOMEWORLD_IMPLEMENTATION.md](HOMEWORLD_IMPLEMENTATION.md).
|
||
|
||
## Native optional-module compositions — 8 October 2026
|
||
|
||
The existing fresh private entries now preserve Homeworlds with Skills,
|
||
Discovery or both for supported native E1/E2 single/paired rosters and
|
||
Advanced distinct-family decks, or standalone Ecaz **OR** Moritani with
|
||
classic opponents. Basic/Advanced2–6; original unused Tech3+ and Advanced
|
||
Strongholds2+ remain optional. Original roster/deck, Duke and assassination
|
||
exclusions remain; no Nexus, unsupported E3 pairs/mixed families, unrelated
|
||
previews, public starts or played-game conversion is admitted.
|
||
|
||
Authorized revision physical21–23 permits the variants together/separately
|
||
irrespective of factions. Existing native predicates and initializers remain
|
||
the single setup path. Nullable Homeworld custody now covers the original
|
||
Ixian `skillTreachery` card choice before training/force placement. Actual
|
||
normal/trained native/visitor Suk rescue forwards residual Cyborg Tanks from
|
||
the same physical quote into optional equal Suboid substitution, fixing a
|
||
reproduced null-quote crash without restoring rescued counters to the Tanks.
|
||
Native saved forces stay at the original home; the Imperial external split
|
||
remains the implementation interpretation below, not ordinary revival.
|
||
Non-native Homeworld winners retain the existing Face Dance offer prohibition.
|
||
Original CHOAM payer/support, Richese caps and revealed nested invoice,
|
||
Tleilaxu own leader revival, Ecaz Arrakis-only Occupy, Moritani assassination/
|
||
skill return and native-world winner Tech timing remain distinct mechanics.
|
||
|
||
Thirty-five new semantic cases and the affected19-file union180/180 pass.
|
||
After the subsequently discovered Ambassador bot and natural-Storm fixture
|
||
repairs, the final four-file union46/46, types/lint and build pass.
|
||
The old classic invasion fixture now explicitly allows the original Guild
|
||
interception decision: a real Easy-AI Karama cancellation had removed the
|
||
army/battle under test. A preserved reproduction and80 original repaired
|
||
invasion boundaries prove the fixture change, not a new shipment rule.
|
||
|
||
The runner adds twelve `native-homeworld-{skills,discovery,discovery-skills}`
|
||
families with optional `-tech`, `-stronghold`, `-stronghold-tech` at stable
|
||
bands7600–8700; existing classic names/seeds6400–7500 are unchanged.
|
||
Original six-seat `native-homeworld-skills` samples:14/19 complete,
|
||
18693 accepted/18718 attempted actions and501 JSON continuations among those
|
||
completed games, on unchanged tree
|
||
`fc792b6089e8d3a17e661daf5a76b9148ad45692c3dfafb2d9481520822d6a31`.
|
||
Five original captures stop at existing CHOAM low-opening-income, exhausted
|
||
Richese cache or Basic odd Ecaz Occupy ruling guards; none is bypassed.
|
||
|
||
All twelve families then run twelve original Advanced three-seat samples
|
||
each:134/144 initially complete,34730 accepted/34853 attempted actions/
|
||
867 JSON among completed games, on unchanged tree
|
||
`3a99f592826e5476825d43330397c7fdca6582157f2bc05600f24a7b7919105f`.
|
||
Eight captures retain the existing CHOAM ruling guard. Two actual Ecaz
|
||
placement deadlocks exposed a bot enumerating revealed Discovery strongholds
|
||
although the original engine/UI permit only base-board strongholds.
|
||
The bot now uses that same base-board enumeration; every difficulty legally
|
||
declines on both preserved exhausted-destination states and advances to
|
||
Shipment. Those exact original captures complete102/124/2 and21/29/0 further
|
||
accepted/attempted/JSON actions on unchanged tree
|
||
`f80a99ba1799254ea93bd3eed6cc64ece7d95195d5503f115c0f570cf9e1828a`.
|
||
This is136 completed three-seat games **across repaired continuations**,
|
||
not144 uninterrupted passes or a final-tree certificate. Existing rejected
|
||
competing Ambassador-arrival candidates remain visible in these reports.
|
||
Reports/captures are private `/tmp/dune-native-homeworld-*-20261008` and
|
||
`/tmp/dune-native-homeworld-skills-first-games-20261007`; no original game,
|
||
native custody or pending ruling is reset.
|
||
|
||
Human390px QA uses two original authenticated HTTP lobbies and the existing
|
||
private CLI, with no redeal, held-card/force injection or outcome lottery.
|
||
`4AG8J2ZX`v9 starts original Ixian `skillTreachery`: the human chooses its
|
||
original Shield, then Prana-Bindu Adept on C’tair Pilru before original
|
||
Traitors/native placement. In actual turn-one Shipment the human declares
|
||
one Suboid plus one Cyborg from Ix to Kaitain for2 spice. Atv74 Ix retains
|
||
9 Suboids/3 Cyborgs, the original Kaitain visitor group is1/1, the separate
|
||
HMS army remains3/3 and the Ixian wallet is7. Original Skills/Discovery/
|
||
Tech/Stronghold custody remains.
|
||
|
||
`TYH3JS3C` uses original standalone Advanced Moritani Homeworld/Skills
|
||
setup without Discovery. The human keeps its actually offered Suk Graduate
|
||
on Lupino Ord. A genuine two-force Guild invasion and original1-supported
|
||
native plan produce the native Moritani win. The human saves the actual
|
||
single ordinary casualty through the owned Suk panel. Atv56 Grumman still
|
||
has14 native forces, Moritani Tanks0, Guild Tanks2 and no visitors remain.
|
||
The original Grumman Collection decision follows; no native force is moved
|
||
to another home and support/plans/casualties are not replayed.
|
||
Both actual choice screenshots, fresh accessibility/resulting state and
|
||
document width390 were observed. These are working-tree controls, not a
|
||
pushed revision or deployed acceptance claim.
|
||
|
||
This bounded composition is Development Verified, not complete faction/
|
||
module coverage, all combinations, comprehensive assurance, calibration or
|
||
protected deployment.
|
||
|
||
## Classic optional-module compositions — 6 October 2026
|
||
|
||
The fresh classic Homeworld prototypes now compose **Skills, Discovery or
|
||
both**, with original unused Tech at three or more seats and/or original
|
||
Stronghold Cards in Advanced at two or more seats. Basic/Advanced two–six
|
||
unique base factions; both optional industry/card modules require Advanced3+.
|
||
Existing `leader-skills --discoveries` and `discovery` private room entries
|
||
preserve selected Homeworlds and original components; no parallel setup or
|
||
save conversion. The runner adds ten profiles at stable bands6600–7500 while
|
||
retaining existing6400/6500 names/seeds. Families `homeworld-skills`,
|
||
`homeworld-discovery` and `homeworld-discovery-skills` add `-tech`,
|
||
`-stronghold` or `-stronghold-tech` under those prerequisites.
|
||
|
||
Authorized PDF21–23 expressly permits variants together/separately. Original
|
||
all14 offers, DS7/8, first-Storm industry ownership, end-Mentat held cards and
|
||
native reserve placement remain. Nested battles get no Homeworld native
|
||
bonus. Typed Suk returns use actual homes; support is already paid before
|
||
rescue, while later Cistern income is a separate printed reward. Native saves
|
||
still stay at their original home; the external Imperial split remains the
|
||
implementation interpretation recorded below, not ordinary revival placement.
|
||
Printed industry accrues once and pays at phase end; Guild-only transport is
|
||
excluded. Held Arrakeen support and Carthag poison defense remain source-local,
|
||
not borrowed by Homeworlds or Cistern. Physical cleanup precedes mandatory
|
||
winner Tech choice without replaying armies or casualties.
|
||
|
||
New semantic cases14/14; affected union145/145 across17 files; types/lint
|
||
and build pass. Original private room entry also exercises real combinations
|
||
and rejects two-seat Tech/Basic Strongholds with the saved lobby unchanged.
|
||
Four-policy original six-seat games cover ten added profiles: thirteen
|
||
completed7879/7879 actions with207 JSON continuations on unchanged tree
|
||
`bf9b1f8a59f77494c1f2dcbd79326705aae1a00c37bc09bd3a157d4de9fb0851`.
|
||
One Advanced `homeworld-discovery-stronghold` seed20268015 stopped at
|
||
turn8/Shipment after1110/1110/29 because an internal view-copy assertion
|
||
treated four optional `undefined` advisor-response properties as different
|
||
from JSON omission. That incidental assertion was deleted, not re-pinned;
|
||
physical custody, rival-privacy checks and actual restored play remain.
|
||
The preserved capture completes19 further actions. The same original fresh
|
||
sample then completes1129/1129/30 on unchanged tree
|
||
`b47a9b126b4f7edf4a29a346fc124ee9427e22d7659c3f0762b0b16ad96fe2f2`.
|
||
Thus fourteen completed original samples total9008/9008/237 across two source
|
||
batches, **not** one final-tree certificate or fourteen uninterrupted passes
|
||
on the first tree. Reports/capture remain under
|
||
`/tmp/dune-homeworld-optional-*-20261006`; no rules guard was bypassed.
|
||
|
||
Human QA: original HTTP four-seat lobbies, real host module toggles, original
|
||
private CLI and explicit unplayed offer/card/token lotteries feed genuine
|
||
action programmes. `XJCJ3H3W`v17 actually submits trained Cistern Suk:
|
||
three ordinary remain inside, reserves17/5 and Tanks0; Kaitain11 ordinary/
|
||
1 Sardaukar, Salusa1/4. Separate Collection pays Cistern2; original industry
|
||
and held-card custody remain. `WM8E7CFG`v17 actually chooses Spice Production
|
||
from two real mandatory Tech options after two genuine Homeworld battles and
|
||
original winner cleanup. Emperor retains one ordinary visitor in Southern
|
||
Hemisphere, native home is empty, reserves14/4, Tanks2/0 and original parent
|
||
army3 with1 Sardaukar. The defeated Fremen retains Axlotl; physical armies
|
||
are not replaced by the Tech action. Both390px surfaces, choices and fresh
|
||
resulting state were observed. These were working-tree controls, not a pushed
|
||
revision/deployment claim. Both tabs closed; temporary human scripts removed.
|
||
|
||
Gameplay checkpoint `fa025220f858e1cf3797f9a34ed39c0822c29bbd` is pushed.
|
||
After an exact build and owned isolated-QA restart, both originalv17 tables
|
||
display that full revision at390px and retain their observed counters/token
|
||
choices. The actual updated Homeworld guide paragraph renders without overflow;
|
||
all tabs are closed. Exact container
|
||
[run37432875364/job112167625286](https://github.com/Quintine/Dune/actions/runs/37432875364/job/112167625286)
|
||
completed successfully; final job record confirms isolated verification7
|
||
finished before publication9. No protected server was deployed.
|
||
|
||
Nexus, native expansion rosters, unrelated previews/variants and pending
|
||
specific rulings remain separate in this checkpoint. Public starts, full
|
||
combinations, comprehensive assurance, calibration and deployment stay open.
|
||
|
||
## Classic Skills and Discovery — 6 October 2026
|
||
|
||
Fresh private prototypes now support Homeworlds with **either** Leader Skills
|
||
or Discovery: Basic/Advanced, two–six unique base factions, no other overlays.
|
||
Use existing `start-prototype.ts --profile leader-skills` or `--profile discovery`
|
||
on a fresh ready lobby with Homeworlds enabled. Genuine game runner profiles
|
||
are `homeworld-skills` and `homeworld-discovery`. Original fourteen skill
|
||
offers, seven Discovery cards/eight tokens, first hands and native placement
|
||
remain authoritative; no existing save is converted.
|
||
|
||
The authorized root revision, physical PDF21–23, permits variants together
|
||
or separately, keeps Homeworlds outside Arrakis and preserves their normal
|
||
battle rules except printed modifications. This is permission to compose
|
||
these prototypes, not a ruling for every interaction or a complete mode.
|
||
Nullable custody now remains legal through actual skill assignment before
|
||
the original force-placement stage.
|
||
|
||
Suk quotes use physical normal/elite casualties and real native or visiting
|
||
Homeworld pools. A native save remains at that same home; it cannot redeploy
|
||
freely. An external save returns to actual native reserve homes. When Emperor
|
||
has both homes, human controls require an exact ordinary/elite allocation;
|
||
minimal bots allocate the return to the primary home. **Allowing both types
|
||
at either native home is a prototype implementation interpretation**, not
|
||
the PDF22 ordinary-revival placement rule and not a new user/publisher ruling.
|
||
The quote validates before mutation and conserves physical custody, Tanks
|
||
and reserves. Battle costs, leader death and card cleanup do not repeat.
|
||
Bureaucrat's existing invoice redirection now accepts this bounded profile.
|
||
Discovery's original Maker, next-turn entry and nested shipment paths need
|
||
no alternate mechanics.
|
||
|
||
Verification:17/17 new behavioral cases;94/94 affected tests across12 files;
|
||
types/lint and build pass. Four original six-seat Basic/Advanced games using
|
||
all four legal AI policies finish2330 accepted/2330 attempts,61 JSON
|
||
continuations. Skills1125/1125/29 ran on unchanged source tree
|
||
`4d3f1c5f99bf6a18cac6553a1ecb0bfbe4da35709e91f1384050506fbd98fc00`;
|
||
Discovery1205/1205/32 on
|
||
`64c0b8ae5286bfdab9019222bb652bf99a7b1f1478eb5b16024844503c930412`.
|
||
Reports are `/tmp/dune-homeworld-classic-{skills,discovery}-games-20261006/report.json`.
|
||
These are two source batches, not one final-tree certificate.
|
||
|
||
Human QA uses isolated existing QA persistence on local port3089, not the
|
||
protected server. Original fresh human rooms, original CLI setup and explicit
|
||
unplayed lotteries feed genuine engine action programmes; no held components
|
||
are injected. At390px, `3NM6MS4T`v11 actually submits trained Suk rescue:
|
||
Junction retains three ordinary visitors; Kaitain has11 ordinary/1 Sardaukar,
|
||
Salusa1 ordinary/4 Sardaukar, reserves17/5 and Tanks0. `CLQYLURH`v11 actually
|
||
submits next-turn Cistern entry for two ordinary/one Sardaukar: reserves17/4,
|
||
Kaitain12/0, Salusa1/4, preserving the earlier actual turn-one internal move.
|
||
Both rendered surfaces have document width390; fresh state and accessibility
|
||
were observed after submission. Nested shipment has engine/runtime coverage,
|
||
not an additional human submission claim.
|
||
|
||
Gameplay checkpoint `e2dcebca35a89ed1e1d129b1fbc2428378b1d700` is pushed.
|
||
An exact build and owned isolated-QA restart retain both originalv11 tables;
|
||
each displays the full checkpoint revision at390px. The actual Homeworld
|
||
guide paragraph renders without overflow. All QA tabs are closed and the
|
||
temporary human lottery/staging scripts were removed. Exact container
|
||
[run37427758535/job112151199196](https://github.com/Quintine/Dune/actions/runs/37427758535/job/112151199196)
|
||
completed successfully; final job record confirms isolated storage/HTTP
|
||
verification7 finished before publication9. No protected server was deployed.
|
||
|
||
Native expansion combinations, other overlays, Advanced Atreides Suk/KH,
|
||
captured replacement, Diplomat Homeworld retreat and the separate Emperor
|
||
Face Dance allocation question remain guarded. No public start, deployment,
|
||
complete rules, recovery/privacy assurance or AI calibration is certified.
|
||
|
||
## Implemented behavior
|
||
|
||
`Game.homeworlds` is optional for existing saves. An enabled fresh lobby stores
|
||
`{custody:null}` until the genuine setup pipeline places forces, after prediction
|
||
and traitor choices. Setup then records typed native reserves and Advanced
|
||
Emperor's separate Salusa allocation. The offline-only initializer does not
|
||
replace the public start gates or dispatch through the room API. It supports
|
||
the currently implemented base/Ix deck sets; CHOAM/Richese and Ecaz/Moritani
|
||
deck construction still rejects instead of substituting a different deck.
|
||
|
||
Native primary counts derive from the player's aggregate reserves; Salusa is
|
||
an allocation within those totals. Foreign garrisons remain separate physical
|
||
pools. Reads, actions and automatic normalization validate custody and all
|
||
twenty physical counters, including special-counter identities across board,
|
||
Tanks, native worlds and foreign worlds. Missing Salusa allocation is rejected,
|
||
not reconstructed. Ixians have seven Cyborgs total, initially four in reserves
|
||
and three in the mobile stronghold. The earlier custody limit of four is fixed.
|
||
|
||
Basic Homeworld setup retains Emperor's five Sardaukar and Fremen's three
|
||
starred counters. They count as strength one in ordinary Basic combat and do
|
||
not activate Advanced faction responses. Basic winner casualties preserve the
|
||
owner's physical normal/special selection. Basic revival and Ghola preserve
|
||
identity without imposing the Advanced one-special-counter-per-turn limit.
|
||
Ixian special-counter rules retain their separate behavior.
|
||
|
||
The Advanced Emperor's `emperorHomeworldMove` action transfers an explicit
|
||
normal/Sardaukar group between Kaitain and Salusa. The server checks current
|
||
owner, phase, movement budget, pending controls and a public-state event. It
|
||
spends one movement, charges no spice and conserves aggregate reserves.
|
||
Starting with movement passes an unused shipment. A real Hajr supplies the
|
||
second movement; active Ornithopter composition remains explicitly blocked.
|
||
Homeworld permission is independent of ordinary faction Karama cancellation.
|
||
|
||
Ordinary native-to-Arrakis shipments now withdraw exact typed Homeworld sources.
|
||
An omitted selection is inferred only when the allocation is unique; ambiguous
|
||
partial draws from both Imperial worlds require explicit choices. The same
|
||
transaction places the matching Arrakis counters once. The chronicle records
|
||
the Homeworld sources and cost. No-Fields retain their separate source contract.
|
||
Normal force revival, Emperor special-Karama force revival and Ghola deposit
|
||
Advanced Emperor's normal forces on Kaitain and Sardaukar on Salusa, even when
|
||
those counters previously moved between worlds. Other factions return to their
|
||
one native reserve pool. Completed Ghola discard receipts bind the full
|
||
Homeworld custody as well as aggregate counters.
|
||
|
||
The public table displays each native world's physical counts and population,
|
||
with the full local-art card inspector. Emperor controls select a movement's
|
||
origin and force types and the Salusa contribution to a combined shipment.
|
||
Kaitain's complementary contribution is displayed and submitted explicitly.
|
||
Invalid source counts disable submission; stale choices are revalidated by the
|
||
server. Shared public helpers give all four AI levels legal typed shipment
|
||
sources and a bounded transfer policy to restore Imperial population. They
|
||
do not read opponent hands, decks, predictions or spice.
|
||
|
||
The server's shipment-completion search uses the same source helper. Its
|
||
mixed-Imperial proof is tested as an internal future integration seam: actual
|
||
Advanced Truthtrance shipment questions still remain Basic-gated.
|
||
|
||
## Verification scope
|
||
|
||
- Genuine setup: sixteen six-seat setups span the eight supported factions,
|
||
Basic/Advanced and all four profiles; another eight mixed-Ix setups cover
|
||
two through five seats. Unsupported deck combinations reject unchanged.
|
||
Prediction/traitor privacy, physical card uniqueness and JSON recovery pass.
|
||
- Actual actions: transfer, Hajr, wrong-owner/stale/blocked rejections, mixed
|
||
native shipment and a Sardaukar's shipment → Storm death → revival on Salusa.
|
||
Ghola's saved completed-effect frame drains once; changing only its Salusa
|
||
allocation rejects despite unchanged aggregate counters.
|
||
- Basic counters: both Emperor and Fremen retain strength-one stars, legal
|
||
casualty choices, repeated typed revival and Ghola. Ordinary Basic behavior
|
||
without the module remains unchanged.
|
||
- AI: every offered movement/shipment candidate is individually accepted by
|
||
the real dispatcher across all four levels. Explicit sources, unavoidable
|
||
elite draws, hidden-information independence, Basic exclusions and no
|
||
oscillating population repair are verified.
|
||
- In-memory production SQL: duplicate and competing transfer requests commit
|
||
one version; fresh module instances and authentication restore the same
|
||
physical state/private hand. Corrupt missing Salusa state rejects without
|
||
writes. Unrelated rooms remain unchanged.
|
||
|
||
`npm run check` passes typecheck, lint and **3,152 offline tests**. The final
|
||
production build passes; `npm test -- homeworld reference` passes **106**
|
||
focused cases. Logs: `/tmp/dune-homeworld-runtime-check-final.log`,
|
||
`/tmp/dune-homeworld-runtime-build-final.log`,
|
||
`/tmp/dune-homeworld-runtime-focused-final.log`, and
|
||
`/tmp/dune-homeworld-actions-engine-final.log`.
|
||
|
||
The live browser used a new named QA room, `VQ6ALGRE`. Genuine setup preceded
|
||
a documented conserved dual-source phase position. UI actions shipped three
|
||
forces (one normal from Kaitain; one normal and one Sardaukar from Salusa),
|
||
then moved three normal forces from Kaitain to Salusa. The final position has
|
||
Kaitain 7 normal + 2 Sardaukar; Salusa 6 normal + 2 Sardaukar; Arrakeen three
|
||
forces including one Sardaukar; seventeen reserves and seven spice. Refresh
|
||
preserved it. Invalid source input disabled shipment, enlarged Kaitain opened
|
||
from the table, and 390×844 inspection found no horizontal overflow in the
|
||
world panels or inspector. Desktop card and phone movement screenshots were
|
||
visually reviewed; this is bounded sampling, not full module acceptance.
|
||
|
||
Forty live HTTP tests pass. Twenty ordinary **two-player Basic** games finish
|
||
3,079 accepted actions with no rejected candidates or stalls, using seed
|
||
20261026 and unchanged source fingerprints. This small regression sample is
|
||
not new strength calibration or Homeworld/full-player-count verification.
|
||
All 2,617 pre-existing room versions and hashes remain unchanged. The separate
|
||
QA room and thirty HTTP-test rooms were added. The development server remains
|
||
running from the 07:53 UTC controlled restart; no hourly restart was yet due
|
||
during this checkpoint. The removed automation stays removed.
|
||
|
||
## Remaining integration
|
||
|
||
Homeworld population values currently describe physical state; they do not yet
|
||
apply high/low advantages, charity/free-revival bonuses or occupation penalties.
|
||
Foreign Homeworld shipment permissions, Guild sponsorship, alliance rules,
|
||
occupation qualification/turnover, Homeworld combat and aftermath, explosions,
|
||
all card effects, occupation Collection, Ecaz victory and full AI policies
|
||
remain unfinished. Ordinary special arrival/return routes still need the
|
||
reserve integration audit, including Ambassador, Face Dance, No-Field and
|
||
card-specific destinations. Emperor transfer with Ornithopter is also pending.
|
||
|
||
Occupation history must remain distinct from population and current foreign
|
||
forces. Some turnover/expiry interpretations still need source resolution.
|
||
Do not infer a complete mode from a valid physical state or successful native
|
||
transfer. No release gate, saved-game migration or hosting access was changed.
|