← Commit history
docs/completion-plan.md+5
@@ -42,3 +42,8 @@ The prior chronological plan, including superseded Board32 data, is retained in Board34 passive feasibility update: the initial envelope failed with 14 head-collision episodes and three tether snags. The shifted envelope reduced this to one collision at TP16, including the landing, with zero snags; increased travel Z cannot resolve a blocked landing. A rearward envelope is being screened separately. No geometry or thermal credit has been adopted.  The isolated 0.2 mm Fields candidate completed with Q1 case rise 12.062 C and junction rise 14.372 C at 5.5 W, D1 rise 28.626 C, using catalog 1.522 K/W sink resistance and assumed contact/pad paths. This is supplied-parameter feasibility only; installed orientation, convection obstruction, contact spread, retention and sensitivity remain unresolved. Evidence: `checkpoints/board34-passive-thermal-candidate/fields/fields.json`.+++The decoded rearward and contact-preserving passive envelopes both pass the full 221.5 s replay (zero head collisions, zero snags). The contact-preserving position is X20–96.0984, Y19–95.2, Z12.85–63.65 mm in assembly coordinates. These remain envelope studies, not adopted assemblies. Summary: `mechanical/thermal-alternatives/board34-feasibility-review.json`. Do not use the earlier rearward bounding-box diagnostic as final evidence.++Probing reporting correction: 3 startup rail expectations are scored against synthetic declared nominal values; the other 17 observations are UNSCORED. None is SPICE or bench circuit acceptance. Source and skill fix in probing draft PR2 through `2f5155f8191465d788c9e89d57cec52588d66f1e`; three focused regression tests pass. Current local captures were regenerated with the corrected task binary; the shared package remains unchanged.
docs/status.md+5
@@ -13,3 +13,8 @@ Updated 13 October 2026. **Not released for fabrication.** Board34 is the curren [Completion plan](completion-plan.md) · [Cooling review](side-fan-cooling-review.md) · [Engineering datasheet](project-page/electronic-load-datasheet-r0.pdf) · [Cost limitations](cost/README.md) · [Build clips](build-clips.md).  No fabrication, purchase, flashing or YouTube publication has occurred. [Archived Board32 status](status-history-board32.md) is historical evidence only.+++13 October follow-up: isolated passive-heatsink envelope studies found two placements that clear the complete probe route, including one retaining the nominal Q1 contact footprint. The supplied-parameter thermal calculation passes nominally but has insufficient demonstrated margin under changed convection/contact assumptions; no thermal acceptance or assembly adoption follows. The AlN supplier page has a documented 20/25 mm dimension conflict. See [feasibility evidence](../mechanical/thermal-alternatives/board34-feasibility-review.json) and [interface review](thermal-interface-alternatives.md).++The probing simulator now reports three synthetic startup rail checks and 17 unscored observations correctly. A generated value without an expected band is not a passing measurement or circuit prediction. [Current simulated report](../probing-preview-r9/probing-flow/report.md).
docs/thermal-interface-alternatives.md+5
@@ -15,3 +15,8 @@ At 5.5 W, 40 °C ambient and the unchanged 55 °C case ceiling, the total case-t Henkel SIL PAD TSP 3500 at 0.254 mm has manufacturer TO-220 reference results of 2.02 K/W at 50 psi and 1.37 K/W at 200 psi. Even the latter gives 55.79 °C in the simple all-heat-through-sink calculation before additional spreading allowance. It is therefore not adopted for this budget. At the nominal contact area, 200 psi would imply about 179 N clamp force; the existing fastener study does not establish that preload. These are reference values dependent on surfaces and pressure, not guaranteed assembly specifications. [Manufacturer technical sheet](https://datasheets.tdx.henkel.com/BERGQUIST-SIL-PAD-TSP-3500-en_GL.pdf).  The reproducible pressure sweep is in `checkpoints/board32-interface-alternatives/tsp3500-review.json`. No board, operating limit, or acceptance gate changed.+++## Current supplier-page conflict, checked 13 October 2026++Wakefield’s [178-25-220 product page](https://wakefieldthermal.com/wakefield-thermal-25x14x0-635-to-220-aluminum-nitride-pad-178-25-220/) calls the pad 25 × 14 × 0.635 mm in its title and description, but lists 20 × 14 × 0.635 mm under Product Size. R9 uses the latter as nominal geometry. Neither the outline nor mounting hole can be released from this conflicting text; a controlled drawing or fully documented alternative is still needed. [Recorded discrepancy](../mechanical/thermal-alternatives/interface-source-conflict.json).
mechanical/thermal-alternatives/board34-feasibility-review.jsonadded+247
@@ -0,0 +1,247 @@+{+  "status": "unadopted-feasibility-only",+  "boardSha256": "74f8ac20cba6b95db26c40f5369156efec80cb80e35388fe064f6891ff78ff11",+  "studies": [+    {+      "study": "envelope",+      "result": "probing-preview-passive-envelope/probing-flow/collide.json",+      "resultSha256": "d299f53074e8af6eaec5586939b2403b445ab2d790de62ac189b2a493ffd3778",+      "collisions": 14,+      "tetherSnags": 3,+      "summary": "collisions over 221.5 s of the run (14528 poses, the head's real surface vs 365 parts at their real shapes, 4 panel wires and the seated ground pin): 14 collision episode(s); ground wire: 721 solves, 3 snag(s)",+      "inputIdentity": {+        "access": {+          "path": "probing-preview-passive-envelope/probing-flow/access.json",+          "sha256": "0ff02c98bdf58c6ec04c884950ae023e1e90705033b09b8d672327c21c710f68"+        },+        "board": {+          "path": "/home/adom/project/adom-custom-electronic-load/probing-flow/design-candidate/sidefan-dft-r23.kicad_pcb",+          "sha256": "74f8ac20cba6b95db26c40f5369156efec80cb80e35388fe064f6891ff78ff11"+        },+        "decodedAssembly": {+          "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-envelope/assembly.plain.glb",+          "sha256": "f6940945f4187c037489286dadbe7a782c2b476e7c6f8081ef08318234b00254"+        },+        "glb": {+          "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-envelope/assembly.glb",+          "sha256": "81d0e8609e3c9c6a4b6546efae1c62681446b7cd37315eaef31a7bb56470cec2"+        },+        "head:pincer-jaw-moving": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-jaw-moving/medium.glb",+          "sha256": "878327978fcc1187136d465ff154976c02faf0ad657fabb8ec7d0b673bdc25da"+        },+        "head:pincer-module": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-module/medium.glb",+          "sha256": "8074d36f3ae76432f078ebbd21aa37f2c250beb4a4f4567ce957a8667c1ab5da"+        },+        "head:pogo-barrel": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-barrel/medium.glb",+          "sha256": "5fe8ef0b97ed93240487d478c27fd29d4e4dcc2206534e05dfb2de245d82d94b"+        },+        "head:pogo-plunger": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-plunger/medium.glb",+          "sha256": "f719802f648b10cd9acefbe3f895ffae20955945fac5cb07f576661ffbaebf33"+        },+        "head:probe-module": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/probe-module/medium.glb",+          "sha256": "d927438999c0b305d0a05e645261f3010978778f91312e5e09ca25a3b5dff5c8"+        },+        "layout": {+          "path": "probing-preview-passive-envelope/probing-flow/layout.json",+          "sha256": "37b719d1c2922fe2c173e810dd24a0ed59f7f93d3d68b122b23922394127d23c"+        },+        "sequence": {+          "path": "probing-preview-passive-envelope/probing-flow/sequence.json",+          "sha256": "296c16143df224a31069444db43521ec0193906eb33dd555cc07399a51c5cb26"+        },+        "workcell": {+          "path": "probing-preview-passive-envelope/probing-flow/workcell.json",+          "sha256": "f56cfe0557906c0f136f8524dfb0f265d632f993971274c5ddbf12821bbe6e75"+        }+      }+    },+    {+      "study": "shifted",+      "result": "probing-preview-passive-shifted/probing-flow/collide.json",+      "resultSha256": "741ea1c74b33537375286cfc5b3b7e7e2626cc276699b693cff0d980b80b2d4b",+      "collisions": 1,+      "tetherSnags": 0,+      "summary": "collisions over 221.5 s of the run (14528 poses, the head's real surface vs 366 parts at their real shapes, 4 panel wires and the seated ground pin): 1 collision episode(s); ground wire: 721 solves, 0 snag(s)",+      "inputIdentity": {+        "access": {+          "path": "probing-preview-passive-shifted/probing-flow/access.json",+          "sha256": "0ff02c98bdf58c6ec04c884950ae023e1e90705033b09b8d672327c21c710f68"+        },+        "board": {+          "path": "/home/adom/project/adom-custom-electronic-load/probing-flow/design-candidate/sidefan-dft-r23.kicad_pcb",+          "sha256": "74f8ac20cba6b95db26c40f5369156efec80cb80e35388fe064f6891ff78ff11"+        },+        "decodedAssembly": {+          "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-shifted-envelope/assembly.plain.glb",+          "sha256": "16b29af4ddf6e676079154abc1255f9c80e1a4479187053b752e1963838c5d64"+        },+        "glb": {+          "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-shifted-envelope/assembly.glb",+          "sha256": "8f741d319d9b719ab24a9b15d69b838c16ec868ab27bd52297bc40bddf78ed6d"+        },+        "head:pincer-jaw-moving": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-jaw-moving/medium.glb",+          "sha256": "878327978fcc1187136d465ff154976c02faf0ad657fabb8ec7d0b673bdc25da"+        },+        "head:pincer-module": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-module/medium.glb",+          "sha256": "8074d36f3ae76432f078ebbd21aa37f2c250beb4a4f4567ce957a8667c1ab5da"+        },+        "head:pogo-barrel": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-barrel/medium.glb",+          "sha256": "5fe8ef0b97ed93240487d478c27fd29d4e4dcc2206534e05dfb2de245d82d94b"+        },+        "head:pogo-plunger": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-plunger/medium.glb",+          "sha256": "f719802f648b10cd9acefbe3f895ffae20955945fac5cb07f576661ffbaebf33"+        },+        "head:probe-module": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/probe-module/medium.glb",+          "sha256": "d927438999c0b305d0a05e645261f3010978778f91312e5e09ca25a3b5dff5c8"+        },+        "layout": {+          "path": "probing-preview-passive-shifted/probing-flow/layout.json",+          "sha256": "37b719d1c2922fe2c173e810dd24a0ed59f7f93d3d68b122b23922394127d23c"+        },+        "sequence": {+          "path": "probing-preview-passive-shifted/probing-flow/sequence.json",+          "sha256": "296c16143df224a31069444db43521ec0193906eb33dd555cc07399a51c5cb26"+        },+        "workcell": {+          "path": "probing-preview-passive-shifted/probing-flow/workcell.json",+          "sha256": "f56cfe0557906c0f136f8524dfb0f265d632f993971274c5ddbf12821bbe6e75"+        }+      }+    },+    {+      "study": "rearward",+      "result": "probing-preview-passive-rearward/probing-flow/collide.json",+      "resultSha256": "c4d0db956490c9d1a8b3378b06306479b0da57f59d6f4a776aa4a063c80753d9",+      "collisions": 0,+      "tetherSnags": 0,+      "summary": "collisions over 221.5 s of the run (14528 poses, the head's real surface vs 366 parts at their real shapes, 4 panel wires and the seated ground pin): 0 collision episode(s); ground wire: 721 solves, 0 snag(s)",+      "inputIdentity": {+        "access": {+          "path": "probing-preview-passive-rearward/probing-flow/access.json",+          "sha256": "0ff02c98bdf58c6ec04c884950ae023e1e90705033b09b8d672327c21c710f68"+        },+        "board": {+          "path": "/home/adom/project/adom-custom-electronic-load/probing-flow/design-candidate/sidefan-dft-r23.kicad_pcb",+          "sha256": "74f8ac20cba6b95db26c40f5369156efec80cb80e35388fe064f6891ff78ff11"+        },+        "decodedAssembly": {+          "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-rearward-envelope/assembly.plain.glb",+          "sha256": "a827c2f13f036127a731f7a946a3fbbd7eae56ab4fea9a54fc02b4d96bcffd5a"+        },+        "glb": {+          "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-rearward-envelope/assembly.glb",+          "sha256": "bded8f65b916f87850613f72c263ea0d5f9bebe92742ec5c99276ab5924ecfb6"+        },+        "head:pincer-jaw-moving": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-jaw-moving/medium.glb",+          "sha256": "878327978fcc1187136d465ff154976c02faf0ad657fabb8ec7d0b673bdc25da"+        },+        "head:pincer-module": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-module/medium.glb",+          "sha256": "8074d36f3ae76432f078ebbd21aa37f2c250beb4a4f4567ce957a8667c1ab5da"+        },+        "head:pogo-barrel": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-barrel/medium.glb",+          "sha256": "5fe8ef0b97ed93240487d478c27fd29d4e4dcc2206534e05dfb2de245d82d94b"+        },+        "head:pogo-plunger": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-plunger/medium.glb",+          "sha256": "f719802f648b10cd9acefbe3f895ffae20955945fac5cb07f576661ffbaebf33"+        },+        "head:probe-module": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/probe-module/medium.glb",+          "sha256": "d927438999c0b305d0a05e645261f3010978778f91312e5e09ca25a3b5dff5c8"+        },+        "layout": {+          "path": "probing-preview-passive-rearward/probing-flow/layout.json",+          "sha256": "37b719d1c2922fe2c173e810dd24a0ed59f7f93d3d68b122b23922394127d23c"+        },+        "sequence": {+          "path": "probing-preview-passive-rearward/probing-flow/sequence.json",+          "sha256": "296c16143df224a31069444db43521ec0193906eb33dd555cc07399a51c5cb26"+        },+        "workcell": {+          "path": "probing-preview-passive-rearward/probing-flow/workcell.json",+          "sha256": "f56cfe0557906c0f136f8524dfb0f265d632f993971274c5ddbf12821bbe6e75"+        }+      }+    },+    {+      "study": "contact",+      "result": "probing-preview-passive-contact/probing-flow/collide.json",+      "resultSha256": "86c6007b864469cd38c70156242c75c3a599027902c9514c75dbff9dd9a17a43",+      "collisions": 0,+      "tetherSnags": 0,+      "summary": "collisions over 221.5 s of the run (14528 poses, the head's real surface vs 366 parts at their real shapes, 4 panel wires and the seated ground pin): 0 collision episode(s); ground wire: 721 solves, 0 snag(s)",+      "inputIdentity": {+        "access": {+          "path": "probing-preview-passive-contact/probing-flow/access.json",+          "sha256": "0ff02c98bdf58c6ec04c884950ae023e1e90705033b09b8d672327c21c710f68"+        },+        "board": {+          "path": "/home/adom/project/adom-custom-electronic-load/probing-flow/design-candidate/sidefan-dft-r23.kicad_pcb",+          "sha256": "74f8ac20cba6b95db26c40f5369156efec80cb80e35388fe064f6891ff78ff11"+        },+        "decodedAssembly": {+          "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-contact-envelope/assembly.plain.glb",+          "sha256": "8afac10dde90917415f5287ca475e90fa2fad0fc46603bf8f8ced5a213e6fd9a"+        },+        "glb": {+          "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-contact-envelope/assembly.glb",+          "sha256": "9b31cb96a4303ffe8e1c9b6446a2371122d897165438536ca173162379026f21"+        },+        "head:pincer-jaw-moving": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-jaw-moving/medium.glb",+          "sha256": "878327978fcc1187136d465ff154976c02faf0ad657fabb8ec7d0b673bdc25da"+        },+        "head:pincer-module": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-module/medium.glb",+          "sha256": "8074d36f3ae76432f078ebbd21aa37f2c250beb4a4f4567ce957a8667c1ab5da"+        },+        "head:pogo-barrel": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-barrel/medium.glb",+          "sha256": "5fe8ef0b97ed93240487d478c27fd29d4e4dcc2206534e05dfb2de245d82d94b"+        },+        "head:pogo-plunger": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-plunger/medium.glb",+          "sha256": "f719802f648b10cd9acefbe3f895ffae20955945fac5cb07f576661ffbaebf33"+        },+        "head:probe-module": {+          "path": "/home/adom/project/load-probing-20261012/twin/v2/probe-module/medium.glb",+          "sha256": "d927438999c0b305d0a05e645261f3010978778f91312e5e09ca25a3b5dff5c8"+        },+        "layout": {+          "path": "probing-preview-passive-contact/probing-flow/layout.json",+          "sha256": "37b719d1c2922fe2c173e810dd24a0ed59f7f93d3d68b122b23922394127d23c"+        },+        "sequence": {+          "path": "probing-preview-passive-contact/probing-flow/sequence.json",+          "sha256": "296c16143df224a31069444db43521ec0193906eb33dd555cc07399a51c5cb26"+        },+        "workcell": {+          "path": "probing-preview-passive-contact/probing-flow/workcell.json",+          "sha256": "f56cfe0557906c0f136f8524dfb0f265d632f993971274c5ddbf12821bbe6e75"+        }+      }+    }+  ],+  "thermalResult": "checkpoints/board34-passive-thermal-candidate/fields/fields.json",+  "thermalAccepted": false,+  "currentAssembly": "mechanical/side-fan-r9/side-fan-assembly.glb",+  "limits": [+    "Original R9 fan is retained as an extra obstacle; relocated fan is only a box. These are not coherent final assemblies.",+    "Rearward/contact positions clear the modeled route; carrier, fan harness, exact sink tooling and contact stack remain design work before adoption.",+    "Catalog natural convection and nominal contact resistance are supplied inputs, not installed qualification.",+    "Manufacturer AlN pad page has contradictory length data and no controlled mounting-hole drawing."+  ]+}
mechanical/thermal-alternatives/interface-source-conflict.jsonadded+28
@@ -0,0 +1,28 @@+{+  "status": "unresolved-manufacturer-dimension-conflict",+  "checked": "2026-10-13",+  "mpn": "178-25-220",+  "source": "https://wakefieldthermal.com/wakefield-thermal-25x14x0-635-to-220-aluminum-nitride-pad-178-25-220/",+  "titleSizeMm": [+    25,+    14,+    0.635+  ],+  "specificationSizeMm": [+    20,+    14,+    0.635+  ],+  "r9NominalSizeMm": [+    20,+    14,+    0.635+  ],+  "missing": [+    "controlled outline drawing",+    "mounting hole diameter and position",+    "dimensional tolerances",+    "installed interface resistance and preload"+  ],+  "decision": "Do not claim manufacturer-exact digital twin or released mechanical interface from conflicting web text."+}
mechanical/thermal-alternatives/passive-sensitivity.jsonadded+174
@@ -0,0 +1,174 @@+{+  "status": "unadopted-parametric-screen",+  "sourceW": 5.5,+  "ambientC": 40.0,+  "method": "All Q1 heat through sink; no board cooling credit. Multipliers are sensitivity scenarios, not measured tolerances.",+  "nominalKPerW": {+    "caseSink": 0.6727626557059773,+    "junctionCase": 0.42,+    "sinkAmbient": 1.522+  },+  "rows": [+    {+      "sinkMultiplier": 1,+      "contactMultiplier": 1,+      "caseC": 52.071194606382875,+      "junctionC": 54.38119460638288,+      "caseBelow55C": true,+      "conservativePackageRiseBelow15C": true+    },+    {+      "sinkMultiplier": 1,+      "contactMultiplier": 1.25,+      "caseC": 52.99624325797859,+      "junctionC": 55.30624325797859,+      "caseBelow55C": true,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1,+      "contactMultiplier": 1.5,+      "caseC": 53.921291909574315,+      "junctionC": 56.23129190957432,+      "caseBelow55C": true,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1,+      "contactMultiplier": 2,+      "caseC": 55.771389212765754,+      "junctionC": 58.08138921276576,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.1,+      "contactMultiplier": 1,+      "caseC": 52.908294606382874,+      "junctionC": 55.21829460638288,+      "caseBelow55C": true,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.1,+      "contactMultiplier": 1.25,+      "caseC": 53.8333432579786,+      "junctionC": 56.1433432579786,+      "caseBelow55C": true,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.1,+      "contactMultiplier": 1.5,+      "caseC": 54.758391909574314,+      "junctionC": 57.068391909574316,+      "caseBelow55C": true,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.1,+      "contactMultiplier": 2,+      "caseC": 56.60848921276575,+      "junctionC": 58.91848921276575,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.2,+      "contactMultiplier": 1,+      "caseC": 53.745394606382874,+      "junctionC": 56.055394606382876,+      "caseBelow55C": true,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.2,+      "contactMultiplier": 1.25,+      "caseC": 54.67044325797859,+      "junctionC": 56.98044325797859,+      "caseBelow55C": true,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.2,+      "contactMultiplier": 1.5,+      "caseC": 55.595491909574314,+      "junctionC": 57.905491909574316,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.2,+      "contactMultiplier": 2,+      "caseC": 57.44558921276575,+      "junctionC": 59.755589212765756,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.3,+      "contactMultiplier": 1,+      "caseC": 54.58249460638287,+      "junctionC": 56.892494606382876,+      "caseBelow55C": true,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.3,+      "contactMultiplier": 1.25,+      "caseC": 55.5075432579786,+      "junctionC": 57.8175432579786,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.3,+      "contactMultiplier": 1.5,+      "caseC": 56.43259190957431,+      "junctionC": 58.742591909574315,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.3,+      "contactMultiplier": 2,+      "caseC": 58.282689212765746,+      "junctionC": 60.59268921276575,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.5,+      "contactMultiplier": 1,+      "caseC": 56.25669460638287,+      "junctionC": 58.566694606382875,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.5,+      "contactMultiplier": 1.25,+      "caseC": 57.181743257978596,+      "junctionC": 59.4917432579786,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.5,+      "contactMultiplier": 1.5,+      "caseC": 58.10679190957431,+      "junctionC": 60.416791909574314,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    },+    {+      "sinkMultiplier": 1.5,+      "contactMultiplier": 2,+      "caseC": 59.95688921276575,+      "junctionC": 62.266889212765754,+      "caseBelow55C": false,+      "conservativePackageRiseBelow15C": false+    }+  ],+  "conclusion": "Nominal passes; +10 percent sink resistance exceeds the strict 15 C package-rise screen. Installed conditions and contact assumptions require resolution before adoption."+}
mechanical/thermal-alternatives/passive-sensitivity.pngadded
⋯ 1 unchanged line ⋯
probing-preview-passive-contact/probing-flow/collide.jsonadded+119
@@ -0,0 +1,119 @@+{+  "board_top_mm": 5.565,+  "bodies": [+    {+      "anchor": "module",+      "name": "probe module",+      "points": 4956780+    },+    {+      "anchor": "module",+      "name": "pogo barrel",+      "points": 1004+    },+    {+      "anchor": "plunger",+      "name": "pogo plunger",+      "points": 292+    },+    {+      "anchor": "pincer",+      "name": "pincer module",+      "points": 4610241+    },+    {+      "anchor": "jaw",+      "name": "pincer jaw moving",+      "points": 994991+    }+  ],+  "closest": [+    {+      "body": "pincer module",+      "gap_mm": 99.11,+      "part": "a board part at (-57.1, 58.0)",+      "t": 172.54+    },+    {+      "body": "pincer jaw moving",+      "gap_mm": 38.82,+      "part": "a board part at (-48.0, 32.5)",+      "t": 172.54+    },+    {+      "body": "probe module",+      "gap_mm": 9.99,+      "part": "a board part at (-4.0, -10.0)",+      "t": 31.06+    }+  ],+  "collisions": [],+  "dt_s": 0.02,+  "inputIdentity": {+    "access": {+      "path": "probing-preview-passive-contact/probing-flow/access.json",+      "sha256": "0ff02c98bdf58c6ec04c884950ae023e1e90705033b09b8d672327c21c710f68"+    },+    "board": {+      "path": "/home/adom/project/adom-custom-electronic-load/probing-flow/design-candidate/sidefan-dft-r23.kicad_pcb",+      "sha256": "74f8ac20cba6b95db26c40f5369156efec80cb80e35388fe064f6891ff78ff11"+    },+    "decodedAssembly": {+      "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-contact-envelope/assembly.plain.glb",+      "sha256": "8afac10dde90917415f5287ca475e90fa2fad0fc46603bf8f8ced5a213e6fd9a"+    },+    "glb": {+      "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-contact-envelope/assembly.glb",+      "sha256": "9b31cb96a4303ffe8e1c9b6446a2371122d897165438536ca173162379026f21"+    },+    "head:pincer-jaw-moving": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-jaw-moving/medium.glb",+      "sha256": "878327978fcc1187136d465ff154976c02faf0ad657fabb8ec7d0b673bdc25da"+    },+    "head:pincer-module": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-module/medium.glb",+      "sha256": "8074d36f3ae76432f078ebbd21aa37f2c250beb4a4f4567ce957a8667c1ab5da"+    },+    "head:pogo-barrel": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-barrel/medium.glb",+      "sha256": "5fe8ef0b97ed93240487d478c27fd29d4e4dcc2206534e05dfb2de245d82d94b"+    },+    "head:pogo-plunger": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-plunger/medium.glb",+      "sha256": "f719802f648b10cd9acefbe3f895ffae20955945fac5cb07f576661ffbaebf33"+    },+    "head:probe-module": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/probe-module/medium.glb",+      "sha256": "d927438999c0b305d0a05e645261f3010978778f91312e5e09ca25a3b5dff5c8"+    },+    "layout": {+      "path": "probing-preview-passive-contact/probing-flow/layout.json",+      "sha256": "37b719d1c2922fe2c173e810dd24a0ed59f7f93d3d68b122b23922394127d23c"+    },+    "sequence": {+      "path": "probing-preview-passive-contact/probing-flow/sequence.json",+      "sha256": "296c16143df224a31069444db43521ec0193906eb33dd555cc07399a51c5cb26"+    },+    "workcell": {+      "path": "probing-preview-passive-contact/probing-flow/workcell.json",+      "sha256": "f56cfe0557906c0f136f8524dfb0f265d632f993971274c5ddbf12821bbe6e75"+    }+  },+  "panel_wires": 4,+  "part_shapes": "triangles (0.25 mm columns)",+  "parts": 366,+  "problems": [],+  "summary": "collisions over 221.5 s of the run (14528 poses, the head's real surface vs 366 parts at their real shapes, 4 panel wires and the seated ground pin): 0 collision episode(s); ground wire: 721 solves, 0 snag(s)",+  "tether": {+    "rests_on": [+      {+        "from_s": 69.5,+        "part": "a board part at (-57.1, 58.0)",+        "to_s": 69.5+      }+    ],+    "snags": [],+    "solves": 721,+    "worst_clearance_mm": -0.0+  }+}
probing-preview-passive-envelope/probing-flow/collide.jsonadded+407
@@ -0,0 +1,407 @@+{+  "board_top_mm": 5.565,+  "bodies": [+    {+      "anchor": "module",+      "name": "probe module",+      "points": 4956780+    },+    {+      "anchor": "module",+      "name": "pogo barrel",+      "points": 1004+    },+    {+      "anchor": "plunger",+      "name": "pogo plunger",+      "points": 292+    },+    {+      "anchor": "pincer",+      "name": "pincer module",+      "points": 4610241+    },+    {+      "anchor": "jaw",+      "name": "pincer jaw moving",+      "points": 994991+    }+  ],+  "closest": [+    {+      "body": "pincer module",+      "gap_mm": 0.0,+      "part": "a board part at (-48.1, 34.0)",+      "t": 172.54+    },+    {+      "body": "pincer jaw moving",+      "gap_mm": 38.82,+      "part": "a board part at (-48.0, 32.5)",+      "t": 172.54+    },+    {+      "body": "probe module",+      "gap_mm": 0.0,+      "part": "a board part at (-48.1, 34.0)",+      "t": 64.14+    }+  ],+  "collisions": [+    {+      "body": "pincer module",+      "depth_mm": 16.03,+      "during": "move to TP7 (3V3)",+      "fix": "the pincer hits a board part at (-48.1, 34.0) while handling the ground pin: the jaws come down beside the pin, so the parts around the GND contact must be lower than the jaw tips' path. Fix in the board flow: move a board part at (-48.1, 34.0) away from the ground contact, or use another free GND contact (plan.ground)",+      "from_s": 26.66,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "aux-start",+      "to_s": 26.71+    },+    {+      "body": "probe module",+      "depth_mm": 51.47,+      "during": "move to TP7 (3V3)",+      "fix": "the probe (probe module) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 26.85,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "aux-start",+      "to_s": 36.5+    },+    {+      "body": "pogo barrel",+      "depth_mm": 56.73,+      "during": "move to TP7 (3V3)",+      "fix": "the probe (pogo barrel) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 26.97,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "aux-start",+      "to_s": 36.4+    },+    {+      "body": "pogo plunger",+      "depth_mm": 57.73,+      "during": "move to TP7 (3V3)",+      "fix": "the probe (pogo plunger) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 26.97,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "aux-start",+      "to_s": 36.39+    },+    {+      "body": "probe module",+      "depth_mm": 51.47,+      "during": "move to TP15 (VREF_2V5)",+      "fix": "the probe (probe module) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 45.99,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "aux-start",+      "to_s": 164.48+    },+    {+      "body": "pogo barrel",+      "depth_mm": 56.73,+      "during": "move to TP15 (VREF_2V5)",+      "fix": "the probe (pogo barrel) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 46.04,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "aux-start",+      "to_s": 164.42+    },+    {+      "body": "pogo plunger",+      "depth_mm": 57.73,+      "during": "move to TP15 (VREF_2V5)",+      "fix": "the probe (pogo plunger) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 46.05,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "aux-start",+      "to_s": 164.42+    },+    {+      "body": "pincer module",+      "depth_mm": 16.03,+      "during": "move to TP16 (BOOST_SW)",+      "fix": "the pincer hits a board part at (-48.1, 34.0) while handling the ground pin: the jaws come down beside the pin, so the parts around the GND contact must be lower than the jaw tips' path. Fix in the board flow: move a board part at (-48.1, 34.0) away from the ground contact, or use another free GND contact (plan.ground)",+      "from_s": 168.84,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "off-state-survey",+      "to_s": 184.17+    },+    {+      "body": "probe module",+      "depth_mm": 38.4,+      "during": "move to TP16 (BOOST_SW)",+      "fix": "the probe (probe module) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 168.89,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "off-state-survey",+      "to_s": 184.12+    },+    {+      "body": "pincer jaw moving",+      "depth_mm": 15.83,+      "during": "move to TP16 (BOOST_SW)",+      "fix": "the pincer hits a board part at (-48.1, 34.0) while handling the ground pin: the jaws come down beside the pin, so the parts around the GND contact must be lower than the jaw tips' path. Fix in the board flow: move a board part at (-48.1, 34.0) away from the ground contact, or use another free GND contact (plan.ground)",+      "from_s": 168.95,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "off-state-survey",+      "to_s": 184.07+    },+    {+      "body": "probe module",+      "depth_mm": 51.47,+      "during": "move to TP5 (GATE)",+      "fix": "the probe (probe module) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 188.54,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "shutdown",+      "to_s": 197.42+    },+    {+      "body": "pogo barrel",+      "depth_mm": 56.73,+      "during": "move to TP5 (GATE)",+      "fix": "the probe (pogo barrel) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 188.61,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "shutdown",+      "to_s": 197.36+    },+    {+      "body": "pogo plunger",+      "depth_mm": 57.73,+      "during": "move to TP5 (GATE)",+      "fix": "the probe (pogo plunger) hits a board part at (-48.1, 34.0): raise safe Z in the workcell profile above a board part at (-48.1, 34.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 34.0) for the probe module: move the pad or a board part at (-48.1, 34.0) in the board flow",+      "from_s": 188.61,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "shutdown",+      "to_s": 197.36+    },+    {+      "body": "pincer module",+      "depth_mm": 13.09,+      "during": "back over J7 to pull the ground pin",+      "fix": "the pincer hits a board part at (-48.1, 34.0) while handling the ground pin: the jaws come down beside the pin, so the parts around the GND contact must be lower than the jaw tips' path. Fix in the board flow: move a board part at (-48.1, 34.0) away from the ground contact, or use another free GND contact (plan.ground)",+      "from_s": 202.19,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 34.0)",+      "test": "shutdown",+      "to_s": 202.23+    }+  ],+  "dt_s": 0.02,+  "inputIdentity": {+    "access": {+      "path": "probing-preview-passive-envelope/probing-flow/access.json",+      "sha256": "0ff02c98bdf58c6ec04c884950ae023e1e90705033b09b8d672327c21c710f68"+    },+    "board": {+      "path": "/home/adom/project/adom-custom-electronic-load/probing-flow/design-candidate/sidefan-dft-r23.kicad_pcb",+      "sha256": "74f8ac20cba6b95db26c40f5369156efec80cb80e35388fe064f6891ff78ff11"+    },+    "decodedAssembly": {+      "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-envelope/assembly.plain.glb",+      "sha256": "f6940945f4187c037489286dadbe7a782c2b476e7c6f8081ef08318234b00254"+    },+    "glb": {+      "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-envelope/assembly.glb",+      "sha256": "81d0e8609e3c9c6a4b6546efae1c62681446b7cd37315eaef31a7bb56470cec2"+    },+    "head:pincer-jaw-moving": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-jaw-moving/medium.glb",+      "sha256": "878327978fcc1187136d465ff154976c02faf0ad657fabb8ec7d0b673bdc25da"+    },+    "head:pincer-module": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-module/medium.glb",+      "sha256": "8074d36f3ae76432f078ebbd21aa37f2c250beb4a4f4567ce957a8667c1ab5da"+    },+    "head:pogo-barrel": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-barrel/medium.glb",+      "sha256": "5fe8ef0b97ed93240487d478c27fd29d4e4dcc2206534e05dfb2de245d82d94b"+    },+    "head:pogo-plunger": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-plunger/medium.glb",+      "sha256": "f719802f648b10cd9acefbe3f895ffae20955945fac5cb07f576661ffbaebf33"+    },+    "head:probe-module": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/probe-module/medium.glb",+      "sha256": "d927438999c0b305d0a05e645261f3010978778f91312e5e09ca25a3b5dff5c8"+    },+    "layout": {+      "path": "probing-preview-passive-envelope/probing-flow/layout.json",+      "sha256": "37b719d1c2922fe2c173e810dd24a0ed59f7f93d3d68b122b23922394127d23c"+    },+    "sequence": {+      "path": "probing-preview-passive-envelope/probing-flow/sequence.json",+      "sha256": "296c16143df224a31069444db43521ec0193906eb33dd555cc07399a51c5cb26"+    },+    "workcell": {+      "path": "probing-preview-passive-envelope/probing-flow/workcell.json",+      "sha256": "f56cfe0557906c0f136f8524dfb0f265d632f993971274c5ddbf12821bbe6e75"+    }+  },+  "panel_wires": 4,+  "part_shapes": "triangles (0.25 mm columns)",+  "parts": 365,+  "problems": [+    "pincer module hits a board part at (-48.1, 34.0), 16.03 mm below its top, at 26.66-26.71 s (aux-start: move to TP7 (3V3))",+    "probe module hits a board part at (-48.1, 34.0), 51.47 mm below its top, at 26.85-36.5 s (aux-start: move to TP7 (3V3))",+    "pogo barrel hits a board part at (-48.1, 34.0), 56.73 mm below its top, at 26.97-36.4 s (aux-start: move to TP7 (3V3))",+    "pogo plunger hits a board part at (-48.1, 34.0), 57.73 mm below its top, at 26.97-36.39 s (aux-start: move to TP7 (3V3))",+    "probe module hits a board part at (-48.1, 34.0), 51.47 mm below its top, at 45.99-164.48 s (aux-start: move to TP15 (VREF_2V5))",+    "pogo barrel hits a board part at (-48.1, 34.0), 56.73 mm below its top, at 46.04-164.42 s (aux-start: move to TP15 (VREF_2V5))",+    "pogo plunger hits a board part at (-48.1, 34.0), 57.73 mm below its top, at 46.05-164.42 s (aux-start: move to TP15 (VREF_2V5))",+    "pincer module hits a board part at (-48.1, 34.0), 16.03 mm below its top, at 168.84-184.17 s (off-state-survey: move to TP16 (BOOST_SW))",+    "probe module hits a board part at (-48.1, 34.0), 38.4 mm below its top, at 168.89-184.12 s (off-state-survey: move to TP16 (BOOST_SW))",+    "pincer jaw moving hits a board part at (-48.1, 34.0), 15.83 mm below its top, at 168.95-184.07 s (off-state-survey: move to TP16 (BOOST_SW))",+    "probe module hits a board part at (-48.1, 34.0), 51.47 mm below its top, at 188.54-197.42 s (shutdown: move to TP5 (GATE))",+    "pogo barrel hits a board part at (-48.1, 34.0), 56.73 mm below its top, at 188.61-197.36 s (shutdown: move to TP5 (GATE))",+    "pogo plunger hits a board part at (-48.1, 34.0), 57.73 mm below its top, at 188.61-197.36 s (shutdown: move to TP5 (GATE))",+    "pincer module hits a board part at (-48.1, 34.0), 13.09 mm below its top, at 202.19-202.23 s (shutdown: back over J7 to pull the ground pin)",+    "the ground wire snags a board part at (-48.1, 34.0) by 0.26 mm at 27.0 s (aux-start)",+    "the ground wire snags a board part at (-48.1, 34.0) by 0.26 mm at 56.0 s (off-state-survey)",+    "the ground wire snags a board part at (-48.1, 34.0) by 0.26 mm at 188.75 s (shutdown)"+  ],+  "summary": "collisions over 221.5 s of the run (14528 poses, the head's real surface vs 365 parts at their real shapes, 4 panel wires and the seated ground pin): 14 collision episode(s); ground wire: 721 solves, 3 snag(s)",+  "tether": {+    "rests_on": [+      {+        "from_s": 27.0,+        "part": "a board part at (-48.1, 34.0)",+        "to_s": 197.25+      }+    ],+    "snags": [+      {+        "depth_mm": 0.26,+        "during": "move to TP7 (3V3)",+        "fix": "the ground wire runs through a board part at (-48.1, 34.0): move the probe's approach, the ground contact, or a board part at (-48.1, 34.0) (board flow)",+        "includedInSolver": true,+        "node": 30,+        "obstacleBoundsMm": [+          [+            345.8000011444092,+            331.9999998100102,+            12.899999591708184+          ],+          [+            422.0000002235174,+            408.09839671850204,+            63.69999711513519+          ]+        ],+        "part": "a board part at (-48.1, 34.0)",+        "pinTopMm": [+          434.0,+          352.0,+          11.547999972768126+        ],+        "probeTipMm": [+          421.5384790827524,+          337.0362341935153,+          20.564999972768128+        ],+        "solverEndResidualMm": 0.0007902373629312705,+        "t": 27.0,+        "test": "aux-start",+        "wirePointMm": [+          419.9376921801392,+          336.2361808926446,+          32.5649507956971+        ]+      },+      {+        "depth_mm": 0.26,+        "during": "Off-state signal survey; capture values without invented pass bands",+        "fix": "the ground wire runs through a board part at (-48.1, 34.0): move the probe's approach, the ground contact, or a board part at (-48.1, 34.0) (board flow)",+        "includedInSolver": true,+        "node": 29,+        "obstacleBoundsMm": [+          [+            345.8000011444092,+            331.9999998100102,+            12.899999591708184+          ],+          [+            422.0000002235174,+            408.09839671850204,+            63.69999711513519+          ]+        ],+        "part": "a board part at (-48.1, 34.0)",+        "pinTopMm": [+          434.0,+          352.0,+          11.547999972768126+        ],+        "probeTipMm": [+          394.75,+          340.5,+          20.564999972768128+        ],+        "solverEndResidualMm": 3.214157174389616,+        "t": 56.0,+        "test": "off-state-survey",+        "wirePointMm": [+          393.1500168242874,+          333.9858428256714,+          32.56500357610728+        ]+      },+      {+        "depth_mm": 0.26,+        "during": "descend to hover",+        "fix": "the ground wire runs through a board part at (-48.1, 34.0): move the probe's approach, the ground contact, or a board part at (-48.1, 34.0) (board flow)",+        "includedInSolver": true,+        "node": 29,+        "obstacleBoundsMm": [+          [+            345.8000011444092,+            331.9999998100102,+            12.899999591708184+          ],+          [+            422.0000002235174,+            408.09839671850204,+            63.69999711513519+          ]+        ],+        "part": "a board part at (-48.1, 34.0)",+        "pinTopMm": [+          434.0,+          352.0,+          11.547999972768126+        ],+        "probeTipMm": [+          414.6,+          340.0,+          20.310223083879038+        ],+        "solverEndResidualMm": 2.9195512247777744,+        "t": 188.75,+        "test": "shutdown",+        "wirePointMm": [+          413.0000113622918,+          333.7804487752593,+          32.31023100749253+        ]+      }+    ],+    "solves": 721,+    "worst_clearance_mm": -3.13+  }+}
probing-preview-passive-rearward/probing-flow/collide.jsonadded+113
@@ -0,0 +1,113 @@+{+  "board_top_mm": 5.565,+  "bodies": [+    {+      "anchor": "module",+      "name": "probe module",+      "points": 4956780+    },+    {+      "anchor": "module",+      "name": "pogo barrel",+      "points": 1004+    },+    {+      "anchor": "plunger",+      "name": "pogo plunger",+      "points": 292+    },+    {+      "anchor": "pincer",+      "name": "pincer module",+      "points": 4610241+    },+    {+      "anchor": "jaw",+      "name": "pincer jaw moving",+      "points": 994991+    }+  ],+  "closest": [+    {+      "body": "pincer module",+      "gap_mm": 99.11,+      "part": "a board part at (-63.1, 58.0)",+      "t": 172.54+    },+    {+      "body": "pincer jaw moving",+      "gap_mm": 38.82,+      "part": "a board part at (-48.0, 32.5)",+      "t": 172.54+    },+    {+      "body": "probe module",+      "gap_mm": 9.99,+      "part": "a board part at (-4.0, -10.0)",+      "t": 31.06+    }+  ],+  "collisions": [],+  "dt_s": 0.02,+  "inputIdentity": {+    "access": {+      "path": "probing-preview-passive-rearward/probing-flow/access.json",+      "sha256": "0ff02c98bdf58c6ec04c884950ae023e1e90705033b09b8d672327c21c710f68"+    },+    "board": {+      "path": "/home/adom/project/adom-custom-electronic-load/probing-flow/design-candidate/sidefan-dft-r23.kicad_pcb",+      "sha256": "74f8ac20cba6b95db26c40f5369156efec80cb80e35388fe064f6891ff78ff11"+    },+    "decodedAssembly": {+      "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-rearward-envelope/assembly.plain.glb",+      "sha256": "a827c2f13f036127a731f7a946a3fbbd7eae56ab4fea9a54fc02b4d96bcffd5a"+    },+    "glb": {+      "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-rearward-envelope/assembly.glb",+      "sha256": "bded8f65b916f87850613f72c263ea0d5f9bebe92742ec5c99276ab5924ecfb6"+    },+    "head:pincer-jaw-moving": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-jaw-moving/medium.glb",+      "sha256": "878327978fcc1187136d465ff154976c02faf0ad657fabb8ec7d0b673bdc25da"+    },+    "head:pincer-module": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-module/medium.glb",+      "sha256": "8074d36f3ae76432f078ebbd21aa37f2c250beb4a4f4567ce957a8667c1ab5da"+    },+    "head:pogo-barrel": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-barrel/medium.glb",+      "sha256": "5fe8ef0b97ed93240487d478c27fd29d4e4dcc2206534e05dfb2de245d82d94b"+    },+    "head:pogo-plunger": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-plunger/medium.glb",+      "sha256": "f719802f648b10cd9acefbe3f895ffae20955945fac5cb07f576661ffbaebf33"+    },+    "head:probe-module": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/probe-module/medium.glb",+      "sha256": "d927438999c0b305d0a05e645261f3010978778f91312e5e09ca25a3b5dff5c8"+    },+    "layout": {+      "path": "probing-preview-passive-rearward/probing-flow/layout.json",+      "sha256": "37b719d1c2922fe2c173e810dd24a0ed59f7f93d3d68b122b23922394127d23c"+    },+    "sequence": {+      "path": "probing-preview-passive-rearward/probing-flow/sequence.json",+      "sha256": "296c16143df224a31069444db43521ec0193906eb33dd555cc07399a51c5cb26"+    },+    "workcell": {+      "path": "probing-preview-passive-rearward/probing-flow/workcell.json",+      "sha256": "f56cfe0557906c0f136f8524dfb0f265d632f993971274c5ddbf12821bbe6e75"+    }+  },+  "panel_wires": 4,+  "part_shapes": "triangles (0.25 mm columns)",+  "parts": 366,+  "problems": [],+  "summary": "collisions over 221.5 s of the run (14528 poses, the head's real surface vs 366 parts at their real shapes, 4 panel wires and the seated ground pin): 0 collision episode(s); ground wire: 721 solves, 0 snag(s)",+  "tether": {+    "rests_on": [],+    "snags": [],+    "solves": 721,+    "worst_clearance_mm": -0.0+  }+}
probing-preview-passive-shifted/probing-flow/collide.jsonadded+133
@@ -0,0 +1,133 @@+{+  "board_top_mm": 5.565,+  "bodies": [+    {+      "anchor": "module",+      "name": "probe module",+      "points": 4956780+    },+    {+      "anchor": "module",+      "name": "pogo barrel",+      "points": 1004+    },+    {+      "anchor": "plunger",+      "name": "pogo plunger",+      "points": 292+    },+    {+      "anchor": "pincer",+      "name": "pincer module",+      "points": 4610241+    },+    {+      "anchor": "jaw",+      "name": "pincer jaw moving",+      "points": 994991+    }+  ],+  "closest": [+    {+      "body": "pincer module",+      "gap_mm": 63.24,+      "part": "a board part at (-48.1, 58.0)",+      "t": 16.46+    },+    {+      "body": "pincer jaw moving",+      "gap_mm": 38.82,+      "part": "a board part at (-48.0, 32.5)",+      "t": 172.54+    },+    {+      "body": "probe module",+      "gap_mm": 0.0,+      "part": "a board part at (-48.1, 58.0)",+      "t": 176.78+    }+  ],+  "collisions": [+    {+      "body": "probe module",+      "depth_mm": 38.4,+      "during": "move to TP16 (BOOST_SW)",+      "fix": "the probe (probe module) hits a board part at (-48.1, 58.0): raise safe Z in the workcell profile above a board part at (-48.1, 58.0)'s height if it happens while traversing; if it happens while landing on a pad, the pad is too close to a board part at (-48.1, 58.0) for the probe module: move the pad or a board part at (-48.1, 58.0) in the board flow",+      "from_s": 168.89,+      "kind": "part",+      "obstacle": "a board part at (-48.1, 58.0)",+      "test": "off-state-survey",+      "to_s": 184.12+    }+  ],+  "dt_s": 0.02,+  "inputIdentity": {+    "access": {+      "path": "probing-preview-passive-shifted/probing-flow/access.json",+      "sha256": "0ff02c98bdf58c6ec04c884950ae023e1e90705033b09b8d672327c21c710f68"+    },+    "board": {+      "path": "/home/adom/project/adom-custom-electronic-load/probing-flow/design-candidate/sidefan-dft-r23.kicad_pcb",+      "sha256": "74f8ac20cba6b95db26c40f5369156efec80cb80e35388fe064f6891ff78ff11"+    },+    "decodedAssembly": {+      "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-shifted-envelope/assembly.plain.glb",+      "sha256": "16b29af4ddf6e676079154abc1255f9c80e1a4479187053b752e1963838c5d64"+    },+    "glb": {+      "path": "/home/adom/project/adom-custom-electronic-load/mechanical/passive-board34-shifted-envelope/assembly.glb",+      "sha256": "8f741d319d9b719ab24a9b15d69b838c16ec868ab27bd52297bc40bddf78ed6d"+    },+    "head:pincer-jaw-moving": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-jaw-moving/medium.glb",+      "sha256": "878327978fcc1187136d465ff154976c02faf0ad657fabb8ec7d0b673bdc25da"+    },+    "head:pincer-module": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pincer-module/medium.glb",+      "sha256": "8074d36f3ae76432f078ebbd21aa37f2c250beb4a4f4567ce957a8667c1ab5da"+    },+    "head:pogo-barrel": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-barrel/medium.glb",+      "sha256": "5fe8ef0b97ed93240487d478c27fd29d4e4dcc2206534e05dfb2de245d82d94b"+    },+    "head:pogo-plunger": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/pogo-plunger/medium.glb",+      "sha256": "f719802f648b10cd9acefbe3f895ffae20955945fac5cb07f576661ffbaebf33"+    },+    "head:probe-module": {+      "path": "/home/adom/project/load-probing-20261012/twin/v2/probe-module/medium.glb",+      "sha256": "d927438999c0b305d0a05e645261f3010978778f91312e5e09ca25a3b5dff5c8"+    },+    "layout": {+      "path": "probing-preview-passive-shifted/probing-flow/layout.json",+      "sha256": "37b719d1c2922fe2c173e810dd24a0ed59f7f93d3d68b122b23922394127d23c"+    },+    "sequence": {+      "path": "probing-preview-passive-shifted/probing-flow/sequence.json",+      "sha256": "296c16143df224a31069444db43521ec0193906eb33dd555cc07399a51c5cb26"+    },+    "workcell": {+      "path": "probing-preview-passive-shifted/probing-flow/workcell.json",+      "sha256": "f56cfe0557906c0f136f8524dfb0f265d632f993971274c5ddbf12821bbe6e75"+    }+  },+  "panel_wires": 4,+  "part_shapes": "triangles (0.25 mm columns)",+  "parts": 366,+  "problems": [+    "probe module hits a board part at (-48.1, 58.0), 38.4 mm below its top, at 168.89-184.12 s (off-state-survey: move to TP16 (BOOST_SW))"+  ],+  "summary": "collisions over 221.5 s of the run (14528 poses, the head's real surface vs 366 parts at their real shapes, 4 panel wires and the seated ground pin): 1 collision episode(s); ground wire: 721 solves, 0 snag(s)",+  "tether": {+    "rests_on": [+      {+        "from_s": 61.25,+        "part": "a board part at (-48.1, 58.0)",+        "to_s": 184.25+      }+    ],+    "snags": [],+    "solves": 721,+    "worst_clearance_mm": -0.0+  }+}
probing-preview-r9/probing-flow/captures/aux-start.jsonadded+1
@@ -0,0 +1 @@+{"kind":"dc","metrics":[{"key":"dc_TP7","label":"TP7 (3V3) DC","measured":3.2641,"model":"stated-voltage-with-synthetic-error","ok":true,"pass":[3.135,3.465],"recorded":false,"refs":{"named":3.3},"unit":"V","vs_spice_pct":null},{"key":"dc_TP14","label":"TP14 (5V_AUX) DC","measured":5.0428,"model":"stated-voltage-with-synthetic-error","ok":true,"pass":[4.85,5.15],"recorded":false,"refs":{"named":5.0},"unit":"V","vs_spice_pct":null},{"key":"dc_TP15","label":"TP15 (VREF_2V5) DC","measured":2.4803,"model":"stated-voltage-with-synthetic-error","ok":true,"pass":[2.375,2.625],"recorded":false,"refs":{"named":2.5},"unit":"V","vs_spice_pct":null}],"name":"Auxiliary startup, load disabled; verify rails and observe fan","source":"simulated","test":"aux-start"}\ No newline at end of file
probing-preview-r9/probing-flow/captures/off-state-survey.jsonadded+1
@@ -0,0 +1 @@+{"kind":"dc","metrics":[{"key":"dc_TP13","label":"TP13 (SHUNT_N_SENSE) DC","measured":1.4315,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP6","label":"TP6 (V_GATE) DC","measured":0.2385,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP4","label":"TP4 (I_SET) DC","measured":0.6207,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP3","label":"TP3 (SHUNT_P_SENSE) DC","measured":1.778,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP2","label":"TP2 (LOAD_POS) DC","measured":2.9971,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP1","label":"TP1 (DUT_POS) DC","measured":2.9759,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP9","label":"TP9 (HW_OK) DC","measured":2.012,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP5","label":"TP5 (GATE) DC","measured":1.9253,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP10","label":"TP10 (LATCH_Q) DC","measured":1.3576,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP8","label":"TP8 (TEMP_SENSE) DC","measured":2.6997,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP12","label":"TP12 (FAN_TACH) DC","measured":2.6033,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP14","label":"TP14 (5V_AUX) DC","measured":1.6713,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP16","label":"TP16 (BOOST_SW) DC","measured":2.421,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null}],"name":"Off-state signal survey; capture values without invented pass bands","source":"simulated","test":"off-state-survey"}\ No newline at end of file
probing-preview-r9/probing-flow/captures/shutdown.jsonadded+1
@@ -0,0 +1 @@+{"kind":"dc","metrics":[{"key":"dc_TP14","label":"TP14 (5V_AUX) DC","measured":1.6647,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP5","label":"TP5 (GATE) DC","measured":1.9439,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP12","label":"TP12 (FAN_TACH) DC","measured":2.5847,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null},{"key":"dc_TP14","label":"TP14 (5V_AUX) DC","measured":1.6656,"model":"unscored-placeholder-not-circuit-prediction","ok":null,"pass":["record","record"],"recorded":true,"refs":{},"unit":"V","vs_spice_pct":null}],"name":"DUT source off before auxiliary off; authored fan coast-down","source":"simulated","test":"shutdown"}\ No newline at end of file
probing-preview-r9/probing-flow/report.mdadded+26
@@ -0,0 +1,26 @@+# Probing report++Board: /home/adom/project/adom-custom-electronic-load/probing-flow/design-candidate/sidefan-dft-r23.kicad_pcb. Workcell: adom-probing-v1.++| Test | Metric | Captured | SPICE | Δ vs SPICE | Pass band | Result | Source |+|---|---|---|---|---|---|---|---|+| Auxiliary startup, load disabled; verify rails and observe fan | TP7 (3V3) DC | 3.2641 V | named 3.3 | n/a | 3.135 to 3.465 | PASS | simulated |+| Auxiliary startup, load disabled; verify rails and observe fan | TP14 (5V_AUX) DC | 5.0428 V | named 5.0 | n/a | 4.85 to 5.15 | PASS | simulated |+| Auxiliary startup, load disabled; verify rails and observe fan | TP15 (VREF_2V5) DC | 2.4803 V | named 2.5 | n/a | 2.375 to 2.625 | PASS | simulated |+| Off-state signal survey; capture values without invented pass bands | TP13 (SHUNT_N_SENSE) DC | 1.4315 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP6 (V_GATE) DC | 0.2385 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP4 (I_SET) DC | 0.6207 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP3 (SHUNT_P_SENSE) DC | 1.778 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP2 (LOAD_POS) DC | 2.9971 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP1 (DUT_POS) DC | 2.9759 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP9 (HW_OK) DC | 2.012 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP5 (GATE) DC | 1.9253 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP10 (LATCH_Q) DC | 1.3576 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP8 (TEMP_SENSE) DC | 2.6997 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP12 (FAN_TACH) DC | 2.6033 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP14 (5V_AUX) DC | 1.6713 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| Off-state signal survey; capture values without invented pass bands | TP16 (BOOST_SW) DC | 2.421 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| DUT source off before auxiliary off; authored fan coast-down | TP14 (5V_AUX) DC | 1.6647 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| DUT source off before auxiliary off; authored fan coast-down | TP5 (GATE) DC | 1.9439 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| DUT source off before auxiliary off; authored fan coast-down | TP12 (FAN_TACH) DC | 2.5847 V |  | n/a | "record" to "record" | UNSCORED | simulated |+| DUT source off before auxiliary off; authored fan coast-down | TP14 (5V_AUX) DC | 1.6656 V |  | n/a | "record" to "record" | UNSCORED | simulated |
tools/build_passive_contact_envelope.pyadded+21
@@ -0,0 +1,21 @@+from pathlib import Path+import sys,json,hashlib+R=Path(__file__).resolve().parents[1];sys.path.insert(0,str(R/'tools'))+from glb_shape_helpers import read_glb,write_glb,add_shape+import cadquery as cq+O=R/'mechanical/passive-board34-contact-envelope';O.mkdir(exist_ok=True)+g,b=read_glb(R/'mechanical/side-fan-r9/side-fan-assembly.glb')+removed=[]+for i,n in enumerate(g['nodes']):+ if n.get('name','').startswith('Heatsink.ATS_'):+  removed.append(i);n.pop('mesh',None);n['children']=[]+assert removed+root=len(g['nodes']);g['nodes'].append({'name':'PassiveSink.ClearanceStudy','children':[]});g['scenes'][0]['nodes'].append(root)+lo=(20,19,12.85);hi=(96.0984,95.2,63.65)+s=cq.Workplane('XY').box(*[hi[i]-lo[i] for i in range(3)],centered=(False,False,False)).translate(lo).val()+add_shape(g,b,s,'PassiveSink.125319_3inch_CLEARANCE_ENVELOPE',(.68,.4,.08),root,'Conservative solid envelope only. Original abstraction, not manufacturer CAD. Thermal and support redesign unaccepted.')+fan=cq.Workplane('XY').box(24,48,48,centered=(False,False,False)).translate((104,0,4.6)).val()+add_shape(g,b,fan,'ShiftedFan.ConservativeEnvelope',(.35,.35,.38),root,'Provisional relocated fan/plate envelope. Original fan retained as extra conservative obstacle. Harness and carrier redesign required.')+write_glb(O/'assembly.glb',g,b)+(O/'review.json').write_text(json.dumps({'status':'unadopted-clearance-study','source':'mechanical/passive-assembly-study/vendor-model-review.json','boundsMm':list(lo)+list(hi),'nominalManufacturerEnvelopeMm':[76.0984,76.2,50.8],'nominalMassG':257.7,'existingCarrierNeedsRedesign':True,'thermalCredit':False,'purpose':'Test whether passive sink alternative can clear complete probe route before detailed mechanical redesign','boardSha256':hashlib.sha256((R/'aiflow/run/board-34.kicad_pcb').read_bytes()).hexdigest()},indent=2)+'\n')+print(O/'assembly.glb')
tools/passive_cooling_sensitivity.pyadded+13
@@ -0,0 +1,13 @@+"""Conservative steady-state sensitivity; not installed thermal qualification."""+import json+from pathlib import Path+root=Path(__file__).resolve().parents[1]+w=5.5; ambient=40.; rcs=.6727626557059773; rjc=.42; rsa=1.522+rows=[]+for sink_multiplier in [1,1.1,1.2,1.3,1.5]:+ for contact_multiplier in [1,1.25,1.5,2]:+  case=ambient+w*(rsa*sink_multiplier+rcs*contact_multiplier)+  junction=case+w*rjc+  rows.append(dict(sinkMultiplier=sink_multiplier,contactMultiplier=contact_multiplier,caseC=case,junctionC=junction,caseBelow55C=case<=55,conservativePackageRiseBelow15C=junction-ambient<=15))+out={'status':'unadopted-parametric-screen','sourceW':w,'ambientC':ambient,'method':'All Q1 heat through sink; no board cooling credit. Multipliers are sensitivity scenarios, not measured tolerances.','nominalKPerW':{'caseSink':rcs,'junctionCase':rjc,'sinkAmbient':rsa},'rows':rows,'conclusion':'Nominal passes; +10 percent sink resistance exceeds the strict 15 C package-rise screen. Installed conditions and contact assumptions require resolution before adoption.'}+p=root/'mechanical/thermal-alternatives/passive-sensitivity.json';p.write_text(json.dumps(out,indent=2)+'\n');print(p)