{
  "schemaVersion": 1,
  "manifestType": "cork-robotics-firmware",
  "channel": "stable",
  "generatedAt": "2026-06-17T06:04:20.254Z",
  "pollIntervalSeconds": 21600,
  "updateMode": "app-assisted-board-pull",
  "artifactBasePath": "/releases/firmware",
  "boards": [
    {
      "id": "main-board",
      "displayName": "Main Board",
      "description": "Primary ESP32 controller firmware.",
      "chip": "esp32",
      "architecture": "xtensa-esp32",
      "hardwareIds": [
        "main-board",
        "cork-main-esp32"
      ],
      "latest": {
        "version": "0.1.12",
        "releasedAt": "2026-06-17T06:04:20.254Z",
        "required": false,
        "notes": [
          "Main-board SAFE_BOOT CAN2 encoder diagnostic poll update: ACAN2517FD normal/listen receive with explicit poll, no motion or TMC enable."
        ],
        "minHardwareRevision": null,
        "maxHardwareRevision": null,
        "firmware": {
          "url": "/releases/firmware/main-board/0.1.12/main-board-0.1.12-can2-encoder-diag-poll-20260617.bin",
          "size": 1345056,
          "sha256": "1d1fbef34435308ab51fbe1426f3537de73ee893f63717f5031af0d819780920",
          "signature": null
        }
      },
      "releases": [
        {
          "version": "0.1.12",
          "releasedAt": "2026-06-17T06:04:20.254Z",
          "required": false,
          "notes": [
            "Main-board SAFE_BOOT CAN2 encoder diagnostic poll update: ACAN2517FD normal/listen receive with explicit poll, no motion or TMC enable."
          ],
          "minHardwareRevision": null,
          "maxHardwareRevision": null,
          "firmware": {
            "url": "/releases/firmware/main-board/0.1.12/main-board-0.1.12-can2-encoder-diag-poll-20260617.bin",
            "size": 1345056,
            "sha256": "1d1fbef34435308ab51fbe1426f3537de73ee893f63717f5031af0d819780920",
            "signature": null
          }
        },
        {
          "version": "0.1.11",
          "releasedAt": "2026-06-17T05:57:34.552Z",
          "required": false,
          "notes": [
            "Main-board SAFE_BOOT CAN2 encoder diagnostic: ACAN2517FD listen/normal receive, encoder heartbeat/status decode, no motion or TMC enable."
          ],
          "minHardwareRevision": null,
          "maxHardwareRevision": null,
          "firmware": {
            "url": "/releases/firmware/main-board/0.1.11/main-board-0.1.11-can2-encoder-diag-20260617.bin",
            "size": 1345040,
            "sha256": "244f239ddb78e35a9ffedecb654842cf5e7f3d4f79eb06c4190ece9192bfbc43",
            "signature": null
          }
        },
        {
          "version": "0.1.4",
          "releasedAt": "2026-06-17T00:48:22.114Z",
          "required": false,
          "notes": [
            "Diagnostic main-board OTA to test swapped camSense UART pins: RX GPIO43, TX GPIO44. Safe boot/no-motion only."
          ],
          "minHardwareRevision": null,
          "maxHardwareRevision": null,
          "firmware": {
            "url": "/releases/firmware/main-board/0.1.4/main-board-0.1.4-uart-swap-test-20260616.bin",
            "size": 1332048,
            "sha256": "2175f6985bc5d6b965d8552ed78fa6bc4badf50c700cf7145e319daa53e9c1de",
            "signature": null
          }
        },
        {
          "version": "0.1.3",
          "releasedAt": "2026-06-16T22:35:56.342Z",
          "required": false,
          "notes": [
            "Main ESP32 Node2 CAN2 probe pin-name fix after UART recovery diagnostics; keeps no-motion gates and sensor relay protections."
          ],
          "minHardwareRevision": null,
          "maxHardwareRevision": null,
          "firmware": {
            "url": "/releases/firmware/main-board/0.1.3/main-board-0.1.3-node2-can-pinfix-20260616.bin",
            "size": 1331744,
            "sha256": "9fddf08c0f2eeabfdc329623d6ddbb124f678bf180573e1d3469262edf29874c",
            "signature": null
          }
        },
        {
          "version": "0.1.2",
          "releasedAt": "2026-06-16T00:00:00.000Z",
          "required": false,
          "notes": [
            "Distributed main ESP32 desktop-connect and OTA readiness fix: valid status JSON, 115200 handshake, sensor OTA keeps main gateway pollable."
          ],
          "minHardwareRevision": null,
          "maxHardwareRevision": null,
          "firmware": {
            "url": "/releases/firmware/main-board/0.1.2/main-board-0.1.2.bin",
            "size": 1316400,
            "sha256": "1d1db4c202ebea3d0ddb34202c5dda11a189ddf46a7ad8df149036837db83dac",
            "signature": null
          }
        },
        {
          "version": "0.1.1",
          "releasedAt": "2026-06-16T00:00:00.000Z",
          "required": false,
          "notes": [
            "OTA app-assisted board-pull smoke build from drawBot firmware."
          ],
          "minHardwareRevision": null,
          "maxHardwareRevision": null,
          "firmware": {
            "url": "/releases/firmware/main-board/0.1.1/main-board-0.1.1.bin",
            "size": 1310720,
            "sha256": "ed4289f5c7184624787ff383265f789460273a0a107c21191b7a20957c81fc35",
            "signature": null
          }
        }
      ]
    },
    {
      "id": "sensor-board",
      "displayName": "Sensor Board",
      "description": "Sensor ESP32 firmware.",
      "chip": "esp32",
      "architecture": "xtensa-esp32",
      "hardwareIds": [
        "sensor-board",
        "cork-sensor-esp32"
      ],
      "latest": {
        "version": "0.1.2",
        "releasedAt": "2026-06-16T00:00:00.000Z",
        "required": false,
        "notes": [
          "Sensor ESP32-S3 Wi-Fi/OTA gateway status replies are queued behind realtime pressure/IMU telemetry priority."
        ],
        "minHardwareRevision": null,
        "maxHardwareRevision": null,
        "firmware": {
          "url": "/releases/firmware/sensor-board/0.1.2/sensor-board-0.1.2.bin",
          "size": 1100224,
          "sha256": "374c091c0bf07e3cb68954b744a75b49e868fef2f53734244dedbf4b930ee78e",
          "signature": null
        }
      },
      "releases": [
        {
          "version": "0.1.2",
          "releasedAt": "2026-06-16T00:00:00.000Z",
          "required": false,
          "notes": [
            "Sensor ESP32-S3 Wi-Fi/OTA gateway status replies are queued behind realtime pressure/IMU telemetry priority."
          ],
          "minHardwareRevision": null,
          "maxHardwareRevision": null,
          "firmware": {
            "url": "/releases/firmware/sensor-board/0.1.2/sensor-board-0.1.2.bin",
            "size": 1100224,
            "sha256": "374c091c0bf07e3cb68954b744a75b49e868fef2f53734244dedbf4b930ee78e",
            "signature": null
          }
        },
        {
          "version": "0.1.1",
          "releasedAt": "2026-06-16T00:00:00.000Z",
          "required": false,
          "notes": [
            "OTA app-assisted board-pull smoke build from drawBot sensor firmware."
          ],
          "minHardwareRevision": null,
          "maxHardwareRevision": null,
          "firmware": {
            "url": "/releases/firmware/sensor-board/0.1.1/sensor-board-0.1.1.bin",
            "size": 1100112,
            "sha256": "5ebeb4f2c5bdd3643f9443ddbabd28b6930e901d15396890fdc00c8a33897644",
            "signature": null
          }
        }
      ]
    }
  ]
}
