Files
Dune/docs/RICHESE_ORNITHOPTER_ENGINE_AUDIT.md
T
Quintine 7fe84ffbbd Allow Advanced advisors to use the physical Ornithopter
Adopt the supplied advisor/city distinction: advisors do not grant city access, but both printed physical-card modes permit advisor groups. Retain native stance/arrival/locks and distinct original cohorts; use shared advisor-aware paths and entry for minimal bot candidates. Add persistent guidance and genuine paid-acquisition/native-advisor regressions.

Validation: frozen10-file87/87, types/lint/build and three original-action/rendered-table programmes. Actual host/setup, cache1 purchase, foreign shipment/accompaniment and paid BG reinforcement cover range3, two groups and leaving the last city fighter. Eight minimal policy proposals remain legal; controlled geometry and UI checks are separate. No wider combinations, complete modes, final assurance or browser/deployed acceptance claimed. No saved-room/reset/restart/deployment operation.
2026-10-18 12:58:54 +11:00

34 KiB
Raw Blame History

Richese Ornithopter: movement integration audit

Audit: 2026-09-06. Document-only source and engine review. The canonical component is richese-ornithopter; this is distinct from ordinary Arrakeen/Carthag ornithopter access and the later Ecaz discovery token. No runtime effect or complete expansion compliance is claimed here.

Advanced advisor card movement — 18 October 2026

Prototyped / Partial. The authorized supplied Advanced source, physical28/logical26, says advisors do not count as occupying a stronghold for ornithopter access. Physical10/logical8 likewise excludes advisors from granting city access, while permitting a player with eligible city forces to move forces elsewhere. Neither passage gives the prior blanket ban on an advisor using the separately named physical card. The photographed card supplies its own three-territory move or two different normal moves without a faction/stance exclusion. This cutover supersedes the older advisor guard and source assessment below; it is not a newly located publisher-specific card FAQ.

Both modes now permit advisor groups. The range3 mode supplies its printed independent maximum. Two-group mode uses current normal range at each actual move: advisors alone in a city grant no access; fighters do. An advisor arriving alone automatically becomes a fighter and can therefore enable the second group. Leaving the last city fighter removes that access even if advisors remain in another city. Existing advisor/fighter arrival, new-advisor locks, same-territory stance, native response windows, storm/entry and distinct original force quotas continue to govern. This is no new shipment, stance privilege or free replay.

The isolated control gives persistent Advanced BG guidance. Minimal bot card candidates use the shared advisor-aware route and native entry checks, alongside current fighter-city access and original group quotas. No strategy tuning. Two disjoint implementation lanes plus owner integration pass frozen 10 files87/87, types/lint/build and three original-action/rendered-table programmes. Each starts with58 actual source actions: original Advanced host, BG advisorSetup in native Atreides Arrakeen, cache1 purchase, Richese1 shipment, actual free accompaniment and BG2 Polar Sink or1 Carthag reinforcement. Only original scalar lotteries and unopened first-turn Spice positions are selected; no postdeal hand, wallet, force, stance or clock is installed.

Range3 has2 continuation actions; advisor/fighter twoGroups and last-city-fighter variants each have3. The real advisor source cannot use an ordinary three-range move without city fighters. Card range3 succeeds and empty arrival flips. TwoGroups retains original advisor/fighter quotas after automatic face changes; leaving the last Carthag fighter recomputes the second advisor group to1 even while advisors remain in Arrakeen. Four minimal policies supply eight legal initial/second-group proposals. Four controlled rule cases separately exercise empty-city access, occupied-city nonaccess, existing fighter-city ordinary use and locked advisor entry among two other factions. Six isolated control cases cover modes, guidance, original cohorts and disabled states.

