0hmX/am3352-ddr-track-a-local-dfm-wip-20261007

Experimental RJ45-corrected board with isolated PG indication. 1005/1005 source joins pass; 15 expanded-guard physical errors, sourcing and qualification gates remain. Not fabrication-ready.

Version
0.0.14
License
unset
Stars
0

layout/CloudDdrSourceSdaAccess.tsx

import {Children,cloneElement,isValidElement} from 'react'
import route from '../data/cloud-ddr-source-sda-access.json'
import outline from '../data/cloud-ddr-source-sda-outline.json'
/** Conditional I2C companion. Existing endpoints/spans and source authority trace remain unchanged.
 * .60 mm requested widening retains the existing .20 mm native pour clearance.
 * Actual emitted width and all rail groups must be rechecked with the complete I2C tree.
 */
export function applyDdrSourceSdaAccess(node:any):any {
 if(Array.isArray(node))return node.map(applyDdrSourceSdaAccess)
 if(!isValidElement(node))return node
 if(typeof node.type==='function')return applyDdrSourceSdaAccess(node.type(node.props))
 const p:any={...node.props}
 if(node.type==='trace'&&p.name==='DDR15_SOURCE_INNER5'){
  if(p.from!=='DDR15_SOURCE_TRANSITION.inner5'||p.to!=='DDR15_FEED_61.inner5')throw new Error('DDR source terminal identity changed')
  p.width=.30;p.pcbPathRelativeTo='.Processor > .U1 > .A1'
  p.pcbPaths=[[p.from,...route.points.map(([x,y])=>({x,y})),p.to]]
 }
 if(node.type==='copperpour'&&p.name==='DDR15_SOURCE_INNER5_WIDE'){
  if(p.layer!=='inner5'||p.connectsTo!=='net.DDR_1V5')throw new Error('DDR source widening identity changed')
  p.outline=outline
 }
 return cloneElement(node,p,...Children.toArray(node.props.children).map(applyDdrSourceSdaAccess))
}