import assert from 'node:assert/strict'; import {readFileSync} from 'node:fs'; import {join} from 'node:path'; import {hashAt,frozenSnapshot} from './boot-contract-report.mjs'; import {filesIn} from './entry-extension.mjs'; import {k1080WaitMainSources,k1080WaitMainInputs} from './k1080-wait-main-fixture.mjs'; import {k1080WaitMainTests,k1080WaitMainMutants} from './k1080-wait-main-mutants.mjs'; import {inspectWaitGuestServicesHost} from './wait-guest-services-host-report.mjs'; export const k1080WaitMainBoundary='Frozen actual WaitSet/Table/three-member Queue/CompletionBank and NEW main-only endpoints execute under independently modeled CPU/SP/root/frame/counter. No VM, physical stack, hardware IRQ, numeric acceptance or frozen-source changes.'; const parent={path:'reports/os-implementation/K1080-wait-services-preparation-NxRiMS/report.json',sha256:'a20ab4b3eaa06a163aee69eb3251aa84717ff4630f3659f4535c939dfbfc0d7d'}; export function k1080WaitMainAnchor(root){assert.equal(hashAt(root,parent.path),parent.sha256);return{...parent,result:inspectWaitGuestServicesHost(JSON.parse(readFileSync(join(root,parent.path),'utf8')),root)};} export function inspectK1080WaitMainHost(r,root){ assert.equal(r.schema,'turkos-k1080-wait-main-host/v1');assert.equal(r.status,'HOST_PREPARED');assert.equal(r.measurementScope,'MODELED_ONLY');assert.equal(r.guestAccepted,false);assert.equal(r.numericAccepted,false);assert.equal(r.kernelElfBound,false);assert.equal(r.arm64Status,'CHECK_ONLY');assert.equal(r.sourceInputsStable,true);assert.equal(r.hostTests,k1080WaitMainTests.length);assert.equal(r.boundary,k1080WaitMainBoundary);assert.deepEqual(r.pending,[1065,1070,1075,1080]);assert.deepEqual(r.localMoves,[]);assert.deepEqual(r.anchor,k1080WaitMainAnchor(root)); assert.match(r.runDirectory,/^reports\/os-implementation\/K1080-wait-main-preparation-[A-Za-z0-9_-]+$/);assert.deepEqual(r.inputsBefore,k1080WaitMainInputs(root));assert.deepEqual(r.inputsAfter,r.inputsBefore);assert.deepEqual(r.protectedBefore,frozenSnapshot(root));assert.deepEqual(r.protectedAfter,r.protectedBefore); const read=a=>{assert.ok(a.path.startsWith(r.runDirectory+'/')&&!a.path.split('/').some(s=>['','..','.'].includes(s)));assert.equal(hashAt(root,a.path),a.sha256);return readFileSync(join(root,a.path));}; const source=(rows,map,prefix)=>{assert.deepEqual(rows.map(x=>x.originalPath),[...map.keys()]);assert.deepEqual(filesIn(root,prefix).sort(),rows.map(x=>x.path).sort());for(const x of rows){assert.equal(x.path,prefix+'/'+x.originalPath);assert.deepEqual(read(x),map.get(x.originalPath));}}; source(r.sources,k1080WaitMainSources(root),r.runDirectory+'/sources'); const args=p=>['--manifest-path',`/${p}/os-k1080-wait-main/Cargo.toml`,'--locked','--offline']; const prefix=r.runDirectory+'/sources';const expected=[['test',...args(prefix),'--test','services','--target','aarch64-apple-darwin','--','--test-threads=1'],['check',...args(prefix),'--lib','--target','aarch64-unknown-none'],['--config','skip_children=true','--edition','2024','--check',...['bridge-main.rs','core-main.rs','main-tests.rs'].map(n=>`/${prefix}/bound-inputs/scripts/os-acceptance/k1080-wait-${n}`)],['clippy',...args(prefix),'--lib','--test','services','--target','aarch64-apple-darwin','--','-D','warnings']]; assert.deepEqual(r.commands.map(c=>c.id),['tests','arm64','format','clippy']);for(const[i,c]of r.commands.entries()){assert.equal(c.exitCode,0);assert.equal(c.executable,i===2?'rustfmt':'cargo');assert.deepEqual(c.argv,expected[i]);assert.equal(c.targetDirectory,`/${r.runDirectory}/target`);const log=read(c.log).toString();assert.doesNotMatch(log,/error\[E\d+\]|could not compile|signal: \d/);if(i===0){assert.match(log,new RegExp(`running ${k1080WaitMainTests.length} tests`));assert.match(log,new RegExp(`test result: ok\\. ${k1080WaitMainTests.length} passed; 0 failed`));for(const t of k1080WaitMainTests)assert.ok(log.includes(`test ${t} ... ok`),t);}else if(i!==2)assert.match(log,/Finished `dev` profile/);} assert.equal(r.mutants.length,k1080WaitMainMutants.length);for(const[i,m]of r.mutants.entries()){const spec=k1080WaitMainMutants[i];for(const[k,v]of Object.entries(spec))assert.deepEqual(m[k],v);const prefix=r.runDirectory+'/mutant-'+spec.id+'/sources';source(m.sources,k1080WaitMainSources(root,spec),prefix);assert.equal(m.source.path,prefix+'/bound-inputs/'+spec.path);assert.equal(m.executable,'cargo');assert.equal(m.exitCode,101);assert.equal(m.targetDirectory,`/${r.runDirectory}/target`);assert.deepEqual(m.argv,['test',...args(prefix),'--test','services','--target','aarch64-apple-darwin',spec.test,'--','--exact','--test-threads=1']);const log=read(m.log).toString();assert.doesNotMatch(log,/error\[E\d+\]|could not compile|signal: \d/);assert.match(log,/running 1 test/);assert.match(log,/test result: FAILED\. 0 passed; 1 failed/);assert.ok(log.includes(`test ${spec.test} ... FAILED`));assert.ok(log.includes('panicked at'));} return{hostTests:k1080WaitMainTests.length,compiledKilledMutants:k1080WaitMainMutants.length,measurementScope:'MODELED_ONLY',guestAccepted:false,numericAccepted:false,pending:r.pending,actualOwnedLookupCustody:true,fullCallbackExecutionChecked:true}; }