Source-bound proof is outside Git at ~/.local/share/dune/checkpoints/20261018-ornithopter-advisors/frozen-integrated-2/report.json: base 884a09fa92c8604c943979ef2a4c29990399c0fc, source tree 62adeab78469339886640fa0e852a8532f7e03d80da052a687576fc4e7110c83. The narrow native case corrected only its expected-error matcher; type feedback added a nonnull annotation for the controlled fixture’s known movement list. The frozen related union and required checks then passed on identical source. Only checkpoint prose/reference evidence changed afterward.

GameTable snapshots use genuine views; isolated controls render the actual accepted first/second movement drafts. SSR does not click select/submit, and framework aliases/CSS stubs do not establish visual/browser/deployed acceptance. Other card/module combinations, full modes and comprehensive assurance remain due. No saved-room/database/reset/restart or deployment operation occurred.

Recovered Hajr replay — 18 October 2026

Prototyped / Partial. The earlier multiple-physical-Hajr boundary had an incorrect premise: the original inventory has only one Hajr. A real missing case is recovering that discarded card with the original paid Nullentropy Box and playing it again. The supplied physical p39/logical p37 paragraph gives each Hajr play one extra normal move and immediate-after-Force-Movement timing, but establishes no once-per-turn cap. Under choose-recommended, a genuinely recovered held card may be played again for one further allowance. This replay interpretation is explicit; it is not a newly retrieved publisher FAQ or permission to duplicate the printed card. Basic retains broader timing; Advanced requires a fresh completed movement after the preceding Hajr consumed its opportunity.

Actual accepted Hajr plays are counted separately from the unique legacy has-used marker. The physical card must be back in hand: repeating a consumed first-use ID before recovery, or after its second discard, grants nothing. The original Box pays two bank spice and retrieves the one eligible discard automatically when no selection is needed. Searching grants no movement or Advanced timing opportunity. Basic may replay after retrieval; Advanced's programme retrieves while one earned move remains, completes that movement, then plays the same Hajr at the fresh opportunity. Both finish three ordinary movements with one physical Hajr and one paid Box.

The shared movement ceiling and owned control count accepted plays, preserving Ornithopter's separate completed-group credit. Ordinary/flight disposal binds the new count without altering legacy signatures when the field is absent. The count resets with the original turn/movement counters; old marker-only positions mean one play, without reconstructing saved history. Guild Cunning now carries counted unused Hajr allowances while forfeiting the ordinary slot. New declarations use v2 count receipts; legacy v1 boolean bytes stay valid. Signed current/final counts bound the native continuation after the second shipment and remain in completed history. Advanced Cunning now uses the same held-card/fresh-window timing. Physical Ornithopter/Cunning remains separate.

Two exclusive fixture/pure lanes plus owner integration and bounded review pass frozen 12 files102/102, types/lint/build and two original-action/ actual-GameTable programmes. Real cache Box1, ordinary Hajr1 and paid three-counter desert shipment reach the source in38 Basic/45 Advanced actions; seven subsequent actions include first use, the original two-spice search, same-ID second use, three ordinary moves and actual turn ending. Advanced retains two originally shipped Sardaukar. Both sole-discard searches are automatic, with no fabricated second card or manual selection claim. Four minimal policies retain the third move in each mode (eight proposals); strategy/calibration is deferred.

Pure cases additionally cover old receipt bytes, counted before/after grants, ordinary forfeiture, spent counters and invalid mixed formats. Related Cunning, Box, disposal and prior flight regressions pass. One historical Advanced Cunning case now earns Hajr after the real first move before carrying it through a stopped shipment; its later route respects lost city access. Fixture type feedback corrected a nullable private search reference. No printed number changed.

Proof base 72e77d7f4d96a3eca5987eba5287cc36dea3e99c, frozen tree 8c1122bd35446db71d09245dad128be1c8df440392c7d1ac7b0014fca3cadecc; private reports/HTML are under /home/quintine/.local/share/dune/checkpoints/20261018-hajr-replay/. Cunning replay composition has pure/related regression evidence, not a genuine paid-Box native Nexus replay programme. Framework aliases/CSS stubs mean no visual/browser/deployed acceptance. Other recovery producers, advisor/card and wider module combinations, comprehensive assurance and full modes remain open. No saved room/database mutation, reset, restart or deployment. Earlier one-Hajr and multiple-copy descriptions below remain dated implementation history.

