Support Sapho ordering for shared arrivals
Verify and publish checkpoint container / container (push) Canceled after 0s

This commit is contained in:
Quintine committed 2026-10-29 05:29:51 +11:00
1 parent b18a767470
commit e457478f7d
18 files changed
+808 -23

No files matched your search

+4 -4
View File
@@ -5,7 +5,7 @@ import {
createSemutaArrivalOverlapFixture as fixture, actSemutaArrivalOverlap as act,
player, inventory, passCurrentSemuta as pass, claimOverlapSemuta as claim,
openOverlapAmbassadorGrant as grant, openOverlapTerrorDiscard as terrorDiscard,
finishOverlapTerror as finishTerror, type SemutaArrivalOverlapFixture,
finishOverlapTerror as finishTerror, passArrivalOrder, type SemutaArrivalOverlapFixture,
} from './fixture-semuta-arrival-overlap';
function reject(game: Game, actor: string, action: Action) {
@@ -52,7 +52,7 @@ for (const first of ['ambassador', 'terror'] as const)
assert.equal(f.game.moritaniTerror!.placementTurn, 1);
assert.equal(f.game.ecazAmbassadors!.tokens.find(token => token.id === f.token)!.zone, 'placed');
assert.ok(f.game.players.every(p => !Object.keys(p.forces).some(key => key.startsWith(f.territory + ':'))));
let game = act(f.game, f.arrivalStep.actor, f.arrivalStep.action);
let game = passArrivalOrder(act(f.game, f.arrivalStep.actor, f.arrivalStep.action));
const overlap = game.pendingArrivalOverlap; assert.ok(overlap);
assert.equal(overlap.first, first); assert.equal(overlap.stage, 'first');
assert.equal(overlap.entrant, f.entrant); assert.equal(overlap.cause, arrival);
@@ -106,7 +106,7 @@ void test('CHOAM first recovers one private card before Sabotage, pays once and
void test('Robbery first passes its overflow before a full-hand Ixian claim and one original replacement', () => {
const f = fixture({ effect: 'ixians', first: 'terror', terror: 'robbery', fullHand: true });
let game = act(f.game, f.arrivalStep.actor, f.arrivalStep.action);
let game = passArrivalOrder(act(f.game, f.arrivalStep.actor, f.arrivalStep.action));
const top = game.deck[0].id, size = game.deck.length;
game = terrorDiscard(game, f);
assert.equal(game.pendingTreacheryDiscard?.reaction?.stage, 'offer');
@@ -134,7 +134,7 @@ void test('Robbery first passes its overflow before a full-hand Ixian claim and
void test('Sabotage first spends Semuta on its victim before copied CHOAM creates a distinct discard', () => {
const f = fixture({ effect: 'choam', first: 'terror', arrival: 'movement', copied: true });
let game = act(f.game, f.arrivalStep.actor, f.arrivalStep.action);
let game = passArrivalOrder(act(f.game, f.arrivalStep.actor, f.arrivalStep.action));
game = terrorDiscard(game, f);
const terrorEvent = game.pendingTreacheryDiscard!.batch.event;
assert.equal(game.pendingTreacheryDiscard!.batch.entries[0].card.id, f.entrantCard);