Complete forced Harkonnen returns with private saved inspection
Automatically return the full combined hand when it is the only legal special-Karama return. Preserve real choices and restore the suspended response or auction payment through the same settlement. Record the actual blind draw as owner-only historical card faces, with a bound integrity receipt; legacy forced saves describe held-card history truthfully. Add readable private history and enlarged inspectors. Both manual and forced returns publish only a faction/action completion tag. Wake idle legacy exchanges through production recovery without writes for real choices. Keep provisional auction funding rules and release gates. Validation: types, lint, 5150 offline tests, build and 49 HTTP tests passed. Independent review resolved history substitution and root review completed idle recovery wiring. New tests cover 1-4 forced draws, real choices, overlays, exact saved history, immutable rejection, all four legal AI paths, production competing actions/recovery, private views and custody. One genuine Advanced four-player sample completed 158 actions with 4 JSON restores and no rejected action; no difficulty tuning. Browser QA QUTHVPTT used genuine Advanced setup and conserved Bidding positions. The actual power returned four cards without a prompt; private history/enlargement and exact refresh worked. Phone panel fit without horizontal overflow with 44px inspector controls. Screenshot capture timed out; complete visual acceptance and transient notice capture remain open. Preserved every prior row across all ten tables, including 1586 rooms and 3354 seats. New QA/integration records bring totals to 1626 rooms and 3442 seats. No reset, restart or automation.
This commit is contained in:
1 parent
a3bc0ac837
commit
0f79f28ccb
21 files changed
+847
-52
No files matched your search
@@ -311,13 +311,15 @@ void test('promise-bound Worthless candidate is conservatively retained but an i
|
||||
|
||||
void test('hand-exchange suspension waits; restored response uses newly returned card and original passes', () => {
|
||||
let g = fixture(['harkonnen', 'emperor', 'guild']);
|
||||
g.phase = 3;
|
||||
g.players[0].specialKaramaUsed = true;
|
||||
g.pendingExchange = {
|
||||
response: { kind: 'guildIncome', owner: 'c', amount: 3, passed: ['a'] },
|
||||
decision: null,
|
||||
};
|
||||
g.response = null;
|
||||
g.decision = { kind: 'handExchange', player: 'a', target: 'b', count: 1 };
|
||||
g.players[0].hand = [karamas[0]];
|
||||
placeFixtureHand(g, 0, [karamas[0], shield]);
|
||||
g = normalizeAutomaticGame(g);
|
||||
assert.equal(g.players[2].spice, 10);
|
||||
assert.equal(g.decision?.kind, 'handExchange');
|
||||
|
||||
Reference in new issue
Block a user