@hybridlabor-api/bdb-hardware-pcb 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (192) hide show
  1. package/README.md +116 -0
  2. package/config/mcp/antigravity.json +22 -0
  3. package/config/mcp/claude.json +22 -0
  4. package/config/mcp/codex.toml +25 -0
  5. package/docs/adr/ADR-001-KICAD-OPENSCAD-MCP-STRATEGY.md +334 -0
  6. package/docs/review_documentation.md +121 -0
  7. package/installer.js +358 -0
  8. package/mcp_servers/kicad-mcp-server/.env.example +22 -0
  9. package/mcp_servers/kicad-mcp-server/.github/workflows/ci.yml +36 -0
  10. package/mcp_servers/kicad-mcp-server/CLAUDE.md +487 -0
  11. package/mcp_servers/kicad-mcp-server/README.md +316 -0
  12. package/mcp_servers/kicad-mcp-server/docs/DEVICE_TREE.md +416 -0
  13. package/mcp_servers/kicad-mcp-server/docs/INSTALLATION.md +332 -0
  14. package/mcp_servers/kicad-mcp-server/docs/PIN_ANALYSIS.md +332 -0
  15. package/mcp_servers/kicad-mcp-server/docs/README.md +240 -0
  16. package/mcp_servers/kicad-mcp-server/docs/TESTING.md +613 -0
  17. package/mcp_servers/kicad-mcp-server/docs/VALIDATION.md +268 -0
  18. package/mcp_servers/kicad-mcp-server/pyproject.toml +96 -0
  19. package/mcp_servers/kicad-mcp-server/requirements-dev.txt +16 -0
  20. package/mcp_servers/kicad-mcp-server/requirements-test.txt +24 -0
  21. package/mcp_servers/kicad-mcp-server/requirements.txt +13 -0
  22. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__init__.py +3 -0
  23. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/__main__.py +17 -0
  24. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/config.py +46 -0
  25. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/__init__.py +1 -0
  26. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/models/types.py +87 -0
  27. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/__init__.py +1 -0
  28. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/netlist_parser.py +234 -0
  29. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser.py +375 -0
  30. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/pcb_parser_kicad.py +327 -0
  31. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/parsers/schematic_parser.py +902 -0
  32. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/server.py +71 -0
  33. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/__init__.py +1 -0
  34. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/arduino/connectivity_test.cpp.j2 +189 -0
  35. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/atmega.dts.j2 +77 -0
  36. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/esp32.dts.j2 +77 -0
  37. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/nrf52.dts.j2 +77 -0
  38. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/device_tree/stm32f4.dts.j2 +89 -0
  39. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/esp_idf/test_suite.c.j2 +340 -0
  40. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/pytest/test_connectivity.py.j2 +147 -0
  41. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/st_hal/hal_test.c.j2 +313 -0
  42. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_gpio_test.py.j2 +99 -0
  43. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_i2c_test.py.j2 +117 -0
  44. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_pinmux_test.py.j2 +43 -0
  45. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/pytest_spi_test.py.j2 +94 -0
  46. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_gpio_test.c.j2 +113 -0
  47. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_i2c_test.c.j2 +101 -0
  48. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/tests/unity_spi_test.c.j2 +94 -0
  49. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/templates/unittest/test_schematic.py.j2 +172 -0
  50. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/__init__.py +36 -0
  51. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/device_tree.py +1187 -0
  52. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/hierarchical_analysis.py +211 -0
  53. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/netlist.py +320 -0
  54. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/parts_registry.py +142 -0
  55. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb.py +955 -0
  56. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pcb_layout.py +308 -0
  57. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/pin_analysis.py +765 -0
  58. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/project.py +196 -0
  59. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic.py +319 -0
  60. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_editor.py +674 -0
  61. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/schematic_search.py +158 -0
  62. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/validation.py +866 -0
  63. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/tools/visualization.py +225 -0
  64. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/__init__.py +1 -0
  65. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/file_handlers.py +65 -0
  66. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_cli.py +103 -0
  67. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/kicad_version.py +103 -0
  68. package/mcp_servers/kicad-mcp-server/src/kicad_mcp_server/utils/parts_registry.py +197 -0
  69. package/mcp_servers/kicad-mcp-server/tests/__init__.py +1 -0
  70. package/mcp_servers/kicad-mcp-server/tests/examples/ESP32S3_TEST.md +219 -0
  71. package/mcp_servers/kicad-mcp-server/tests/fixtures/README.md +65 -0
  72. package/mcp_servers/kicad-mcp-server/tests/fixtures/__init__.py +1 -0
  73. package/mcp_servers/kicad-mcp-server/tests/fixtures/example_pcb.kicad_pcb +177 -0
  74. package/mcp_servers/kicad-mcp-server/tests/fixtures/example_schematic.kicad_sch +145 -0
  75. package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/child.kicad_sch +24 -0
  76. package/mcp_servers/kicad-mcp-server/tests/fixtures/hier/root.kicad_sch +38 -0
  77. package/mcp_servers/kicad-mcp-server/tests/test_tools/__init__.py +1 -0
  78. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_hierarchical_labels.py +195 -0
  79. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_kicad_cli.py +116 -0
  80. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_netlist_cache_path.py +29 -0
  81. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic.py +189 -0
  82. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_schematic_hierarchy.py +69 -0
  83. package/mcp_servers/kicad-mcp-server/tests/test_tools/test_visualization.py +136 -0
  84. package/mcp_servers/kicad-mcp-server/uv.lock +2873 -0
  85. package/mcp_servers/openscad-mcp-server/.dockerignore +9 -0
  86. package/mcp_servers/openscad-mcp-server/.github/workflows/test.yml +40 -0
  87. package/mcp_servers/openscad-mcp-server/Dockerfile +29 -0
  88. package/mcp_servers/openscad-mcp-server/LICENSE +21 -0
  89. package/mcp_servers/openscad-mcp-server/README.md +154 -0
  90. package/mcp_servers/openscad-mcp-server/docs/audit.md +56 -0
  91. package/mcp_servers/openscad-mcp-server/docs/docker.md +66 -0
  92. package/mcp_servers/openscad-mcp-server/docs/issue-followup.md +19 -0
  93. package/mcp_servers/openscad-mcp-server/docs/jetson.md +17 -0
  94. package/mcp_servers/openscad-mcp-server/glama.json +4 -0
  95. package/mcp_servers/openscad-mcp-server/legacy/README.md +15 -0
  96. package/mcp_servers/openscad-mcp-server/legacy/README.original.md +294 -0
  97. package/mcp_servers/openscad-mcp-server/legacy/implementation_plan.md +100 -0
  98. package/mcp_servers/openscad-mcp-server/legacy/old/download_sam2_checkpoint.py +115 -0
  99. package/mcp_servers/openscad-mcp-server/legacy/old/src/ai/sam_segmentation.py +209 -0
  100. package/mcp_servers/openscad-mcp-server/legacy/old/src/models/threestudio_generator.py +231 -0
  101. package/mcp_servers/openscad-mcp-server/legacy/old/src/workflow/image_to_model_pipeline.py +260 -0
  102. package/mcp_servers/openscad-mcp-server/legacy/old/test_sam2_segmentation.py +96 -0
  103. package/mcp_servers/openscad-mcp-server/legacy/requirements.txt +57 -0
  104. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/README.md +39 -0
  105. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/ai-driven-code-generation.md +122 -0
  106. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/decisions/export-formats.md +76 -0
  107. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/ai/ai_service.py.md +51 -0
  108. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/main.py.md +63 -0
  109. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/models/code_generator.py.md +63 -0
  110. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/files/src/nlp/parameter_extractor.py.md +63 -0
  111. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/ai/natural-language-processing.md +78 -0
  112. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/nlp/parameter-extraction.md +173 -0
  113. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/export-formats.md +91 -0
  114. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/openscad-basics.md +66 -0
  115. package/mcp_servers/openscad-mcp-server/legacy/rtfmd/knowledge/openscad/primitive-testing.md +79 -0
  116. package/mcp_servers/openscad-mcp-server/legacy/src/__init__.py +0 -0
  117. package/mcp_servers/openscad-mcp-server/legacy/src/ai/ai_service.py +257 -0
  118. package/mcp_servers/openscad-mcp-server/legacy/src/ai/gemini_api.py +161 -0
  119. package/mcp_servers/openscad-mcp-server/legacy/src/ai/venice_api.py +203 -0
  120. package/mcp_servers/openscad-mcp-server/legacy/src/config.py +121 -0
  121. package/mcp_servers/openscad-mcp-server/legacy/src/main.py +1456 -0
  122. package/mcp_servers/openscad-mcp-server/legacy/src/main.py.new +404 -0
  123. package/mcp_servers/openscad-mcp-server/legacy/src/main_remote.py +401 -0
  124. package/mcp_servers/openscad-mcp-server/legacy/src/models/__init__.py +0 -0
  125. package/mcp_servers/openscad-mcp-server/legacy/src/models/code_generator.py +321 -0
  126. package/mcp_servers/openscad-mcp-server/legacy/src/models/cuda_mvs.py +209 -0
  127. package/mcp_servers/openscad-mcp-server/legacy/src/models/scad_templates/basic_shapes.scad +144 -0
  128. package/mcp_servers/openscad-mcp-server/legacy/src/nlp/__init__.py +0 -0
  129. package/mcp_servers/openscad-mcp-server/legacy/src/nlp/parameter_extractor.py +388 -0
  130. package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/__init__.py +0 -0
  131. package/mcp_servers/openscad-mcp-server/legacy/src/openscad_wrapper/wrapper.py +418 -0
  132. package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/__init__.py +1 -0
  133. package/mcp_servers/openscad-mcp-server/legacy/src/printer_discovery/printer_discovery.py +471 -0
  134. package/mcp_servers/openscad-mcp-server/legacy/src/remote/connection_manager.py +537 -0
  135. package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_client.py +435 -0
  136. package/mcp_servers/openscad-mcp-server/legacy/src/remote/cuda_mvs_server.py +787 -0
  137. package/mcp_servers/openscad-mcp-server/legacy/src/remote/error_handling.py +415 -0
  138. package/mcp_servers/openscad-mcp-server/legacy/src/testing/__init__.py +0 -0
  139. package/mcp_servers/openscad-mcp-server/legacy/src/testing/primitive_tester.py +203 -0
  140. package/mcp_servers/openscad-mcp-server/legacy/src/testing/test_primitives.py +98 -0
  141. package/mcp_servers/openscad-mcp-server/legacy/src/utils/__init__.py +1 -0
  142. package/mcp_servers/openscad-mcp-server/legacy/src/utils/cad_exporter.py +241 -0
  143. package/mcp_servers/openscad-mcp-server/legacy/src/utils/format_validator.py +206 -0
  144. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_exporter.py +140 -0
  145. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_repair.py +91 -0
  146. package/mcp_servers/openscad-mcp-server/legacy/src/utils/stl_validator.py +123 -0
  147. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/__init__.py +0 -0
  148. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/headless_renderer.py +52 -0
  149. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/renderer.py +177 -0
  150. package/mcp_servers/openscad-mcp-server/legacy/src/visualization/web_interface.py +639 -0
  151. package/mcp_servers/openscad-mcp-server/legacy/src/workflow/image_approval.py +148 -0
  152. package/mcp_servers/openscad-mcp-server/legacy/src/workflow/multi_view_to_model_pipeline.py +338 -0
  153. package/mcp_servers/openscad-mcp-server/legacy/test_complete_workflow.py +374 -0
  154. package/mcp_servers/openscad-mcp-server/legacy/test_cuda_mvs.py +191 -0
  155. package/mcp_servers/openscad-mcp-server/legacy/test_gemini_api.py +168 -0
  156. package/mcp_servers/openscad-mcp-server/legacy/test_image_approval.py +192 -0
  157. package/mcp_servers/openscad-mcp-server/legacy/test_image_approval_workflow.py +251 -0
  158. package/mcp_servers/openscad-mcp-server/legacy/test_image_to_model_pipeline.py +145 -0
  159. package/mcp_servers/openscad-mcp-server/legacy/test_model_selection.py +41 -0
  160. package/mcp_servers/openscad-mcp-server/legacy/test_multi_view_pipeline.py +290 -0
  161. package/mcp_servers/openscad-mcp-server/legacy/test_primitives.sh +13 -0
  162. package/mcp_servers/openscad-mcp-server/legacy/test_rabbit_direct.py +71 -0
  163. package/mcp_servers/openscad-mcp-server/legacy/test_remote_cuda_mvs.py +283 -0
  164. package/mcp_servers/openscad-mcp-server/legacy/test_venice_example.py +69 -0
  165. package/mcp_servers/openscad-mcp-server/pyproject.toml +33 -0
  166. package/mcp_servers/openscad-mcp-server/requirements.txt +2 -0
  167. package/mcp_servers/openscad-mcp-server/scad/simple_cube.scad +2 -0
  168. package/mcp_servers/openscad-mcp-server/scripts/test_docker.py +220 -0
  169. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__init__.py +3 -0
  170. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/__main__.py +3 -0
  171. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/engine.py +94 -0
  172. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/geometry.py +242 -0
  173. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/server.py +245 -0
  174. package/mcp_servers/openscad-mcp-server/src/openscad_mcp/service.py +190 -0
  175. package/mcp_servers/openscad-mcp-server/tests/conftest.py +17 -0
  176. package/mcp_servers/openscad-mcp-server/tests/test_engine.py +37 -0
  177. package/mcp_servers/openscad-mcp-server/tests/test_geometry.py +106 -0
  178. package/mcp_servers/openscad-mcp-server/tests/test_integration.py +172 -0
  179. package/mcp_servers/openscad-mcp-server/tests/test_transports.py +314 -0
  180. package/mcp_servers/openscad-mcp-server/uv.lock +1123 -0
  181. package/package.json +44 -0
  182. package/scripts/install_mcps.sh +86 -0
  183. package/scripts/openscad_wrapper.sh +62 -0
  184. package/scripts/run_kicad_mcp.sh +25 -0
  185. package/scripts/run_openscad_mcp.sh +41 -0
  186. package/scripts/test_mcp_connection.py +626 -0
  187. package/scripts/test_mcp_connection.sh +168 -0
  188. package/skills/code-first-hardware-design/SKILL.md +260 -0
  189. package/skills/pcb-constraint-definition/SKILL.md +236 -0
  190. package/skills/pcb-layout-routing-automation/SKILL.md +153 -0
  191. package/skills/pcb-validation-dfm-signoff/SKILL.md +194 -0
  192. package/skills/schematic-datasheet-analysis/SKILL.md +202 -0
