import fs from 'node:fs/promises';import assert from 'node:assert/strict';import crypto from 'node:crypto';import os from 'node:os'; const fixture=[{id:'pedido-A',amount:100},{id:'pedido-A',amount:100},{id:'pedido-B',amount:200},{id:'pedido-B',amount:200},{id:'pedido-A',amount:101},{id:'pedido-C',amount:50}]; function replay(events,guard){const ledger=new Map();const result={applied:[],duplicates:[],conflicts:[]};for(const e of events){if(guard&&ledger.has(e.id)){(ledger.get(e.id)===e.amount?result.duplicates:result.conflicts).push(e);continue;}ledger.set(e.id,e.amount);result.applied.push(e);}return {...result,total:result.applied.reduce((a,e)=>a+e.amount,0)};} const baseline=replay(fixture,false),protectedResult=replay(fixture,true),reordered=replay([fixture[2],fixture[3],fixture[0],fixture[1],fixture[4],fixture[5]],true);assert.equal(baseline.total,751);assert.equal(protectedResult.total,350);assert.equal(protectedResult.duplicates.length,2);assert.equal(protectedResult.conflicts.length,1);assert.equal(reordered.total,350); // Simulate a lost acknowledgement after an effect; no network call exists. const lostAck=replay([{id:'efeito-confirmado',amount:40},{id:'efeito-confirmado',amount:40}],true);assert.equal(lostAck.total,40); const result={executedAt:new Date().toISOString(),environment:{node:process.version,platform:process.platform,arch:process.arch,os:os.release()},protocol:{question:'Um registro local de identidade evita repetir o efeito neste conjunto finito?',method:'Replay determinístico em memória com e sem controle; comparação dos resultados e conflito de payload.',command:'node artifacts/portal-lote30-20261111/laboratorio.mjs',noNetwork:true,syntheticBusinessData:true,notAnalyticsEvents:true,limits:['Não testa persistência, concorrência, falha de processo, banco ou provedor real.','Não demonstra exatamente uma vez em produção nem desempenho comparativo.','Totais são unidades sintéticas de um ensaio, não economia de cliente.']},fixture,baseline,protectedResult,reordered,lostAck,assertionsPassed:6,sourceSha256:crypto.createHash('sha256').update(await fs.readFile(new URL(import.meta.url))).digest('hex')};await fs.writeFile('artifacts/portal-lote30-20261111/laboratorio-resultados.json',JSON.stringify(result,null,2));console.log(JSON.stringify({assertionsPassed:6,withoutGuard:baseline.total,withGuard:protectedResult.total,noNetwork:true}));