Prototype Leader Skills setup, battle disciplines and capture
Connect all fourteen physical skills and private setup to five card-role battle modifiers, public posture, Harkonnen skilled capture, death return and optional own-leader revival through controls, legal AI and persisted room actions. Nine skill effects and combined-mode/publication acceptance remain unfinished. Captured replacement entitlement and foreign ghola integration stay guarded. Fresh publisher/designer research supports skilled-capture publicity through its unique known physical card; this is recorded as a component inference. Independent review found and fixed Voice/must-use-leader and invalid saved assignment/offer cases. A pre-existing Discovery privacy assertion confused card ID prefixes; the corrected deterministic physical-pair scenario was independently reviewed. The first broad run was 4410/4411; corrected final verification passes types/lint, all 4411 offline tests, build and 43 HTTP tests. Final durations: check 149741ms, build 6659ms, integration 28274ms. Source fingerprint: aef655ac1ebc0eb2f64294e13d3d27337167312cf8ab17568a166ee9c39f6a85. Private final report: 20260913-leader-skills/checks-final/report.json. Three seeded prototype games completed with no rejected bot candidates. Browser setup/card inspection/refresh passed. Another user-reported power outage stopped the server; backup and necessary restart restored the same private seat. All 292 games at restart and their original application records remain unchanged; 33 isolated HTTP-test rooms bring the current total to 325. No database reset. Efficiency: one shared setup/lifecycle implementation supports five connected role effects; selective existing agents handled catalog/UI/tests/research and independent reviews. One repeated broad check was required by the reproduced ID-prefix assertion failure. Aggregate goal counter rose from 65529766 to 67313673 through this checkpoint (1783907), including inherited context and coordination; this is not a billing or savings estimate. Full goal remains active.
This commit is contained in:
1 parent
369371671f
commit
6e6fecc9d4
28 files changed
+4196
-38
No files matched your search
@@ -109,7 +109,17 @@ void test('Collection look remains private, deferred reveal survives reload, and
|
||||
void test('Treachery Card Stash draws past a full hand, keeps the draw private and accepts every held discard through recovery', () => {
|
||||
let g = discoveryFixture();
|
||||
const token = enterDiscoveryCollection(g, 'treachery-card-stash');
|
||||
// Exercise the previously flaky ID prefix collision with two distinct cards.
|
||||
const take = (id: string) => {
|
||||
const pile = [g.deck, g.discard, ...g.players.map((p) => p.hand)]
|
||||
.find((cards) => cards.some((card) => card.id === id))!;
|
||||
return pile.splice(pile.findIndex((card) => card.id === id), 1)[0];
|
||||
};
|
||||
const privateCard = take('treachery-3');
|
||||
const visibleSibling = take('treachery-32');
|
||||
g.players.find((p) => p.id === 'f')!.hand.push(visibleSibling);
|
||||
while (g.players[0].hand.length < 4) g.players[0].hand.push(g.deck.shift()!);
|
||||
g.deck.unshift(privateCard);
|
||||
const original = g.players[0].hand.map((c) => c.id),
|
||||
drawn = g.deck[0];
|
||||
g = applyAction(g, 'a', {
|
||||
@@ -120,7 +130,9 @@ void test('Treachery Card Stash draws past a full hand, keeps the draw private a
|
||||
g = applyAction(g, 'a', { type: 'discovery', token: token.id, reveal: true });
|
||||
assert.equal(g.decision?.kind, 'discoveryDiscard');
|
||||
assert.equal(g.players[0].hand.length, 5);
|
||||
assert.equal(JSON.stringify(viewGame(g, 'f')).includes(drawn.id), false);
|
||||
const otherView = JSON.stringify(viewGame(g, 'f'));
|
||||
assert.equal(otherView.includes(JSON.stringify(visibleSibling.id)), true);
|
||||
assert.equal(otherView.includes(JSON.stringify(drawn.id)), false);
|
||||
assert.deepEqual(
|
||||
g.players[0].hand.map((c) => c.id),
|
||||
[...original, drawn.id],
|
||||
|
||||
Reference in new issue
Block a user