Files
Dune/docs/NEXUS_OFFERS.md
T
Quintine 2b071a44a2 Connect live Nexus offer withdrawal and named alliance history
An unallied sender can withdraw its unanswered offer during an ordinary Nexus.
The table names the outgoing recipient and keeps this distinct from breaking a
formed alliance. The chronicle now records named proposals, withdrawals and
breaks. Existing authoritative quote, timing locks, readiness, physical custody,
Nexus-card forfeiture and request/version handling remain unchanged.

Full-table rendering checks cover owner/recipient/observer controls, replacement,
withdrawal, incoming offers, break, blocked timing and JSON continuation. A
production SQLite race permits exactly one acceptance or withdrawal at a version;
a stale withdrawal cannot break an alliance formed by the accepted request.
Private restored views and seat credentials remain intact. All four current AI
profiles retain legal participation; no strategy or calibration changes.

Independent review found no material issue. Types, lint, all 4973 offline
tests, production build and 49 HTTP tests passed on stable source.
Browser QA used a fresh three-human Basic lobby, genuine setup and a controlled
later-Storm boundary with existing Spice Cards reordered; actual Storm/Worm
resolution opened the Nexus. This is a focused position, not a full-game sample.
Browser proposal, refresh, keyboard withdrawal, retained incoming invitation,
acceptance, break and named chronicle entries passed. At390px the page375px and
withdraw339px by46px fit, with16px text. Final refresh restored no offers or
alliances. No screenshot was captured; full visual/assistive and all-configuration
acceptance remain open. Browser lost-response injection was not performed.

All 1459 original rooms, 3081 seats and auxiliary rows are
unchanged. SQLite integrity and foreign keys pass. The healthy server was reused
without restart, migration, reset or recurring maintenance. Full rules and
expansion completion remain gated. The goal retains deferred full AI development,
three adjacent approximate75% targets, no usage cutoff, selective subagents and
verified Git pushes.

Private evidence: 20260921-nexus-offer.
Verified source tree: e44e61b651e66cad23326bcca3ba2eecd6bb5a779a16e0273db8d0039f453511
2026-09-21 10:47:06 +10:00

41 lines
2.5 KiB
Markdown

# Live Nexus alliance offers
21 September 2026. Ordinary Nexus negotiations now show the owner's named
outgoing offer and let an unallied sender withdraw it. This connects an existing
engine action that previously had controls only in the introduction.
Choose a partner to propose or reciprocate an invitation. Until both agree,
each player remains unallied. The sender may replace the offer or use **Withdraw
your alliance offer**. Withdrawal clears only that player's outgoing offer;
another player's invitation can remain. Existing partners still use **Break
alliance**, which ends their alliance during the Nexus.
The public chronicle distinguishes proposals, withdrawals, formation and breaks.
The player view already exposes ordinary alliance offers; no additional private
information is disclosed. Existing Nexus timing, Homeworld restrictions, Nexus
card forfeiture, readiness reset and authoritative version handling are unchanged.
The underlying [ordinary quote](../game/nexus-alliance.ts) retains the settled
base [rulebook](https://www.gf9games.com/dunegame/wp-content/uploads/Dune-Rulebook.pdf)
contract; this is a control and feedback change, not a new alliance ruling.
A saved unanswered offer remains withdrawable after refresh. If acceptance and
withdrawal race, only one action can commit at that version. A stale withdrawal
is rejected rather than breaking an alliance that formed in the meantime; the
updated table provides the current choices. Unsaved partner selection is only
a local draft. Pending Truthtrance and other response/decision controls preserve
their existing locks.
Focused rendering and engine checks cover sender/recipient/observer views,
replacement, withdrawal, break, incoming-offer preservation, named history,
blocked timing and JSON continuation. A production SQLite case races acceptance
and withdrawal through independent room-module instances, then restores each
seat and verifies unchanged resources, private fields and credentials. Existing
AI profiles retain legal participation; strategy has not been tuned.
The fixture completes genuine three-player Basic setup, then stages a later
Storm boundary and reorders existing Spice Cards. Real storm and worm/blow
actions open the test Nexus. This is a focused position, not a complete first-turn
simulation. Final browser, source-bound checks, preservation, independent review
and Git evidence remain in the private checkpoint. Full diplomacy, special
alliance powers and all expansion/visual acceptance remain unfinished.