Files
Dune/docs/ADVISOR_AUTOMATIC_FLIPS.md
T
Quintine d0f52c7bae Preserve committed Guild transport through advisor conversion responses
Offer mandatory advisor conversion prevention after Guild cross-shipment and reserve returns. Keep original permission/rate/income, payment, physical pieces and shipment use; bind the exact group to one transport parent and resume original arrival/Intrusion once. Ordinary movement stays unused and the existing provisional continuously-alone duration remains. Preserve old ground receipts, private projection behavior and all transport/module guards.

Validation: 17 files243/243, types/lint/build, eight native transport/response/GameTable SSR journeys and eight existing-profile paths. Genuine36/42-action sources earn original counters/cards and actual paid-shipment Intrusion. Preserve the unaffordable full-price cross outcome and prove the affordable return. No saved-room/D1/restart/deployment operation; broader producers, full modes and browser/deployed acceptance remain open.
2026-10-24 19:58:56 +11:00

156 lines
9.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Mandatory advisor conversions
## Guild transport and reserve returns — 24 October 2026
**Prototyped / Partial.** The same physical17 counter and physical28 E mandatory
conversion now compose with committed Guild cross-shipment and reserve returns.
The original privilege, rate, settlement and payment responses retain their
order. Actual payment, force transfer, shipment use and promise/Cunning receipts
commit once before the conversion response. Ordinary ground movement is not
consumed. Canceling only this conversion neither refunds payment nor reverses
transport or revives the earlier permission/rate opportunity.
The source stores the public original route, selected physical group, amount,
elite count and a unique committed transport event. It binds to one saved parent
and the exact held advisor group. Holds are captured before board-derived
occupation observations; the response opens only after original slot bookkeeping.
An existing Guild-income response retains priority. Once all conversion outcomes
finish, the parent is consumed before original Intrusion/territory entry resumes
once. A reserve return has no arrival suffix. Hidden funding shares, hands and
wallets are not copied into that public source.
From-reserves Fremen transport and private movement-preparation projections do
not manufacture conversion events. Only changed origin/destination groups are
considered. A transported BG advisor arriving alone retains its original advisor
stance until this counter resolves. Existing source, typed-transport, No-Field,
Nexus, module and start guards remain; no new entitlement is granted. The existing
provisional continuously-alone duration is unchanged. Exact old ground receipt
shape remains accepted; new transport fields are additive.
[Native transport fixture](../tests/fixture-advisor-transport-flip.ts) starts
public Advanced BG/Atreides/Guild, actually placing the advisor beside Guild’s
original five counters at printed Tuek’s Sietch sector5. Atreides receives an
original starting Karama; real first-round controls, declined preparation and
native early Guild timing lead to the pre-transport source. Caller actions allow
original permission/rate, then stop before the post-payment conversion. No played
army, phase, hand, wallet, reserve, hold or response is installed. A separate
Intrusion source actually defers Guild, pays for one BG reserve to Imperial
Basin as a fighter, resolves original interception/income, ends BG’s turn and
takes Guild’s next early turn. The tested cross-shipment then produces the origin
conversion followed by a real destination Intrusion; it is not a synthetic
pending decision.
[Engine cases](../tests/advisor-transport-flip-engine.test.ts) cover both routes,
both outcomes, a real later ordinary move, earlier permission/rate independence,
affordable full-price return versus an uncommitted unaffordable cross declaration,
source-parent rejection and minimal existing profiles. Pure transport/legacy
cases remain in the shared quote suite. Frozen **17 files243/243**, types/lint/build, eight native transport/response/
GameTable SSR journeys and eight existing-profile paths pass. Native default
sources take36 actions; the actual paid-shipment Intrusion source takes42.
Cross costs5 and return3 before the conversion. Earlier privilege prevention
leaves pieces unchanged; an unaffordable canceled cross tariff remains
uncommitted, while a full-price return really settles before unopposed
conversion. The first241/242 feedback corrected the funding expectation without
staging spice, then added the negative branch. Two focused cases and the final
frozen243/243 pass. An existing ground consumer now narrows the strict source
union before reading its mover; no source shape is relaxed.
Private reports, rendered HTML and hashes:
`/home/quintine/.local/share/dune/checkpoints/20261024-advisor-transport-flips/`.
`frozen-integrated-2/report.json` records fingerprint
`cca2ff32114b6854c9339fff72f3384d68d1772d5539811594cd82f0c3e8d4fa`
on base `3aca64412feabae750b1adc2796a4086505a49c9`. Prose/reference evidence is
reviewed and hashed separately afterward. Standard controls are rendered; this
is no new component-callback/browser/mobile/deployed certificate.
Shipments outside this transport path, other withdrawals, casualties/aftermath,
matching-group conversions and wider interleavings remain open. This is not
complete cancellation or full Advanced/mode acceptance.
## Source and provisional duration — 24 October 2026
Status: **Prototyped / Partial**. Supplied authorized Advanced physical28 E says
advisors alone in a territory automatically become fighters. Physical17’s Karama
table permits preventing one group’s flip to or from advisors. Applying the two
connects a real counter to that mandatory conversion; automatic does not itself
confer immunity. Physical16 permits Karama only after setup/At Start, so setup
conversions remain automatic without this response.
This slice connects ground-movement producers: an advisor group entering an
empty destination and the last outsider departing its territory. The physical
move, counters, normal movement opportunity and any completed movement promise
are already committed. The ordinary advisorFlip response then permits or
prevents the conversion. Prevention cannot undo movement or spend another move.
The 14 October choose-recommended authority selects a **provisional duration**:
the prevented group remains advisors while continuously alone in that territory,
across phase and turn changes. Another faction’s presence or the physical group
becoming empty closes that occurrence. A group moving elsewhere gets its new
destination’s ordinary stance and a new conversion opportunity when applicable.
This duration is not a directly retrieved publisher ruling. Repeated normalization
cannot simply erase the canceled result or offer an immediate free retry.
## Connected behavior
- [Pure rule](../game/advisor-automatic-flip.ts) identifies current public groups,
binds a current turn/phase/mover/movement count and exact physical group, and
settles a held stance without reading cards, leaders or spice.
- [Engine](../game/engine.ts) marks each occurrence after physical ground
movement, queues its original source and opens the existing native response.
Allowance deletes the advisor stance; cancellation retains the occurrence
hold. The source is revalidated before card disposal and outcome settlement.
Multiple groups retain ordered independent responses.
- [Advisor normalization](../game/advisors.ts) and the shared
[board resolution quote](../game/board-resolution-quote.ts) retain held
advisors. Such forces still do not fight, collect, grant stronghold income,
count for victory or supply ornithopters. Ordinary arrival matching retains an
existing held group’s stance instead of silently converting it when joined.
- [Karama source selection](../game/karama-context.ts) binds the actual pending
occurrence rather than unrelated game state. The normal
[table response](../components/game-table.tsx) explains that the move is complete
and displays the provisional duration. There is no new confirmation or timer.
Existing minimal bot response handling remains, without strategy changes.
No start gate, physical inventory, save, schema or room is reset. Setup and
remaining unheld non-ground conversions keep their existing behavior. Remaining
mandatory producers beyond the transport follow-up include other shipments, withdrawals, casualties/aftermath and
other special arrivals; matching an existing fighter group and broader
interleavings also remain unfinished. This checkpoint does not claim complete
advisor-conversion cancellation or full Advanced compliance.
## Bounded verification
The [native fixture](../tests/fixture-advisor-automatic-flip.ts) starts genuine
public Advanced Bene Gesserit/Atreides/Guild. The native advisorSetup action puts
one advisor beside Atreides’ original ten Arrakeen forces. Only unopened original
Treachery/Spice order and scalar shuffle order are selected. Atreides receives
the original Karama, both Spice draws and ordinary first-round controls execute,
the original optional preparation is declined and Guild uses its timing choice.
The arrival branch stops at BG’s turn; the departure branch really skips that
turn and stops at Atreides’. No played army, phase, wallet, stance, card hand,
response or prevention receipt is installed.
[Native engine cases](../tests/advisor-automatic-flip-engine.test.ts) cover both
allowed/canceled moves, continuous hold through actual phase continuation,
an actual outsider return, changed-source rejection and existing profiles.
[Pure cases](../tests/advisor-automatic-flip-quote.test.ts) cover group selection,
settlement and exact source validation. The former empty-arrival expectation in
[advisor regressions](../tests/advisors.test.ts) is cut over explicitly.
Frozen **16 files199/199**, types/lint and production build pass. Five native
move/response/GameTable SSR journeys cover allowed/canceled arrival/departure and
an actual outsider return. Eight existing-profile paths accept legal standard
responses and continue. The original arrival source takes34 actions; departure
takes36, including the real skipped BG movement. Existing Karama/Allow controls
render, without a new component-callback or browser certificate. One redundant
import is repaired after the first passing199-case union; the final frozen
source then passes every check.
Private reports, rendered HTML and hashes:
`/home/quintine/.local/share/dune/checkpoints/20261024-advisor-automatic-flips/`.
`frozen-integrated-2/report.json` records source fingerprint
`385c4758cd118574be8431593267a3198dd570eea6960c02e45a462e23494c4c`
on base `1a505525a8aa1499bc6270da2241506baf3e5be2`. Prose/reference evidence is
reviewed and hashed separately after verification.
Comprehensive rules, combinations, saved-game/recovery/privacy/custody assurance,
browser/mobile/deployed acceptance and full AI refinement remain open.