Hajr and unused movement entitlements — 18 October 2026

Prototyped / Partial. The photographed Ornithopter face supplies its two alternatives but no Hajr combination procedure. The authorized supplied PDF, physical p10/logical p8, checks ordinary ornithopter access for each Force Movement, including Hajr. Its physical p39/logical p37 Hajr errata separately requires playing immediately after a Force Movement and allows reusing a moved group or choosing another group. This is the supplied unofficial compilation, not a new GF9 combination ruling. Bounded official-source follow-up found no card-specific resolution; the publisher PDF endpoints returned403.

Under the standing choose-recommended instruction, provisionally replace one unused ordinary/Hajr movement entitlement with either a range-three move or two distinct normal-range groups. One Hajr adds one independent normal move: one two-group flight plus that Hajr permits three completed group movements. An earlier ordinary movement stays spent; it cannot be retrospectively counted as the card's first group. Its counters may join a later newly declared flight. The two groups within that flight must differ, while a later Hajr move may reuse the first card group. Range-three stays capped at three and normal range is recomputed for every other group. No extra shipment or spice fee is created.

Advanced adopts the supplied immediate-after-play timing, correcting the older broader availability. A completed card group provisionally counts as a Force Movement for that opportunity. Mandatory arrival/disposal decisions finish first; other seats' actions and polling do not close it. The owner's next voluntary non-Hajr game action closes it, and a later actual movement opens a new window. Basic preserves its original broader own-turn timing. Existing separate Nexus Guild Cunning timing remains its own adapter; physical-card composition there is still guarded. The supplied passage neither permits nor forbids stacking multiple physical Hajr cards; the existing single-Hajr limit is an unfinished implementation boundary, not a printed once-per-turn rule established here.

Shared movement accounting retains a credit only after the second actual card group completes, so clearing the played-card frame cannot consume unused Hajr. Early ending abandons the second group and ends the turn without that credit. Original event/cohort validation and reaction continuations remain. The private view projects current Hajr availability separately from the total move count; human controls and all four minimal bot policies consume those same facts. New movement fields are additive and cleared with the next movement-phase counters. Completed legacy flights without a credit are not reconstructed.

One fixture lane plus owner integration and bounded source/implementation review pass frozen 11 files132/132, types/lint/build and 12 original-action/ actual-GameTable rendering programmes. Genuine cache Ornithopter1, ordinary Hajr1 and funded desert shipment reach the source in38 Basic/45 Advanced actions. Before/during/after Basic and after-group/after-flight Advanced use five continuations; prior-normal then fresh flight also five, range-three plus Hajr four. Both modes keep the distinct-group rule and legal later reuse. Early ends earn no abandoned movement. The native Advanced CHOAM/Baliset pause uses65 source actions; declining it opens Hajr, an original funded bribe closes the window, and the second typed group reopens it. Four policies retain legal second groups and earned extra moves (eight proposals), without tuning.

Two older Homeworld/Semuta guard assertions were updated to the new entitlement and Advanced timing while retaining the fixed maximum-three rejection. Related original disposal and Guild Cunning regressions pass; this does not certify all World/Semuta combinations. Framework aliases/CSS stubs mean no visual/browser/ deployed acceptance. Advisor/card use, multiple Hajr cards, wider module combinations, comprehensive assurance and complete modes remain open. No saved room/database mutation, reset, restart or deployment.

Proof base 6ccfaa1b4d5198f7e1654d5f4341bd6fc7a5daaa, frozen tree 29c081daee908f14d502e1a1adc5d871216c031460e830806e7699720b94dee0; private reports/HTML are under /home/quintine/.local/share/dune/checkpoints/20261018-ornithopter-hajr/. The older Hajr guards below are dated implementation history.

