)]}'
{
  "commit": "eca6caf673452c8ec940e2acf5e46d0631fb72bf",
  "tree": "ce197bf019b29712095c3768c0fc23b26499cc79",
  "parents": [
    "4c7bb3ced98cb7262dd8eefd6c9f7df6e42ffcee"
  ],
  "author": {
    "name": "Ha Thach",
    "email": "thach@tinyusb.org",
    "time": "Fri Aug 28 14:16:02 2026 +0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Fri Aug 28 14:16:02 2026 +0700"
  },
  "message": "Add RTT console/capture tooling (tools/rtt.py), rtt skill, and HIL harness support (#3853)\n\nPromote SEGGER RTT from an inline debugging technique to a standalone skill\nbacked by one stdlib-only implementation in tools/rtt.py: a CLI and importable\nmodule for console/capture over J-Link (RTTTelnetPort) and OpenOCD (rtt server)\nprobes, with probe selection by serial or VID:PID, control-block address via\n--elf or --addr, bidirectional console, post-mortem ring dump, and\n--reset-before-attach for boot-time capture. The HIL harness reads a board\u0027s\nconsole over RTT when its probe has no VCOM (\"logger\": \"rtt\" plus a LOGGER\u003drtt\nvariant define), covering device_info, pool-check aliveness, and CI wiring.\nValidated on 22 boards across both backends; 26 unit tests run in pre-commit.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "d1e4bdcd516d33f9fab60edd611c719133a33d89",
      "old_mode": 33188,
      "old_path": ".claude/skills/hil/SKILL.md",
      "new_id": "d9010d28d7bc46c2516026635b58ae2d8d7c833b",
      "new_mode": 33188,
      "new_path": ".claude/skills/hil/SKILL.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5e14ae84c01bfc0266ea8b0e8a2f3e1e236a722d",
      "new_mode": 33188,
      "new_path": ".claude/skills/rtt/SKILL.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5ddd072d2fb84ef657ef33c13db747189e310fab",
      "new_mode": 33188,
      "new_path": ".claude/skills/rtt/boards.md"
    },
    {
      "type": "modify",
      "old_id": "050a697b933d51ed2992496d5d199ed0b8ba5374",
      "old_mode": 33188,
      "old_path": ".claude/skills/target-debug/SKILL.md",
      "new_id": "7ee96f48e41ccf1d89525a3477b9aa0cec1eee47",
      "new_mode": 33188,
      "new_path": ".claude/skills/target-debug/SKILL.md"
    },
    {
      "type": "modify",
      "old_id": "bf50061dd635a338ebd5d502cb5d9988cdd2312f",
      "old_mode": 33188,
      "old_path": ".github/scripts/hil_ci_set_matrix.py",
      "new_id": "b567f347ce4c5f8970aa02fbafcb622ca36a139e",
      "new_mode": 33188,
      "new_path": ".github/scripts/hil_ci_set_matrix.py"
    },
    {
      "type": "modify",
      "old_id": "c26fe5cf8b6541ed01cd26c690003cbe7bcb5460",
      "old_mode": 33188,
      "old_path": ".github/workflows/build.yml",
      "new_id": "70555b111410a3717ef222f855720a6427a901e6",
      "new_mode": 33188,
      "new_path": ".github/workflows/build.yml"
    },
    {
      "type": "modify",
      "old_id": "d74f124590c1a2fe71c1cce3993cb50efa130aed",
      "old_mode": 33188,
      "old_path": ".gitignore",
      "new_id": "14bc22b61dc7ff4a408015f60074896ef45d1adc",
      "new_mode": 33188,
      "new_path": ".gitignore"
    },
    {
      "type": "modify",
      "old_id": "7a29dc89a2eab15152fa6861f86c54aad06332c7",
      "old_mode": 33188,
      "old_path": ".pre-commit-config.yaml",
      "new_id": "9ac2de228c3036b82ad77f86d0392d2c980b3bef",
      "new_mode": 33188,
      "new_path": ".pre-commit-config.yaml"
    },
    {
      "type": "modify",
      "old_id": "c43a4f9f7a4ee58f67dcaf3e7e968ae07bbf6a96",
      "old_mode": 33188,
      "old_path": "CLAUDE.md",
      "new_id": "d3ab995bf503dbf2ddaca8740d8ee257f53898d5",
      "new_mode": 33188,
      "new_path": "CLAUDE.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "46a4417bd256d877479a4c85093d62f9f43bb5fe",
      "new_mode": 33188,
      "new_path": "docs/superpowers/followup/pr3853-board-putchar-logger.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8f3eae16be792eea957056175acb5c9f61296efe",
      "new_mode": 33188,
      "new_path": "docs/superpowers/followup/pr3853-rtt-harness-adoption.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e2a40c448cebb3d655adb21e90c0a97246ca797e",
      "new_mode": 33188,
      "new_path": "docs/superpowers/plans/2026-08-24-rtt-skill.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "7a621726fd05f1004bedc195750341d02077e8a0",
      "new_mode": 33188,
      "new_path": "docs/superpowers/specs/2026-08-24-rtt-skill-design.md"
    },
    {
      "type": "modify",
      "old_id": "b92f0aee0a64692adb0b8546e4a5787a3281687d",
      "old_mode": 33188,
      "old_path": "test/hil/helper/hil_pool_check.py",
      "new_id": "4623ce45f13c6f374333f89760d234bc7b75e208",
      "new_mode": 33188,
      "new_path": "test/hil/helper/hil_pool_check.py"
    },
    {
      "type": "modify",
      "old_id": "03d01270f54d926425147dea05bcdc5dd17e5ec9",
      "old_mode": 33188,
      "old_path": "test/hil/helper/hil_util.py",
      "new_id": "f279cfa77f0b45f1ff080c9c095c6ad5f3b470a3",
      "new_mode": 33188,
      "new_path": "test/hil/helper/hil_util.py"
    },
    {
      "type": "modify",
      "old_id": "daa787242474d2de8b73c0e63fd633a84d37b159",
      "old_mode": 33188,
      "old_path": "test/hil/hil_ci.sh",
      "new_id": "43ede579586c2b0c64cc00a2c98c4829bbaf75eb",
      "new_mode": 33188,
      "new_path": "test/hil/hil_ci.sh"
    },
    {
      "type": "modify",
      "old_id": "e3299842044176c6cf757674d10f89c7543b45f2",
      "old_mode": 33261,
      "old_path": "test/hil/hil_test.py",
      "new_id": "233627ec79959e56a6fea2c817a7b480fda589af",
      "new_mode": 33261,
      "new_path": "test/hil/hil_test.py"
    },
    {
      "type": "modify",
      "old_id": "ace230246a90fbfc1c54964ed4f053fc6ed768ee",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_ci_select.py",
      "new_id": "22fbde17b891f560f7e294046957474a7aaa7f89",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_ci_select.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "3a07f13ec4e47e9b05cf38a578577998c59c906b",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_hil_rtt.py"
    },
    {
      "type": "modify",
      "old_id": "e06d2ba8bfdfa506733e1261c55bf6f74c7cb487",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_hil_util.py",
      "new_id": "1a283bda7d8a279e5d4893f8af438b627bf49584",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_hil_util.py"
    },
    {
      "type": "modify",
      "old_id": "ca9d54c270a2c3baa579d47ed1c0248c2178798f",
      "old_mode": 33261,
      "old_path": "tools/ci_select.py",
      "new_id": "1526f20643df40b631a69874ad94fbd6c0438e0f",
      "new_mode": 33261,
      "new_path": "tools/ci_select.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e3aef36f275833afee86ac3cbb22e4ed3593803b",
      "new_mode": 33188,
      "new_path": "tools/rtt.py"
    }
  ]
}
