skill
EDA Skillpack
Public Made by Adomby adom
All skills for all EDA capabilities across the Adom ecosystem.
← Commit history
Normalize video timebases and publish the full Kelvin geometry audit
5 files changed
+48−104
docs/examples/astra-esc-independent/audit_kelvin.pyadded+12@@ -0,0 +1,12 @@+from geometry import *+s=json.load(open('evidence/final-routing-state.json'));calls=[json.loads(l) for l in open('evidence/calls.jsonl')];commits=[c for c in calls if c['verb']=='kicad_route_net' and not c['args'].get('dryRun') and c['result'].get('success')];zones=json.load(open('outer-pours.json'))+json.load(open('kelvin-pad-keepouts.json'));keep=unary_union([Polygon(z['polygon']) for z in zones if z.get('type')=='keepout']);out={}+for net,ref,shunt,c in [('GND','U6.3','R32.2',commits[0]),('GND_OUT','U6.4','R32.1',commits[1])]:+ ids=set(c['result']['itemIds']);track=unary_union([LineString([list(t['start'].values()),list(t['end'].values())]).buffer(t['width']/2) for t in s['segments'] if t['uuid'] in ids]);p=next(p for p in pads if p['name']==ref);q=next(p for p in pads if p['name']==shunt);protected=track.union(p['g']).difference(q['g']);other=[]+ for t in s['segments']:+ if t['net_name']==net and t['layer']=='F.Cu' and t['uuid'] not in ids:other.append(LineString([list(t['start'].values()),list(t['end'].values())]).buffer(t['width']/2))+ for v in s['vias']:+ if v['net_name']==net:other.append(Point(v['position']['x'],v['position']['y']).buffer(v['size']/2))+ for pad in pads:+ if pad['net']==net and pad['name'] not in [ref,shunt]:other.append(pad['g'])+ hits=protected.intersection(unary_union(other));out[ref]={'net':net,'inputPadOutsideKeepoutMm2':p['g'].difference(keep).area,'protectedTraceOutsideKeepoutMm2':protected.difference(keep).area,'otherSameNetCopperIntersectionMm2':hits.area,'scope':'Exact live trace/via geometry plus input pad shapes and committed keepout outlines. Filled polygons are not exposed by zone_state; no claim of direct filled-polygon intersection measurement.'}+print(json.dumps(out,indent=2));Path('evidence/kelvin-geometry-audit.json').write_text(json.dumps(out,indent=2))
docs/examples/astra-esc-independent/encode_video.py+2−2@@ -6,8 +6,8 @@ manifest=[];files=[];cursor=0 for i,(name,start,end,title) in enumerate(parts): src=D/'media'/f'{name}.mp4';dur=float(json.loads(subprocess.check_output(['ffprobe','-v','error','-show_entries','format=duration','-of','json',str(src)]))['format']['duration']);end=end or dur caption=D/'media'/f'stage-{i}.txt';caption.write_text(title+' | Recorded playback 1x')- dest=D/'media'/f'encoded-{i}.mp4';vf=f"scale=1920:-2,drawbox=x=0:y=0:w=iw:h=36:[email protected]:t=fill,drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:textfile={caption}:fontsize=19:fontcolor=white:x=15:y=7"- cmd=['ffmpeg','-v','warning','-y','-ss',str(start),'-i',str(src),'-t',str(end-start),'-vf',vf,'-c:v','libx264','-preset','fast','-crf','22','-pix_fmt','yuv420p','-fps_mode','vfr','-movflags','+faststart','-an',str(dest)]+ dest=D/'media'/f'encoded-{i}.mp4';vf=f"setpts=PTS-STARTPTS,scale=1920:-2,drawbox=x=0:y=0:w=iw:h=36:[email protected]:t=fill,drawtext=fontfile=/usr/share/fonts/truetype/dejavu/DejaVuSans.ttf:textfile={caption}:fontsize=19:fontcolor=white:x=15:y=7"+ cmd=['ffmpeg','-v','warning','-y','-ss',str(start),'-i',str(src),'-t',str(end-start),'-vf',vf,'-c:v','libx264','-preset','fast','-crf','22','-pix_fmt','yuv420p','-fps_mode','cfr','-r','30','-video_track_timescale','90000','-movflags','+faststart','-an',str(dest)] print('encoding',i,name,flush=True);subprocess.run(cmd,check=True);files.append(dest) manifest.append(dict(source=src.name,sourceStart=start,sourceEnd=end,outputStart=cursor,playbackFactor=1,title=title,command=cmd));cursor+=end-start lst=D/'media/concat.txt';lst.write_text(''.join("file '"+str(p)+"'\n" for p in files));dest=out/'astra-esc-independent.mp4'
docs/examples/astra-esc-independent/evidence/kelvin-geometry-audit.jsonadded+16@@ -0,0 +1,16 @@+{+ "U6.3": {+ "net": "GND",+ "inputPadOutsideKeepoutMm2": 0.0,+ "protectedTraceOutsideKeepoutMm2": 0.0,+ "otherSameNetCopperIntersectionMm2": 0.0,+ "scope": "Exact live trace/via geometry plus input pad shapes and committed keepout outlines. Filled polygons are not exposed by zone_state; no claim of direct filled-polygon intersection measurement."+ },+ "U6.4": {+ "net": "GND_OUT",+ "inputPadOutsideKeepoutMm2": 0.0,+ "protectedTraceOutsideKeepoutMm2": 0.0,+ "otherSameNetCopperIntersectionMm2": 0.0,+ "scope": "Exact live trace/via geometry plus input pad shapes and committed keepout outlines. Filled polygons are not exposed by zone_state; no claim of direct filled-polygon intersection measurement."+ }+}
package.json+6−4@@ -4,7 +4,7 @@ "type": "skill", "title": "EDA Skillpack", "brief": "All skills for all EDA capabilities across the Adom ecosystem.",- "version": "0.2.2",+ "version": "0.2.3", "hero": { "type": "image", "path": "docs/hero.png"@@ -55,6 +55,7 @@ "SKILL.md", "docs/examples/astra-esc-independent/README.md", "docs/examples/astra-esc-independent/anchor_stitching.py",+ "docs/examples/astra-esc-independent/audit_kelvin.py", "docs/examples/astra-esc-independent/audit_plan.py", "docs/examples/astra-esc-independent/bridge.py", "docs/examples/astra-esc-independent/build_route_input.py",@@ -72,6 +73,7 @@ "docs/examples/astra-esc-independent/evidence/fresh-routing-state.json", "docs/examples/astra-esc-independent/evidence/fresh-state.json", "docs/examples/astra-esc-independent/evidence/geometric-audit.json",+ "docs/examples/astra-esc-independent/evidence/kelvin-geometry-audit.json", "docs/examples/astra-esc-independent/evidence/prompt-clock.json", "docs/examples/astra-esc-independent/evidence/token-cost.json", "docs/examples/astra-esc-independent/evidence/zone-baseline.json",@@ -91,6 +93,7 @@ "docs/examples/astra-esc-independent/planner.py", "docs/examples/astra-esc-independent/repair_fresh.py", "docs/examples/astra-esc-independent/repair_pours.py",+ "docs/examples/astra-esc-independent/requirements.txt", "docs/examples/astra-esc-independent/route-input.kicad_pcb", "docs/examples/astra-esc-independent/route_fresh.py", "docs/examples/astra-esc-independent/route_search.py",@@ -108,6 +111,7 @@ "docs/examples/fable5-bq25792/evidence/planner-iterations.md", "docs/examples/fable5-bq25792/evidence/planner-method.md", "docs/examples/fable5-bq25792/evidence/thermal-comparison.md",+ "docs/hero.png", "docs/showcase/README.md", "install.sh", "references/skill-directory.md",@@ -128,9 +132,7 @@ "skills/eda-pour-planning-measurement/SKILL.md", "skills/eda-thermal-bottlenecks/SKILL.md", "skills/eda-visible-routing/SKILL.md",- "uninstall.sh",- "docs/hero.png",- "docs/examples/astra-esc-independent/requirements.txt"+ "uninstall.sh" ], "dependencies": {}, "confirmed_user_skills": [
page.json+12−98@@ -4,7 +4,7 @@ "type": "skill", "title": "EDA Skillpack", "brief": "All skills for all EDA capabilities across the Adom ecosystem.",- "version": "0.2.2",+ "version": "0.2.3", "hero": { "type": "image", "path": "docs/hero.png"@@ -27,7 +27,9 @@ "connectivity" ], "license": "proprietary",- "visibility": "public",+ "visibility": {+ "public": true+ }, "sample_prompts": [ { "label": "Improve heat spreading",@@ -49,113 +51,25 @@ "sub_skills": [], "parent_app": null, "org": "adom",- "description": "All skills for all EDA capabilities across the Adom ecosystem, for any AI.",+ "description": "All skills for all EDA capabilities across the Adom ecosystem.", "files": [- "README.md", "SKILL.md",- "docs/examples/astra-esc-independent/README.md",- "docs/examples/astra-esc-independent/anchor_stitching.py",- "docs/examples/astra-esc-independent/audit_plan.py",- "docs/examples/astra-esc-independent/bridge.py",- "docs/examples/astra-esc-independent/build_route_input.py",- "docs/examples/astra-esc-independent/component_search.py",- "docs/examples/astra-esc-independent/encode_video.py",- "docs/examples/astra-esc-independent/esc-g431-astra-independent.kicad_pcb",- "docs/examples/astra-esc-independent/evidence/electrical-contract.json",- "docs/examples/astra-esc-independent/evidence/final-route-dryprobes.json",- "docs/examples/astra-esc-independent/evidence/final-routing-state.json",- "docs/examples/astra-esc-independent/evidence/final-validate.json",- "docs/examples/astra-esc-independent/evidence/final-zone-state.json",- "docs/examples/astra-esc-independent/evidence/fresh-placement-timing.json",- "docs/examples/astra-esc-independent/evidence/fresh-placement-validate.json",- "docs/examples/astra-esc-independent/evidence/fresh-plan.json",- "docs/examples/astra-esc-independent/evidence/fresh-routing-state.json",- "docs/examples/astra-esc-independent/evidence/fresh-state.json",- "docs/examples/astra-esc-independent/evidence/geometric-audit.json",- "docs/examples/astra-esc-independent/evidence/prompt-clock.json",- "docs/examples/astra-esc-independent/evidence/token-cost.json",- "docs/examples/astra-esc-independent/evidence/zone-baseline.json",- "docs/examples/astra-esc-independent/fixture_geometry.py",- "docs/examples/astra-esc-independent/fresh_place.py",- "docs/examples/astra-esc-independent/geometry.py",- "docs/examples/astra-esc-independent/kelvin-pad-keepouts.json",- "docs/examples/astra-esc-independent/land_routes.py",- "docs/examples/astra-esc-independent/land_stitching.py",- "docs/examples/astra-esc-independent/live-routes.json",- "docs/examples/astra-esc-independent/negotiate_fresh.py",- "docs/examples/astra-esc-independent/outer-pours.json",- "docs/examples/astra-esc-independent/pass2.py",- "docs/examples/astra-esc-independent/plan_pours.py",- "docs/examples/astra-esc-independent/plan_stitching.py",- "docs/examples/astra-esc-independent/planes.json",- "docs/examples/astra-esc-independent/planner.py",- "docs/examples/astra-esc-independent/repair_fresh.py",- "docs/examples/astra-esc-independent/repair_pours.py",- "docs/examples/astra-esc-independent/route-input.kicad_pcb",- "docs/examples/astra-esc-independent/route_fresh.py",- "docs/examples/astra-esc-independent/route_search.py",- "docs/examples/astra-esc-independent/search2.cpp",- "docs/examples/astra-esc-independent/search3.cpp",- "docs/examples/astra-esc-independent/soft3-current.json",- "docs/examples/astra-esc-independent/soft_search2.py",- "docs/examples/astra-esc-independent/stitching.json",- "docs/examples/astra-esc-independent/trim_final.py",- "docs/examples/astra-esc-independent/widen_fresh.py",- "docs/examples/astra-esc/README.md",- "docs/examples/fable5-bq25792/README.md",- "docs/examples/fable5-bq25792/evidence/REPORT.md",- "docs/examples/fable5-bq25792/evidence/electrical-review.md",- "docs/examples/fable5-bq25792/evidence/planner-iterations.md",- "docs/examples/fable5-bq25792/evidence/planner-method.md",- "docs/examples/fable5-bq25792/evidence/thermal-comparison.md",- "docs/showcase/README.md",+ "skills/**",+ "README.md", "install.sh",- "references/skill-directory.md",- "skills/eda-assembly-planning/SKILL.md",- "skills/eda-board-3d-comparison/SKILL.md",- "skills/eda-component-placement/SKILL.md",- "skills/eda-copper-ablation/SKILL.md",- "skills/eda-design-summary-video/SKILL.md",- "skills/eda-electrical-routing/SKILL.md",- "skills/eda-end-to-end-layout/SKILL.md",- "skills/eda-fine-pitch-fanout/SKILL.md",- "skills/eda-independent-reroute-comparison/SKILL.md",- "skills/eda-kelvin-current-sense/SKILL.md",- "skills/eda-motor-driver-layout/SKILL.md",- "skills/eda-multilayer-current-review/SKILL.md",- "skills/eda-native-connectivity-conformance/SKILL.md",- "skills/eda-placement-routing-review/SKILL.md",- "skills/eda-pour-planning-measurement/SKILL.md",- "skills/eda-thermal-bottlenecks/SKILL.md",- "skills/eda-visible-routing/SKILL.md", "uninstall.sh",- "docs/hero.png",- "docs/examples/astra-esc-independent/requirements.txt"+ "references/**" ], "dependencies": {}, "confirmed_user_skills": [- "eda-assembly-planning",- "eda-board-3d-comparison",- "eda-component-placement",- "eda-copper-ablation",- "eda-design-summary-video", "eda-electrical-routing",- "eda-end-to-end-layout",- "eda-fine-pitch-fanout",- "eda-independent-reroute-comparison",- "eda-kelvin-current-sense",- "eda-motor-driver-layout",- "eda-multilayer-current-review",- "eda-native-connectivity-conformance",- "eda-placement-routing-review",- "eda-pour-planning-measurement", "eda-thermal-bottlenecks",+ "eda-copper-ablation",+ "eda-assembly-planning", "eda-visible-routing" ], "scripts": { "install": "./install.sh", "uninstall": "./uninstall.sh"- },- "name": "eda-engineering",- "tag": "latest"-}+ }+}