Provisional Kulon coexistence — 9 October 2026

Both modes now remain usable after Kulon. The one-group card move retains its explicit maximum of three territories; Kulon extends the normal range of each distinct group in the two-group mode. This applies in Basic and Advanced without changing movement quotas, cohort identity, storm/entry rules or physical card disposal. The owned control labels the policy.

This is a content-first composition choice, not a publisher ruling. The photographed card supplies “up to three”; R2 p7 supplies Kulon's extra territory. The authorized supplied Advanced PDF repeats “one extra territory during your Force Movement” on physical p29, but does not resolve the separately named Richese card's maximum. Choosing the explicit card cap avoids inventing a four-territory exception. Hajr/prior-move and Advanced advisor card movement now follows the later supplied-source cutover above; broader combinations remain open.

Changed-path proof: real Kulon activation followed by a three-territory card move, four-territory rejection, both normal groups moving two territories, and legal candidates from all four profiles in both modes. An isolated Chromium surface mounted the production movement component against the real engine: the enabled control moved two forces from Red Chasm to Imperial Basin and discarded Ornithopter once. It used in-memory QA state, not a saved room or deployed application.

Authority

The photographed GF9 card face was independently inspected at /tmp/dune-rules/choam-ornithopter-reading.png, derived from the publisher components shown in the product gallery. Full photo provenance and limits are recorded in RICHESE_ACQUISITION_RULES.md and RICHESE_COMPONENTS.md. It is a Special / Movement card. During the holder's movement, it offers either one group moving up to three territories or two different groups using normal movement. It is discarded after use. No spice payment, faction restriction, alliance transfer of the effect, reserve shipment or Karama cancellation is printed.

Relevant publisher rules:

  • Base rulebook p9: an ordinary group comes from one territory; each normal movement has one destination. Ordinary ornithopter access is checked at the start of a force move and gives a maximum three-territory route when the player has forces in Arrakeen or Carthag. It can move forces elsewhere on the map. The card's first mode independently supplies its stated range; it does not require those strongholds.
  • Base pp9–10: sectors do not count as extra territories, but the storm and blocked stronghold rules constrain routes and destinations. Base p22 confirms groups spanning sectors in one territory can move together and confirms that forces just shipped to Arrakeen/Carthag can enable ordinary access immediately. Base p23 retains storm restrictions even when the enabling stronghold is storm-covered. Fresh official indexed search verified that p23 passage and November 2020 FAQ p9's immediate-access clarification.
  • R2 pp5–6: Richese-family cards go to normal Treachery discard when discarded; No-Field tokens move as forces while concealed. R2 p7 defines Kulon as one extra territory during CHOAM's movement turn. The readable publisher-authored copy is /tmp/dune-rules/choam-lelekan-mirror.pdf and .txt.
  • Ixian rulebook p6: cyborgs normally move two territories; the printed Karama table cancels that faction movement advantage. The Mobile Stronghold rules give its own entry/exit geography. Local source: /tmp/dune-rules/ix-official-mirror.txt.
  • Base advanced Bene Gesserit rules p16 say advisors cannot use ornithopters. That passage predates this separately named card and does not expressly distinguish its two modes. Apply the ordinary fighter/advisor rules without silently declaring a new card-specific FAQ interpretation.

Bounded official-domain searches for the Richese card with Hajr, different groups, Karama, advisors and Kulon found no card-specific answer. Results about the Ecaz discovery token, Dune: A Game of Conquest and Diplomacy, or Dune Betrayal are not authority for this card. In particular, E3 p13's disposable discovery Ornithopter gives one later three-movement action and is a different physical item.

Confirmed effect and boundaries

The holder chooses one of two modes, not both. One mode supplies a maximum of three territories for one group; it does not add three to the existing range, create permanent stronghold access, or change collection/victory rules that depend on actual occupancy. The other authorizes two different groups, each using normal movement. The face does not authorize moving the same forces twice under that option. No extra shipment is created, and the move cannot be assigned to an ally.

