import {test} from 'node:test'; import assert from 'node:assert/strict'; import {createNetworkGate} from '../../src/lib/canvas-runtime/network.ts'; const deferred=()=>{let resolve;const promise=new Promise(yes=>resolve=yes);return{resolve,promise};}; test('transport rechecks identity after waiting for capacity and releases a rejected permit',async()=>{ let current=true,calls=0;const gate=createNetworkGate(1,()=>{if(!current)throw Error('identity_changed');}),hold=deferred(),signal=new AbortController().signal,first=gate.run(signal,async()=>{calls++;await hold.promise;}),second=assert.rejects(gate.run(signal,async()=>{calls++;}),/identity_changed/);await Promise.resolve();current=false;hold.resolve();await first;await second;assert.equal(calls,1);current=true;await gate.run(signal,async()=>{calls++;});assert.equal(calls,2); }); test('an aborted queued transport cannot pass the effect guard or consume the next capacity grant',async()=>{ let guards=0,calls=0;const gate=createNetworkGate(1,()=>guards++),hold=deferred(),signal=new AbortController().signal,abort=new AbortController(),first=gate.run(signal,async()=>{calls++;await hold.promise;}),second=assert.rejects(gate.run(abort.signal,async()=>{calls++;}),/cancelled/);await Promise.resolve();abort.abort(Error('cancelled'));await second;hold.resolve();await first;await gate.run(signal,async()=>{calls++;});assert.equal(calls,2);assert.equal(guards,2); });