Files
Dune/docs/DEFERRED_SHIPMENT_ARRIVAL.md
T

231 lines
14 KiB
Markdown

# Deferred shipment and arrival validation
14 September 2026. A genuine Advanced Ecaz/Fremen/Guild/Bene Gesserit sample
exposed an already accepted shipment whose Guild allowance could not finish.
This continuation repair preserves the existing unfinished arrival-order gates.
## Ambassador child arrivals during overlap — 27 October 2026
**Prototyped / Partial.** When an Ecaz Ambassador and a Moritani Terror token both
respond to the same eligible Basic arrival, the existing overlap preserves the
two owners' opportunities in provisional storm order. The extension
allows the Fremen Ambassador's relocation and the Guild Ambassador's free
shipment to create their own physical child arrival while the original overlap
waits. The chosen group, destination and ordinary force restrictions remain
authoritative; the original entry and any payment are not replayed.
The child resolves its own eligible Terror opportunity before the suspended
Ambassador returns to the original overlap. If the same Terror token is
declined on the child, it remains available to an as-yet-unresolved original
entry. If the child reveals and consumes that token, the original entry cannot
offer it again. A distinct child token and the original token retain separate
opportunities; if the original Terror was already resolved first, the child
only encounters tokens still present. This live-token and child-first sequence
is an explicit online composition, not a publisher ruling on simultaneous
priority.
Sneak Attack remains a real child effect: its physical forces and any resulting
Bene Gesserit accompaniment are preserved, with the follow-up waiting until the
original overlap's outstanding reaction finishes. The Sneak group can then
trigger an Ambassador that remains available, including after an original
entrant declined it. A child Sabotage discard offers the existing Semuta
response before the same Ambassador continuation.
Existing advisor eligibility,
unrelated busy controls, other arrival effects and optional-module boundaries
remain separate. Complete faction rules, broader interaction, recovery, browser
and deployed acceptance remain open.
Frozen changed-path proof passed 108/108 tests in 14 files, type/lint and the
production build. [Fremen](../tests/overlap-fremen-native-runtime.test.ts),
[Guild](../tests/guild-overlap-child-runtime.test.ts), [Sneak](../tests/sneak-overlap-child-ambassador.test.ts)
and [Semuta](../tests/semuta-overlap-child-runtime.test.ts) use real setup and
actions with explicitly controlled original token selections. Rendered
[controls](../tests/overlap-fremen-guild-controls.test.tsx) do not certify
browser or deployed behavior.
## Basic native faction overlap — 27 October 2026
**Prototyped / Partial.** In bare Basic games with selected native faction
decks and both Ecaz and Moritani seated, an eligible arrival may carry both
Ambassador and Terror opportunities through the existing provisional storm
order. The original move or shipment is committed and paid once; its two
owners resolve their separately earned opportunities in sequence. The existing
queue and controls apply; this is not a publisher ruling on simultaneous
effects. Actual in-flight controls remain authoritative. The child-arrival
follow-up above extends the earlier Fremen and Guild boundary; optional-module
combinations retain their separate boundaries. Complete factions, modes and
deployed acceptance remain open.
The new [runtime fixture](../tests/fixture-basic-native-overlap.ts) uses public
Basic setup and real shipments with explicitly controlled, native-token
placements. [Regression cases](../tests/basic-native-overlap-runtime.test.ts)
cover both owner orders, Duke acquisition, Robbery and a native Tleilaxu
entrant. They do not prove every nested arrival or module combination.
Frozen changed-path proof passed 76/76 tests in nine files, type/lint and the
production build. Browser, deployed and full-mode acceptance remain open.
## Native own-arrival continuations — 15 October 2026
Direct native Guild transport now has the same clear owner-view candidate
as its already executable engine path: future earned income is not a current
busy control. Ordinary shipment likewise stops predicting its own future BG
accompaniment as an active decision. Shared movement preflight distinguishes
resulting Intrusion from an actual pending decision. The existing committed
entry queue, not a second timing adapter, waits for those native controls.
Original price, funding, payment, source group, reserve transfer and movement
ownership stay unchanged. Actual response/decision/Terror/Ambassador controls,
pre-entry fighter choice, Fremen storm protection and unsupported paired
reaction/profile guards remain. The subsequent [native rate follow-up](GUILD_RATE_KARAMA_RULES.md#native-expansion-and-nexus-admission--15-october-2026)
also admits expansion/Nexus rate responses while retaining original price
and unaffordable-return policies. Income cancellation itself is not repricing.
**Provisional composition, not publisher priority:** finish the arrival's
own controls before its deferred entry. Accompaniment joining existing BG
fighters creates a distinct eligible child entry before the original shipper.
Declining that child leaves a live token for the original entry; consuming
it leaves no token to offer again. Advisors remain exempt. This retains the
existing callback/queue order; it does not invent FIFO or suppress a BG choice.
Two original-action fixtures cover Guild income allow/cancel and Ambassador
trigger/decline, BG accompaniment accept/decline/cancel, Intrusion flip/decline/
cancel, the fighter child and original movement. No played hand, wallet,
army, phase or decision is staged. Affected six-file **55/55** and **20**
original API/policy paths pass. Four actual styled390px GameTable journeys
exercise Guild transport/income cancellation, advisor accompaniment, accepted
Intrusion, and declined Intrusion with child-then-original offers. Payment
and transfers occur once; original movement resumes; no overflow/browser
errors. In-memory loopback proof only, not saved-room or deployed acceptance.
This supersedes the BG/direct-transport exclusions in the earlier checkpoint
below and obsolete rejection-test pins, not its remaining recovery safeguards.
## Ordinary Guild income before Ambassador entry — 15 October 2026
The original native Ecaz/Moritani/Guild producer exposed a stale preflight:
`quoteShipmentArrival` treated its **future** earned Guild receipt as an
already-busy arrival response. Yet `commitShipment` already records that
income/counter window, and `openTerritoryEntry` queues the committed entry
until the original response/decision finishes. Rejecting the paid shipment
before Guild permission therefore fenced an existing executable continuation.
Ordinary reserve shipment no longer predicts Guild income as a busy control.
The original physical/price/funding validation, Guild permission, payment,
income/cancellation and deferred-entry queue remain unchanged. The shared
ordinary bot adapter follows that same distinction, without reading hidden
funding or rival hands. Actual in-flight controls, Fremen storm protection
and unsupported paired-reaction gates remain. The native own-arrival
follow-up above also connects direct transport and BG's resulting choices.
This reuses the documented income-before-entry order, not a new comprehensive
publisher priority table or an exception to paying for entry.
Actual styled390px GameTable chooses the placed Ecaz token's stronghold,
ships one, receives original Guild permission, debits Moritani12→11/
reserves14→13 and credits Guild6→7 **before** the Ecaz Ambassador prompt.
The real acquisition button grants Duke6; no payment or reserve transfer repeats.
Original battle then opens Moritani's Sanya4 reveal and physical Mentat
replacement. Affected15-file union134/134, types/lint and original API proof
pass; final surface has no overflow/browser errors. No saved/deployed rooms
were touched, and no new cancellation/recovery or full-combination claim is made.
[Native disc/target integration](MORITANI_ASSASSINATE_LEADERS.md#canonical-winning-discs-and-native-targets--15-october-2026).
This supersedes only the historical prospective-Guild-income rejection below.
The historical BG/other-arrival return and safeguards remain distinct.
## Reproduced failure
The fixed seed `202609146` stopped on turn one after 90 accepted actions. Guild
declared four forces to Carthag, sector 11, where an Ecaz Emperor Ambassador was
placed. Allowing that shipment created a Bene Gesserit accompaniment choice,
then the Ambassador overlap guard rejected the arrival. The rejected action was
immutable, but the earlier accepted declaration left the table unable to proceed.
An isolated archive of prior checkpoint `58ae84f` replayed the same setup seed
and all 90 accepted actions. The resulting player state and pending shipment
matched, and Guild allowance failed with the same guard. The defect predates the
Fremen/Ecaz victory follow-up. Private traces and failed snapshots are retained;
the failure was not replaced with a successful seed.
The Basic sample with seed `202609145` finished on turn seven in 563 accepted
actions, using alternatives after 14 guarded shipment candidates. The initial
Advanced sample did not finish. Neither formed the Fremen/Ecaz alliance or
exercised its final-turn exception. Staged endgame checks are separate evidence.
## Rules boundary
The [deferred movement contract](DEFERRED_MOVEMENT_ARRIVAL.md) records the
unresolved ordering of simultaneous Ambassador, Terror and Bene Gesserit arrival
effects. Shipment prevention precedes payment and arrival; an allowed shipment
still needs a supported continuation. Refusing an unfinished combination in this
development build does not mean the physical rules prohibit that shipment.
This work does not choose an Ambassador/Terror priority, suppress an earned
Bene Gesserit choice, or open Advanced, expansion or publication gates. The
existing [Ambassador](ECAZ_AMBASSADORS_RULES.md),
[Terror](MORITANI_TERROR_RULES.md) and
[Guild payment](GUILD_SHIPMENT_PAYMENTS.md) contracts retain their boundaries.
## Continuation contract
Ordinary shipment now quotes the resulting arrival before opening Guild's
interception decision and again before settlement. The adapter shares the
existing arrival guard with movement and includes pending controls, Guild income,
Bene Gesserit intrusion/accompaniment and Fremen storm protection. It does not
spend resources or inspect a concealed No-Field value to choose reaction order.
Own No-Field shipments also preflight before their earlier cancellation window,
which otherwise bypasses the common shipment offer.
Ambassador-generated shipments retain their distinct validated parent and return
path.
An already saved ordinary Guild declaration may return to its shipper when
explicit allowance encounters this typed unsupported-arrival error. Its original
declaration, ownership, price, force pools and funding must still validate first.
Every excluded special-shipment marker must be absent, rather than merely falsy;
forged, null and empty receipt fields cannot be discarded as an ordinary return.
Only the pending shipment and decision are released; the log explains the
unfinished overlap, and the shipper retains its shipment and movement choices.
Unrelated errors and corrupted declarations still reject without writes.
Legacy declarations tied to an Ambassador, No-Field, Smuggler or spent Nexus receipt do
not use this return path: their custody and parent continuation need separate
handling. The repair does not refund or rewrite those receipts. Fresh ordinary
declarations using the shared offer path receive preflight before the Guild
decision can be accepted. This is bounded recovery, not complete arrival-order
implementation or a universal repair for every older pending shipment.
## Focused verification
Six engine regressions cover the original declaration, a supported allowance,
legacy return and replacement, own No-Field preflight, stale prices and forged
special markers. Three authenticated SQLite regressions cover pending and
returned private-seat restoration, exact custody, replacement arrival, wrong
actor/choice, stale/duplicate requests, corrupted declarations and concurrent
allowances committing one return. Fixtures use genuine faction setup followed
by an explicitly staged arrival topology; the historical sample retains its
separate genuine-game provenance.
Independent review found and resolved the earlier No-Field window bypass and
falsy special-marker recovery checks. Its focused union passed 149 cases, and
targeted lint passed. Final broad checks, source correspondence, full samples
and saved-game preservation are recorded with the checkpoint.
## Integrated samples after repair
The same Basic and Advanced setup seeds and four AI profiles were repeated after
the code review. The exact failed Advanced snapshot was also resumed without
editing its state; its first Guild allowance now returns the uncommitted shipment.
The continuation uses seed `202609147`, a new random stream because the original
cursor was not saved. Its input hash and provenance are retained privately.
| Run | Accepted actions | Guarded candidates | Periodic JSON rounds | Result |
| --- | ---: | ---: | ---: | --- |
| Exact saved continuation | 842 additional | 109 (100 shipment, 9 movement) | 22 | Turn 10, Guild |
| Original Basic seed `202609145` | 563 | 14 shipment | 15 | Turn 7, Guild |
| Original Advanced seed `202609146` | 806 | 81 (74 shipment, 7 movement) | 21 | Turn 9, Bene Gesserit |
All games finish using legal alternative candidates after the explicit development
guards. Physical custody and all twelve terminal private views pass. All 216
game-file hashes remain unchanged throughout the samples. Both Advanced runs
form Ecaz/Fremen alliances but never co-occupy Sietch Tabr or exercise its special
victory. The saved continuation ends with allied Habbanya co-occupation, correctly
outside the supported Tabr exception. These samples demonstrate bounded repair
and continuation, not full rules-combination acceptance or AI strength calibration.