)]}'
{
  "commit": "872b4fbdc3c607b522211839a6b3b82e18310a1b",
  "tree": "ebb5e40aa6774417ad2d3f2f8968dd17c78b83ba",
  "parents": [
    "9466f3cda69b052679e7bb078b5cf7906ddbea27"
  ],
  "author": {
    "name": "hathach",
    "email": "thach@tinyusb.org",
    "time": "Thu Aug 20 14:30:59 2026 +0700"
  },
  "committer": {
    "name": "hathach",
    "email": "thach@tinyusb.org",
    "time": "Fri Aug 21 00:47:27 2026 +0700"
  },
  "message": "docs: add hardware-in-the-loop rig reference\n\nDocument the ci and hfp HIL rigs in enough detail to reproduce one: bill of\nmaterials with photos, BIOS/IOMMU and vfio-pci passthrough on the Proxmox\nhost, the Renesas uPD720201 firmware install, the guest software and\npermissions, the one-hub-per-root-port USB topology rule and the per-box\nsplit of probe and DUT hubs, how CI drives the rigs, and the operational\ngotchas.\n\nThe attached-board table is generated from test/hil/tinyusb.json and\ntest/hil/hfp.json by tools/gen_doc.py into docs/reference/hil_boards.md,\nwhich the page includes. Sphinx excludes that partial so it is not also\nbuilt as an orphan document.\n\nAlso exclude docs/superpowers/ from the Sphinx build: it holds internal\nplans, specs and handoffs rather than published documentation, and since\nnothing references them from a toctree each emitted \"document isn\u0027t\nincluded in any toctree\" -- 26 warnings in total, so build_doc.py -W could\nnever pass. It now does.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "73544b18a649feeedb48e212d5ed970e9fd6115e",
      "old_mode": 33188,
      "old_path": ".claude/skills/build-doc/SKILL.md",
      "new_id": "d57beb664e91d90fe2aac881abe0671f9ab820a5",
      "new_mode": 33188,
      "new_path": ".claude/skills/build-doc/SKILL.md"
    },
    {
      "type": "modify",
      "old_id": "3e53595e1e8bfe1abecd953b818d537114e93fec",
      "old_mode": 33188,
      "old_path": ".claude/skills/make-release/SKILL.md",
      "new_id": "47d06d219f5ed1bd5ad0e55c3e0ca0bb21fd7d21",
      "new_mode": 33188,
      "new_path": ".claude/skills/make-release/SKILL.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "1f8ec8a0797bb19c1766232388214c5f993827fc",
      "new_mode": 33188,
      "new_path": "docs/assets/hil/cable-xh254.jpg"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3557047e693136cbc69e72bfa0e819a757eaf260",
      "new_mode": 33188,
      "new_path": "docs/assets/hil/leaf-hub.jpg"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "4563bb9f7ce7f5f49e450fac78076dbda6b6dbe3",
      "new_mode": 33188,
      "new_path": "docs/assets/hil/pcie-card.jpg"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "03f389ab0ec3a3812d3fa2f4842b14db63aa8c18",
      "new_mode": 33188,
      "new_path": "docs/assets/hil/storage-box.jpg"
    },
    {
      "type": "modify",
      "old_id": "c6d04bff58e31bcda2ae2da857463e01571c8cbd",
      "old_mode": 33261,
      "old_path": "docs/conf.py",
      "new_id": "ea3de0c4492f989e37e34d0a44dfc4ca8f752336",
      "new_mode": 33261,
      "new_path": "docs/conf.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "48c362f4fe23a0fa198da080add669190947cff1",
      "new_mode": 33188,
      "new_path": "docs/reference/hardware-in-the-loop.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e8f36464634c17f5a4e265158d8bef6c8535e677",
      "new_mode": 33188,
      "new_path": "docs/reference/hil_boards.md"
    },
    {
      "type": "modify",
      "old_id": "c66ce618fcdf4a5912a26a0fa29d167d1c900946",
      "old_mode": 33188,
      "old_path": "docs/reference/index.rst",
      "new_id": "85fd767eae99fa9f99da6c2a1f48d13b0cb1671f",
      "new_mode": 33188,
      "new_path": "docs/reference/index.rst"
    },
    {
      "type": "modify",
      "old_id": "3920531d561b3add0c3f5ebd2c2217504cb422e5",
      "old_mode": 33261,
      "old_path": "tools/gen_doc.py",
      "new_id": "41a60c0b6fdea2f474de5eadaee874230c254a9c",
      "new_mode": 33261,
      "new_path": "tools/gen_doc.py"
    },
    {
      "type": "modify",
      "old_id": "65226834f09a02068ce59d86caf11b035102bcc7",
      "old_mode": 33261,
      "old_path": "tools/make_release.py",
      "new_id": "ec4755f3486a4867ae1bb2d5e06c452af03493c7",
      "new_mode": 33261,
      "new_path": "tools/make_release.py"
    }
  ]
}
