Files
Dune/docs/MIRROR_WEAPON_ENGINE_AUDIT.md
T
Quintine 9b67a780eb Connect early Juice of Sapho battle aggressor
During the existing public pre-plan opportunity, the holder can discard canonical unreserved Sapho to become aggressor before their readiness or any binding plan/Voice/inspection/Truthtrance commitment. Unchosen preparation prompts remain available. No new confirmation-only or holder-dependent response window is introduced. Later intervention and its allocation/privacy protocol remain unfinished.

A battle/turn/revision-bound history and independent event list preserve accepted priority while keeping attacker, defender and chooser stable. Legitimately recovered cards can change priority again at a fresh event. Reads, actions and normalization reject corrupt histories/custody. Shared tie priority respects Habbanya in either physical slot and reaches pre-commit Stone/Voice checks, public views, bot calculations and actual ordinary/Stone resolution. The final quote previously assumed original attacker priority and now consumes the validated aggressor. Harkonnen capture still follows actual winner/loser.

Owner controls, public aggressor/tie text, automatic notices and internal guidance are connected. Focused tests exercise actual tied results in Basic/Advanced, both Habbanya sides, mixed-force Stone finishability before opposing commitments, a real allied Prescience boundary, stale/late/cross-owner rejection, private rival noninterference, receipt corruption, saved recovered-card revision, actual policies at all four AI levels and authenticated SQLite races/seat restoration. Independent review found no material defect. A prior scheduling test now explicitly readies its human holder to save the card instead of allowing the new legal AI play.

Types, lint and 4866 offline tests, production build and 43 HTTP/session tests pass on the unchanged source fingerprint below. Two genuine CHOAM/Richese samples completed with 1279 accepted actions, 34 periodic JSON restores and no rejected candidates. One movement Sapho play occurred; neither sample used aggressor. Targeted tests and browser evidence, not those samples, establish the new effect. Full expansion and module acceptance remain incomplete.

In a new isolated browser room, genuine Advanced faction setup was followed by conserved battle staging. The human Guild used the actual aggressor button, restored the spent card and priority after refresh, readied, selected Master Bewt with zero dial/support, and declined a Traitor call. The staged Emperor opponent used real engine ready/plan/vote actions with Caid and zero dial/support. Guild won the 3-3 tie, retained four forces and 30 spice, and Emperor lost four forces. Final refresh and private JSON views restored the same outcome; the original seat row is unchanged. Screenshot capture timed out, so visual screenshot acceptance is not claimed.

All 1072 original games and original seat/recovery/entry/handover records are unchanged; 1106 rooms remain including isolated QA and HTTP fixtures. SQLite quick-check and foreign keys pass. The healthy server was reused without reset/restart or automation.

The Mirror audit now records why every genuine CHOAM/Richese setup includes unresolved copy candidates: an ordinary-copy-only gate would need hidden eligibility or altered inventory. Mirror stays gated pending the existing disposal ruling and copied-choice work. No mode/publication gate is opened.

Verified source tree: 2fb3160efd713a3f7068aedb474868ba6863bccc420848a56e69e1df1d84441b
2026-09-20 11:45:47 +10:00

19 KiB
Raw Blame History

Mirror Weapon: source and engine integration audit

Audited 6 September 2026. This is a proposed implementation contract, not activation or verification of Mirror Weapon gameplay. No runtime file was changed by this audit. Richese and combined expansion starts remain gated.

7 September follow-up: Portable Snooper and Stone Burner now have runtime foundations, superseding the historical absence noted below. A shared physical/effective weapon resolver and ordinary attack/explosion integration are recorded in EFFECTIVE_BATTLE_WEAPONS.md. Mirror plan admission remains disabled; copied choices, full outcome and cleanup integration are unfinished. Fresh bounded publisher retrieval did not settle the pending copied-disposal question.

Primary evidence and a retention correction

The actual face was visually reread at /tmp/dune-rules/choam-mirror-reading.png, alongside Stone Burner at choam-stone-reading.png. Both derive from the physical-component photograph recorded with its hash and limitations in RICHESE_COMPONENTS.md. This is publisher text visible on a physical component; the photographer, publication date and complete printing history remain unverified. No photograph is imported into the application.

Mirror Weapon is one physical Weapon / Special, canonical ID richese-mirror-weapon. Its instruction is to commit it in a Battle Plan, copy the opposing revealed weapon only when that card actually counts as a weapon, and use the copy first when order matters. Its final instruction is “Discard after use.” It does not supply a target selector, a selection of arbitrary weapons, or another player's physical card.

The CHOAM & Richese rulebook, pp4–6, establishes replacement Tooth/Artillery cards, one separate ten-card cache, and normal Treachery discard routing. Local publisher-text mirror: /tmp/dune-rules/choam-lelekan-mirror.pdf and .txt. Direct GF9 retrieval returned 403; fresh official indexed excerpts corroborated p4. Bounded official-domain Mirror searches yielded no card-specific clarification.

