← Commit history
page.json+3−29
@@ -1,6 +1,6 @@ {   "slug": "fts-105-01-l-s",-  "type": "component",+  "type": "hardware",   "kind": "component",   "version": "0.1.0",   "title": "FTS-105-01-L-S single-row programming header",@@ -74,31 +74,5 @@       "assembly": "Finished-hole and mating/crimp qualification pending"     }   },-  "because": "Exact header selected for electronic-load fan or sensor harness; catalog assets were missing.",-  "name": "@adom/fts-105-01-l-s",-  "files": [-    "README.md",-    "LICENSE",-    "THIRD_PARTY.md",-    "page.json",-    "package.json",-    "provenance.json",-    "footprint-input.json",-    "fts-105-01-l-s*",-    "symbol.html",-    "footprint.html",-    "hero.png",-    "skills/**",-    "build_model.py",-    "fts-105-01-l-s-hero.glb",-    "fts-105-01-l-s-hero.overlay.json",-    "fts-105-01-l-s.glb"-  ],-  "dependencies": {},-  "visibility": "public",-  "org": "adom",-  "author": {-    "name": "John Lauer",-    "email": "[email protected]"-  }-}\ No newline at end of file+  "because": "Exact header selected for electronic-load fan or sensor harness; catalog assets were missing."+}
review/generated/FTS-105-01-L-S_Vertical-viewer.htmladded+1
@@ -0,0 +1 @@+<!doctype html><html><head><meta charset="utf-8"><title>FTS-105-01-L-S_Vertical โ€” adom-footprint</title><style>body{margin:0;background:#0d1117;color:#e6edf3;font-family:-apple-system,sans-serif;min-height:100vh;display:flex;flex-direction:column}header{display:flex;align-items:center;gap:10px;padding:14px 22px;border-bottom:1px solid #222b38}.dot{width:10px;height:10px;border-radius:50%;background:#00e6dc;box-shadow:0 0 12px #00e6dc}.brand{font-weight:700}.brand span{color:#8b949e;font-weight:400}.wrap{flex:1;display:flex;align-items:center;justify-content:center;padding:32px}.card{background:#11161f;border:1px solid #222b38;border-radius:14px;padding:22px 26px;max-width:min(92vw,720px)}.name{font-size:22px;font-weight:700}.meta{color:#8b949e;font-size:13px;margin-top:2px}.desc{color:#aeb6c2;font-size:13px;margin-top:6px}.svgbox{margin-top:16px;border:1px solid #222b38;border-radius:10px;background:#0d1117;overflow:hidden}.svgbox svg{display:block;width:100%;height:auto;max-height:64vh}footer{text-align:center;color:#5b6675;font-size:11px;padding:10px}</style></head><body><header><span class="dot"></span><span class="brand">adom-footprint <span>ยท PCB footprint viewer</span></span></header><div class="wrap"><div class="card"><div class="name">FTS-105-01-L-S_Vertical</div><div class="meta">5 pads</div><div class="desc">Samtec single-row 1.27mm pitch, recommended 0.71mm hole; 1mm pad is Adom process candidate.</div><div class="svgbox"><svg xmlns="http://www.w3.org/2000/svg" viewBox="-2.450 -2.000 4.900 9.100" preserveAspectRatio="xMidYMid meet"><g class="adom-layer-courtyard"><rect x="-1.450" y="-1.000" width="2.900" height="7.100" fill="none" stroke="#FF26E2" stroke-width="0.05" stroke-dasharray="0.2,0.1"/></g><g class="adom-layer-fab"><rect x="-1.080" y="-0.635" width="2.160" height="6.350" fill="none" stroke="#6e7681" stroke-width="0.1"/></g><g class="adom-layer-copper"><g data-pad="1" data-shape="rect" data-size="1.000x1.000" data-mount="thru_hole"><rect x="-0.500" y="-0.500" width="1.000" height="1.000" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g><g data-pad="2" data-shape="circle" data-size="1.000x1.000" data-mount="thru_hole"><circle cx="0.000" cy="1.270" r="0.500" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g><g data-pad="3" data-shape="circle" data-size="1.000x1.000" data-mount="thru_hole"><circle cx="0.000" cy="2.540" r="0.500" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g><g data-pad="4" data-shape="circle" data-size="1.000x1.000" data-mount="thru_hole"><circle cx="0.000" cy="3.810" r="0.500" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g><g data-pad="5" data-shape="circle" data-size="1.000x1.000" data-mount="thru_hole"><circle cx="0.000" cy="5.080" r="0.500" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g></g><g class="adom-layer-heatsink"></g><g class="adom-layer-drill"><circle cx="0.000" cy="0.000" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/><circle cx="0.000" cy="1.270" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/><circle cx="0.000" cy="2.540" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/><circle cx="0.000" cy="3.810" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/><circle cx="0.000" cy="5.080" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/></g><g class="adom-layer-silk"><line x1="-1.200" y1="-0.755" x2="1.200" y2="-0.755" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/><line x1="1.200" y1="-0.755" x2="1.200" y2="5.835" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/><line x1="1.200" y1="5.835" x2="-1.200" y2="5.835" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/><line x1="-1.200" y1="5.835" x2="-1.200" y2="-0.755" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/><line x1="-1.380" y1="-0.935" x2="-0.780" y2="-0.935" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/></g><g class="adom-layer-padnum"><text x="0.000" y="0.000" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">1</text><text x="0.000" y="1.270" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">2</text><text x="0.000" y="2.540" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">3</text><text x="0.000" y="3.810" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">4</text><text x="0.000" y="5.080" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">5</text></g></svg></div></div></div><footer>rendered locally in Rust โ€” no KiCad, no service round-trip</footer></body></html>\ No newline at end of file
review/generated/FTS-105-01-L-S_Vertical.kicad_modadded+35
@@ -0,0 +1,35 @@+(footprint "FTS-105-01-L-S_Vertical"+  (version 20240108)+  (generator "adom-footprint")+  (layer "F.Cu")+  (descr "Samtec single-row 1.27mm pitch, recommended 0.71mm hole; 1mm pad is Adom process candidate.")+  (attr smd)+  (fp_rect (start -1.45 -1) (end 1.45 6.1)+    (stroke (width 0.05) (type default)) (fill none) (layer "F.CrtYd"))+  (fp_rect (start -1.08 -0.635) (end 1.08 5.715)+    (stroke (width 0.1) (type default)) (fill none) (layer "F.Fab"))+  (fp_line (start -1.2 -0.755) (end 1.2 -0.755)+    (stroke (width 0.12) (type default)) (layer "F.SilkS"))+  (fp_line (start 1.2 -0.755) (end 1.2 5.835)+    (stroke (width 0.12) (type default)) (layer "F.SilkS"))+  (fp_line (start 1.2 5.835) (end -1.2 5.835)+    (stroke (width 0.12) (type default)) (layer "F.SilkS"))+  (fp_line (start -1.2 5.835) (end -1.2 -0.755)+    (stroke (width 0.12) (type default)) (layer "F.SilkS"))+  (fp_line (start -1.38 -0.935) (end -0.78 -0.935)+    (stroke (width 0.12) (type default)) (layer "F.SilkS"))+  (fp_text reference "REF**" (at 0 -2)+    (layer "F.SilkS") (effects (font (size 1 1) (thickness 0.15))))+  (fp_text value "FTS-105-01-L-S_Vertical" (at 0 7.1)+    (layer "F.Fab") (effects (font (size 1 1) (thickness 0.15))))+  (pad "1" thru_hole rect (at 0 0) (size 1 1) (drill 0.71)+    (layers "*.Cu" "*.Mask"))+  (pad "2" thru_hole circle (at 0 1.27) (size 1 1) (drill 0.71)+    (layers "*.Cu" "*.Mask"))+  (pad "3" thru_hole circle (at 0 2.54) (size 1 1) (drill 0.71)+    (layers "*.Cu" "*.Mask"))+  (pad "4" thru_hole circle (at 0 3.81) (size 1 1) (drill 0.71)+    (layers "*.Cu" "*.Mask"))+  (pad "5" thru_hole circle (at 0 5.08) (size 1 1) (drill 0.71)+    (layers "*.Cu" "*.Mask"))+)
review/generated/FTS-105-01-L-S_Vertical.svgadded+1
@@ -0,0 +1 @@+<svg xmlns="http://www.w3.org/2000/svg" viewBox="-2.450 -2.000 4.900 9.100" preserveAspectRatio="xMidYMid meet"><g class="adom-layer-courtyard"><rect x="-1.450" y="-1.000" width="2.900" height="7.100" fill="none" stroke="#FF26E2" stroke-width="0.05" stroke-dasharray="0.2,0.1"/></g><g class="adom-layer-fab"><rect x="-1.080" y="-0.635" width="2.160" height="6.350" fill="none" stroke="#6e7681" stroke-width="0.1"/></g><g class="adom-layer-copper"><g data-pad="1" data-shape="rect" data-size="1.000x1.000" data-mount="thru_hole"><rect x="-0.500" y="-0.500" width="1.000" height="1.000" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g><g data-pad="2" data-shape="circle" data-size="1.000x1.000" data-mount="thru_hole"><circle cx="0.000" cy="1.270" r="0.500" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g><g data-pad="3" data-shape="circle" data-size="1.000x1.000" data-mount="thru_hole"><circle cx="0.000" cy="2.540" r="0.500" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g><g data-pad="4" data-shape="circle" data-size="1.000x1.000" data-mount="thru_hole"><circle cx="0.000" cy="3.810" r="0.500" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g><g data-pad="5" data-shape="circle" data-size="1.000x1.000" data-mount="thru_hole"><circle cx="0.000" cy="5.080" r="0.500" fill="#C83434" stroke="#ef5350" stroke-width="0.04"/></g></g><g class="adom-layer-heatsink"></g><g class="adom-layer-drill"><circle cx="0.000" cy="0.000" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/><circle cx="0.000" cy="1.270" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/><circle cx="0.000" cy="2.540" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/><circle cx="0.000" cy="3.810" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/><circle cx="0.000" cy="5.080" r="0.355" fill="#0d1117" stroke="#666" stroke-width="0.05"/></g><g class="adom-layer-silk"><line x1="-1.200" y1="-0.755" x2="1.200" y2="-0.755" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/><line x1="1.200" y1="-0.755" x2="1.200" y2="5.835" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/><line x1="1.200" y1="5.835" x2="-1.200" y2="5.835" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/><line x1="-1.200" y1="5.835" x2="-1.200" y2="-0.755" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/><line x1="-1.380" y1="-0.935" x2="-0.780" y2="-0.935" stroke="#00cccc" stroke-width="0.12" stroke-linecap="round"/></g><g class="adom-layer-padnum"><text x="0.000" y="0.000" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">1</text><text x="0.000" y="1.270" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">2</text><text x="0.000" y="2.540" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">3</text><text x="0.000" y="3.810" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">4</text><text x="0.000" y="5.080" text-anchor="middle" dominant-baseline="central" font-size="0.420" fill="#fff" font-family="sans-serif" style="pointer-events:none">5</text></g></svg>\ No newline at end of file
review/hero-reference.pngadded
⋯ 1 unchanged line ⋯
review/lbr-lint.txtadded+6
@@ -0,0 +1,6 @@+OK: Lint passed with 0 error(s), 0 warning(s)+{+  "passed": true,+  "errors": [],+  "warnings": []+}
review/lbr-validate.txtadded+1
@@ -0,0 +1 @@+OK: fts-105-01-l-s.lbr is a valid EAGLE .lbr with complete deviceset
review/package-lint.jsonadded+41
@@ -0,0 +1,41 @@+{+  "status": "ok",+  "data": {+    "errors": [],+    "warnings": [+      "component has no board/layout (.kicad_pcb or .brd): nobody can reproduce or re-fab the design from this page.",+      "component has no schematic (.kicad_sch or .sch): the design can't be reviewed or reused, only the symbol/footprint can.",+      "component has no footprint/symbol metadata (<name>_footprint.json / <name>_symbol.json): per-pad wire-attach data rides this, so importers can't place it programmatically.",+      "component is missing distributor number(s): mouser, lcsc (component.distributor_links). Sourcing tools (BOM panels, kicad-library-manager, parts search) key on these; add each real distributor part number, or set a distributor to false ONLY when the part is genuinely not carried there (e.g. \"mouser\": false)",+      "DEPS_UNDECLARED: 1 imported module(s) are not declared in dependencies: OCP. Declare each as an owner-qualified dependency (<owner>/<slug>) or remove the import. (Relative paths and built-ins are ignored; globally-provided modules may be false positives.)"+    ],+    "fixed": []+  },+  "hints": [+    {+      "level": "warn",+      "code": "LINT",+      "message": "component has no board/layout (.kicad_pcb or .brd): nobody can reproduce or re-fab the design from this page."+    },+    {+      "level": "warn",+      "code": "LINT",+      "message": "component has no schematic (.kicad_sch or .sch): the design can't be reviewed or reused, only the symbol/footprint can."+    },+    {+      "level": "warn",+      "code": "LINT",+      "message": "component has no footprint/symbol metadata (<name>_footprint.json / <name>_symbol.json): per-pad wire-attach data rides this, so importers can't place it programmatically."+    },+    {+      "level": "warn",+      "code": "LINT",+      "message": "component is missing distributor number(s): mouser, lcsc (component.distributor_links). Sourcing tools (BOM panels, kicad-library-manager, parts search) key on these; add each real distributor part number, or set a distributor to false ONLY when the part is genuinely not carried there (e.g. \"mouser\": false)"+    },+    {+      "level": "warn",+      "code": "LINT",+      "message": "DEPS_UNDECLARED: 1 imported module(s) are not declared in dependencies: OCP. Declare each as an owner-qualified dependency (<owner>/<slug>) or remove the import. (Relative paths and built-ins are ignored; globally-provided modules may be false positives.)"+    }+  ]+}
review/publish.jsonadded+113
@@ -0,0 +1,113 @@+{+  "status": "ok",+  "data": {+    "published": "adom/fts-105-01-l-s",+    "version": "0.1.0",+    "sha256": "sha256-282de2808d6f43b3ccc2fb4c0fcc4cf8d84f873705651887139d074ed004f91f",+    "visibility": "public",+    "url": "/adom/fts-105-01-l-s",+    "install": "adom-wiki pkg install adom/fts-105-01-l-s"+  },+  "hints": [+    {+      "level": "warn",+      "code": "PAGE_JSON_IGNORED",+      "message": "The tarball ships page.json carrying hero, but pkg publish does not read page.json: those fields did nothing here. Only the package.json manifest counts.",+      "action": "Move the fields into package.json (page.json is only read on page-repo pushes).",+      "data": {+        "path": "page.json",+        "tarball_version": "0.1.0",+        "publish_version": "0.1.0",+        "fields": [+          "hero"+        ]+      }+    },+    {+      "level": "warn",+      "code": "MEDIA_IN_TARBALL",+      "message": "hero.png (18 KB): page asset(s), not install payload -- 10% of this tarball is media every installer downloads on every update. Heroes and screenshots are served from the page repo (page.json), not the install tarball.",+      "action": "Remove them from the packed file set and republish. They stay on the page: the page repo keeps its existing copy when a new tarball stops shipping it. Only a brand-new page's FIRST publish needs the hero in the tarball (it materializes into the page repo once).",+      "data": {+        "files": [+          {+            "path": "hero.png",+            "bytes": 18003+          }+        ],+        "media_bytes": 18003,+        "tarball_bytes": 171940+      }+    },+    {+      "level": "info",+      "code": "NO_DISCOVERY_TRIGGERS",+      "message": "No discovery triggers are set, so AI agents are less likely to surface this component.",+      "action": "Add 'discovery_triggers' (phrases that should surface this package) to the manifest."+    },+    {+      "level": "info",+      "code": "WORKSPACE_FEATURE",+      "message": "This page can ship its author's Hydrogen bench: commit hydrogen/workspace.json (the pane layout with apps referenced by wiki page) and readers of a clone or fork open the same layout, apps installed and serving, with one command. Hydrogen Cloud lists it under Project workspaces with an Apply button.",+      "action": "From the container where the bench is open: adom-cli hydrogen workspace export --out hydrogen/workspace.json, then adom-wiki repo push adom/fts-105-01-l-s -m \"bench\" --files hydrogen/workspace.json. Readers: adom-cli hydrogen workspace apply adom/fts-105-01-l-s. Details: the wiki-workspaces skill.",+      "data": {+        "path": "hydrogen/workspace.json",+        "apply": "adom-cli hydrogen workspace apply adom/fts-105-01-l-s"+      }+    },+    {+      "level": "warn",+      "code": "DISTRIBUTOR_NUMBERS",+      "message": "No mouser, lcsc part numbers on this component. Buyers and the parts widgets read component.distributor_links; a part with no numbers cannot be ordered from the page.",+      "action": "Add to package.json: \"component\": { \"distributor_links\": { \"mouser\": \"<Mouser part #>\", \"digikey\": \"<DigiKey part #>\", \"lcsc\": \"<LCSC C-number>\" } }. Use false for a distributor that genuinely does not carry the part (e.g. \"lcsc\": false) so the warning stops.",+      "data": {+        "missing": [+          "mouser",+          "lcsc"+        ]+      }+    },+    {+      "level": "warn",+      "code": "LINT",+      "message": "component has no board/layout (.kicad_pcb or .brd): nobody can reproduce or re-fab the design from this page."+    },+    {+      "level": "warn",+      "code": "LINT",+      "message": "component has no schematic (.kicad_sch or .sch): the design can't be reviewed or reused, only the symbol/footprint can."+    },+    {+      "level": "warn",+      "code": "LINT",+      "message": "component has no footprint/symbol metadata (<name>_footprint.json / <name>_symbol.json): per-pad wire-attach data rides this, so importers can't place it programmatically."+    },+    {+      "level": "warn",+      "code": "LINT",+      "message": "component is missing distributor number(s): mouser, lcsc (component.distributor_links). Sourcing tools (BOM panels, kicad-library-manager, parts search) key on these; add each real distributor part number, or set a distributor to false ONLY when the part is genuinely not carried there (e.g. \"mouser\": false)"+    },+    {+      "level": "warn",+      "code": "LINT",+      "message": "DEPS_UNDECLARED: 1 imported module(s) are not declared in dependencies: OCP. Declare each as an owner-qualified dependency (<owner>/<slug>) or remove the import. (Relative paths and built-ins are ignored; globally-provided modules may be false positives.)"+    },+    {+      "level": "info",+      "code": "PUBLISH_LAYERS",+      "message": "published the package layer (the install payload: manifest + scripts + bundled skills). The page git repo (Files tab) is a SEPARATE layer and is not synced by publish.",+      "action": "host source by pushing files into the page repo (never a source tarball); ship downloadable per-platform binaries with `adom-wiki release upload <ref> <ver> <file> --platform <os>`"+    },+    {+      "level": "info",+      "code": "SKILL_LAYOUT",+      "message": "shipped 1 user skill(s) in the install tarball",+      "action": "build/debug/test skills go in dev-skills/, app->wiki publish skills in publish-skills/ -- both are auto-excluded from the tarball and belong in the source repo (repo push), so you don't ship them to every install",+      "data": {+        "user": 1,+        "dev": 0,+        "publish": 0+      }+    }+  ]+}
review/symbol-native-check.txtadded+1
@@ -0,0 +1 @@+OK: fts-105-01-l-s.kicad_sym validated โ€” 5 pins, 0 unique pin names