project
Adom Custom Electronic Load
Public Made by Adomby adom
Two-layer digitally controlled electronic-load prototype. Compact R11 is under active electrical, cooling and probe-access review; not a manufacturing release.
← Commit history
Document clean native candidate and corrected plated-wall current review; acceptance remains open
8 files changed
+1836−5
checkpoints/unclipped-hotspots-v1/candidate-v27.complete-diff.json+1669checkpoints/unclipped-hotspots-v1/drc-v27.json+36design/step12-hotspot-progress.pngdesign/step12-hotspot-v27-geometry.pngdocs/completion-plan.md+4tools/check_hotspot_candidate.py+4−2tools/hotspot_via_candidate_v27.py+120tools/plot_hotspot_progress.py+3−3checkpoints/unclipped-hotspots-v1/candidate-v27.complete-diff.jsonadded+1669@@ -0,0 +1,1669 @@+{+ "baselineSha256": "54f1aab0a34622d1c3675c13f4aeb7a678b0cee8b5a4d3bfd7484b10edb8dcf6",+ "candidateSha256": "a365abb52e62eb33ef90f9e424f2a2851dfb81454c6ad65e794631663214ccb0",+ "formalAcceptance": false,+ "existingCopperNetChanges": [],+ "footprintChanges": [+ {+ "ref": "Q2",+ "before": {+ "at": [+ "124",+ "85.3"+ ],+ "pads": {+ "1": {+ "at": [+ "-0.9375",+ "-0.95"+ ],+ "size": [+ "1.475",+ "0.6"+ ],+ "net": [+ "CLAMP_BASE"+ ]+ },+ "2": {+ "at": [+ "-0.9375",+ "0.95"+ ],+ "size": [+ "1.475",+ "0.6"+ ],+ "net": [+ "GND"+ ]+ },+ "3": {+ "at": [+ "0.9375",+ "0"+ ],+ "size": [+ "1.475",+ "0.6"+ ],+ "net": [+ "GATE"+ ]+ }+ }+ },+ "after": {+ "at": [+ "123.7",+ "85.3"+ ],+ "pads": {+ "1": {+ "at": [+ "-0.9375",+ "-0.95"+ ],+ "size": [+ "1.475",+ "0.6"+ ],+ "net": [+ "CLAMP_BASE"+ ]+ },+ "2": {+ "at": [+ "-0.9375",+ "0.95"+ ],+ "size": [+ "1.475",+ "0.6"+ ],+ "net": [+ "GND"+ ]+ },+ "3": {+ "at": [+ "0.9375",+ "0"+ ],+ "size": [+ "1.475",+ "0.6"+ ],+ "net": [+ "GATE"+ ]+ }+ }+ }+ },+ {+ "ref": "R7",+ "before": {+ "at": [+ "129",+ "84"+ ],+ "pads": {+ "1": {+ "at": [+ "-0.51",+ "0"+ ],+ "size": [+ "0.54",+ "0.64"+ ],+ "net": [+ "SERVO_OUT"+ ]+ },+ "2": {+ "at": [+ "0.51",+ "0"+ ],+ "size": [+ "0.54",+ "0.64"+ ],+ "net": [+ "GATE"+ ]+ }+ }+ },+ "after": {+ "at": [+ "129.1",+ "84"+ ],+ "pads": {+ "1": {+ "at": [+ "-0.51",+ "0"+ ],+ "size": [+ "0.54",+ "0.64"+ ],+ "net": [+ "SERVO_OUT"+ ]+ },+ "2": {+ "at": [+ "0.51",+ "0"+ ],+ "size": [+ "0.54",+ "0.64"+ ],+ "net": [+ "GATE"+ ]+ }+ }+ }+ },+ {+ "ref": "U3",+ "before": {+ "at": [+ "129",+ "87"+ ],+ "pads": {+ "1": {+ "at": [+ "-1.1375",+ "-0.95"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "SERVO_OUT"+ ]+ },+ "2": {+ "at": [+ "-1.1375",+ "0"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ },+ "3": {+ "at": [+ "-1.1375",+ "0.95"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "I_SET"+ ]+ },+ "4": {+ "at": [+ "1.1375",+ "0.95"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "SERVO_FB"+ ]+ },+ "5": {+ "at": [+ "1.1375",+ "-0.95"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "V_GATE"+ ]+ }+ }+ },+ "after": {+ "at": [+ "129.3",+ "87"+ ],+ "pads": {+ "1": {+ "at": [+ "-1.1375",+ "-0.95"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "SERVO_OUT"+ ]+ },+ "2": {+ "at": [+ "-1.1375",+ "0"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ },+ "3": {+ "at": [+ "-1.1375",+ "0.95"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "I_SET"+ ]+ },+ "4": {+ "at": [+ "1.1375",+ "0.95"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "SERVO_FB"+ ]+ },+ "5": {+ "at": [+ "1.1375",+ "-0.95"+ ],+ "size": [+ "1.325",+ "0.6"+ ],+ "net": [+ "V_GATE"+ ]+ }+ }+ }+ }+ ],+ "copperChanges": [+ {+ "uuid": "0698f584-2df0-479e-808e-687b3cb57a96",+ "before": {+ "kind": "segment",+ "start": [+ "123.5",+ "85.5"+ ],+ "end": [+ "123.6",+ "85.4"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_P_SENSE"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "123.5",+ "85.5"+ ],+ "end": [+ "123.3",+ "85.4"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_P_SENSE"+ ]+ }+ },+ {+ "uuid": "13d2f936-e4d3-40cb-9bf7-1b6b26ca4cf2",+ "before": {+ "kind": "segment",+ "start": [+ "126.4",+ "86.5"+ ],+ "end": [+ "126.35",+ "87"+ ],+ "width": [+ "1.2"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "126.4",+ "86.7"+ ],+ "end": [+ "126.35",+ "87"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "1b4ccb80-a9a1-49c6-8296-1afd8c5c9054",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "126.4",+ "84.36"+ ],+ "end": [+ "126.4",+ "86.7"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "24176a5c-806d-4462-b8fa-3f8435ffaa32",+ "before": {+ "kind": "segment",+ "start": [+ "132",+ "85.4"+ ],+ "end": [+ "134.1",+ "87.5"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P_SENSE"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "132.199999",+ "85.6"+ ],+ "end": [+ "134.1",+ "87.5"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P_SENSE"+ ]+ }+ },+ {+ "uuid": "25f07535-b1fb-490b-9cc4-decf9057e8d1",+ "before": null,+ "after": {+ "kind": "via",+ "at": [+ "136.5",+ "93"+ ],+ "size": [+ "1"+ ],+ "drill": [+ "0.6"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "2f235494-7976-4048-be2d-b71507b2b45e",+ "before": {+ "kind": "segment",+ "start": [+ "124.9",+ "82.3"+ ],+ "end": [+ "124.92",+ "82"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "124.9",+ "82.3"+ ],+ "end": [+ "124.92",+ "82"+ ],+ "width": [+ "1.75"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ }+ },+ {+ "uuid": "30d9e8bc-805a-4b1d-8a79-ad625ee59388",+ "before": {+ "kind": "segment",+ "start": [+ "124.92",+ "82"+ ],+ "end": [+ "125.15",+ "83.4"+ ],+ "width": [+ "0.8"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ },+ "after": null+ },+ {+ "uuid": "32514162-b870-4c7a-95a2-b85b8db79257",+ "before": {+ "kind": "via",+ "at": [+ "126.4",+ "86.5"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ },+ "after": {+ "kind": "via",+ "at": [+ "126.05",+ "86.7"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "34d3207a-b14a-40d8-be82-5b108c2b867b",+ "before": {+ "kind": "via",+ "at": [+ "134.4",+ "84.8"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ },+ "after": null+ },+ {+ "uuid": "3e849937-6253-4e1c-b2c7-a04c3370eb1c",+ "before": {+ "kind": "via",+ "at": [+ "123.6",+ "85.4"+ ],+ "size": [+ "0.6"+ ],+ "drill": [+ "0.3"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "SHUNT_P_SENSE"+ ]+ },+ "after": {+ "kind": "via",+ "at": [+ "123.3",+ "85.4"+ ],+ "size": [+ "0.6"+ ],+ "drill": [+ "0.3"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "SHUNT_P_SENSE"+ ]+ }+ },+ {+ "uuid": "426d7dbc-263d-4c53-a4c3-dd3ef58fe982",+ "before": null,+ "after": {+ "kind": "via",+ "at": [+ "139",+ "93"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "4920cbee-6ad2-414e-a167-3b77bd8c7fc6",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "133.699999",+ "83.6"+ ],+ "end": [+ "133.8",+ "84.2"+ ],+ "width": [+ "1.2"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ }+ },+ {+ "uuid": "4abaae68-59a0-4ef4-9e3f-aeaedcbe08f1",+ "before": {+ "kind": "segment",+ "start": [+ "128",+ "87.3"+ ],+ "end": [+ "128.8",+ "87.3"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "128",+ "87.3"+ ],+ "end": [+ "129",+ "87.3"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ }+ },+ {+ "uuid": "53e2f052-c9c9-4645-bd57-c5559189eb0c",+ "before": null,+ "after": {+ "kind": "via",+ "at": [+ "126.8",+ "86.7"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "55a88997-bdf5-4b6c-a960-7746f2549979",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "138.4",+ "93"+ ],+ "end": [+ "136.5",+ "93"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "573158d1-1739-45b3-90d0-03577fe04d3d",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "126.35",+ "89"+ ],+ "end": [+ "126.35",+ "89.7"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "64bce2da-bf95-4976-bfd0-62ce943198a8",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "139.4",+ "90.4"+ ],+ "end": [+ "139.4",+ "92"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "667af3dd-be2f-4adc-ba58-a51cbf2be28f",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "126.35",+ "89.7"+ ],+ "end": [+ "125.65",+ "89.7"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "6729ac40-cba3-4e07-bfed-d85f70e73c4a",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "139.4",+ "92"+ ],+ "end": [+ "138.4",+ "93"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "6a34c726-b68c-460b-bb54-62b16218f967",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "126.35",+ "89"+ ],+ "end": [+ "125.65",+ "89.7"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "6d06bdaa-e59b-4ae8-8408-0222b404a933",+ "before": null,+ "after": {+ "kind": "via",+ "at": [+ "139.4",+ "90.4"+ ],+ "size": [+ "0.6"+ ],+ "drill": [+ "0.3"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "898fb7bb-ebf6-4bbe-ada6-dd6d7720c0cb",+ "before": {+ "kind": "via",+ "at": [+ "139.4",+ "86.8"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ },+ "after": null+ },+ {+ "uuid": "8e5d5e2b-78f3-4ed2-af96-409d2ea9d57b",+ "before": {+ "kind": "segment",+ "start": [+ "126.35",+ "89.7"+ ],+ "end": [+ "119.8",+ "89.7"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ },+ "after": null+ },+ {+ "uuid": "8fc8b35b-e02e-45db-b56f-6ec45639d24a",+ "before": {+ "kind": "segment",+ "start": [+ "129.1",+ "87.6"+ ],+ "end": [+ "129.1",+ "88.6"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "129.3",+ "87.6"+ ],+ "end": [+ "129.3",+ "88.6"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ }+ },+ {+ "uuid": "91eed079-74e4-4863-8dc1-f211a19b6ee0",+ "before": {+ "kind": "segment",+ "start": [+ "126.4",+ "83.06"+ ],+ "end": [+ "126.4",+ "86.5"+ ],+ "width": [+ "1"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ },+ "after": null+ },+ {+ "uuid": "9a71af6b-ea83-4f97-b7f6-3f69253c7314",+ "before": {+ "kind": "via",+ "at": [+ "135",+ "85"+ ],+ "size": [+ "0.6"+ ],+ "drill": [+ "0.3"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ },+ "after": null+ },+ {+ "uuid": "9eeaa4b5-6abd-4f8d-b54a-b7e25ccfb215",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "126.35",+ "87"+ ],+ "end": [+ "126.35",+ "89"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "aa6c5964-74d4-410e-a69e-ffb2cd9c9999",+ "before": {+ "kind": "via",+ "at": [+ "133.8",+ "84.2"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ },+ "after": {+ "kind": "via",+ "at": [+ "133.699999",+ "83.6"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ }+ },+ {+ "uuid": "ad353074-a567-44a9-a20a-744b8057c5a9",+ "before": {+ "kind": "segment",+ "start": [+ "127.46",+ "82"+ ],+ "end": [+ "126.4",+ "83.06"+ ],+ "width": [+ "1.2"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ },+ "after": null+ },+ {+ "uuid": "b486fb59-b64e-41ee-a1a7-5a72fcf0a780",+ "before": {+ "kind": "segment",+ "start": [+ "126.35",+ "87"+ ],+ "end": [+ "126.35",+ "89.7"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ },+ "after": null+ },+ {+ "uuid": "bbce2dea-10c4-4a0c-b659-4c013fc4304b",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "127.46",+ "82"+ ],+ "end": [+ "127.46",+ "83.3"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "c0de0369-7fd9-46e7-97ef-a914aedc0e9f",+ "before": {+ "kind": "segment",+ "start": [+ "123.6",+ "85.4"+ ],+ "end": [+ "132",+ "85.4"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P_SENSE"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "123.3",+ "85.6"+ ],+ "end": [+ "132.199999",+ "85.6"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P_SENSE"+ ]+ }+ },+ {+ "uuid": "cd48c727-15bf-4276-b4b8-ae4d936d829d",+ "before": {+ "kind": "via",+ "at": [+ "125.15",+ "83.4"+ ],+ "size": [+ "0.6"+ ],+ "drill": [+ "0.3"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ },+ "after": null+ },+ {+ "uuid": "d72b5111-d490-477e-af0e-ad578b61c3d3",+ "before": null,+ "after": {+ "kind": "via",+ "at": [+ "139.4",+ "91.4"+ ],+ "size": [+ "0.6"+ ],+ "drill": [+ "0.3"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "db6b0745-1575-4d1f-ade0-c076147bd7f9",+ "before": {+ "kind": "segment",+ "start": [+ "128.8",+ "87.3"+ ],+ "end": [+ "129.1",+ "87.6"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "129",+ "87.3"+ ],+ "end": [+ "129.3",+ "87.6"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ }+ },+ {+ "uuid": "e1996d28-be73-4fdc-adb9-97d5f630fb7b",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "125.65",+ "89.7"+ ],+ "end": [+ "119.8",+ "89.7"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "e50315a7-0d07-488e-a488-c1f64b54a1fd",+ "before": null,+ "after": {+ "kind": "segment",+ "start": [+ "127.46",+ "83.3"+ ],+ "end": [+ "126.4",+ "84.36"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "LOAD_POS"+ ]+ }+ },+ {+ "uuid": "e78ac0e4-ad96-4581-a133-29b7ea47ab21",+ "before": null,+ "after": {+ "kind": "via",+ "at": [+ "133",+ "100.8"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "ec56cc46-09f5-4ff9-a1b6-61699db68686",+ "before": {+ "kind": "segment",+ "start": [+ "126.5",+ "84"+ ],+ "end": [+ "124.9",+ "82.3"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "126.5",+ "84"+ ],+ "end": [+ "124.9",+ "82.3"+ ],+ "width": [+ "1.75"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ }+ },+ {+ "uuid": "eda97c98-54ed-4541-b2f0-728cc4b05707",+ "before": null,+ "after": {+ "kind": "via",+ "at": [+ "138",+ "100.8"+ ],+ "size": [+ "0.8"+ ],+ "drill": [+ "0.4"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "f120f8db-288f-4938-acbf-98ff5e4065df",+ "before": {+ "kind": "segment",+ "start": [+ "133.5",+ "84"+ ],+ "end": [+ "126.5",+ "84"+ ],+ "width": [+ "1.5"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "133.5",+ "84.25"+ ],+ "end": [+ "126.8",+ "84.25"+ ],+ "width": [+ "2"+ ],+ "layer": [+ "B.Cu"+ ],+ "net": [+ "SHUNT_P"+ ]+ }+ },+ {+ "uuid": "f29acf3e-748d-407f-92e0-ec0544f3474e",+ "before": {+ "kind": "segment",+ "start": [+ "129.3",+ "88.8"+ ],+ "end": [+ "130",+ "88.8"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "129.5",+ "88.8"+ ],+ "end": [+ "130",+ "88.8"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ }+ },+ {+ "uuid": "f51c1167-b9b7-492f-9e74-713a6b57fda7",+ "before": null,+ "after": {+ "kind": "via",+ "at": [+ "139.4",+ "92.4"+ ],+ "size": [+ "0.6"+ ],+ "drill": [+ "0.3"+ ],+ "layers": [+ "F.Cu",+ "B.Cu"+ ],+ "net": [+ "GND"+ ]+ }+ },+ {+ "uuid": "f69214e6-434b-473f-b017-0dd038575d19",+ "before": {+ "kind": "segment",+ "start": [+ "129.1",+ "88.6"+ ],+ "end": [+ "129.3",+ "88.8"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ },+ "after": {+ "kind": "segment",+ "start": [+ "129.3",+ "88.6"+ ],+ "end": [+ "129.5",+ "88.8"+ ],+ "width": [+ "0.25"+ ],+ "layer": [+ "F.Cu"+ ],+ "net": [+ "SHUNT_N_SENSE"+ ]+ }+ }+ ],+ "note": "All track/via changes inventoried by saved UUID. Native net invariant additionally checks newly created copper before and after connectivity/fill/save. Zone fill geometry and placement still require visual/native review."+}
checkpoints/unclipped-hotspots-v1/drc-v27.jsonadded+36@@ -0,0 +1,36 @@+{ + "$schema": "https://schemas.kicad.org/drc.v1.json", + "coordinate_units": "mm", + "date": "2026-10-10T07:45:29", + "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": "candidate-v27.kicad_pcb", + "unconnected_items": [], + "violations": [] +}
design/step12-hotspot-progress.png⋯ 1 unchanged line ⋯
design/step12-hotspot-v27-geometry.pngadded⋯ 1 unchanged line ⋯
docs/completion-plan.md+4@@ -1,3 +1,7 @@+## Current checkpoint — corrected plated-wall model, candidate v27++AIFlow 0.1.81 is source-pushed, registry-published and installed here; 130 tests and workflow checks pass. Fields PR9 remains under owner review and shared Fields is unchanged. Candidate v27 has zero native DRC errors, opens and warnings with actual project libraries present; complete diff has 44 copper changes, Q2/R7/U3 moves and zero existing copper net changes. Corrected 0.2 mm GND/LOAD_POS/SHUNT_P peaks are 50.70/57.68/59.67 A/mm2. The 0.1 mm refinement is running. Live board unchanged; current and thermal acceptance remain open. Continue engineering rather than stopping at this checkpoint.+ ## Current checkpoint — plated-hole model correction Do not execute the v18 landing plan. The 0.1 mm refinement produced GND 102.24, drain 63.25 and shunt 78.40 A/mm². The complete GND and shunt peak cells lie inside drilled holes: the old raster painted solid discs and coupled layers at their centers. An isolated Fields correction removes drill voids and distributes wall coupling, with 32 passing tests and a production build. Its v18 rerun still fails real surface screens (GND 71.93 and shunt 89.36 at 0.2 mm); the fix does not manufacture a passing result. Barrel currents are now reported separately.
tools/check_hotspot_candidate.py+4−2@@ -1,14 +1,16 @@ """Validate project-only copper experiments with native desktop KiCad, never the editor.""" from pathlib import Path import subprocess,json,shutil,sys-root=Path(__file__).resolve().parents[1];version=sys.argv[1];assert version.startswith('v') and version[1:].isdigit() and 4 <= int(version[1:]) <= 20+root=Path(__file__).resolve().parents[1];version=sys.argv[1];assert version.startswith('v') and version[1:].isdigit() and 4 <= int(version[1:]) <= 40 p=root/'checkpoints/unclipped-hotspots-v1';remote='C:/Users/john/adom-projects/adom-custom-electronic-load/review/unclipped-hotspots-v1';name='candidate-'+version-files=[str(root/'tools'/('hotspot_via_candidate_'+version+'.py'))]+files=[str(root/'tools'/('hotspot_via_candidate_'+version+'.py')),str(root/'kicad/fp-lib-table')] for ext in ['kicad_pro','kicad_dru']: q=p/(name+'.'+ext);shutil.copy2(p/('baseline.'+ext),q);files.append(str(q)) def ab(verb,args): r=subprocess.run(['adom-bridge',verb,json.dumps(args),'--target','AdomLapper','--ai-thread','adom-custom-load'],capture_output=True,text=True);j=json.loads(r.stdout);assert j.get('success'),j;return j ab('send_files',{'filePaths':files,'dest':remote,'reason':'Isolated current-hotspot experiment; preserve live PCB and all original fabrication rules'})+for folder in sorted((root/'kicad/lib').glob('*.pretty')):+ ab('send_files',{'filePaths':[str(p) for p in sorted(folder.glob('*.kicad_mod'))],'dest':remote+'/lib/'+folder.name,'reason':'Validate against the actual project footprint libraries, without changing global desktop configuration'}) exe='C:/Users/john/AppData/Local/Programs/KiCad/10.0/bin/' r=ab('shell_execute',{'command':f'"{exe}python.exe" "{remote}/hotspot_via_candidate_{version}.py" "{remote}/baseline.kicad_pcb" "{remote}/{name}.kicad_pcb"','timeoutSeconds':60,'reason':'Native refill of an isolated saved-board candidate'});(p/(version+'-native-command.json')).write_text(json.dumps(r,indent=2));assert r['exitCode']==0,r r=ab('shell_execute',{'command':f'"{exe}kicad-cli.exe" pcb drc --format json --output "{remote}/drc-{version}.json" "{remote}/{name}.kicad_pcb"','timeoutSeconds':60,'reason':'Native DRC of isolated copper candidate, same project rules'});(p/(version+'-drc-command.json')).write_text(json.dumps(r,indent=2));assert r['exitCode']==0,r
tools/hotspot_via_candidate_v27.pyadded+120@@ -0,0 +1,120 @@+"""Run using native desktop KiCad Python; modifies only an isolated board copy."""+import pcbnew,sys,json+from pathlib import Path+source=Path(sys.argv[1]);out=Path(sys.argv[2]);board=pcbnew.LoadBoard(str(source));nets=board.GetNetsByName()+changes=[]+for net,x,y in [('GND',133.0,100.8),('GND',138.0,100.8),('GND',139.0,93.0),('GND',136.5,93.0),('GND',139.4,90.4),('GND',139.4,91.4),('GND',139.4,92.4)]:+ via=pcbnew.PCB_VIA(board);via.SetPosition(pcbnew.VECTOR2I(pcbnew.FromMM(x),pcbnew.FromMM(y)));via.SetWidth(pcbnew.FromMM(.8));via.SetDrill(pcbnew.FromMM(.4));via.SetLayerPair(pcbnew.F_Cu,pcbnew.B_Cu);via.SetNet(nets[net]);board.Add(via);changes.append({'kind':'via','net':net,'at':[x,y],'sizeMm':.8,'drillMm':.4,'uuid':str(via.m_Uuid.AsString())})+for item in board.GetTracks():+ uid=str(item.m_Uuid.AsString())+ if uid=='32514162-b870-4c7a-95a2-b85b8db79257':+ item.SetWidth(pcbnew.FromMM(1.0));item.SetDrill(pcbnew.FromMM(.6));changes.append({'kind':'resize-via','uuid':uid,'net':'LOAD_POS','sizeMm':1.0,'drillMm':.6})+for item in list(board.GetTracks()):+ uid=str(item.m_Uuid.AsString())+ if uid in ['91eed079-74e4-4863-8dc1-f211a19b6ee0','ad353074-a567-44a9-a20a-744b8057c5a9']:+ board.Remove(item);changes.append({'kind':'remove-track','uuid':uid})+ if uid=='aa6c5964-74d4-410e-a69e-ffb2cd9c9999':+ item.SetWidth(pcbnew.FromMM(1.0));item.SetDrill(pcbnew.FromMM(.6));changes.append({'kind':'resize-via','uuid':uid,'sizeMm':1.0,'drillMm':.6})+def track(net,layer,a,b,width):+ t=pcbnew.PCB_TRACK(board);t.SetStart(pcbnew.VECTOR2I(pcbnew.FromMM(a[0]),pcbnew.FromMM(a[1])));t.SetEnd(pcbnew.VECTOR2I(pcbnew.FromMM(b[0]),pcbnew.FromMM(b[1])));t.SetWidth(pcbnew.FromMM(width));t.SetLayer(layer);t.SetNet(nets[net]);board.Add(t);changes.append({'kind':'track','net':net,'start':a,'end':b,'widthMm':width,'layer':board.GetLayerName(layer)})+for a,b in [((127.46,82),(127.46,83.3)),((127.46,83.3),(126.4,84.36)),((126.4,84.36),(126.4,86.5))]:track('LOAD_POS',pcbnew.F_Cu,a,b,1.5)+for a,b in [((139.4,90.4),(139.4,92)),((139.4,92),(138.4,93)),((138.4,93),(136.5,93))]:track('GND',pcbnew.B_Cu,a,b,1.5)+for item in board.GetTracks():+ if isinstance(item,pcbnew.PCB_VIA) and item.GetNetname()=='GND':+ p=item.GetPosition();xy=(round(pcbnew.ToMM(p.x),3),round(pcbnew.ToMM(p.y),3))+ if xy in [(139.4,86.8),(136.5,93.0),(139.4,90.4),(139.4,91.4),(139.4,92.4)]:item.SetWidth(pcbnew.FromMM(1));item.SetDrill(pcbnew.FromMM(.6));changes.append({'kind':'resize-via','at':xy,'sizeMm':1,'drillMm':.6})+for fp in board.GetFootprints():+ delta={'Q2':-.3,'U3':.3,'R7':.1}.get(fp.GetReference())+ if delta:+ pos=fp.GetPosition();pos.x+=pcbnew.FromMM(delta);fp.SetPosition(pos);changes.append({'kind':'move-footprint','ref':fp.GetReference(),'dxMm':delta})+for item in list(board.GetTracks()):+ if item.GetNetname()=='SHUNT_P_SENSE' and isinstance(item,pcbnew.PCB_VIA):+ pos=item.GetPosition()+ if abs(pcbnew.ToMM(pos.x)-123.6)<.001 and abs(pcbnew.ToMM(pos.y)-85.4)<.001:+ pos.x=pcbnew.FromMM(123.3);item.SetPosition(pos);changes.append({'kind':'move-sense-via','from':[123.6,85.4],'to':[123.3,85.4]})+ if isinstance(item,pcbnew.PCB_VIA):continue+ if item.GetNetname()=='SHUNT_P_SENSE':+ for getter,setter in [(item.GetStart,item.SetStart),(item.GetEnd,item.SetEnd)]:+ pos=getter()+ if abs(pcbnew.ToMM(pos.x)-123.6)<.001 and abs(pcbnew.ToMM(pos.y)-85.4)<.001:pos.x=pcbnew.FromMM(123.3);setter(pos)+ if item.GetNetname()=='SHUNT_N_SENSE' and item.GetLayer()==pcbnew.F_Cu:+ for getter,setter in [(item.GetStart,item.SetStart),(item.GetEnd,item.SetEnd)]:+ pos=getter();x,y=pcbnew.ToMM(pos.x),pcbnew.ToMM(pos.y)+ if 128.79<x<129.31 and 87.29<y<88.81:pos.x+=pcbnew.FromMM(.2);setter(pos)+for item in list(board.GetTracks()):+ uid=str(item.m_Uuid.AsString())+ if uid=='32514162-b870-4c7a-95a2-b85b8db79257':+ item.SetPosition(pcbnew.VECTOR2I(pcbnew.FromMM(126.4),pcbnew.FromMM(86.7)))+ if uid=='13d2f936-e4d3-40cb-9bf7-1b6b26ca4cf2':+ item.SetStart(pcbnew.VECTOR2I(pcbnew.FromMM(126.4),pcbnew.FromMM(86.7)));item.SetWidth(pcbnew.FromMM(1.5))+ if uid=='f120f8db-288f-4938-acbf-98ff5e4065df':+ item.SetStart(pcbnew.VECTOR2I(pcbnew.FromMM(133.5),pcbnew.FromMM(84.2)));item.SetEnd(pcbnew.VECTOR2I(pcbnew.FromMM(126.8),pcbnew.FromMM(84.2)));item.SetWidth(pcbnew.FromMM(1.9))+ if not isinstance(item,pcbnew.PCB_VIA) and item.GetNetname()=='LOAD_POS' and item.GetLayer()==pcbnew.F_Cu:+ for getter,setter in [(item.GetStart,item.SetStart),(item.GetEnd,item.SetEnd)]:+ p=getter()+ if abs(pcbnew.ToMM(p.x)-126.4)<.001 and abs(pcbnew.ToMM(p.y)-86.5)<.001:p.y=pcbnew.FromMM(86.7);setter(p)+for item in board.GetTracks():+ if isinstance(item,pcbnew.PCB_VIA) or item.GetLayer()!=pcbnew.B_Cu or item.GetNetname()!='SHUNT_P_SENSE':continue+ for getter,setter in [(item.GetStart,item.SetStart),(item.GetEnd,item.SetEnd)]:+ p=getter();x,y=pcbnew.ToMM(p.x),pcbnew.ToMM(p.y)+ if abs(y-85.4)<.001 and (abs(x-123.3)<.001 or abs(x-132)<.001):+ p.y=pcbnew.FromMM(85.6)+ if abs(x-132)<.001:p.x=pcbnew.FromMM(132.2)+ setter(p)+# Ease the drain right-angle turn; relocate its adjacent setpoint via with endpoints.+track('LOAD_POS',pcbnew.B_Cu,(126.35,89.0),(125.65,89.7),1.5)+# Preserve explicit branch junctions instead of overlapped dangling endpoints.+for item in list(board.GetTracks()):+ uid=str(item.m_Uuid.AsString())+ if uid=='32514162-b870-4c7a-95a2-b85b8db79257':+ item.SetWidth(pcbnew.FromMM(.8));item.SetDrill(pcbnew.FromMM(.4));item.SetPosition(pcbnew.VECTOR2I(pcbnew.FromMM(126.05),pcbnew.FromMM(86.7)))+ if uid in ['b486fb59-b64e-41ee-a1a7-5a72fcf0a780','8e5d5e2b-78f3-4ed2-af96-409d2ea9d57b']:+ a=item.GetStart();b=item.GetEnd();start=(pcbnew.ToMM(a.x),pcbnew.ToMM(a.y));end=(pcbnew.ToMM(b.x),pcbnew.ToMM(b.y))+ mid=(126.35,89.0) if uid=='b486fb59-b64e-41ee-a1a7-5a72fcf0a780' else (125.65,89.7)+ board.Remove(item);track('LOAD_POS',pcbnew.B_Cu,start,mid,1.5);track('LOAD_POS',pcbnew.B_Cu,mid,end,1.5)+via=pcbnew.PCB_VIA(board);via.SetPosition(pcbnew.VECTOR2I(pcbnew.FromMM(126.8),pcbnew.FromMM(86.7)));via.SetWidth(pcbnew.FromMM(.8));via.SetDrill(pcbnew.FromMM(.4));via.SetLayerPair(pcbnew.F_Cu,pcbnew.B_Cu);via.SetNet(nets['LOAD_POS']);board.Add(via)+# Do not enlarge holes through narrow in-plane paths. Keep the three dedicated shunt thermal vias.+for item in list(board.GetTracks()):+ uid=str(item.m_Uuid.AsString())+ if uid in ['34d3207a-b14a-40d8-be82-5b108c2b867b','9a71af6b-ea83-4f97-b7f6-3f69253c7314']:+ board.Remove(item);continue+ if isinstance(item,pcbnew.PCB_VIA):+ p=item.GetPosition();x,y=pcbnew.ToMM(p.x),pcbnew.ToMM(p.y)+ if uid=='aa6c5964-74d4-410e-a69e-ffb2cd9c9999' or (item.GetNetname()=='GND' and abs(x-139.4)<.001 and abs(y-86.8)<.001):+ item.SetWidth(pcbnew.FromMM(.8));item.SetDrill(pcbnew.FromMM(.4))+# Move the transfer hole off the center of the shunt bus; remove a nearly unused ground hole through the return neck.+for item in list(board.GetTracks()):+ if not isinstance(item,pcbnew.PCB_VIA):continue+ p=item.GetPosition();x,y=pcbnew.ToMM(p.x),pcbnew.ToMM(p.y)+ if item.GetNetname()=='GND' and abs(x-139.4)<.001 and abs(y-86.8)<.001:board.Remove(item)+ if str(item.m_Uuid.AsString())=='aa6c5964-74d4-410e-a69e-ffb2cd9c9999':item.SetPosition(pcbnew.VECTOR2I(pcbnew.FromMM(133.7),pcbnew.FromMM(83.6)))+track('SHUNT_P',pcbnew.F_Cu,(133.7,83.6),(133.8,84.2),1.2)+# Preserve the full plated Q1 source connection; remove its redundant neck-drilling spur.+for item in list(board.GetTracks()):+ uid=str(item.m_Uuid.AsString())+ if uid in ['cd48c727-15bf-4276-b4b8-ae4d936d829d','30d9e8bc-805a-4b1d-8a79-ad625ee59388']:+ board.Remove(item);continue+ if isinstance(item,pcbnew.PCB_VIA) and item.GetNetname()=='GND':+ p=item.GetPosition();x,y=pcbnew.ToMM(p.x),pcbnew.ToMM(p.y)+ if abs(x-139.4)<.001 and any(abs(y-t)<.001 for t in [90.4,91.4,92.4]):p.x=pcbnew.FromMM(139.8);item.SetPosition(p)+# Share vertical current with smaller holes and widen the plated-source exit.+for item in board.GetTracks():+ uid=str(item.m_Uuid.AsString())+ if uid in ['2f235494-7976-4048-be2d-b71507b2b45e','ec56cc46-09f5-4ff9-a1b6-61699db68686']:item.SetWidth(pcbnew.FromMM(1.75))+ if isinstance(item,pcbnew.PCB_VIA) and item.GetNetname()=='GND':+ p=item.GetPosition();x,y=pcbnew.ToMM(p.x),pcbnew.ToMM(p.y)+ if abs(x-139.8)<.001 and any(abs(y-t)<.001 for t in [90.4,91.4,92.4]):+ p.x=pcbnew.FromMM(139.4);item.SetPosition(p);item.SetWidth(pcbnew.FromMM(.6));item.SetDrill(pcbnew.FromMM(.3))+for item in board.GetTracks():+ if str(item.m_Uuid.AsString())=='f120f8db-288f-4938-acbf-98ff5e4065df':+ item.SetStart(pcbnew.VECTOR2I(pcbnew.FromMM(133.5),pcbnew.FromMM(84.25)));item.SetEnd(pcbnew.VECTOR2I(pcbnew.FromMM(126.8),pcbnew.FromMM(84.25)));item.SetWidth(pcbnew.FromMM(2.0))+expected_nets={str(item.m_Uuid.AsString()):item.GetNetname() for item in board.GetTracks()}+board.BuildConnectivity()+actual_nets={str(item.m_Uuid.AsString()):item.GetNetname() for item in board.GetTracks()}+assert actual_nets==expected_nets, {'unexpectedNetChanges':[(k,v,actual_nets.get(k)) for k,v in expected_nets.items() if actual_nets.get(k)!=v]}+for zone in board.Zones():zone.SetNeedRefill(True)+pcbnew.ZONE_FILLER(board).Fill(board.Zones());assert {str(item.m_Uuid.AsString()):item.GetNetname() for item in board.GetTracks()}==expected_nets, 'Zone fill changed copper nets'+pcbnew.SaveBoard(str(out),board)+readback=pcbnew.LoadBoard(str(out))+assert {str(item.m_Uuid.AsString()):item.GetNetname() for item in readback.GetTracks()}==expected_nets, 'Save/readback changed copper nets' +out.with_suffix('.changes.json').write_text(json.dumps({'source':str(source),'candidate':str(out),'changes':changes},indent=2));print(json.dumps({'saved':str(out),'changes':changes}))
tools/plot_hotspot_progress.py+3−3@@ -5,14 +5,14 @@ import matplotlib matplotlib.use('Agg') import matplotlib.pyplot as plt root=Path(__file__).resolve().parents[1]-base=json.loads((root/'design/fields-unclipped-diagnostic/fields.json').read_text());new=json.loads((root/'checkpoints/unclipped-hotspots-v1/fields-v18/fields.json').read_text())+base=json.loads((root/'design/fields-board19-annular/fields.json').read_text());new=json.loads((root/'checkpoints/unclipped-hotspots-v1/fields-v27-annular/fields.json').read_text()) keys=['GND','LOAD_POS','SHUNT_P'];a={n['net']:n['peakJ'] for n in base['nets']};b={n['net']:n['peakJ'] for n in new['nets']} plt.rcParams.update({'font.size':15,'text.color':'#e6edf3','axes.labelcolor':'#e6edf3','xtick.color':'#c1ccd8','ytick.color':'#c1ccd8'}) fig,ax=plt.subplots(figsize=(16,9),facecolor='#101820');ax.set_facecolor('#101820')-x=list(range(3));ax.bar([i-.19 for i in x],[a[k] for k in keys],.36,color='#d58b50',label='Saved board 19');ax.bar([i+.19 for i in x],[b[k] for k in keys],.36,color='#56a6cf',label='Isolated candidate v18')+x=list(range(3));ax.bar([i-.19 for i in x],[a[k] for k in keys],.36,color='#d58b50',label='Saved board 19');ax.bar([i+.19 for i in x],[b[k] for k in keys],.36,color='#56a6cf',label='Isolated candidate v27') for i,k in enumerate(keys): for off,value in [(-.19,a[k]),(.19,b[k])]:ax.text(i+off,value+1,f'{value:.1f}',ha='center',fontsize=18)-ax.axhline(60,color='#fa7180',linewidth=2,linestyle='--',label='Unchanged screen: 60 A/mm²');ax.set_xticks(x,keys);ax.set_ylim(0,90);ax.set_ylabel('Unclipped modeled maximum (A/mm²)');ax.grid(axis='y',alpha=.15);ax.set_axisbelow(True)+ax.axhline(60,color='#fa7180',linewidth=2,linestyle='--',label='Unchanged screen: 60 A/mm²');ax.set_xticks(x,keys);ax.set_ylim(0,110);ax.set_ylabel('Unclipped modeled maximum (A/mm²)');ax.grid(axis='y',alpha=.15);ax.set_axisbelow(True) for spine in ax.spines.values():spine.set_color('#465360') legend=ax.legend(loc='upper right',frameon=False,fontsize=13) for t in legend.get_texts():t.set_color('#e6edf3')