Enable Residual Poison against Advanced Harkonnen captives
Include available ordinary captives, captured foreign gholas and shared Duke in the original random pool. Apply one public ordinary death without execution income, preserve foreign revival custody and other concealed captives, and end Duke tenure. Find the signed Semuta victim by canonical physical identity after captivity ends. Explain the provisional normal-Tanks source composition in controls and developer reference. Validation:9 files74/74, types/lint/build and two actual-rule/rendered-table programmes plus four finite policy continuations pass on one frozen source. Details and exact unchanged-source proof are recorded in the canonical Residual Poison contract. Genuine public Advanced cache purchase, funded deployments, native victory/capture/keep and second battle cover native and captive deaths plus finite completion. Four minimal profiles use legal offered card/readiness actions. Separate controlled cases cover ghola/Duke, last-native return and Semuta claim; no strategic AI refinement. This interpretation remains provisional. Wider interactions, complete modes, final assurance and browser/deployed acceptance remain open. No saved-room/database/reset/restart/deployment operation.
This commit is contained in:
1 parent
6c83148ead
commit
377e9c5160
13 files changed
+619
-28
No files matched your search
@@ -48,14 +48,13 @@ void test('normal foreign ghola control and Duke tank history are preserved with
|
||||
}
|
||||
});
|
||||
void test('invalid timing, target, identity and state fail before random selection and preserve the card',t=>{
|
||||
for(const problem of ['stale','outsider','target','sealed','prescienceLeader','empty','overflow','advancedCapture','forgedVictim'] as const){
|
||||
for(const problem of ['stale','outsider','target','sealed','prescienceLeader','empty','overflow','forgedVictim'] as const){
|
||||
const g=fixture();const extra:Partial<Action>={};let actor='p';
|
||||
if(problem==='stale')extra.event='stale';if(problem==='outsider')actor='r';if(problem==='target')extra.target='p';
|
||||
if(problem==='sealed')g.battle!.plans.q={dial:1,leader:g.players[1].leaders[0].id,weapon:null,defense:null,support:0};
|
||||
if(problem==='prescienceLeader')g.battle!.prescience={player:'p',field:'leader',value:g.players[1].leaders[0].id};
|
||||
if(problem==='empty')g.players[1].leaders.forEach(l=>{l.dead=true;l.deaths=1;});
|
||||
if(problem==='overflow')g.players[1].leaders[0].deaths=Number.MAX_SAFE_INTEGER;
|
||||
if(problem==='advancedCapture'){g.advanced=true;g.players[0].faction='harkonnen';}
|
||||
if(problem==='forgedVictim')extra.leader=g.players[1].leaders[0].id;
|
||||
const before=structuredClone(g);let calls=0;const mock=t.mock.method(crypto,'getRandomValues',()=>{calls++;throw Error('RNG must not run');});
|
||||
assert.throws(()=>applyAction(g,actor,{type:'card',card,target:'q',event:g.battle!.event,...extra}),problem);assert.deepEqual(g,before);assert.equal(calls,0,problem);mock.mock.restore();
|
||||
|
||||
Reference in new issue
Block a user