)]}'
{
  "commit": "be86281b81b70adc1ce3746d620c912bf032fac2",
  "tree": "e751548c35e8b3f09d55a5303e7e7d7acf3c6a6b",
  "parents": [
    "6905639b07c69fec68e9ebc77f7d27ac2775ee41"
  ],
  "author": {
    "name": "hathach",
    "email": "thach@tinyusb.org",
    "time": "Thu Aug 20 16:45:32 2026 +0700"
  },
  "committer": {
    "name": "hathach",
    "email": "thach@tinyusb.org",
    "time": "Thu Aug 20 16:45:32 2026 +0700"
  },
  "message": "hil-pool-check: document the probe power-cycle escalation; name the env script directly\n\nA probe whose firmware has wedged reports flash-failed with the probe present and\n\"probe toggle unconfirmed\". The tool\u0027s own recovery cannot fix that: an authorized\ntoggle re-enumerates but never removes power, and hil_pool_check.py:304 already notes\nthat ST-Link, WCH-Link, CP210x and picoprobe keep their sysfs kobject across one. So\nthe check correctly gives up, and the operator was left to invent the next rung.\n\nWrite it down, as what this rig\u0027s hardware actually does rather than what uhubctl\nadvertises: the Renesas cards list their root hubs as ppps-capable but do not\nimplement it (owner-confirmed - VBUS never drops, only D+/D-), so a root-port cycle\nis a harder forced re-enumeration that a wedged probe can ride out, worth exactly one\nattempt; and the AMD 0000:02:00.0, where the WCH-Links live, has no port-power\nswitching at all - nothing to cycle, straight to a physical replug. Which card a\nprobe hangs off decides which case applies, so the procedure starts from readlink.\n\nThe ordering rules encode the shared-rig protocol: let the full run finish (a bounce\nre-enumerates siblings and corrupts checks still in flight), hold --all with this\nhost\u0027s --config before the cycle (hil_lock.py hold validates nothing against the\nroster and nothing maps a sysfs busport to a board name, so a narrower hand-listed\nhold reserves nothing while reporting success - and --all defaults to tinyusb.json,\nwhich on the tusb rig would reserve 27 boards that do not exist there), release\nBEFORE the re-check (hil_pool_check.py self-locks every board it checks, so a hold\nstill in place makes the verification report locked against your own hold and verify\nnothing), and drive the cycle through usb_recover.sh root-cycle by its full in-repo\npath - it is on no PATH and sudo\u0027s secure_path excludes the checkout. Never a bare\n`uhubctl -a cycle`: without -S it writes sysfs disable, whose disable_store takes the\nroot hub\u0027s lock uninterruptibly and then usb_disconnect()s the wedged child - the one\ninput that turns a probe wedge into a bus-wide wedge. Give the script the wedged\nprobe\u0027s own busport, not the hub path: the serial guard and the success check both\nread the path you pass, and the hub\u0027s inode always changes when its own port cycles.\n\nReporting asks for both passes: a final table showing every board healthy hides that\na probe needed power-cycling to get there, which is the signal that it will recur.\n\nAlso: the ESP-IDF env hints name `. $HOME/code/esp-idf/export.sh` instead of the\n`get-idf` alias, which lives only in interactive shells and fails from scripts.\n",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "6a8f66087b74341747ad4873e17ca97f48e6f170",
      "old_mode": 33188,
      "old_path": ".claude/skills/hil-pool-check/SKILL.md",
      "new_id": "3c056c16ba3be86dcf26e8849d830b3a93c717c6",
      "new_mode": 33188,
      "new_path": ".claude/skills/hil-pool-check/SKILL.md"
    },
    {
      "type": "modify",
      "old_id": "371aff1e19dd189f8811d6d70ac894678de84021",
      "old_mode": 33188,
      "old_path": "test/hil/helper/hil_pool_check.py",
      "new_id": "8ad68bc6d08a5dc3db6d918e4f41d4e3ef15925f",
      "new_mode": 33188,
      "new_path": "test/hil/helper/hil_pool_check.py"
    }
  ]
}
