← Commit history

Reject stale-high latch on ARM and record tested output-locked rebuild

John Lauer ·ed4761346e ·19d ago ·parent 1b2b8be
6 files changed +874−18
build/stm32-bringup/build-manifest.jsonadded+828
@@ -0,0 +1,828 @@+{+  "status": "compiled-only-output-locked",+  "flashed": false,+  "physical_usb_verified": false,+  "load_enable_supported": false,+  "production_boot_freshness": false,+  "lab_boot_id": "lab20261009bringup",+  "vid": 51966,+  "pid": 16385,+  "toolchain": "arm-none-eabi-gcc (15:13.2.rel1-2) 13.2.1 20231009",+  "dependencies": {+    "tinyusb": {+      "commit": "5f3d88cdbe87ede4fcaddc6a095dcf2edb100f65",+      "url": "https://github.com/hathach/tinyusb.git"+    },+    "cmsis_device_g0": {+      "commit": "f484fe852535f913a02ee79787eafa74dd7f9488",+      "url": "https://github.com/STMicroelectronics/cmsis_device_g0.git"+    },+    "stm32g0xx_hal_driver": {+      "commit": "a248a9e484d58943b46c68f6c49b4b276778bd59",+      "url": "https://github.com/STMicroelectronics/stm32g0xx_hal_driver.git"+    },+    "CMSIS_5": {+      "commit": "2b7495b8535bdcb306dac29b9ded4cfb679d7e5c",+      "url": "https://github.com/ARM-software/CMSIS_5.git"+    }+  },+  "sources": {+    "firmware/fan_tach.c": "844f00c1f77e39529bd8f667d543ecee187ff4fe91108aedb7a2c36eb22846fa",+    "firmware/fan_tach.h": "20fc7b0bbb1a040dfd0453e3af22cf62e7a564241c28cf9cd08dd9b6d87ddf80",+    "firmware/instruments.h": "1bcd895abf8fe74c5a96028b8b559eafdff0919e970244d4445ccbd72b7a6ee6",+    "firmware/load_core.c": "85017ff0a3e37e7b5e41604989326fe623e7f73427ecd8e1a29c63a38d003638",+    "firmware/load_core.h": "408263af21e6c15e82f4118343a2b7d0dd2db61808754c0b91021acd1146fadf",+    "firmware/load_protocol.c": "208d7e7fb9a05da31c3c200b018f5b188e53ac3d95ac2288a61f683b4f3df1af",+    "firmware/load_protocol.h": "f64f6b689d57501031515e8ee9f8c8349a2cea63738e73db16f95e747caf91fb",+    "firmware/stm32/README.md": "da1875c99b20608e8bdb6bba59d3a3dc045261cfa5bbcf2df1792089f31f4dc4",+    "firmware/stm32/clock.c": "f42f5c1ff229b065a048218ecc575624276aaa229e0bc340d80c80eec35416d2",+    "firmware/stm32/dependencies.json": "7e8f3c17a59c856371a9f411dce6a9dadafbb8c8edd5ede5e4e5cf46b1567e92",+    "firmware/stm32/fan_input.c": "d4ebe5572dbbcd1a3ea84c4e31442732a7237e94d554ec8acdc07142486e92f8",+    "firmware/stm32/fan_input.h": "6dc99727c0e3aa5f711cdfd00b4c53d7bf123ad6698bbe842a64ec6b7d87e77b",+    "firmware/stm32/licenses/CMSIS_5-LICENSE.txt": "b40930bbcf80744c86c46a12bc9da056641d722716c378f5659b9e555ef833e1",+    "firmware/stm32/licenses/cmsis_device_g0-LICENSE.txt": "c71d239df91726fc519c6eb72d318ec65820627232b2f796219e87dcf35d0ab4",+    "firmware/stm32/licenses/stm32g0xx_hal_driver-LICENSE.txt": "3564c849dfd5e628732afb7933ccb1c983b53f7ac6bb237b6177691339082671",+    "firmware/stm32/licenses/tinyusb-LICENSE.txt": "b01185698f530f4f61b28f42d5a4d6bbe7834bde6a63f00773235628a7bdce22",+    "firmware/stm32/main.c": "522b0960564c91dca05b876f0ab05aad4707ac57fb5190b623f7e8e92f3ef84d",+    "firmware/stm32/stm32g0b1kc.ld": "1c938076e760300379115ee955589434dba7b84d1bb945dd41cf39abd342fd13",+    "firmware/stm32/stm32g0xx_hal_conf.h": "2e2a3aed4bf01ce3f890df69061e740369ed8839bb53d5b1be745be4de185b6f",+    "firmware/stm32/syscalls.c": "bbfcedecfe5f33380424ab90cdb89c842c6a5717e01298a29ec43aef24c1524d",+    "firmware/stm32/tusb_config.h": "dfbb343cc609aa2693058b7d7e6e6c487524222cbe3eab5296568eca0b7d3970",+    "firmware/stm32/usb_descriptors.c": "ed2666d7115f05a07088dd92ebf35a600aadd8d9878fae2eb7635201b8f0b2a9",+    "tools/build_stm32_bringup.py": "20f8d74fa7bfc8d3ea9a4ba5fce1b912b98a88389285111ff70d58fde4aa93f2"+  },+  "artifacts": {+    "adom-load-bringup.hex": "1ee596b32a04a79ea6994515f4bc4d7e50e9c6afa037a40a65864f95d53b2e55",+    "adom-load-bringup.bin": "2f4b39f60ba4e6cd5af8de22b2224af326ea31ea9eafc68992a42e50531b734a",+    "adom-load-bringup.map": "38255082269a58d4b152f41c2cc6d3a7962eada683b12971c69e3541cdc08ab6",+    "adom-load-bringup.elf": "9ef8fce195c337c3e47d37be92f47b64cd6f189a4b57df7e1d72b5a441c2852e"+  },+  "commands": [+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-std=c11",+      "-Werror",+      "-c",+      "/home/adom/project/adom-custom-electronic-load/firmware/load_core.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/00-load_core.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-std=c11",+      "-Werror",+      "-c",+      "/home/adom/project/adom-custom-electronic-load/firmware/load_protocol.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/01-load_protocol.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-std=c11",+      "-Werror",+      "-c",+      "/home/adom/project/adom-custom-electronic-load/firmware/fan_tach.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/02-fan_tach.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-std=c11",+      "-Werror",+      "-c",+      "/home/adom/project/adom-custom-electronic-load/firmware/stm32/fan_input.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/03-fan_input.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-std=c11",+      "-Werror",+      "-c",+      "/home/adom/project/adom-custom-electronic-load/firmware/stm32/main.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/04-main.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-std=c11",+      "-Werror",+      "-c",+      "/home/adom/project/adom-custom-electronic-load/firmware/stm32/clock.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/05-clock.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-std=c11",+      "-Werror",+      "-c",+      "/home/adom/project/adom-custom-electronic-load/firmware/stm32/usb_descriptors.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/06-usb_descriptors.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-std=c11",+      "-Werror",+      "-c",+      "/home/adom/project/adom-custom-electronic-load/firmware/stm32/syscalls.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/07-syscalls.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/src/tusb.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/08-tusb.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/src/common/tusb_fifo.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/09-tusb_fifo.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/src/device/usbd.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/10-usbd.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/src/class/cdc/cdc_device.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/11-cdc_device.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/src/portable/st/stm32_fsdev/dcd_stm32_fsdev.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/12-dcd_stm32_fsdev.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/src/portable/st/stm32_fsdev/fsdev_common.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/13-fsdev_common.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/14-stm32g0xx_hal.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_cortex.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/15-stm32g0xx_hal_cortex.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_pwr.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/16-stm32g0xx_hal_pwr.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_pwr_ex.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/17-stm32g0xx_hal_pwr_ex.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_rcc.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/18-stm32g0xx_hal_rcc.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_rcc_ex.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/19-stm32g0xx_hal_rcc_ex.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Src/stm32g0xx_hal_gpio.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/20-stm32g0xx_hal_gpio.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Source/Templates/system_stm32g0xx.c",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/21-system_stm32g0xx.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-Os",+      "-g3",+      "-ffunction-sections",+      "-fdata-sections",+      "-fno-common",+      "-fstack-usage",+      "-Wall",+      "-Wextra",+      "-DSTM32G0B1xx",+      "-DUSE_HAL_DRIVER",+      "-DADOM_BRINGUP_OUTPUT_LOCK=1",+      "-DADOM_USB_VID=51966",+      "-DADOM_USB_PID=16385",+      "-DADOM_LAB_BOOT_ID=\"lab20261009bringup\"",+      "-I/home/adom/project/adom-custom-electronic-load/firmware",+      "-I/home/adom/project/adom-custom-electronic-load/firmware/stm32",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/src",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/lib/CMSIS_5/CMSIS/Core/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Include",+      "-I/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/stm32g0xx_hal_driver/Inc",+      "-I/home/adom/project/adom-load-firmware-toolchain/root/usr/include/newlib",+      "-c",+      "/home/adom/project/adom-load-firmware-deps/tinyusb/hw/mcu/st/cmsis_device_g0/Source/Templates/gcc/startup_stm32g0b1xx.s",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/22-startup_stm32g0b1xx.o"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-gcc",+      "-mcpu=cortex-m0plus",+      "-mthumb",+      "-nostartfiles",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/00-load_core.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/01-load_protocol.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/02-fan_tach.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/03-fan_input.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/04-main.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/05-clock.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/06-usb_descriptors.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/07-syscalls.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/08-tusb.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/09-tusb_fifo.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/10-usbd.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/11-cdc_device.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/12-dcd_stm32_fsdev.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/13-fsdev_common.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/14-stm32g0xx_hal.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/15-stm32g0xx_hal_cortex.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/16-stm32g0xx_hal_pwr.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/17-stm32g0xx_hal_pwr_ex.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/18-stm32g0xx_hal_rcc.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/19-stm32g0xx_hal_rcc_ex.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/20-stm32g0xx_hal_gpio.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/21-system_stm32g0xx.o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/22-startup_stm32g0b1xx.o",+      "-T",+      "/home/adom/project/adom-custom-electronic-load/firmware/stm32/stm32g0b1kc.ld",+      "-Wl,--gc-sections,--print-memory-usage",+      "-Wl,-Map=/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.map",+      "-L/home/adom/project/adom-load-firmware-toolchain/root/usr/lib/arm-none-eabi/newlib/thumb/v6-m/nofp",+      "-Wl,--start-group",+      "-lc",+      "-lm",+      "-lnosys",+      "-lgcc",+      "-Wl,--end-group",+      "-o",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.elf"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-objcopy",+      "-O",+      "ihex",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.elf",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.hex"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-objcopy",+      "-O",+      "binary",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.elf",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.bin"+    ],+    [+      "/home/adom/project/adom-load-firmware-toolchain/root/usr/bin/arm-none-eabi-size",+      "/home/adom/project/adom-custom-electronic-load/build/stm32-bringup/adom-load-bringup.elf"+    ]+  ]+}
docs/status.md+6
@@ -1,3 +1,9 @@+# Current checkpoint - 2026-10-09, 20:10 UTC++Board 18 remains unchanged and native-connected. A separate package cooling calculator and chart now expose contact-area conversion, package/interface/sink resistance, and the difference between a ducted-flow scenario and installed fan performance. Three numerical unit/energy-balance checks pass. This sensitivity study does not pass the thermal gate or qualify a selected assembly. See [package cooling review](package-cooling-review.md).++Firmware ARM now rejects a hardware latch that was already high before the request. The verified low-to-high handshake is covered in both the core and framed-protocol tests. Sanitizer-backed C suites and 20 Python tests pass. The output-locked STM32 image rebuilds at 64,600 flash bytes and 23,968 reserved/used RAM bytes; no flash or physical testing occurred.+ # Current checkpoint - 2026-10-09, 18:19 UTC  The nine reviewed D1 thermal vias are now landed, native-saved and adopted by AIFlow. The actual saved board has zero native DRC errors and zero opens, with 15 existing library warnings. Six via coordinates differ from the offline generator by at most one nanometre per axis; this is explicitly audited, not called exact equality. Other track/via geometry matches, and filled-zone differences are below 0.000001 mm2. Both native 2D and 3D views were inspected. Formal Fields/current/thermal and finish gates remain incomplete.
firmware/load_core.c+3−1
@@ -29,7 +29,9 @@ void load_off(load_core *c){c->enable=false;c->dac_code=0;c->applied_a=0;c->requ bool load_set_current(load_core *c,float a){if(!isfinite(a)||a<0||a>3)return false;c->requested_a=a;return true;} void load_heartbeat(load_core *c,uint32_t now){c->lease_ms=now;} bool load_arm(load_core *c,const load_sample *s){- if(c->state!=LOAD_OFF || !s->assembly_qualified || checks(c,s))return false;+ /* A pre-existing high latch is not acknowledgement of this ARM request.+    The adapter must first verify reset low, then pulse ARM_CLK and observe high. */+ if(c->state!=LOAD_OFF || s->latch_q || !s->assembly_qualified || checks(c,s))return false;  c->state=LOAD_ARMED;c->last_tick_ms=s->now_ms;c->arm_started_ms=s->now_ms;return true; } bool load_clear_fault(load_core *c,const load_sample *s){
firmware/stm32/README.md+4
@@ -42,3 +42,7 @@ This is compiled integration, not a measured fan test. Confirm the fan's pulse count, external pull-up, oscillator accuracy, ISR latency under USB traffic, disconnect/stuck-wire behavior and physical stall response on the actual board. No fan drive, load-enable, or assembly qualification is introduced by this input.++## ARM acknowledgement freshness++The portable core refuses ARM if the sampled hardware latch is already high. A new ARM sequence requires a verified low latch before the adapter pulses ARM_CLK, then a high acknowledgement within the existing 100 ms timeout. Stale-high latch state cannot authorize a new run. Host core and framed-protocol tests cover this refusal and the normal low-to-high transition. The output-locked MCU image still never executes the functional handshake, and hardware verification remains required.
tests/test_load_core.c+28−17
@@ -3,48 +3,59 @@ #include <math.h> #include <stdio.h> static load_sample good(uint32_t t){return (load_sample){.now_ms=t,.sample_ms=t,.last_tach_ms=t,.fan_rpm=7000,.fan_rpm_valid=true,.volts=5,.amps=0,.case_c=25,.sensors_valid=true,.hw_ok=true,.latch_q=true,.assembly_qualified=true};}+/* Existing policy cases begin after the adapter has verified latch reset. */+static bool arm_from_low(load_core *c,load_sample *s){s->latch_q=false;return load_arm(c,s);} int main(void){  load_core c;load_init(&c,0);load_sample s=good(0);  assert(!c.enable&&c.dac_code==0);+ /* Stale high acknowledgement must not authorize a new run. */+ assert(!load_arm(&c,&s));assert(c.state==LOAD_OFF&&!c.enable&&!c.dac_code);+ s.latch_q=false;assert(load_arm(&c,&s));+ s=good(10);s.latch_q=false;load_tick(&c,&s);+ assert(c.state==LOAD_ARMED&&!c.enable&&!c.dac_code);+ s=good(20);load_tick(&c,&s);assert(c.state==LOAD_RUNNING);+ load_off(&c);s=good(30);assert(!load_arm(&c,&s));+ load_init(&c,0);s=good(0);+  assert(!load_set_current(&c,NAN));assert(!load_set_current(&c,INFINITY));assert(!load_set_current(&c,3.01f));assert(!load_set_current(&c,-1));- s.assembly_qualified=false;assert(!load_arm(&c,&s));s.assembly_qualified=true;- assert(load_set_current(&c,3));assert(load_arm(&c,&s));+ s.assembly_qualified=false;assert(!arm_from_low(&c,&s));s.assembly_qualified=true;+ assert(load_set_current(&c,3));assert(arm_from_low(&c,&s));  for(unsigned t=10;t<=1000;t+=10){s=good(t);load_heartbeat(&c,t);load_tick(&c,&s);}  assert(c.applied_a<=1.001f&&c.applied_a>.99f); /* 5W bring-up ceiling */  s=good(1010);s.volts=24;load_tick(&c,&s);assert(c.applied_a<=5.0f/24);  s=good(1020);s.hw_ok=false;load_tick(&c,&s);assert(c.state==LOAD_FAULT&&!c.enable&&!c.dac_code);  s=good(1030);load_tick(&c,&s);assert(c.state==LOAD_FAULT);assert(!load_clear_fault(&c,&s));  s.latch_q=false;assert(load_clear_fault(&c,&s));assert(c.state==LOAD_OFF);- assert(load_arm(&c,&s));s=good(1040);s.sample_ms=900;load_tick(&c,&s);assert(c.faults&F_SENSOR);- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(10);s.case_c=NAN;load_tick(&c,&s);assert(c.faults&F_SENSOR);- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(1001);load_tick(&c,&s);assert(c.faults&F_LINK);- load_init(&c,UINT32_MAX-10);s=good(UINT32_MAX-10);assert(load_arm(&c,&s));s=good(5);load_tick(&c,&s);assert(c.state==LOAD_RUNNING); /* clock wrap */- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));+ assert(arm_from_low(&c,&s));s=good(1040);s.sample_ms=900;load_tick(&c,&s);assert(c.faults&F_SENSOR);+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));s=good(10);s.case_c=NAN;load_tick(&c,&s);assert(c.faults&F_SENSOR);+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));s=good(1001);load_tick(&c,&s);assert(c.faults&F_LINK);+ load_init(&c,UINT32_MAX-10);s=good(UINT32_MAX-10);assert(arm_from_low(&c,&s));s=good(5);load_tick(&c,&s);assert(c.state==LOAD_RUNNING); /* clock wrap */+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));  for(unsigned t=10;t<=260;t+=10){s=good(t);s.last_tach_ms=0;load_tick(&c,&s);}assert(c.faults&F_FAN);- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(10);s.case_c=55;load_tick(&c,&s);assert(c.faults&F_THERMAL);- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));s=good(10);load_tick(&c,&s);s=good(20);s.latch_q=false;load_tick(&c,&s);assert(c.faults&F_HARDWARE);+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));s=good(10);s.case_c=55;load_tick(&c,&s);assert(c.faults&F_THERMAL);+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));s=good(10);load_tick(&c,&s);s=good(20);s.latch_q=false;load_tick(&c,&s);assert(c.faults&F_HARDWARE);  /* Fan evidence must be qualified before arm, and stays required while running. */  const float bad_rpm[]={0,4999,10001,NAN,INFINITY};  for(unsigned i=0;i<sizeof(bad_rpm)/sizeof(bad_rpm[0]);i++){-  load_init(&c,0);s=good(0);s.fan_rpm=bad_rpm[i];assert(!load_arm(&c,&s));-  s=good(0);assert(load_arm(&c,&s));s=good(10);s.fan_rpm=bad_rpm[i];load_tick(&c,&s);+  load_init(&c,0);s=good(0);s.fan_rpm=bad_rpm[i];assert(!arm_from_low(&c,&s));+  s=good(0);assert(arm_from_low(&c,&s));s=good(10);s.fan_rpm=bad_rpm[i];load_tick(&c,&s);   assert(c.state==LOAD_FAULT&&(c.faults&F_FAN)&&!c.enable&&!c.dac_code);   s=good(20);load_tick(&c,&s);assert(c.state==LOAD_FAULT); /* no automatic restart */  }- load_init(&c,0);s=good(0);s.fan_rpm_valid=false;assert(!load_arm(&c,&s));+ load_init(&c,0);s=good(0);s.fan_rpm_valid=false;assert(!arm_from_low(&c,&s));  load_init(&c,0);  load_off(&c);assert(c.state==LOAD_OFF&&!c.enable&&c.requested_a==0);  /* An analog-loop fault can violate actual power despite a low requested current. */- load_init(&c,0);s=good(0);assert(load_arm(&c,&s));+ load_init(&c,0);s=good(0);assert(arm_from_low(&c,&s));  s=good(10);s.volts=24;s.amps=1;load_tick(&c,&s);  assert(c.state==LOAD_FAULT&&(c.faults&F_ENVELOPE)&&!c.enable&&!c.dac_code);- load_init(&c,0);s=good(0);s.amps=1.09f;assert(load_arm(&c,&s));+ load_init(&c,0);s=good(0);s.amps=1.09f;assert(arm_from_low(&c,&s));  s=good(10);s.amps=1.11f;load_tick(&c,&s);assert(c.faults&F_ENVELOPE);  /* Fresh heartbeats cannot keep an unacknowledged arm waiting indefinitely. */- load_init(&c,UINT32_MAX-50);s=good(UINT32_MAX-50);s.latch_q=false;assert(load_arm(&c,&s));+ load_init(&c,UINT32_MAX-50);s=good(UINT32_MAX-50);s.latch_q=false;assert(arm_from_low(&c,&s));  for(unsigned dt=10;dt<=100;dt+=10){s=good((UINT32_MAX-50)+dt);s.latch_q=false;load_heartbeat(&c,s.now_ms);load_tick(&c,&s);}  assert(c.state==LOAD_FAULT&&(c.faults&F_HARDWARE)&&!c.enable&&!c.dac_code);- load_init(&c,0);s=good(0);c.power_limit_w=NAN;assert(!load_arm(&c,&s));- c.power_limit_w=25;assert(!load_arm(&c,&s)); /* Unqualified raised ceiling is refused. */+ load_init(&c,0);s=good(0);c.power_limit_w=NAN;assert(!arm_from_low(&c,&s));+ c.power_limit_w=25;assert(!arm_from_low(&c,&s)); /* Unqualified raised ceiling is refused. */  puts("load_core: safety policy tests passed (host C build; no MCU/HAL validation)"); }
tests/test_load_protocol.c+5
@@ -40,6 +40,11 @@ int main(void){  for(size_t n=0;n<strlen(q);n++){init();s=sample(0);for(size_t i=0;i<n;i++)load_protocol_byte(&p,q[i],&s,reply,sizeof(reply));load_protocol_byte(&p,'\n',&s,reply,sizeof(reply));fault();}  /* A serial field can never supply trusted assembly qualification. */  init();command(2,"claim","",0);command(3,"arm",",\"assembly_qualified\":true",0);fault();+ /* A fresh serial ARM still refuses hardware acknowledgement left high. */+ init();command(2,"claim","",0);s=sample(0);s.latch_q=true;+ q="{\"id\":3,\"cmd\":\"arm\",\"boot\":\"boot0001\",\"owner\":\"" OWNER "\"}\n";+ for(size_t i=0;q[i];i++)load_protocol_byte(&p,q[i],&s,reply,sizeof(reply));+ assert(strstr(reply,"arm_interlock"));fault();  init();command(2,"claim","",0);before=stops;  assert(send("{\"id\":3,\"cmd\":\"arm\",\"boot\":\"boot9999\",\"owner\":\"" OWNER "\"}\n",0));fault();assert(stops>before);  /* Bounded deterministic byte fuzz under ASan/UBSan, including 0xff and NUL. */