Compose the Sneak Attack arrival with the Bene Gesserit reactions

A positive Moritani Sneak Attack now resolves its committed Terror entry first —
placing the reserve forces and accruing the Heighliners token — and then offers
the Bene Gesserit reactions under the same adopted shipment classification used
for ordinary off-planet arrivals: an eligible Advanced Intrusion choice when
Bene Gesserit fighters stand in the destination, carrying the free
spiritual-advisor follow-up, and the advisor shipment itself when the intrusion
is declined, with its existing territory, storm and occupancy validation. A
zero-force resolution still opens none of them, and the last "Sneak Attack
combined with Bene Gesserit arrival reactions" guard is removed rather than left
as a duplicate check.

This selected order is an implementation interpretation, not a located ruling;
the source note, the pending-interpretation registry, the component inventory,
the player reference and the status log record it. Evidence:
tests/moritani-force-leader.test.ts asserts the post-entry Intrusion offer and
the full decline -> advisor decision -> placement chain with nothing left
pending; the former gated-interaction pin was replaced by the composed
behaviour. Offline suite 7,798/7,798 with typecheck and lint clean, plus the
reference guide tests 10/10. No game, seat, saved state or deployment changes.
This commit is contained in:
Quintine committed 2026-10-07 18:53:19 +11:00
1 parent 972b781d0a
commit 3bebc68cd5
8 files changed
+96 -26

No files matched your search

+14 -8
View File
@@ -16943,14 +16943,6 @@ function sneakAttackOptions(
if (!(error instanceof RuleError)) throw error;
blocked = error.message;
}
const bg = byFaction(g, 'beneGesserit');
if (
!blocked &&
bg &&
(bg.reserves > 0 || (g.advanced && fighterCount(bg, entry.territory) > 0))
)
blocked =
'Sneak Attack combined with Bene Gesserit arrival reactions is still being implemented.';
return { maximum, blocked };
}
function terrorAllianceBlocked(
@@ -17199,6 +17191,20 @@ function decideTerror(g: Game, p: Player, action: Action) {
);
} else log(g, `${p.name} sent no forces through Sneak Attack.`);
finishTerrorEntry(g);
// The Terror effect is the arrival itself, so the adopted order resolves
// the committed entry first and then offers the Bene Gesserit reactions
// the same off-planet reserve entry already uses for ordinary shipments.
if (amount > 0) {
const bg = byFaction(g, 'beneGesserit');
const followup =
bg &&
bg.id !== p.id &&
spiritualAdvisorMaximum(g, bg.id) > 0
? { shipment: p.id, destination: location(entry.territory, entry.sector) }
: undefined;
if (!intrusion(g, p, entry.territory, followup ? { followup } : undefined) && followup)
g.decision = { kind: 'advisor', player: bg!.id, ...followup };
}
} else if (entry.stage === 'robbery') {
requireRule(
token.kind === 'robbery' &&