40 KiB
Juice of Sapho: finite ordering implementation
Recovered Sapho after suspending an already-started Movement turn — 28 October 2026
Prototyped / Partial. A holder who used Last to suspend its own already started combined turn can recover the physical Sapho and use First to resume that same turn. Previous shipment and movement remain spent; the replay grants no second allowance. If another player's turn has started, that player finishes first. A current Guild grant remains protected. The same holder's earlier Last protection is released, while another holder cannot replace it. The precedence is a provisional online interpretation of the printed card.
Two native Basic programmes exercise real shipment, Last, paid Box recovery, First, discard reactions and completion, both before and after the next player starts. Box possession is staged by a conserving exchange. Seven related files pass 51 cases. A further Sapho order query while the resumed holder waits behind another started actor remains guarded; wider combinations, browser and deployed acceptance remain open.
Recovered Sapho after the same holder's Last — 28 October 2026
Prototyped / Partial. An unstarted holder who previously used Sapho to go last may recover that physical card with Nullentropy Box and use it again to go first among the remaining combined Movement turns. The fresh use removes that same holder's Last protection, preserves completed turns and respects an already-started current actor and the Guild's existing timing. Semuta discard responses still finish through the original continuation. Another holder may not replace the protected Last under this bounded policy. The later section above extends replay to the same holder's suspended started turn.
The printed card has no stated once-per-turn limit; choosing how a later use interacts with an earlier protected position is a provisional interpretation, not a publisher clarification. A native Basic game covers Sapho's purchase, Last play, paid Box recovery and First replay; Box possession is staged by a conserving exchange with the unopened cache. Five related files pass 44 cases. Broader combinations, browser and deployed acceptance remain open.
Own started Advanced Charity turn — 27 October 2026
Prototyped / Partial. At a clean boundary in ordered Advanced Charity, the current holder may use Juice of Sapho to pause its own started opportunity and resume it last among the remaining turns. Its accepted claim and actual payment remain in place; the same opportunity resumes without a second claim or refund. Pending responses and other preparations must finish before the order changes. Another holder cannot displace a different player's started turn and may reorder only the later unstarted tail.
The first actual own-started suspension upgrades the order frame to version 3, recording the paused player alongside the original public Sapho use history. The started marker returns when that player becomes current again. Existing version 1 and 2 frames retain their prior format until a qualifying suspension; Basic and already-opened unstamped concurrent Charity phases stay unchanged.
The Sapho face permits first or last in an ordered phase or action but does not specify suspension of a partially completed Charity opportunity. This is a provisional online composition, not a publisher clarification. It supersedes the earlier own-started Charity exclusion; wider interactions, full rules and browser/deployed acceptance remain open. Native Charity order.
Own started Advanced Revival turn — 27 October 2026
Prototyped / Partial. At a clean boundary in ordered Advanced Revival, the current holder may use Juice of Sapho to pause its own started opportunity and place it last among the remaining turns. Its earlier completed returns, paid spice, native force and leader allowances and physical pieces remain unchanged. The same opportunity resumes, without a second allowance. Pending requests, responses and other preparations must finish before the order can change.
The first actual own-started suspension upgrades the order frame to version 3, recording the paused player alongside the original public Sapho use history. The started marker is restored when that player becomes current again. Existing version 1 and 2 frames retain their prior format until an actual qualifying suspension. Older concurrent Revival phases and Basic remain unchanged.
The Sapho face permits first or last in an ordered phase or action; it does not specify suspension of a partially completed Revival opportunity. This policy is a provisional online composition, not an official clarification. It supersedes the earlier own-started Revival exclusion below. Nested interactions, full rules, browser and deployed acceptance remain open. Native Revival order.
Own started Advanced movement turn — 27 October 2026
Prototyped / Partial. The clean-boundary own-turn Last option now extends the existing Basic policy to Advanced Shipment and Movement. The holder may voluntarily suspend its own already-started combined turn and resume that same opportunity after the remaining turns. An already completed shipment or move, its cost, physical pieces and used movement allowance stay in place; the suspended turn is neither completed nor replayed. The card is unavailable if the holder is already last or the action cannot meaningfully change the queue. Pending responses and preparations still have to finish before this boundary.
The actual Advanced Guild retains its native timing decisions and any existing Karama lock. Last is protected behind that Guild opportunity. A Guild player may voluntarily suspend its own started turn; another holder cannot displace an already granted current Guild turn and may instead reorder the later unstarted tail. Physical storm order and completed opportunities do not change. This movement rule does not extend to Charity or unfinished nested interactions; Revival has the separate provisional suspension described above.
The inspected Sapho face permits first or last in a turn-ordered phase or action, but does not state whether or how an already-started combined turn can be suspended. This is a provisional online timing composition under the standing choose-recommended direction, not a publisher clarification. It supersedes earlier Advanced-only started-turn exclusions below. Broader combinations, complete modes and browser/deployed acceptance remain open. Earlier Basic source boundary.
Truthtrance order in Richese cache auctions — 27 October 2026
Prototyped / Partial. The possession-independent public response following simultaneous Truthtrance declarations also opens in a clean live Richese cache Once Around or Silent lot. It preserves the original offered card, standing bid or sealed submissions, bidder order, funding, escrow and aid while the ordered questions finish, then returns to the same auction. Silent amounts stay private until the native reveal. The response does not inspect who holds Sapho.
In the supported Basic Semuta preview, a fresh-discard claim or pass can suspend the question queue after Sapho is used or after a subsequent definite Truthtrance answer consumes its card. These new continuations bind the original cache event and parent; old receipts without the new marker retain their prior signature shape. This does not certify historical recovery or wider combinations.
The FAQ and Sapho face establish their individual rules, but not their relative precedence; this combined timing remains provisional. Black Market, Ix lots, battle, nested response windows and broader modules remain open. Browser and deployed acceptance are also open.
Basic and Advanced runtime fixtures start a native funded cache lot, then use explicitly labeled, conserved exchanges for cached Sapho and optional Semuta, plus an undealt Truth placed in a vacant hand slot. They do not represent Sapho as an earned purchase. Runtime and server-rendered controls exercise Once Around and Silent continuations, private sealed views and physical inventory. Sixteen related files pass 165/165; type/lint, build and 55/55 isolated local HTTP integration tests pass.
Truthtrance order in ordinary bidding — 27 October 2026
Prototyped / Partial. The public Sapho response after simultaneous Truthtrance declarations now also opens at a clean live ordinary lot. The original lot, card, actor, standing bid, pass order and aid remain native. A Semuta claim/pass temporarily suspends the question queue and binds that original auction and aid ledger in the continuation; the separate trusted clock is deliberately not signed or reset. It pauses throughout Truth and Semuta, then resumes the same bidder's remaining time once the questions end.
The physical Sapho cost must retain an earlier whole-turn answer. Detached feasibility quotes reserve the actually queued Truth cards; they cannot be borrowed as generic Distrans payloads after the live window is temporarily removed from a forecast. This is a conservative guarantee, not a new publisher ruling. Other special auctions, battle, nested response windows and broader modules remain outside this slice. The FAQ and Sapho face establish the individual rules; their relative order remains a provisional implementation choice.
Original Basic/Advanced public setup earns Sapho and reaches an unbid or an actual standing-bid lot; labeled conserved physical card swaps give a queued holder Truth or Semuta. Controlled-clock cases exercise time spent in ordering, Semuta and original questions, followed by the real timeout. A separate labeled whole-turn promise test verifies its actual legal Distrans route and rejects using the last required card. Thirteen affected files pass 136/136; type/lint, build and 55/55 isolated local integration tests pass. Browser and deployed acceptance remain open.
Simultaneous Truthtrance order — 27 October 2026
Prototyped / Partial. The GF9 November 2020 FAQ p8 orders simultaneous Truthtrances by storm order. The inspected printed Sapho face permits first/last in a turn-ordered action; it does not expressly resolve their precedence. The combined rule is therefore a provisional interpretation.
After declarations and storm sorting, a public response window opens when at least two distinct players queued Truth cards in a supported clean parent. The window depends only on public declarations and configured deck, never on who holds Sapho. Every holder may continue without changing order. A holder with an eligible physical Sapho may instead discard it to move their entire question group to the first or last position. No-op modes are unavailable; the opaque public event and revision reject stale/duplicate actions. The actual physical storm order, same-holder card order and already completed parent state remain. An earlier Sapho first/last position is provisionally protected if Semuta recovers the card for another unpassed holder; a compatible opposite-end move remains available. When all holders respond, the original first question proceeds. Four minimal bot profiles can legally pass. Existing saves already asking do not gain a new step.
In the supported bare Basic Semuta preview, the original discard event opens a neutral Semuta reaction and suspends the Truth window; claim/pass restores the same queued event or proceeds to the first question when the last holder used Sapho. The full parent signature, original queue and physical card custody are checked without replaying the effect. The original scope excluded live auctions and battle; the ordinary and cache-auction extensions above now apply. Battle, other special auctions, active pending responses/preparations and broader Semuta/module profiles remain open rather than treating the restriction as printed rules. Wider repeated-card combinations, browser, deployed and complete-mode acceptance remain open.
Runtime tests use a genuine native Basic/Advanced setup and an earned Sapho, then explicitly swap conserved dealt cards to give its holder an original Truth card. Basic Semuta claim/pass uses a separately labeled conserved cache/hand swap. Server-rendered actual table controls and their callbacks are exercised; stateful browser hydration is not. Eleven affected files pass 137/137, type/lint and build pass, and 55/55 integration tests pass against a separate local verification server.
Updated 26 October 2026. Partial card implementation; full modes and publication acceptance remain gated. The earlier source audit remains the printed-evidence baseline. The current-lot prototype below selects an explicit provisional cyclic convention under the 14 October choose-recommended direction; it is not a newly located publisher answer. Other timing questions remain open.
The Battle-phase ordering prototype adds first/last remaining battle choices. Its separate chooser, phase priority and saved-boundary contract supersede the earlier absence of that mode below. The aggressor prototype now includes clean late intervention and a fixed public final opportunity in fresh Richese battles; old battles keep their early protocol.
Future printed-use commitment — 27 October 2026
Whole Truthtrance questions can now name actual printed Sapho use after answering in this turn. They do not fix a scope/mode/result. Current native options and an upcoming original Movement quote share the original resources; only a current exact option becomes an action guide. Native no-op, Guild, retained-current and own-started-turn policies remain. No lasts to turn end, independently of Movement expiry. Other future ordering calendars remain partial. Contract and evidence.
Ordered Advanced Revival — 26 October 2026
Prototyped / Partial. First/last now applies to the unfinished opportunities of the native Advanced Revival. A clean unstarted current player may move last; another unstarted holder may move first or last. If a native request has started the current opportunity, visibly provisional queued timing keeps that participant first and changes only its later unstarted tail. Completed turns stay complete; native quotas, requests and physical First Player order remain. Basic and older concurrent phases receive no invented sequence.
The original card disposal implementation upgrades that phase to validated version2 use history. The later own-started suspension above upgrades to version3. Original version1 frames retain their bytes and native behavior. Current actor, completed/remaining opportunities and started state bind the exact event and use revision. The opted-in Semuta continuation claims or leaves the physical discard before the same queue resumes. A legal recovered card can be used again at a new meaningful position; there is no extra once-per-phase cap. Shared options feed existing minimal policies and named clean/queued controls. Native/source and controlled continuation evidence remain distinct in the linked contract; full card/mode/deployed acceptance remains unfinished.
Order after a started combined turn — 25 October 2026
Prototyped / Partial. The printed card permits first/last in a turn-ordered phase/action. The source review finds no entitlement to split an already-started combined shipment/movement turn. Under the 14 October choose-recommendation authority, adopt its bounded recommendation: retain that current actor and reorder only later unstarted turns. The current actor finishes normally; the changed tail then takes effect. This is visibly provisional online timing, not a new publisher clarification.
An unstarted holder at a clean boundary after another player's actual shipment or movement may go first among the tail, or last including after Guild. It cannot displace an active Guild, replay a completed turn, reset shipment/movement counters or intervene during unresolved card, arrival, payment or movement preparations. Existing last protection and no-op rules remain. Advanced Guild receives its native next-boundary choice; moving first in the tail does not consume or suppress that privilege. The separate later own-started policy above permits voluntary suspension by the current holder.
The pure movement-order quote binds the
original phase event, current actor and whole remaining public order in the
queued action event. Its returned last protection retains the original
movement:turn event. The owner-only option adds display metadata afterCurrent;
human and minimal bot actions explicitly send only card/scope/event/mode.
Persistent controls name the actor who must finish. Existing clean options and
physical storm order remain. Semuta's new optional continuation field keeps
that same current actor through the original discard claim/pass; absent-field
legacy continuation/signature bytes retain their original path.
This historical scope superseded the earlier blanket partly-completed-turn exclusion for an unstarted different holder behind the current actor. The later own-started Basic and Advanced policies above add a separate voluntary clean-boundary suspension; no new ordered phase is invented. Wider combinations, full modes and final assurance/deployed acceptance remain open.
Frozen 11 files, 133/133, types/lint/build and eleven actual engine/ GameTable SSR/isolated button-callback journeys pass on unchanged source. New helper8, controls6 and engine14 cases cover native Basic/Advanced first/last, actual paid current shipment, unchanged current resources/counters, native Guild Take/Wait, old-event/no-op/active-holder rejection, exact metadata-free actions, all four minimal profiles and Semuta claim/pass.
Seven native journeys genuinely earn the cache1 purchase, then ship one actual counter before intervention. Observed source prefixes are Basic46/Advanced53; the original granted Guild source55 pays one spice for its native shipment. All original four turns finish once in8–13 continuation actions and retain45 physical cards. Four separate Basic/Advanced Homeworld supplements inherit explicitly controlled conserved Sapho/Semuta custody, rather than earning those cards. They then make a real paid shipment, stage the used Sapho and claim/pass through the exact current-turn continuation. Their source counts are recorded per journey; no native acquisition is claimed for that supplement.
First related proof125/133 reveals a real preparation-only guard omission and
legacy blanket-started expectations. A Hajr/preparation without actual shipment
or movement remains blocked. Revised old tests retain stale original-quote
rejection, actor/counter/grant identity and cost preservation. A cyclic test
finishes the existing public discard response before its next bid. Test typing,
an unused import and a redundant copy are repaired without relaxing legality.
Private frozen report: /home/quintine/.local/share/dune/checkpoints/20261025-sapho-started-lint-fixed/report.json;
journeys/HTML: adjacent 20261025-sapho-started-runtime/. No saved rooms,
databases, server, resets, restarts, deployment or recovery campaign is touched.
Broader combinations, complete modes, hydration/browser/mobile/deployed and
final assurance remain due. The engine/SSR evidence does not certify them.
Evidence: native and labelled supplemental sources,
engine cases,
quote cases,
controls/callback cases.
Extortion payer order — 18 October 2026
First/last now has a provisional adapter for native Moritani Extortion's unanswered payer suffix. Earlier declines, collected bank5 and the one-payment3 limit remain; every use expires the previous native payer event even when the next player does not change. The canonical source, controls and continuation contract records original order replay, payment/recovery and the unchanged placement-first policy. Other pending decisions are not general Sapho interruption windows.
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 and Guild audit 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
The physical face offers first/last in an ordered action; the publisher's Once Around FAQ does not determine duration in cyclic bidding. The source review identifies one upcoming circuit, the current lot and the whole phase as different possible readings. Provisionally choose the current lot, anchored at the actual next bidder when Sapho is played. This supersedes the old software exclusion within ordinary normal auctions and native Advanced normal Black Market. It does not alter Silent bidding, native Black Market eligibility or extend a choice across the phase.
A holder with a pending eligible bid can move first/last in the full local cycle. Keep other seats' relative cyclic order, including high-bid, passed and currently full placeholders that could become relevant later. The next actor is the first eligible unpassed seat other than the high bidder. A passed holder waits for a real raise; a high bidder has no current pending bid to reorder. These are explicit next-opportunity prototype boundaries, not extra printed restrictions. Compare full effective cycles for no-op rejection: a last pending bidder may still move behind a skipped seat that can reenter after a raise. A mere rotation with the same next actor and effective cycle cannot consume the card.
Discarding the real card frees a hand slot before determining holder capacity. A native full-hand Black Market seller retains its existing paid-retention eligibility through the shared quote. Sapho does not change the physical lot, standing bid, bidder, allied funding or passed list. Both native advancement loops skip passes until a genuine raise clears them. Every new bid must still strictly exceed the standing amount; Sapho supplies no standing-price purchase.
The ordinary auction retains a per-lot saphoOrder; the physical g.order and
original opener stay unchanged, and the next lot removes the override. A normal
Black Market retains saphoOriginalOpener before changing its local cycle, so
both settlement consumers resume the following normal pool from the original
physical source. Existing same-lot unfunded-payment recovery retains the new
cycle without revising its separate provisional payment policy.
Owner controls expose scope:'cyclicAuction' with the server event and first/
last mode, explain this provisional duration and keep blocked reasons readable.
The existing minimal bot adapter consumes the same options without new strategy
or hidden hand inspection. The optional cyclic tag on the existing Sapho discard
continuation binds its native lot and does not run a bid during disposal. Legacy
Once Around signatures and their normal resume suffix stay unchanged.
The frozen batch passes 10 files134/134, types/lint/build and eight finite original-action/rendered-table continuations from four public setup sources. Actual cache1 purchase uses33 Basic/38 Advanced source actions; native next-turn Black Market uses81, including the accepted original Emperor circle5 choice; a full hand built through two further normal1 purchases uses44. First/last continuations use10–18 actions: prior1 stays funded, the actual holder raises2, rival raises3, holder wraps to4, and native purchase pays4 once. Black Market pays its seller4 and resumes the original next opener; ordinary lots rotate normally, while the full-hand final lot correctly enters Revival. Eight minimal policy proposals remain legal. Another original-action case keeps prior passes through Sapho, rejects the standing-price bid and reopens passes only on a real raise. Nine controlled pure tests cover full cycles, no-ops, strict funding/ termination and post-sale opener/override quotes.
The first batch exposed an original fixture assumption: turn2's native Storm made the holder already first after its initial raiser. A real pre-start circle choice supplies the intended independent pending opportunity. Its completion predicate also had to follow the actual intervening cache-first lot before asserting the following normal pool. No live order/card/fund/clock injection or engine repair followed this feedback. Original unopened Spice positions/scalar lotteries and the explicit lobby circle choice are selected source conditions.
The external rendered smoke initially assumed default history showed the full new log and that every completed lot had a next lot. It now checks the actual accepted event separately, renders offered/busy/passed controls, and permits the full-hand final lot's native phase close. Only that smoke was rerun after those external-only repairs; all application source stayed identical to the passing 134/134/types/lint/build checkpoint. The aggregate report records exact child report provenance rather than claiming those checks were repeated. A bounded read-only source/consumer review found no concrete implementation defect.
Actual GameTable and isolated offered controls render with enabled and busy states. No browser click, visual or deployed acceptance is claimed. Direct combined Semuta claim/capture, other ordered phases, first-versus-Guild, partly completed movement, later aggressor intervention, full modes and final assurance remain open. No saved-room/database/reset/restart/deployment operation.
Private artifacts: /home/quintine/.local/share/dune/checkpoints/20261018-sapho-cyclic/.
frozen-integrated-final/report.json combines passing tests/types/lint/build
from frozen-integrated-2 with runtime-repaired-2, all at base 561152d and tree
506a6b698ff5c791a1f05a0700450dc6d13837516ecdef6a8f9d3d5eee752bd3.
runtime-smoke.json and private rendered HTML retain actual source/continuation
counts and controls. Final checkpoint prose/reference evidence is a documented
post-proof overlay; documentation-overlay.json and git-result.json bind that
reviewed overlay and pushed revision. Relevant helpers, engine, controls and
tests stay identical to the frozen proof.
Implemented contract
{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 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.
Owner-only saphoOptions supplies permitted actions to the hand panel and every AI level. It inspects only that owner's custody and public scope/timing. Other player views contain no possession-derived reaction flag. Played protection is public. A no-op does not consume the card. Unreserved canonical custody and exact allowed fields are checked server-side, and room version CAS prevents duplicate play and stale continuation.
All four AI levels consume the same legal owner projection. They prefer last in Once Around; movement first is preferred with own shipment resources and a visible spice opportunity, otherwise last. This is a bounded legal timing policy, not evidence of relative strength calibration.
Remaining scope
The battle-order follow-up connects first/last at a clean boundary between actual battles. It does not implement the separate aggressor mode discussed below.
Later sections supersede the earlier early-only aggressor, cyclic-auction and blanket started-movement exclusions. Queued movement now supports an unstarted different holder behind the active turn under the selected provisional policy. Other ordered actions and competing first/Guild precedence beyond the retained native choice remain unfinished. The own-started Movement and Revival policies above supersede the earlier blanket split-turn exclusion. The same-holder Movement replay described above is supported; other holders' protected Last remains guarded. Silent submission stays simultaneous with its original storm tie order.
The battle audit in the battle review found a real Stone Burner counterexample: a plan admitted with original aggressor tie priority can become allocation-ambiguous after late Sapho. A complete implementation needs the actual allocation continuation (and a usable, possession-independent late intervention boundary), not rejection based on an opponent's hidden plan. No aggressor handler has been enabled around that defect.
Verification
New source contribution review covers the pure helper and all four new rules test files (33 test cases including 960 helper reorder cases), plus four real room/SQLite recovery cases. Recovery exercises simultaneous duplicate Sapho requests with one successful CAS and one failed CAS, old/new-version replay, strict outbid sale, exact physical inventory, private projections, actual phase entry and Guild deferral through phase completion.
Browser and final regression outcomes from 7 September are recorded in the historical checkpoint below. The hourly maintenance automation remains removed. Reuse the server; restart only when an observed condition or change requires it, preserving saved games and verifying restoration.
13 September: first at a later clean movement boundary
The existing source contract already permits reordering the remaining unstarted participants between complete combined turns. The old global completed/shipped guard was narrower than that 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 Advanced Guild turn that fully finishes, rejected partly started/queued turns, and all four private AI profiles. The existing Advanced engine fixtures now use the shared Advanced initializer instead of flipping a Basic game. A separate production-room SQLite test races duplicate first requests after a real completed shipment and proves one discard, private projections and intact completed-player custody. Focused checks pass; broad results are recorded in the checkpoint commit and private source-bound report. This is a bounded connected prototype.
Final checkpoint
1,631 rules/client/component tests and 152 multiplayer tests pass (1,783 total). Final rules run: /tmp/dune-sapho-full-tests3.log (59.50 s). Multiplayer run: /tmp/dune-sapho-multiplayer.log (18.70 s), with /tmp/dune-sapho-final-recovery2.log rechecking all four Sapho recovery cases after the early-Guild adapter correction. Typecheck, lint and production build pass in /tmp/dune-sapho-final-type2.log, /tmp/dune-sapho-final-lint2.log and /tmp/dune-sapho-final-build2.log. Earlier runs identified stale documentation assertions; those assertions and the generated guides now identify eight bounded handlers and two inactive faces. All five new test files and both fresh source/architecture reviews were read by the coordinating agent.
Twenty Basic games using ordinary production AI completed across 2–6 players and all four homogeneous profiles: 12,052 accepted actions, zero rejected candidates/stalls/exceptions/invariant failures, 94 setup actions and 537 actual JSON continuations. No test card-use policy or inventory/resource injection was used. Public Basic starts contain no Sapho, so this is a regression sample, not full-game Sapho or expansion verification or relative difficulty calibration. The runner /tmp/dune-sapho-base-fullgames.ts and its complete result, summary, diff and source fingerprints were reviewed; all 58 source/runner fingerprints were independently unchanged at completion. Combined hash b83fb0197e9f3fb0b0fab31cc360d88a9562459e97a0fd9bac7911ebd13cb141; result hash 06b9fdf1cedfb4341cb0868432946618b813602f842f603981458d51b8cdbea3. Later changes were the explicit Advanced Guild queue correction (covered by full regression and new direct tests), reference text and presentation. These games predate that final correction.
Desktop and 390×844 phone inspection verified the new panel, full readable Sapho inspector and last-bid action. In isolated room 8S3MRDEK, the human used Sapho-last, Hard Richese bid 1, and the human won Ornithopter for 2; version 38 had 18 human spice, one acquired card, one Sapho discard and one play log. A separate staged movement test used Sapho-last, the Hard opponent shipped four and finished, then the human completed its unchanged full turn; version 47 reached Spice Collection with an empty remaining queue, cleared protection and exactly one discard/play log. Both are staged component tests, not full expansion games. Before each staging the prior room JSON was backed up. Refresh restored the saved seat and state; the viewport was reset. The phone inspection also exposed a pre-existing masthead overflow: wrapping its controls removed document horizontal overflow (375 px viewport / 375 px content).
At 02:46 UTC, all 1,746 existing rooms were backed up, the idle human room checked, and the server restarted. Every saved version and SHA-256 state hash restored unchanged; HTTP health was 200 and the browser resumed the same room. The restart backup is /tmp/dune-maintenance-20260907T0246. This is manual authorized maintenance; no automation was recreated.