Keep mixed marker CI scenario funded
Verify and publish checkpoint container / container (push) Successful in 11m0s

This commit is contained in:
Quintine committed 2026-10-29 05:18:57 +11:00
1 parent 7a083ac9aa
commit b18a767470
2 files changed
+32 -1

No files matched your search

@@ -88,8 +88,23 @@ void test('authenticated mixed transfer moves a concealed marker and physical vi
const local = structuredClone(own);
const self = local.players.find(player => player.id === seat.id); assert.ok(self);
self.bot = 'Easy'; // Client-side adapter only; authoritative seat stays human.
if (seat.id === hostSeat.id && self.hand) {
// The scenario needs Caladan empty until the marker leaves. Decline
// optional Ghola in this local action selector; the real hand stays
// unchanged and every submitted action remains server-validated.
self.hand = self.hand.filter(card => card.effect !== 'ghola');
}
const choices = botActions(local);
if (choices.length) { proposed = { cookie: seat.cookie, actor: seat.id, action: choices[0] }; break; }
if (choices.length) {
// Initial Storm can kill Atreides forces on Arrakeen. Reviving them
// before this scenario's first shipment adds reserves, while paid
// revival also consumes its exactly funded starting spice. Declining
// optional revival preserves the native empty-Caladan setup.
const action = seat.id === hostSeat.id && own.phase === 4
? choices.find(candidate => candidate.type === 'ready') ?? choices[0]
: choices[0];
proposed = { cookie: seat.cookie, actor: seat.id, action }; break;
}
}
assert.ok(proposed, `No native continuation at ${currentOwner.status}/${currentOwner.phase}/${currentOwner.decision?.kind ?? 'no decision'}.`);
if (view.response && !view.response.passed.includes(view.me)) proposed.action = { type: 'passResponse' };