0hmX/am3352

This code suite comprises TypeScript scripts that analyze, verify, and assemble complex DDR memory interface hardware, focusing on physical routing, via and pad placement, electrical clearance, and physical constraints, often involving precise geometric calculations and consistent provenance tracking.

Version
1.0.5
License
unset
Stars
0

scripts/ddr-composite-routing-context.ts

import{auditHostSelfContacts}from'./audit-ddr-host-self-contacts'
/** Replays the experimental power/exit/host/K6 chain before exposing actual routing obstacles. */
import{readFileSync,writeFileSync,mkdirSync,existsSync}from'node:fs'
import{classifyHostFixedContact}from'./audit-ddr-host-fixed-contacts'
import{resolve,dirname}from'node:path'
import{createHash}from'node:crypto'
import{verifyDdrCapture}from'./ddr-capture-provenance'
import{loadFacingContext,applyFacingExitReplacements}from'./ddr-facing-context'
import{appendVerifiedFacingHost,buildFacingRamCache}from'./assemble-ddr-facing-progress'
import{repairK6Trace}from'./repair-ddr-cpu-supply-junction'
import{objectHash,validateDeclaredDdrReplacements}from'./improve-ddr-a9-power-launches'
import{supportCopperObstacles}from'./ddr-support-routing-context'
import{verifyDdrSystemCopper,auditDdrTraceJunctions}from'./check-ddr-system-copper'
import{auditRouteAngles}from'./check-route-angles'
import{checkHostTerminalContract}from'./route-ddr-sequential'
async function loadCompositeParent(capture:string,compositeDir:string){
 const hashes=new Map<string,string>(),fileHash=(p:string)=>createHash('sha256').update(readFileSync(p)).digest('hex'),read=(p:string)=>{p=resolve(p);const h=fileHash(p);if(hashes.has(p)&&hashes.get(p)!==h)throw Error('Input changed');hashes.set(p,h);return JSON.parse(readFileSync(p,'utf8'))},bind=(records:any)=>{for(const[p,h]of Object.entries(records??{})){if(fileHash(p)!==h)throw Error(`Stale bound input ${p}`);hashes.set(p,h as string)}}
 const{captureHash}=verifyDdrCapture(capture),candidate=read(resolve(compositeDir,'candidate.circuit.json')),report=read(resolve(compositeDir,'report.json')),host=read(resolve(compositeDir,'host-bundle.json')),k6=read(resolve(compositeDir,'original-copper-replacements.json')),parent=read(resolve(k6.parentDirectory,'candidate.circuit.json')),prior=read(resolve(k6.parentDirectory,'report.json'))
 bind(prior.inputFileHashes);bind(k6.inputHashes)
 const powerPath=Object.keys(prior.inputFileHashes).find(p=>p.endsWith('/ddr-integrated-ten-power56/candidate.circuit.json'));if(!powerPath)throw Error('Missing explicit power56 provenance')
 const powerDir=dirname(powerPath),power=read(powerPath),powerManifest=read(resolve(powerDir,'original-copper-replacements.json')),powerReport=read(resolve(powerDir,'report.json')),powerParent=read(resolve(powerManifest.parentDirectory,'candidate.circuit.json')),dmDir=resolve(powerDir,'../ddr-facing-dm0-power54'),base=await loadFacingContext(capture,powerManifest.parentDirectory,dmDir)
 if([report,prior,powerReport,powerManifest,k6,host].some(x=>x.captureHash!==captureHash)||host.layerSpace!=='physical'||host.traces.length!==11||prior.exitReplacements.length!==2||powerReport.originalCopperReplacementsSha256!==objectHash(powerManifest))throw Error('Composite capture/count/manifest mismatch')
 const dmHostPath=Object.keys(prior.inputFileHashes).find(p=>p.endsWith('/ddr-facing-dm0-host/host-bundle.json'));if(!dmHostPath)throw Error('Missing declared DM host bundle');const dmHost=read(dmHostPath),dmHostReport=read(resolve(dirname(dmHostPath),'report.json'));if(objectHash(dmHost)!==objectHash(host)||!dmHostReport.accepted||dmHostReport.parentCandidateSha256!==objectHash(base.candidate))throw Error('DM host provenance differs')
 const powerEvidence=validateDeclaredDdrReplacements(powerParent,power,powerManifest)
 let replay=power;for(const change of prior.exitReplacements)replay=applyFacingExitReplacements(replay,change)
 replay=appendVerifiedFacingHost(replay,base.host.traces,host.traces)
 if(objectHash(replay)!==objectHash(parent)||prior.candidateCircuitSha256!==objectHash(parent))throw Error('Composite exit/host replay differs from parent')
 if(k6.replacements.length!==1||k6.replacements[0].id!=='pcb_trace:pcb_trace_3'||objectHash(repairK6Trace(k6.replacements[0].before,parent.find((e:any)=>e.type==='source_trace'&&e.source_trace_id==='source_trace_3')))!==objectHash(k6.replacements[0].after))throw Error('Unrecognized K6 repair')
 const k6Evidence=validateDeclaredDdrReplacements(parent,candidate,k6)
 if(report.candidateCircuitSha256!==objectHash(candidate)||report.originalCopperReplacementsSha256!==objectHash(k6))throw Error('Stale final composite report')
 const frozenInput=read(resolve(capture,'routing-input.json')),map=read(resolve(capture,'signal-map.json')),connections=frozenInput.connections.map((c:any)=>({...c,pointsToConnect:c.pointsToConnect.map((p:any)=>{const e=candidate.find((e:any)=>e.type==='pcb_breakout_point'&&e.pcb_breakout_point_id===p.pointId);if(!e)throw Error('Missing actual endpoint');return{...p,x:e.x,y:e.y,layer:e.layer}})})),ids=new Set(host.traces.map((t:any)=>t.pcb_trace_id))
 for(const t of host.traces)if(objectHash(candidate.find((e:any)=>e.type==='pcb_trace'&&e.pcb_trace_id===t.pcb_trace_id))!==objectHash(t))throw Error('Actual host copper differs')
 const fixed=candidate.filter((e:any)=>!ids.has(e.pcb_trace_id)),physical=verifyDdrSystemCopper(fixed,host.traces,connections,{}),allAngles=auditRouteAngles(candidate.filter((e:any)=>e.type==='pcb_trace')),allJunctions=auditDdrTraceJunctions(candidate,connections),terminal=checkHostTerminalContract(host.traces,connections.filter((c:any)=>host.traces.some((t:any)=>t.connection_name===c.name)))
 if(physical.errors.length||physical.violations.length||physical.connectivity.filter(c=>c.connected).length!==11||!allAngles.valid||!allJunctions.valid||!terminal.valid)throw Error('Composite baseline actual-copper validation failed')
 const ownerPath=resolve('/Users/ankan/Documents/Codex/2026-09-10/what-x20/outputs/mt41k512m8da-107-it-p-fanout/scripts/audit-am3352-obstacle-ownership.ts');hashes.set(ownerPath,fileHash(ownerPath));const{getSourceNetOwnerForAudit}=await import(ownerPath),owner=getSourceNetOwnerForAudit(candidate),names=new Map<string,string[]>()
 for(const c of connections){const n=owner(c.source_trace_id??c.name);if(!n)throw Error('Unresolved net identity');names.set(n,[...names.get(n)??[],c.name])}
 const obstacles=fixed.filter((e:any)=>['pcb_trace','pcb_via','pcb_smtpad'].includes(e.type)).flatMap((e:any)=>{const n=owner(e[`${e.type}_id`]);if(!n)throw Error(`Unresolved copper ${e[`${e.type}_id`]}`);return supportCopperObstacles([e]).map(o=>({...o,...((e.type==='pcb_smtpad'&&e.shape==='circle')||e.type==='pcb_via'||o.obstacleId.startsWith('fixed_via_')||o.obstacleId.endsWith('_cap')?{shape:'circle'}:{}),connectedTo:names.get(n)??[`reserved:${e[`${e.type}_id`]}`]}))})
 const nominal=read(resolve(powerDir,'../ddr-integrated-ten/dqlm-audit.json'));if(nominal.captureHash!==captureHash)throw Error('Nominal capture mismatch')
 const assertUnchanged=()=>{verifyDdrCapture(capture);base.assertUnchanged();for(const[p,h]of hashes)if(fileHash(p)!==h)throw Error(`Composite source changed: ${p}`)};assertUnchanged()
 return{captureHash,candidate,report,host,fixed,map,nominal,input:{...frozenInput,connections,obstacles,traces:host.traces},assertUnchanged,evidence:{captureHash,candidateSha256:objectHash(candidate),hostSha256:objectHash(host.traces),powerEvidence,k6Evidence,inputFileHashes:Object.fromEntries(hashes),physical,allAngles,allJunctions,terminal,sameNetTopologyStatus:'Not qualified: obstacle ownership permits same-net merges; known retained DQ12 self-contact needs a separate topology gate before route acceptance.',scope:'Replayed exact power56 + DM0/DQ7 + eleven hosts + K6. Actual immutable copper, full through barrels, explicit net ownership; experimental composite rather than new frozen capture.'}}
}
/** Exact host/fixed contacts may occur only at their authoritative source-owned exits. */
export function auditCompositeHostTopology(candidate:any[],hosts:any[],connections:any[]){
 const ids=new Set(hosts.map(t=>t.pcb_trace_id)),fixed=candidate.filter(e=>!ids.has(e.pcb_trace_id)),physical=verifyDdrSystemCopper(fixed,hosts,connections,{},50,{reportSameNetContacts:true}),contacts:any[]=[],errors:string[]=[]
 for(const contact of physical.sameNetContacts??[]){const shape=contact.aShape.fresh?contact.aShape:contact.bShape,host=hosts.find(t=>t.pcb_trace_id===shape.traceId);if(!host){errors.push('Unresolved fresh contact owner');continue}const classified=classifyHostFixedContact(contact,host),connection=connections.find(c=>c.name===host.connection_name),same=(a:any,b:any)=>Math.hypot(a.x-b.x,a.y-b.y)<1e-7,allowed=(connection?.pointsToConnect??[]).filter((p:any)=>p.layer===contact.layer&&[host.route[0],host.route.at(-1)].some(q=>q.layer===p.layer&&same(q,p))&&[classified.hostShape.a,classified.hostShape.b].some(q=>same(q,p))&&[classified.fixedShape.a,classified.fixedShape.b].some(q=>same(q,p))).filter((p:any)=>{const exit=candidate.find(e=>e.type==='pcb_breakout_point'&&e.pcb_breakout_point_id===p.pointId),trace=fixed.find(e=>e.type==='pcb_trace'&&e.pcb_trace_id===classified.fixedTraceId);return exit&&trace&&trace.source_trace_id===exit.source_trace_id&&trace.route.at(-1)?.layer===p.layer&&same(trace.route.at(-1),p)&&same(exit,p)&&exit.layer===p.layer})
  const valid=classified.classification!=='unintended-interior-contact'&&allowed.length===1;contacts.push({...classified,valid,pointId:allowed[0]?.pointId});if(!valid)errors.push(`Nonterminal or unauthorized same-net contact ${host.pcb_trace_id}`)
 }
 for(const h of hosts){const c=connections.find(c=>c.name===h.connection_name);for(const p of c?.pointsToConnect??[])if(!contacts.some(v=>v.valid&&v.hostTraceId===h.pcb_trace_id&&v.pointId===p.pointId))errors.push(`Missing terminal contact witness ${h.pcb_trace_id}/${p.pointId}`)}
 const selfContacts=auditHostSelfContacts(hosts);if(!selfContacts.valid)errors.push('Nonlocal host wire self-contact')
 return{valid:!errors.length&&!physical.errors.length&&!physical.violations.length,errors,contacts,physical,selfContacts,scope:'Every same-net host/fixed contact must be an actual contracted endpoint and its source-owned saved trace; also rejects nonlocal host wire self-contact beyond0.5mm of intervening planar path.'}
}
export async function loadDdrCompositeRoutingContext(capture:string,compositeDir:string,options:{invalidateDq12?:boolean}={}){
 const base=await loadCompositeParent(capture,compositeDir)
 if(!options.invalidateDq12)return{...base,invalidation:null,topology:auditCompositeHostTopology(base.candidate,base.host.traces,base.input.connections)}
 const entry=base.map.find((m:any)=>m.cpuSignal==='DDR_D12'),connection=base.input.connections.find((c:any)=>c.source_trace_id===entry?.sourceTraceId),matches=base.host.traces.filter((t:any)=>t.connection_name===connection?.name)
 if(connection?.ramByte!==1||connection?.ramTerminal!=='DQ4'||matches.length!==1||matches[0].source_trace_id!=='source_trace_690')throw Error('Expected exact known DQ12 host invalidation')
 const removed=matches[0],actual=base.candidate.find((e:any)=>e.type==='pcb_trace'&&e.pcb_trace_id===removed.pcb_trace_id);if(objectHash(actual)!==objectHash(removed))throw Error('DQ12 actual copper differs from verified bundle')
 const traces=base.host.traces.filter((t:any)=>t!==removed),candidate=base.candidate.filter((e:any)=>e.type!=='pcb_trace'||e.pcb_trace_id!==removed.pcb_trace_id),host={...base.host,traces},topology=auditCompositeHostTopology(candidate,traces,base.input.connections),terminal=checkHostTerminalContract(traces,base.input.connections.filter((c:any)=>traces.some((t:any)=>t.connection_name===c.name))),allAngles=auditRouteAngles(candidate.filter((e:any)=>e.type==='pcb_trace')),allJunctions=auditDdrTraceJunctions(candidate,base.input.connections)
 if(traces.length!==10||!topology.valid||!terminal.valid||!allAngles.valid||!allJunctions.valid||topology.physical.connectivity.filter(c=>c.connected).length!==10)throw Error('Invalidated ten-net seed fails actual topology/geometry')
 const retainedIds=new Set(traces.map((t:any)=>t.pcb_trace_id));if(objectHash(candidate.filter((e:any)=>!retainedIds.has(e.pcb_trace_id)))!==objectHash(base.fixed))throw Error('Invalidation changed fixed copper')
 const invalidation={signal:'DDR_D12',connectionName:connection.name,removedHost:removed,removedHostSha256:objectHash(removed),parentCircuitSha256:objectHash(base.candidate),candidateCircuitSha256:objectHash(candidate),preservedFixedCopperSha256:objectHash(base.fixed),reason:'Unintended interior contact to own RAM escape bypasses nominal path; only this host trace removed, all original RAM/CPU fixed escapes retained.'}
 base.assertUnchanged();return{...base,candidate,host,input:{...base.input,traces},report:{...base.report,physical:topology.physical,terminalContract:terminal,fullCandidateAngles:allAngles,fixedJunctionAudit:allJunctions,hostTracesSha256:objectHash(traces),hostBundleSha256:objectHash(host),supportCircuitSha256:objectHash(candidate),preservedHostCount:10,candidateCircuitSha256:objectHash(candidate),connectedHostCount:10,scope:'Explicitly invalidated DQ12 host. Ten remaining hosts have only authoritative endpoint contacts; DDR routing/timing incomplete.'},invalidation,topology,evidence:{...base.evidence,sameNetTopologyStatus:'Ten remaining hosts pass exact endpoint-only contact audit; DQ12 host explicitly invalidated.',invalidation,topology,terminal,allAngles,allJunctions}}
}
if(import.meta.main&&!process.argv.includes('--finalize-ordered-host')&&!process.argv.includes('--finalize-dq7-host')){const[capture,parent,out]=process.argv.slice(2);if(!out)throw Error('Usage: capture composite-parent output');const c=await loadDdrCompositeRoutingContext(capture,parent,{invalidateDq12:true});mkdirSync(out,{recursive:true});for(const[n,v]of Object.entries({'candidate.circuit.json':c.candidate,'host-bundle.json':c.host,'routing-input.json':c.input,'report.json':c.report,'invalidation.json':c.invalidation,'topology-report.json':c.topology,'input-evidence.json':c.evidence}))writeFileSync(resolve(out,n),JSON.stringify(v,null,2)+'\n');c.assertUnchanged();const audit=Bun.spawn(['bun','scripts/audit-ddr-global-power-launches.ts',resolve(out),resolve(capture)],{stdout:'inherit',stderr:'inherit'});if(await audit.exited!==0)throw Error('Power audit failed');const power=JSON.parse(readFileSync(resolve(out,'ram-power-launch-audit.json'),'utf8'));if(power.launchQualified!==56||power.total!==60)throw Error('Power qualification changed');writeFileSync(resolve(out,'report.json'),JSON.stringify({...c.report,launchAuditSha256:objectHash(power),launchQualified:power.launchQualified,totalRamPowerPads:power.total},null,2)+'\n');c.assertUnchanged();console.log(JSON.stringify({out,hosts:c.host.traces.length,topology:c.topology.valid,removedHash:c.invalidation?.removedHostSha256}))}
/** The ordered mask experiment invalidates its old host in addition to DQ12. */
export async function loadOrderedDdrCompositeSeed(capture:string,parentDir:string,orderedDir:string){
 const base=await loadDdrCompositeRoutingContext(capture,parentDir,{invalidateDq12:true}),hashes=new Map<string,string>(),fh=(p:string)=>createHash('sha256').update(readFileSync(p)).digest('hex'),read=(p:string)=>{p=resolve(p);hashes.set(p,fh(p));return JSON.parse(readFileSync(p,'utf8'))},changes=read(resolve(orderedDir,'replacements.json')),trial=read(resolve(orderedDir,'report.json')),ordered=read(resolve(orderedDir,'candidate.circuit.json')),parent=read(resolve(parentDir,'candidate.circuit.json'))
 if(!trial.accepted||trial.captureHash!==base.captureHash||trial.parentCircuitSha256!==objectHash(parent)||objectHash(parent)!==base.invalidation?.parentCircuitSha256||changes.invalidatedHostTraces?.length!==1)throw Error('Ordered DM experiment provenance mismatch')
 const dm=changes.invalidatedHostTraces[0],entry=base.map.find((m:any)=>m.cpuSignal==='DDR_DQM0');if(dm.source_trace_id!==entry.sourceTraceId||objectHash(base.host.traces.find((t:any)=>t.pcb_trace_id===dm.pcb_trace_id))!==objectHash(dm))throw Error('Unexpected old DM host invalidation')
 const replay=applyFacingExitReplacements(parent,changes).filter((e:any)=>e.type!=='pcb_trace'||e.pcb_trace_id!==dm.pcb_trace_id);if(objectHash(replay)!==objectHash(ordered))throw Error('Ordered candidate contains undeclared geometry')
 const candidate=applyFacingExitReplacements(base.candidate,changes).filter((e:any)=>e.type!=='pcb_trace'||e.pcb_trace_id!==dm.pcb_trace_id),traces=base.host.traces.filter((t:any)=>t.pcb_trace_id!==dm.pcb_trace_id),host={...base.host,traces},connections=base.input.connections.map((c:any)=>({...c,pointsToConnect:c.pointsToConnect.map((p:any)=>{const e=candidate.find((e:any)=>e.type==='pcb_breakout_point'&&e.pcb_breakout_point_id===p.pointId);if(!e)throw Error('Missing ordered endpoint');return{...p,x:e.x,y:e.y,layer:e.layer}})})),topology=auditCompositeHostTopology(candidate,traces,connections),terminal=checkHostTerminalContract(traces,connections.filter((c:any)=>traces.some((t:any)=>t.connection_name===c.name))),allAngles=auditRouteAngles(candidate.filter((e:any)=>e.type==='pcb_trace')),allJunctions=auditDdrTraceJunctions(candidate,connections)
 if(traces.length!==9||!topology.valid||!terminal.valid||!allAngles.valid||!allJunctions.valid||topology.physical.connectivity.filter(c=>c.connected).length!==9)throw Error('Ordered nine-seed actual geometry/topology failed')
 const ids=new Set(traces.map((t:any)=>t.pcb_trace_id)),fixed=candidate.filter((e:any)=>!ids.has(e.pcb_trace_id)),assertUnchanged=()=>{base.assertUnchanged();for(const[p,h]of hashes)if(fh(p)!==h)throw Error('Ordered experiment changed')},invalidation={...base.invalidation,additionalRemovedHost:dm,additionalRemovedHostSha256:objectHash(dm),orderedExitReplacement:changes,candidateCircuitSha256:objectHash(candidate),scope:'DQ12 and old DM0 host explicitly removed; nine exact remaining hosts preserved.'};assertUnchanged()
 return{...base,candidate,host,fixed,input:{...base.input,connections,traces},topology,invalidation,assertUnchanged,report:{...base.report,physical:topology.physical,hostTracesSha256:objectHash(traces),hostBundleSha256:objectHash(host),candidateCircuitSha256:objectHash(candidate),connectedHostCount:9,scope:invalidation.scope},evidence:{...base.evidence,invalidation,orderedInputHashes:Object.fromEntries(hashes),topology,terminal,allAngles,allJunctions}}
}
/** Reusable replay of the accepted ordered DM host atop the nine-net seed. */
export async function loadAcceptedOrderedHostContext(capture:string,parentDir:string,orderedDir:string,routeDir:string){
 const seed=await loadOrderedDdrCompositeSeed(capture,parentDir,orderedDir),hashes=new Map<string,string>(),fh=(p:string)=>createHash('sha256').update(readFileSync(p)).digest('hex'),read=(p:string)=>{p=resolve(p);hashes.set(p,fh(p));return JSON.parse(readFileSync(p,'utf8'))},candidate=read(resolve(routeDir,'candidate.circuit.json')),host=read(resolve(routeDir,'host-bundle.json')),traces=read(resolve(routeDir,'raw-traces.json')),r=read(resolve(routeDir,existsSync(resolve(routeDir,'host-route-report.json'))?'host-route-report.json':'report.json'))
 if(!r.accepted||r.captureHash!==seed.captureHash||r.parentCandidateSha256!==objectHash(seed.candidate)||traces.length!==1||objectHash(candidate)!==objectHash([...seed.candidate,...traces])||objectHash(host)!==objectHash({...seed.host,traces:[...seed.host.traces,...traces]}))throw Error('Accepted ordered host replay differs')
 const dm=seed.map.find((m:any)=>m.cpuSignal==='DDR_DQM0'),connection=seed.input.connections.find((c:any)=>c.source_trace_id===dm.sourceTraceId);if(traces[0].source_trace_id!==dm.sourceTraceId||traces[0].connection_name!==connection.name||traces[0].route.some((p:any)=>p.route_type!=='wire'||p.layer!=='inner4'))throw Error('Unexpected added signal or via')
 const topology=auditCompositeHostTopology(candidate,host.traces,seed.input.connections),terminal=checkHostTerminalContract(host.traces,seed.input.connections.filter((c:any)=>host.traces.some((t:any)=>t.connection_name===c.name))),allAngles=auditRouteAngles(candidate.filter((e:any)=>e.type==='pcb_trace')),allJunctions=auditDdrTraceJunctions(candidate,seed.input.connections)
 if(!topology.valid||!terminal.valid||!allAngles.valid||!allJunctions.valid||topology.physical.connectivity.filter(c=>c.connected).length!==10)throw Error('Replayed ordered ten hosts fail validation')
 const planar=(route:any[])=>route.reduce((sum:number,b:any,i:number)=>{const a=route[i-1];return sum+(a?.route_type==='wire'&&b.route_type==='wire'&&a.layer===b.layer?Math.hypot(a.x-b.x,a.y-b.y):0)},0),escapes=connection.pointsToConnect.map((p:any)=>{const exit=candidate.find((e:any)=>e.type==='pcb_breakout_point'&&e.pcb_breakout_point_id===p.pointId),t=candidate.find((e:any)=>e.type==='pcb_trace'&&e.source_trace_id===exit?.source_trace_id&&e.route.at(-1)?.layer===p.layer&&Math.hypot(e.route.at(-1).x-p.x,e.route.at(-1).y-p.y)<1e-7);if(!t)throw Error('Missing actual DM escape');return planar(t.route)}),nominalMm=seed.nominal.bytes.find((b:any)=>b.byte===0).dqlmPairedDataMaximumMm,measuredDm={escapeMm:escapes,hostMm:planar(traces[0].route),nominalMm,totalPlanarMm:escapes.reduce((a:number,b:number)=>a+b,0)+planar(traces[0].route)}
 if(measuredDm.totalPlanarMm>nominalMm+1e-7)throw Error('Actual ordered DM exceeds nominal')
 const ids=new Set(host.traces.map((t:any)=>t.pcb_trace_id)),fixed=candidate.filter((e:any)=>!ids.has(e.pcb_trace_id)),assertUnchanged=()=>{seed.assertUnchanged();for(const[p,h]of hashes)if(fh(p)!==h)throw Error('Accepted ordered route changed')};assertUnchanged()
 return{...seed,candidate,host,fixed,input:{...seed.input,traces:host.traces},topology,assertUnchanged,report:{...seed.report,physical:topology.physical,terminalContract:terminal,fullCandidateAngles:allAngles,fixedJunctionAudit:allJunctions,hostTracesSha256:objectHash(host.traces),hostBundleSha256:objectHash(host),candidateCircuitSha256:objectHash(candidate),supportCircuitSha256:objectHash(candidate),connectedHostCount:10,preservedHostCount:9,scope:'Ordered DM0 rerouted; ten endpoint-only hosts, DQ12 invalidated and DQ7 not yet hosted. Experimental composite, no DDR signoff.'},evidence:{...seed.evidence,acceptedHostInputHashes:Object.fromEntries(hashes),topology,terminal,allAngles,allJunctions,measuredDm},measuredDm,hostRouteReport:r}
}
if(import.meta.main&&process.argv.includes('--finalize-ordered-host')){
 const[capture,parent,ordered,out]=process.argv.slice(2).filter(a=>a!=='--finalize-ordered-host');if(!out)throw Error('Usage: capture parent ordered-exit route-output --finalize-ordered-host')
 const savedReport=resolve(out,'host-route-report.json');if(!existsSync(savedReport))writeFileSync(savedReport,readFileSync(resolve(out,'report.json')))
 const c=await loadAcceptedOrderedHostContext(capture,parent,ordered,out),{snapshot}=verifyDdrCapture(capture),dm=c.invalidation.orderedExitReplacement.traces[0].after,dq=c.candidate.find((e:any)=>e.type==='pcb_trace'&&e.source_trace_id==='source_trace_530'),cache=buildFacingRamCache(snapshot,[{ball:'B7',trace:dm},{ball:'E7',trace:dq}]),write=(n:string,v:any)=>writeFileSync(resolve(out,n),JSON.stringify(v,null,2)+'\n')
 const exits=[dm,dq].map((t,i)=>{const e=t.route.at(-1),p=[...t.route].reverse().find((p:any)=>p.route_type==='wire'&&p.layer===e.layer&&Math.hypot(e.x-p.x,e.y-p.y)>1e-7),d=Math.hypot(e.x-p.x,e.y-p.y),v={x:(e.x-p.x)/d,y:(e.y-p.y)/d};if(v.x<=0||e.layer!=='inner4')throw Error('Wrong ordered exit direction');return{ball:i?'E7':'B7',terminal:i?'DQ7':'DM',side:'local-left / world-right at180degrees',worldExit:{x:e.x,y:e.y,layer:e.layer},localExit:{x:snapshot.placements[0].pcbX-e.x,y:snapshot.placements[0].pcbY-e.y,layer:e.layer},tangent:{world:v,local:{x:-v.x,y:-v.y}},logicalViaTransition:'top->inner4',physicalViaSpan:'all10layers'}})
 const {obstacles,...input}=c.input;c.assertUnchanged();write('routing-input.json',{...input,scope:'Actual updated connections; regenerate fixed obstacles before routing.'});write('ram-byte0-facing-progress.trace-paths.json',cache.paths);write('exit-contract.json',{captureHash:c.captureHash,pathCount:72,changedBalls:['B7','E7'],unchangedPaths:70,identityLayerMappingRequired:true,paddingChangeMm:0,priorCenterlineBounds:cache.before,newCenterlineBounds:cache.after,exits,scope:'Ordered experimental RAM0 profile; retain original CA/CK branch contracts.'});write('source-provenance.json',c.evidence);write('report.json',{...c.report,sourceProvenance:c.evidence,invalidation:c.invalidation,hostRouteReport:c.hostRouteReport,measuredDm:c.measuredDm,ramCacheSha256:objectHash(cache.paths)})
 const audit=Bun.spawn(['bun','scripts/audit-ddr-global-power-launches.ts',resolve(out),resolve(capture)],{stdout:'inherit',stderr:'inherit'});if(await audit.exited!==0)throw Error('Power audit failed');const power=JSON.parse(readFileSync(resolve(out,'ram-power-launch-audit.json'),'utf8'));if(power.launchQualified!==56)throw Error('Power launches changed');const report=JSON.parse(readFileSync(resolve(out,'report.json'),'utf8'));c.assertUnchanged();write('report.json',{...report,launchAuditSha256:objectHash(power),launchQualified:56,totalRamPowerPads:60});console.log(JSON.stringify({out,hosts:10,cachePaths:72,power:56,totalDmMm:c.measuredDm.totalPlanarMm}))
}

