← Commit history
design/aiflow-unclipped-current-release.json+1−1
@@ -17,6 +17,6 @@     "Legacy clipped report rejected",     "Fresh unclipped saved-board report rejected on actual GND density violation"   ],-  "ownerDependency": "Fields PR7 stacked on6 and5; not merged or installed",+  "ownerDependency": "Fields PR8 (supersedes PR7), stacked on PR6 and PR5; not merged or installed",   "liveBoardCurrentGate": "failed" }
design/current-hotspot-candidates.jsonadded+116
@@ -0,0 +1,116 @@+{+  "liveBoardUnchanged": true,+  "formalAcceptance": false,+  "candidates": [+    {+      "candidate": "v1",+      "sha256": "42cf6f2944b4ac4e8e62cb91fe6025e660d5eb30860414ac604366fdc0ffba5d",+      "errors": 2,+      "warnings": 15,+      "opens": 0,+      "landed": false,+      "status": "Rejected by DRC"+    },+    {+      "candidate": "v2",+      "sha256": "a5ea06a86f46d70172c1362265d35d1004a39ffacf3b78ff4d9490b47167f48c",+      "errors": 8,+      "warnings": 15,+      "opens": 0,+      "landed": false,+      "status": "Rejected by DRC"+    },+    {+      "candidate": "v3",+      "sha256": "479b30c7092d8e1e6d39872ea0bd53910df0e292322113c80ebd2eb0d126364a",+      "errors": 1,+      "warnings": 15,+      "opens": 0,+      "landed": false,+      "status": "Rejected by DRC"+    },+    {+      "candidate": "v4",+      "sha256": "ed6724a8a36ded63fa80c7e3b4f689d96aedb065520ed8fc823855beba67df81",+      "errors": 0,+      "warnings": 15,+      "opens": 0,+      "landed": false,+      "unclippedCurrentPeaks": {+        "DUT_POS": 48.634830474853516,+        "LOAD_POS": 70.01180267333984,+        "GND": 75.03766632080078,+        "SHUNT_P": 60.97330093383789,+        "DUT_FUSED": 45.40793228149414,+        "5V_AUX": 18.182907104492188+      },+      "status": "Diagnostic only; current not accepted"+    },+    {+      "candidate": "v5",+      "sha256": "134562fdca1390ed4e8545d65ce1daa2621c50cb7d21131c9c86bf8e245161bb",+      "errors": 7,+      "warnings": 15,+      "opens": 0,+      "landed": false,+      "status": "Rejected by DRC"+    },+    {+      "candidate": "v7",+      "sha256": "86a008a008a2347f872331448844fefa713b01534db81915cde01c2ac0ad0a86",+      "errors": 0,+      "warnings": 15,+      "opens": 0,+      "landed": false,+      "unclippedCurrentPeaks": {+        "DUT_POS": 48.634830474853516,+        "LOAD_POS": 73.76834106445312,+        "GND": 75.03766632080078,+        "SHUNT_P": 60.97330856323242,+        "DUT_FUSED": 45.40793228149414,+        "5V_AUX": 18.182907104492188+      },+      "status": "Diagnostic only; current not accepted"+    },+    {+      "candidate": "v8",+      "sha256": "838fb506ee212543f6afb03b222a4ae6743740df9bda4a310016c9ff7e57ad7c",+      "errors": 3,+      "warnings": 15,+      "opens": 0,+      "landed": false,+      "status": "Rejected by DRC"+    },+    {+      "candidate": "v9",+      "sha256": "eeae20349fe0853782215b984139435701c2c6643c84c344c6b29134ee57147f",+      "errors": 0,+      "warnings": 18,+      "opens": 0,+      "landed": false,+      "unclippedCurrentPeaks": {+        "DUT_POS": 48.634830474853516,+        "LOAD_POS": 64.95350646972656,+        "GND": 228.10838317871094,+        "SHUNT_P": 60.97330856323242,+        "DUT_FUSED": 45.40793228149414,+        "5V_AUX": 18.182907104492188+      },+      "status": "Rejected: copper intent changed to V_GATE; apparent zero-error DRC is not acceptance"+    },+    {+      "candidate": "v10",+      "status": "rejected by copper-net invariant before save",+      "reason": "An intended GND via reassigned to V_GATE during native connectivity build"+    },+    {+      "candidate": "v11",+      "sha256": "c33e2662f02ab8cf5c74bd746093fa55bc03b2bbfc2e677e8655b9d9dc701c29",+      "errors": 0,+      "warnings": 15,+      "opens": 0,+      "landed": false,+      "status": "Native copper-net invariant, refill/save/reload and DRC passed; current solve pending"+    }+  ]+}
design/step12-unclipped-peaks.json+1−1
@@ -175,7 +175,7 @@       "what": "SHUNT_P: 61 A/mm\u00b2 at its worst point on B.Cu (3 A through a neck about 1.41 mm wide at 35 \u00b5m; the threshold is 60 A/mm\u00b2)"     }   ],-  "sourcePr": "https://wiki.adom.inc/adom/adom-fields/prs/7",+  "sourcePr": "https://wiki.adom.inc/adom/adom-fields/prs/8",   "solverSha256": "0ab71adbbe0088c5d56d81f053703d0efb41d2b82f1d781686711f1e11829158",   "correction": "Earlier 57.9 A/mm2 peak was display-clipped; earlier isolated current pass is invalid for maximum-density acceptance. Live current remained failed." }
docs/current-hotspot-review.md+3−1
@@ -2,10 +2,12 @@  Saved board 19 remains the live geometry, revision 3213474890590f6f65d1603120ae19fabb7590241498da6d85c4736062ff51cc. No native changes have landed in this review. -Fields previously clipped peakJ at the 99.5th percentile before reporting and acceptance. PR 7 separates the raw maximum from its display texture. The corrected 0.2 mm solve finds GND 76.36 A/mm² at (136.1,100.9) F.Cu, LOAD_POS 68.60 at (126.5,86.3) F.Cu and SHUNT_P 60.97 at (127.1,83.3) B.Cu. All exceed the unchanged 60 screen. The earlier isolated AIFlow pass is invalid for maximum-density acceptance; the live gate was never passed.+Fields previously clipped peakJ at the 99.5th percentile before reporting and acceptance. PR 8 (superseding PR 7) separates the raw maximum from its display texture. The corrected 0.2 mm solve finds GND 76.36 A/mm² at (136.1,100.9) F.Cu, LOAD_POS 68.60 at (126.5,86.3) F.Cu and SHUNT_P 60.97 at (127.1,83.3) B.Cu. All exceed the unchanged 60 screen. The earlier isolated AIFlow pass is invalid for maximum-density acceptance; the live gate was never passed.  The saved-copper drawing identifies a drain layer-change via, a source bend and a narrow ground strip around a contact clearance. Pads are omitted from that drawing; native DRC and exact pad geometry remain mandatory before accepting any rework. Candidate parallel drain vias and ground stitching will be tested on copies first. Mesh and injection sensitivity remain unresolved.  The Kelvin-return screen uses maximum listed static IC supply currents plus divider currents. It estimates 5.87 mA equivalent INA226 offset and 16.69 mA equivalent setpoint offset, using 1 mm copper-neighborhood means. These are not measured accuracy, an exact terminal solution, or a guarantee; comparator sink, gate dynamics, temperature and internal shunt parasitics remain excluded. No net has been silently shorted or reassigned.  The recording browser closed and the desktop reported only 2% free memory. The 68 existing raw takes remain available; this hotspot review has not yet been filmed. The final movie remains unfinished.++The native v7 candidate has zero DRC errors and zero opens with the same 15 inherited library warnings. It widens the drain approach with a narrow lead escape, enlarges two existing vias, shifts Q2 and U3 by 0.3 mm with local sense-track clearance repairs, and adds three ground stitches including one that connects a previously unfilled bottom region. It remains isolated pending same-board current checks and finer-mesh comparison. Earlier v1/v2/v3/v5 candidates were rejected for actual clearance or short violations; v4 passed DRC but failed density.
docs/video-edit-plan.md+5−1
@@ -4,7 +4,7 @@ Target: 4–5 minutes, narrated. This is a process film about an engineering pro  ## Recorded material -The latest audited inventory contains 23 unique raw takes before the current live routing take, plus seven reviewed trimmed excerpts. Raw counts include failed/static takes; action cuts and speed variants are not additional recordings. See `videos/inventory.json` and [reviewed clips](build-clips.md).+The latest inventory contains 69 unique raw takes and 16 reviewed excerpts as of 10 October. Raw counts include failed/static takes; action cuts and speed variants are not additional recordings. See `videos/inventory.json` and [reviewed clips](build-clips.md).  Use the real placement corrections, native board views, Mouser denial/native-browser comparison, simulated fan state transitions, ground creation and actual route commits. Exclude static setup, the dark fan preview and failed close-up. The Mouser material is a later walkthrough; do not imply uninterrupted original discovery. Fan RPM is simulated, with the existing 0.02× motion display label preserved. @@ -25,3 +25,7 @@ Times are editorial targets, not recorded durations. Remove idle computation and ## Missed original moments  The original router debugging, regression-test work and direct AIFlow release were not recorded in an editor. Later explanations or walkthroughs must be labeled as such. Do not recreate those events and present them as original capture.++## Current-screen discovery sequence++The 10 October Fields clip is an original diagnostic walkthrough, but its 57.9 A/mm² display statistic was subsequently found to be percentile-clipped. If used, immediately explain the reporting correction and show the corrected findings: GND 76.36, LOAD_POS 68.60 and SHUNT_P 60.97 A/mm². Never edit the earlier image into evidence of a passing gate. The discovery and source correction themselves were not filmed; any later explanation must be labeled a review. Capture the actual accepted copper rework when it lands, then show the fresh same-board solve.
tools/check_hotspot_candidate.pyadded+17
@@ -0,0 +1,17 @@+"""Validate project-only copper experiments with native desktop KiCad, never the editor."""+from pathlib import Path+import subprocess,json,shutil,sys+root=Path(__file__).resolve().parents[1];version=sys.argv[1];assert version.startswith('v') and version[1:].isdigit() and 4 <= int(version[1:]) <= 20+p=root/'checkpoints/unclipped-hotspots-v1';remote='C:/Users/john/adom-projects/adom-custom-electronic-load/review/unclipped-hotspots-v1';name='candidate-'+version+files=[str(root/'tools'/('hotspot_via_candidate_'+version+'.py'))]+for ext in ['kicad_pro','kicad_dru']:+ q=p/(name+'.'+ext);shutil.copy2(p/('baseline.'+ext),q);files.append(str(q))+def ab(verb,args):+ r=subprocess.run(['adom-bridge',verb,json.dumps(args),'--target','AdomLapper','--ai-thread','adom-custom-load'],capture_output=True,text=True);j=json.loads(r.stdout);assert j.get('success'),j;return j+ab('send_files',{'filePaths':files,'dest':remote,'reason':'Isolated current-hotspot experiment; preserve live PCB and all original fabrication rules'})+exe='C:/Users/john/AppData/Local/Programs/KiCad/10.0/bin/'+r=ab('shell_execute',{'command':f'"{exe}python.exe" "{remote}/hotspot_via_candidate_{version}.py" "{remote}/baseline.kicad_pcb" "{remote}/{name}.kicad_pcb"','timeoutSeconds':60,'reason':'Native refill of an isolated saved-board candidate'});(p/(version+'-native-command.json')).write_text(json.dumps(r,indent=2));assert r['exitCode']==0,r+r=ab('shell_execute',{'command':f'"{exe}kicad-cli.exe" pcb drc --format json --output "{remote}/drc-{version}.json" "{remote}/{name}.kicad_pcb"','timeoutSeconds':60,'reason':'Native DRC of isolated copper candidate, same project rules'});(p/(version+'-drc-command.json')).write_text(json.dumps(r,indent=2));assert r['exitCode']==0,r+r=ab('pull_file',{'filePaths':[remote+'/'+name+'.kicad_pcb',remote+'/'+name+'.changes.json',remote+'/drc-'+version+'.json'],'saveTo':str(p)});(p/(version+'-pull.json')).write_text(json.dumps(r,indent=2))+j=json.loads((p/('drc-'+version+'.json')).read_text());errors=[x for x in j['violations'] if x['severity']=='error'];print(json.dumps({'candidate':version,'errors':errors,'warnings':sum(x['severity']=='warning' for x in j['violations']),'opens':len(j['unconnected_items'])},indent=2))+if errors or j['unconnected_items']:raise SystemExit(2)
tools/hotspot_via_candidate_v11.pyadded+53
@@ -0,0 +1,53 @@+"""Run using native desktop KiCad Python; modifies only an isolated board copy."""+import pcbnew,sys,json+from pathlib import Path+source=Path(sys.argv[1]);out=Path(sys.argv[2]);board=pcbnew.LoadBoard(str(source));nets=board.GetNetsByName()+changes=[]+for net,x,y in [('GND',133.0,100.8),('GND',138.0,100.8),('GND',139.0,93.0),('GND',136.5,93.0),('GND',139.4,90.4)]:+ via=pcbnew.PCB_VIA(board);via.SetPosition(pcbnew.VECTOR2I(pcbnew.FromMM(x),pcbnew.FromMM(y)));via.SetWidth(pcbnew.FromMM(.8));via.SetDrill(pcbnew.FromMM(.4));via.SetLayerPair(pcbnew.F_Cu,pcbnew.B_Cu);via.SetNet(nets[net]);board.Add(via);changes.append({'kind':'via','net':net,'at':[x,y],'sizeMm':.8,'drillMm':.4,'uuid':str(via.m_Uuid.AsString())})+for item in board.GetTracks():+ uid=str(item.m_Uuid.AsString())+ if uid=='32514162-b870-4c7a-95a2-b85b8db79257':+  item.SetWidth(pcbnew.FromMM(1.0));item.SetDrill(pcbnew.FromMM(.6));changes.append({'kind':'resize-via','uuid':uid,'net':'LOAD_POS','sizeMm':1.0,'drillMm':.6})+for item in list(board.GetTracks()):+ uid=str(item.m_Uuid.AsString())+ if uid in ['91eed079-74e4-4863-8dc1-f211a19b6ee0','ad353074-a567-44a9-a20a-744b8057c5a9']:+  board.Remove(item);changes.append({'kind':'remove-track','uuid':uid})+ if uid=='aa6c5964-74d4-410e-a69e-ffb2cd9c9999':+  item.SetWidth(pcbnew.FromMM(1.0));item.SetDrill(pcbnew.FromMM(.6));changes.append({'kind':'resize-via','uuid':uid,'sizeMm':1.0,'drillMm':.6})+def track(net,layer,a,b,width):+ t=pcbnew.PCB_TRACK(board);t.SetStart(pcbnew.VECTOR2I(pcbnew.FromMM(a[0]),pcbnew.FromMM(a[1])));t.SetEnd(pcbnew.VECTOR2I(pcbnew.FromMM(b[0]),pcbnew.FromMM(b[1])));t.SetWidth(pcbnew.FromMM(width));t.SetLayer(layer);t.SetNet(nets[net]);board.Add(t);changes.append({'kind':'track','net':net,'start':a,'end':b,'widthMm':width,'layer':board.GetLayerName(layer)})+for a,b in [((127.46,82),(127.46,83.3)),((127.46,83.3),(126.4,84.36)),((126.4,84.36),(126.4,86.5))]:track('LOAD_POS',pcbnew.F_Cu,a,b,1.5)+for a,b in [((139.4,90.4),(139.4,92)),((139.4,92),(138.4,93)),((138.4,93),(136.5,93))]:track('GND',pcbnew.B_Cu,a,b,1.5)+for item in board.GetTracks():+ if isinstance(item,pcbnew.PCB_VIA) and item.GetNetname()=='GND':+  p=item.GetPosition();xy=(round(pcbnew.ToMM(p.x),3),round(pcbnew.ToMM(p.y),3))+  if xy in [(139.4,86.8),(136.5,93.0),(139.4,90.4)]:item.SetWidth(pcbnew.FromMM(1));item.SetDrill(pcbnew.FromMM(.6));changes.append({'kind':'resize-via','at':xy,'sizeMm':1,'drillMm':.6})+for fp in board.GetFootprints():+ delta={'Q2':-.3,'U3':.3,'R7':.1}.get(fp.GetReference())+ if delta:+  pos=fp.GetPosition();pos.x+=pcbnew.FromMM(delta);fp.SetPosition(pos);changes.append({'kind':'move-footprint','ref':fp.GetReference(),'dxMm':delta})+for item in list(board.GetTracks()):+ if item.GetNetname()=='SHUNT_P_SENSE' and isinstance(item,pcbnew.PCB_VIA):+  pos=item.GetPosition()+  if abs(pcbnew.ToMM(pos.x)-123.6)<.001 and abs(pcbnew.ToMM(pos.y)-85.4)<.001:+   pos.x=pcbnew.FromMM(123.3);item.SetPosition(pos);changes.append({'kind':'move-sense-via','from':[123.6,85.4],'to':[123.3,85.4]})+ if isinstance(item,pcbnew.PCB_VIA):continue+ if item.GetNetname()=='SHUNT_P_SENSE':+  for getter,setter in [(item.GetStart,item.SetStart),(item.GetEnd,item.SetEnd)]:+   pos=getter()+   if abs(pcbnew.ToMM(pos.x)-123.6)<.001 and abs(pcbnew.ToMM(pos.y)-85.4)<.001:pos.x=pcbnew.FromMM(123.3);setter(pos)+ if item.GetNetname()=='SHUNT_N_SENSE' and item.GetLayer()==pcbnew.F_Cu:+  for getter,setter in [(item.GetStart,item.SetStart),(item.GetEnd,item.SetEnd)]:+   pos=getter();x,y=pcbnew.ToMM(pos.x),pcbnew.ToMM(pos.y)+   if 128.79<x<129.31 and 87.29<y<88.81:pos.x+=pcbnew.FromMM(.2);setter(pos)+expected_nets={str(item.m_Uuid.AsString()):item.GetNetname() for item in board.GetTracks()}+board.BuildConnectivity()+actual_nets={str(item.m_Uuid.AsString()):item.GetNetname() for item in board.GetTracks()}+assert actual_nets==expected_nets, {'unexpectedNetChanges':[(k,v,actual_nets.get(k)) for k,v in expected_nets.items() if actual_nets.get(k)!=v]}+for zone in board.Zones():zone.SetNeedRefill(True)+pcbnew.ZONE_FILLER(board).Fill(board.Zones());assert {str(item.m_Uuid.AsString()):item.GetNetname() for item in board.GetTracks()}==expected_nets, 'Zone fill changed copper nets'+pcbnew.SaveBoard(str(out),board)+readback=pcbnew.LoadBoard(str(out))+assert {str(item.m_Uuid.AsString()):item.GetNetname() for item in readback.GetTracks()}==expected_nets, 'Save/readback changed copper nets' +out.with_suffix('.changes.json').write_text(json.dumps({'source':str(source),'candidate':str(out),'changes':changes},indent=2));print(json.dumps({'saved':str(out),'changes':changes}))
videos/inventory.json+7−1
@@ -1,5 +1,5 @@ {-  "rawTakeCount": 68,+  "rawTakeCount": 69,   "reviewedExcerptCount": 16,   "countingRule": "Unique raw window recording filenames in this project; excludes derivative action/speed exports and reference projects. Raw count includes rejected takes.",   "takes": [@@ -410,6 +410,12 @@       "durationSeconds": 45.0,       "topic": "Explicit-terminal Fields diagnostic: fuse path, shunt bottleneck and ground return",       "review": "Full decode passed and six-frame contact sheet reviewed. Real live viewer selection/camera actions; thermal failures remain visible. Label as diagnostic with omitted sense/fixture branches, not a gate pass; use a short accelerated excerpt."+    },+    {+      "file": "videos/raw/window-4654168-20261010-120312.mp4",+      "durationSeconds": 17.2,+      "topic": "Native baseline drain, shunt and ground copper selection before rework",+      "review": "Full decode and six-frame contact sheet reviewed; net highlights visibly change. Label as baseline inspection, not construction or a passing gate. Dense value labels limit readability; use only a short cropped explanatory excerpt."     }   ] }