Files
Dune/docs/SAPHO_AGGRESSOR.md
Quintine 84200ebc74 Allow late Sapho priority before final battle settlement
Fresh Richese-roster battles support clean aggressor changes after plans and revelation. Both combatants explicitly finish a public final opportunity regardless of held cards or result; an actual Sapho use clears both marks with a fresh event. Close priority before physical Stone allocation and other outcome settlement. Preserve plans, votes, participants, Habbanya priority and reserved physical cards. Keep old unstamped timing and discard signature bytes. Route all final vote exits through native Homeworld defense first. Add persistent controls and finite minimal bot readiness.

Validation:16-file177/177, types/lint/build and eight original-action/rendered-table programmes. Actual cache1 and paid forces use40 Basic/47 Advanced source actions; genuine Stone1 turn1/Sapho1 turn2 uses86. Ordinary and mixed count2 ties change through sealed-plan/final-window Sapho, explicit revised acknowledgements and native losses. Sixteen minimal proposals are legal; controlled reservation and pure window/control cases are separate. Bounded review fixed the Harkonnen Nexus final-vote route; frozen feedback corrected four historical fixture assumptions. All checks then passed together.

Final-window protocol is provisional. Direct late Semuta claim/capture, combined World/Nexus/Sapho, wider combinations, full modes, final assurance and browser/deployed acceptance remain open. No saved-room/database/reset/restart/deployment operation.
2026-10-18 13:46:00 +11:00

147 lines
9.1 KiB
Markdown

