Files
Dune/docs/BRIBE_CONTROLS.md
T
Quintine 91dcca46fb Connect ordinary bribe payments to player controls
Players can select a non-allied recipient and explicitly pay a whole-spice bribe
outside Mentat and open decision/response windows. The server derives private
payment limits from uncommitted spice and existing joint Truthtrance completion
checks on isolated copies. Target-specific Bureaucrat guards preserve supported
redirect/allow continuations. Reserved bids, sealed spending and incoming escrow
cannot be spent twice. No strategic AI negotiation or mode/publication changes.

The panel separates deferred incoming bribes from spendable supply, disables
stale/invalid selections and uses existing request/version fencing. The chronicle
now describes actual payment and next-Mentat spendability rather than a promise.
Internal guidance and the implementation checklist record this boundary. The
separate Emperor gift/Bureaucrat source ambiguity remains explicitly pending.

Independent review found no material issue. Focused tests cover out-of-turn
payment, JSON escrow/collection, private budgets, invalid targets/amounts,
phase/response gates, reserved bids, joint promises, supported redirection and
rendered controls. Existing Bureaucrat SQLite/all-four legal response tests pass.
The new HTTP test races duplicate submissions and verifies one debit, refreshed
private balances and stale/over-budget rejection.

Types, lint, all 4968 offline tests, production build and 49 HTTP tests
pass on stable source. Preliminary checks caught a typed fixture opener and
semantic-status/internal-link/template lint requirements and the new SSR test
needed the existing Vinext Link alias. All were corrected before the
final4 run. Browser QA used genuine fresh Basic setup with a human payer and
Easy AI recipient: 11 rejected by controls, 4 paid from10 leaving6, one public
payment entry and unchanged recipient spendable10 with4 in escrow after refresh.
Keyboard selection and amount access passed. At390px the panel fits with16px
text and44px-or-larger controls; linked rules and back navigation work. Screenshot
capture timed out; full visual/assistive and all-configuration acceptance remain
open. Browser transport loss was not injected; HTTP concurrency is separately
covered. This is playability evidence, not difficulty calibration.

All 1418 original rooms, 2991 seats and auxiliary rows are
unchanged. SQLite integrity and foreign keys pass. The healthy server was reused
without restart, migration, reset or recurring maintenance.

Private evidence: 20260921-bribe-controls.
Verified source tree: b9a8594c5dcd85f78974c9647f24f5f6eba60a38c9dcd2badcf4529d1e825ae1
2026-09-21 10:22:18 +10:00

3.0 KiB

Ordinary bribe controls

21 September 2026. A connected prototype exposes the existing authoritative ordinary bribe action beneath the table. This does not complete negotiation, Leader Skills or expansion acceptance.

Payment and controls

Choose a non-allied recipient and a positive whole amount, then explicitly pay. The payer loses spice immediately. The recipient's share is deferred until the next Mentat Pause; it is not current spending money. The public chronicle records the amount and recipient, while the panel exposes only its owning seat's supply and incoming escrow. Self/allied targets, Mentat payments and Inflation Double remain prohibited. Bribes are allowed out of turn at otherwise open boundaries.

These preserve the existing rules and Bureaucrat source contract. The official November FAQ, p. 9 places paid bribes in front of the recipient's shield until the next Mentat Pause. Chat messages and verbal promises do not themselves transfer spice. Emperor gifts to allies remain a separate power.

The server derives the owner's limits from existing uncommitted spice, excluding sealed bids, paid support, Banker spending and other reserved costs. Existing Truthtrance completion checks further constrain voluntary spending on isolated copies; this projection does not commit actions or live continuations. The target-specific Bureaucrat guard can cap unsupported combinations below five. Supported payments use the existing saved redirect/allow decision. A pending response, decision or forced continuation disables the payment controls.

The client retains an invalid amount or removed recipient as a disabled draft rather than silently changing a payment. The explicit action uses existing request/version handling: concurrent or stale submissions cannot debit twice. After an uncertain result, reconcile the game before making another payment. Only committed game state survives refresh; unsubmitted form drafts do not.

Verification and remaining work

Focused tests cover out-of-turn transfer, JSON escrow/collection, private owner budgets, target and integer validation, phase/response restrictions, auction reservations, max/max-plus-one Truthtrance spending, Bureaucrat continuation and rendered controls. Production HTTP checks exercise concurrent duplicate payment, stale rejection, refresh and private views; existing Bureaucrat SQLite and all four legal AI response tests remain applicable. Source-bound checks, browser observations, preservation, independent review and Git delivery are retained with the private checkpoint.

AI seats can receive and later spend bribes through ordinary resource handling; existing Bureaucrat choices remain legal. Automated negotiations and strategic bribe initiation wait for the post-feature AI stage. Textual deals are not automatically enforced. Complete negotiation, responsive/assistive acceptance and all legal expansion combinations remain open.