usbtest skill: scripts for bring-up and failed cases (#4019)
- kernel_src.py prints a testusb case's kernel source and its completion waits for a tag or uname -r
- run_case.py runs chosen cases on one roster board: refuses before touching hardware, then lock, flash, run under a budget, park, release; SIGTERM kills its children and still releases the lock
- usbtest.py: a case testusb never ran is FAIL, duplicate --tests are refused, an unrecovered hang exits nonzero
- hints in CLAUDE.md, the hil skill and docs/porting.rst
11 files changed