Allow Sapho first while preserving unspent Guild timing
At a clean unstarted non-Guild movement boundary, Sapho FIRST now reorders the remaining turn queue and reopens the native Advanced Guild choice. Guild may take its turn ahead or wait while all non-Guild turns retain their relative order. Protect an already granted current Guild turn, keep canceled timing locked and preserve completed turns, payments and last protection. Existing discard continuations and minimal policy options need no new state or signature format. Explain the provisional precedence in the controls and reference. Validation:7-file97/97, types/lint/build and six original-action/rendered-table programmes. Actual cache1 Sapho, original Guild wait/take, paid completed Richese prefix, Emperor2/Guild1 shipments and native phase completion. An actually dealt Karama cancels TAKE without its privilege being revived; a granted current turn cannot be displaced. Four profiles make eight legal holder/Guild proposals. Corrected an obsolete first exclusion and a fixture that mistook a later response pass for a repeated movement turn; exact failures and then the whole batch pass. This nonconflicting composition is provisional. Actual competing first, partly completed turns, other ordered actions, direct combined Semuta claim/capture, full modes, final assurance and browser/deployed acceptance remain open. No saved-room/database/reset/restart/deployment operation.
This commit is contained in:
1 parent
84200ebc74
commit
2d89ddb6e1
10 files changed
+469
-16
No files matched your search
@@ -9,8 +9,74 @@ it is not a newly located publisher answer. Other timing questions remain open.
|
||||
The [Battle-phase ordering prototype](SAPHO_BATTLE_ORDER.md) adds first/last
|
||||
remaining battle choices. Its separate chooser, phase priority and saved-boundary
|
||||
contract supersede the earlier absence of that mode below. The
|
||||
[early aggressor prototype](SAPHO_AGGRESSOR.md) now uses the existing shared
|
||||
pre-plan opportunity; later aggressor intervention remains unfinished.
|
||||
[aggressor prototype](SAPHO_AGGRESSOR.md) now includes clean late intervention
|
||||
and a fixed public final opportunity in fresh Richese battles; old battles keep
|
||||
their early protocol.
|
||||
|
||||
## First while the Advanced Guild remains — 18 October 2026
|
||||
|
||||
**Prototyped / Partial.** The physical face changes ordered turns and explicitly
|
||||
supersedes Guild only for last. The [source review](JUICE_OF_SAPHO_SOURCE_UPDATE.md#movement-firstlast)
|
||||
and [Guild audit](JUICE_OF_SAPHO_ENGINE_AUDIT.md#movement-and-guild) distinguish
|
||||
ordinary reordering from a competing first declaration. No publisher answer
|
||||
settles that conflict. Under the standing recommended-choice instruction, the
|
||||
new composition provisionally admits a nonconflicting first after Guild waits,
|
||||
while preserving its native next-boundary timing. This is an implementation
|
||||
interpretation, not a retrieved official ruling or unconditional first priority.
|
||||
|
||||
At a clean boundary before any remaining combined turn starts, the holder may
|
||||
move first in the native remaining queue even while Guild has an unspent turn.
|
||||
The existing native timing choice then opens before that reordered turn. Guild
|
||||
may take its own turn first or wait, retaining the relative order of every
|
||||
non-Guild participant. Existing `guildTimingGranted` permission stays recorded;
|
||||
waiting does not consume it or create another Karama response. An ungranted
|
||||
out-of-order timing attempt retains its original response. A granted current
|
||||
Guild turn remains unavailable for displacement. A Karama-locked timing privilege
|
||||
stays locked: Sapho changes order independently without restoring that advantage.
|
||||
|
||||
The queue still includes only unfinished turns. Earlier completed turns, paid
|
||||
shipments, movement allowances and physical storm order do not reset. Existing
|
||||
pending decisions/responses, partly completed turns, reserved cards, no-op checks
|
||||
and Sapho-last protection remain. No new game marker or signature format is
|
||||
introduced. Reorder and discard before entering native timing; the existing
|
||||
Semuta suffix does the same only after original disposal finishes.
|
||||
|
||||
The hand panel explains that Guild can still go ahead, and existing minimal
|
||||
policies consume the authoritative options. Frozen **7 files97/97**, types/lint/
|
||||
build and six original-action/rendered-table programmes pass. Actual public
|
||||
host/setup, original dealt Atreides Karama, cache1 and native wait use49 source
|
||||
actions. A real paid Richese1 Polar Sink prefix costing2 and explicit end uses55.
|
||||
TAKE/WAIT with and without that prefix use12–14 continuation actions; Emperor2
|
||||
and Guild1 shipments pay once, non-Guild order remains and every turn ends.
|
||||
Granted-current and canceled-TAKE branches fork from48 source actions before
|
||||
that wait, use3/2 native choice actions and11/7 continuations to finish the phase.
|
||||
The canceled privilege remains locked with its real Karama discarded once.
|
||||
Four profiles make eight legal holder/Guild proposals without strategy tuning.
|
||||
|
||||
Only unopened original starting-deal/Spice positions and scalar lotteries are
|
||||
selected. No postdeal hand, force, wallet, queue, phase or timing receipt is
|
||||
installed. Actual GameTable and isolated Sapho controls render offered/busy,
|
||||
renewed native Guild choice, granted-current and locked states. Framework aliases
|
||||
and CSS stubs mean no browser clicks or visual/deployed acceptance.
|
||||
|
||||
Frozen feedback repaired two fixture assumptions: an old LAST regression also
|
||||
expected first to remain excluded, and a completed Richese could still allow
|
||||
another faction's later response without repeating its movement turn. The
|
||||
exact two failures pass, then all97/types/lint/build/runtime pass together.
|
||||
The bounded source/continuation review found no need for another saved field
|
||||
or continuation. No application rule repair followed frozen feedback.
|
||||
|
||||
Private proof: `/home/quintine/.local/share/dune/checkpoints/20261018-sapho-guild-first/frozen-integrated-2/report.json`,
|
||||
base `84200ebc7448bbefa788158408bb389b722ee8f0`, tree
|
||||
`0f03e96546e48e9ae3a355b4935e72685c9b891dbde0fcdd15d31a03f63ef4ea`.
|
||||
The report binds the unchanged implementation/control/test source. Final
|
||||
checkpoint prose/reference evidence is a separately reviewed overlay; private
|
||||
`documentation-overlay.json` and `git-result.json` bind it to the pushed revision.
|
||||
|
||||
Direct combined Semuta claim/capture, actual competing first, partly completed
|
||||
movement and other ordered actions remain open. Full-mode, browser/deployed and
|
||||
final assurance acceptance is separate. No saved-room/database, reset, restart
|
||||
or deployment operation is part of this checkpoint.
|
||||
|
||||
## Cyclic ordinary and Black Market bidding — 18 October 2026
|
||||
|
||||
@@ -107,7 +173,7 @@ tests stay identical to the frozen proof.
|
||||
`{type:'card',card:'richese-juice-of-sapho',scope,event,mode}` accepts one of these current opportunities and discards the actual held card once:
|
||||
|
||||
- `scope:'onceAround'`: first or last while the holder has not acted and the change reorders a still-unacted bidder. Earlier bids remain committed. The intervention applies to this lot only. Prior bids, funding, completed participants, physical lot, event and storm tie order remain intact. Richese is not restored to last after Sapho. A holder excluded initially by a full hand gains a slot and eligibility by discarding Sapho, provided this lot is still open. Completed passes never reopen. Every purchase still requires a strict outbid.
|
||||
- `scope:'movement'`: reorder entire remaining combined shipment/movement turns at a clean boundary. First requires every remaining turn to be unstarted; previously completed turns may retain their spent shipment/movement counters. In Advanced, Guild must be absent or have fully completed its turn and left the remaining queue. Last remains after Guild, including later Guild deferrals. No movement counters, Hajr, transport pricing, concealed tokens, resources or completed turns reset. Existing shipment/movement/preparation, reaction, Truthtrance, paid Box and gift commitments block the intervention. The next actor retains an already settled Guild timing choice when their identity is unchanged. An already granted, unstarted early Guild turn is lifted to the front of the local remaining queue before applying last, without changing physical order; this also permits Guild itself to declare last. A player now actually last cannot spend the card on a no-op.
|
||||
- `scope:'movement'`: reorder entire remaining combined shipment/movement turns at a clean boundary. First requires every remaining turn to be unstarted; previously completed turns may retain their spent shipment/movement counters. In Advanced, Guild retains its native next-boundary timing even while unspent; it may still take its turn before the reordered holder. An already granted current Guild turn is protected. A Karama-locked privilege stays locked. Last remains after Guild, including later Guild deferrals. No movement counters, Hajr, transport pricing, concealed tokens, resources or completed turns reset. Existing shipment/movement/preparation, reaction, Truthtrance, paid Box and gift commitments block the intervention. The next actor retains an already settled Guild timing choice when their identity is unchanged. An already granted, unstarted early Guild turn is lifted to the front of the local remaining queue before applying last, without changing physical order; this also permits Guild itself to declare last. A player now actually last cannot spend the card on a no-op.
|
||||
|
||||
The reusable immutable `ordered-opportunity` helper checks unique IDs, exact remaining/completed partition, stable event and locked current/protected-last positions. It never defines card scope or cyclic timing. Movement protection persists as `saphoMovementLast:{event,turn,player}`, checked on action, normalization and projection, and cleared when its owner finishes. Normal storm order is never rewritten. Invalid records are rejected, not repaired by replaying turns.
|
||||
|
||||
@@ -136,8 +202,9 @@ Browser and final regression outcomes from 7 September are recorded in the histo
|
||||
The [existing source contract](JUICE_OF_SAPHO_SOURCE_UPDATE.md#movement-firstlast)
|
||||
already permits reordering the remaining unstarted participants between complete
|
||||
combined turns. The old global completed/shipped guard was narrower than that
|
||||
contract. The engine now checks only remaining participants and only retains the
|
||||
Advanced Guild-first guard while Guild is among them. No new timing ruling,
|
||||
contract. That checkpoint checked only remaining participants but retained the
|
||||
Advanced Guild-first guard while Guild was among them; the 18 October section
|
||||
above supersedes that blanket exclusion. No new timing ruling,
|
||||
saved field, player action shape or separate AI legality calculation is added.
|
||||
|
||||
Four new engine tests cover a real completed shipment before first, a genuine
|
||||
|
||||
Reference in new issue
Block a user