This is an ordinary card effect. Do not create a generic faction-power Karama response merely because Ornithopter is played. Independent eligible faction powers and entry reactions remain: Ixian extended normal movement may be canceled; CHOAM may use Baliset; BG intrusion or flipping and supported Terror/Ambassador entries still resolve normally. A fixed three-territory card move does not depend on the Ixian cyborg advantage merely because it contains cyborgs. Canceling that unrelated advantage must not cancel the card's range.

The card changes movement allowance, not geography. Keep storm paths, stronghold occupancy, ally exclusion, destination sector, advisor/fighter status, unit custody, optional elite composition and supported HMS geometry. No-Field movement has direct general support as force movement; use a marker as one concealed group member and preserve its event without reading its hidden value. A marker moved by the first group cannot also be moved by the second group. This does not resolve currently guarded mixed battle, Homeworld or combined arrival cases.

Genuine source interactions not settled by retrieved card-specific authority:

  1. Hajr and prior moves: does the two-group option replace a normal movement action, increase the turn total to two, or compose into three/four moves with Hajr? Can an earlier completed move be counted retroactively as the first group? Existing Hajr implementation alone is not evidence. A bounded initial adapter may require an unused ordinary move and exclude concurrent Hajr with an explicit unfinished-combination reason, but cannot label that an official prohibition.
  2. Kulon: no retrieved card-specific answer settles its additive text against the fixed maximum. The provisional coexistence policy above now preserves the three-territory cap and extends both normal-range groups; this no longer blocks declaration.
  3. Advisors: the printed general prohibition on using ornithopters must not be ignored, but whether the two-normal-group card option is also covered is not expressly resolved. Keep this named boundary rather than silently treating the advisor path flag as permission. The following are primarily implementation work, not missing rulings. “Different groups” does not say “different territories”: distinct subsets may share an origin, but no physical unit can be counted in both. A distinct-origin-only shortcut would be an incomplete implementation, not a rule. The same accounting prevents the first group's arrivals from being moved again after merging with another stack. Base rules check stronghold access at the start of a force move, so normal-mode range should be recomputed for each accepted group; freezing both at declaration is not required. The player may end optional movement without a separate acknowledgement; after any actual card use, closing that use discards the card once. An uncommitted illegal route spends no movement. Interruption handling must preserve completed movements and remaining distinct-group custody rather than inventing a rollback. Exact provenance through complicated simultaneous force-removal effects can remain a named implementation limitation without asking for a new rule.

A safe initial supported boundary is both printed modes for ordinary physical fighter groups, an available ordinary move, no concurrent Hajr or Kulon, and current supported terrain/arrival combinations. The three-range mode works without stronghold occupation; the two-group mode uses ordinary per-group range and disjoint physical subsets. Both same-origin subsets and different-origin groups can be modeled from the text. Preserve existing supported arrival reactions and implement their resumptions; do not classify that technical work itself as a source ambiguity. No-Field marker support also has a general force-movement basis, but its cohort/event integration needs focused tests before inclusion. Explicitly guarded advanced advisor/stacking/optional-module contexts do not justify leaving either ordinary mode absent. These are bounds on certification, not reasons to leave the unambiguous modes unimplemented. No additional user question was sent during this audit.

Current engine hooks and concrete risks

