import assert from 'node:assert/strict'; import {spawnSync} from 'node:child_process'; import {mkdtempSync,mkdirSync,writeFileSync} from 'node:fs'; import {join,relative,dirname} from 'node:path'; import {k1080WaitMainSources,k1080WaitMainInputs} from './k1080-wait-main-fixture.mjs'; import {hashAt,frozenSnapshot} from './boot-contract-report.mjs'; import {k1080WaitMainMutants,k1080WaitMainTests} from './k1080-wait-main-mutants.mjs'; import {k1080WaitMainAnchor,k1080WaitMainBoundary,inspectK1080WaitMainHost} from './k1080-wait-main-host-report.mjs'; const root=process.cwd();assert.equal(process.argv.length,2); const inputsBefore=k1080WaitMainInputs(root),protectedBefore=frozenSnapshot(root),anchor=k1080WaitMainAnchor(root); const directory=mkdtempSync(join(root,'reports/os-implementation/K1080-wait-main-preparation-')); const artifact=p=>({path:relative(root,p),sha256:hashAt(root,relative(root,p))}),clean=s=>s.split(root).join(''); const env={...process.env,CARGO_TARGET_DIR:join(directory,'target')};delete env.RUSTFLAGS;delete env.CARGO_ENCODED_RUSTFLAGS; function source(name='',edit=null){const at=join(directory,name,'sources'),map=k1080WaitMainSources(root,edit);for(const[p,b]of map){const path=join(at,p);mkdirSync(dirname(path),{recursive:true});writeFileSync(path,b);}return{at,sources:[...map.keys()].map(originalPath=>({originalPath,...artifact(join(at,originalPath))}))};} function command(id,argv,executable='cargo'){console.log('K1080 MAIN '+id);const r=spawnSync(executable,argv,{cwd:root,env,encoding:'utf8',timeout:180000,maxBuffer:8*1024*1024});assert.equal(r.error,undefined);const log=join(directory,id+'.log');writeFileSync(log,clean((r.stdout??'')+(r.stderr??'')));return{id,executable,argv:argv.map(clean),targetDirectory:clean(env.CARGO_TARGET_DIR),exitCode:r.status,log:artifact(log)};} const args=at=>['--manifest-path',join(at,'os-k1080-wait-main/Cargo.toml'),'--locked','--offline']; const baseline=source(); const commands=[command('tests',['test',...args(baseline.at),'--test','services','--target','aarch64-apple-darwin','--','--test-threads=1']),command('arm64',['check',...args(baseline.at),'--lib','--target','aarch64-unknown-none']),command('format',['--config','skip_children=true','--edition','2024','--check',...['bridge-main.rs','core-main.rs','main-tests.rs'].map(n=>join(baseline.at,'bound-inputs/scripts/os-acceptance/k1080-wait-'+n))],'rustfmt'),command('clippy',['clippy',...args(baseline.at),'--lib','--test','services','--target','aarch64-apple-darwin','--','-D','warnings'])]; for(const c of commands)assert.equal(c.exitCode,0,c.log.path); const mutants=[];for(const spec of k1080WaitMainMutants){const branch=source('mutant-'+spec.id,spec);const c=command('mutant-'+spec.id,['test',...args(branch.at),'--test','services','--target','aarch64-apple-darwin',spec.test,'--','--exact','--test-threads=1']);assert.equal(c.exitCode,101,c.log.path);mutants.push({...spec,...c,id:spec.id,sources:branch.sources,source:artifact(join(branch.at,'bound-inputs',spec.path))});} const inputsAfter=k1080WaitMainInputs(root);assert.deepEqual(inputsAfter,inputsBefore);assert.deepEqual(frozenSnapshot(root),protectedBefore); const report={schema:'turkos-k1080-wait-main-host/v1',status:'HOST_PREPARED',measurementScope:'MODELED_ONLY',guestAccepted:false,numericAccepted:false,kernelElfBound:false,arm64Status:'CHECK_ONLY',sourceInputsStable:true,hostTests:k1080WaitMainTests.length,boundary:k1080WaitMainBoundary,pending:[1065,1070,1075,1080],localMoves:[],anchor,runDirectory:relative(root,directory),createdAt:new Date().toISOString(),inputsBefore,inputsAfter,protectedBefore,protectedAfter:frozenSnapshot(root),sources:baseline.sources,commands,mutants}; const result=inspectK1080WaitMainHost(report,root);writeFileSync(join(directory,'report.json'),JSON.stringify(report,null,2)+'\n');console.log('K1080 MAIN HOST PREPARED '+JSON.stringify(result)+' '+relative(root,join(directory,'report.json')));