← Commit history

Record gentle fan hero demonstration and reconcile accepted copper plan

John Lauer ·789bee450f ·15d ago ·parent b3f307f
6 files changed +535−60
design/pour-spec-reconciliation.jsonadded+401
@@ -0,0 +1,401 @@+{+  "boardSha256": "653e54e711552eb2f16b6d01cd144fd82645a52c30ff11e39699b760402af51a",+  "scope": "Declared planned zone boundaries reconciled to accepted native board; not a filled-connectivity or thermal proof",+  "before": [+    {+      "net": "GND",+      "layers": [+        "B.Cu"+      ],+      "priority": 0,+      "connection": "solid",+      "name": "Power return and signal reference",+      "polygon": [+        [+          98.3,+          30.3+        ],+        [+          161.7,+          30.3+        ],+        [+          161.7,+          101.7+        ],+        [+          98.3,+          101.7+        ]+      ]+    },+    {+      "net": "GND",+      "layers": [+        "F.Cu"+      ],+      "priority": 0,+      "connection": "solid",+      "name": "Top return and shield",+      "polygon": [+        [+          98.3,+          30.3+        ],+        [+          161.7,+          30.3+        ],+        [+          161.7,+          101.7+        ],+        [+          98.3,+          101.7+        ]+      ]+    },+    {+      "name": "D1 heat spread front",+      "net": "LOAD_POS",+      "layers": [+        "F.Cu"+      ],+      "polygon": [+        [+          106.5,+          87.5+        ],+        [+          114.5,+          87.5+        ],+        [+          114.5,+          95+        ],+        [+          106.5,+          95+        ]+      ],+      "priority": 3,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "D1 heat spread back",+      "net": "LOAD_POS",+      "layers": [+        "B.Cu"+      ],+      "polygon": [+        [+          106.5,+          87.5+        ],+        [+          114.5,+          87.5+        ],+        [+          114.5,+          95+        ],+        [+          106.5,+          95+        ]+      ],+      "priority": 3,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "Shunt positive spread front",+      "net": "SHUNT_P",+      "layers": [+        "F.Cu"+      ],+      "polygon": [+        [+          134.5,+          84.7+        ],+        [+          138,+          84.7+        ],+        [+          138,+          88+        ],+        [+          134.5,+          88+        ]+      ],+      "priority": 3,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "Shunt positive spread back",+      "net": "SHUNT_P",+      "layers": [+        "B.Cu"+      ],+      "polygon": [+        [+          134.5,+          84.7+        ],+        [+          138,+          84.7+        ],+        [+          138,+          88+        ],+        [+          134.5,+          88+        ]+      ],+      "priority": 3,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    }+  ],+  "after": [+    {+      "name": "Top return and shield",+      "net": "GND",+      "layers": [+        "F.Cu"+      ],+      "polygon": [+        [+          98.3,+          30.3+        ],+        [+          161.7,+          30.3+        ],+        [+          161.7,+          101.7+        ],+        [+          98.3,+          101.7+        ]+      ],+      "priority": 0,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "D1 relocated heat spread front",+      "net": "LOAD_POS",+      "layers": [+        "F.Cu"+      ],+      "polygon": [+        [+          114.0,+          88.0+        ],+        [+          121.8,+          88.0+        ],+        [+          121.8,+          94.8+        ],+        [+          114.0,+          94.8+        ]+      ],+      "priority": 3,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "Shunt positive spread front",+      "net": "SHUNT_P",+      "layers": [+        "F.Cu"+      ],+      "polygon": [+        [+          134.5,+          84.7+        ],+        [+          138.0,+          84.7+        ],+        [+          138.0,+          88.0+        ],+        [+          134.5,+          88.0+        ]+      ],+      "priority": 3,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "Shunt positive spread back",+      "net": "SHUNT_P",+      "layers": [+        "B.Cu"+      ],+      "polygon": [+        [+          134.5,+          84.7+        ],+        [+          138.0,+          84.7+        ],+        [+          138.0,+          88.0+        ],+        [+          134.5,+          88.0+        ]+      ],+      "priority": 3,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "Power return and signal reference",+      "net": "GND",+      "layers": [+        "B.Cu"+      ],+      "polygon": [+        [+          98.3,+          30.3+        ],+        [+          161.7,+          30.3+        ],+        [+          161.7,+          101.7+        ],+        [+          98.3,+          101.7+        ]+      ],+      "priority": 0,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "D1 relocated heat spread back",+      "net": "LOAD_POS",+      "layers": [+        "B.Cu"+      ],+      "polygon": [+        [+          114.0,+          88.0+        ],+        [+          121.8,+          88.0+        ],+        [+          121.8,+          94.8+        ],+        [+          114.0,+          94.8+        ]+      ],+      "priority": 3,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "Q1 source to shunt current spread back",+      "net": "SHUNT_P",+      "layers": [+        "B.Cu"+      ],+      "polygon": [+        [+          124.2,+          82.8+        ],+        [+          125.6,+          82.4+        ],+        [+          127.0,+          82.8+        ],+        [+          133.8,+          82.8+        ],+        [+          135.4,+          84.8+        ],+        [+          135.4,+          85.4+        ],+        [+          133.5,+          85.2+        ],+        [+          126.0,+          85.2+        ],+        [+          124.2,+          83.6+        ]+      ],+      "priority": 4,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    }+  ]+}
design/spec.json+112−59
@@ -141,13 +141,11 @@   "hotMaxRiseC": 35,   "pours": [     {+      "name": "Top return and shield",       "net": "GND",       "layers": [-        "B.Cu"+        "F.Cu"       ],-      "priority": 0,-      "connection": "solid",-      "name": "Power return and signal reference",       "polygon": [         [           98.3,@@ -165,57 +163,63 @@           98.3,           101.7         ]-      ]+      ],+      "priority": 0,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25     },     {-      "net": "GND",+      "name": "D1 relocated heat spread front",+      "net": "LOAD_POS",       "layers": [         "F.Cu"       ],-      "priority": 0,-      "connection": "solid",-      "name": "Top return and shield",       "polygon": [         [-          98.3,-          30.3+          114.0,+          88.0         ],         [-          161.7,-          30.3+          121.8,+          88.0         ],         [-          161.7,-          101.7+          121.8,+          94.8         ],         [-          98.3,-          101.7+          114.0,+          94.8         ]-      ]+      ],+      "priority": 3,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25     },     {-      "name": "D1 heat spread front",-      "net": "LOAD_POS",+      "name": "Shunt positive spread front",+      "net": "SHUNT_P",       "layers": [         "F.Cu"       ],       "polygon": [         [-          106.5,-          87.5+          134.5,+          84.7         ],         [-          114.5,-          87.5+          138.0,+          84.7         ],         [-          114.5,-          95+          138.0,+          88.0         ],         [-          106.5,-          95+          134.5,+          88.0         ]       ],       "priority": 3,@@ -224,27 +228,27 @@       "minThickness": 0.25     },     {-      "name": "D1 heat spread back",-      "net": "LOAD_POS",+      "name": "Shunt positive spread back",+      "net": "SHUNT_P",       "layers": [         "B.Cu"       ],       "polygon": [         [-          106.5,-          87.5+          134.5,+          84.7         ],         [-          114.5,-          87.5+          138.0,+          84.7         ],         [-          114.5,-          95+          138.0,+          88.0         ],         [-          106.5,-          95+          134.5,+          88.0         ]       ],       "priority": 3,@@ -253,27 +257,56 @@       "minThickness": 0.25     },     {-      "name": "Shunt positive spread front",-      "net": "SHUNT_P",+      "name": "Power return and signal reference",+      "net": "GND",       "layers": [-        "F.Cu"+        "B.Cu"       ],       "polygon": [         [-          134.5,-          84.7+          98.3,+          30.3         ],         [-          138,-          84.7+          161.7,+          30.3         ],         [-          138,-          88+          161.7,+          101.7         ],         [-          134.5,-          88+          98.3,+          101.7+        ]+      ],+      "priority": 0,+      "connection": "solid",+      "clearance": 0.2,+      "minThickness": 0.25+    },+    {+      "name": "D1 relocated heat spread back",+      "net": "LOAD_POS",+      "layers": [+        "B.Cu"+      ],+      "polygon": [+        [+          114.0,+          88.0+        ],+        [+          121.8,+          88.0+        ],+        [+          121.8,+          94.8+        ],+        [+          114.0,+          94.8         ]       ],       "priority": 3,@@ -282,30 +315,50 @@       "minThickness": 0.25     },     {-      "name": "Shunt positive spread back",+      "name": "Q1 source to shunt current spread back",       "net": "SHUNT_P",       "layers": [         "B.Cu"       ],       "polygon": [         [-          134.5,-          84.7+          124.2,+          82.8         ],         [-          138,-          84.7+          125.6,+          82.4         ],         [-          138,-          88+          127.0,+          82.8         ],         [-          134.5,-          88+          133.8,+          82.8+        ],+        [+          135.4,+          84.8+        ],+        [+          135.4,+          85.4+        ],+        [+          133.5,+          85.2+        ],+        [+          126.0,+          85.2+        ],+        [+          124.2,+          83.6         ]       ],-      "priority": 3,+      "priority": 4,       "connection": "solid",       "clearance": 0.2,       "minThickness": 0.25
docs/build-clips.md+6
@@ -120,3 +120,9 @@ as a preview fixture. Recorder timing must not be treated as an engineering stop ## 9 October USB routing actions  Two new raw recordings capture the actual ESD/link relocation and copper landing (`window-400958-20261009-124230.mp4`, 3.6 s) and trace-stub removal (`window-465474-20261009-124749.mp4`, very short take). The first has been sampled visually; both decode. The second still needs editorial review. Value-property cleanup happened after the first recording. These have not yet been cut into the final film. Automatic routing/thermal checkpoint recordings contain static review time and must not be presented as original copper construction.++## Gentle fan states and connector harness, 9 October++[Watch the labeled fan-state demonstration](../videos/fan-hero/window-5969372-20261009-163213.mp4). The actual canonical viewer shows a stopped rotor, smooth spin-up, steady rotation, smooth spin-down and rest. Wires and the added Adom connector stay still. This is simulated, deliberately slowed rotation, not hardware feedback. The Sunon factory variant has bare-ended wires; the Harwin termination is an added assembly.++The clip passed a full decode and contact-sheet review. The published wiki hero was separately checked through its full 20-second loop and animation-off mode. Native KiCad accepted the connector symbols and footprint. This does not establish physical mating, crimp strength, airflow or cooling qualification.
mechanical/cooling-body-audit.json+1−1
@@ -1,5 +1,5 @@ {-  "boardSha256": "347fc37404eff3e81dfb3211f06e3da4fe036657e130fec4f0f64a7e6f494f09",+  "boardSha256": "653e54e711552eb2f16b6d01cd144fd82645a52c30ff11e39699b760402af51a",   "method": "Conservative transformed fitted STEP bounding boxes, board XY with Z above top copper; zero local model transforms only",   "sinkEnvelopeMm": [     112,
tools/reconcile_pour_spec.pyadded+15
@@ -0,0 +1,15 @@+"""Reconcile declared pour boundaries to the accepted native board; no copper edits."""+from pathlib import Path+import hashlib,json+import sexp+P=Path(__file__).resolve().parents[1];board=P/'kicad/adom-custom-electronic-load.kicad_pcb';raw=board.read_bytes();expected='653e54e711552eb2f16b6d01cd144fd82645a52c30ff11e39699b760402af51a';assert hashlib.sha256(raw).hexdigest()==expected+b=sexp.parse(raw.decode());zones=[]+for z in sexp.find(b,'zone'):+ assert not sexp.first(z,'keepout')+ n=sexp.first(z,'name')[1];net=sexp.first(z,'net')[1];layer=sexp.first(z,'layer')[1];connect=sexp.first(z,'connect_pads');assert connect[1]=='yes'+ points=[[float(x[1]),float(x[2])]for x in sexp.find(sexp.first(sexp.first(z,'polygon'),'pts'),'xy')]+ zones.append({'name':n,'net':net,'layers':[layer],'polygon':points,'priority':int((sexp.first(z,'priority')or['priority',0])[1]),'connection':'solid','clearance':float(sexp.first(connect,'clearance')[1]),'minThickness':float(sexp.first(z,'min_thickness')[1])})+assert len(zones)==7+f=P/'design/spec.json';j=json.loads(f.read_text());before=j['pours'];j['pours']=zones;f.write_text(json.dumps(j,indent=2)+'\n')+(P/'design/pour-spec-reconciliation.json').write_text(json.dumps({'boardSha256':expected,'scope':'Declared planned zone boundaries reconciled to accepted native board; not a filled-connectivity or thermal proof','before':before,'after':zones},indent=2)+'\n')+print('Reconciled seven existing native zone boundaries. Board unchanged.')
videos/fan-hero/window-5969372-20261009-163213.mp4added
⋯ 1 unchanged line ⋯