Existing symbol Relevant behavior Required integration
movementRange Recomputes normal range from Arrakeen/Carthag, Fremen, Ixian selected elites and Kulon. Separate normal range from a per-order fixed-card range. Do not mutate occupation or set a permanent speed flag.
forceGroup Validates one-origin physical groups across sectors and optional concealed marker; returns typed units and source keys. Reuse for each group. Add provenance so a second group cannot reuse first-group forces after merging.
t === 'move' Checks active phase5, p.moved < (hajr ? 2 : 1), route/entry and advisor state. Replace duplicated allowance tests with one movement entitlement helper. Validate the card and chosen mode before effects.
MovementOrder Stores exact physical group/elite counts, origin/destination and marker event through reactions. Add explicit card-event/mode/group identity and the range basis. Avoid storing an arbitrary Action.
resumeChoamMovement Revalidates stale orders using the Hajr count and current normal movementRange. It must preserve card entitlement/range and reserved group identity; otherwise a valid three-range card move can fail after Baliset is declined.
ixMovement response Cancellation stamps the current move index and leaves a one-territory move available. Trigger only for actual reliance on the Ixian normal-range advantage. Cancellation does not spend a card-derived movement or accidentally clear its remaining group.
completeMove Moves physical/marker custody, sets shipped, increments p.moved, then runs intrusion and entry. Count each accepted group once. Advance the card continuation only after the group's arrival reactions finish. Do not recurse immediately into group two.
endMovement / phase start Ends the active player's turn; phase initialization resets Hajr/movement state. Close/expire any used card entitlement deterministically. Never carry an unbound second group into a later turn.
viewGame, bots and game-table Repeated movesAllowed = hajr ? 2 : 1; UI/bot paths independently choose sources and ranges. Project authoritative card options, remaining groups and restricted source/marker custody. Updating only engine permission leaves legal controls disabled or causes AI retries.

The current g.hajr flag is inadequate for the two-group mode: ordinary extra moves allow the same group to move again, contain no distinct-group provenance, and share no card-discard continuation. A simple increment of p.moved allowance would violate the explicit distinction. It would also leave resumeChoamMovement and Kulon availability using inconsistent limits.

The earlier held-in-hand reservation proposal is superseded: move the played card into one public active-effect custody zone on validated declaration, then discard it once when use ends. Keeping it in the hand would incorrectly let Sabotage select it, or make a reservation block that legal hand-discard effect. Check all existing hand commitments before declaration; afterward gift, Distrans, cash-in and random extraction operate on the remaining actual hand. The active-effect card is neither a hand card nor a discard card and must not be duplicated in either. Extend physical-custody validation to include that zone. A paid Nullentropy search keeps its existing central lock. An active Truthtrance question is answered first. This movement card is not an anytime hand-transfer effect, so it should not start in the middle of an unrelated pending decision merely to overwrite it.

Proposed minimal state/action contract

Keep card choice and each force movement reviewable, but omit acknowledgements for automatic bookkeeping:

ornithopter?: {
  event: string;
  player: string;
  card: string;
  turn: number;
  mode: 'range3' | 'twoGroups';
  startingMove: number;
  completed: number;
  movedCohorts: /* typed physical counts and marker identity */;
} | null;

// Bind a declared card move to the existing validated move request.
{ type: 'move', card: ornithopterId,
  ornithopter: 'range3' | 'twoGroups',
  forces, eliteForces, territory, sector, noField?, event? }
// Later card-group request references the server-issued Ornithopter event.
{ type: 'move', ornithopterEvent, forces, eliteForces,
  territory, sector, noField?, event? }

Prefer a clear actual API field name such as movementCard if card is overloaded elsewhere. Do not reuse the No-Field event field for the card event. The root adapter can choose a separate declaration action if needed, but must avoid a mandatory confirm step merely to begin an already specified valid first move.

For the range3 mode, validate the complete first movement before reserving the card; carry its bound range through response continuations; discard exactly once after the use. Invalid initial selection leaves the card and board unchanged. For twoGroups, commit each legal group once and persist remaining entitlement across every arrival interruption. Do not preempt genuine reactions or change their ownership. A second selection should use current legal state and constrained distinct-group custody; predeclaring both complete destinations changes information/timing and is not required by the face.

For fungible tokens, a source-quota/cohort model must distinguish ordinary and elite units, multi-sector source locations, first-group arrivals and the concealed marker. It may permit residual units in the same original location, while excluding the transported cohort at its new location. Arrival casualties, force returns and other relocation effects can make cohort assignment ambiguous; preserve the existing combined-effect guards unless those transitions also update provenance. Do not use secret No-Field value to compute the cohort quota.

