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/qualify-ddr-ram1-power-codesign.ts

/** Rail-swap plane qualification and self-contained export of the joint RAM1 repair. */
import F from '@flatten-js/core'
import{readFileSync,writeFileSync,mkdirSync}from'node:fs'
import{resolve}from'node:path'
import{createHash}from'node:crypto'
import{spawnSync}from'node:child_process'
import{refreshDdrPlaneContacts}from'./ddr-plane-contact-audit'
import{verifyDdrSystemCopper,auditDdrTraceJunctions}from'./check-ddr-system-copper'
import{auditCompositeHostTopology}from'./ddr-composite-routing-context'
import{auditRouteAngles}from'./check-route-angles'
import{planeCoverageIntervals}from'./audit-ddr-host-reference-coverage'
import{auditDdrLocalEscapeContacts}from'./audit-ddr-local-escape-contacts'
const[parentArg,trialArg,outArg]=process.argv.slice(2),dir=resolve(parentArg!),trialDir=resolve(trialArg!),out=resolve(outArg!),capture=resolve('dist/ddr-system/host-taps-54af3e346b5e'),hash=(x:any)=>createHash('sha256').update(JSON.stringify(x)).digest('hex'),bound:Record<string,string>={},read=(p:string)=>{p=resolve(p);bound[p]=createHash('sha256').update(readFileSync(p)).digest('hex');return JSON.parse(readFileSync(p,'utf8'))},parent=read(`${dir}/candidate.circuit.json`),prior=read(`${dir}/report.json`),host=read(`${dir}/host-bundle.json`),input=read(`${dir}/routing-input.json`),trial=read(`${trialDir}/report.json`),candidate=read(`${trialDir}/candidate.circuit.json`),m=read(`${trialDir}/original-copper-replacements.json`),beforePower=read(`${dir}/ram-power-launch-audit.json`),poly=(vs:any[])=>{const p=new F.Polygon(vs.map(p=>[p.x,p.y]));if([...p.faces][0]!.orientation()===1)p.reverse();return p},vertices=(f:any)=>[...f.edges].map((e:any)=>({x:e.start.x,y:e.start.y})),same=(a:any,b:any)=>Math.hypot(a.x-b.x,a.y-b.y)<1e-7
if(hash(parent)!==m.parentCircuitSha256||hash(candidate)!==m.candidateCircuitSha256||host.traces.length!==21||beforePower.launchQualified!==57||trial.diagnostic.physical.violations.length)throw Error('Expected checked joint21/power57 conductor proposal')
let replay=structuredClone(parent);for(const r of m.replacements){const i=replay.findIndex((e:any)=>`${e.type}:${e[`${e.type}_id`]}`===r.id);if(i<0||hash(replay[i])!==r.beforeSha256||hash(r.after)!==r.afterSha256)throw Error('Exact replacement invalid');replay[i]=r.after}if(hash(replay)!==hash(candidate))throw Error('Undeclared changes')
const busPath=resolve('/Users/ankan/Documents/Codex/2026-09-10/what-x20/outputs/mt41k512m8da-107-it-p-fanout/src/bus-rules.ts');bound[busPath]=createHash('sha256').update(readFileSync(busPath)).digest('hex');const{BUS_MANUFACTURING}=await import(busPath);if(BUS_MANUFACTURING.referencePourClearanceMm!==.107)throw Error('External reference policy changed')
let child=structuredClone(candidate);const byId=(id:string)=>child.find((e:any)=>e.type==='pcb_trace'&&e.pcb_trace_id===id),e2=byId('saved_fanout_pcb_group_5_15'),e2vi=e2.route.findIndex((p:any)=>p.route_type==='via');e2.route=e2.route.slice(0,e2vi+1);e2.route[e2vi].to_layer='inner3';e2.connectsTo=[e2.source_trace_id,e2.route[0].start_pcb_port_id];delete e2.connection_name;const e2v=child.find((e:any)=>e.type==='pcb_via'&&e.pcb_trace_id===e2.pcb_trace_id);e2v.to_layer='inner3';const d1=byId('saved_fanout_pcb_group_5_3'),c1=byId('saved_fanout_pcb_group_5_2'),signalTraces=[byId('saved_fanout_pcb_group_5_39'),byId('saved_fanout_pcb_group_5_13')],dv=d1.route.at(-1),ev=e2.route.at(-1),cv=c1.route.at(-1),clearance=.107,minimumWeb=.127,radius=(.2286+clearance)/Math.cos(Math.PI/64),planeChanges:any[]=[],coverage:any[]=[],planeErrors:any[]=[]
for(const before of parent.filter((e:any)=>e.type==='pcb_copper_pour')){const ground=before.layer!=='inner3',refill=ground?dv:ev,foreign=ground?[ev,cv]:[dv],removed=before.brep_shape.inner_rings.filter((h:any)=>poly(h.vertices).contains(new F.Point(refill.x,refill.y)));if(removed.length!==1)throw Error(`Expected one explicit rail-swap hole on ${before.layer}, got ${removed.length}`);let region=poly(before.brep_shape.outer_ring.vertices);for(const h of before.brep_shape.inner_rings.filter((h:any)=>!removed.includes(h))){const points=h.vertices.map((p:any)=>new F.Point(p.x,p.y));if([...new F.Polygon(points).faces][0]!.orientation()!==1)points.reverse();region.addFace(points)}for(const v of foreign)region=F.BooleanOperations.subtract(region,poly(Array.from({length:64},(_,i)=>({x:v.x+radius*Math.cos(i*Math.PI/32),y:v.y+radius*Math.sin(i*Math.PI/32)}))));const faces=[...region.faces],outers=faces.filter(f=>f.orientation()===-1),holes=faces.filter(f=>f.orientation()===1).map(f=>({vertices:vertices(f)}));if(outers.length!==1)throw Error('Plane fragmented');for(const h of before.brep_shape.inner_rings.filter((h:any)=>!removed.includes(h)))if(F.BooleanOperations.intersect(region,poly(h.vertices)).area()>1e-9)throw Error('Undeclared void refill');const affected=holes.filter(h=>foreign.some(v=>poly(h.vertices).contains(new F.Point(v.x,v.y)))),webs=affected.map(h=>Math.min(...holes.filter(o=>o!==h).map(o=>poly(h.vertices).distanceTo(poly(o.vertices))[0]),...[...poly(before.brep_shape.outer_ring.vertices).edges].map(e=>poly(h.vertices).distanceTo(e.shape)[0])));if(Math.min(...webs)<minimumWeb-1e-7)planeErrors.push({layer:before.layer,webMm:Math.min(...webs),minimumWeb});const after={...before,brep_shape:{outer_ring:before.brep_shape.outer_ring,inner_rings:holes}};child=child.map((e:any)=>e.type==='pcb_copper_pour'&&e.pcb_copper_pour_id===before.pcb_copper_pour_id?after:e);planeChanges.push({before,after,railSwapRefill:{center:{x:refill.x,y:refill.y},oldHole:removed[0],newRail:ground?'GND':'DDR_1V5'},foreignVias:foreign.map(v=>({x:v.x,y:v.y})),minimumNewWebMm:Math.min(...webs),allOtherVoidsRetained:true});for(const t of child.filter((e:any)=>e.type==='pcb_trace'))for(let i=1;i<t.route.length;i++){const a=t.route[i-1],b=t.route[i];if(a.route_type!=='wire'||b.route_type!=='wire'||a.layer!==b.layer||!['inner2','inner4'].includes(a.layer)||!((a.layer==='inner2'&&['inner1','inner3'].includes(before.layer))||(a.layer==='inner4'&&['inner3','inner5'].includes(before.layer)))||same(a,b))continue;const missed=(p:any)=>planeCoverageIntervals(a,b,p.brep_shape).filter((v:any)=>!v.covered).reduce((n:number,v:any)=>n+v.lengthMm,0),old=missed(before),now=missed(after);if(now-old>1e-7)coverage.push({traceId:t.pcb_trace_id,layer:a.layer,referenceLayer:before.layer,segment:i,a,b,addedUncoveredMm:now-old})}}
const witnesses=structuredClone(prior.planeAudit);for(const p of witnesses){if(p.layer==='inner3'){for(const v of p.viaContacts)if(same(v,dv)){v.x=ev.x;v.y=ev.y}p.viaContacts.push({id:`${c1.pcb_trace_id}:via:${c1.route.length-1}`,x:cv.x,y:cv.y,annulusSamplesInPlane:32,total:32});p.uniqueViaCount++}else{p.viaContacts.push({id:`${d1.pcb_trace_id}:via:${d1.route.length-1}`,x:dv.x,y:dv.y,annulusSamplesInPlane:32,total:32});p.uniqueViaCount++}}
let planeAudit:any,contactError:string|undefined;try{planeAudit=refreshDdrPlaneContacts(witnesses,child.filter((e:any)=>e.type==='pcb_copper_pour'),child)}catch(e){contactError=String(e)}
const fresh=[...host.traces,c1,d1,e2,...signalTraces],physical=verifyDdrSystemCopper(child,fresh,input.connections,{},50,{reportSameNetContacts:true}),topology=auditCompositeHostTopology(child,host.traces,input.connections),angles=auditRouteAngles(child.filter((e:any)=>e.type==='pcb_trace')),junctions=auditDdrTraceJunctions(child,input.connections),allTraces=child.filter((e:any)=>e.type==='pcb_trace'),allPhysical=verifyDdrSystemCopper(child,allTraces,input.connections,{}),planeForeignViolations=allPhysical.violations.filter((v:any)=>v.aShape.polygon||v.bShape.polygon),local=signalTraces.map(t=>{const ex=child.find((e:any)=>e.type==='pcb_breakout_point'&&e.source_trace_id===t.source_trace_id),co=input.connections.find((c:any)=>c.pointsToConnect.some((p:any)=>p.pointId===ex.pcb_breakout_point_id)),ids=new Set(host.traces.filter((h:any)=>h.connection_name===co.name).map((h:any)=>h.pcb_trace_id));return{traceId:t.pcb_trace_id,audit:auditDdrLocalEscapeContacts(child.filter((e:any)=>!ids.has(e.pcb_trace_id)),t,input.connections)}}),geometryPass=!planeErrors.length&&!coverage.length&&!contactError&&!physical.errors.length&&!physical.violations.length&&topology.valid&&angles.valid&&junctions.valid&&!planeForeignViolations.length&&local.every(l=>l.audit.valid)
const replacements=parent.flatMap((before:any,i:number)=>{const after=child[i];if(before.type!==after.type||before[`${before.type}_id`]!==after[`${after.type}_id`])throw Error('Object order changed');return hash(before)===hash(after)?[]:[{id:`${before.type}:${before[`${before.type}_id`]}`,before,after,beforeSha256:hash(before),afterSha256:hash(after)}]}),manifest={captureHash:prior.captureHash,parentDirectory:dir,parentCircuitSha256:hash(parent),candidateCircuitSha256:hash(child),replacements},report={...prior,accepted:false,candidateCircuitSha256:hash(child),supportCircuitSha256:hash(child),originalCopperReplacementsSha256:hash(manifest),physical,topology,fullCandidateAngles:angles,fixedJunctionAudit:junctions,planeAudit,jointPowerRepair:{geometryPass,planeErrors,coverage,contactError,planeForeignViolations,local,planeChanges,policy:{clearanceMm:.107,minimumWebMm:.127,scope:'Explicit provisional BGA rail-swap/C1 web assumption; not fabricator signoff'}},inputFileHashes:bound,scope:'Joint21-host RAM1 C1/E2/D1 rail swap with E7/DQ2 local repairs. E2 bottom stub removed, logicaltop→inner3 physicalall10. Acceptance requires full geometry and power58/no57regression and current nominal data budgets.'}
mkdirSync(out,{recursive:true});const write=(n:string,v:any)=>writeFileSync(`${out}/${n}`,JSON.stringify(v,null,2));write('candidate.circuit.json',child);write('host-bundle.json',host);write('routing-input.json',input);write('original-copper-replacements.json',manifest);write('report.json',report)
if(!geometryPass){console.log(JSON.stringify({geometryPass,planeErrors,coverage,contactError,physicalErrors:physical.errors,physicalViolations:physical.violations.length,planeForeignViolations:planeForeignViolations.length,angles:angles.valid,junctions:junctions.valid}));process.exit(0)}
const cache0=read(`${dir}/ram-byte0-facing-progress.trace-paths.json`),cache1=read(`${dir}/ram-byte1-facing-progress.trace-paths.json`);for(const t of signalTraces){const port=child.find((e:any)=>e.type==='pcb_port'&&e.pcb_port_id===t.route[0].start_pcb_port_id),sp=child.find((e:any)=>e.type==='source_port'&&e.source_port_id===port.source_port_id),i=cache1.findIndex((p:any)=>p.connection===`U1.${sp.name}`);if(i<0)throw Error('Missing cached ball');cache1[i]={...cache1[i],route:t.route.map((p:any)=>{const{x,y,start_pcb_port_id,end_pcb_port_id,...rest}=p;return{...rest,x:-12-x,y:6.5-y}})}}if(cache0.length!==72||cache1.length!==72||!auditRouteAngles(cache1).valid)throw Error('Cache validation failed');const contract0={...read(`${dir}/exit-contract.json`),candidateCircuitSha256:hash(child),ramCacheSha256:hash(cache0)},contract1={...read(`${dir}/ram-byte1-exit-contract.json`),candidateCircuitSha256:hash(child),ramCacheSha256:hash(cache1),ramByte1CacheSha256:hash(cache1)};if(!contract1.changedBalls.includes('C2'))contract1.changedBalls.push('C2');contract1.unchangedPaths=72-contract1.changedBalls.length;contract1.exits.push({ball:'C2',terminal:'DQ2',worldSide:'right',localSide:'left',worldExit:{x:-6.040077,y:3.1851079999999987,layer:'inner4'},localExit:{x:-5.959923,y:3.3148920000000013,layer:'inner4'},tangent:{world:{x:1,y:0},local:{x:-1,y:0}},logicalViaTransition:'top->inner4',physicalViaSpan:'all ten layers',traceWidthMm:.12});write('ram-byte0-facing-progress.trace-paths.json',cache0);write('ram-byte1-facing-progress.trace-paths.json',cache1);write('exit-contract.json',contract0);write('ram-byte1-exit-contract.json',contract1);write('parent-report.json',prior);write('parent-original-copper-replacements.json',read(`${dir}/original-copper-replacements.json`));write('host-route-report.json',read(`${dir}/host-route-report.json`));const provenance={inherited:read(`${dir}/source-provenance.json`),parentCircuitSha256:hash(parent),candidateCircuitSha256:hash(child),manifestSha256:hash(manifest),inputHashes:bound};write('source-provenance.json',provenance)
for(const script of['audit-ddr-global-power-launches.ts','audit-ddr-host-reference-coverage.ts']){const r=spawnSync('bun',[`scripts/${script}`,out,capture],{encoding:'utf8'});writeFileSync(`${out}/${script}.log`,r.stdout+r.stderr);if(r.status)throw Error(`Audit failed ${script}`)}const power=read(`${out}/ram-power-launch-audit.json`),ref=read(`${out}/host-reference-coverage.json`),regressions=beforePower.rows.filter((r:any)=>r.launchWithin1524Mm&&!power.rows.find((p:any)=>p.byte===r.byte&&p.ball===r.ball)?.launchWithin1524Mm);if(regressions.length||power.total!==60||power.launchQualified!==58)throw Error('Power58 regression');Object.assign(report,{accepted:true,launchQualified:58,launchAuditSha256:hash(power),hostReferenceCoverageSha256:hash(ref),ramCacheSha256:hash(cache0),ramByte1CacheSha256:hash(cache1),exitContractProvenance:{byte0Sha256:hash(contract0),byte1Sha256:hash(contract1)},powerNoRegression:{before:57,after:58,total:60,regressions},sourceProvenance:provenance});write('report.json',report);const run=spawnSync('bun',['scripts/audit-ddr-current-byte-budgets.ts',capture,out,`${out}/current-byte-budgets.json`],{encoding:'utf8'});writeFileSync(`${out}/byte-budget-audit.log`,run.stdout+run.stderr);if(run.status)throw Error('Byte audit failed');const budgets=read(`${out}/current-byte-budgets.json`);for(const terminal of['DQ2','DQ7']){const b=budgets.bytes[1],v=b.members.find((m:any)=>m.terminal===terminal);if(!v.connected||v.measuredTotalPlanarMm>b.nominalMm+1e-7)throw Error('Updated signal exceeds nominal')}Object.assign(report,{currentByteBudgetsSha256:hash(budgets)});for(const[p,h]of Object.entries(bound))if(createHash('sha256').update(readFileSync(p)).digest('hex')!==h)throw Error('Source changed');write('source-provenance.json',provenance);Object.assign(report,{sourceProvenanceSha256:hash(provenance)});write('report.json',report);console.log(JSON.stringify({accepted:true,hosts:21,power:58,candidateCircuitSha256:hash(child),replacements:replacements.length}))