← Commit history

Specify 3rdPartyFab reference/value sizes and face-aware mechanical silkscreen policy

John Lauer ·a59b909e98 ·5d ago ·parent fce5c48
6 files changed +150−6
SKILL.md+8
@@ -62,3 +62,11 @@ The page.json `discovery_triggers` registry entry reads: ## 3rdPartyFab copper selection  Use **1 oz finished surface copper** as standard. **2 oz finished surface copper is available on request**; make that request explicit in the build specification. Read `docs/3rdpartyfab-finished-copper.md` and the record's `finishedCopper` metadata. Do not interpret these surface weights as barrel plating or inner-layer specifications, and do not reuse 1 oz trace/spacing limits for 2 oz without confirmation.++## 3rdPartyFab silkscreen authoring++Read `silkscreenPolicy` in the current vendor record (also carried by the KiCad board-setup JSON). Component names/reference designators are **0.8 mm** high; component values are **0.3 mm** high. Both are required, grouped beside their component, on the fitted face. Preserve electrical values; do not silently omit, shrink or scatter labels to make a placement check pass. Report unresolved placement explicitly.++Label mechanical holes with the screw thread size and specified length. Put bracket boundaries on the mounting face; put head/washer clearance and tool-access marks on their respective faces. These marks are documentation, not substitutes for copper/component keepouts. Check actual body, pad/mask, hole, edge, text and leader geometry on both faces, and assembled visibility. Mirror bottom lettering correctly. Never use filled drill symbols as printable artwork: disable drill marks when exporting silkscreen textures (`kicad-cli pcb export svg --drill-shape-opt 0`).++These sizes are the user's authoring policy, not a verified minimum printing capability. Do not invent fabrication stroke or spacing limits where the canonical record still says null.
docs/3rdpartyfab-silkscreen.mdadded+8
@@ -0,0 +1,8 @@+# 3rdPartyFab silkscreen authoring policy+++Read `silkscreenPolicy` in the current vendor record (also carried by the KiCad board-setup JSON). Component names/reference designators are **0.8 mm** high; component values are **0.3 mm** high. Both are required, grouped beside their component, on the fitted face. Preserve electrical values; do not silently omit, shrink or scatter labels to make a placement check pass. Report unresolved placement explicitly.++Label mechanical holes with the screw thread size and specified length. Put bracket boundaries on the mounting face; put head/washer clearance and tool-access marks on their respective faces. These marks are documentation, not substitutes for copper/component keepouts. Check actual body, pad/mask, hole, edge, text and leader geometry on both faces, and assembled visibility. Mirror bottom lettering correctly. Never use filled drill symbols as printable artwork: disable drill marks when exporting silkscreen textures (`kicad-cli pcb export svg --drill-shape-opt 0`).++These sizes are the user's authoring policy, not a verified minimum printing capability. Do not invent fabrication stroke or spacing limits where the canonical record still says null.
kicad/adom-3rdpartyfab-2L.board-setup.json+34−3
@@ -13,8 +13,7 @@     "annularRingViaMm": 0.1,     "annularRingPadMm": 0.18,     "silkMinLineWidthMm": null,-    "maskExpansionMm": 0.038,-    "silkMinTextHeightMm": 0.5+    "maskExpansionMm": 0.038   },   "notes": "Apply as Board Setup, Constraints. The matching .kicad_dru file carries the same limits as custom rules; the two are redundant on purpose so both the GUI constraints and kicad-cli DRC enforce them.",   "sources": [@@ -28,5 +27,37 @@       "dateRead": "2026-10-12",       "kind": "user-confirmed-capability"     }-  ]+  ],+  "silkscreenPolicy": {+    "schemaVersion": 1,+    "kind": "user-requested-authoring-policy",+    "source": {+      "date": "2026-10-15",+      "description": "User requested 0.8 mm component names, 0.3 mm values, screw sizes, bracket edges and screw clearances on appropriate faces"+    },+    "referenceHeightMm": 0.8,+    "valueHeightMm": 0.3,+    "referenceRequired": true,+    "valueRequired": true,+    "referenceMeaning": "reference designator, e.g. Q1, R12, J9",+    "preserveElectricalValue": true,+    "groupReferenceAndValue": true,+    "allowSilentOmissionOrShrinking": false,+    "mechanical": {+      "screwSizeRequired": true,+      "screwLengthWhenSpecified": true,+      "bracketOutlineOnMountingFace": true,+      "headWasherClearanceOnBearingFace": true,+      "toolAccessOutlineOnAccessFace": true,+      "avoidHolesMaskOpeningsAndFittedBodies": true+    },+    "validation": [+      "native text dimensions",+      "whole-board reference/value inventory",+      "both-face mask, body, hole, outline and text collision review",+      "assembled visibility and association",+      "silkscreen GLB export with drill markers disabled"+    ],+    "manufacturingLimitStatus": "Authoring requirement only; does not establish minimum printable stroke, spacing or legibility. Existing unknown silkLineWidth/silkToCopper remain null."+  } }
kicad/adom-3rdpartyfab-4L.board-setup.json+34−3
@@ -13,8 +13,7 @@     "annularRingViaMm": 0.1,     "annularRingPadMm": 0.18,     "silkMinLineWidthMm": null,-    "maskExpansionMm": 0.038,-    "silkMinTextHeightMm": 0.5+    "maskExpansionMm": 0.038   },   "notes": "Apply as Board Setup, Constraints. The matching .kicad_dru file carries the same limits as custom rules; the two are redundant on purpose so both the GUI constraints and kicad-cli DRC enforce them.",   "sources": [@@ -28,5 +27,37 @@       "dateRead": "2026-10-12",       "kind": "user-confirmed-capability"     }-  ]+  ],+  "silkscreenPolicy": {+    "schemaVersion": 1,+    "kind": "user-requested-authoring-policy",+    "source": {+      "date": "2026-10-15",+      "description": "User requested 0.8 mm component names, 0.3 mm values, screw sizes, bracket edges and screw clearances on appropriate faces"+    },+    "referenceHeightMm": 0.8,+    "valueHeightMm": 0.3,+    "referenceRequired": true,+    "valueRequired": true,+    "referenceMeaning": "reference designator, e.g. Q1, R12, J9",+    "preserveElectricalValue": true,+    "groupReferenceAndValue": true,+    "allowSilentOmissionOrShrinking": false,+    "mechanical": {+      "screwSizeRequired": true,+      "screwLengthWhenSpecified": true,+      "bracketOutlineOnMountingFace": true,+      "headWasherClearanceOnBearingFace": true,+      "toolAccessOutlineOnAccessFace": true,+      "avoidHolesMaskOpeningsAndFittedBodies": true+    },+    "validation": [+      "native text dimensions",+      "whole-board reference/value inventory",+      "both-face mask, body, hole, outline and text collision review",+      "assembled visibility and association",+      "silkscreen GLB export with drill markers disabled"+    ],+    "manufacturingLimitStatus": "Authoring requirement only; does not establish minimum printable stroke, spacing or legibility. Existing unknown silkLineWidth/silkToCopper remain null."+  } }
rules/records/adom-3rdpartyfab.json+64
@@ -94,6 +94,38 @@         "minimumBarrelPlatingMm": null,         "confirmedBy": "John Lauer",         "confirmedOn": "2026-10-12"+      },+      "silkscreenPolicy": {+        "schemaVersion": 1,+        "kind": "user-requested-authoring-policy",+        "source": {+          "date": "2026-10-15",+          "description": "User requested 0.8 mm component names, 0.3 mm values, screw sizes, bracket edges and screw clearances on appropriate faces"+        },+        "referenceHeightMm": 0.8,+        "valueHeightMm": 0.3,+        "referenceRequired": true,+        "valueRequired": true,+        "referenceMeaning": "reference designator, e.g. Q1, R12, J9",+        "preserveElectricalValue": true,+        "groupReferenceAndValue": true,+        "allowSilentOmissionOrShrinking": false,+        "mechanical": {+          "screwSizeRequired": true,+          "screwLengthWhenSpecified": true,+          "bracketOutlineOnMountingFace": true,+          "headWasherClearanceOnBearingFace": true,+          "toolAccessOutlineOnAccessFace": true,+          "avoidHolesMaskOpeningsAndFittedBodies": true+        },+        "validation": [+          "native text dimensions",+          "whole-board reference/value inventory",+          "both-face mask, body, hole, outline and text collision review",+          "assembled visibility and association",+          "silkscreen GLB export with drill markers disabled"+        ],+        "manufacturingLimitStatus": "Authoring requirement only; does not establish minimum printable stroke, spacing or legibility. Existing unknown silkLineWidth/silkToCopper remain null."       }     },     {@@ -187,6 +219,38 @@         "minimumBarrelPlatingMm": null,         "confirmedBy": "John Lauer",         "confirmedOn": "2026-10-12"+      },+      "silkscreenPolicy": {+        "schemaVersion": 1,+        "kind": "user-requested-authoring-policy",+        "source": {+          "date": "2026-10-15",+          "description": "User requested 0.8 mm component names, 0.3 mm values, screw sizes, bracket edges and screw clearances on appropriate faces"+        },+        "referenceHeightMm": 0.8,+        "valueHeightMm": 0.3,+        "referenceRequired": true,+        "valueRequired": true,+        "referenceMeaning": "reference designator, e.g. Q1, R12, J9",+        "preserveElectricalValue": true,+        "groupReferenceAndValue": true,+        "allowSilentOmissionOrShrinking": false,+        "mechanical": {+          "screwSizeRequired": true,+          "screwLengthWhenSpecified": true,+          "bracketOutlineOnMountingFace": true,+          "headWasherClearanceOnBearingFace": true,+          "toolAccessOutlineOnAccessFace": true,+          "avoidHolesMaskOpeningsAndFittedBodies": true+        },+        "validation": [+          "native text dimensions",+          "whole-board reference/value inventory",+          "both-face mask, body, hole, outline and text collision review",+          "assembled visibility and association",+          "silkscreen GLB export with drill markers disabled"+        ],+        "manufacturingLimitStatus": "Authoring requirement only; does not establish minimum printable stroke, spacing or legibility. Existing unknown silkLineWidth/silkToCopper remain null."       }     }   ]
tools/generate.py+2
@@ -441,6 +441,8 @@ def gen_kicad_board_setup(vendor, rec):         "notes": "Apply as Board Setup, Constraints. The matching .kicad_dru file carries the same limits as custom rules; the two are redundant on purpose so both the GUI constraints and kicad-cli DRC enforce them.",         "sources": rec.get("sources", []),     }+    if rec.get("silkscreenPolicy"):+        setup["silkscreenPolicy"] = rec["silkscreenPolicy"]     return json.dumps(setup, indent=2) + "\n"