← Commit history

Initial commit: app/adom-chipsmith

Kyle Bergstedt ·f94e351bb9 ·4mo ago
2 files changed +207
README.mdadded+120
@@ -0,0 +1,120 @@+# adom-chipsmith — STEP-native chip validator++`adom-chipsmith` loads a chip's STEP file alongside its footprint, datasheet PDF, and a chipsmith-spec manifest, then runs detection on the **STEP B-rep** (not on triangulated GLB meshes), validates measurements, layers a 1.6 mm faux PCB, auto-generates heatsink-via grids under any exposed pad, lays out solder-jet domes per the [`solder-jetting`](/wiki/skill/solder-jetting) rules, and on user sign-off bakes a canonical `<mpn>.chipsmith.step` plus a sidecar JSON for downstream Adom tools.++It's the higher-level validator that sits on top of [`adom-step`](/wiki/apps/adom-step) — chipsmith inherits the canonical Babylon viewer + smart-pick measure tool + Outline pane via the Tier-3 importer pattern from [`3d-viewer-design`](/wiki/skill/3d-viewer-design) §2.++## What it does (in one screen)++| Tab | What it shows |+|---|---|+| **Source** | Manifest (MPN / mfr / package), declared spec (`pin_count` / `structural_type` / `body_dims_mm`), file paths with reveal-in-VSCode buttons, datasheet via [`adom-pdf-viewer`](/wiki/skill/adom-pdf-viewer). Inline editor saves into `info.json`. |+| **Measurements** | Auto-rescale negotiation across 6 candidates (×1, ÷25.4, ÷1000, ×25.4, ×1000, ÷10) — picks the scale within ±5% of declared `body_dims_mm`. mm + mils dual readout. |+| **Detection** | Mode 0 walks the named scene graph. Mode 1 falls back to surface-type clustering on `/api/step-meta`. Pin-reveal strobe flashes each detected feature with a numbered HTML badge floating at the screen-projected XY. |+| **Footprint** | Per-source breakdown across **KiCad / Fusion / Altium / datasheet-derived**. Cross-source agreement matrix (pad-by-pad position + size deltas). 3D toggle per source — translucent pads at z=0 in the scene. **ds2sf v0.5.1 authoritative SVG rendered as real vector polygons** via earcut (not a raster texture; sharp at any zoom). |+| **Pin-1** | Chip-side via Mode 0 detection; footprint-side via silkscreen marker scan. Place-synthetic-indicator UI (NW/NE/SW/SE/click) when chip-side is missing. Three shapes: dimple / raised dot / corner chamfer. |+| **Sign-off** | 4 hard + 3 soft gates. CTA POSTs to `/api/signoff` → writes `<mpn>.chipsmith.json` + bakes `<mpn>.chipsmith.step`. |+| **Heatsink** | EP detection + auto-generated 0.3 mm via grid (1.2 mm pitch, 0.4 mm margin). Hollow plated barrels with copper annular rings. CSG-drilled B.Cu copper pour underneath the EP — with via-clearance holes — for the heatsink path. |+| **Solder-jet** | 300 µm dome layout per [`solder-jetting`](/wiki/skill/solder-jetting) — intra-pad ≥100 µm, inter-pad ≥300 µm with no-bridging pruning. |++Every overlay layer is a **first-class Outline citizen** with eye-toggle, click-to-isolate, and a right-click menu.++## STEP-native, not GLB++Both `adom-chipfit` and `adom-chiplinter` operate on triangulated GLBs and both lose surface-type information (a BGA ball becomes a triangle list, indistinguishable from a QFN pad). chipsmith reads the STEP file's B-rep + assembly hierarchy directly via `service-step2glb`'s `/step-meta` endpoint, so:++- **CYLINDER + small radius + dome top** → BGA ball.+- **PLANE + horizontal + at z≈seat-plane** → SMD pad.+- **PLANE + vertical + tall (≥1.6 mm) + thin** → through-hole pin.+- **CONICAL or CYLINDER on top, small radius, elevated** → pin-1 indicator candidate.++Detection runs in three modes — Mode 0 named-scene-graph walk, Mode 1 surface-type cluster, Mode 2 face-merge fallback — stopping when ≥(declared pin count) features have been classified.++## Multi-source footprint cross-validation++chipsmith renders four parallel footprint sources from `chip-fetcher`'s library (datasheet-derived, KiCad, Fusion 360 .lbr, Altium .PcbLib) into the scene as separately-branched overlays in different tints (orange / green / blue / purple), then runs a per-pad cross-validation matrix. **All four sources agreeing pad-by-pad is the strongest possible "chipsmith nailed this chip"** signal — disagreements pop visually and gate sign-off.++The ds2sf authoritative SVG (when present in the chip-fetcher library — emitted by ds2sf v0.5.1+) renders as a fifth branch of pixel-trustworthy ground truth: **real vector polygons** parsed from the SVG and triangulated via earcut, not a texture-mapped raster.++## Quick start++```bash+# Install (paste into Claude Code):+curl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-chipsmith/adom-chipsmith \+  -o /usr/local/bin/adom-chipsmith && chmod +x /usr/local/bin/adom-chipsmith && \+  adom-chipsmith install++# Open a chip from a chip-fetcher library+adom-chipsmith view-library /home/adom/project/chip-fetcher/library/VL53L8CX++# Open an arbitrary STEP + footprint + datasheet+adom-chipsmith view path/to/chip.step \+  --footprint path/to/chip.kicad_mod \+  --spec      path/to/info.json++# Headless detection — JSON report+adom-chipsmith detect --json /path/to/chip-fetcher/library/<MPN>+```++## CLI surface++| Command | Purpose |+|---|---|+| `view <step> [--footprint] [--spec] [--datasheet] [--no-open]` | Open one chip |+| `view-library <chip-fetcher-dir>` | Open a chip from a chip-fetcher library |+| `start --port N` / `stop --port N` / `status` / `health` | Server lifecycle |+| `list-components` | Scene-graph component tree |+| `isolate <name>` / `show <name>` / `hide <name>` / `show-all` / `frame <name>` | Visibility + camera |+| `place-pin1 <corner>` / `set-overlay <kind> <on/off>` / `sign-off` | Verification flow drivers |+| `screenshot --out <png>` | PNG of current canvas |+| `eval <js>` | Run a JS expression inside the webview, print the result |+| `console -f` | Tail JS console output from the webview |+| `detect --json` | Headless detection report on a chip-fetcher dir |++## JS API surface (`window.adomChipsmith`)++The full UI is JS-shadowed for AI demo scripts + tests. From the CLI: `adom-chipsmith eval "window.adomChipsmith.<verb>(...)"`.++```+state()                         // full state snapshot+setActiveTab(id)                // 'source' | 'measurements' | … | 'solderjet'+runDetection()                  // re-fetch + re-run Mode 0 → Mode 1 fallback+runMeasurements()               // re-run rescale negotiation+recomputeStatuses()             // refresh every status pill from current state++placePin1(opts)                 // {mode:'corner'|'fpMarker'|'click', corner, xyMm, shape}+removePin1User()++setFootprintOverlay(src, on)    // 'kicad' | 'fusion' | 'altium' | 'datasheet' | 'stock'+setDs2sfVisible(on)+setFauxPcbVisible(on)+setHeatsinkVisible(on)+setSolderJetVisible(on)++replayReveal()                  // re-runs the strobe + numbered badges+hoverAt({x, y})                 // returns same payload as the visible HUD++signoff.gates()+signoff.canSignOff()+signoff.signOff()               // POST /api/signoff → writes JSON + bakes STEP+```++## Sign-off artifacts++| File | Content |+|---|---|+| `<mpn>.chipsmith.json` | Full state — applied scale, detected breakdown, heatsink grid, solder-jet layout, pin-1 user-placed corner, sign-off timestamp |+| `<mpn>.chipsmith.step` | Canonical role-tagged STEP via `service-step2glb`'s `/bake` endpoint. Future Adom tools should prefer this over the original input. |++## Source++`adom-inc/adom-chipsmith` (private). The wiki carries the binary + SKILL.md + this page; the public install path is fully self-service.++## Adjacent skills++- [`adom-step`](/wiki/apps/adom-step) — base viewer chipsmith inherits from+- [`3d-viewer-design`](/wiki/skill/3d-viewer-design) — esp. §14 (overlays first-class) and §2 (Tier-3 inheritance)+- [`solder-jetting`](/wiki/skill/solder-jetting) — 300 µm dome rules+- [`electrical-engineering`](/wiki/skill/electrical-engineering) — package families, pin-1 conventions, mm + mils+- [`pin1-indicator`](/wiki/skill/pin1-indicator) — per-package pin-1 marker conventions+- [`chip-fetcher`](/wiki/apps/chip-fetcher) — produces the chipsmith input bundle
page.jsonadded+87
@@ -0,0 +1,87 @@+{+  "schema_version": 1,+  "type": "app",+  "slug": "adom-chipsmith",+  "title": "Chipsmith",+  "brief": "STEP-native chip validator — 5-source cross-validation, OCCT-generated copyright-free 3D models with embedded signal annotations, datasheet-to-STEP pipeline.",+  "version": "0.2.0",+  "tags": [],+  "license": "MIT",+  "discovery_triggers": [+    "chipsmith",+    "chip detection",+    "validate chip step",+    "sign off chip",+    "footprint validation",+    "pin-1 indicator",+    "place pin1",+    "heatsink vias",+    "faux pcb",+    "solder jet domes",+    "manual orient step",+    "mm vs inch step",+    "detect pins step",+    "chip pad detection",+    "chip step bake",+    "role tag chip",+    "multi-source footprint cross-validation",+    "ds2sf vector overlay",+    "chip on pcb 3d",+    "step b-rep detection"+  ],+  "discovery_pitch": "STEP-native chip detection + footprint validation + sign-off — reads the B-rep + assembly hierarchy directly (not GLB triangle meshes) so a BGA ball stays a sphere and a QFN pad stays a plane. Cross-validates four parallel footprint sources (datasheet / KiCad / Fusion / Altium) plus the ds2sf authoritative SVG rendered as real vector polygons via earcut. Bakes a canonical .chipsmith.step on sign-off.",+  "sample_prompts": [+    {+      "label": "Open library",+      "prompt": "Open chipsmith for VL53L8CX"+    },+    {+      "label": "Detect",+      "prompt": "Run detection on LM358D"+    },+    {+      "label": "Sign off",+      "prompt": "Sign off this chip and bake the STEP"+    },+    {+      "label": "Place pin-1",+      "prompt": "Place a pin-1 dimple on the NE corner"+    },+    {+      "label": "Heatsink",+      "prompt": "Show heatsink vias under the EP"+    },+    {+      "label": "Cross-validate",+      "prompt": "Compare all 5 footprint sources"+    },+    {+      "label": "Generate chip",+      "prompt": "Show the Adom-generated 3D chip from the datasheet"+    },+    {+      "label": "Faux PCB",+      "prompt": "Show the 1.6mm faux PCB with drill holes"+    }+  ],+  "install": {+    "binary_name": "adom-chipsmith",+    "install_dir": "",+    "install_hint": "",+    "version_cmd": ""+  },+  "readme": "# adom-chipsmith — STEP-native chip validator\n\n`adom-chipsmith` loads a chip's STEP file alongside its footprint, datasheet PDF, and a chipsmith-spec manifest, then runs detection on the **STEP B-rep** (not on triangulated GLB meshes), validates measurements, layers a 1.6 mm faux PCB, auto-generates heatsink-via grids under any exposed pad, lays out solder-jet domes per the [`solder-jetting`](/wiki/skill/solder-jetting) rules, and on user sign-off bakes a canonical `<mpn>.chipsmith.step` plus a sidecar JSON for downstream Adom tools.\n\nIt's the higher-level validator that sits on top of [`adom-step`](/wiki/apps/adom-step) — chipsmith inherits the canonical Babylon viewer + smart-pick measure tool + Outline pane via the Tier-3 importer pattern from [`3d-viewer-design`](/wiki/skill/3d-viewer-design) §2.\n\n## What it does (in one screen)\n\n| Tab | What it shows |\n|---|---|\n| **Source** | Manifest (MPN / mfr / package), declared spec (`pin_count` / `structural_type` / `body_dims_mm`), file paths with reveal-in-VSCode buttons, datasheet via [`adom-pdf-viewer`](/wiki/skill/adom-pdf-viewer). Inline editor saves into `info.json`. |\n| **Measurements** | Auto-rescale negotiation across 6 candidates (×1, ÷25.4, ÷1000, ×25.4, ×1000, ÷10) — picks the scale within ±5% of declared `body_dims_mm`. mm + mils dual readout. |\n| **Detection** | Mode 0 walks the named scene graph. Mode 1 falls back to surface-type clustering on `/api/step-meta`. Pin-reveal strobe flashes each detected feature with a numbered HTML badge floating at the screen-projected XY. |\n| **Footprint** | Per-source breakdown across **KiCad / Fusion / Altium / datasheet-derived**. Cross-source agreement matrix (pad-by-pad position + size deltas). 3D toggle per source — translucent pads at z=0 in the scene. **ds2sf v0.5.1 authoritative SVG rendered as real vector polygons** via earcut (not a raster texture; sharp at any zoom). |\n| **Pin-1** | Chip-side via Mode 0 detection; footprint-side via silkscreen marker scan. Place-synthetic-indicator UI (NW/NE/SW/SE/click) when chip-side is missing. Three shapes: dimple / raised dot / corner chamfer. |\n| **Sign-off** | 4 hard + 3 soft gates. CTA POSTs to `/api/signoff` → writes `<mpn>.chipsmith.json` + bakes `<mpn>.chipsmith.step`. |\n| **Heatsink** | EP detection + auto-generated 0.3 mm via grid (1.2 mm pitch, 0.4 mm margin). Hollow plated barrels with copper annular rings. CSG-drilled B.Cu copper pour underneath the EP — with via-clearance holes — for the heatsink path. |\n| **Solder-jet** | 300 µm dome layout per [`solder-jetting`](/wiki/skill/solder-jetting) — intra-pad ≥100 µm, inter-pad ≥300 µm with no-bridging pruning. |\n\nEvery overlay layer is a **first-class Outline citizen** with eye-toggle, click-to-isolate, and a right-click menu.\n\n## STEP-native, not GLB\n\nBoth `adom-chipfit` and `adom-chiplinter` operate on triangulated GLBs and both lose surface-type information (a BGA ball becomes a triangle list, indistinguishable from a QFN pad). chipsmith reads the STEP file's B-rep + assembly hierarchy directly via `service-step2glb`'s `/step-meta` endpoint, so:\n\n- **CYLINDER + small radius + dome top** → BGA ball.\n- **PLANE + horizontal + at z≈seat-plane** → SMD pad.\n- **PLANE + vertical + tall (≥1.6 mm) + thin** → through-hole pin.\n- **CONICAL or CYLINDER on top, small radius, elevated** → pin-1 indicator candidate.\n\nDetection runs in three modes — Mode 0 named-scene-graph walk, Mode 1 surface-type cluster, Mode 2 face-merge fallback — stopping when ≥(declared pin count) features have been classified.\n\n## Multi-source footprint cross-validation\n\nchipsmith renders four parallel footprint sources from `chip-fetcher`'s library (datasheet-derived, KiCad, Fusion 360 .lbr, Altium .PcbLib) into the scene as separately-branched overlays in different tints (orange / green / blue / purple), then runs a per-pad cross-validation matrix. **All four sources agreeing pad-by-pad is the strongest possible \"chipsmith nailed this chip\"** signal — disagreements pop visually and gate sign-off.\n\nThe ds2sf authoritative SVG (when present in the chip-fetcher library — emitted by ds2sf v0.5.1+) renders as a fifth branch of pixel-trustworthy ground truth: **real vector polygons** parsed from the SVG and triangulated via earcut, not a texture-mapped raster.\n\n## Quick start\n\n```bash\n# Install (paste into Claude Code):\ncurl -fsSL https://wiki-ufypy5dpx93o.adom.cloud/static/apps/adom-chipsmith/adom-chipsmith \\\n  -o /usr/local/bin/adom-chipsmith && chmod +x /usr/local/bin/adom-chipsmith && \\\n  adom-chipsmith install\n\n# Open a chip from a chip-fetcher library\nadom-chipsmith view-library /home/adom/project/chip-fetcher/library/VL53L8CX\n\n# Open an arbitrary STEP + footprint + datasheet\nadom-chipsmith view path/to/chip.step \\\n  --footprint path/to/chip.kicad_mod \\\n  --spec      path/to/info.json\n\n# Headless detection — JSON report\nadom-chipsmith detect --json /path/to/chip-fetcher/library/<MPN>\n```\n\n## CLI surface\n\n| Command | Purpose |\n|---|---|\n| `view <step> [--footprint] [--spec] [--datasheet] [--no-open]` | Open one chip |\n| `view-library <chip-fetcher-dir>` | Open a chip from a chip-fetcher library |\n| `start --port N` / `stop --port N` / `status` / `health` | Server lifecycle |\n| `list-components` | Scene-graph component tree |\n| `isolate <name>` / `show <name>` / `hide <name>` / `show-all` / `frame <name>` | Visibility + camera |\n| `place-pin1 <corner>` / `set-overlay <kind> <on/off>` / `sign-off` | Verification flow drivers |\n| `screenshot --out <png>` | PNG of current canvas |\n| `eval <js>` | Run a JS expression inside the webview, print the result |\n| `console -f` | Tail JS console output from the webview |\n| `detect --json` | Headless detection report on a chip-fetcher dir |\n\n## JS API surface (`window.adomChipsmith`)\n\nThe full UI is JS-shadowed for AI demo scripts + tests. From the CLI: `adom-chipsmith eval \"window.adomChipsmith.<verb>(...)\"`.\n\n```\nstate()                         // full state snapshot\nsetActiveTab(id)                // 'source' | 'measurements' | … | 'solderjet'\nrunDetection()                  // re-fetch + re-run Mode 0 → Mode 1 fallback\nrunMeasurements()               // re-run rescale negotiation\nrecomputeStatuses()             // refresh every status pill from current state\n\nplacePin1(opts)                 // {mode:'corner'|'fpMarker'|'click', corner, xyMm, shape}\nremovePin1User()\n\nsetFootprintOverlay(src, on)    // 'kicad' | 'fusion' | 'altium' | 'datasheet' | 'stock'\nsetDs2sfVisible(on)\nsetFauxPcbVisible(on)\nsetHeatsinkVisible(on)\nsetSolderJetVisible(on)\n\nreplayReveal()                  // re-runs the strobe + numbered badges\nhoverAt({x, y})                 // returns same payload as the visible HUD\n\nsignoff.gates()\nsignoff.canSignOff()\nsignoff.signOff()               // POST /api/signoff → writes JSON + bakes STEP\n```\n\n## Sign-off artifacts\n\n| File | Content |\n|---|---|\n| `<mpn>.chipsmith.json` | Full state — applied scale, detected breakdown, heatsink grid, solder-jet layout, pin-1 user-placed corner, sign-off timestamp |\n| `<mpn>.chipsmith.step` | Canonical role-tagged STEP via `service-step2glb`'s `/bake` endpoint. Future Adom tools should prefer this over the original input. |\n\n## Source\n\n`adom-inc/adom-chipsmith` (private). The wiki carries the binary + SKILL.md + this page; the public install path is fully self-service.\n\n## Adjacent skills\n\n- [`adom-step`](/wiki/apps/adom-step) — base viewer chipsmith inherits from\n- [`3d-viewer-design`](/wiki/skill/3d-viewer-design) — esp. §14 (overlays first-class) and §2 (Tier-3 inheritance)\n- [`solder-jetting`](/wiki/skill/solder-jetting) — 300 µm dome rules\n- [`electrical-engineering`](/wiki/skill/electrical-engineering) — package families, pin-1 conventions, mm + mils\n- [`pin1-indicator`](/wiki/skill/pin1-indicator) — per-package pin-1 marker conventions\n- [`chip-fetcher`](/wiki/apps/chip-fetcher) — produces the chipsmith input bundle\n",+  "author": {+    "id": "695820315b5f1e4db2fcf602",+    "name": "Kyle Bergstedt",+    "email": "[email protected]"+  },+  "visibility": {+    "public": true+  },+  "hero": null,+  "metadata": {},+  "created_at": "2026-05-28T05:29:03.217Z",+  "updated_at": "2026-05-28T05:29:03.217Z",+  "skills": []+}\ No newline at end of file