Fix marker transfer CI fixture funding
Verify and publish checkpoint container / container (push) Failing after 6m26s
Verify and publish checkpoint container / container (push) Failing after 6m26s
This commit is contained in:
1 parent
e457478f7d
commit
68643925e7
3 files changed
+27
-5
No files matched your search
@@ -17,6 +17,16 @@ open mode gates.
|
||||
|
||||
## Current checkpoint and work
|
||||
|
||||
**Gitea marker-transfer failure — 29 October. Partial.** Run #82 failed
|
||||
because its marker-transfer fixture attempted a second all-reserve Caladan
|
||||
evacuation after the marker had arrived: eight forces cost more than the
|
||||
remaining three spice. The fixture now performs that evacuation only before
|
||||
placement and declines optional native revival/Ghola through legal actions.
|
||||
Both related HTTP scenarios, quick type/lint checks and the production build
|
||||
pass locally. CI must still verify the pushed revision. CHOAM's faction guide
|
||||
also now reflects the existing Basic Kull/Tech configuration and its question
|
||||
limits. [Fixture](../tests/richese-homeworld-marker-transfer-http.test.ts).
|
||||
|
||||
**Sapho at a shared arrival — 29 October. Prototyped / Partial.**
|
||||
Supported Basic Ecaz/Moritani entries now give both reaction owners a public
|
||||
ordering opportunity before either acts. An eligible Sapho can reorder its
|
||||
|
||||
@@ -14,7 +14,7 @@ export const FACTION_RULES: Record<
|
||||
'Use Kulon on your movement turn to add one territory of range. Use La La La during Revival to prevent a player’s free force returns for the phase; a reactive decision lets you stop a pending free revival before it resolves. Both cards have Karama responses before discard.',
|
||||
'Trip to Gamont returns one other player’s force from a chosen sector to its reserves during Mentat. Elite types are preserved. A Karama response precedes the return, and CHOAM gets a final opportunity after the closing market before victory is checked.',
|
||||
'Baliset prevents a player from moving into a territory occupied by CHOAM for the turn, while permitting shipment. Jubba Cloak protects CHOAM forces in one territory from a moving storm. Both powers have Karama responses before the card is discarded.',
|
||||
'New supported Basic lobbies with CHOAM and the CHOAM and Ix decks enable the Kull preview by default; the host may turn it off. Each selected faction needs its deck. Independent Ecaz Treachery Cards are supported; other optional modules remain outside this profile. React to a legal Karama attempt with held Kull Wahad before costs. The original card stays reserved; only a different eligible Karama can counter before the phase ban applies. Success spends Kull, retains the original unplayed card and prevents the activating player’s Karama uses for the phase. Decline or prevention resumes the original once; a prevented Kull stays held but its physical card’s effect is blocked that phase. With Richese, supported Kull and counter discards offer Semuta, including when a paid ordinary or cache sale is waiting for Harkonnen’s bonus. Ordinary bribe, Revival and alliance, simple and mixed current-lot bid, and phase-wide bid questions are supported. Combined turn-action questions are available in the supported Basic profile, with some Karama uses still guarded. Unfunded non-CHOAM Karama-dependent overbids remain deferred; see the Kull guide. Complete CHOAM rules remain unfinished.',
|
||||
'New supported Basic lobbies with CHOAM and the CHOAM and Ix decks enable the Kull preview by default; the host may turn it off. Each selected faction needs its deck. Independent Ecaz Treachery Cards are supported. Separately, Tech Tokens are supported with three to six CHOAM and classic factions; other optional modules remain outside this profile. React to a legal Karama attempt with held Kull Wahad before costs. The original card stays reserved; only a different eligible Karama can counter before the phase ban applies. Success spends Kull, retains the original unplayed card and prevents the activating player’s Karama uses for the phase. Decline or prevention resumes the original once; a prevented Kull stays held but its physical card’s effect is blocked that phase. With Richese, supported Kull and counter discards offer Semuta, including when a paid ordinary or cache sale is waiting for Harkonnen’s bonus. Ordinary bribe, Revival and alliance, simple and mixed current-lot bid, and phase-wide bid questions are supported. Combined turn-action questions are available in supported Basic profiles; some structured questions remain unavailable with Tech Tokens, and some Karama uses are still guarded. Unfunded non-CHOAM Karama-dependent overbids remain deferred; see the Kull guide. Complete CHOAM rules remain unfinished.',
|
||||
],
|
||||
advanced: [
|
||||
'Once per game, spend a real Karama and discard selected other cards for three spice each. The cash-in can occur during pending phase or power decisions, while committed battle cards remain protected. See the CHOAM special Karama topic for funding and timing details.',
|
||||
|
||||
@@ -53,9 +53,9 @@ void test('authenticated marker transfer retains its hidden identity between for
|
||||
if (until(currentOwner)) return currentOwner;
|
||||
assert.notEqual(currentOwner.status, 'finished', 'The QA game ended before marker transfer.');
|
||||
|
||||
// Atreides sends its actual reserves away from its World, so the
|
||||
// concealed marker can remain there through the next Battle phase.
|
||||
if (currentOwner.status === 'playing' && currentOwner.phase === 5 && currentOwner.active === hostSeat.id &&
|
||||
// Empty Caladan once before the marker arrives; later turns do not need
|
||||
// another all-reserve shipment, even if a new revival adds reserves.
|
||||
if (!firstMarkerPlaced && currentOwner.status === 'playing' && currentOwner.phase === 5 && currentOwner.active === hostSeat.id &&
|
||||
!currentOwner.response && !currentOwner.decision && !currentOwner.phaseOpening &&
|
||||
!currentOwner.truthtrance) {
|
||||
const at = await read(hostSeat.cookie);
|
||||
@@ -89,8 +89,20 @@ void test('authenticated marker transfer retains its hidden identity between for
|
||||
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) {
|
||||
// Keep optional Ghola out of this local selector so it cannot return
|
||||
// native forces while the marker waits. The server hand is untouched.
|
||||
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) {
|
||||
// Decline optional Revival to keep the original evacuation funded
|
||||
// and Caladan empty while the physical marker is there.
|
||||
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' };
|
||||
|
||||
Reference in new issue
Block a user