)]}'
{
  "commit": "5e4ba3d469aa36617704d3ad618e05ece167ee20",
  "tree": "a5b643bcafb1f68b45266d285ee12216c9d69b9c",
  "parents": [
    "840ffe3ac152394347d27a0d4841f4c3c49ac944"
  ],
  "author": {
    "name": "Ha Thach",
    "email": "thach@tinyusb.org",
    "time": "Wed Oct 07 11:11:21 2026 +0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Wed Oct 07 11:11:21 2026 +0700"
  },
  "message": "ci: select builds and HIL from a validated manifest (#4104)\n\nCI build and HIL selection now come from one validated manifest (`check_build.py --select-only`): the selector replaces the path-filter gate, changed boards outside the pinned matrix get a `cmake-required` build, and every membrowse target uploads once per commit. Adds `coverage_audit.py` to check selection against real link graphs (0 missed builds over 247 master commits).\n\nHIL: 18 cells red, all failing or flapping on master too; this PR changes no firmware.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "00a2ee6b767817f863c72fdacec5c684e56aa533",
      "old_mode": 33188,
      "old_path": ".circleci/config.yml",
      "new_id": "bc0b0a02854c1e5ce54f6201b4ea5b11e85fb3c6",
      "new_mode": 33188,
      "new_path": ".circleci/config.yml"
    },
    {
      "type": "modify",
      "old_id": "1f5c130972117837278879c24cb55b47c7c82f68",
      "old_mode": 33188,
      "old_path": ".claude/skills/build/SKILL.md",
      "new_id": "a3d57cb78fa7689f3b1403879d648454697b7744",
      "new_mode": 33188,
      "new_path": ".claude/skills/build/SKILL.md"
    },
    {
      "type": "modify",
      "old_id": "a8f938bf5a14c763cfb05123272ca02eb162f8d4",
      "old_mode": 33261,
      "old_path": ".claude/skills/build/scripts/check_build.py",
      "new_id": "d95ef080e046178f778efe46b958a4deab4fa1c5",
      "new_mode": 33261,
      "new_path": ".claude/skills/build/scripts/check_build.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d584c80cbf9d3bdf8ecff383c467c909d778ad5b",
      "new_mode": 33261,
      "new_path": ".claude/skills/build/scripts/coverage_audit.py"
    },
    {
      "type": "modify",
      "old_id": "992bad19c94042c7e187791e17d9b7f741cdfb65",
      "old_mode": 33188,
      "old_path": ".claude/test/test_build.py",
      "new_id": "74c3308fcdc271d8b05edfb2728decd22e7b23cb",
      "new_mode": 33188,
      "new_path": ".claude/test/test_build.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8575b9dd151f87562e760ab42b3b00aca42f26a3",
      "new_mode": 33188,
      "new_path": ".claude/test/test_build_select.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "651f9785e4d95027108b7fadf818e89bb4725610",
      "new_mode": 33188,
      "new_path": ".claude/test/test_coverage_audit.py"
    },
    {
      "type": "modify",
      "old_id": "eebff52f58c39621277b085e384005f301a0e643",
      "old_mode": 33188,
      "old_path": ".github/actions/get_deps/action.yml",
      "new_id": "7fbaae69b7b2a56e3d0cdd51c80890128daccea3",
      "new_mode": 33188,
      "new_path": ".github/actions/get_deps/action.yml"
    },
    {
      "type": "modify",
      "old_id": "7a999c7439b56e0ee8f2b04b58267ed960010989",
      "old_mode": 33261,
      "old_path": ".github/scripts/ci_set_matrix.py",
      "new_id": "e4aaf26203ceb02531d1996ae3bab6d9a6ae038a",
      "new_mode": 33261,
      "new_path": ".github/scripts/ci_set_matrix.py"
    },
    {
      "type": "modify",
      "old_id": "f973cc1c5e9c30ac3b8b09b368841010e99458a1",
      "old_mode": 33188,
      "old_path": ".github/scripts/hil_ci_set_matrix.py",
      "new_id": "0aaca42dd80f569399c1bb67a7b9afc9ede96269",
      "new_mode": 33188,
      "new_path": ".github/scripts/hil_ci_set_matrix.py"
    },
    {
      "type": "modify",
      "old_id": "049bf4c911c591773d950a6beb4c18229ebdc54c",
      "old_mode": 33188,
      "old_path": ".github/workflows/build.yml",
      "new_id": "1d9b95c086f88318588c1b13d8dec127b6d15161",
      "new_mode": 33188,
      "new_path": ".github/workflows/build.yml"
    },
    {
      "type": "modify",
      "old_id": "5dcf92c8247e076cbd07ac91acd84df90ada9406",
      "old_mode": 33188,
      "old_path": ".github/workflows/build_util.yml",
      "new_id": "2fe17963f766ba484639534bd5e3ff0f35df9524",
      "new_mode": 33188,
      "new_path": ".github/workflows/build_util.yml"
    },
    {
      "type": "modify",
      "old_id": "a77ac95eb3b02ffb1a5525d3db3a751ea5d67f62",
      "old_mode": 33188,
      "old_path": ".pre-commit-config.yaml",
      "new_id": "fc9931c6768a12df4565138648c1d3c20b9e3583",
      "new_mode": 33188,
      "new_path": ".pre-commit-config.yaml"
    },
    {
      "type": "modify",
      "old_id": "ee189cef5b114f21ec2e48b905e724546121c44a",
      "old_mode": 33188,
      "old_path": "docs/superpowers/specs/2026-08-19-ci-build-family-filter-design.md",
      "new_id": "019910c555268d515447ff291bd5e225efeed520",
      "new_mode": 33188,
      "new_path": "docs/superpowers/specs/2026-08-19-ci-build-family-filter-design.md"
    },
    {
      "type": "modify",
      "old_id": "52a840967a611a30d5122c99dd353cb5ef5b865e",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_ci_metrics.py",
      "new_id": "787c1ae6b204c0153bc8c027f4bccf37310a76b5",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_ci_metrics.py"
    },
    {
      "type": "modify",
      "old_id": "ca239f85b2cd8256466ee9597cdd19709bd76726",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_ci_select.py",
      "new_id": "5bc9e2b8bed84e5af0c842e141198cac02ac435d",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_ci_select.py"
    },
    {
      "type": "modify",
      "old_id": "f15c0233d363c28dec324418eaf5cba40d7f3fdd",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_hil_util.py",
      "new_id": "d846f100ee973b2d03bbc37052c40137666eb2ef",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_hil_util.py"
    },
    {
      "type": "modify",
      "old_id": "d15e408ccc1dd5c28f36a04e128ad7ecccd77c65",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_membrowse_cli.py",
      "new_id": "1b0846ba918637edac6d20c6a054af9367e4c924",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_membrowse_cli.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "e68259b2fd774c50954cb0da1285684666a034e7",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_membrowse_targets.py"
    },
    {
      "type": "modify",
      "old_id": "f5fc8a8fd1c10d229b5d8ace834250046363b5cb",
      "old_mode": 33261,
      "old_path": "tools/build.py",
      "new_id": "11976a6eb594c942b2c79a40b681fd98274dea31",
      "new_mode": 33261,
      "new_path": "tools/build.py"
    },
    {
      "type": "modify",
      "old_id": "e7e989e27a67f2a89ad578deb6413e85cb66c1bc",
      "old_mode": 33261,
      "old_path": "tools/ci_select.py",
      "new_id": "307846b06198727853e72233782c4d2e03535db0",
      "new_mode": 33261,
      "new_path": "tools/ci_select.py"
    },
    {
      "type": "modify",
      "old_id": "d17d8a1a2fd5672fd728284b9809ff422de29b67",
      "old_mode": 33188,
      "old_path": "tools/membrowse_cli.py",
      "new_id": "efcdbc9adb957f5da33cf430f0869588b4b06d47",
      "new_mode": 33188,
      "new_path": "tools/membrowse_cli.py"
    }
  ]
}