Owner projection should contain the held canonical card, legal mode options with explicit reasons, event/remaining-group information when active, and authorized source quotas. Other players may see that a card was declared/used and its public movement, but not unchosen planned second destinations or hidden marker identity/value. An enlarged card inspector should explain the two alternatives and unresolved combination guard without presenting it as a printed ban.

Required tests before enabling the adapter: three-range route with no stronghold; unchanged storm/stronghold exclusion; normal two-group base/Fremen/Ixian ranges; no same-unit second movement including first-arrival merging; typed units and separate No-Field event; multi-sector groups; cancellation/decline and stale CHOAM continuation; independent Ixian response versus card-derived range; gift/Distrans/cash-in reservation; JSON/CAS duplicate first and second groups; single discard; end-turn closure; private projection and four AI profiles. Full optional-module and expansion starts remain gated until the wider acceptance requirements are met.

Played-card custody correction and cohort helper checkpoint

The held-in-hand model above was an implementation proposal, never a printed requirement. The November 2020 FAQ p8 confirms normal disposal after play and separately states the battle-winner retention exception. Base p10 distinguishes played battle cards held against a wheel. Neither requires this movement card to stay in hand throughout its effect. A separate played-card zone is consistent general-rule composition; no Ornithopter-specific FAQ is asserted. Root has adopted it so legitimate Sabotage can still randomly discard an entrant's remaining hand. Future Semuta reacts to the eventual discard event, not initial placement in the active-effect zone.

The pure game/ornithopter.ts helper and eight focused tests now track original unmoved ordinary/elite quotas and an exact optional marker identity/event/location. Same-origin residual subsets are permitted; first-group arrivals never increase quota. The engine remains responsible for phase/range/route rules, actual current marker custody and provenance changes after any intervening losses or relocations. A restored two-group effect with one completed move must require its recorded cohort, never reconstruct it from merged current forces. These pure tests do not certify the whole movement adapter.

Integrated checkpoint — 2026-09-06

The authoritative engine now supports both movement modes, uses a public played-card zone, and persists typed original-group quotas for the second move. The mode/event travels through CHOAM and Ixian reactions. Concealed markers retain separate physical identities and events; revealing an unmoved marker converts its entitlement to its actual placed forces, while revealing a moved marker cannot grant reuse. Both ordinary subsets from one source and original forces at a first-group destination remain selectable. Independent review found and verified the repair of a missing-quota restore defect: second-group movement and normalization now reject corrupted missing provenance rather than reconstructing it from merged counts.

Eight pure-model, eight root engine, six independent review and six AI cases are registered and pass; four production-persistence cases cover both move commits and recovery. The complete registered checkpoint passes 1,305 rules/client/component tests and 104 persisted/API tests. Final type checking, lint and production build pass. This is development-fixture support; unresolved named source combinations and expansion start gates remain in place.

Browser QA used only synthetic room QPNV5XJJ. A first two-force move from Red Chasm7 to Pasty Mesa5 advanced version23→24, put the played card outside the hand, and retained exactly three original forces for the second group. Selecting the first group's new stack disabled the second-move control. A fresh invitation restored exact version24, its event and its remaining original quota. Moving the remaining three advanced version24→25, left five forces at Pasty Mesa5, retained eight spice and fifteen reserves, and discarded Ornithopter exactly once. All other1,114 saved rooms retained their prior version/state hashes. Snapshots: /tmp/dune-ornithopter-browser-pending-v24.json and /tmp/dune-ornithopter-browser-complete-v25.json.

The browser check caught an initial parent/component wiring error: an unavailability message was passed even for valid drafts, disabling the card button. That prop is no longer passed unconditionally; the corrected real browser flow completed both moves. Remaining-group rejection copy now explains that the first group cannot move again. Full mobile and complete Richese-game acceptance remain unfinished.