@@ -0,0 +1,153 @@
1
+ ---
2
+ name: pcb-layout-routing-automation
3
+ description: "Floorplanning, component placement rules, high-speed differential pair routing, return path continuity, thermal via arrays, and keepout enforcement for KiCad PCB layouts. Use when placing footprints, routing traces, creating ground planes, or managing thermal/RF keepouts."
4
+ category: engineering-hardware
5
+ compatibility: "Python 3.10+, kicad-cli 8+, mcp:kicad"
6
+ ---
7
+
8
+ # PCB Layout & Routing Automation
9
+
10
+ ## 1. Overview and Core Philosophy
11
+
12
+ PCB layout is applied electromagnetic physics and thermal engineering. A schematic guarantees logical connectivity; layout determines whether the physical circuit functions, radiates excessive electromagnetic interference (EMI), overheats, or fails in manufacturing.
13
+
14
+ This skill directs automated agents through spatial floorplanning, critical trace routing, return path management, thermal copper geometry, and mechanical keepout enforcement.
15
+
16
+ ---
17
+
18
+ ## 2. Floorplanning & Component Placement Hierarchy
19
+
20
+ Component placement dictates $90\%$ of routing success. Random or purely geometric placement is strictly prohibited. The agent must place components following a strict signal flow and thermal hierarchy:
21
+
22
+ ```
23
+ [External Connectors (USB, Barrel, Headers)]
24
+ | (< 2.0mm)
25
+ v
26
+ [TVS / ESD Protection Diodes] --> Lowest inductance path to Chassis/GND
27
+ |
28
+ v
29
+ [Power Conversion (Buck / LDO)] --> Perimeter placement with thermal copper
30
+ |
31
+ v
32
+ [Core Microcontroller / FPGA] --> Central placement, decoupling < 1.5mm
33
+ |
34
+ +---> [High-Speed Busses (USB, SPI, RAM)] --> Direct point-to-point
35
+ |
36
+ +---> [Sensitive Analog Front-End (ADC)] --> Isolated quiet zone
37
+ ```
38
+
39
+ ### 2.1 Placement Rules of Engagement
40
+ 1. **Decoupling Capacitor Placement Rule**:
41
+ - Every bypass capacitor ($100\text{nF}$) must be placed on the same layer as the IC, with its pad located within **$1.5\text{mm}$** of the power pin.
42
+ - Trace sequence: `Power Rail Via -> Capacitor Pad -> IC Power Pin`. The capacitor must sit directly in the high-frequency current path.
43
+ 2. **Crystal Oscillator Placement**:
44
+ - Crystals ($12\text{MHz}$, $16\text{MHz}$, $32.768\text{kHz}$) and their load capacitors must be placed within **$3.0\text{mm}$** of the MCU oscillator pins.
45
+ - Surround oscillator traces with a ground guard ring; do not route any other signals under or adjacent to the oscillator.
46
+ 3. **Switch-Mode Power Supply (SMPS) Loop Minimization**:
47
+ - The high-frequency switching loop formed by the input capacitor ($C_{in}$), switching FETs, inductor ($L$), and catch diode must have minimal enclosed loop area to prevent magnetic dipole radiation:
48
+ $$V_{radiated} \propto \frac{dI}{dt} \cdot \text{Loop Area}$$
49
+ 4. **Thermal Partitioning**:
50
+ - Power dissipating devices ($P_D > 0.5\text{W}$) must be positioned at least $10\text{mm}$ away from temperature-sensitive components (voltage references, analog sensors, crystal oscillators).
51
+
52
+ ---
53
+
54
+ ## 3. High-Speed Routing & Return Path Physics
55
+
56
+ ### 3.1 Return Path Continuity (The Fundamental Law of High Speed)
57
+ At frequencies above $100\text{kHz}$, return current ceases following the path of lowest DC resistance and instead follows the **path of lowest loop inductance**, traveling directly beneath the signal trace in the adjacent ground plane:
58
+
59
+ ```
60
+ Layer 1 (Signal Trace): =======================================>
61
+ | H = 0.2mm (Prepreg)
62
+ Layer 2 (Solid GND Plane): <--------------------------------------- (Return Current Mirror)
63
+ ```
64
+
65
+ #### Plane Split Prohibition
66
+ - **STRICT PROHIBITION**: A signal trace must **NEVER** cross a split, slot, or void in its underlying reference plane.
67
+ - Crossing a split forces return current to divert around the perimeter of the void, creating a large loop antenna that radiates EMI and induces massive inductive ringing:
68
+ $$\Delta V = L_{loop} \frac{dI}{dt}$$
69
+ - If a high-speed signal must change layers (e.g., Layer 1 to Layer 4 in a 4-layer board), a **Ground Return Stitching Via** must be placed within **$0.5\text{mm}$** of the signal via to bridge the return current between reference planes.
70
+
71
+ ### 3.2 Differential Pair Routing (USB 90Ω, Ethernet 100Ω)
72
+ 1. **Symmetric Coupling**:
73
+ - Maintain constant trace width ($W$) and edge-to-edge separation ($S$) across the entire run.
74
+ - Do not separate differential traces around vias or components; neck down both traces symmetrically if passing through tight BGA ball grids.
75
+ 2. **Phase / Skew Matching**:
76
+ - The two complementary conductors ($D+$ and $D-$) must arrive at the receiver simultaneously.
77
+ - Length difference between legs must satisfy:
78
+ $$\Delta L \le 0.1\text{mm} \quad (\approx 0.6\text{ps skew in FR-4})$$
79
+ - Implement small serpentine delay bumps located as close as possible to the point where the length mismatch originated (e.g., outside a bend).
80
+ 3. **Corner Geometry**:
81
+ - All trace bends must use **$45^\circ$ chamfers** or smooth circular arcs.
82
+ - **$90^\circ$ corners are strictly prohibited**: they create localized capacitive impedance dips ($Z_0$ drops by $10-15\%$) and act as acid traps during PCB chemical etching.
83
+
84
+ ---
85
+
86
+ ## 4. Thermal Management & Copper Plane Architecture
87
+
88
+ ### 4.1 Thermal Via Arrays
89
+ For components with exposed thermal pads (QFN, DFN, PowerSO):
90
+ - Drop an array of thermal vias directly inside the thermal pad footprint.
91
+ - Via drill diameter: $0.3\text{mm}$ (avoids solder wicking during reflow).
92
+ - Via pitch: $0.6\text{mm}$ grid spacing.
93
+ - Thermal vias must connect directly to internal and bottom ground copper planes to distribute heat.
94
+
95
+ ### 4.2 Thermal Relief on Plane Connections
96
+ - Pads directly connected to large copper planes must have **thermal relief spokes** (typically 4 orthogonal spokes, spoke width $0.35\text{mm} - 0.50\text{mm}$).
97
+ - Direct solid pad-to-plane connections without thermal relief sink excessive heat away from soldering irons and reflow ovens, resulting in cold solder joints.
98
+ - *Exception*: Small surface mount decoupling capacitors may use direct solid connections to minimize parasitic inductance, provided solder paste volumes are calibrated.
99
+
100
+ ### 4.3 Perimeter Stitching Via Fencing
101
+ - Board edges emit fringing electromagnetic fields.
102
+ - Along the entire perimeter of the PCB ground plane, place a continuous row of ground stitching vias spaced at:
103
+ $$d_{via} \le \frac{\lambda_{min}}{20}$$
104
+ For a $2.4\text{GHz}$ system ($\lambda \approx 125\text{mm}$), via spacing $d \le 3.0\text{mm}$.
105
+
106
+ ---
107
+
108
+ ## 5. Keepout Envelopes & Safety Isolation
109
+
110
+ ### 5.1 RF Antenna Keepouts
111
+ - For onboard PCB trace antennas (meandered inverted-F) or ceramic chip antennas:
112
+ - Maintain a complete **No-Copper Keepout** across **ALL LAYERS** (Top, Bottom, and all Internal Planes) directly beneath and around the antenna element.
113
+ - No ground pours, traces, or mounting screws may enter the manufacturer's specified antenna clearance zone (typically $\ge 5.0\text{mm}$).
114
+
115
+ ### 5.2 High-Voltage Creepage and Clearance (IEC 62368)
116
+ - For circuits interfacing with AC mains ($120\text{V} / 230\text{V}$):
117
+ - Minimum clearance through air: $\ge 3.0\text{mm}$.
118
+ - Minimum creepage along surface: $\ge 5.0\text{mm}$.
119
+ - Milled physical isolation slots ($1.5\text{mm}$ wide) must be cut into the board dielectric (`Edge.Cuts`) between primary and secondary domains to prevent surface carbon tracking.
120
+
121
+ ---
122
+
123
+ ## 6. Layout Automation via Konnect MCP and Freerouting
124
+
125
+ When executing automated layout in the AOS pipeline:
126
+
127
+ 1. **Initialize Layout Session via Konnect**:
128
+ - Activate the `pcb_layout` and `pcb_routing` toolsets in Konnect.
129
+ - Place footprints according to the floorplanning hierarchy.
130
+ 2. **Export Specctra Design (`.dsn`)**:
131
+ - Emit the board geometry, netclasses, and keepouts to Specctra format:
132
+ ```bash
133
+ kicad-cli pcb export dsn -o board.dsn board.kicad_pcb
134
+ ```
135
+ 3. **Execute Routing Engine**:
136
+ - Run Freerouting headless:
137
+ ```bash
138
+ java -jar freerouting.jar -de board.dsn -do board.ses
139
+ ```
140
+ 4. **Import Session (`.ses`) and Run Ground Pour**:
141
+ - Import the routed session back into `.kicad_pcb`.
142
+ - Re-fill all copper zones (`B` in KiCad or via `kicad-cli`).
143
+
144
+ ---
145
+
146
+ ## 7. Negative Constraints (Anti-Slop Directives)
147
+
148
+ - **DO NOT** use $90^\circ$ trace bends anywhere on the PCB. Always use $45^\circ$ miters or circular arcs.
149
+ - **DO NOT** route high-speed digital or analog traces across splits in underlying reference planes.
150
+ - **DO NOT** place decoupling capacitors farther than $1.5\text{mm}$ from the target IC power pin.
151
+ - **DO NOT** omit ground return stitching vias when high-speed signals transition layers.
152
+ - **DO NOT** route copper or traces within the specified keepout zone of an RF antenna.
153
+ - **DO NOT** connect component pads to solid copper planes without thermal relief spokes, unless explicitly designated as high-current low-inductance nodes.
@@ -0,0 +1,194 @@
1
+ ---
2
+ name: pcb-validation-dfm-signoff
3
+ description: "Automated DRC/ERC verification, SI/PI screening, fab house DFM/DFA compliance, and production release sign-off for KiCad projects. Use when running final design rule checks, auditing manufacturing limits, generating Gerbers/BOM/CPL, or issuing DFM sign-off reports."
4
+ category: engineering-hardware
5
+ compatibility: "Python 3.10+, kicad-cli 8+, mcp:kicad"
6
+ ---
7
+
8
+ # Critical Validation, DFM & Production Sign-Off
9
+
10
+ ## 1. Overview and Core Philosophy
11
+
12
+ In the AOS release architecture, the validation and sign-off phase is an unforgiving automated gate. No PCB design may be released to fabrication based on visual inspection or LLM self-attestation.
13
+
14
+ This skill governs the execution of headless Electrical Rules Checks (ERC), Design Rules Checks (DRC), Signal/Power Integrity (SI/PI) screening, Design for Manufacturing (DFM) verification, Design for Assembly (DFA) verification, and the generation of production-ready manufacturing packages.
15
+
16
+ ---
17
+
18
+ ## 2. Headless DRC / ERC Verification Gate
19
+
20
+ The agent must execute `kicad-cli` with deterministic exit codes. Any non-zero exit code represents an immediate gate blockage:
21
+
22
+ ### 2.1 Headless ERC Execution
23
+ ```bash
24
+ kicad-cli sch erc --exit-code-violations -o reports/erc_report.txt project.kicad_sch
25
+ ```
26
+ - **Exit Code 0**: Clean schematic; zero errors, zero unhandled warnings.
27
+ - **Exit Code 1**: Electrical violations detected (unconnected pins, missing `PWR_FLAG`, conflicting output drivers). The pipeline halts immediately.
28
+
29
+ ### 2.2 Headless DRC Execution
30
+ ```bash
31
+ kicad-cli pcb drc --exit-code-violations --format json -o reports/drc_report.json board.kicad_pcb
32
+ ```
33
+ - Must verify zero unrouted nets, zero clearance violations, zero broken annular rings, and zero thermal spoke disconnections.
34
+
35
+ ---
36
+
37
+ ## 3. Signal & Power Integrity (SI / PI) Pre-Screening
38
+
39
+ Before releasing copper to manufacturing, the agent must perform first-order SI/PI calculations:
40
+
41
+ ### 3.1 DC IR Drop Estimation
42
+ Calculate the DC voltage drop on power distribution traces to ensure $<3\%$ drop at maximum load:
43
+ $$R_{trace} = \rho \cdot \frac{L}{w \cdot t}$$
44
+ Where:
45
+ - $\rho \approx 1.72 \times 10^{-8} \ \Omega\cdot\text{m}$ (Copper resistivity at $20^\circ\text{C}$).
46
+ - $t = 35\mu\text{m}$ for $1\text{ oz}$ copper.
47
+ - $V_{drop} = I_{peak} \cdot R_{trace}$.
48
+ - *Rule*: On a $+3.3\text{V}$ rail, maximum allowable $V_{drop} \le 0.10\text{V}$ ($3\%$). If $V_{drop} > 0.10\text{V}$, increase trace width or assign to a dedicated copper flood.
49
+
50
+ ### 3.2 Crosstalk Prevention (The 3W Rule)
51
+ - To prevent capacitive and inductive crosstalk between parallel signal traces running longer than $15\text{mm}$:
52
+ $$\text{Center-to-Center Separation } D \ge 3 \cdot w$$
53
+ Where $w$ is the trace width. The 3W rule guarantees that mutual coupling drops by $>70\%$, maintaining signal integrity on sensitive analog and clock lines.
54
+
55
+ ---
56
+
57
+ ## 4. Design for Manufacturing (DFM) Rules
58
+
59
+ The board layout must be benchmarked against standard commercial fabrication house capabilities (e.g., JLCPCB standard, PCBWay 4-layer):
60
+
61
+ | Metric | Minimum Value | Standard Process | Advanced Process (Cost Factor) |
62
+ |---|---|---|---|
63
+ | **Minimum Trace Width** | $0.127\text{mm}$ ($5\text{ mils}$) | $0.15\text{mm}$ ($6\text{ mils}$) | $0.09\text{mm}$ ($3.5\text{ mils}$) ($1.8\times$) |
64
+ | **Minimum Trace Clearance** | $0.127\text{mm}$ ($5\text{ mils}$) | $0.15\text{mm}$ ($6\text{ mils}$) | $0.09\text{mm}$ ($3.5\text{ mils}$) ($1.8\times$) |
65
+ | **Minimum Drill Size** | $0.20\text{mm}$ ($8\text{ mils}$) | $0.30\text{mm}$ ($12\text{ mils}$) | $0.15\text{mm}$ ($6\text{ mils}$) ($2.5\times$) |
66
+ | **Minimum Annular Ring** | $0.15\text{mm}$ ($6\text{ mils}$) | $0.20\text{mm}$ ($8\text{ mils}$) | $0.10\text{mm}$ ($4\text{ mils}$) ($2.0\times$) |
67
+ | **Solder Mask Bridge (Dam)**| $0.10\text{mm}$ ($4\text{ mils}$) | $0.12\text{mm}$ ($5\text{ mils}$) | $0.08\text{mm}$ ($3\text{ mils}$) |
68
+ | **Board Edge Clearance** | $0.35\text{mm}$ ($14\text{ mils}$) | $0.50\text{mm}$ ($20\text{ mils}$) | $0.25\text{mm}$ ($10\text{ mils}$) |
69
+ | **Silkscreen Text Height** | $0.80\text{mm}$ ($32\text{ mils}$) | $1.00\text{mm}$ ($40\text{ mils}$) | $0.60\text{mm}$ ($24\text{ mils}$) |
70
+ | **Silkscreen Stroke Width** | $0.15\text{mm}$ ($6\text{ mils}$) | $0.18\text{mm}$ ($7\text{ mils}$) | $0.12\text{mm}$ ($5\text{ mils}$) |
71
+
72
+ ### 4.1 Solder Mask Dam Rule
73
+ Between fine-pitch QFP or QFN IC pads (pitch $\le 0.5\text{mm}$):
74
+ - Solder mask dam width must be $\ge 0.10\text{mm}$ to prevent molten solder bridging adjacent pins during automated reflow.
75
+ - If pad spacing does not permit a $0.10\text{mm}$ dam, gang-mask the pads (open single aperture) and ensure solder paste stencil apertures are reduced by $20\%$.
76
+
77
+ ---
78
+
79
+ ## 5. Design for Assembly (DFA) Standards
80
+
81
+ For automated pick-and-place surface mount assembly (SMT):
82
+
83
+ ### 5.1 Fiducial Marker Placement
84
+ - **Global Fiducials**: The PCB must contain **at least 3 non-collinear fiducial markers** placed on the top surface near the board corners (minimum $5\text{mm}$ from board edges):
85
+ - Copper Pad: $1.0\text{mm}$ circular copper pad.
86
+ - Mask Clearance: $2.0\text{mm}$ circular solder mask opening (bare substrate).
87
+ - Keepout: No traces, vias, or silkscreen within $3.0\text{mm}$ diameter of the center.
88
+ - **Local Fiducials**: Mandatory for high-pin-count fine-pitch components (QFP $\ge 64$ pins, BGA, QFN pitch $\le 0.4\text{mm}$). Place 2 diagonal fiducials outside opposing corners of the footprint.
89
+
90
+ ### 5.2 Component Orientation & Pin-1 Identifiers
91
+ - Every IC, polarized capacitor, diode, and connector must have a distinct, unambiguous Pin-1 / polarity marker on both the silkscreen layer (`F.SilkS`) and fabrication layer (`F.Fab`).
92
+ - Marking standards:
93
+ - ICs: Solid dot ($\ge 0.5\text{mm}$ diameter) adjacent to Pin 1.
94
+ - Diodes: Double bar or cathode band aligned with the package cathode line.
95
+ - Polarized Capacitors: `+` symbol placed adjacent to the anode pad.
96
+
97
+ ---
98
+
99
+ ## 6. Manufacturing Package Generation via `kicad-cli`
100
+
101
+ When all gates pass, the agent generates the complete fabrication archive:
102
+
103
+ ```bash
104
+ #!/usr/bin/env bash
105
+ set -e
106
+
107
+ PROJECT="board"
108
+ OUT_DIR="production_artifacts/fabrication"
109
+ mkdir -p "$OUT_DIR/gerbers" "$OUT_DIR/assembly"
110
+
111
+ echo "--> 1. Exporting Gerber Production Layers..."
112
+ kicad-cli pcb export gerbers \
113
+ --layers "F.Cu,B.Cu,In1.Cu,In2.Cu,F.Paste,B.Paste,F.SilkS,B.SilkS,F.Mask,B.Mask,Edge.Cuts" \
114
+ --output "$OUT_DIR/gerbers/" \
115
+ "$PROJECT.kicad_pcb"
116
+
117
+ echo "--> 2. Exporting Excellon Drill Files..."
118
+ kicad-cli pcb export drill \
119
+ --format excellon \
120
+ --drill-origin absolute \
121
+ --output "$OUT_DIR/gerbers/" \
122
+ "$PROJECT.kicad_pcb"
123
+
124
+ echo "--> 3. Exporting IPC-D-356 Bare-Board Test Netlist..."
125
+ kicad-cli pcb export netlist \
126
+ --format ipc2581 \
127
+ --output "$OUT_DIR/assembly/$PROJECT_ipc_test.d356" \
128
+ "$PROJECT.kicad_pcb"
129
+
130
+ echo "--> 4. Exporting Centroid / Component Placement List (CPL)..."
131
+ kicad-cli pcb export pos \
132
+ --format csv \
133
+ --units mm \
134
+ --side both \
135
+ --output "$OUT_DIR/assembly/$PROJECT_cpl.csv" \
136
+ "$PROJECT.kicad_pcb"
137
+
138
+ echo "--> 5. Exporting 3D Assembly STEP Model..."
139
+ kicad-cli pcb export step \
140
+ --subst-models \
141
+ --output "$OUT_DIR/assembly/$PROJECT.step" \
142
+ "$PROJECT.kicad_pcb"
143
+
144
+ echo "--> 6. Packaging Gerber ZIP Archive..."
145
+ cd "$OUT_DIR/gerbers"
146
+ zip -r "../$PROJECT_gerbers.zip" ./*
147
+ cd - > /dev/null
148
+
149
+ echo "--> Fabrication release artifacts generated successfully."
150
+ ```
151
+
152
+ ---
153
+
154
+ ## 7. Formal Sign-Off Deliverable (`DFM_SIGNOFF_REPORT.md`)
155
+
156
+ The agent emits a signed release report certifying production readiness:
157
+
158
+ ```markdown
159
+ # DFM Production Sign-Off Report
160
+
161
+ - **Project**: iot-telemetry-node
162
+ - **Sign-Off Date**: 2026-09-14T20:45:00Z
163
+ - **Auditor**: Godmode_Shipping
164
+ - **Target Fabricator**: JLCPCB 4-Layer Standard
165
+
166
+ ## 1. Gate Execution Summary
167
+ | Check | Tool / Engine | Exit Code | Result | Violations |
168
+ |---|---|---|---|---|
169
+ | **Schematic ERC** | `kicad-cli sch erc` | 0 | PASS | 0 Errors, 0 Warnings |
170
+ | **Layout DRC** | `kicad-cli pcb drc` | 0 | PASS | 0 Errors, 0 Warnings |
171
+ | **Unrouted Nets** | `kicad-cli pcb drc` | 0 | PASS | 0 Unconnected Nets |
172
+ | **Signal Integrity (3W)** | AOS SI Analyzer | 0 | PASS | 0 Crosstalk Hazards |
173
+ | **Power Integrity (IR Drop)** | AOS PI Analyzer | 0 | PASS | Max Drop 1.8% on +3V3 |
174
+ | **DFM Clearance Audit** | JLCPCB Standard Rules | 0 | PASS | Min trace 6 mil, min drill 0.3mm |
175
+ | **DFA SMT Verification** | Fiducial & CPL Checker | 0 | PASS | 3 Global Fiducials Verified |
176
+
177
+ ## 2. Release Artifacts Generated
178
+ - `production_artifacts/fabrication/board_gerbers.zip` (SHA256: e3b0c44298fc...)
179
+ - `production_artifacts/fabrication/assembly/board_cpl.csv`
180
+ - `production_artifacts/fabrication/assembly/board_bom.csv`
181
+ - `production_artifacts/fabrication/assembly/board.step`
182
+
183
+ ## 3. Final Production Verdict: APPROVED FOR FABRICATION
184
+ ```
185
+
186
+ ---
187
+
188
+ ## 8. Negative Constraints (Anti-Slop Directives)
189
+
190
+ - **DO NOT** generate Gerber or drill files if `kicad-cli pcb drc` or `kicad-cli sch erc` returns a non-zero exit code.
191
+ - **DO NOT** release a design for automated SMT assembly without at least three non-collinear fiducial markers on the board surface.
192
+ - **DO NOT** permit silkscreen text or polarity marks to overlap exposed copper pads (causes solder dewetting and tombstoning).
193
+ - **DO NOT** use non-standard drill diameters outside the fabricator's standard drill rack without flagging increased tool-change costs.
194
+ - **DO NOT** omit the IPC-D-356 netlist export; flying probe testing requires this netlist to detect electrical opens and shorts before component population.
@@ -0,0 +1,202 @@
1
+ ---
2
+ name: schematic-datasheet-analysis
3
+ description: "Electrical rule auditing, datasheet grounding, pinout validation, power tree tracing, and negative evidence analysis for KiCad schematics. Use when analyzing schematics, auditing pinmux/logic levels, checking component ratings, or validating datasheets."
4
+ category: engineering-hardware
5
+ compatibility: "Python 3.10+, PyMuPDF, kicad-cli, kicad-happy, mcp:kicad"
6
+ ---
7
+
8
+ # Schematic & Datasheet Analysis
9
+
10
+ ## 1. Overview and Core Philosophy
11
+
12
+ In hardware design, an ungrounded assumption is a hardware failure. Unlike software, where runtime exceptions can be patched in seconds, hardware fabrication defects result in burnt silicon, weeks of PCB re-spin delays, and thousands of dollars in wasted fabrication costs.
13
+
14
+ This skill embodies the rigorous methodologies established by Seeed Studio's `schematic-analyzer` and `ee-datasheet-master`, adapted for the BDB Agent OS multi-agent hardware pipeline.
15
+
16
+ ### The Iron Rule of Grounded Hardware Analysis
17
+ > **Accuracy and evidence override coverage.** Every electrical claim, pin function, voltage threshold, and decoupling requirement must cite direct evidence from the manufacturer's datasheet (page number, table number, note number). If no direct evidence exists, the agent must report an open verification gap—never invent plausible values.
18
+
19
+ ---
20
+
21
+ ## 2. Datasheet Extraction Pipeline (`ee-datasheet-master` Protocol)
22
+
23
+ When analyzing an IC datasheet (PDF), the agent must follow a phased, low-latency extraction strategy using `pymupdf` (MuPDF):
24
+
25
+ ```
26
+ +-----------------------------------------------------------------------------------------+
27
+ | PHASE 0: Page Hints -> Structural scan of the table of contents and headings. |
28
+ | PHASE 1: Info Scan -> Detect vector text vs scanned bitmap (flag if OCR needed).|
29
+ | PHASE 2: Device Overview -> Pages 1-2: absolute max ratings, package type, part codes. |
30
+ | PHASE 3: Pin Description -> Pinout diagrams and pin assignment tables. |
31
+ | PHASE 4: Electrical Specs -> DC electrical characteristics, V_IL/V_IH thresholds, timing|
32
+ +-----------------------------------------------------------------------------------------+
33
+ ```
34
+
35
+ ### 2.1 Python Extraction Script (`datasheet_query.py`)
36
+ ```python
37
+ #!/usr/bin/env python3
38
+ """
39
+ Grounded Datasheet Parameter Extractor using PyMuPDF.
40
+ Extracts pin tables and electrical characteristics with exact page citations.
41
+ """
42
+ import sys
43
+ import fitz # PyMuPDF
44
+ import json
45
+
46
+ def extract_pin_table(pdf_path: str, keyword: str = "Pin Description"):
47
+ doc = fitz.open(pdf_path)
48
+ findings = []
49
+
50
+ for page_num in range(len(doc)):
51
+ page = doc[page_num]
52
+ text = page.get_text("text")
53
+ if keyword.lower() in text.lower():
54
+ tables = page.find_tables()
55
+ for tab in tables:
56
+ df = tab.extract()
57
+ findings.append({
58
+ "page": page_num + 1,
59
+ "table_header": df[0] if df else [],
60
+ "row_count": len(df),
61
+ "sample_rows": df[1:5]
62
+ })
63
+ return findings
64
+
65
+ if __name__ == "__main__":
66
+ if len(sys.argv) < 2:
67
+ print("Usage: python3 datasheet_query.py <datasheet.pdf>")
68
+ sys.exit(1)
69
+ results = extract_pin_table(sys.argv[1])
70
+ print(json.dumps(results, indent=2))
71
+ ```
72
+
73
+ ---
74
+
75
+ ## 3. Systematic Electrical Verification Disciplines
76
+
77
+ ### 3.1 Absolute Maximum Ratings & The 80/70 Derating Rule
78
+ Components must never be operated near their absolute maximum ratings. The agent must enforce conservative engineering derating:
79
+ - **Voltage Derating (80% Rule)**: Working voltage must not exceed $80\%$ of rated breakdown voltage ($V_{applied} \le 0.8 \cdot V_{max}$).
80
+ - *Example*: Ceramic capacitors on a $+12\text{V}$ rail must be rated for at least $16\text{V}$, preferably $25\text{V}$ (due to Class II ceramic DC bias capacitance drop).
81
+ - **Power & Current Derating (70% Rule)**: Continuous current and power dissipation must not exceed $70\%$ of rated package capacity ($P_{actual} \le 0.7 \cdot P_{rated}$).
82
+ - *Linear Regulator Thermal Check*:
83
+ $$P_D = (V_{in} - V_{out}) \cdot I_{load}$$
84
+ $$T_J = T_A + P_D \cdot \theta_{JA}$$
85
+ If $T_J > 105^\circ\text{C}$ at $T_A = 45^\circ\text{C}$, the design is flagged as a thermal failure.
86
+
87
+ ### 3.2 Logic Level Compatibility & Signal Interfacing
88
+ Direct connections between mixed-voltage domains are strictly audited:
89
+ - **Drive Compatibility Condition**:
90
+ $$V_{OH,min} (\text{Driver}) > V_{IH,min} (\text{Receiver})$$
91
+ $$V_{OL,max} (\text{Driver}) < V_{IL,max} (\text{Receiver})$$
92
+ - Flag any $5\text{V}$ output connected directly to a $3.3\text{V}$ input unless the receiving pin is explicitly certified as "5V Tolerant" in the datasheet pin description table.
93
+
94
+ ### 3.3 Pinmux & Active-Low Assertions
95
+ - **Active-Low Signals**: Pins designated with an overbar, leading tilde, or hash (e.g., `~{RESET}`, `nCS`, `RESET_N`) must have an explicit external pull-up resistor ($4.7\text{k}\Omega - 10\text{k}\Omega$) unless internal pull-ups are confirmed active during boot in the datasheet.
96
+ - **Open-Drain Busses (I2C / SMBus)**: Both `SDA` and `SCL` lines must have physical pull-up resistors to the bus $V_{DD}$. Sized via bus capacitance:
97
+ $$R_{min} = \frac{V_{DD} - 0.4\text{V}}{3\text{mA}}, \quad R_{max} = \frac{t_r}{0.8473 \cdot C_{bus}}$$
98
+ For standard $400\text{ kHz}$ Fast-mode with $C_{bus} \approx 100\text{pF}$, standard pull-up is $2.2\text{k}\Omega - 4.7\text{k}\Omega$.
99
+
100
+ ---
101
+
102
+ ## 4. Power Distribution Tree & Subsystem Tracing
103
+
104
+ Every schematic audit must construct a hierarchical Power Tree starting from the primary power inlet to every downstream load:
105
+
106
+ ```
107
+ [USB-C VBUS (+5.0V / 3A)]
108
+ |
109
+ +---> [USBLC6-2SC6 TVS Diode] ---> GND
110
+ |
111
+ +---> [Reverse Polarity P-FET (AO3401A)]
112
+ |
113
+ +---> [Main DC Rail (+5V0)]
114
+ |
115
+ +---> [AP2112K-3.3 LDO (Cin=4.7uF)]
116
+ |
117
+ +---> [+3V3 Digital Rail] (Cout=4.7uF)
118
+ |
119
+ +---> RP2040 IOVDD (4x 100nF)
120
+ +---> Flash Memory SPI VDD (1x 100nF)
121
+ +---> Reset Generator Pullup (10k)
122
+ ```
123
+
124
+ ### Decoupling Rules of Engagement
125
+ 1. Every IC supply pin (`VDD`, `VCC`, `IOVDD`, `AVDD`) must have at least one dedicated low-ESR ceramic bypass capacitor (typically $100\text{nF}$, $0402$ or $0603$) placed within $1.5\text{mm}$ of the physical pin.
126
+ 2. Analog power pins (`AVDD`, `VREF`) must include high-frequency noise rejection (ferrite bead or series $10\Omega$ resistor forming an RC low-pass filter with $\ge 1\mu\text{F}$ capacitor).
127
+
128
+ ---
129
+
130
+ ## 5. Negative Evidence Analysis (The "What is NOT Connected" Rule)
131
+
132
+ Traditional reviews only verify existing wires. The Reviewer agent must systematically audit **missing** connections:
133
+ 1. **Floating CMOS Inputs**:
134
+ - High-impedance CMOS inputs left floating drift to intermediate logic levels ($V_{DD}/2$), causing both P-FET and N-FET transistors to conduct simultaneously, resulting in excessive shoot-through current ($>10\text{mA}$ per pin) and thermal destruction.
135
+ - *Rule*: Every unused digital input must be tied to $V_{DD}$ or $GND$, or explicitly configured as an output with internal pull-down in firmware.
136
+ 2. **Unconnected Peripheral Pins**:
137
+ - Flag unconnected `BOOT`, `SWCLK`, `SWDIO`, or `TEST` pins.
138
+ 3. **Do-Not-Populate (DNP) Component Impact**:
139
+ - Audit DNP zero-ohm links to ensure critical signal paths are not permanently open-circuited.
140
+
141
+ ---
142
+
143
+ ## 6. Formal Audit Schema (`schematic_audit_report.json`)
144
+
145
+ The output of this skill is a machine-readable audit report:
146
+
147
+ ```json
148
+ {
149
+ "schema_version": "1.0.0",
150
+ "audit_timestamp": "2026-09-14T20:30:00Z",
151
+ "project_name": "iot-telemetry-node",
152
+ "total_components": 42,
153
+ "total_nets": 78,
154
+ "grounded_findings": [
155
+ {
156
+ "finding_id": "PWR-001",
157
+ "severity": "PASS",
158
+ "subsystem": "Power Distribution",
159
+ "component": "U1 (AP2112K-3.3)",
160
+ "assertion": "Input voltage is within operating range",
161
+ "evidence": {
162
+ "datasheet": "AP2112K_Rev5.pdf",
163
+ "page": 4,
164
+ "table": "Absolute Maximum Ratings",
165
+ "rated_max_v": 6.0,
166
+ "actual_v": 5.0,
167
+ "derating_margin_pct": 16.7
168
+ }
169
+ },
170
+ {
171
+ "finding_id": "PIN-002",
172
+ "severity": "FAIL",
173
+ "subsystem": "Microcontroller",
174
+ "component": "U2 (RP2040)",
175
+ "pin": "PIN 19 (RUN)",
176
+ "assertion": "Active-low reset line must have pull-up resistor",
177
+ "evidence": {
178
+ "datasheet": "rp2040_datasheet.pdf",
179
+ "page": 24,
180
+ "quote": "RUN is active-low. Driven low to reset. High-impedance with weak internal pull-up (~50k); external 10k recommended in noisy environments."
181
+ },
182
+ "remediation": "Add 10k pull-up resistor R5 between net ~{RESET} and +3V3."
183
+ }
184
+ ],
185
+ "negative_evidence_audit": {
186
+ "floating_inputs_detected": 0,
187
+ "unconnected_power_pins": 0,
188
+ "dnp_components_verified": 2
189
+ },
190
+ "overall_verdict": "FAIL"
191
+ }
192
+ ```
193
+
194
+ ---
195
+
196
+ ## 7. Negative Constraints (Anti-Slop Directives)
197
+
198
+ - **DO NOT** declare a pin connection valid without cross-referencing the official datasheet pin description table.
199
+ - **DO NOT** approve an I2C bus lacking physical pull-up resistors on both `SDA` and `SCL`.
200
+ - **DO NOT** permit linear regulators with an estimated junction temperature $T_J > 105^\circ\text{C}$.
201
+ - **DO NOT** assume microcontrollers have internal pull-ups enabled during hardware reset; hardware reset pins must have external hardware pull-ups.
202
+ - **DO NOT** mark an audit as `PASS` if any high-impedance CMOS inputs are left floating.