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-clock-planes-current.ts
/** Exact clock/E7/compensated-host replay onto power59, followed by reference qualification. */
import{readFileSync,writeFileSync,mkdirSync}from'node:fs'
import{resolve}from'node:path'
import{createHash}from'node:crypto'
import{spawnSync}from'node:child_process'
import{planDdrGroundAntipads}from'./ddr-ground-plane-antipads'
import{refreshDdrPlaneContacts}from'./ddr-plane-contact-audit'
import{verifyDdrSystemCopper,auditDdrTraceJunctions}from'./check-ddr-system-copper'
import{auditRouteAngles}from'./check-route-angles'
import{auditCompositeHostTopology}from'./ddr-composite-routing-context'
import{planeCoverageIntervals}from'./audit-ddr-host-reference-coverage'
const [parentArg='dist/ddr-twenty-one-power59-current',outArg='dist/ddr-clock-planes-power59']=process.argv.slice(2),dir=resolve(parentArg),out=resolve(outArg),hash=(x:any)=>createHash('sha256').update(JSON.stringify(x)).digest('hex'),bound:Record<string,string>={},read=(p:string)=>{p=resolve(p);const text=readFileSync(p,'utf8');bound[p]=createHash('sha256').update(text).digest('hex');return JSON.parse(text)}
const parent=read(`${dir}/candidate.circuit.json`),prior=read(`${dir}/report.json`),oldHost=read(`${dir}/host-bundle.json`),oldPower=read(`${dir}/ram-power-launch-audit.json`),input=read('dist/ddr-clock-e7-compensated/routing-input.json'),ev=read('dist/ddr-clock-e7-local/input-evidence.json'),e7=read('dist/ddr-clock-e7-local/e7-replacement.json'),h=read('dist/ddr-clock-e7-compensated/host-replacement.json'),changes=[...ev.clockChanges.flatMap((c:any)=>[{before:c.before,after:c.after},{before:c.exitBefore,after:c.exitAfter}]),e7,h]
if(hash(parent)!==prior.candidateCircuitSha256||oldHost.traces.length!==21||oldPower.launchQualified!==59)throw Error('Expected exact21/power59')
let child=structuredClone(parent);for(const c of changes){if(c.beforeSha256&&c.beforeSha256!==hash(c.before)||c.afterSha256&&c.afterSha256!==hash(c.after))throw Error('Change hash mismatch');const i=child.findIndex((e:any)=>e.type===c.before.type&&e[`${e.type}_id`]===c.before[`${e.type}_id`]);if(i<0||hash(child[i])!==hash(c.before))throw Error('Stale exact replacement');child[i]=structuredClone(c.after)}
for(const v of ev.removedVias){const i=child.findIndex((e:any)=>e.type==='pcb_via'&&e.pcb_via_id===v.pcb_via_id);if(i<0||hash(child[i])!==hash(v))throw Error('Stale exact via removal');child.splice(i,1)}
const host={...oldHost,traces:oldHost.traces.map((t:any)=>hash(t)===hash(h.before)?h.after:t)},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('Source pour clearance changed')
const planes=parent.filter((e:any)=>e.type==='pcb_copper_pour'),vias=ev.clockChanges.filter((c:any)=>{const a=c.before.route.find((p:any)=>p.route_type==='via'),b=c.after.route.find((p:any)=>p.route_type==='via');return Math.hypot(a.x-b.x,a.y-b.y)>1e-7}).map((c:any)=>({...c.after.route.find((p:any)=>p.route_type==='via'),net:'CK'}));mkdirSync(out,{recursive:true});const write=(n:string,v:any)=>writeFileSync(`${out}/${n}`,JSON.stringify(v,null,2));let planePlan:any
try{planePlan=planDdrGroundAntipads(planes,vias,{clearanceMm:.107,minimumCopperWebMm:.127})}catch(e){write('report.json',{accepted:false,error:String(e),parentCircuitSha256:hash(parent),inputFileHashes:bound,scope:'Explicit provisional .127mm web / source .107mm clearance. No plane change accepted.'});console.log(String(e));process.exit(0)}
child=child.map((e:any)=>planePlan.planes.find((p:any)=>e.type==='pcb_copper_pour'&&p.pcb_copper_pour_id===e.pcb_copper_pour_id)??e)
const coverage:any[]=[];for(const before of planes){const after=planePlan.planes.find((p:any)=>p.pcb_copper_pour_id===before.pcb_copper_pour_id);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))))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),delta=missed(after)-missed(before);if(delta>1e-7)coverage.push({traceId:t.pcb_trace_id,layer:a.layer,referenceLayer:before.layer,segment:i,a,b,addedUncoveredMm:delta})}}
const planeAudit=refreshDdrPlaneContacts(prior.planeAudit,planePlan.planes,child),fresh=[...host.traces,...ev.clockChanges.map((c:any)=>c.after),e7.after],physical=verifyDdrSystemCopper(child,fresh,input.connections,{},100,{reportSameNetContacts:true}),angles=auditRouteAngles(child.filter((e:any)=>e.type==='pcb_trace')),junctions=auditDdrTraceJunctions(child,input.connections),topology=auditCompositeHostTopology(child,host.traces,input.connections),all=verifyDdrSystemCopper(child,child.filter((e:any)=>e.type==='pcb_trace'),input.connections,{}),planeViolations=all.violations.filter((v:any)=>v.aShape.polygon||v.bShape.polygon),pass=!physical.errors.length&&!physical.violations.length&&angles.valid&&junctions.valid&&topology.valid&&!coverage.length&&!planeViolations.length
const replacements=parent.flatMap((before:any)=>{const after=child.find((e:any)=>e.type===before.type&&e[`${e.type}_id`]===before[`${before.type}_id`]);return after&&hash(after)!==hash(before)?[{id:`${before.type}:${before[`${before.type}_id`]}`,before,after,beforeSha256:hash(before),afterSha256:hash(after)}]:[]}),removals=ev.removedVias.map((before:any)=>({id:`pcb_via:${before.pcb_via_id}`,before,beforeSha256:hash(before)})),manifest={parentDirectory:dir,parentCircuitSha256:hash(parent),candidateCircuitSha256:hash(child),replacements,removals},report={...prior,accepted:false,candidateCircuitSha256:hash(child),originalCopperReplacementsSha256:hash(manifest),physical,topology,fullCandidateAngles:angles,fixedJunctionAudit:junctions,planeAudit,clockPlaneQualification:{pass,planePlan,coverage,planeViolations,policy:'Explicit provisional .127mm minimum web/.107mm source pour clearance; not fabrication qualification'},inputFileHashes:bound,scope:'Clock/E7/D7 exact replay onto power59. Current clock input used; cache/contract export and byte matching audit delegated to final assembler.'}
write('candidate.circuit.json',child);write('host-bundle.json',host);write('routing-input.json',input);write('original-copper-replacements.json',manifest);write('plane-replacements.json',replacements.filter((r:any)=>r.before.type==='pcb_copper_pour'));write('report.json',report)
if(pass){const r=spawnSync('bun',['scripts/audit-ddr-global-power-launches.ts',out,'dist/ddr-system/host-taps-54af3e346b5e'],{encoding:'utf8'});writeFileSync(`${out}/power-audit.log`,r.stdout+r.stderr);if(r.status)throw Error('Fresh power audit failed');const power=read(`${out}/ram-power-launch-audit.json`),regressions=oldPower.rows.filter((r:any)=>r.launchWithin1524Mm&&!power.rows.find((p:any)=>p.byte===r.byte&&p.ball===r.ball)?.launchWithin1524Mm);if(power.launchQualified!==59||regressions.length)throw Error('Power59 regression');Object.assign(report,{accepted:true,launchAuditSha256:hash(power),powerNoRegression:{before:59,after:59,regressions}})}
for(const[p,v]of Object.entries(bound))if(createHash('sha256').update(readFileSync(p)).digest('hex')!==v)throw Error('Input changed');write('report.json',report);console.log(JSON.stringify({pass,power:report.accepted?59:undefined,errors:physical.errors.length,violations:physical.violations.length,referenceGaps:coverage.length,planeViolations:planeViolations.length,candidateCircuitSha256:hash(child)}))