Files
Dune/docs/HOMEWORLD_COLLECTION_RUNTIME.md
T
Quintine 1db11a0187 Implement Grumman collection and private stacked Terror choices
Add conserved token collection with four bank spice, owner-only stack selection, recovery proofs, controls and AI. Preserve unresolved removal and expansion release gates. Verified 3712 offline cases, types, lint, production build, 40 HTTP cases, three-seat desktop/mobile play, and unchanged 3081 preexisting saved games.
2026-09-10 08:38:06 +10:00

101 lines
5.9 KiB
Markdown

# Giedi collection and low Grumman entry
The later high-Grumman addition and stacked-entry development checkpoint is in
[GRUMMAN_STACKED_TERROR_RUNTIME.md](GRUMMAN_STACKED_TERROR_RUNTIME.md). Its final
verification remains separate from the historical checks below.
This checkpoint connects two population effects. The complete Homeworld module,
Moritani faction and expansion starts remain gated. Printed component evidence,
the No-Field composition and Grumman's unresolved removal destination are in
[the source audit](HOMEWORLD_COLLECTION_RULES.md). The broader integration map is
in [the collection audit](HOMEWORLD_COLLECTION_INTEGRATION.md).
## Automatic Giedi Prime income
`board-resolution-quote.ts` separates actual desert collection from other map
deposits and stronghold income. The engine first commits ordinary balances,
then quotes Giedi's two bank spice using current physical native population.
Seven native reserves qualify in both Basic and Advanced. Multiple deposits
earn two total; technology and stronghold income do not qualify.
Ecaz joint desert lots remain escrow until their allocation settles. A positive
Harkonnen allocation can earn the first Giedi bonus; a zero allocation cannot.
An earlier ordinary desert bonus prevents another payment after shared income.
Canceling Ecaz's ordinary stronghold Collection advantage does not cancel Giedi.
Homeworld occupation income remains unfinished and has no new producer here.
`giedi-collection.ts` records turn, owner, cumulative actual qualifying income
and whether the bank bonus was paid. A canonical signature detects inconsistent
saved receipt fields at action, view and normalization boundaries. The receipt
is completed evidence, never a command to pay on read. Older saves without the
whole receipt remain compatible: they receive no reconstructed or retrospective
award. A newly settled positive share can still qualify. Whole-receipt absence
cannot be distinguished from legacy state and is not a claimed corruption check.
The public chronicle explains the automatic two-spice payment and supplies the
existing optional faction animation event. There is no new confirmation or AI
decision. Private balance and hand visibility remain unchanged.
## Low Grumman
The shared entry restriction checks fewer than eight native reserves and an
original entering group smaller than three. Physical special counters count
once; entering advisors count; existing destination forces do not. A concealed
No-Field counts as one independently of its private value. Two physical forces
and that marker in the same admitted movement form a group of three.
The restriction applies before competing reactions are declared and again at
actual entry, revelation and an alliance offer whose refusal requires Terror.
Ordinary movement, shipments, advisor arrivals and Ambassador continuations use
the same predicate. Guild and Fremen Ambassador choices project a maximum of
two where larger groups would require unresolved simultaneous Intrusion/Terror
ordering. Their controls and all four bot policies honor that limit.
The original public entry facts are bound to a canonical saved signature;
mutable resolution stages do not change the original count. The binding also
covers suspended Terror discard continuations. Current population can change
the low restriction, while the saved entering group cannot be rewritten.
Missing signatures remain legacy-compatible; present inconsistent signatures
must reject rather than repair the entry from current board forces.
High Grumman's optional Collection token change and four-spice payment remain
unfinished. No stacked-token or removal-destination interpretation is enabled
by these changes. The question about unrevealed removal custody is pending,
alongside the earlier occupation and low-Junction rounding questions.
## Verification scope
Final `npm run check` passes types, lint and **3,575 offline cases**. The final
production build and **40 HTTP cases** pass. There are 34 new cases: eight pure
quotes, seven Giedi engine cases, four Giedi SQLite cases, twelve Grumman engine
cases and three Grumman SQLite cases. The existing stale-Terror regression now
checks both signed receipts and legacy unsigned saves. Final check evidence is
in `/tmp/dune-collection-verified-check.log`, with build and HTTP evidence in
`/tmp/dune-collection-final-build.log` and `/tmp/dune-collection-final-http.log`.
The pure, engine and production SQLite suites cover population thresholds,
actual receipt provenance, shared allocations, rejection immutability,
simultaneous submissions, private projection and JSON/database restoration.
Grumman regression cases cover original entry counts, concealed marker equality,
advisors, elite counters, competing reactions and all four Ambassador bot levels.
These subsystem checks do not certify complete games with the module.
A three-seat browser table collected seven desert spice and automatically added
two bank spice, reaching Harkonnen's balance of 29 from 20. Keyboard completion,
three-seat refresh, private balances and desktop/390-pixel phone layouts passed.
Both chronicle screenshots were visually inspected. The initial capture waited
for chronicle text while the hand tab was selected; opening the chronicle fixed
the test harness, with no repeated gameplay action or application change.
The controlled development-server restart preserved all 2,958 existing room
versions and state hashes. Three saved payment-test seats reconnected at their
original version and balances without browser errors. The new collection QA
room and HTTP test rooms are additive. No saved game was reset, and no recurring
automation was installed.
At the end of verification, the database contains 3,019 rooms: the 2,958 unchanged
baseline rooms, one new collection browser table and 60 rooms from the two HTTP
runs. The collection table remains at version four with one completed bonus
record. Private saved-seat files and the database backup remain local temporary
artifacts and are not included in version control.