`tools/` không đổi một byte nào giữa hai bản, nhưng 5 checker vẫn chết vì
chúng tìm control bằng `getattr(root, "ten")` trên đúng widget cũ — mà R08 đã
dời control xuống widget con.
Thêm ba helper dùng chung vào `capture_screens.py`:
* `_own_member` — tên do app khai trên widget, không phải thừa kế từ Qt
* `owner_of` — widget thật sự đang giữ tên đó, duyệt theo bề rộng
* `control` — lấy control dù nó nằm ở cấp nào
`check_controls_alive` từ "MẤT 24 control" về 0, kèm liệt kê 22 control đã
đổi chỗ và 2 cái đổi tên. `check_probes_bite` từ 1/4 lên 6/6 phép cấy lỗi đều
bị bắt — phép cấy thứ hai trỏ vào `ui/schedule_task_tab.py` đã bị xoá, nay
trỏ vào `presentation/scheduling/kanban_board_widget.py`.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>