Do not infer compulsory winner disposal from that footer alone. The November 2020 FAQ, p8, gives winning battle cards a general keep option even without printed retention wording. Page1 expressly makes used Tooth and Artillery exceptions, including when their player wins; an unactivated winning Tooth can be kept. The 2021 Mirror face adds no explicit winner exception. Recommended ordinary composition is that a winning Mirror can be retained; copying a disposable weapon raises a separate inheritance question below. This corrects the earlier inventory's overly definite mandatory-discard interpretation without claiming a new Mirror erratum. Losing and mutual-loss cleanup still discard played cards normally. A traitor-decided battle preempts weapon effects under the base rules, pp10–11.

Weapon matrix

Here “copy” means an effective attack belonging to the Mirror player, evaluated against the relevant defenses. It never changes ownership or identity of the opposing card. Descriptions of already supported attacks below map to game/battle-cards.ts; their base/Ix behavior is reused rather than replaced.

Opposing revealed selection Mirror behavior and integration consequence
Ordinary projectile, including Ix Hunter Seeker Effective projectile attack. Resolve against the other player's projectile defense. Both original and copied attacks apply; using the copy first does not make ordinary combat an alternating combat system.
Ordinary poison, including Ix Basilia Effective poison attack. Apply existing poison-defense behavior, including supported Portable Snooper.
Lasgun Effective Lasgun. Feed the effective weapon into explosion detection, not merely ordinary leader lethality. Any actual Shield/Shield Snooper involved still produces the existing territory-wide explosion unless traitors preempt it.
Poison Blade Copy both projectile and poison attack properties together. Do not ask the Mirror owner to select one.
Weirding Way in the weapon slot Copy its projectile weapon role.
Chemistry in the weapon slot Copy its poison weapon role. The opponent's pair must already be legal. Do not retroactively require the Mirror holder to possess the other defense that made the original Chemistry legal: Mirror is the committed weapon, and copies a card which already counts as a weapon.
Weirding Way or Chemistry in the defense slot Do not copy that defense. Inspect the opponent's actual weapon slot instead, which may contain another valid weapon or nothing.
Poison Tooth Copy the optional post-reveal attack, not the original owner's eventual answer. The Mirror owner chooses activation first, then the original owner chooses. Persist two separate choices. Reuse the established self-and-opponent attack evaluation; do not apply deaths between these declarations or count a leader death twice. Copy-related physical-card retention remains unresolved below.
Artillery Strike Copy the attack on both leaders, suppression of surviving leader strength, and no-bounty battle effect. Apply battle-wide suppression once, not twice. No extra mode choice is created. Copy-related physical-card retention remains unresolved below.
Stone Burner The copied effect has its own post-reveal choice, made before the original user's choice. Both effects replace ordinary leader/dial comparison with the same undialed-token comparison. A kill choice cannot be undone by the later ignore-strength choice. Underlying Stone Burner outcome/casualty implementation is not present, so do not silently reduce this to ordinary weapon kills.
No weapon, or Worthless in place of a weapon No effective attack. Mirror remains its physical committed Weapon / Special; an occupied slot alone is insufficient evidence of an opposing weapon.
Reinforcements or Harass & Withdraw in place of a weapon No effective attack from those cards. The Ecaz/Moritani rulebook p11 explicitly says they do not count as a weapon or defense. Their other effects are independent.
A second Mirror Not a reachable legal physical inventory: the verified collection has exactly one. Reject duplicated physical custody. A future variant adding another copy needs a cycle rule; do not invent an infinite recursion or pretend two copies become an ordinary attack.

The existing FAQ-backed defense distinctions must survive copying: Chemistry defense protects against Tooth; Snooper-style protection does not. Shield Snooper is a shield, while defensive Weirding Way is not; the latter does not protect against Lasgun or Artillery. Generic versus named Voice applies to actual declared roles. These distinctions are confirmed by November FAQ pp4–5,8–9 and Ixian/Tleilaxu rules p11. Mirror should have a named Special-weapon Voice identity before revelation, not be classified using the opposing hidden weapon.

Preserve declarations, transform only effective resolution

  1. Admit only the strict canonical Mirror as a weapon. Do not admit every kind: 'special' card. Mirror can support Weirding Way's alternate defense role because it is a real weapon even if it ultimately copies no attack.
  2. Keep the original committed weapon ID in plans, ordinary Atreides prescience, whole-plan insight and Truthtrance promises. Revealing Mirror to Atreides is revealing Mirror, not revealing a future synthesized opposing weapon. Do not perform a hidden two-plan lookup in a public or owner-only projection.
  3. After both plans actually reveal, derive an effective descriptor from those revealed physical faces and selected slots. A suitable pure helper is resolveBattleWeapons({attacker:{weapon,defense},defender:{weapon,defense}}). Each descriptor should retain physicalId, copiedFrom or null, effective attack kind, any post-reveal choice, and ordering dependencies. Do not overwrite a Card's name/kind/ID to make existing helpers accidentally work.
  4. Bind any new choice queue to the battle event. With a copied Tooth or Stone Burner, order the Mirror choice before the corresponding original choice, irrespective of storm order. Use ordinary existing order where no copy dependency exists. Exact repeated submissions must not repeat a choice, random effect, casualty or payment.
  5. Resolve traitors and explosion precedence, then calculate ordinary or special battle effects. Copy-first is not permission to skip the second ordinary weapon because its leader would die. Existing ordinary battle rules allow both leaders to die.
  6. Derive retention from physical card identity plus actual effect use, separately from attack descriptors. Used-card lists, discard, Moritani retention, winner optional disposal, private hand custody and public inspectors must continue to refer to the physical Mirror, never to a second copy of the opponent's card.