# Juice of Sapho: battle aggressor
## Late aggressor and public final opportunity — 18 October 2026
**Prototyped / Partial.** The physical face permits becoming the current battle's
aggressor without a before-plans qualifier; see the
[primary-source review](JUICE_OF_SAPHO_SOURCE_UPDATE.md#aggressor-and-battle-selection-order).
The former mixed-Stone blocker is addressed by the new
[physical-total allocation](STONE_BURNER_ENGINE_AUDIT.md#outcome-changing-physical-totals--18-october-2026).
Under the standing choose-recommended instruction, this checkpoint selects the
following provisional online protocol. The acknowledgement procedure is an
implementation interpretation, not an official timing FAQ or new printed rule.
Fresh battles with an actual public Richese roster receive
`saphoTimingVersion:1`, alongside their existing public preparation window.
This follows the physical cache/Sapho producer; merely selecting the E2 family
without Richese does not create that cache or a Sapho-dependent prompt.
The canonical unreserved holder may become aggressor at a clean boundary before
the final opportunity closes, including after one/both sealed plans and revealed
weapon/Traitor declarations. Existing nested responses/decisions still finish
first. Eligibility does not inspect an opposing hand or sealed plan. The holder's
own sealed or inspected card slots reserve the physical card: Sapho cannot be
spent while used as a Planetologist Special weapon or another commitment.
After all original weapon decisions, Traitor votes/responses and any native
Homeworld invader Portable Snooper choice, both physical combatants receive
the same **Final battle actions** control. It opens regardless of actual card
ownership, tie, Traitor/explosion branch or final winner. Each chooses
**Finish final battle actions** using the current public event. This persistent
window has no timer and does not replace a suspended decision. Playing Sapho
changes public priority and creates a fresh event, clearing both finish marks;
both players must finish again. Playing does not itself finish the opportunity.
The second acknowledgement closes priority before Stone physical counts,
Smuggler/Sandmaster choices, Diplomat retreat, Jacurutu, losses and aftermath.
The closed window cannot reopen there. Plans, participants, chooser, Voice,
Prescience, Truthtrance promises and chosen weapon/Traitor declarations remain
unchanged. Habbanya still precedes ordinary aggressor tie priority on either
physical side. New discard continuations bind the late stage and public revision;
unstamped old battles retain their exact early conditions/signature format.
No existing battle is converted or reset.
The table exposes only public identity, revision and readiness. Minimal policies
use their existing server-derived Sapho option first, otherwise explicitly finish
their own opportunity. This adds legal participation, not strategy calibration.
### Checkpoint evidence and remaining limits
Frozen **16 files177/177**, types/lint/build and eight original-action/
rendered-table programmes pass. The source-bound report is retained privately at
`/home/quintine/.local/share/dune/checkpoints/20261018-sapho-late/frozen-integrated-2/report.json`:
proof base `cb13a4d6748c3b86d5b472bab8d798b49b45af28`, source tree
`54889569fdfe483bfdeaffdf85c88127a41afdbceafb32ceb7b7d9dc99a7f75f`.
Only checkpoint prose/reference evidence changes after that frozen source.
The new original-action fixtures buy Sapho for1 through the actual cache and pay
for opposing three-force Arrakeen shipments:40 Basic/47 Advanced source actions.
The Advanced mixed branch buys Stone1 on turn1, Sapho1 on turn2 and ships6/1Sard
against Richese3:86 actions, including actual original circle4/circle5 choices.
Four-to-seven plan/vote/use actions reach the final window; two-to-four actions
finish both acknowledgements, real physical count2 and original typed cleanup.
Baseline ties go to Richese; one-plan/final-window Sapho changes them to Emperor.
A use after the holder's own acknowledgement resets both marks and rejects the
old event. Sixteen minimal proposals are legal in actual held/no-card views.
Actual GameTable, Sapho and isolated final controls render offered, busy,
already-finished and revised states. Framework aliases/CSS stubs mean no browser
clicks or visual/deployed acceptance. Pure lifecycle/control tests and controlled
own-plan/Prescience reservation probes remain separate evidence; the latter do
not claim a full original Planetologist/Sapho setup. Related existing regressions
include native Stone, Homeworld defense, Harkonnen Nexus and Semuta early disposal.
Bounded review repaired the Harkonnen Nexus final-vote exit to preserve original
Homeworld invader defense. Frozen feedback corrected four obsolete fixture
assumptions: the historical Stone guard is explicitly unstamped, a human saving
Sapho uses explicit controls instead of an eager bot, and Basic/Advanced readiness
retains late timing only in fresh battles. The exact failed cases pass8/8, then
the entire affected177 pass with types/lint/build/runtime against unchanged source.
This does not certify full modes, direct late Semuta claim/capture, a combined
World/Nexus/Sapho journey, wider combinations or final assurance. Browser and
exact-revision deployed acceptance remain open. No saved-room/database, reset,
restart or deployment operation was performed.
## Historical early prototype — 20 September 2026
Connected partial prototype at that checkpoint. The physical face and source
precedence remain in the [Sapho audit](JUICE_OF_SAPHO_ENGINE_AUDIT.md); the
[battle review](JUICE_OF_SAPHO_BATTLE_REVIEW.md) separates scheduling, physical
participants and tie priority. This checkpoint implements the printed aggressor
effect during an existing opportunity. It does not adjudicate late timing.
## Connected behavior
The holder can play the canonical, unreserved card while their shared `preLeader`
opportunity is open, before their readiness declaration and before either plan.
The other combatant may already be ready. Actual Voice, Prescience, Nexus/full-plan
inspection and Truthtrance commitments prevent this early use, as do suspended
interactions and mandatory disposal. Unchosen preparation prompts bind no plan
content and may remain. No hidden opposing hand or selected plan determines
eligibility. No holder-only pause or new confirmation window is introduced.
`scope:'battleAggressor', mode:'aggressor'` binds the battle, turn and use revision.
It discards the physical card once and records public priority, without swapping
attacker/defender slots, chooser, forces, leaders or later battle scheduling.
An already held position is unavailable. A recovered card can change priority
again at a fresh opportunity; no extra once-per-battle limit is invented.
The validated use history and independent event list survive JSON continuation.
Reads, actions and automatic normalization reject mismatched history, event,
combatants, turn or physical card custody. Legacy battles retain their original
attacker priority and do not reopen closed preparation.
The shared tie helper checks both combatants for the effective Habbanya advantage
before falling back to aggressor. Engine plan/Voice/prescience checks, public
projections, AI calculations and the final battle quote use that priority.
Ordinary strength ties and Stone Burner's physical-token ties therefore agree.
Early use precedes all commitments, so Stone's existing public finishability
guard can evaluate the changed priority before accepting a plan. The unresolved
late mixed-allocation hazard from the battle review is not bypassed.
The hand panel exposes the real action, the table names aggressor and tie winner,
and automatic notices mark a successful use. All four AI profiles can use the
same private options and finish through the existing preparation and battle path.
Timing strategy and complete Richese-game acceptance remain later work.
## Evidence and limits
Focused tests cover actual ordinary/Stone outcomes in Basic and Advanced,
Habbanya on either physical side, rejected stale/late/cross-owner submissions,
unchanged rejected input, public eligibility with changed private rival holdings,
receipt corruption, conserved recovered-card reuse and all four AI continuations.
The mixed Emperor/Guild regression changes Stone's pre-commit finishability before
any hidden opposing plan exists. Authenticated in-memory SQLite races consume one
card; fresh stores restore each private seat through the same battle. Fixtures use
genuine CHOAM/Richese setup followed by explicit conserved board/hand staging;
they are not full genuine-game evidence or proof of every module combination.
The owner-only control and public table text have rendering regressions. Browser,
required checks, complete-game samples, preservation and verified Git evidence
belong to the source-bound checkpoint report and commit message.
Later pre-reveal, post-reveal and final-intervention opportunities remain
unfinished, including their privacy-neutral response protocol and Stone allocation
work. These are development boundaries, not extra printed prohibitions. Other
Sapho timing questions and all mode/publication gates remain unchanged.