/** Replay the one accepted DQ7 continuation without trusting its previous pass flag. */
export async function loadAcceptedDq7Context(capture:string,parent:string,ordered:string,acceptedHostDir:string,out:string){
 const base=await loadAcceptedOrderedHostContext(capture,parent,ordered,acceptedHostDir),hashes=new Map<string,string>(),fh=(p:string)=>createHash('sha256').update(readFileSync(p)).digest('hex'),read=(p:string)=>{p=resolve(p);hashes.set(p,fh(p));return JSON.parse(readFileSync(p,'utf8'))}
 const candidate=read(resolve(out,'candidate.circuit.json')),host=read(resolve(out,'host-bundle.json')),raw=read(resolve(out,'raw-traces.json')),routeReport=read(resolve(out,existsSync(resolve(out,'host-route-report.json'))?'host-route-report.json':'report.json')),parentReport=read(resolve(acceptedHostDir,'report.json')),cache=read(resolve(acceptedHostDir,'ram-byte0-facing-progress.trace-paths.json')),exitContract=read(resolve(acceptedHostDir,'exit-contract.json'))
 const entry=base.map.find((m:any)=>m.cpuSignal==='DDR_D7'),connection=base.input.connections.find((c:any)=>c.source_trace_id===entry.sourceTraceId)
 if(!routeReport.accepted||routeReport.captureHash!==base.captureHash||routeReport.parentCandidateSha256!==objectHash(base.candidate)||host.layerSpace!=='physical'||raw.length!==1||raw[0].source_trace_id!==entry.sourceTraceId||raw[0].connection_name!==connection.name||raw[0].route.some((p:any)=>p.route_type!=='wire'||p.layer!=='inner4')||objectHash(candidate)!==objectHash([...base.candidate,...raw])||objectHash(host)!==objectHash({...base.host,traces:[...base.host.traces,...raw]}))throw Error('DQ7 continuation provenance mismatch')
 if(parentReport.candidateCircuitSha256!==objectHash(base.candidate)||parentReport.ramCacheSha256!==objectHash(cache)||exitContract.captureHash!==base.captureHash)throw Error('Stale inherited RAM contract/cache')
 const topology=auditCompositeHostTopology(candidate,host.traces,base.input.connections),terminal=checkHostTerminalContract(host.traces,base.input.connections.filter((c:any)=>host.traces.some((t:any)=>t.connection_name===c.name))),allAngles=auditRouteAngles(candidate.filter((e:any)=>e.type==='pcb_trace')),allJunctions=auditDdrTraceJunctions(candidate,base.input.connections)
 if(!topology.valid||!terminal.valid||!allAngles.valid||!allJunctions.valid||topology.physical.connectivity.filter(c=>c.connected).length!==11)throw Error('DQ7 actual geometry or topology failed')
 const planar=(route:any[])=>route.reduce((sum:number,b:any,i:number)=>{const a=route[i-1];return sum+(a?.route_type==='wire'&&b.route_type==='wire'&&a.layer===b.layer?Math.hypot(a.x-b.x,a.y-b.y):0)},0),escapeMm=connection.pointsToConnect.map((p:any)=>{const e=candidate.find((e:any)=>e.type==='pcb_breakout_point'&&e.pcb_breakout_point_id===p.pointId),t=candidate.find((t:any)=>t.type==='pcb_trace'&&t.source_trace_id===e?.source_trace_id&&t.route.at(-1)?.layer===p.layer&&Math.hypot(t.route.at(-1).x-p.x,t.route.at(-1).y-p.y)<1e-7);if(!t)throw Error('Missing DQ7 actual escape');return planar(t.route)}),measuredDq7={escapeMm,hostMm:planar(raw[0].route),totalPlanarMm:escapeMm.reduce((a:number,b:number)=>a+b,0)+planar(raw[0].route),nominalMm:base.nominal.bytes.find((b:any)=>b.byte===0).dqlmPairedDataMaximumMm}
 if(measuredDq7.totalPlanarMm>measuredDq7.nominalMm+1e-7)throw Error('Actual DQ7 exceeds nominal')
 const assertUnchanged=()=>{base.assertUnchanged();for(const[p,h]of hashes)if(fh(p)!==h)throw Error('DQ7 continuation inputs changed')};assertUnchanged()
 return{...base,candidate,host,topology,input:{...base.input,traces:host.traces},assertUnchanged,cache,exitContract,routeReport,measuredDq7,evidence:{...base.evidence,dq7InputHashes:Object.fromEntries(hashes),topology,terminal,allAngles,allJunctions,measuredDq7},report:{...parentReport,physical:topology.physical,terminalContract:terminal,fullCandidateAngles:allAngles,fixedJunctionAudit:allJunctions,candidateCircuitSha256:objectHash(candidate),supportCircuitSha256:objectHash(candidate),hostTracesSha256:objectHash(host.traces),hostBundleSha256:objectHash(host),connectedHostCount:11,preservedHostCount:10,measuredDq7,scope:'Ordered DM0 and DQ7 hosted; eleven endpoint-only hosts. DQ12 remains invalidated. Experimental composite; remaining interface, timing and fabrication still unqualified.'}}
}
if(import.meta.main&&process.argv.includes('--finalize-dq7-host')){
 const[capture,parent,ordered,acceptedHostDir,out]=process.argv.slice(2).filter(a=>a!=='--finalize-dq7-host');if(!out)throw Error('Usage: capture parent ordered-exit accepted-DM-host DQ7-output --finalize-dq7-host')
 const saved=resolve(out,'host-route-report.json');if(!existsSync(saved))writeFileSync(saved,readFileSync(resolve(out,'report.json')))
 const c=await loadAcceptedDq7Context(capture,parent,ordered,acceptedHostDir,out),write=(n:string,v:any)=>writeFileSync(resolve(out,n),JSON.stringify(v,null,2)+'\n'),{obstacles,...input}=c.input
 c.assertUnchanged();write('routing-input.json',{...input,scope:'Actual endpoint connections; regenerate fixed obstacles before routing.'});write('ram-byte0-facing-progress.trace-paths.json',c.cache);write('exit-contract.json',c.exitContract);write('source-provenance.json',c.evidence);write('report.json',{...c.report,sourceProvenance:c.evidence,hostRouteReport:c.routeReport})
 const audit=Bun.spawn(['bun','scripts/audit-ddr-global-power-launches.ts',resolve(out),resolve(capture)],{stdout:'inherit',stderr:'inherit'});if(await audit.exited!==0)throw Error('Power audit failed');const power=JSON.parse(readFileSync(resolve(out,'ram-power-launch-audit.json'),'utf8'));if(power.launchQualified!==56||power.total!==60)throw Error('Power qualification changed');c.assertUnchanged();write('report.json',{...c.report,sourceProvenance:c.evidence,hostRouteReport:c.routeReport,launchAuditSha256:objectHash(power),launchQualified:56,totalRamPowerPads:60});console.log(JSON.stringify({out,hosts:11,power:56,measuredDq7:c.measuredDq7}))
}