Concrete current hook map

Location Required change before activation
game/battle-cards.ts: kind arrays, pair/Voice helpers Introduce strict identity-aware weapon admission and declared-role matching. Existing WEAPON_KINDS.includes(card.kind) cannot recognize a canonical Mirror transported as special. Avoid changing every Special's role.
engine.ts: validatePlan, findReachableBattlePlan, feasiblePrescience Use the same legal weapon admission. Preserve physical IDs and promised slots in all plan searches; a selector-only change would leave authoritative plans impossible.
nextRevealedDecision Currently detects physical poisonTooth and iterates storm order. It misses a copy entirely and orders it incorrectly. Replace or extend with a persisted effective-choice queue.
resolveBattle: explosion and battleCardEffects Explosion currently checks physical kind === 'lasgun'. Both explosion and normal effects need the same effective descriptor, including own-side attacks and global suppression.
canRetainBattleCard and Moritani cleanup Keep a shared physical cleanup policy. Do not turn the Mirror into a disposable physical Tooth by mutating its kind. Resolve the copy-disposal question before enabling affected pairings.
game/bots.ts: plan candidates, weaponKills, battleCardEffects, Tooth decision Use legal physical candidates and effective attacks only from legitimately known plans. A hidden opposing hand is not an AI input. Handle ordered post-reveal copy decisions with the same effect evaluator.
Battle plan, revealed components and Rules presentation Name and inspect the original Mirror. An additional public description can name the copied revealed weapon after both plans reveal. No extra acknowledgement is needed for a deterministic copy.

Portable Snooper is concurrently being integrated by the parent. Consume its final shared effective-defense helper and supplemental public defense state; do not duplicate or replace that work.

20 September admission review: the ordinary-copy arithmetic remains useful, but cannot alone open a genuine setup. CHOAM's Treachery deck supplies Poison Tooth and Artillery even without Ix, while the full Richese cache supplies Stone Burner. A public configuration gate therefore cannot isolate ordinary copies. Rejecting according to a concealed opposing hand/plan would leak information; rejecting after commitments could strand the battle. Do not remove physical cards or manufacture a restricted deck to claim complete-game support. Mirror remains gated pending the existing copied-disposal ruling and copied-choice work. This qualifies the earlier ordinary-slice recommendation below; it does not invalidate the existing focused arithmetic evidence or answer the user question.

  • Copied compulsory disposal: the FAQ names physical Tooth/Artillery, while Mirror copies a weapon. The retrieved primary sources do not explicitly say whether their disposal exception also applies to the physical Mirror. Separate combat effects from cleanup and obtain a ruling before certifying those pairings. This does not justify blocking ordinary projectile/poison/Lasgun/Poison Blade/selected-role copies.
  • Stone Burner foundation: the full effect is presently unsupported. Basic undialed counts follow physical forces minus dialed losses; ties use ordinary aggressor priority unless overridden. Advanced mixed/support-dependent dials can permit different physical casualty allocations, which now affect who wins; the present engine chooses those only for an already determined winner. Stone's original choice and allocation timing must be implemented/audited before its copied form. This is an underlying special-outcome problem, not uncertainty over whether Mirror copies a valid weapon.
  • Higher modules: inactive leader skills may modify attacks, defenses or card roles. No combined leader-skill certification follows from the matrix. Two physical Mirrors are outside the verified inventory rather than a normal supported interaction.

Required verification before claiming the slice

Tests should cover every matrix row in both attacker/defender positions; paired defenses; no-attack copies; Mirror plus defensive Weirding Way; named Voice and physical prescience/Truth commitments; Lasgun explosion including advisors/spice and traitor preemption; copied Tooth choice order independent of storm order; once-only global Artillery suppression; exact physical retention/discard policy after its ruling; Moritani eligible-card filtering; JSON restoration between reveal and choices; stale event rejection; and identical unauthorized projections with different opposing hands. Run all four AI profiles through a complete supported battle, including a Mirror with no useful copy, without an acknowledgement or deadlock.

Five facets remain partial: source audit and component text are present; authoritative behavior, player controls, AI and integrated verification have not been activated by this document. Existing tests of ordinary battle cards are useful regression evidence, not proof of Mirror behavior.

Pending user clarification (2026-09-06)

The coordinating agent asked whether a Mirror copying an activated Poison Tooth or Artillery must inherit that card’s mandatory discard on victory, or whether the physical Mirror uses ordinary winner retention. No answer has been received at this checkpoint. The question does not concern Portable Snooper, whose ordinary winner retention follows the general FAQ. Do not infer an answer from the first preselected UI option or elapsed time.