← Commit history
design/browser-evidence/stock-sink-api.jsonadded+91
@@ -0,0 +1,91 @@+{+  "digikey": {+    "backend_url": "https://digikey-gjuu8l5t69uh.adom.cloud",+    "elapsed_ms": 888,+    "error": null,+    "hits": [],+    "ok": true,+    "total": 0+  },+  "elapsed_ms": 2357,+  "in_stock_used": false,+  "jlcpcb": {+    "backend_url": "https://jlcpcb-wela51osctvp.adom.cloud",+    "elapsed_ms": 2352,+    "error": null,+    "hits": [],+    "ok": true,+    "total": 0+  },+  "limit_used": 3,+  "mouser": {+    "backend_url": "https://mouser-xr8t4f5d01bt.adom.cloud",+    "elapsed_ms": 598,+    "error": null,+    "hits": [+      {+        "datasheet_url": null,+        "description": "Heat Sinks Maximum Efficiency, Omnidirectional Heat Sink for TO-220, 31.8mm Height",+        "flags": [+          "RoHS Compliant"+        ],+        "image_url": "https://www.mouser.com/images/wakefield/images/680_series_DSL.jpg",+        "lead_time": "253 Days",+        "manufacturer": "Wakefield Thermal",+        "mpn": "680-125220",+        "price_100": "$15.05",+        "product_url": "https://www.mouser.com/en/ProductDetail/Wakefield-Thermal/680-125220?qs=8GtUBYxqNFDH3JH4crjucw%3D%3D",+        "stock": 114,+        "unit_price": "$17.17",+        "vendor": "Mouser",+        "vendor_pn": "567-680-125220"+      },+      {+        "datasheet_url": null,+        "description": "Ohmite",+        "flags": [],+        "image_url": null,+        "lead_time": "0 Days",+        "manufacturer": "ARCOL / Ohmite",+        "mpn": "680-125220",+        "price_100": null,+        "product_url": "https://www.mouser.com/en/ProductDetail/ARCOL-Ohmite/680-125220?qs=%252BdQmOuGyFcGFDyn8lENfBA%3D%3D",+        "stock": 0,+        "unit_price": null,+        "vendor": "Mouser",+        "vendor_pn": "N/A"+      },+      {+        "datasheet_url": null,+        "description": "Heat Sinks 31X46MM Omnidirect Heatsink, Forged, TO-220",+        "flags": [+          "RoHS Compliant"+        ],+        "image_url": null,+        "lead_time": "0 Days",+        "manufacturer": "Wakefield Thermal",+        "mpn": "680125220",+        "price_100": null,+        "product_url": "https://www.mouser.com/en/ProductDetail/Wakefield-Thermal/680125220?qs=efUn273yAhepPbebRH%252BdJQ%3D%3D",+        "stock": 0,+        "unit_price": null,+        "vendor": "Mouser",+        "vendor_pn": "N/A"+      }+    ],+    "ok": true,+    "total": 3+  },+  "policy": "mouser",+  "query": "680-125220",+  "recommendation": {+    "exact_match": true,+    "mpn": "680-125220",+    "reason": "Mouser has the exact part in stock and is the preferred vendor: fastest, lowest-cost fulfillment.",+    "requested_mpn": "680-125220",+    "stock": 114,+    "unit_price": "$17.17",+    "winner": "Mouser"+  },+  "source": "ai"+}
design/browser-evidence/stock-sink-nb-check.jsonadded+9
@@ -0,0 +1,9 @@+{+  "automaticNavigation": false,+  "hint": "Native browser is also denied. Stop retries; use the vendor Search API/BOM tool or manufacturer source, or request human assistance. Do not evade the denial.",+  "lane": "nb",+  "next": "official_alternative",+  "productVerified": false,+  "schema": "adom/browser-access@1",+  "state": "access_denied"+}
design/browser-evidence/stock-sink-nb.jsonadded+6
@@ -0,0 +1,6 @@+{+  "url": "https://www.mouser.com/en/ProductDetail/Wakefield-Thermal/680-125220",+  "title": "Mouser Verification Required",+  "text": "Verification Required. Slide right to secure your access. Access to this page has been denied because we believe you are using automation tools to browse the website.",+  "observationMethod": "Transcribed from native screenshot and recording. DOM evaluation returned product content while the visible surface remained a verification challenge. Do not treat underlying DOM text as visible access."+}
design/browser-evidence/stock-sink-pup-check.jsonadded+9
@@ -0,0 +1,9 @@+{+  "automaticNavigation": false,+  "hint": "Use adom-native-browser: nbrowser_readiness, nbrowser_profiles, then nbrowser_open_window with a new sessionId, thread, purpose and appropriate work profile. Keep it in the background. Never reuse a user tab, import cookies, change network identity or disable protections. Offer installation only if needed. Verify the resulting page before claiming success.",+  "lane": "pup",+  "next": "nb",+  "productVerified": false,+  "schema": "adom/browser-access@1",+  "state": "access_denied"+}
design/browser-evidence/stock-sink-pup.jsonadded+5
@@ -0,0 +1,5 @@+{+  "title": "Access to this page has been denied.",+  "text": "Access Denied\n\nAccess to this page has been denied either because we believe you are using automation tools to browse the website, or something in the request did not pass security restrictions.\n\nThis may happen as a result of the following:\n\nJavascript is disabled or blocked by an extension (ad blockers for example)\nYour browser does not support cookies\nThe request matched a security rule combination that requires inspection. This could happen based on the combination of search terms that individually are harmless, but together match security rules.\n\nPlease make sure that Javascript and cookies are enabled on your browser and that you are not blocking them from loading.\n\n",+  "url": "https://www.mouser.com/en/ProductDetail/Wakefield-Thermal/680-125220"+}
docs/build-clips.md+8
@@ -140,3 +140,11 @@ Nine preflighted vias appear around D1 in the native editor. Playback is 2x; the <video width="100%" playsinline controls preload="metadata" poster="docs/clips/fan-latch-stall-replay-poster.jpg" src="docs/clips/fan-latch-stall-replay.mp4"></video>  Actual browser replay of the portable C controller and tach decoder with synthetic inputs. The ARM request starts with the latch low; feedback acknowledges it on the next simulated millisecond. Tach loss shuts the command off, and recovered fan feedback does not clear the fault. Software simulation is labeled throughout. The 6.8-second excerpt trims idle time; it is not physical shutdown timing. Full decode and contact-sheet review passed. Recorder timeline warnings remain with the raw take.++## Stock-sink sourcing: visible browser checks and API recovery++<video width="100%" playsinline controls preload="metadata" poster="docs/clips/stock-sourcing-recovery-poster.jpg" src="docs/clips/stock-sourcing-recovery.mp4"></video>++Nine-second edit from three actual recordings: Pup access denial, the Native Browser verification surface, and review of the successful official Parts Search API result. Native evaluation returned underlying product text while the screenshot/video still showed verification; this is not claimed as successful visible access. The API result was obtained before its review recording. Static waits are removed; each segment runs at normal encoded speed. The raw recordings have timeline warnings, so they are not wall-clock measurements. Full decodes and contact-sheet reviews passed. The edited native segment crops network metadata.++The raw inventory now contains 62 takes, including rejected/static clips. This is not 62 finished highlights.
docs/clips/stock-sourcing-recovery-poster.jpgadded
⋯ 1 unchanged line ⋯
docs/clips/stock-sourcing-recovery.mp4added
⋯ 1 unchanged line ⋯
docs/status.md+1−1
@@ -2,7 +2,7 @@  Board 18 remains unchanged; thermal/finish gates remain open. The [stock sink attachment candidate](stock-cooling-candidate.md) clears the current fitted-body/probe screen without proposed new PCB holes; the actual mounting stack and airflow remain unresolved. Instrument register fault-injection tests now pass, with DAC/configuration readback and coherent triggered INA226 reads. The control panel accepts explicitly unavailable sensors only while output is confirmed OFF, and refuses ARM until sensor and assembly qualification are valid. All sanitizer-backed C suites and 25 Python tests pass. The output-locked STM32 image builds at 64,688 flash bytes and 23,968 RAM bytes including reservations. No hardware was flashed. -The reviewed fan-stall replay is published and visually checked on the wiki. There are 59 raw takes, including rejected/static takes; the final narrated film is unfinished. See [clip library](build-clips.md) and [firmware contract](firmware-contract.md).+The reviewed fan-stall replay is published and visually checked on the wiki. There are 62 raw takes, including the new Pup denial, native verification and API-result review recordings; the final narrated film is unfinished. See [clip library](build-clips.md) and [firmware contract](firmware-contract.md).  # Current checkpoint - 2026-10-09, 20:10 UTC 
docs/stock-cooling-candidate.md+6
@@ -21,3 +21,9 @@ python3 -s tools/plot_stock_cooling.py ```  [Machine-readable screen](mechanical/cooling-680-screen.json) · [Fitted-model evidence](mechanical/cooling-680-body-audit.json) · [Thermal sensitivity assumptions](package-cooling-review.md)++## Sourcing observation, 9 October++Adom Parts Search returned Mouser part 567-680-125220 at $17.17 each, 114 in stock and 253 days listed lead time. This is a point-in-time listing, not a purchase quote; shipping and tax are excluded. DigiKey and JLCPCB returned no results. [Saved API result](design/browser-evidence/stock-sink-api.json). No item was ordered.++Pup was denied; Native Browser visibly showed a verification challenge despite product text in DOM evaluation. The official API supplied the sourcing data. Manufacturer CAD has not been obtained. [Recorded browser/API review](docs/build-clips.md).
videos/inventory.json+19−1
@@ -1,5 +1,5 @@ {-  "rawTakeCount": 59,+  "rawTakeCount": 62,   "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": [@@ -356,6 +356,24 @@       "durationSeconds": 11.2,       "topic": "Host simulation replay after fresh latch acknowledgement fix; tach loss and latched shutdown",       "review": "Full decode and contact sheet reviewed; 6.8 s excerpt at normal encoded speed. Recorder timeline sample mismatch retained; not measured hardware timing."+    },+    {+      "file": "videos/stock-sourcing/window-5969372-20261009-202743.mp4",+      "durationSeconds": 19.133333,+      "topic": "Pup access denial while researching stock heatsink CAD",+      "review": "Full decode and contact sheet reviewed; denial appears after navigation. Not recovered product access."+    },+    {+      "file": "videos/stock-sourcing/window-4075026-20261009-202819.mp4",+      "durationSeconds": 24.066667,+      "topic": "Native Browser attempt visibly remains on verification challenge",+      "review": "Full decode and contact sheet reviewed; DOM product text disagreed with visible challenge. Crop network metadata before public use."+    },+    {+      "file": "videos/stock-sourcing/window-5969372-20261009-203023.mp4",+      "durationSeconds": 16.233333,+      "topic": "Review of successful official Parts Search API result",+      "review": "Full decode and contact sheet reviewed; mostly static, use only a short price/stock cutaway; no new search shown."     }   ] }
videos/stock-sourcing/api-recording-stop.jsonadded+37
@@ -0,0 +1,37 @@+{+  "_hint": "The MP4 is finalized (moov written). pull_file {path} brings it to the caller; the janitor prunes the recordings dir by age/size, so pull it promptly.",+  "abVersion": "2.1.173",+  "audio": false,+  "audioFrames": 0,+  "autoStopped": false,+  "bytes": 2682087,+  "captureItemClosed": false,+  "captureQuiet": null,+  "droppedFrames": 0,+  "durationMs": 187,+  "elapsedMs": 14978,+  "encodedFrames": 0,+  "error": "",+  "fileExists": true,+  "finaliseMs": 1,+  "framePath": "gpu",+  "frames": 11,+  "gpuZeroCopy": true,+  "height": 1528,+  "kind": "window",+  "lastFrameAgoMs": 10783,+  "output": "{\"data\":{\"bytes\":2682087,\"elapsedMs\":14978,\"frames\":11,\"path\":\"C:\\\\Users\\\\john\\\\AppData\\\\Local\\\\Temp\\\\adom-bridge-recordings\\\\window-5969372-20261009-203023.mp4\",\"recordingId\":\"rec-b59ceca90f924c1f812cde8f8dacd8cf\"},\"message\":\"Stopped recording rec-b59ceca90f924c1f812cde8f8dacd8cf: 11 frames, 14978 ms, 2682087 bytes -> C:\\\\Users\\\\john\\\\AppData\\\\Local\\\\Temp\\\\adom-bridge-recordings\\\\window-5969372-20261009-203023.mp4\"}",+  "path": "C:/Users/john/AppData/Local/Temp/adom-bridge-recordings/window-5969372-20261009-203023.mp4",+  "rateControl": "vbr",+  "recordingId": "rec-b59ceca90f924c1f812cde8f8dacd8cf",+  "schemaVersion": 1,+  "state": "finalised",+  "status": "ok",+  "success": true,+  "timeline": {+    "reason": "file has more video samples than were written (11 written, fragment 1 needs 60)",+    "repaired": false+  },+  "timeoutSeconds": 30,+  "width": 2560+}
videos/stock-sourcing/nb-recording-stop.jsonadded+37
@@ -0,0 +1,37 @@+{+  "_hint": "The MP4 is finalized, BUT: No new frame from Windows for 16s before the stop. A still screen also sends nothing, but if the screen WAS changing, the capture has stalled and the file holds a frozen picture from that point; stop and start a new take (short clips are the safe pattern for long demos). Check a frame from the end of the take before using it.",+  "abVersion": "2.1.173",+  "audio": false,+  "audioFrames": 0,+  "autoStopped": false,+  "bytes": 2518586,+  "captureItemClosed": false,+  "captureQuiet": "No new frame from Windows for 16s before the stop. A still screen also sends nothing, but if the screen WAS changing, the capture has stalled and the file holds a frozen picture from that point; stop and start a new take (short clips are the safe pattern for long demos).",+  "droppedFrames": 0,+  "durationMs": 159,+  "elapsedMs": 22661,+  "encodedFrames": 179,+  "error": "",+  "fileExists": true,+  "finaliseMs": 2,+  "framePath": "gpu",+  "frames": 100,+  "gpuZeroCopy": true,+  "height": 1490,+  "kind": "window",+  "lastFrameAgoMs": 16675,+  "output": "{\"data\":{\"bytes\":2518586,\"elapsedMs\":22661,\"frames\":100,\"path\":\"C:\\\\Users\\\\john\\\\AppData\\\\Local\\\\Temp\\\\adom-bridge-recordings\\\\window-4075026-20261009-202819.mp4\",\"recordingId\":\"rec-ddec9548a2c146879db8559e54836948\"},\"message\":\"Stopped recording rec-ddec9548a2c146879db8559e54836948: 100 frames, 22661 ms, 2518586 bytes -> C:\\\\Users\\\\john\\\\AppData\\\\Local\\\\Temp\\\\adom-bridge-recordings\\\\window-4075026-20261009-202819.mp4\"}",+  "path": "C:/Users/john/AppData/Local/Temp/adom-bridge-recordings/window-4075026-20261009-202819.mp4",+  "rateControl": "vbr",+  "recordingId": "rec-ddec9548a2c146879db8559e54836948",+  "schemaVersion": 1,+  "state": "finalised",+  "status": "ok",+  "success": true,+  "timeline": {+    "reason": "file has more video samples than were written (100 written, fragment 2 needs 120)",+    "repaired": false+  },+  "timeoutSeconds": 30,+  "width": 2512+}
videos/stock-sourcing/pup-recording-stop.jsonadded+37
@@ -0,0 +1,37 @@+{+  "_hint": "The MP4 is finalized (moov written). pull_file {path} brings it to the caller; the janitor prunes the recordings dir by age/size, so pull it promptly.",+  "abVersion": "2.1.173",+  "audio": false,+  "audioFrames": 0,+  "autoStopped": false,+  "bytes": 2643171,+  "captureItemClosed": false,+  "captureQuiet": null,+  "droppedFrames": 0,+  "durationMs": 158,+  "elapsedMs": 17524,+  "encodedFrames": 181,+  "error": "",+  "fileExists": true,+  "finaliseMs": 4,+  "framePath": "gpu",+  "frames": 54,+  "gpuZeroCopy": true,+  "height": 1528,+  "kind": "window",+  "lastFrameAgoMs": 6417,+  "output": "{\"data\":{\"bytes\":2643171,\"elapsedMs\":17524,\"frames\":54,\"path\":\"C:\\\\Users\\\\john\\\\AppData\\\\Local\\\\Temp\\\\adom-bridge-recordings\\\\window-5969372-20261009-202743.mp4\",\"recordingId\":\"rec-ee7175cf74f140d28338e39e054eb30e\"},\"message\":\"Stopped recording rec-ee7175cf74f140d28338e39e054eb30e: 54 frames, 17524 ms, 2643171 bytes -> C:\\\\Users\\\\john\\\\AppData\\\\Local\\\\Temp\\\\adom-bridge-recordings\\\\window-5969372-20261009-202743.mp4\"}",+  "path": "C:/Users/john/AppData/Local/Temp/adom-bridge-recordings/window-5969372-20261009-202743.mp4",+  "rateControl": "vbr",+  "recordingId": "rec-ee7175cf74f140d28338e39e054eb30e",+  "schemaVersion": 1,+  "state": "finalised",+  "status": "ok",+  "success": true,+  "timeline": {+    "reason": "file has more video samples than were written (54 written, fragment 1 needs 60)",+    "repaired": false+  },+  "timeoutSeconds": 30,+  "width": 2560+}