diff --git a/components/discoveries.tsx b/components/discoveries.tsx index e3ed120c..ce4531a0 100644 --- a/components/discoveries.tsx +++ b/components/discoveries.tsx @@ -95,8 +95,8 @@ export function DiscoveryPanel({ game, act, busy }: Props) { })}
Inspection and reveal are optional. Next-turn free entry, Cistern income for every fighter occupant and later-turn Ornithopter movement are available in the development prototype. Jacurutu income, Testing Station storm choices and Shrine card conversion are prototyped. {game.advanced - ? 'Each Orgiz fighter occupant takes one spice per qualifying territory from the first actual foreign collector in storm order. Shared Ecaz lots wait for the actual allocation: Ecaz first, then ally, excluding zero shares and the occupant itself.' - : 'Each Orgiz fighter occupant keeps the provisional one-spice transfer per positive board deposit from the first actual foreign collector in storm order. Basic shared Ecaz allocation remains pending.'} Actual ordinary Collection receipts identify each payer; co-present forces or old wallets alone never qualify. An empty purse never creates debt. Mixed physical Jacurutu dials use a defeated-player choice before settlement. Testing Station occupants each choose once in original storm order, cumulatively. These ordering/allocation interpretations are provisional.
+ ? 'Each Orgiz fighter occupant takes one spice per qualifying territory from the first actual foreign ordinary collector in storm order.' + : 'Each Orgiz fighter occupant keeps the provisional one-spice transfer per positive board deposit from the first actual foreign ordinary collector in storm order.'} Shared Ecaz lots wait for actual allocation, then consider positive foreign recipients Ecaz first, ally second, excluding zero shares and the occupant itself. Basic counts actual positive deposits; Advanced counts the territory once. Actual ordinary receipts identify each payer; co-present forces or old wallets alone never qualify. Empty purses never create debt. Mixed Jacurutu dials use a defeated-player choice. Testing Station occupants each choose once in original storm order, cumulatively. These ordering/allocation interpretations are provisional. ); } diff --git a/docs/CURRENT_STATUS.md b/docs/CURRENT_STATUS.md index 4fa5fe32..b46344cf 100644 --- a/docs/CURRENT_STATUS.md +++ b/docs/CURRENT_STATUS.md @@ -29,7 +29,27 @@ optional skill bands, combinations and public expansion starts remain open. Rules implementation continues; comprehensive assurance and administration remain deferred until all rules are implemented. -**Canonical Orgiz Collection sources — 14 October.** +**Basic shared Orgiz settlement — 14 October.** +Both modes now wait for the original Ecaz/ally allocation before Orgiz. +`quoteSharedOrgiz` replaces the Advanced-only path: Advanced charges once per +territory; Basic counts actually reduced positive deposits in the original +saved source map for that territory. Positive foreign recipients are considered +Ecaz first, then ally, skipping zero shares, self and empty purses. Every +transfer updates available balances and checks cumulative overflow. The +original allocation event prevents replay; no saved schema is added. + +The native Basic equal split reproduced the missing payment before the fix. +Now equal/full/zero shares, acceptance timing, wrong actors and stale events +pass in both modes; multi-source/fallback/overflow boundaries also pass. +Final six-file union80/80, types/lint/build pass. Actual390px Basic Red Chasm +lot4: Use equal split changes Ecaz7/Guild8→8/11 with one transfer, no decision +and Ready restored. No horizontal overflow or browser errors. All four legal +policies independently complete that Basic split through real engine actions. +Basic's per-deposit mapping and ordering remain provisional; broader module, +rules-mode and deployed acceptance remain open. +[Contract](DISCOVERY_PROTOTYPE.md#multi-occupant-and-shared-cisternorgiz-collection--14-october-2026). + +**Earlier canonical Orgiz Collection sources (`bcd1b10`) — 14 October.** The original ordinary quote now records positive player/location/amount deposit receipts before Orgiz. Both modes use actual collectors, not co-present force inference: Basic groups by positive deposit; Advanced groups by territory. @@ -45,8 +65,8 @@ the other taking0. Face1 is selected at the actual turn-two forecast shuffle, not assigned to a later source. Final six-file union72/72; types/lint and app build pass. Actual390px Finish shipment & movement turns phase5→7, Ecaz7/Guild10→Ecaz8/Guild14 with one Orgiz transfer and Ready restored. -No horizontal overflow or browser errors. Basic shared-allocation settlement, -complete modules and deployed acceptance remain open. +No horizontal overflow or browser errors. Basic shared settlement was pending +at that checkpoint and is now connected above; full/deployed acceptance remains open. [Contract](DISCOVERY_PROTOTYPE.md#multi-occupant-and-shared-cisternorgiz-collection--14-october-2026). **Earlier Orgiz payer ordering and native proof (`bc09ac3`) — 14 October.** diff --git a/docs/DISCOVERY_PROTOTYPE.md b/docs/DISCOVERY_PROTOTYPE.md index a94ec3d6..4ccebea6 100644 --- a/docs/DISCOVERY_PROTOTYPE.md +++ b/docs/DISCOVERY_PROTOTYPE.md @@ -75,13 +75,15 @@ recipients in storm order, skipping self and empty purses: once per territory in Advanced, once per positive deposit under Basic's provisional mapping. Co-present forces and old wallets alone do not establish collection. -Advanced shared Ecaz desert lots wait for actual bilateral allocation. Each -occupant considers positive foreign recipients Ecaz first, then ally, charging -at most one spice from an available current balance. A zero share or an old -wallet alone cannot establish eligibility; the owner never pays itself. Basic -shared-allocation Orgiz settlement remains pending. Occupant/payer ordering -is a recommended provisional interpretation, not a new publisher ruling or -separately answered numerical user question. +Shared Ecaz desert lots in both modes wait for actual bilateral allocation. +Each occupant considers positive foreign recipients Ecaz first, then ally, +skipping zero shares, self and empty purses. Advanced charges once per +territory. Basic applies its provisional positive-deposit count to the original +source-map reductions for that territory, excluding unchanged, empty and +unrelated keys. Available balances track every transfer and cumulative +overflow. Original allocation events prevent replay; no saved schema is added. +Occupant/payer ordering and Basic's mapping remain provisional recommended +interpretations, not new publisher rulings or separate numerical user answers. Current native fixtures preserve original armies, wallets, hands, alliances and phases. They use real setup, token placement, paid shipments, inspection, @@ -96,13 +98,15 @@ An exhausted pile leaves the later collector ineligible even with old spice. `tests/fixture-discovery-occupied-collection.ts`, `tests/discovery-occupied-collection-runtime.test.ts`, `tests/fixture-discovery-shared-orgiz.ts` and -`tests/discovery-shared-orgiz-runtime.test.ts`. Focused helper regressions cover -original storm-order payer selection, depleted purses, advisor exclusion and -zero actual collection. The six-file related union72/72, types/lint and app -build pass. Actual390px Finish shipment & movement produces phase7, -Ecaz8/Guild14 from7/10, two actual2-spice source receipts, one Orgiz transfer, -no decision, enabled Ready, no overflow and no browser errors. Basic shared -allocation, broader combined modules and full acceptance remain open. +`tests/discovery-shared-orgiz-runtime.test.ts`. Native Basic/Advanced cases +cover equal/full/zero Ecaz shares, acceptance timing, wrong actors and stale +allocation. Focused boundaries cover multiple Basic source keys, one Advanced +territory, exhausted recipients, foreign-ally fallback and cumulative overflow. +Final six-file union80/80, types/lint and app build pass. Actual390px Basic +Use equal split credits a real Red Chasm lot4, then transfers1: Ecaz7/Guild8 +become8/11; phase7 has no decision and Ready is enabled. No overflow or browser +errors. All four minimally configured policies complete the Basic equal split +through actual engine actions. Broader combinations/full acceptance remain open. ## Mixed E1/E2 and paired E3 Nexus — 7 October 2026 @@ -763,10 +767,11 @@ positive territory Collection. Multiple collected source keys do not multiply the transfer. Canonical positive ordinary deposit receipts identify actual foreign payers in original storm order, including multiple collectors in one sector; self and empty purses are skipped. No presence-based ambiguity gate -remains. Advanced shared Ecaz desert lots wait for actual bilateral allocation, -then consider positive foreign recipients Ecaz first, ally second. Basic -shared settlement remains pending. Ordering is provisional under the -recommended-option priority; the Advanced territory trigger itself is sourced. +remains. Shared Ecaz desert lots in both modes wait for actual allocation, +then consider positive foreign recipients Ecaz first, ally second. Advanced +charges once per territory; Basic uses its provisional count of actually +reduced source deposits in that territory. Ordering and the Basic mapping are +provisional; the Advanced territory trigger itself is sourced. Basic retains its recorded provisional one-transfer-per-positive-deposit interpretation. The context requires its existing public `advanced` boolean: @@ -880,9 +885,10 @@ conversion was fabricated. Basic provisionally charges once per positive deposit. The first actual foreign collector in storm order with available spice pays; mere presence, self and zero actual collection do not qualify. Empty purses never create - debt. Advanced shared Ecaz lots wait for allocation, then consider positive - foreign recipients Ecaz first, ally second. Basic shared settlement remains - pending; occupant/payer ordering remains provisional. + debt. Shared Ecaz lots in both modes wait for allocation, then consider actual + positive foreign recipients Ecaz first, ally second. Advanced charges once + per territory; Basic counts its actually reduced positive source deposits. + Owner/payer ordering and the Basic mapping remain provisional. - **Jacurutu:** one bank spice per opposing undialed physical counter actually sent to the Tanks. Unique readings remain automatic. For different possible @@ -1028,10 +1034,10 @@ to Spice Blow. Refresh restored the same station forces and private Snooper. This is targeted control/recovery evidence, not an unmodified complete game. The 187 opening saved rooms remain preserved; no server restart was needed. -1. Connect Basic shared-allocation Orgiz settlement and refine combined - Discovery interactions. Canonical ordinary receipts now close the guessed - shared-sector payer gap. Other recommended Discovery interpretations remain - visibly provisional; the Basic positive-deposit mapping is not certified. +1. Refine combined Discovery interactions. Canonical ordinary receipts and + actual bilateral shared settlement now cover both modes without guessed + payers or withheld Basic allocation. Recommended interpretations remain + visibly provisional; focused evidence is not complete-module certification. 2. Integrate combined modules and complete games, then refine interaction, strategy and presentation coverage before opening normal start gates. 3. Use the existing prototype starter and saved-room verification for further diff --git a/docs/IMPLEMENTATION_STATUS.md b/docs/IMPLEMENTATION_STATUS.md index e9087754..a4ffe3e0 100644 --- a/docs/IMPLEMENTATION_STATUS.md +++ b/docs/IMPLEMENTATION_STATUS.md @@ -1,5 +1,33 @@ # Dune implementation status +## 14 October 2026 — Native Basic shared Ecaz Orgiz settlement + +BEFORE: a genuine Basic equal split paid the real lot but withheld Orgiz: +Ecaz9/Guild10 instead of8/11. AFTER: `quoteSharedOrgiz` replaces the +Advanced-only quote and hook. Both modes use actual bilateral receipts. +Advanced charges once per territory. Basic counts original positive source-map +reductions in that territory, excluding unchanged/empty/unrelated keys. +Positive foreign recipients are considered Ecaz first, then ally; self, zero +shares and empty purses are skipped. Every transfer updates available balances +and checks cumulative income overflow. Existing allocation events retain their +one-time ownership; no saved schema or compatibility alias is introduced. + +Genuine Basic/Advanced fixtures preserve original armies, wallets, cards, +alliance and phases. Cases cover equal/full/zero shares, acceptance timing, +wrong actor and stale replay. Pure boundaries cover multiple Basic source +deposits versus one Advanced territory, exhausted-recipient fallback, self +exclusion, zero-share old wallets and cumulative overflow without mutation. +One invalid empty-key test fixture was corrected to an actual board sector. + +Final six-file union80/80, types/lint and app build pass. Actual390×844 Basic +table: Use equal split settles the real Red Chasm lot4 and then transfers1, +changing Ecaz7/Guild8→8/11, leaving phase7 with no decision and enabled Ready. +No horizontal overflow or browser errors. Easy/Medium/Hard/Brutal each complete +that Basic split through a real legal engine action; this is not calibration. +Owned hosts/tabs/scaffolding removed; proof outside Git. Existing build +warnings remain. Ordering and Basic's positive-deposit mapping are provisional; +combined modules, full modes, assurance and deployed acceptance remain open. + ## 14 October 2026 — Canonical positive Collection receipts for Orgiz The original ordinary quote now emits `deposits` with actual positive diff --git a/docs/RULE_DECISIONS.md b/docs/RULE_DECISIONS.md index 22f2eb0a..7640eba1 100644 --- a/docs/RULE_DECISIONS.md +++ b/docs/RULE_DECISIONS.md @@ -549,7 +549,7 @@ These are unresolved in the cited records. Do not infer an answer from elapsed t | Nexus responses and composition | Betrayal private-response timing, partial revival/payment choices, Emperor fewer-than-five, fresh advisor/storm cases, Duke restoration and remaining faction-specific combinations. Tleilaxu Secret Ally force accounting, leader slot/eligibility and force-only use remain unresolved after requested publisher/designer source searches; do not infer answers from native Tleilaxu revival or Ghola. | [Common boundaries](NEXUS_CARD_RULES.md#remaining-source-questions-and-release-boundaries), [Tleilaxu source search](NEXUS_TLEILAXU_RULES.md#source-search-follow-up) and individual faction source/runtime documents | | Moritani Atomics after alliance change | The publisher's persistent −1 hand-limit text names Moritani and “your ally,” but not whether the penalty follows a later ally, remains on the original ally or affects both. Requested online source searches found no clarification; the alliance-change case remains gated. | [Terror source boundary](MORITANI_TERROR_RULES.md#material-gaps-and-ordinary-compositions) | | Moritani Sneak Attack entry classification | The printed verb is “Send”; no retrieved ruling classifies the off-planet reserve transfer as a shipment for other arrival powers. The engine now **explicitly adopts** the supported shipment composition: a positive Sneak Attack in Shipment and Movement accrues the Heighliners token once for its owner, then offers the Bene Gesserit Intrusion (Advanced, with fighters present) and the free spiritual-advisor shipment, with the committed Terror entry resolving first; a zero-force resolution accrues nothing and opens no reaction. This order is an implementation interpretation, not a publisher ruling. | [Source boundary and adopted classification](MORITANI_ASSASSINATION_SNEAK.md#adopted-shipment-classification-7-october-2026) | -| Orgiz collection | Basic retains the publisher-p13 per-blow ambiguity and provisional one-transfer-per-positive-deposit mapping. Authorized supplied Advanced rulebook physical24 says each time Collection occurs in a territory containing spice: one transfer per actual positive territory Collection per fighter occupant, never extra transfers for multiple source keys. Canonical positive ordinary deposit receipts now identify actual payers, including co-present collectors; force presence and old wallets alone do not qualify. Under choose-recommended-option priority, owners and eligible foreign ordinary payers resolve in original storm order, skipping self and empty purses. Advanced shared Ecaz lots wait for actual allocation and consider positive foreign recipients Ecaz first, ally second; Basic shared settlement remains pending. Ordering is provisional implementation interpretation, not a separate numerical user answer or publisher ruling. No debt is created. | [Advanced source cutover and Basic boundary](DISCOVERY_PROTOTYPE.md#authorized-advanced-collection-wording) | +| Orgiz collection | Basic retains the publisher-p13 per-blow ambiguity and provisional one-transfer-per-positive-deposit mapping. Authorized supplied Advanced rulebook physical24 says each time Collection occurs in a territory containing spice: one transfer per actual positive territory Collection per fighter occupant, never extra transfers for multiple source keys. Canonical ordinary deposit receipts identify actual payers, including co-present collectors; force presence and old wallets alone do not qualify. Under choose-recommended-option priority, owners and eligible foreign ordinary payers resolve in original storm order. Shared Ecaz lots in both modes wait for actual bilateral allocation, then consider positive foreign recipients Ecaz first, ally second; Advanced charges once per territory, Basic counts actually reduced positive source deposits in that territory. Self, zero shares and empty purses are skipped; balances track every transfer without debt. Ordering and the Basic mapping are provisional implementations, not separate numerical user answers or publisher rulings. | [Advanced source cutover and Basic boundary](DISCOVERY_PROTOTYPE.md#authorized-advanced-collection-wording) | | Jacurutu physical dial | Under the 14 October choose-recommendation priority, the prototype selects the defeated-player exact ordinary/elite/paid reading before settlement. Unique readings remain automatic; actual returned counters never earn income. This replaces the earlier unpaid gap without claiming a separate numerical user answer or publisher ruling. | [Recommended runtime and source](DISCOVERY_PROTOTYPE.md#recommended-physical-dial-and-cumulative-storm-choices--14-october-2026) | | Testing Station contest/timing | The 14 October recommended prototype gives each non-advisor occupant one cumulative adjustment in original storm order, after the ordinary card window and before a single traversal. Original source/base and Weather immunity stay unchanged. Ordering/stacking is explicit provisional interpretation, not a newly found publisher answer. | [Recommended runtime and source](DISCOVERY_PROTOTYPE.md#recommended-physical-dial-and-cumulative-storm-choices--14-october-2026) | | CHOAM Secret Ally battle timing | The printed after-victory inspection is optional and the Nexus identity stays secret. The connected prototype chooses a uniform use-or-continue window for every winner when Nexus is enabled and CHOAM absent; nonholders pass, while a holder may decide after the result. This privacy-preserving prompt is a product inference, not publisher text. A holder-only pause would reveal custody and a precommitment would remove the printed choice. Ordinary Karama cancellation remains unestablished by retrieved sources; no response is invented. | [After-victory inspection boundary](NEXUS_CHOAM_SECRET_ALLY.md#after-victory-inspection-audit) | diff --git a/game/discovery-collection.ts b/game/discovery-collection.ts index 30201a5e..f6c1149d 100644 --- a/game/discovery-collection.ts +++ b/game/discovery-collection.ts @@ -286,35 +286,47 @@ export function quoteDiscoveryCollection( const SHARED_COLLECTION_RELEASES: readonly AdvisorRelease[] = []; -/** Advanced's one-territory event waits for the original bilateral allocation. - * Charge the first actual positive foreign recipient (Ecaz, then ally), never - * a guessed share, the owner itself, a city award or unavailable spice. */ -export function quoteAdvancedSharedOrgiz( +/** Shared collection waits for its original bilateral allocation. Advanced + * charges once per territory; Basic retains one event per positive deposit. + * Only actual positive foreign recipients qualify; current purses cannot owe. */ +export function quoteSharedOrgiz( context: DiscoveryCollectionContext, allocation: SpiceAllocationReceipt, balances: Readonly