← Commit history
README.md+3−3
@@ -13,12 +13,12 @@ The [current board model review](docs/board-model-review.md) includes the export - A 104-component hierarchical schematic passes native KiCad ERC; all 52 intended nets match the native exported netlist. - Six limited current-servo sensitivity cases pass using TI's amplifier model and an approximate MOSFET. This is not full circuit or hardware validation. - The portable C safety-policy core and instrument/ADC adapters pass host tests. An output-locked STM32 USB bring-up image compiles; functional load enabling, calibration and physical USB/interlock tests remain incomplete. No firmware has been flashed.-- The adopted two-layer board is AIFlow board 21 (candidate v85): zero native DRC errors, warnings and unconnected items. All six loaded nets pass the matching 0.1 mm current screen and AIFlow checks. The workflow has advanced to step 13 of 19, Thermal. The complete cooling model still fails; see the [completion plan](docs/completion-plan.md).-- AIFlow 0.1.85 is source-published, registry-published and installed here, with 135 passing tests. It resolves repeated physical pads without weakening current or thermal limits. The isolated Fields solver includes owner-review PR10 and dependencies; the shared Fields runtime is preserved.+- The adopted two-layer board is AIFlow board 22: 48 reference labels improved through a checked saved-file edit, with zero native DRC errors, warnings and unconnected items. Copper is unchanged from v85; exact-file Fields checks are being regenerated. See the [silkscreen review](docs/silkscreen-review.md). The workflow has advanced to step 13 of 19, Thermal. The complete cooling model still fails; see the [completion plan](docs/completion-plan.md).+- AIFlow 0.1.87 is source-published, registry-published and installed here, with 150 passing tests. It also preserves registered artifacts by content hash. The isolated Fields solver includes owner-review PR10 and dependencies; the shared Fields runtime is preserved. - D1 now uses [SBR10U45SP5-13](https://wiki.adom.inc/adom/sbr10u45sp5-13), with published symbol, footprint and drawing-derived nominal STEP/GLB assets. Its local thermal study excludes Q1 and is not complete assembly acceptance. - The fan has a [component page with GLB motion states](https://wiki.adom.inc/adom/mf40200v1-1000u-g99). Its preview is simulated; shared viewer integration remains proposed. - The [thermal budget](docs/thermal-budget.md) now matches the 55 °C firmware trip ceiling. The earlier 25 W assumption is retained as an unqualified future option; R0 targets 5 W and still requires cooling validation.-- There are 90 unique raw takes, 36 reviewed excerpts and 32 storyboard clips. Failed/static captures remain identified in the shot log; the final narrated 4–5 minute film is unfinished.+- There are 95 unique raw takes, 38 reviewed excerpts and 34 storyboard clips, plus a recorded solver-event replay. Failed/static captures remain identified in the shot log; the final narrated 4–5 minute film is unfinished.  Read the [engineering status](docs/status.md), [placement review](docs/placement-review.md), [library review](docs/library-review.md), [cost breakdown](docs/cost/README.md), [firmware/control-panel contract](docs/firmware-contract.md), and [raw clip log](videos/shotlog.json). The [AI Flow report](docs/runs/board-codex-20261007-1749/README.md) records the run. 
design/silkscreen-review/candidate-fields.jsonadded+632
@@ -0,0 +1,632 @@+{+  "filePath": "C:/Users/john/adom-projects/adom-custom-electronic-load/kicad/adom-custom-electronic-load.kicad_pcb",+  "expectedRevision": "180099c4bad21a5898501fd29fb1046d98aa569b36debb6ad76e01cc53fb1150",+  "update": [+    {+      "id": "1ce81650-92db-43c0-88c6-d23438670a1a",+      "x": 128.0,+      "y": 47.825,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "6524bf03-6551-415b-bad0-892b5edaa2a4",+      "x": 139.145,+      "y": 88.8,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "e4da2abc-d250-4057-9f86-3effd5c4db1a",+      "x": 148.0,+      "y": 68.225,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "c54b3411-713b-480c-afea-7033d7bcd219",+      "x": 139.0,+      "y": 87.225,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "d976b544-787e-4024-a3fa-a62747234064",+      "x": 128.2,+      "y": 54.625,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "2c5597b9-8015-4fac-b423-b55d8f2aa0cc",+      "x": 109.8,+      "y": 62.4,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "00a34917-0ba0-4aec-9c08-0f5be0f6391e",+      "x": 152.8,+      "y": 61.345000000000006,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 90,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "306174f2-10fd-4381-899b-4548e35ec95a",+      "x": 149.79999999999998,+      "y": 60.705,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "dfdced71-9c34-4407-8d93-32072ef22067",+      "x": 109.045,+      "y": 60.0,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "05a4263a-92e3-401f-8488-009a951cf2be",+      "x": 116.6,+      "y": 71.54499999999999,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "7547689d-f002-4c97-98bd-6f29e8a04cbc",+      "x": 149.15,+      "y": 42.2,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "d0d16864-659a-48a6-8e5a-524578862195",+      "x": 114.6,+      "y": 74.22,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "542a6fec-84fe-435e-849b-ecccbab250d2",+      "x": 107.8,+      "y": 64.074999,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "444b539b-5f85-4830-83be-44c54b3d5cbe",+      "x": 149.6,+      "y": 80.00499900000001,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "d929a47c-6b48-42f4-818e-39833d50b87e",+      "x": 123.80000000000001,+      "y": 61.31,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "a2e65e7c-23ef-4d77-a660-7362b73a5cc9",+      "x": 119.39999999999999,+      "y": 70.945,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "dba04e31-9229-4466-8eb7-9e8a0cab01c6",+      "x": 144.0,+      "y": 86.05499999999999,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "4ed4c592-811f-4bcd-aaba-bb7f55be855e",+      "x": 142.4,+      "y": 56.145,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "e3e578c7-d85b-4b1d-b5da-fab2b537cfa0",+      "x": 125.6,+      "y": 47.644999999999996,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "c37e5998-7426-4b8b-b779-2138e4963060",+      "x": 151.4,+      "y": 55.545,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "a5f86ec5-e2f2-432b-9209-a14df6a50419",+      "x": 146.20000000000002,+      "y": 91.61,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "8038fb1e-c04a-4f50-b7ca-4d6705ea1901",+      "x": 120.60000000000001,+      "y": 54.045,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "c923c824-56c3-4707-8e83-3d90fb9159a2",+      "x": 153.1,+      "y": 40.4,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 90.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "3ab6ccda-d5ec-462f-8cc5-9bf0a74824c3",+      "x": 112.0,+      "y": 68.2,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "6eec7c8c-b114-48fa-b0ea-e30e5622cd9a",+      "x": 118.0,+      "y": 53.005,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "02a1d7f7-e90c-4fad-9227-8281ee78c3cb",+      "x": 109.6,+      "y": 77.074999,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "b45211b4-e6e4-4a47-9441-87727fe6fd64",+      "x": 136.55,+      "y": 79.45,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "467fe274-4352-4972-9a5e-17372bc9cbf3",+      "x": 112.6,+      "y": 55.605,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "a0d52ca1-16de-4208-b39b-c8fdf84e62cf",+      "x": 145.20000000000002,+      "y": 56.145,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "0c9fa42d-e6d5-452a-9edb-bc3abf640fe7",+      "x": 145.0,+      "y": 70.005,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "cddd0cbb-b43e-4efd-9c81-5b8267390f96",+      "x": 114.295,+      "y": 69.89999999999999,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "19129045-73b3-488b-812a-d5095866eb72",+      "x": 143.0,+      "y": 63.054998999999995,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "43d14d2f-8bad-43f5-abd8-5a463b26be8b",+      "x": 148.65,+      "y": 89.0,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "af860ae5-b6eb-4305-8e51-c195525ee135",+      "x": 114.8,+      "y": 54.525,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "ee7bea54-c64a-4b8a-a4eb-981389727733",+      "x": 106.8,+      "y": 77.874999,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "9bae052c-b936-4554-8cde-cd8bd5d2a555",+      "x": 110.8,+      "y": 65.0,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "502f1687-33d2-474e-adbb-f2f1fce43b97",+      "x": 104.2,+      "y": 77.874999,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "f3e401e7-f94c-4452-8812-6fb355d586bd",+      "x": 149.35,+      "y": 48.699999999999996,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "152bf4a5-e958-4c93-a7e3-5d07cfe67710",+      "x": 141.0,+      "y": 80.95,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "d07dd9ae-b16f-44f6-b61a-c9a3dfd1ce35",+      "x": 153.0,+      "y": 34.504999999999995,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "71c3e1f8-5c91-4dc9-a6fb-abfa82e43af4",+      "x": 101.574999,+      "y": 86.4,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "fed1860d-d8e6-4974-9402-b232c0f803d3",+      "x": 123.7,+      "y": 88.125,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "cff62566-f931-47a1-a5f4-f1c066119c85",+      "x": 135.4,+      "y": 40.195,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "33919523-d8f6-428f-87fc-24ba1f507380",+      "x": 111.1,+      "y": 66.599999,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "8253e28a-9698-476d-a2ec-ccb9bf148e52",+      "x": 119.9,+      "y": 85.925,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "53f82256-9a38-4a4e-8a0d-0b1b406de79a",+      "x": 127.1,+      "y": 89.6,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "0b76d5a9-ab18-4ae4-af5c-7025b985c1b9",+      "x": 101.574999,+      "y": 82.8,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    },+    {+      "id": "f62355e7-ebda-4168-8671-541c9755256d",+      "x": 153.095,+      "y": 87.2,+      "layer": "F.SilkS",+      "height": 0.8,+      "width": 0.8000000000000002,+      "stroke": 0.12,+      "rotation": 0.0,+      "align": "center",+      "mirrored": false,+      "visible": true+    }+  ],+  "dryRun": true,+  "save": false+}
design/silkscreen-review/layout-F.jsonadded+1610
@@ -0,0 +1,1610 @@+{+  "schemaVersion": 1,+  "placements": [+    {+      "id": "1ce81650-92db-43c0-88c6-d23438670a1a",+      "orderGroup": null,+      "order": null,+      "position": [+        128.0,+        47.825+      ],+      "box": [+        127.1,+        47.1464,+        128.9,+        48.503600000000006+      ],+      "font": 0.8,+      "score": 78.87821570700957+    },+    {+      "id": "2ca531b6-b7af-4600-b1d7-6f7b22a40359",+      "orderGroup": null,+      "order": null,+      "position": [+        140.20499999999998,+        63.2+      ],+      "box": [+        138.943095,+        62.5214,+        141.466905,+        63.8786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "3511e6cb-c5a9-45b1-9a5c-f482f8913420",+      "orderGroup": null,+      "order": null,+      "position": [+        133.0,+        89.195+      ],+      "box": [+        131.738095,+        88.5164,+        134.261905,+        89.8736+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "8d882684-5ab1-4bca-b08f-aa8e746d6208",+      "orderGroup": null,+      "order": null,+      "position": [+        122.399999,+        57.800000000000004+      ],+      "box": [+        121.138094,+        57.1214,+        123.661904,+        58.4786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "6524bf03-6551-415b-bad0-892b5edaa2a4",+      "orderGroup": null,+      "order": null,+      "position": [+        139.145,+        88.8+      ],+      "box": [+        137.883095,+        88.1214,+        140.406905,+        89.4786+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "97c8ea3e-8b2a-4f29-a1f7-aa091436cb7e",+      "orderGroup": null,+      "order": null,+      "position": [+        106.4,+        88.945+      ],+      "box": [+        105.576191,+        88.2664,+        107.22381,+        89.6236+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "e4da2abc-d250-4057-9f86-3effd5c4db1a",+      "orderGroup": null,+      "order": null,+      "position": [+        148.0,+        68.225+      ],+      "box": [+        147.1,+        67.54639999999999,+        148.9,+        68.9036+      ],+      "font": 0.8,+      "score": 79.34+    },+    {+      "id": "60b3dc7f-09ef-4552-afdc-b89d3f9009fb",+      "orderGroup": null,+      "order": null,+      "position": [+        150.045,+        38.5+      ],+      "box": [+        148.783095,+        37.8214,+        151.306905,+        39.1786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "c54b3411-713b-480c-afea-7033d7bcd219",+      "orderGroup": null,+      "order": null,+      "position": [+        139.0,+        87.225+      ],+      "box": [+        137.319048,+        86.54639999999999,+        140.680953,+        87.9036+      ],+      "font": 0.8,+      "score": 78.87821570700957+    },+    {+      "id": "1104c7e7-14fb-44cb-b739-e1e046d3650d",+      "orderGroup": null,+      "order": null,+      "position": [+        129.3,+        93.225+      ],+      "box": [+        128.4,+        92.5464,+        130.2,+        93.9036+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "d976b544-787e-4024-a3fa-a62747234064",+      "orderGroup": null,+      "order": null,+      "position": [+        128.2,+        54.625+      ],+      "box": [+        127.3,+        53.9464,+        129.1,+        55.3036+      ],+      "font": 0.8,+      "score": 79.78000000000002+    },+    {+      "id": "2c5597b9-8015-4fac-b423-b55d8f2aa0cc",+      "orderGroup": null,+      "order": null,+      "position": [+        109.8,+        62.4+      ],+      "box": [+        108.538095,+        61.721399999999996,+        111.061905,+        63.0786+      ],+      "font": 0.8,+      "score": 77.4916140647819+    },+    {+      "id": "00a34917-0ba0-4aec-9c08-0f5be0f6391e",+      "orderGroup": null,+      "order": null,+      "position": [+        152.8,+        61.345000000000006+      ],+      "box": [+        152.1214,+        60.083095,+        153.4786,+        62.606905+      ],+      "font": 0.8,+      "rotation": 90,+      "score": 78.46+    },+    {+      "id": "9cc2520f-464b-4d73-ae8a-c1743caa8ee1",+      "orderGroup": null,+      "order": null,+      "position": [+        104.0,+        70.305+      ],+      "box": [+        102.833333,+        69.6264,+        105.166667,+        70.9836+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "e0dfb6c2-22e4-4f6c-bac0-de0fc761cce1",+      "orderGroup": null,+      "order": null,+      "position": [+        127.0,+        40.644999999999996+      ],+      "box": [+        125.738095,+        39.9664,+        128.261905,+        41.3236+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "a6b4d6dc-fd2b-452b-ad8e-8487d60fb1c9",+      "orderGroup": null,+      "order": null,+      "position": [+        122.4,+        56.11+      ],+      "box": [+        121.138095,+        55.4314,+        123.661905,+        56.7886+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "075ae080-0999-43ee-ba49-82645d7b42c4",+      "orderGroup": null,+      "order": null,+      "position": [+        146.8,+        80.604999+      ],+      "box": [+        145.538095,+        79.926399,+        148.061905,+        81.283599+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "306174f2-10fd-4381-899b-4548e35ec95a",+      "orderGroup": null,+      "order": null,+      "position": [+        149.79999999999998,+        60.705+      ],+      "box": [+        148.538095,+        60.0264,+        151.061905,+        61.3836+      ],+      "font": 0.8,+      "score": 78.60859782952593+    },+    {+      "id": "dfdced71-9c34-4407-8d93-32072ef22067",+      "orderGroup": null,+      "order": null,+      "position": [+        109.045,+        60.0+      ],+      "box": [+        108.164048,+        59.3214,+        109.925953,+        60.678599999999996+      ],+      "font": 0.8,+      "score": 79.55999999999999+    },+    {+      "id": "4718813c-a8a3-4c33-b9d0-d5fb471202af",+      "orderGroup": null,+      "order": null,+      "position": [+        150.625,+        84.7+      ],+      "box": [+        149.744048,+        84.0214,+        151.505953,+        85.3786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "ce6c6d8a-2b5f-4983-b5ec-ea8e154e4ff5",+      "orderGroup": null,+      "order": null,+      "position": [+        143.0,+        40.894999999999996+      ],+      "box": [+        142.1,+        40.2164,+        143.9,+        41.5736+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "4c8a9043-fbdc-40e7-99ba-87afe939b021",+      "orderGroup": null,+      "order": null,+      "position": [+        126.595,+        61.1+      ],+      "box": [+        125.333095,+        60.4214,+        127.856905,+        61.7786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "05a4263a-92e3-401f-8488-009a951cf2be",+      "orderGroup": null,+      "order": null,+      "position": [+        116.6,+        71.54499999999999+      ],+      "box": [+        115.719048,+        70.8664,+        117.480953,+        72.22359999999999+      ],+      "font": 0.8,+      "score": 78.39837582435828+    },+    {+      "id": "7547689d-f002-4c97-98bd-6f29e8a04cbc",+      "orderGroup": null,+      "order": null,+      "position": [+        149.15,+        42.2+      ],+      "box": [+        147.888095,+        41.5214,+        150.411905,+        42.8786+      ],+      "font": 0.8,+      "score": 78.46+    },+    {+      "id": "d0d16864-659a-48a6-8e5a-524578862195",+      "orderGroup": null,+      "order": null,+      "position": [+        114.6,+        74.22+      ],+      "box": [+        113.338095,+        73.5414,+        115.861905,+        74.8986+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "ab21322d-12b0-4928-ba33-5c314666bcda",+      "orderGroup": null,+      "order": null,+      "position": [+        152.4,+        80.145+      ],+      "box": [+        151.138095,+        79.4664,+        153.661905,+        80.8236+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "542a6fec-84fe-435e-849b-ecccbab250d2",+      "orderGroup": null,+      "order": null,+      "position": [+        107.8,+        64.074999+      ],+      "box": [+        106.233333,+        63.396399,+        109.36666699999999,+        64.753599+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "01bb54e1-1d31-4862-ae05-0c4df288636d",+      "orderGroup": null,+      "order": null,+      "position": [+        151.5,+        100.5+      ],+      "box": [+        150.714286,+        99.8214,+        152.285715,+        101.1786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "444b539b-5f85-4830-83be-44c54b3d5cbe",+      "orderGroup": null,+      "order": null,+      "position": [+        149.6,+        80.00499900000001+      ],+      "box": [+        148.338095,+        79.32639900000001,+        150.861905,+        80.683599+      ],+      "font": 0.8,+      "score": 79.34+    },+    {+      "id": "d929a47c-6b48-42f4-818e-39833d50b87e",+      "orderGroup": null,+      "order": null,+      "position": [+        123.80000000000001,+        61.31+      ],+      "box": [+        122.538095,+        60.6314,+        125.061905,+        61.9886+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "a2e65e7c-23ef-4d77-a660-7362b73a5cc9",+      "orderGroup": null,+      "order": null,+      "position": [+        119.39999999999999,+        70.945+      ],+      "box": [+        118.519048,+        70.26639999999999,+        120.280953,+        71.6236+      ],+      "font": 0.8,+      "score": 77.4916140647819+    },+    {+      "id": "b08e9998-5ba1-43b1-bdb0-b99c93de365a",+      "orderGroup": null,+      "order": null,+      "position": [+        153.95,+        91.22+      ],+      "box": [+        152.688095,+        90.5414,+        155.211905,+        91.8986+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "becadd52-9307-499a-b62b-e3248d66cb26",+      "orderGroup": null,+      "order": null,+      "position": [+        112.625,+        85.2+      ],+      "box": [+        111.058333,+        84.5214,+        114.191667,+        85.8786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "dba04e31-9229-4466-8eb7-9e8a0cab01c6",+      "orderGroup": null,+      "order": null,+      "position": [+        144.0,+        86.05499999999999+      ],+      "box": [+        143.119048,+        85.3764,+        144.880953,+        86.7336+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "4ed4c592-811f-4bcd-aaba-bb7f55be855e",+      "orderGroup": null,+      "order": null,+      "position": [+        142.4,+        56.145+      ],+      "box": [+        141.138095,+        55.4664,+        143.66190500000002,+        56.8236+      ],+      "font": 0.8,+      "score": 79.34+    },+    {+      "id": "e3e578c7-d85b-4b1d-b5da-fab2b537cfa0",+      "orderGroup": null,+      "order": null,+      "position": [+        125.6,+        47.644999999999996+      ],+      "box": [+        124.338095,+        46.9664,+        126.861905,+        48.3236+      ],+      "font": 0.8,+      "score": 79.55999999999999+    },+    {+      "id": "c37e5998-7426-4b8b-b779-2138e4963060",+      "orderGroup": null,+      "order": null,+      "position": [+        151.4,+        55.545+      ],+      "box": [+        150.138095,+        54.8664,+        152.661905,+        56.2236+      ],+      "font": 0.8,+      "score": 79.34+    },+    {+      "id": "cc7999ef-8753-4805-97cf-93e269542ea1",+      "orderGroup": null,+      "order": null,+      "position": [+        114.1,+        71.465+      ],+      "box": [+        112.838095,+        70.7864,+        115.361905,+        72.1436+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "a5f86ec5-e2f2-432b-9209-a14df6a50419",+      "orderGroup": null,+      "order": null,+      "position": [+        146.20000000000002,+        91.61+      ],+      "box": [+        144.938095,+        90.9314,+        147.461905,+        92.2886+      ],+      "font": 0.8,+      "score": 79.78000000000002+    },+    {+      "id": "8038fb1e-c04a-4f50-b7ca-4d6705ea1901",+      "orderGroup": null,+      "order": null,+      "position": [+        120.60000000000001,+        54.045+      ],+      "box": [+        119.719048,+        53.3664,+        121.480953,+        54.7236+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "c923c824-56c3-4707-8e83-3d90fb9159a2",+      "orderGroup": null,+      "order": null,+      "position": [+        153.1,+        40.4+      ],+      "box": [+        152.42139999999998,+        39.119047,+        153.77859999999998,+        41.680952+      ],+      "font": 0.8,+      "score": 78.52419513485015+    },+    {+      "id": "3ab6ccda-d5ec-462f-8cc5-9bf0a74824c3",+      "orderGroup": null,+      "order": null,+      "position": [+        112.0,+        68.2+      ],+      "box": [+        111.1,+        67.5214,+        112.9,+        68.8786+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "6eec7c8c-b114-48fa-b0ea-e30e5622cd9a",+      "orderGroup": null,+      "order": null,+      "position": [+        118.0,+        53.005+      ],+      "box": [+        117.119048,+        52.3264,+        118.880953,+        53.6836+      ],+      "font": 0.8,+      "score": 79.55999999999999+    },+    {+      "id": "ce542e0b-1cb1-4200-add3-10ae4b974c6d",+      "orderGroup": null,+      "order": null,+      "position": [+        103.0,+        81.3+      ],+      "box": [+        101.814286,+        80.6214,+        104.185715,+        81.9786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "041df11e-5a82-4250-8de0-ddd630542bc5",+      "orderGroup": null,+      "order": null,+      "position": [+        115.125,+        82.6+      ],+      "box": [+        113.939286,+        81.9214,+        116.310715,+        83.2786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "f8e2ba29-bbab-4822-b2bf-502decdb1b25",+      "orderGroup": null,+      "order": null,+      "position": [+        130.0,+        61.364999999999995+      ],+      "box": [+        129.1,+        60.6864,+        130.9,+        62.0436+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "4682444d-7c31-41f3-9731-06d633c60d26",+      "orderGroup": null,+      "order": null,+      "position": [+        114.8,+        77.0+      ],+      "box": [+        113.9,+        76.3214,+        115.7,+        77.6786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "a874d2fe-96f0-4016-aa96-0799c8de534b",+      "orderGroup": null,+      "order": null,+      "position": [+        99.0,+        77.2+      ],+      "box": [+        98.3214,+        76.014285,+        99.6786,+        78.385714+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "02a1d7f7-e90c-4fad-9227-8281ee78c3cb",+      "orderGroup": null,+      "order": null,+      "position": [+        109.6,+        77.074999+      ],+      "box": [+        108.414286,+        76.396399,+        110.785715,+        77.753599+      ],+      "font": 0.8,+      "score": 78.9+    },+    {+      "id": "b45211b4-e6e4-4a47-9441-87727fe6fd64",+      "orderGroup": null,+      "order": null,+      "position": [+        136.55,+        79.45+      ],+      "box": [+        135.669048,+        78.7714,+        137.430953,+        80.1286+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "15897abb-7f5f-4e6d-9378-34673369b2cc",+      "orderGroup": null,+      "order": null,+      "position": [+        158.4,+        85.095+      ],+      "box": [+        157.519048,+        84.4164,+        159.280953,+        85.7736+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "467fe274-4352-4972-9a5e-17372bc9cbf3",+      "orderGroup": null,+      "order": null,+      "position": [+        112.6,+        55.605+      ],+      "box": [+        111.719048,+        54.9264,+        113.480953,+        56.2836+      ],+      "font": 0.8,+      "score": 79.34+    },+    {+      "id": "a0d52ca1-16de-4208-b39b-c8fdf84e62cf",+      "orderGroup": null,+      "order": null,+      "position": [+        145.20000000000002,+        56.145+      ],+      "box": [+        143.938095,+        55.4664,+        146.461905,+        56.8236+      ],+      "font": 0.8,+      "score": 79.34+    },+    {+      "id": "6d1b2c73-7108-4b30-9dce-a171ac6d7643",+      "orderGroup": null,+      "order": null,+      "position": [+        109.80499999999999,+        57.0+      ],+      "box": [+        108.924048,+        56.3214,+        110.685953,+        57.6786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "0c9fa42d-e6d5-452a-9edb-bc3abf640fe7",+      "orderGroup": null,+      "order": null,+      "position": [+        145.0,+        70.005+      ],+      "box": [+        144.119048,+        69.32639999999999,+        145.880953,+        70.6836+      ],+      "font": 0.8,+      "score": 79.34+    },+    {+      "id": "cddd0cbb-b43e-4efd-9c81-5b8267390f96",+      "orderGroup": null,+      "order": null,+      "position": [+        114.295,+        69.89999999999999+      ],+      "box": [+        113.033095,+        69.22139999999999,+        115.556905,+        70.5786+      ],+      "font": 0.8,+      "score": 79.30429891476295+    },+    {+      "id": "19129045-73b3-488b-812a-d5095866eb72",+      "orderGroup": null,+      "order": null,+      "position": [+        143.0,+        63.054998999999995+      ],+      "box": [+        142.119048,+        62.376399,+        143.880953,+        63.733599+      ],+      "font": 0.8,+      "score": 79.12+    },+    {+      "id": "1f561e31-ba45-4847-8d5b-29f39dc65539",+      "orderGroup": null,+      "order": null,+      "position": [+        105.0,+        47.295+      ],+      "box": [+        103.738095,+        46.6164,+        106.261905,+        47.9736+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "43d14d2f-8bad-43f5-abd8-5a463b26be8b",+      "orderGroup": null,+      "order": null,+      "position": [+        148.65,+        89.0+      ],+      "box": [+        147.75,+        88.3214,+        149.55,+        89.6786+      ],+      "font": 0.8,+      "score": 79.55999999999999+    },+    {+      "id": "af860ae5-b6eb-4305-8e51-c195525ee135",+      "orderGroup": null,+      "order": null,+      "position": [+        114.8,+        54.525+      ],+      "box": [+        113.919048,+        53.846399999999996,+        115.680953,+        55.2036+      ],+      "font": 0.8,+      "score": 79.34+    },+    {+      "id": "5ee24f21-b163-43e7-94ce-68702d14858b",+      "orderGroup": null,+      "order": null,+      "position": [+        114.8,+        78.80999899999999+      ],+      "box": [+        113.919048,+        78.131399,+        115.680953,+        79.488599+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "6daeae48-603c-4290-ac4c-b7d7cc7ed60a",+      "orderGroup": null,+      "order": null,+      "position": [+        117.6,+        55.145+      ],+      "box": [+        116.338095,+        54.4664,+        118.861905,+        55.8236+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "e6b40a59-df57-4840-91c2-7d20dfd7c1ba",+      "orderGroup": null,+      "order": null,+      "position": [+        140.0,+        72.345+      ],+      "box": [+        138.738095,+        71.6664,+        141.261905,+        73.0236+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "ee7bea54-c64a-4b8a-a4eb-981389727733",+      "orderGroup": null,+      "order": null,+      "position": [+        106.8,+        77.874999+      ],+      "box": [+        105.614286,+        77.196399,+        107.985715,+        78.55359899999999+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "9bae052c-b936-4554-8cde-cd8bd5d2a555",+      "orderGroup": null,+      "order": null,+      "position": [+        110.8,+        65.0+      ],+      "box": [+        109.538095,+        64.3214,+        112.061905,+        65.6786+      ],+      "font": 0.8,+      "score": 78.87821570700957+    },+    {+      "id": "502f1687-33d2-474e-adbb-f2f1fce43b97",+      "orderGroup": null,+      "order": null,+      "position": [+        104.2,+        77.874999+      ],+      "box": [+        103.014286,+        77.196399,+        105.385715,+        78.55359899999999+      ],+      "font": 0.8,+      "score": 79.68887301627792+    },+    {+      "id": "f3e401e7-f94c-4452-8812-6fb355d586bd",+      "orderGroup": null,+      "order": null,+      "position": [+        149.35,+        48.699999999999996+      ],+      "box": [+        148.08809499999998,+        48.0214,+        150.61190499999998,+        49.3786+      ],+      "font": 0.8,+      "score": 79.09291676236413+    },+    {+      "id": "152bf4a5-e958-4c93-a7e3-5d07cfe67710",+      "orderGroup": null,+      "order": null,+      "position": [+        141.0,+        80.95+      ],+      "box": [+        140.1,+        80.2714,+        141.9,+        81.6286+      ],+      "font": 0.8,+      "score": 78.67999999999999+    },+    {+      "id": "67ceea30-d266-48ae-aed5-387ec466bc94",+      "orderGroup": null,+      "order": null,+      "position": [+        114.0,+        86.725+      ],+      "box": [+        113.119047,+        86.0464,+        114.880952,+        87.4036+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "d07dd9ae-b16f-44f6-b61a-c9a3dfd1ce35",+      "orderGroup": null,+      "order": null,+      "position": [+        153.0,+        34.504999999999995+      ],+      "box": [+        151.738095,+        33.8264,+        154.261905,+        35.1836+      ],+      "font": 0.8,+      "score": 79.34+    },+    {+      "id": "4280b491-8556-42f8-88a2-9ce96f3d5b33",+      "orderGroup": null,+      "order": null,+      "position": [+        155.0,+        56.935+      ],+      "box": [+        153.833333,+        56.2564,+        156.166667,+        57.6136+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "71c3e1f8-5c91-4dc9-a6fb-abfa82e43af4",+      "orderGroup": null,+      "order": null,+      "position": [+        101.574999,+        86.4+      ],+      "box": [+        100.389285,+        85.7214,+        102.760714,+        87.07860000000001+      ],+      "font": 0.8,+      "score": 78.67999999999999+    },+    {+      "id": "fed1860d-d8e6-4974-9402-b232c0f803d3",+      "orderGroup": null,+      "order": null,+      "position": [+        123.7,+        88.125+      ],+      "box": [+        122.8,+        87.4464,+        124.6,+        88.8036+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "cff62566-f931-47a1-a5f4-f1c066119c85",+      "orderGroup": null,+      "order": null,+      "position": [+        135.4,+        40.195+      ],+      "box": [+        134.138095,+        39.516400000000004,+        136.661905,+        40.8736+      ],+      "font": 0.8,+      "score": 78.39837582435828+    },+    {+      "id": "33919523-d8f6-428f-87fc-24ba1f507380",+      "orderGroup": null,+      "order": null,+      "position": [+        111.1,+        66.599999+      ],+      "box": [+        109.838095,+        65.92139900000001,+        112.361905,+        67.278599+      ],+      "font": 0.8,+      "score": 78.87821570700957+    },+    {+      "id": "02d01ea2-ca12-45f5-a79b-e092bfae9931",+      "orderGroup": null,+      "order": null,+      "position": [+        148.6,+        56.145+      ],+      "box": [+        147.338095,+        55.4664,+        149.861905,+        56.8236+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "ff470d45-b482-4433-87f7-235978817052",+      "orderGroup": null,+      "order": null,+      "position": [+        130.0,+        91.355+      ],+      "box": [+        128.738095,+        90.6764,+        131.261905,+        92.0336+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "c446529f-2a16-43d3-9c8b-504ef88b9904",+      "orderGroup": null,+      "order": null,+      "position": [+        157.0,+        94.0+      ],+      "box": [+        156.119048,+        93.3214,+        157.880953,+        94.6786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "8253e28a-9698-476d-a2ec-ccb9bf148e52",+      "orderGroup": null,+      "order": null,+      "position": [+        119.9,+        85.925+      ],+      "box": [+        119.0,+        85.2464,+        120.8,+        86.6036+      ],+      "font": 0.8,+      "score": 78.02000000000001+    },+    {+      "id": "a6abfc71-d44c-4806-b644-dd8c7b7838ab",+      "orderGroup": null,+      "order": null,+      "position": [+        135.395,+        82.0+      ],+      "box": [+        134.514048,+        81.3214,+        136.275953,+        82.6786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "34b23b3d-0858-4068-b9ce-b11234d6b2c5",+      "orderGroup": null,+      "order": null,+      "position": [+        132.499999,+        87.5+      ],+      "box": [+        131.619047,+        86.8214,+        133.380952,+        88.1786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "53f82256-9a38-4a4e-8a0d-0b1b406de79a",+      "orderGroup": null,+      "order": null,+      "position": [+        127.1,+        89.6+      ],+      "box": [+        126.219048,+        88.9214,+        127.980953,+        90.2786+      ],+      "font": 0.8,+      "score": 79.55999999999999+    },+    {+      "id": "cb64989a-bf4a-42a5-9e22-261b87e2006f",+      "orderGroup": null,+      "order": null,+      "position": [+        158.905,+        36.755+      ],+      "box": [+        158.119286,+        36.0764,+        159.690715,+        37.4336+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "0b76d5a9-ab18-4ae4-af5c-7025b985c1b9",+      "orderGroup": null,+      "order": null,+      "position": [+        101.574999,+        82.8+      ],+      "box": [+        100.389285,+        82.12140000000001,+        102.760714,+        83.4786+      ],+      "font": 0.8,+      "score": 79.78+    },+    {+      "id": "2e2b5b1d-2feb-4b2f-b79f-56a066ec6d0c",+      "orderGroup": null,+      "order": null,+      "position": [+        153.655,+        89.5+      ],+      "box": [+        152.774048,+        88.8214,+        154.535953,+        90.1786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "f62355e7-ebda-4168-8671-541c9755256d",+      "orderGroup": null,+      "order": null,+      "position": [+        153.095,+        87.2+      ],+      "box": [+        151.833095,+        86.5214,+        154.35690499999998,+        87.8786+      ],+      "font": 0.8,+      "score": 79.30429891476295+    },+    {+      "id": "77921fa7-6abc-44da-8b42-36a9c0dda62e",+      "orderGroup": null,+      "order": null,+      "position": [+        123.595,+        59.6+      ],+      "box": [+        122.333095,+        58.9214,+        124.856905,+        60.2786+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "441eea8f-4753-4892-ac4b-7bf5f1631e93",+      "orderGroup": null,+      "order": null,+      "position": [+        106.8,+        87.125+      ],+      "box": [+        105.233333,+        86.4464,+        108.366667,+        87.8036+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "f3a62d63-1cb4-4c7e-8845-0cd527c57d03",+      "orderGroup": null,+      "order": null,+      "position": [+        99.0,+        80.0+      ],+      "box": [+        98.3214,+        78.814285,+        99.6786,+        81.185714+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "890791b8-3759-4129-91da-8743843dd639",+      "orderGroup": null,+      "order": null,+      "position": [+        111.0,+        43.495+      ],+      "box": [+        110.1,+        42.8164,+        111.9,+        44.1736+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "ecd12040-3a0e-4e8b-bbb3-bc3cbf63cec5",+      "orderGroup": null,+      "order": null,+      "position": [+        144.0,+        91.675+      ],+      "box": [+        143.195238,+        90.9964,+        144.804762,+        92.3536+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "371c82c3-bde1-47ed-b52a-01c8bbf88931",+      "orderGroup": null,+      "order": null,+      "position": [+        104.0,+        64.074999+      ],+      "box": [+        102.433333,+        63.396399,+        105.566667,+        64.753599+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "9a96d2fb-bd0b-493a-b091-7d66799e005f",+      "orderGroup": null,+      "order": null,+      "position": [+        151.0,+        69.405+      ],+      "box": [+        150.119048,+        68.7264,+        151.880953,+        70.0836+      ],+      "font": 0.8,+      "score": 80.0+    },+    {+      "id": "f76895e8-1dcd-4249-b724-95fd015cf369",+      "orderGroup": null,+      "order": null,+      "position": [+        129.0,+        35.0+      ],+      "box": [+        117.779761,+        34.15175,+        140.220239,+        35.84825+      ],+      "font": 1.0,+      "score": 100.0+    }+  ],+  "unresolved": [],+  "score": 7501.136023178863,+  "method": "bounded mixed-integer candidate search; finite candidate set only",+  "solverStatus": "Optimization terminated successfully. (HiGHS Status 7: Optimal)",+  "boundsSource": "v85 saved outline; rectangular screen excludes rounded-corner proof",+  "nativeVerified": false+}\ No newline at end of file
design/silkscreen-review/native-commit.jsonadded+20
@@ -0,0 +1,20 @@+{+  "_hint": "This KiCad IPC server can read fields but cannot update Field payloads. The transaction rolled back. Do not retry as a transient failure or replace whole footprints. On KiCad 10.0.5, use an explicitly disclosed saved-file edit on a saved copy, then reload the exact editor and verify both views, DRC and preservation; that is not a live IPC edit.",+  "_reportIssues": "THIS MAY BE A KICAD BRIDGE BUG. Check for a duplicate with `adom-wiki issue list adom/kicad-bridge`, then file: `adom-wiki issue create adom/kicad-bridge --title \"<symptom>\" --category bug-report --body \"<what you ran, expected, got, the verbatim response JSON, bridge version, OS>\"`. An ab-core problem (relay, lifecycle, identity) belongs on adom/adom-bridge instead. Had to work around it? Say so in the issue. Fixed it yourself? The source is this page's repo: `adom-wiki repo clone adom/kicad-bridge`, build with `cargo test` and `cargo build --release --target x86_64-pc-windows-gnu`, then send a branch PR off the current head: `adom-wiki branch create adom/kicad-bridge fix/<what>`, `adom-wiki repo push adom/kicad-bridge --branch fix/<what> --files ...`, `adom-wiki pr create adom/kicad-bridge --from fix/<what> --title ...` (skill kicad-bridge-contributing; PRs are merged within minutes in business hours).",+  "_timeoutHint": "ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure — the work usually keeps running on the bridge. Poll `kicad_status` until it reports done.",+  "bridgeVersion": "1.0.55",+  "durationMs": 13964,+  "elapsedMs": 13934,+  "error": "item request status error `ISC_INVALID_TYPE: Tried to create an item of type PCB_FIELD_T, which is unhandled`",+  "errorCode": "native_field_update_unsupported",+  "kicadVersion": "10.0.5",+  "mechanism": "ipc",+  "mutated": false,+  "output": "{\"_hint\":\"This KiCad IPC server can read fields but cannot update Field payloads. The transaction rolled back. Do not retry as a transient failure or replace whole footprints. On KiCad 10.0.5, use an explicitly disclosed saved-file edit on a saved copy, then reload the exact editor and verify both views, DRC and preservation; that is not a live IPC edit.\",\"_reportIssues\":\"THIS MAY BE A KICAD BRIDGE BUG. Check for a duplicate with `adom-wiki issue list adom/kicad-bridge`, then file: `adom-wiki issue create adom/kicad-bridge --title \\\"<symptom>\\\" --category bug-report --body \\\"<what you ran, expected, got, the verbatim response JSON, bridge version, OS>\\\"`. An ab-core problem (relay, lifecycle, identity) belongs on adom/adom-bridge instead. Had to work around it? Say so in the issue. Fixed it yourself? The source is this page's repo: `adom-wiki repo clone adom/kicad-bridge`, build with `cargo test` and `cargo build --release --target x86_64-pc-windows-gnu`, then send a branch PR off the current head: `adom-wiki branch create adom/kicad-bridge fix/<what>`, `adom-wiki repo push adom/kicad-bridge --branch fix/<what> --files ...`, `adom-wiki pr create adom/kicad-bridge --from fix/<what> --title ...` (skill kicad-bridge-contributing; PRs are merged within minutes in business hours).\",\"_timeoutHint\":\"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure — the work usually keeps running on the bridge. Poll `kicad_status` until it reports done.\",\"bridgeVersion\":\"1.0.55\",\"elapsedMs\":13934,\"error\":\"item request status error `ISC_INVALID_TYPE: Tried to create an item of type PCB_FIELD_T, which is unhandled`\",\"errorCode\":\"native_field_update_unsupported\",\"kicadVersion\":\"10.0.5\",\"mechanism\":\"ipc\",\"mutated\":false,\"retryable\":false,\"statusVerb\":\"kicad_status\",\"success\":false,\"timeoutSeconds\":130}",+  "retryable": false,+  "schemaVersion": 1,+  "status": "error",+  "statusVerb": "kicad_status",+  "success": false,+  "timeoutSeconds": 130+}
design/silkscreen-review/native-dry-run-complete.jsonadded+487
@@ -0,0 +1,487 @@+{+  "_timeoutHint": "ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure — the work usually keeps running on the bridge. Poll `kicad_status` until it reports done.",+  "bridgeVersion": "1.0.55",+  "drc": {+    "clean": false,+    "errors": 0,+    "possiblyTruncatedViolationTypes": [],+    "projectRulesCopied": [+      "C:/Users/john/adom-projects/adom-custom-electronic-load/kicad/adom-custom-electronic-load.kicad_pro",+      "C:/Users/john/adom-projects/adom-custom-electronic-load/kicad/adom-custom-electronic-load.kicad_dru"+    ],+    "source": "live-editor-snapshot",+    "summary": {+      "clean": true,+      "errors": 0,+      "excluded": 0,+      "first": [+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint MP2"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint J6"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint MP3"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Load'",+          "items": [+            "Footprint RSH1"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint MP1"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint J5"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint J2"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint J4"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint MP4"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Load'",+          "items": [+            "Footprint U2"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Load'",+          "items": [+            "Footprint Q1"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint J3"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Load'",+          "items": [+            "Footprint U4"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Load'",+          "items": [+            "Footprint D1"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint J7"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Load'",+          "items": [+            "Footprint L1"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        },+        {+          "description": "The current configuration does not include the footprint library 'Molecule'",+          "items": [+            "Footprint J1"+          ],+          "severity": "warning",+          "type": "lib_footprint_issues"+        }+      ],+      "kicadVersion": "10.0.5",+      "source": "adom-custom-electronic-load.kicad_pcb",+      "unconnected": 0,+      "warnings": 17+    },+    "unconnected": 0,+    "unconnectedCountIsLowerBound": false,+    "unconnectedItems": [],+    "unconnectedReportMayBeTruncated": false,+    "violationReportMayBeTruncated": false,+    "violations": [+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint MP2",+            "pos": {+              "x": 160.0,+              "y": 100.0+            },+            "uuid": "08489986-63c7-4cfe-ba45-67384ef79934"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint J6",+            "pos": {+              "x": 140.0,+              "y": 100.0+            },+            "uuid": "0f2f475f-8a1f-4250-9e5f-96a617ceb70b"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint MP3",+            "pos": {+              "x": 100.0,+              "y": 32.0+            },+            "uuid": "161d93fc-6ce8-463d-9fa1-016137c7ae90"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Load'",+        "items": [+          {+            "description": "Footprint RSH1",+            "pos": {+              "x": 138.0,+              "y": 85.0+            },+            "uuid": "1b28c787-9318-4dde-92f8-6e710aa3f214"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint MP1",+            "pos": {+              "x": 100.0,+              "y": 100.0+            },+            "uuid": "25251d59-4aaa-4d73-8a60-f16f3fee910a"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint J5",+            "pos": {+              "x": 136.0,+              "y": 100.0+            },+            "uuid": "2efeacb9-e84f-4884-8900-42f70fb8d64e"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint J2",+            "pos": {+              "x": 112.0,+              "y": 100.0+            },+            "uuid": "30ee7a6c-6b1c-4933-ba62-4f7a83e50956"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint J4",+            "pos": {+              "x": 124.0,+              "y": 100.0+            },+            "uuid": "3bb8b85a-c230-405c-9d0a-dfd2caaa5eb9"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint MP4",+            "pos": {+              "x": 160.0,+              "y": 32.0+            },+            "uuid": "515ee778-8175-412f-b3bf-3b8e5b10660b"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Load'",+        "items": [+          {+            "description": "Footprint U2",+            "pos": {+              "x": 118.0,+              "y": 66.0+            },+            "uuid": "6de86714-f970-4490-9f2b-5fb47eb0b141"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Load'",+        "items": [+          {+            "description": "Footprint Q1",+            "pos": {+              "x": 130.0,+              "y": 82.0+            },+            "uuid": "73a2faaf-cc2a-4f1e-88f6-0bab37687cdc"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint J3",+            "pos": {+              "x": 120.0,+              "y": 100.0+            },+            "uuid": "8730c443-01a7-40e8-a338-20bb4d4719de"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Load'",+        "items": [+          {+            "description": "Footprint U4",+            "pos": {+              "x": 141.0,+              "y": 77.0+            },+            "uuid": "b585e065-e8ac-43c3-9bea-a846c5f7a747"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Load'",+        "items": [+          {+            "description": "Footprint D1",+            "pos": {+              "x": 114.0,+              "y": 91.0+            },+            "uuid": "bc23242f-eb25-4d36-9f57-69a59e12037d"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint J7",+            "pos": {+              "x": 144.0,+              "y": 100.0+            },+            "uuid": "e8f5ce02-a259-45e9-a4f1-ef182fb58bb6"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Load'",+        "items": [+          {+            "description": "Footprint L1",+            "pos": {+              "x": 144.0,+              "y": 95.6+            },+            "uuid": "f710bbae-8af4-4faf-8c03-b1959083aa62"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      },+      {+        "description": "The current configuration does not include the footprint library 'Molecule'",+        "items": [+          {+            "description": "Footprint J1",+            "pos": {+              "x": 108.0,+              "y": 100.0+            },+            "uuid": "fca7a827-0407-443b-9729-c18bb9614a8c"+          }+        ],+        "severity": "warning",+        "type": "lib_footprint_issues"+      }+    ],+    "warnings": 17,+    "zonesRefilled": true+  },+  "durationMs": 14430,+  "elapsedMs": 14366,+  "error": "",+  "mechanism": "ipc",+  "mutated": false,+  "output": "{\"_timeoutHint\":\"ab waits up to 130s for this verb before the request times out. If it's a long operation (cloud open / download / export), DON'T treat a timeout as failure — the work usually keeps running on the bridge. Poll `kicad_status` until it reports done.\",\"bridgeVersion\":\"1.0.55\",\"drc\":{\"clean\":false,\"errors\":0,\"possiblyTruncatedViolationTypes\":[],\"projectRulesCopied\":[\"C:\\\\Users\\\\john\\\\adom-projects\\\\adom-custom-electronic-load\\\\kicad\\\\adom-custom-electronic-load.kicad_pro\",\"C:\\\\Users\\\\john\\\\adom-projects\\\\adom-custom-electronic-load\\\\kicad\\\\adom-custom-electronic-load.kicad_dru\"],\"source\":\"live-editor-snapshot\",\"summary\":{\"clean\":true,\"errors\":0,\"excluded\":0,\"first\":[{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint MP2\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint J6\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint MP3\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[\"Footprint RSH1\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint MP1\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint J5\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint J2\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint J4\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint MP4\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[\"Footprint U2\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[\"Footprint Q1\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint J3\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[\"Footprint U4\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[\"Footprint D1\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint J7\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[\"Footprint L1\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[\"Footprint J1\"],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"}],\"kicadVersion\":\"10.0.5\",\"source\":\"adom-custom-electronic-load.kicad_pcb\",\"unconnected\":0,\"warnings\":17},\"unconnected\":0,\"unconnectedCountIsLowerBound\":false,\"unconnectedItems\":[],\"unconnectedReportMayBeTruncated\":false,\"violationReportMayBeTruncated\":false,\"violations\":[{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint MP2\",\"pos\":{\"x\":160.0,\"y\":100.0},\"uuid\":\"08489986-63c7-4cfe-ba45-67384ef79934\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint J6\",\"pos\":{\"x\":140.0,\"y\":100.0},\"uuid\":\"0f2f475f-8a1f-4250-9e5f-96a617ceb70b\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint MP3\",\"pos\":{\"x\":100.0,\"y\":32.0},\"uuid\":\"161d93fc-6ce8-463d-9fa1-016137c7ae90\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[{\"description\":\"Footprint RSH1\",\"pos\":{\"x\":138.0,\"y\":85.0},\"uuid\":\"1b28c787-9318-4dde-92f8-6e710aa3f214\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint MP1\",\"pos\":{\"x\":100.0,\"y\":100.0},\"uuid\":\"25251d59-4aaa-4d73-8a60-f16f3fee910a\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint J5\",\"pos\":{\"x\":136.0,\"y\":100.0},\"uuid\":\"2efeacb9-e84f-4884-8900-42f70fb8d64e\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint J2\",\"pos\":{\"x\":112.0,\"y\":100.0},\"uuid\":\"30ee7a6c-6b1c-4933-ba62-4f7a83e50956\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint J4\",\"pos\":{\"x\":124.0,\"y\":100.0},\"uuid\":\"3bb8b85a-c230-405c-9d0a-dfd2caaa5eb9\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint MP4\",\"pos\":{\"x\":160.0,\"y\":32.0},\"uuid\":\"515ee778-8175-412f-b3bf-3b8e5b10660b\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[{\"description\":\"Footprint U2\",\"pos\":{\"x\":118.0,\"y\":66.0},\"uuid\":\"6de86714-f970-4490-9f2b-5fb47eb0b141\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[{\"description\":\"Footprint Q1\",\"pos\":{\"x\":130.0,\"y\":82.0},\"uuid\":\"73a2faaf-cc2a-4f1e-88f6-0bab37687cdc\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint J3\",\"pos\":{\"x\":120.0,\"y\":100.0},\"uuid\":\"8730c443-01a7-40e8-a338-20bb4d4719de\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[{\"description\":\"Footprint U4\",\"pos\":{\"x\":141.0,\"y\":77.0},\"uuid\":\"b585e065-e8ac-43c3-9bea-a846c5f7a747\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[{\"description\":\"Footprint D1\",\"pos\":{\"x\":114.0,\"y\":91.0},\"uuid\":\"bc23242f-eb25-4d36-9f57-69a59e12037d\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint J7\",\"pos\":{\"x\":144.0,\"y\":100.0},\"uuid\":\"e8f5ce02-a259-45e9-a4f1-ef182fb58bb6\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Load'\",\"items\":[{\"description\":\"Footprint L1\",\"pos\":{\"x\":144.0,\"y\":95.6},\"uuid\":\"f710bbae-8af4-4faf-8c03-b1959083aa62\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"},{\"description\":\"The current configuration does not include the footprint library 'Molecule'\",\"items\":[{\"description\":\"Footprint J1\",\"pos\":{\"x\":108.0,\"y\":100.0},\"uuid\":\"fca7a827-0407-443b-9729-c18bb9614a8c\"}],\"severity\":\"warning\",\"type\":\"lib_footprint_issues\"}],\"warnings\":17,\"zonesRefilled\":true},\"elapsedMs\":14366,\"mechanism\":\"ipc\",\"mutated\":false,\"revision\":\"180099c4bad21a5898501fd29fb1046d98aa569b36debb6ad76e01cc53fb1150\",\"statusVerb\":\"kicad_status\",\"success\":true,\"timeoutSeconds\":130,\"updatedIds\":[\"1ce81650-92db-43c0-88c6-d23438670a1a\",\"6524bf03-6551-415b-bad0-892b5edaa2a4\",\"e4da2abc-d250-4057-9f86-3effd5c4db1a\",\"c54b3411-713b-480c-afea-7033d7bcd219\",\"d976b544-787e-4024-a3fa-a62747234064\",\"2c5597b9-8015-4fac-b423-b55d8f2aa0cc\",\"00a34917-0ba0-4aec-9c08-0f5be0f6391e\",\"306174f2-10fd-4381-899b-4548e35ec95a\",\"dfdced71-9c34-4407-8d93-32072ef22067\",\"05a4263a-92e3-401f-8488-009a951cf2be\",\"7547689d-f002-4c97-98bd-6f29e8a04cbc\",\"d0d16864-659a-48a6-8e5a-524578862195\",\"542a6fec-84fe-435e-849b-ecccbab250d2\",\"444b539b-5f85-4830-83be-44c54b3d5cbe\",\"d929a47c-6b48-42f4-818e-39833d50b87e\",\"a2e65e7c-23ef-4d77-a660-7362b73a5cc9\",\"dba04e31-9229-4466-8eb7-9e8a0cab01c6\",\"4ed4c592-811f-4bcd-aaba-bb7f55be855e\",\"e3e578c7-d85b-4b1d-b5da-fab2b537cfa0\",\"c37e5998-7426-4b8b-b779-2138e4963060\",\"a5f86ec5-e2f2-432b-9209-a14df6a50419\",\"8038fb1e-c04a-4f50-b7ca-4d6705ea1901\",\"c923c824-56c3-4707-8e83-3d90fb9159a2\",\"3ab6ccda-d5ec-462f-8cc5-9bf0a74824c3\",\"6eec7c8c-b114-48fa-b0ea-e30e5622cd9a\",\"02a1d7f7-e90c-4fad-9227-8281ee78c3cb\",\"b45211b4-e6e4-4a47-9441-87727fe6fd64\",\"467fe274-4352-4972-9a5e-17372bc9cbf3\",\"a0d52ca1-16de-4208-b39b-c8fdf84e62cf\",\"0c9fa42d-e6d5-452a-9edb-bc3abf640fe7\",\"cddd0cbb-b43e-4efd-9c81-5b8267390f96\",\"19129045-73b3-488b-812a-d5095866eb72\",\"43d14d2f-8bad-43f5-abd8-5a463b26be8b\",\"af860ae5-b6eb-4305-8e51-c195525ee135\",\"ee7bea54-c64a-4b8a-a4eb-981389727733\",\"9bae052c-b936-4554-8cde-cd8bd5d2a555\",\"502f1687-33d2-474e-adbb-f2f1fce43b97\",\"f3e401e7-f94c-4452-8812-6fb355d586bd\",\"152bf4a5-e958-4c93-a7e3-5d07cfe67710\",\"d07dd9ae-b16f-44f6-b61a-c9a3dfd1ce35\",\"71c3e1f8-5c91-4dc9-a6fb-abfa82e43af4\",\"fed1860d-d8e6-4974-9402-b232c0f803d3\",\"cff62566-f931-47a1-a5f4-f1c066119c85\",\"33919523-d8f6-428f-87fc-24ba1f507380\",\"8253e28a-9698-476d-a2ec-ccb9bf148e52\",\"53f82256-9a38-4a4e-8a0d-0b1b406de79a\",\"0b76d5a9-ab18-4ae4-af5c-7025b985c1b9\",\"f62355e7-ebda-4168-8671-541c9755256d\"]}",+  "revision": "180099c4bad21a5898501fd29fb1046d98aa569b36debb6ad76e01cc53fb1150",+  "schemaVersion": 1,+  "status": "ok",+  "statusVerb": "kicad_status",+  "success": true,+  "timeoutSeconds": 130,+  "updatedIds": [+    "1ce81650-92db-43c0-88c6-d23438670a1a",+    "6524bf03-6551-415b-bad0-892b5edaa2a4",+    "e4da2abc-d250-4057-9f86-3effd5c4db1a",+    "c54b3411-713b-480c-afea-7033d7bcd219",+    "d976b544-787e-4024-a3fa-a62747234064",+    "2c5597b9-8015-4fac-b423-b55d8f2aa0cc",+    "00a34917-0ba0-4aec-9c08-0f5be0f6391e",+    "306174f2-10fd-4381-899b-4548e35ec95a",+    "dfdced71-9c34-4407-8d93-32072ef22067",+    "05a4263a-92e3-401f-8488-009a951cf2be",+    "7547689d-f002-4c97-98bd-6f29e8a04cbc",+    "d0d16864-659a-48a6-8e5a-524578862195",+    "542a6fec-84fe-435e-849b-ecccbab250d2",+    "444b539b-5f85-4830-83be-44c54b3d5cbe",+    "d929a47c-6b48-42f4-818e-39833d50b87e",+    "a2e65e7c-23ef-4d77-a660-7362b73a5cc9",+    "dba04e31-9229-4466-8eb7-9e8a0cab01c6",+    "4ed4c592-811f-4bcd-aaba-bb7f55be855e",+    "e3e578c7-d85b-4b1d-b5da-fab2b537cfa0",+    "c37e5998-7426-4b8b-b779-2138e4963060",+    "a5f86ec5-e2f2-432b-9209-a14df6a50419",+    "8038fb1e-c04a-4f50-b7ca-4d6705ea1901",+    "c923c824-56c3-4707-8e83-3d90fb9159a2",+    "3ab6ccda-d5ec-462f-8cc5-9bf0a74824c3",+    "6eec7c8c-b114-48fa-b0ea-e30e5622cd9a",+    "02a1d7f7-e90c-4fad-9227-8281ee78c3cb",+    "b45211b4-e6e4-4a47-9441-87727fe6fd64",+    "467fe274-4352-4972-9a5e-17372bc9cbf3",+    "a0d52ca1-16de-4208-b39b-c8fdf84e62cf",+    "0c9fa42d-e6d5-452a-9edb-bc3abf640fe7",+    "cddd0cbb-b43e-4efd-9c81-5b8267390f96",+    "19129045-73b3-488b-812a-d5095866eb72",+    "43d14d2f-8bad-43f5-abd8-5a463b26be8b",+    "af860ae5-b6eb-4305-8e51-c195525ee135",+    "ee7bea54-c64a-4b8a-a4eb-981389727733",+    "9bae052c-b936-4554-8cde-cd8bd5d2a555",+    "502f1687-33d2-474e-adbb-f2f1fce43b97",+    "f3e401e7-f94c-4452-8812-6fb355d586bd",+    "152bf4a5-e958-4c93-a7e3-5d07cfe67710",+    "d07dd9ae-b16f-44f6-b61a-c9a3dfd1ce35",+    "71c3e1f8-5c91-4dc9-a6fb-abfa82e43af4",+    "fed1860d-d8e6-4974-9402-b232c0f803d3",+    "cff62566-f931-47a1-a5f4-f1c066119c85",+    "33919523-d8f6-428f-87fc-24ba1f507380",+    "8253e28a-9698-476d-a2ec-ccb9bf148e52",+    "53f82256-9a38-4a4e-8a0d-0b1b406de79a",+    "0b76d5a9-ab18-4ae4-af5c-7025b985c1b9",+    "f62355e7-ebda-4168-8671-541c9755256d"+  ]+}
design/silkscreen-review/review.jsonadded+474
@@ -0,0 +1,474 @@+{+  "status": "read-only-conservative-screen-not-acceptance",+  "boardSha256": "1681eb90e49f4f229afe89bb75ff1738b7503907a52cd174e8b3d64b120082f4",+  "nativeRevision": "180099c4bad21a5898501fd29fb1046d98aa569b36debb6ad76e01cc53fb1150",+  "maskHelperSha256": "13856d3c97c9cdf4747a3bdec714a5d9f11bcf93ce480290115ff8fb25bf3b5c",+  "nativeTextCount": 94,+  "obstacleCount": 1025,+  "collisions": [+    {+      "reference": "U6",+      "text": "U6",+      "mark": "1ce81650-92db-43c0-88c6-d23438670a1a",+      "obstacle": "via:12",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "U9",+      "text": "U9",+      "mark": "e4da2abc-d250-4057-9f86-3effd5c4db1a",+      "obstacle": "via:126",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "RSH1",+      "text": "RSH1",+      "mark": "c54b3411-713b-480c-afea-7033d7bcd219",+      "obstacle": "via:138",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "RSH1",+      "text": "RSH1",+      "mark": "c54b3411-713b-480c-afea-7033d7bcd219",+      "obstacle": "via:154",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R20",+      "text": "R20",+      "mark": "2c5597b9-8015-4fac-b423-b55d8f2aa0cc",+      "obstacle": "via:217",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R38",+      "text": "R38",+      "mark": "00a34917-0ba0-4aec-9c08-0f5be0f6391e",+      "obstacle": "via:101",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R38",+      "text": "R38",+      "mark": "00a34917-0ba0-4aec-9c08-0f5be0f6391e",+      "obstacle": "via:196",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R34",+      "text": "R34",+      "mark": "306174f2-10fd-4381-899b-4548e35ec95a",+      "obstacle": "via:43",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R5",+      "text": "R5",+      "mark": "dfdced71-9c34-4407-8d93-32072ef22067",+      "obstacle": "via:5",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R31",+      "text": "R31",+      "mark": "7547689d-f002-4c97-98bd-6f29e8a04cbc",+      "obstacle": "U1:pad:24:23",+      "kind": "pad-mask-or-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R31",+      "text": "R31",+      "mark": "7547689d-f002-4c97-98bd-6f29e8a04cbc",+      "obstacle": "via:244",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R31",+      "text": "R31",+      "mark": "7547689d-f002-4c97-98bd-6f29e8a04cbc",+      "obstacle": "via:245",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R10",+      "text": "R10",+      "mark": "d0d16864-659a-48a6-8e5a-524578862195",+      "obstacle": "via:239",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R25",+      "text": "R25",+      "mark": "444b539b-5f85-4830-83be-44c54b3d5cbe",+      "obstacle": "via:39",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R8",+      "text": "R8",+      "mark": "a2e65e7c-23ef-4d77-a660-7362b73a5cc9",+      "obstacle": "via:268",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R8",+      "text": "R8",+      "mark": "a2e65e7c-23ef-4d77-a660-7362b73a5cc9",+      "obstacle": "via:272",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R16",+      "text": "R16",+      "mark": "c37e5998-7426-4b8b-b779-2138e4963060",+      "obstacle": "via:90",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "U10",+      "text": "U10",+      "mark": "c923c824-56c3-4707-8e83-3d90fb9159a2",+      "obstacle": "via:103",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "U10",+      "text": "U10",+      "mark": "c923c824-56c3-4707-8e83-3d90fb9159a2",+      "obstacle": "via:302",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "U2",+      "text": "U2",+      "mark": "3ab6ccda-d5ec-462f-8cc5-9bf0a74824c3",+      "obstacle": "via:274",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R3",+      "text": "R3",+      "mark": "6eec7c8c-b114-48fa-b0ea-e30e5622cd9a",+      "obstacle": "via:248",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "TP3",+      "text": "TP3",+      "mark": "02a1d7f7-e90c-4fad-9227-8281ee78c3cb",+      "obstacle": "via:168",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "C3",+      "text": "C3",+      "mark": "b45211b4-e6e4-4a47-9441-87727fe6fd64",+      "obstacle": "via:149",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R1",+      "text": "R1",+      "mark": "467fe274-4352-4972-9a5e-17372bc9cbf3",+      "obstacle": "via:8",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R14",+      "text": "R14",+      "mark": "a0d52ca1-16de-4208-b39b-c8fdf84e62cf",+      "obstacle": "via:87",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "C9",+      "text": "C9",+      "mark": "0c9fa42d-e6d5-452a-9edb-bc3abf640fe7",+      "obstacle": "via:131",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "C10",+      "text": "C10",+      "mark": "cddd0cbb-b43e-4efd-9c81-5b8267390f96",+      "obstacle": "via:73",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "C10",+      "text": "C10",+      "mark": "cddd0cbb-b43e-4efd-9c81-5b8267390f96",+      "obstacle": "via:156",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "C10",+      "text": "C10",+      "mark": "cddd0cbb-b43e-4efd-9c81-5b8267390f96",+      "obstacle": "via:264",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "C4",+      "text": "C4",+      "mark": "19129045-73b3-488b-812a-d5095866eb72",+      "obstacle": "via:82",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "U5",+      "text": "U5",+      "mark": "43d14d2f-8bad-43f5-abd8-5a463b26be8b",+      "obstacle": "via:19",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "D2",+      "text": "D2",+      "mark": "af860ae5-b6eb-4305-8e51-c195525ee135",+      "obstacle": "via:66",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "TP2",+      "text": "TP2",+      "mark": "ee7bea54-c64a-4b8a-a4eb-981389727733",+      "obstacle": "via:49",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "C12",+      "text": "C12",+      "mark": "9bae052c-b936-4554-8cde-cd8bd5d2a555",+      "obstacle": "via:150",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "C12",+      "text": "C12",+      "mark": "9bae052c-b936-4554-8cde-cd8bd5d2a555",+      "obstacle": "via:216",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "TP1",+      "text": "TP1",+      "mark": "502f1687-33d2-474e-adbb-f2f1fce43b97",+      "obstacle": "via:181",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R32",+      "text": "R32",+      "mark": "f3e401e7-f94c-4452-8812-6fb355d586bd",+      "obstacle": "U1:pad:19:18",+      "kind": "pad-mask-or-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R32",+      "text": "R32",+      "mark": "f3e401e7-f94c-4452-8812-6fb355d586bd",+      "obstacle": "U1:pad:20:19",+      "kind": "pad-mask-or-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R32",+      "text": "R32",+      "mark": "f3e401e7-f94c-4452-8812-6fb355d586bd",+      "obstacle": "via:240",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "U4",+      "text": "U4",+      "mark": "152bf4a5-e958-4c93-a7e3-5d07cfe67710",+      "obstacle": "via:124",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "U4",+      "text": "U4",+      "mark": "152bf4a5-e958-4c93-a7e3-5d07cfe67710",+      "obstacle": "via:163",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R29",+      "text": "R29",+      "mark": "d07dd9ae-b16f-44f6-b61a-c9a3dfd1ce35",+      "obstacle": "via:54",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "TP9",+      "text": "TP9",+      "mark": "71c3e1f8-5c91-4dc9-a6fb-abfa82e43af4",+      "obstacle": "via:176",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "C11",+      "text": "C11",+      "mark": "cff62566-f931-47a1-a5f4-f1c066119c85",+      "obstacle": "via:47",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R27",+      "text": "R27",+      "mark": "33919523-d8f6-428f-87fc-24ba1f507380",+      "obstacle": "via:150",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R27",+      "text": "R27",+      "mark": "33919523-d8f6-428f-87fc-24ba1f507380",+      "obstacle": "via:274",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R7",+      "text": "R7",+      "mark": "53f82256-9a38-4a4e-8a0d-0b1b406de79a",+      "obstacle": "via:173",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R35",+      "text": "R35",+      "mark": "f62355e7-ebda-4168-8671-541c9755256d",+      "obstacle": "via:48",+      "kind": "via-hole",+      "layer": "F.SilkS"+    },+    {+      "reference": "R35",+      "text": "R35",+      "mark": "f62355e7-ebda-4168-8671-541c9755256d",+      "obstacle": "via:180",+      "kind": "via-hole",+      "layer": "F.SilkS"+    }+  ],+  "labelPairs": [+    {+      "a": "TP6",+      "b": "TP5",+      "layer": "F.SilkS"+    }+  ],+  "passiveValuesNotOnSilkscreen": [+    "R33",+    "R11",+    "R21",+    "C15",+    "R30",+    "RSH1",+    "R20",+    "R38",+    "C16",+    "R23",+    "R24",+    "R34",+    "R5",+    "R22",+    "C1",+    "R31",+    "R10",+    "R26",+    "R25",+    "R19",+    "R8",+    "R37",+    "C5",+    "R13",+    "C18",+    "R16",+    "R28",+    "R36",+    "R4",+    "R3",+    "C3",+    "C6",+    "R1",+    "R14",+    "R2",+    "C9",+    "C10",+    "C4",+    "C17",+    "R9",+    "R17",+    "C14",+    "C12",+    "R32",+    "R29",+    "C11",+    "R27",+    "R15",+    "C13",+    "R6",+    "C2",+    "R7",+    "C7",+    "R35",+    "R18",+    "L1",+    "C8"+  ],+  "limits": [+    "Axis-aligned native text bounds and CAD body bounds can over-report collisions.",+    "Mask polygons use saved-board pad transforms; footprint field rotation is board-absolute. Native visual confirmation is still required.",+    "Existing line/arc artwork, exact hole envelopes outside mask, assembled heatsink/carrier occlusion, pin mapping, edge containment and clearances are not yet accepted.",+    "No native board edit, thermal gate or silkscreen gate completion."+  ]+}
design/silkscreen-review/saved-candidate-review.jsonadded+9
@@ -0,0 +1,9 @@+{+  "status": "isolated-saved-file-candidate",+  "sourceSha256": "1681eb90e49f4f229afe89bb75ff1738b7503907a52cd174e8b3d64b120082f4",+  "candidateSha256": "82c2fad50b3c2fb93b627df4a984bf7fe85724d73367e33e3d97206e0b752342",+  "fieldCount": 48,+  "onlySpecifiedPropertiesChanged": true,+  "nativeDRCRequired": true,+  "liveBoardChanged": false+}
design/silkscreen-review/silkscreen-candidate-drc.jsonadded+36
@@ -0,0 +1,36 @@+{
+    "$schema": "https://schemas.kicad.org/drc.v1.json",
+    "coordinate_units": "mm",
+    "date": "2026-10-10T17:46:30",
+    "ignored_checks": [
+        {
+            "description": "Footprint has no courtyard defined",
+            "key": "missing_courtyard"
+        },
+        {
+            "description": "Track endpoint not centered on via",
+            "key": "track_not_centered_on_via"
+        },
+        {
+            "description": "Tuning profile track geometries",
+            "key": "tuning_profile_track_geometries"
+        },
+        {
+            "description": "Footprint doesn't match symbol's footprint filters",
+            "key": "footprint_filters_mismatch"
+        },
+        {
+            "description": "Footprint component type doesn't match footprint pads",
+            "key": "footprint_type_mismatch"
+        }
+    ],
+    "included_severities": [
+        "error",
+        "warning"
+    ],
+    "kicad_version": "10.0.5",
+    "schematic_parity": [],
+    "source": "silkscreen-candidate.kicad_pcb",
+    "unconnected_items": [],
+    "violations": []
+}
docs/build-clips.md+12
@@ -213,3 +213,15 @@ The inventory now contains **89 raw takes and 33 reviewed excerpts**. Raw takes ## Native power-net walkthrough  [Eleven-second review, 3×](clips/power-net-review.mp4) · [Poster](clips/power-net-review.jpg). All six loaded nets selected and framed on unchanged v85. Review footage, not route creation or thermal acceptance. Take 92. Current inventory: **92 raw takes, 36 reviewed excerpts and 32 storyboard candidates**.++## Reference-label rework++Recorded solver-event replay of the earlier 93/94 proposal, explicitly labeled REPLAY; this is not a native edit.++<video width="100%" playsinline controls preload="metadata" poster="docs/clips/silkscreen-candidate-replay.jpg" src="docs/clips/silkscreen-candidate-replay.mp4"></video>++Native 3D review after the checked saved-file update, 4.5 seconds at 2x. The cooling assembly is absent and thermal remains open. The raw encoder timing warning is retained in the inventory.++<video width="100%" playsinline controls preload="metadata" poster="docs/clips/silkscreen-native-review.jpg" src="docs/clips/silkscreen-native-review.mp4"></video>++95 raw native takes, 38 reviewed excerpts and 34 storyboard candidates, with the solver replay separately indexed. Neither the failed live-field attempt nor the static portions are promoted as successful build action.
docs/clips/silkscreen-candidate-replay.jpgadded
⋯ 1 unchanged line ⋯
docs/clips/silkscreen-candidate-replay.mp4added
⋯ 1 unchanged line ⋯
docs/clips/silkscreen-native-review.jpgadded
⋯ 1 unchanged line ⋯
docs/clips/silkscreen-native-review.mp4added
⋯ 1 unchanged line ⋯
docs/completion-plan.md+5−3
@@ -5,12 +5,14 @@ Continue the custom electronic load through AIFlow, firmware/control-panel and m ## Resume from this state  - Project: `/home/adom/project/adom-custom-electronic-load`; AIFlow run `aiflow/run`, id `bfd48cdd114aa95e`; target AdomLapper, thread `adom-custom-load`.-- Saved PCB v85 / AIFlow board 21: SHA-256 `1681eb90e49f4f229afe89bb75ff1738b7503907a52cd174e8b3d64b120082f4`. Verify the live path/revision before any native mutation. Native DRC recorded zero errors, warnings and opens. Preserve all current net intent and successful native zone work.-- Current step: Thermal (13/19), twelve steps done. Current screen passed for the exact formal 35 µm inputs; thermal is failed. No finish or fabrication release.+- Saved reference-label revision / AIFlow board 22: SHA-256 `82c2fad50b3c2fb93b627df4a984bf7fe85724d73367e33e3d97206e0b752342`. Verify the live path/revision before any native mutation. Native DRC recorded zero errors, warnings and opens. Preserve all current net intent and successful native zone work.+- Current step: Thermal (13/19), twelve steps done. v85 current screen passed for the formal 35 µm inputs; copper is unchanged and exact-board22 Fields checks are running. Thermal is failed. No finish or fabrication release. - Two-layer, 5 W / 24 V / 3 A simultaneous envelope; first DUT 5 V / 1 A. Keep Q1 5.5 W guard allowance, 40 C ambient and 55 C case ceiling. Never lower a rating or limit to advance a gate. - [Finished-copper dependency](finished-copper-review.md): private 3rdPartyFab guide lists 0.5 oz without resolving starting versus finished copper. The user clarification is pending. Minimum finished surface and barrel copper require confirmation. At 17.5 µm, five nets fail the unchanged density limit. Do not adopt a stackup by assuming an answer. - Candidate 35 µm / 1.51 mm dielectric refinement passes six current screens at 0.1 mm, with maximum 58.14 A/mm². `checkpoints/stackup-v85/stackup-refinement-review.json` binds inputs. It does not replace the formal specification; board-only thermal still fails. +Native revision `f9a4b7701329a2d162dcc584c0c176d7926b7d24f47dc484fae85319848b1f02`; PCB HWND 41886014, linked 3D HWND 1124570. [Silkscreen rework](silkscreen-review.md) preserves all copper. A separate bottom reference/value solve is active; do not adopt incomplete proposals.+ ## Next engineering actions  1. Resolve the complete case-to-sink stack. [AlN stack study](../mechanical/aln-stack-study/README.md) now includes a drawing-led 20 × 14 × 0.635 mm pad and PEEK fastener with assumed grease gaps. It is not adopted. [Nominal PEEK fastener study](../mechanical/peek-fastener-study/README.md) clears current component and sensor geometry, but interface outline/hole, tolerances, preload, creep, vibration retention and tool access remain open. Do not substitute fit for qualification. [Sensor candidate](../mechanical/sensor-study/README.md) has routed leads and J10 mating parts; adhesive/contact and case-tracking lag remain unresolved.@@ -18,7 +20,7 @@ Continue the custom electronic load through AIFlow, firmware/control-panel and m 3. After supported physical/spec changes, rerun exact-input current and thermal acceptance. Continue fields, net tour, silkscreen, native 3D, finish and export in enforced order. Review-only manufacturing exports already exist; do not present them as released. 4. Complete firmware/calibration and molecule integration. Control panel 0.0.4 drives the digital rotor only from fresh valid hardware RPM; stale/disconnected means unknown/paused. Host tests pass; output remains locked and hardware unflashed. [Fan shutdown review](fan-shutdown-review.md) adds 240 synthetic scheduler/clock-wrap integration cases, all passing. Physical timing, sensor calibration and load accuracy remain unverified. 5. Complete procurement and component provenance. [Cost review](cost/README.md) lists $77.28 in indicative listings, with bulk-tier, internal inventory and unavailable-part exclusions and substantial assembly/process exclusions. Candidate hardware is not an approved BOM.-6. Continue significant-action captures. Inventory is 92 raw takes, 36 reviewed excerpts and 32 storyboard candidates. Three scenes have draft narration in `videos/narrated-review`; storyboard is `videos/build-storyboard.json`, port 8798. Obtain per-clip feedback before final assembly as required by aiflow-process-video. No final film exists.+6. Continue significant-action captures. Inventory is 95 raw takes, 38 reviewed excerpts and 34 storyboard candidates, plus one separately labeled solver-event replay. Three scenes have draft narration in `videos/narrated-review`; storyboard is `videos/build-storyboard.json`, port 8798. Obtain per-clip feedback before final assembly as required by aiflow-process-video. No final film exists.  ## Tool and delivery boundaries 
docs/silkscreen-review.mdadded+17
@@ -0,0 +1,17 @@+# Native reference-label rework++AIFlow board 22 changes 48 reference-field positions or orientations. All other parsed board data is identical to v85, including pads, components, tracks, vias, zones, nets and rules. The candidate passed desktop KiCad 10.0.5 DRC with zero errors, warnings and open connections. Native top 3D and PCB views were inspected after reopening; R31/R32 clear the MCU pads, the test labels are separated, and R38 is vertical beside its resistor. This is an intermediate silkscreen improvement, not final board acceptance.++The original conservative screen measured 94 visible labels with KiCad's own text metrics. It found 49 obstacle-box intersections and one text-box pair; 46 obstacle intersections were via-hole reservations, and three involved exposed pads. These are bounding-box findings, not 49 proven printed-ink violations. The final local search placed every existing label without reducing its original text size.++The native field API accepted the complete candidate's DRC dry run but rejected its commit with `native_field_update_unsupported` on KiCad 10.0.5. The transaction rolled back and the live revision remained unchanged. The fallback saved and backed up the exact original, closed only its editor, changed the 48 property spans in a saved copy, checked native DRC with the actual project libraries/rules, then reopened the exact project. It was a saved-file edit, not a successful live field edit.++The generic service DRC attempt omitted the project context and reported default-rule copper-edge findings plus missing-library warnings. That report is retained for diagnosis and is not the acceptance report. The complete native desktop project check is [silkscreen-candidate-drc.json](../design/silkscreen-review/silkscreen-candidate-drc.json).++Evidence: [byte-preserving candidate comparison](../design/silkscreen-review/saved-candidate-review.json), [native API dry run](../design/silkscreen-review/native-dry-run-complete.json), [refused API commit](../design/silkscreen-review/native-commit.json), and [initial conservative screen](../design/silkscreen-review/review.json).++Board SHA-256: `82c2fad50b3c2fb93b627df4a984bf7fe85724d73367e33e3d97206e0b752342`. Reopened native revision: `f9a4b7701329a2d162dcc584c0c176d7926b7d24f47dc484fae85319848b1f02`.++Still incomplete: passive values, bottom identity, physical terminal/function labeling, complete artwork/leader audit and visibility with the cooling assembly fitted. A separate mirrored bottom reference/value proposal is being solved at the current project's minimum 0.8 mm text height; it is not on the board. Thermal and finished-copper dependencies remain open. Current/thermal reports are being regenerated for the new exact board file.++The short [candidate replay](clips/silkscreen-candidate-replay.mp4) shows recorded solver events from an earlier pass with one unresolved label; it is explicitly labeled REPLAY. The [native review](clips/silkscreen-native-review.mp4) shows the reopened board at 2×, without the cooling assembly. Neither is the final narrated film.
docs/status.md+6
@@ -1,3 +1,9 @@+## Latest: checked native reference-label rework++AIFlow board 22 contains 48 improved reference labels. Exact non-field board data is preserved; native project DRC is zero errors, warnings and opens. Reopened native PCB and top/bottom 3D views were reviewed. The live field API refused and rolled back; the successful path was an explicitly recorded saved-file replacement. See [silkscreen evidence](silkscreen-review.md). Bottom reference/value groups and full silkscreen acceptance remain unfinished.++Inventory: 95 raw native takes, 38 reviewed excerpts, 34 storyboard candidates and one separately identified solver-event replay. Final narration/assembly remain unfinished. Thermal is still step 13/19; exact-board Fields checks are running. Finished copper, installed cooling and calibrated sensor margin remain unresolved; firmware stays locked.+ ## Latest: native net review and temperature measurement margin  Take 92 records six power nets in native KiCad on the unchanged v85 revision. Inventory: 92 raw takes, 36 reviewed excerpts, 32 storyboard candidates. The actual STM32 tach adapter passes fake-HAL tests, and the full host suite passes. The sensor screen now names the correct 300 mm candidate; its indicated 55 C cutoff can correspond to approximately 56.19 C under the limited static tolerance screen. See [trip budget](sensor-trip-budget.md). Output remains locked; physical calibration and timing remain unqualified.
kicad/adom-custom-electronic-load.kicad_pcb+48−48
@@ -103,7 +103,7 @@ 		(descr "SOT, 5 Pin (JEDEC MO-178 Var AA https://www.jedec.org/document_search?search_api_views_fulltext=MO-178)")
 		(tags "SOT TO_SOT_SMD")
 		(property "Reference" "U6"
-			(at 0 2.625 0)
+			(at -1 2.825 0)
 			(layer "F.SilkS")
 			(uuid "1ce81650-92db-43c0-88c6-d23438670a1a")
 			(effects
@@ -1307,7 +1307,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C15"
-			(at 0 -2.755 0)
+			(at 0.2 -2.755 0)
 			(layer "F.SilkS")
 			(uuid "6524bf03-6551-415b-bad0-892b5edaa2a4")
 			(effects
@@ -1791,7 +1791,7 @@ 		(descr "SOT, 5 Pin (JEDEC MO-178 Var AA https://www.jedec.org/document_search?search_api_views_fulltext=MO-178)")
 		(tags "SOT TO_SOT_SMD")
 		(property "Reference" "U9"
-			(at 0 2.625 0)
+			(at 0 3.225 0)
 			(layer "F.SilkS")
 			(uuid "e4da2abc-d250-4057-9f86-3effd5c4db1a")
 			(effects
@@ -2365,7 +2365,7 @@ 		(at 138 85)
 		(descr "Ohmite LVK12 manufacturer land pattern: g=1.75 d=1.10 f=1.00 e=0.30 mm. Project numbering: 1 I+, 2 V+, 3 V-, 4 I-. Datasheet retrieved 2026-10-07.")
 		(property "Reference" "RSH1"
-			(at 0 2.425 0)
+			(at 1 2.225 0)
 			(layer "F.SilkS")
 			(uuid "c54b3411-713b-480c-afea-7033d7bcd219")
 			(effects
@@ -2910,7 +2910,7 @@ 		(descr "SOT, 6 Pin (JEDEC MO-178 Var AB https://www.jedec.org/document_search?search_api_views_fulltext=MO-178)")
 		(tags "SOT TO_SOT_SMD")
 		(property "Reference" "U8"
-			(at 0 2.625 0)
+			(at 0.2 2.625 0)
 			(layer "F.SilkS")
 			(uuid "d976b544-787e-4024-a3fa-a62747234064")
 			(effects
@@ -3274,7 +3274,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R20"
-			(at 1.2 -3.2 0)
+			(at -0.2 -5 0)
 			(layer "F.SilkS")
 			(uuid "2c5597b9-8015-4fac-b423-b55d8f2aa0cc")
 			(effects
@@ -3588,7 +3588,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R38"
-			(at 1.855 0 0)
+			(at 1.855 1.4 90)
 			(layer "F.SilkS")
 			(uuid "00a34917-0ba0-4aec-9c08-0f5be0f6391e")
 			(effects
@@ -4663,7 +4663,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R34"
-			(at 0 -1.395 0)
+			(at 1.2 -1.795 0)
 			(layer "F.SilkS")
 			(uuid "306174f2-10fd-4381-899b-4548e35ec95a")
 			(effects
@@ -4833,7 +4833,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R5"
-			(at 2.955 0 0)
+			(at 2.955 -0.4 0)
 			(layer "F.SilkS")
 			(uuid "dfdced71-9c34-4407-8d93-32072ef22067")
 			(effects
@@ -6369,7 +6369,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C1"
-			(at 0 1.655 0)
+			(at 1.4 2.055 0)
 			(layer "F.SilkS")
 			(uuid "05a4263a-92e3-401f-8488-009a951cf2be")
 			(effects
@@ -6539,7 +6539,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R31"
-			(at 0 1.4 0)
+			(at 3.42901104e-16 2.8 0)
 			(layer "F.SilkS")
 			(uuid "7547689d-f002-4c97-98bd-6f29e8a04cbc")
 			(effects
@@ -6709,7 +6709,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R10"
-			(at -1.2 6 0)
+			(at -1.2 6.2 0)
 			(layer "F.SilkS")
 			(uuid "d0d16864-659a-48a6-8e5a-524578862195")
 			(effects
@@ -7193,7 +7193,7 @@ 		(descr "SMD pad as test Point, diameter 1.0mm")
 		(tags "test point SMD pad")
 		(property "Reference" "TP13"
-			(at 0 -1.925001 0)
+			(at -0.2 -1.925001 0)
 			(layer "F.SilkS")
 			(uuid "542a6fec-84fe-435e-849b-ecccbab250d2")
 			(effects
@@ -7575,7 +7575,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R25"
-			(at 0 -1.395001 0)
+			(at 0 -1.995001 0)
 			(layer "F.SilkS")
 			(uuid "444b539b-5f85-4830-83be-44c54b3d5cbe")
 			(effects
@@ -7745,7 +7745,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R19"
-			(at -0.4 -3.2 0)
+			(at -0.4 -3.4 0)
 			(layer "F.SilkS")
 			(uuid "d929a47c-6b48-42f4-818e-39833d50b87e")
 			(effects
@@ -7915,7 +7915,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R8"
-			(at -1.855 0 0)
+			(at -0.055 1.4 0)
 			(layer "F.SilkS")
 			(uuid "a2e65e7c-23ef-4d77-a660-7362b73a5cc9")
 			(effects
@@ -8521,7 +8521,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C5"
-			(at 0 -1.655 0)
+			(at -1.78186109e-16 -1.455 0)
 			(layer "F.SilkS")
 			(uuid "dba04e31-9229-4466-8eb7-9e8a0cab01c6")
 			(effects
@@ -8691,7 +8691,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R13"
-			(at 1.855 0 0)
+			(at 1.855 -0.6 0)
 			(layer "F.SilkS")
 			(uuid "4ed4c592-811f-4bcd-aaba-bb7f55be855e")
 			(effects
@@ -8861,7 +8861,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C18"
-			(at 0 -1.655 0)
+			(at -0.4 -1.655 0)
 			(layer "F.SilkS")
 			(uuid "e3e578c7-d85b-4b1d-b5da-fab2b537cfa0")
 			(effects
@@ -9031,7 +9031,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R16"
-			(at -1.855 0 0)
+			(at -2.455 -1.50325395e-16 0)
 			(layer "F.SilkS")
 			(uuid "c37e5998-7426-4b8b-b779-2138e4963060")
 			(effects
@@ -9371,7 +9371,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R36"
-			(at 2.4 3.6 0)
+			(at 2.4 3.8 0)
 			(layer "F.SilkS")
 			(uuid "a5f86ec5-e2f2-432b-9209-a14df6a50419")
 			(effects
@@ -9541,7 +9541,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R4"
-			(at -2.955 0 0)
+			(at -2.955 -0.2 0)
 			(layer "F.SilkS")
 			(uuid "8038fb1e-c04a-4f50-b7ca-4d6705ea1901")
 			(effects
@@ -9711,7 +9711,7 @@ 		(descr "SOT, 6 Pin (JEDEC MO-178 Var AB https://www.jedec.org/document_search?search_api_views_fulltext=MO-178)")
 		(tags "SOT TO_SOT_SMD")
 		(property "Reference" "U10"
-			(at 3.4 0 90)
+			(at 4 1.2 90)
 			(layer "F.SilkS")
 			(uuid "c923c824-56c3-4707-8e83-3d90fb9159a2")
 			(effects
@@ -10074,7 +10074,7 @@ 		(at 118 66)
 		(descr "TI DGS0010A land pattern 4221984/A 05/2015: pads 1.45 x 0.30, row centers 4.4, pitch 0.5 mm. AI-authored from manufacturer drawing.")
 		(property "Reference" "U2"
-			(at -6 2 0)
+			(at -6 2.2 0)
 			(layer "F.SilkS")
 			(uuid "3ab6ccda-d5ec-462f-8cc5-9bf0a74824c3")
 			(effects
@@ -10294,7 +10294,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R3"
-			(at 0 3.995 0)
+			(at -0.4 3.995 0)
 			(layer "F.SilkS")
 			(uuid "6eec7c8c-b114-48fa-b0ea-e30e5622cd9a")
 			(effects
@@ -12142,7 +12142,7 @@ 		(descr "SMD pad as test Point, diameter 1.0mm")
 		(tags "test point SMD pad")
 		(property "Reference" "TP3"
-			(at 0 -1.925001 0)
+			(at 0 -2.925001 0)
 			(layer "F.SilkS")
 			(uuid "02a1d7f7-e90c-4fad-9227-8281ee78c3cb")
 			(effects
@@ -12264,7 +12264,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C3"
-			(at -1.25 -1.75 0)
+			(at -1.25 -1.55 0)
 			(layer "F.SilkS")
 			(uuid "b45211b4-e6e4-4a47-9441-87727fe6fd64")
 			(effects
@@ -12604,7 +12604,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R1"
-			(at 0 -1.395 0)
+			(at 0.6 -1.395 0)
 			(layer "F.SilkS")
 			(uuid "467fe274-4352-4972-9a5e-17372bc9cbf3")
 			(effects
@@ -12918,7 +12918,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R14"
-			(at 1.855 0 0)
+			(at 1.855 -0.6 0)
 			(layer "F.SilkS")
 			(uuid "a0d52ca1-16de-4208-b39b-c8fdf84e62cf")
 			(effects
@@ -13258,7 +13258,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C9"
-			(at -2.405 0 0)
+			(at -3.005 1.84003182e-16 0)
 			(layer "F.SilkS")
 			(uuid "0c9fa42d-e6d5-452a-9edb-bc3abf640fe7")
 			(effects
@@ -13428,7 +13428,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C10"
-			(at -3.505 0 0)
+			(at -3.705 0.6 0)
 			(layer "F.SilkS")
 			(uuid "cddd0cbb-b43e-4efd-9c81-5b8267390f96")
 			(effects
@@ -13598,7 +13598,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C4"
-			(at 0 -1.654999 0)
+			(at -3.00650667e-16 -2.454999 0)
 			(layer "F.SilkS")
 			(uuid "19129045-73b3-488b-812a-d5095866eb72")
 			(effects
@@ -13938,7 +13938,7 @@ 		(descr "SOT, 5 Pin (JEDEC MO-178 Var AA https://www.jedec.org/document_search?search_api_views_fulltext=MO-178)")
 		(tags "SOT TO_SOT_SMD")
 		(property "Reference" "U5"
-			(at -3.25 0 0)
+			(at -3.65 4.46996082e-16 0)
 			(layer "F.SilkS")
 			(uuid "43d14d2f-8bad-43f5-abd8-5a463b26be8b")
 			(effects
@@ -14344,7 +14344,7 @@ 		(descr "SOD-323")
 		(tags "SOD-323")
 		(property "Reference" "D2"
-			(at 0 4.475 0)
+			(at 6.21508251e-16 5.075 0)
 			(layer "F.SilkS")
 			(uuid "af860ae5-b6eb-4305-8e51-c195525ee135")
 			(effects
@@ -15144,7 +15144,7 @@ 		(descr "SMD pad as test Point, diameter 1.0mm")
 		(tags "test point SMD pad")
 		(property "Reference" "TP2"
-			(at 0 -1.925001 0)
+			(at 0 -2.125001 0)
 			(layer "F.SilkS")
 			(uuid "ee7bea54-c64a-4b8a-a4eb-981389727733")
 			(effects
@@ -15266,7 +15266,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C12"
-			(at -0.8 2 0)
+			(at -1.8 2.2 0)
 			(layer "F.SilkS")
 			(uuid "9bae052c-b936-4554-8cde-cd8bd5d2a555")
 			(effects
@@ -15436,7 +15436,7 @@ 		(descr "SMD pad as test Point, diameter 1.0mm")
 		(tags "test point SMD pad")
 		(property "Reference" "TP1"
-			(at 0 -1.925001 0)
+			(at 0.2 -2.125001 0)
 			(layer "F.SilkS")
 			(uuid "502f1687-33d2-474e-adbb-f2f1fce43b97")
 			(effects
@@ -15558,7 +15558,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R32"
-			(at 0 -1.4 0)
+			(at -0.2 -2.2 0)
 			(layer "F.SilkS")
 			(uuid "f3e401e7-f94c-4452-8812-6fb355d586bd")
 			(effects
@@ -15727,7 +15727,7 @@ 		(at 141 77 180)
 		(descr "TI DGS0010A land pattern 4221984/A 05/2015: pads 1.45 x 0.30, row centers 4.4, pitch 0.5 mm. AI-authored from manufacturer drawing.")
 		(property "Reference" "U4"
-			(at 0 -2.75 0)
+			(at -4.83735486e-16 -3.95 0)
 			(layer "F.SilkS")
 			(uuid "152bf4a5-e958-4c93-a7e3-5d07cfe67710")
 			(effects
@@ -16230,7 +16230,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R29"
-			(at 0 -1.395 0)
+			(at 0 -1.995 0)
 			(layer "F.SilkS")
 			(uuid "d07dd9ae-b16f-44f6-b61a-c9a3dfd1ce35")
 			(effects
@@ -16698,7 +16698,7 @@ 		(descr "SMD pad as test Point, diameter 1.0mm")
 		(tags "test point SMD pad")
 		(property "Reference" "TP9"
-			(at -2.425001 0 0)
+			(at -2.425001 1.2 0)
 			(layer "F.SilkS")
 			(uuid "71c3e1f8-5c91-4dc9-a6fb-abfa82e43af4")
 			(effects
@@ -16820,7 +16820,7 @@ 		(descr "SOT, 3 Pin (JEDEC TO-236 Var AB https://www.jedec.org/document_search?search_api_views_fulltext=TO-236)")
 		(tags "SOT TO_SOT_SMD")
 		(property "Reference" "Q2"
-			(at 0 2.625 0)
+			(at 0 2.825 0)
 			(layer "F.SilkS")
 			(uuid "fed1860d-d8e6-4974-9402-b232c0f803d3")
 			(effects
@@ -17210,7 +17210,7 @@ 		(descr "Capacitor SMD 0603 (1608 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 76, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "capacitor")
 		(property "Reference" "C11"
-			(at 2.405 0 0)
+			(at 2.805 -1.4 0)
 			(layer "F.SilkS")
 			(uuid "cff62566-f931-47a1-a5f4-f1c066119c85")
 			(effects
@@ -17380,7 +17380,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R27"
-			(at 1.599999 2 0)
+			(at 1.799999 3 0)
 			(layer "F.SilkS")
 			(uuid "33919523-d8f6-428f-87fc-24ba1f507380")
 			(effects
@@ -18180,7 +18180,7 @@ 		(descr "SOT, 3 Pin (JEDEC TO-236 Var AB https://www.jedec.org/document_search?search_api_views_fulltext=TO-236)")
 		(tags "SOT TO_SOT_SMD")
 		(property "Reference" "Q3"
-			(at 0 2.625 0)
+			(at 0 4.425 0)
 			(layer "F.SilkS")
 			(uuid "8253e28a-9698-476d-a2ec-ccb9bf148e52")
 			(effects
@@ -18910,7 +18910,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R7"
-			(at -1.6 5.6 0)
+			(at -2 5.6 0)
 			(layer "F.SilkS")
 			(uuid "53f82256-9a38-4a4e-8a0d-0b1b406de79a")
 			(effects
@@ -19575,7 +19575,7 @@ 		(descr "SMD pad as test Point, diameter 1.0mm")
 		(tags "test point SMD pad")
 		(property "Reference" "TP5"
-			(at -2.425001 0 0)
+			(at -2.425001 0.2 0)
 			(layer "F.SilkS")
 			(uuid "0b76d5a9-ab18-4ae4-af5c-7025b985c1b9")
 			(effects
@@ -19867,7 +19867,7 @@ 		(descr "Resistor SMD 0402 (1005 Metric), square (rectangular) end terminal, IPC-7351 nominal, (Body size source: IPC-SM-782 page 72, https://www.pcb-3d.com/wordpress/wp-content/uploads/ipc-sm-782a_amendment_1_and_2.pdf)")
 		(tags "resistor")
 		(property "Reference" "R35"
-			(at 0 -2.495 0)
+			(at 0.2 -3.095 0)
 			(layer "F.SilkS")
 			(uuid "f62355e7-ebda-4168-8671-541c9755256d")
 			(effects
tools/bottom_silkscreen_candidate.pyadded+60
@@ -0,0 +1,60 @@+#!/usr/bin/env python3+"""Plan mirrored reference/value groups from the actual board, without editing it."""+import json,math,hashlib,subprocess+from pathlib import Path+from sexp import parse,find,first++ROOT=Path(__file__).resolve().parents[1];OUT=ROOT/'design/silkscreen-review'+board_path=ROOT/'kicad/adom-custom-electronic-load.kicad_pcb';board=parse(board_path.read_text())+source=json.loads((OUT/'geometry.json').read_text())+groups=[];texts=[]+aliases={'DUT_POS':'DUT+','LOAD_POS':'LOAD+','SHUNT_P_SENSE':'SH+','SHUNT_N_SENSE':'SH-','TEMP_SENSE':'TEMP','FAN_TACH':'TACH','I_SET':'ISET','V_GATE':'VDRV','LATCH_Q':'LATCH','5V_AUX':'5V AUX'}+for f in find(board,'footprint'):+    props={p[1]:p[2] for p in find(f,'property')};ref=props['Reference'];at=first(f,'at');anchor=list(map(float,at[1:3]))+    value=None+    if ref.startswith(('R','C','L','F')):value=props['Value']+    elif ref.startswith(('TP','MP')) or ref in ['J'+str(i) for i in range(1,8)]:+        nets={first(p,'net')[-1] for p in find(f,'pad') if first(p,'net')}+        assert len(nets)==1,(ref,nets)+        net=next(iter(nets));value=aliases.get(net,net)+    elif ref.startswith('J'):value={'J8':'USB','J9':'FAN','J10':'TEMP','J11':'SWD'}[ref]+    children=[dict(id=ref+':reference',text=ref,height=1.0 if value else .8,width=1.0 if value else .8,stroke=.12,x=0,y=0,mirrored=True,rotation=0)]+    if value:children.append(dict(id=ref+':value',text=value,height=.8,width=.8,stroke=.12,x=0,y=0,mirrored=True,rotation=0))+    groups.append(dict(id=ref,anchor=anchor,value=value,children=children));texts.extend(children)+state=json.loads(subprocess.check_output(['adom-bridge','--target','AdomLapper','--ai-thread','adom-custom-load','kicad_routing_state',json.dumps(dict(filePath='C:/Users/john/adom-projects/adom-custom-electronic-load/kicad/adom-custom-electronic-load.kicad_pcb'))],text=True));assert state['success']+bounds={}+for start in range(0,len(texts),40):+    raw=subprocess.check_output(['adom-bridge','--target','AdomLapper','--ai-thread','adom-custom-load','kicad_text_bounds',json.dumps(dict(filePath=state['boardPath'],expectedRevision=state['revision'],texts=texts[start:start+40]))],text=True)+    r=json.loads(raw);assert r['success'];(OUT/f'bottom-native-metrics-{start:03}.json').write_text(raw)+    bounds.update({t['id']:t['box'] for t in r['texts']})+labels=[]+for g in groups:+    # Native extents, 0.2 mm clear vertical separation, reference then smaller value.+    heights=[bounds[c['id']][3]-bounds[c['id']][1] for c in g['children']]+    total=sum(heights)+.2*(len(heights)-1);base=-total/2+    offsets=[]+    for h in heights:offsets.append(base+h/2);base+=h+.2+    cs=[]+    for i in range(-10,11):+        for j in range(-10,11):+            dx,dy=i*.4,j*.4+            if math.hypot(dx,dy)>4:continue+            x,y=g['anchor'][0]+dx,g['anchor'][1]+dy;children=[]+            for k,c in enumerate(g['children']):+                q=bounds[c['id']];yy=y+offsets[k]+                children.append(dict(text=c['text'],reference=g['id'],role='reference' if k==0 else 'value',x=x,y=yy,size=c['height'],stroke=c['stroke'],layer='B.SilkS',mirrored=True,box=[q[0]+x,q[1]+yy,q[2]+x,q[3]+yy]))+            boxes=[c['box'] for c in children]+            b=[min(q[0] for q in boxes),min(q[1] for q in boxes),max(q[2] for q in boxes),max(q[3] for q in boxes)]+            cs.append(dict(position=[x,y],font=g['children'][0]['height'],box=b,boxes=boxes,children=children,layer='B.SilkS'))+            rotated=[]+            for c in children:+                q=c['box']+                # +90 degree KiCad text rotation: clockwise screen-Y transform.+                corners=[(x+(yy-y),y-(xx-x)) for xx,yy in [(q[0],q[1]),(q[0],q[3]),(q[2],q[1]),(q[2],q[3])]]+                rotated.append(dict(c,x=x+(c['y']-y),y=y-(c['x']-x),angle=90,box=[min(a for a,b in corners),min(b for a,b in corners),max(a for a,b in corners),max(b for a,b in corners)]))+            rb=[c['box'] for c in rotated];envelope=[min(q[0] for q in rb),min(q[1] for q in rb),max(q[2] for q in rb),max(q[3] for q in rb)]+            cs.append(dict(position=[x,y],font=g['children'][0]['height'],box=envelope,boxes=rb,children=rotated,layer='B.SilkS',qualityPenalty=.1))+    labels.append(dict(id=g['id'],anchor=g['anchor'],maxDistance=4,candidates=cs,requiredRoles=['reference','value'] if g['value'] else ['reference'],maxValueRatio=.8))+data=dict(bounds=[98.3,30.3,161.7,101.7],labels=labels,obstacles=[o for o in source['obstacles'] if o['layer']=='B.SilkS'],clearance=.12,solver='milp',solverSeconds=45,milpPerFont=48,candidatesPerLabel=2000,boundsSource='Native mirrored glyph metrics; exact electrical geometry retained from v85; rounded-corner and native DRC review pending',boardSha256=hashlib.sha256(board_path.read_bytes()).hexdigest(),nativeRevision=state['revision'])+(OUT/'bottom-candidates.json').write_text(json.dumps(data)+'\n')+print(f'{len(groups)} complete reference/value groups, {len(texts)} native text extents; minimum 0.8 mm matches current project rules')
tools/silkscreen_candidates.pyadded+29
@@ -0,0 +1,29 @@+#!/usr/bin/env python3+"""Local translation candidates for existing labels; no edits or gate claims."""+import json, math+from pathlib import Path++ROOT=Path(__file__).resolve().parents[1]+OUT=ROOT/'design/silkscreen-review'+geometry=json.loads((OUT/'geometry.json').read_text())+for face in ('F','B'):+    labels=[]+    for mark in geometry['marks']:+        if mark['layer']!=face+'.SilkS': continue+        p=mark['nativeInput']; candidates=[]+        radius=3 if mark['text'] in ('R20','R38','R8') else 2+        for i in range(-int(radius*5),int(radius*5)+1):+            for j in range(-int(radius*5),int(radius*5)+1):+                dx,dy=i*.2,j*.2+                if math.hypot(dx,dy)>radius:continue+                candidates.append(dict(position=[p['x']+dx,p['y']+dy],box=[v+(dx if k%2==0 else dy) for k,v in enumerate(mark['box'])],font=p['height']))+                if mark['text']=='R38' and (OUT/'R38-smaller-native.json').exists():+                    small=json.loads((OUT/'R38-smaller-native.json').read_text())['texts'][0]['box']+                    candidates.append(dict(position=[p['x']+dx,p['y']+dy],box=[v+(dx if k%2==0 else dy) for k,v in enumerate(small)],font=.7))+                if mark['text']=='R38' and (OUT/'R38-vertical-native.json').exists():+                    vertical=json.loads((OUT/'R38-vertical-native.json').read_text())['texts'][0]['box']+                    candidates.append(dict(position=[p['x']+dx,p['y']+dy],box=[v+(dx if k%2==0 else dy) for k,v in enumerate(vertical)],font=.8,rotation=90))+        labels.append(dict(id=mark['id'],text=mark['text'],anchor=[p['x'],p['y']],previous=[p['x'],p['y']],maxDistance=radius,candidates=candidates))+    data=dict(bounds=[98.3,30.3,161.7,101.7],boundsSource='v85 saved outline; rectangular screen excludes rounded-corner proof',labels=labels,obstacles=[o for o in geometry['obstacles'] if o['layer']==face+'.SilkS'],clearance=.12,solver='milp',solverSeconds=45,milpPerFont=64,candidatesPerLabel=2000)+    (OUT/f'candidates-{face}.json').write_text(json.dumps(data)+'\n')+print('Existing-label candidates written; missing passive values and assembled occlusion remain separate.')
tools/silkscreen_native_candidate.pyadded+27
@@ -0,0 +1,27 @@+#!/usr/bin/env python3+"""Submit a complete existing-field proposal to native DRC, without committing."""+import json+from pathlib import Path+import subprocess++ROOT=Path(__file__).resolve().parents[1]+P=ROOT/'design/silkscreen-review'+geometry=json.loads((P/'geometry.json').read_text())+layout=json.loads((P/'layout-F.json').read_text())+review=json.loads((P/'review.json').read_text())+assert not layout['unresolved'], 'Unresolved existing fields would remain in place; do not omit their occupancy.'+index={m['id']:m for m in geometry['marks']}+updates=[]+for c in layout['placements']:+    m=index[c['id']]; n=m['nativeInput']+    if m['reference']=='board':continue+    if sum(abs(c['position'][i]-n[k]) for i,k in enumerate(('x','y')))<1e-7 and c['font']==n['height']:continue+    updates.append(dict(id=m['id'],x=c['position'][0],y=c['position'][1],layer=m['layer'],height=c['font'],width=c['font']*n['width']/n['height'],stroke=n['stroke'],rotation=c.get('rotation',n['rotation']),align=n['align'],mirrored=n['mirrored'],visible=True))+payload=dict(filePath='C:/Users/john/adom-projects/adom-custom-electronic-load/kicad/adom-custom-electronic-load.kicad_pcb',expectedRevision=review['nativeRevision'],update=updates,dryRun=True,save=False)+(P/'candidate-fields.json').write_text(json.dumps(payload,indent=2)+'\n')+raw=subprocess.check_output(['adom-bridge','--target','AdomLapper','--ai-thread','adom-custom-load','kicad_silk_fields_batch',json.dumps(payload)],text=True)+result=json.loads(raw)+(P/'native-dry-run-complete.json').write_text(raw)+print(json.dumps({k:v for k,v in result.items() if k not in ('output','_reportIssues','_timeoutHint')},indent=2))+assert result.get('mutated') is False+raise SystemExit(0 if result.get('success') else 2)
tools/silkscreen_review.pyadded+97
@@ -0,0 +1,97 @@+#!/usr/bin/env python3+"""Read-only whole-board label screen using KiCad glyph bounds and fitted CAD.++This deliberately does not claim final silkscreen acceptance: artwork, leads,+label associations and assembled visibility need their own native review.+"""+import argparse+import hashlib+import importlib.util+import json+import math+from pathlib import Path+import subprocess++ROOT = Path(__file__).resolve().parents[1]+OUT = ROOT / 'design/silkscreen-review'++def main():+    parser = argparse.ArgumentParser()+    parser.add_argument('--mask-helper', required=True, type=Path)+    parser.add_argument('--live-state', required=True, type=Path)+    args = parser.parse_args()+    spec = importlib.util.spec_from_file_location('native_mask', args.mask_helper)+    mask = importlib.util.module_from_spec(spec)+    spec.loader.exec_module(mask)+    board_path = ROOT / 'kicad/adom-custom-electronic-load.kicad_pcb'+    sha = hashlib.sha256(board_path.read_bytes()).hexdigest()+    board = mask.parse(board_path.read_text())+    live = json.loads(args.live_state.read_text())+    assert live['success'] and live['netsRemaining'] in (0, [])+    bodies = json.loads((ROOT / 'mechanical/cooling-680-body-audit.json').read_text())+    assert bodies['boardSha256'] == sha+    marks, candidates, missing_values = [], [], []+    for fp in mask.sub(board, 'footprint'):+        at = list(map(float, mask.one(fp, 'at')))+        theta = math.radians(-(at[2] if len(at) > 2 else 0))+        props = mask.sub(fp, 'property')+        ref = next(p[2] for p in props if p[1] == 'Reference')+        for p in props:+            layer = mask.one(p, 'layer')[0]+            effects = mask.one(p, 'effects')+            hidden = mask.one(p, 'hide') == ['yes'] or mask.one(effects, 'hide') == ['yes'] or 'hide' in effects+            if p[1] == 'Value' and ref.startswith(('R', 'C', 'L')) and (hidden or not layer.endswith('.SilkS')):+                missing_values.append(ref)+            if hidden or layer not in ('F.SilkS', 'B.SilkS'):+                continue+            local = list(map(float, mask.one(p, 'at')))+            x = at[0] + local[0]*math.cos(theta) - local[1]*math.sin(theta)+            y = at[1] + local[0]*math.sin(theta) + local[1]*math.cos(theta)+            font = mask.one(effects, 'font')+            size = list(map(float, mask.one(font, 'size')))+            justify = mask.one(effects, 'justify')+            row = dict(id=mask.one(p, 'uuid')[0], text=p[2], x=x, y=y,+                       height=size[0], width=size[1], stroke=float(mask.one(font, 'thickness')[0]),+                       rotation=local[2] if len(local)>2 else 0,+                       align=next((a for a in ('left','right') if a in justify), 'center'),+                       mirrored='mirror' in justify)+            candidates.append(row)+            marks.append(dict(id=row['id'], text=row['text'], reference=ref, layer=layer, **{'nativeInput':row}))+    for p in mask.sub(board, 'gr_text'):+        layer = mask.one(p, 'layer')[0]+        if layer not in ('F.SilkS','B.SilkS'): continue+        at = list(map(float, mask.one(p, 'at')))+        effects=mask.one(p,'effects');font=mask.one(effects,'font');size=list(map(float,mask.one(font,'size')))+        just=mask.one(effects,'justify')+        row=dict(id=mask.one(p,'uuid')[0],text=p[1],x=at[0],y=at[1],height=size[0],width=size[1],stroke=float(mask.one(font,'thickness')[0]),rotation=at[2] if len(at)>2 else 0,mirrored='mirror' in just,align=next((a for a in ('left','right') if a in just),'center'))+        candidates.append(row);marks.append(dict(id=row['id'],text=row['text'],reference='board',layer=layer,nativeInput=row))+    OUT.mkdir(exist_ok=True)+    measured=[]+    for start in range(0,len(candidates),40):+        payload=dict(filePath=live['boardPath'],expectedRevision=live['revision'],texts=candidates[start:start+40])+        raw=subprocess.check_output(['adom-bridge','--target','AdomLapper','--ai-thread','adom-custom-load','kicad_text_bounds',json.dumps(payload)],text=True)+        reply=json.loads(raw)+        assert reply['success'] and reply['mutated'] is False and reply['revision']==live['revision']+        (OUT/f'native-metrics-{start:03}.json').write_text(raw)+        measured.extend(reply['texts'])+    boxes={r['id']:r['box'] for r in measured}+    for row in marks: row['box']=boxes[row['id']]+    obstacles=mask.obstacles(board)+    for row in bodies['rows']:+        x,y,z,X,Y,Z=row['boundsMm']+        obstacles.append(dict(id=row['ref']+':body',kind='fitted-body',layer='F.SilkS',box=[x,y,X,Y]))+    # All drilled vias are reserved on both faces, including tented ones.+    for i,v in enumerate(mask.sub(board,'via')):+        x,y=map(float,mask.one(v,'at'));r=float(mask.one(v,'drill')[0])/2+        for face in ('F','B'):+            obstacles.append(dict(id=f'via:{i}',kind='via-hole',layer=face+'.SilkS',box=[x-r,y-r,x+r,y+r]))+    def overlap(a,b): return a[0]<b[2] and b[0]<a[2] and a[1]<b[3] and b[1]<a[3]+    collisions=[dict(reference=m['reference'],text=m['text'],mark=m['id'],obstacle=o['id'],kind=o['kind'],layer=m['layer']) for m in marks for o in obstacles if m['layer']==o['layer'] and overlap(m['box'],o['box'])]+    pairs=[dict(a=a['text'],b=b['text'],layer=a['layer']) for i,a in enumerate(marks) for b in marks[i+1:] if a['layer']==b['layer'] and overlap(a['box'],b['box'])]+    result=dict(status='read-only-conservative-screen-not-acceptance',boardSha256=sha,nativeRevision=live['revision'],maskHelperSha256=hashlib.sha256(args.mask_helper.read_bytes()).hexdigest(),nativeTextCount=len(marks),obstacleCount=len(obstacles),collisions=collisions,labelPairs=pairs,passiveValuesNotOnSilkscreen=missing_values,limits=['Axis-aligned native text bounds and CAD body bounds can over-report collisions.','Mask polygons use saved-board pad transforms; footprint field rotation is board-absolute. Native visual confirmation is still required.','Existing line/arc artwork, exact hole envelopes outside mask, assembled heatsink/carrier occlusion, pin mapping, edge containment and clearances are not yet accepted.','No native board edit, thermal gate or silkscreen gate completion.'])+    (OUT/'geometry.json').write_text(json.dumps(dict(marks=marks,obstacles=obstacles),indent=2)+'\n')+    (OUT/'review.json').write_text(json.dumps(result,indent=2)+'\n')+    print(json.dumps({k:result[k] for k in ('status','nativeTextCount','obstacleCount')}))+    print(f'{len(collisions)} conservative obstacle intersections; {len(pairs)} text pairs; {len(missing_values)} passive values absent from silk')++if __name__ == '__main__': main()
tools/silkscreen_saved_candidate.pyadded+54
@@ -0,0 +1,54 @@+#!/usr/bin/env python3+"""Create an isolated saved-file label candidate; preserve all other bytes."""+import copy, hashlib, json, math, re, shutil+from pathlib import Path+from sexp import parse,find,first++ROOT=Path(__file__).resolve().parents[1]+OUT=ROOT/'design/silkscreen-review'+source=ROOT/'kicad/adom-custom-electronic-load.kicad_pcb'+raw=source.read_bytes();text=raw.decode()+board=parse(text);proposal=json.loads((OUT/'candidate-fields.json').read_text())+updates={r['id']:r for r in proposal['update']}+lookup={}+for f in find(board,'footprint'):+    a=first(f,'at');x,y=map(float,a[1:3]);angle=float(a[3]) if len(a)>3 else 0+    for p in find(f,'property'):+        u=first(p,'uuid')+        if u and u[1] in updates:lookup[u[1]]=(x,y,angle,p)+assert set(lookup)==set(updates)+# Balanced list spans, respecting quoted parentheses/escaped quotes.+stack=[];spans=[]+for match in re.finditer(r'"(?:\\.|[^"\\])*"|[()]',text):+    if match.group()=='(':stack.append(match.start())+    elif match.group()==')':+        start=stack.pop()+        if text.startswith('(property ',start):spans.append((start,match.end()))+edits=[]+for start,end in spans:+    fragment=text[start:end];u=re.search(r'\(uuid "([^"]+)"\)',fragment)+    if not u or u[1] not in updates:continue+    row=updates[u[1]];x,y,angle,p=lookup[u[1]]+    assert p[1] in ('Reference','Value')+    theta=math.radians(angle);dx=row['x']-x;dy=row['y']-y+    lx=dx*math.cos(theta)-dy*math.sin(theta);ly=dx*math.sin(theta)+dy*math.cos(theta)+    fragment,n=re.subn(r'\(at\s+[^()]+\)',f'(at {lx:.9g} {ly:.9g} {row["rotation"]:.9g})',fragment,count=1);assert n==1+    fragment,n=re.subn(r'\(size\s+[^()]+\)',f'(size {row["height"]:.9g} {row["width"]:.9g})',fragment,count=1);assert n==1+    edits.append((start,end,fragment))+assert len(edits)==len(updates)+for start,end,replacement in sorted(edits,reverse=True):text=text[:start]+replacement+text[end:]+new=parse(text)+def neutralize(b):+    b=copy.deepcopy(b)+    for f in find(b,'footprint'):+        for p in find(f,'property'):+            u=first(p,'uuid')+            if u and u[1] in updates:+                p[:]=['reviewed-field',u[1]]+    return b+assert neutralize(board)==neutralize(new),'Unrelated board data changed'+candidate=ROOT/'kicad/silkscreen-candidate.kicad_pcb';candidate.write_bytes(text.encode())+for suffix in ('.kicad_pro','.kicad_dru'):+    shutil.copyfile(source.with_suffix(suffix),candidate.with_suffix(suffix))+report=dict(status='isolated-saved-file-candidate',sourceSha256=hashlib.sha256(raw).hexdigest(),candidateSha256=hashlib.sha256(candidate.read_bytes()).hexdigest(),fieldCount=len(edits),onlySpecifiedPropertiesChanged=True,nativeDRCRequired=True,liveBoardChanged=False)+(OUT/'saved-candidate-review.json').write_text(json.dumps(report,indent=2)+'\n');print(json.dumps(report))
videos/build-storyboard.json+12
@@ -204,6 +204,18 @@       "title": "Follow the six power paths in KiCad",       "description": "Native saved-board net selection and framing at 3x. Review, not route creation; thermal acceptance remains open.",       "raw_path": "/home/adom/project/adom-custom-electronic-load/docs/clips/power-net-review.mp4"+    },+    {+      "id": "silkscreen-candidate-replay",+      "title": "Rework crowded reference labels",+      "description": "Recorded solver-event replay; earlier incomplete proposal, not a native edit.",+      "raw_path": "/home/adom/project/adom-custom-electronic-load/docs/clips/silkscreen-candidate-replay.mp4"+    },+    {+      "id": "silkscreen-native-review",+      "title": "Check the revised labels in KiCad",+      "description": "Native saved-file label review at 2x. Bare PCB; thermal and full silkscreen acceptance remain open.",+      "raw_path": "/home/adom/project/adom-custom-electronic-load/docs/clips/silkscreen-native-review.mp4"     }   ] }
videos/inventory.json+28−2
@@ -1,6 +1,6 @@ {-  "rawTakeCount": 92,-  "reviewedExcerptCount": 36,+  "rawTakeCount": 95,+  "reviewedExcerptCount": 38,   "countingRule": "Unique raw window recording filenames in this project; excludes derivative action/speed exports and reference projects. Raw count includes rejected takes.",   "takes": [     {@@ -554,6 +554,32 @@       "durationSeconds": 41.4,       "topic": "Native saved-board walkthrough of six power nets",       "review": "Contact sheet and excerpt poster visually reviewed; excerpt fully decoded. Eleven-second 3x edit. Actual native selections and framing, not routing creation; unchanged v85, thermal gate open."+    },+    {+      "file": "aiflow/run/window-336160-20261010-224448.mp4",+      "durationSeconds": 36.3,+      "topic": "Attempted native field update, rolled back",+      "review": "Contact sheet reviewed; static PCB during unsupported API attempt. No accepted edit shown. Excluded from action edit."+    },+    {+      "file": "aiflow/run/window-41886014-20261010-224857.mp4",+      "durationSeconds": 53.9,+      "topic": "USB and fan net review after saved-file label rework",+      "review": "Native walkthrough, not a live field edit. Kept as raw review evidence; not counted as a reviewed excerpt."+    },+    {+      "file": "videos/raw/window-1124570-20261010-225155.mp4",+      "durationSeconds": 18.433333,+      "topic": "Native 3D reference-label review after saved-file rework",+      "review": "Raw/contact sheet and edited contact sheet reviewed; excerpt fully decoded. 4.5-second 2x crop. Bare PCB only, no thermal qualification. Recorder elapsed17.944s versus encoded18.433s; timeline repair warning retained, not timing evidence."+    }+  ],+  "replays": [+    {+      "file": "aiflow/run/silkscreen-dashboard/recordings/replay-1791672086893886912.webm",+      "kind": "recorded-event replay, not raw native process footage",+      "excerpt": "docs/clips/silkscreen-candidate-replay.mp4",+      "review": "Contact sheet reviewed, full excerpt decode passed. Earlier 93/94 proposal, no native edits claimed."     }   ] }