Compose independent cards with Discovery and optional Nexus

Connect original selected-deck Discovery setup, optional Nexus/World/Skills/phase modules and physical card consumers through shared public capabilities. Retain Cunning revealed-location arrival, Sandtrout suppression, paid nested R/Harass and actual later Recruits revival. Preserve native trained-capture and unrelated-preview boundaries.

Validation: frozen 15-file118/118, types/lint/build and six finite original-action/rendered-control programmes; four minimal legal policies. External smoke corrections changed no application source. Existing persistent notices also rechecked23/23. Full combinations, assurance and deployed acceptance remain open; no saved-game, restart or deployment operation.
This commit is contained in:
Quintine committed 2026-10-18 11:48:45 +11:00
1 parent b4157aaa9b
commit 677ad7aa3c
21 files changed
+1000 -37

No files matched your search

+9
View File
@@ -83,6 +83,15 @@ function command(g: Game): Action {
};
}
const acquire = (g: Game) => applyAction(g, 'ec', command(g));
void test('independent Discovery without Nexus admits the untrained Advanced Ecaz/Harkonnen acquisition quote', () => {
const g = fixture('harkonnen', true);
g.ecazTreachery = true;
g.discoveryEnabled = true;
assert.equal(g.nexusCards, undefined);
assert.equal(quoteEcazDukeAcquisition(g, 'ec').controller, 'ec');
const excluded = { ...g, leaderSkills: {} };
assert.throws(() => quoteEcazDukeAcquisition(excluded as Game, 'ec'), EcazDukeAcquisitionError);
});
function reject(g: Game, id: string, action: Action) {
const before = structuredClone(g);
assert.throws(() => applyAction(g, id, action), RuleError);