)]}'
{
  "commit": "da255b1d2db10b8f31332a779b2a526f579acee1",
  "tree": "154c8b8b9cf48f4a111edd385b8df7cc6919f3b8",
  "parents": [
    "aa0f4a40b59012e6ab421949c153088ca4984df4"
  ],
  "author": {
    "name": "Ha Thach",
    "email": "thach@tinyusb.org",
    "time": "Tue Aug 25 09:46:42 2026 +0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Tue Aug 25 09:46:42 2026 +0700"
  },
  "message": "ci: an empty selection must build nothing, plus selector follow-ups (#3845)\n\nci: an empty selection must build nothing, plus selector follow-ups\n\nA PR whose build axis legitimately selected nothing rebuilt everything.\nbuild.yml reads .build.families twice - as a |-joined regex, and implicitly\nas \"is anything selected\" - but tested only -z \"$FAMILY_REGEX\", which an\nempty list and a charset-rejected one both satisfy while meaning opposite\nthings. ci_set_matrix had already returned the correct all-empty matrix;\nthe fall-open branch discarded it. #3842 and #3840 each spent 74 cmake legs\non it. Branch on the two cases instead, rename FAM_* to FAMILY_*, and cover\nthe block with a test that extracts it from build.yml and executes it - it\nhad no test at all, which is how this shipped through two merges.\n\nFollow-ups to the same machinery: glob.escape the repo root at five sites,\nso a checkout path containing [ or * stops failing closed; drop the ci-full\nlabel, read after the matrix was already computed and so never functional;\ndelete 13 mcu:MKL25ZXX / mcu:SAME5X skip tokens matching no board; carry the\nrule table in the module docstring, guarded against drift; and pin six\nselection behaviours a mutation pass proved untested.\n\nCut the selector\u0027s cost 1.8x (26.0s -\u003e 14.6s) with 0 divergences over 260\npaths, and stop scoping the membrowse upload by the PR example filter.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "79f4668935b2dea5eb9bfc467b99603037dc465e",
      "old_mode": 33261,
      "old_path": ".github/scripts/ci_set_matrix.py",
      "new_id": "409e6dbc1f51d845dc8c8ad56a9f0addb88e7c36",
      "new_mode": 33261,
      "new_path": ".github/scripts/ci_set_matrix.py"
    },
    {
      "type": "modify",
      "old_id": "39a4e7afddc2c474334e410cd7209230078aba21",
      "old_mode": 33188,
      "old_path": ".github/workflows/build.yml",
      "new_id": "c26fe5cf8b6541ed01cd26c690003cbe7bcb5460",
      "new_mode": 33188,
      "new_path": ".github/workflows/build.yml"
    },
    {
      "type": "modify",
      "old_id": "52999616d4aefdbdacf2733085a696a5f6aea335",
      "old_mode": 33188,
      "old_path": ".github/workflows/build_util.yml",
      "new_id": "407ed1e7165f6f9c2e778af87902f97a80c272a8",
      "new_mode": 33188,
      "new_path": ".github/workflows/build_util.yml"
    },
    {
      "type": "modify",
      "old_id": "e8f36464634c17f5a4e265158d8bef6c8535e677",
      "old_mode": 33188,
      "old_path": "docs/reference/hil_boards.md",
      "new_id": "678f7f0ed5cecaff8f9754732a3f1cd9af8cd086",
      "new_mode": 33188,
      "new_path": "docs/reference/hil_boards.md"
    },
    {
      "type": "modify",
      "old_id": "b10f5b4ae5143eddbea3e7e2a453659b91e081eb",
      "old_mode": 33188,
      "old_path": "docs/superpowers/specs/2026-08-19-ci-build-family-filter-design.md",
      "new_id": "524568aeb9bda09c2fa5cd434f98c697bc187091",
      "new_mode": 33188,
      "new_path": "docs/superpowers/specs/2026-08-19-ci-build-family-filter-design.md"
    },
    {
      "type": "modify",
      "old_id": "3ca433c08b98a10bd12a673b4dd494e0b362b570",
      "old_mode": 33188,
      "old_path": "examples/device/audio_4_channel_mic/skip.txt",
      "new_id": "e5e74cd60a712d16fe854d1fe7289d4fa4ef85ba",
      "new_mode": 33188,
      "new_path": "examples/device/audio_4_channel_mic/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "1fd6b4b8a62cedec1a7828563e5006bd9f0582d3",
      "old_mode": 33188,
      "old_path": "examples/device/audio_4_channel_mic_freertos/skip.txt",
      "new_id": "cfde51051dfd4632fdb57afe3e97f77804c3a03f",
      "new_mode": 33188,
      "new_path": "examples/device/audio_4_channel_mic_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "42394bb11799daa385dae5dc995dca9787413956",
      "old_mode": 33188,
      "old_path": "examples/device/audio_test/skip.txt",
      "new_id": "862c91c6f3315bad56407b57e04f124e22645a2d",
      "new_mode": 33188,
      "new_path": "examples/device/audio_test/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "660bacd25982e51a632e462eb865bb4d394e2f85",
      "old_mode": 33188,
      "old_path": "examples/device/audio_test_freertos/skip.txt",
      "new_id": "3d8d43286ca6f803bd4841e79f7e7e9fa646cc3c",
      "new_mode": 33188,
      "new_path": "examples/device/audio_test_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "42394bb11799daa385dae5dc995dca9787413956",
      "old_mode": 33188,
      "old_path": "examples/device/audio_test_multi_rate/skip.txt",
      "new_id": "862c91c6f3315bad56407b57e04f124e22645a2d",
      "new_mode": 33188,
      "new_path": "examples/device/audio_test_multi_rate/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "48781de842760b99e20df29f5ad11ef8d5578330",
      "old_mode": 33188,
      "old_path": "examples/device/cdc_msc_freertos/skip.txt",
      "new_id": "095e350c922fb6cda8a4cdfc4aa788b5784c0b69",
      "new_mode": 33188,
      "new_path": "examples/device/cdc_msc_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "db1d5b80b76770c9583f32a5b6aa9890b929aa8d",
      "old_mode": 33188,
      "old_path": "examples/device/cdc_uac2/skip.txt",
      "new_id": "3159cb17683bc968b0a89c01f41276e3954673c0",
      "new_mode": 33188,
      "new_path": "examples/device/cdc_uac2/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "97d8e168b2a9fb6da4ab4ffc53a9ef02e4924b4c",
      "old_mode": 33188,
      "old_path": "examples/device/hid_composite_freertos/skip.txt",
      "new_id": "0e8415d3b59afca975e75672e4bdc957890619e4",
      "new_mode": 33188,
      "new_path": "examples/device/hid_composite_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "97d8e168b2a9fb6da4ab4ffc53a9ef02e4924b4c",
      "old_mode": 33188,
      "old_path": "examples/device/midi_test_freertos/skip.txt",
      "new_id": "0e8415d3b59afca975e75672e4bdc957890619e4",
      "new_mode": 33188,
      "new_path": "examples/device/midi_test_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "a9e3a99b137c7377ed445411c04950a9b65862cd",
      "old_mode": 33188,
      "old_path": "examples/device/msc_dual_lun/skip.txt",
      "new_id": "833fd072c0b5cf7853455d382a5874a08534b4b0",
      "new_mode": 33188,
      "new_path": "examples/device/msc_dual_lun/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "db1d5b80b76770c9583f32a5b6aa9890b929aa8d",
      "old_mode": 33188,
      "old_path": "examples/device/uac2_headset/skip.txt",
      "new_id": "3159cb17683bc968b0a89c01f41276e3954673c0",
      "new_mode": 33188,
      "new_path": "examples/device/uac2_headset/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "0c7339c6511f68698df6a630335b6bb86fda4d08",
      "old_mode": 33188,
      "old_path": "examples/device/uac2_speaker_fb/skip.txt",
      "new_id": "88df3e549b322e4d3db5448fac506704f9d13589",
      "new_mode": 33188,
      "new_path": "examples/device/uac2_speaker_fb/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "a76b6e3a0a02daa01a850bce08375781fbff7467",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_ci_metrics.py",
      "new_id": "aac251824c44c73ef53303b2c1c48f8acb673dca",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_ci_metrics.py"
    },
    {
      "type": "modify",
      "old_id": "a19392bde3df24e5231b3c3aaf3fc1bc64381ade",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_ci_select.py",
      "new_id": "dc10f769a6f949882a7a919dae81df952a110583",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_ci_select.py"
    },
    {
      "type": "modify",
      "old_id": "eeefca22d8387ed3bc72045bdb00bc9ea9c09c29",
      "old_mode": 33261,
      "old_path": "tools/build.py",
      "new_id": "0bb366e3db2aae654f27298e5cd7cce17de9fbcf",
      "new_mode": 33261,
      "new_path": "tools/build.py"
    },
    {
      "type": "modify",
      "old_id": "89a0d214c8fe0fc436167297659c2f56b2feaa08",
      "old_mode": 33261,
      "old_path": "tools/ci_select.py",
      "new_id": "53fbcd3a13448b4454c997f8c096f5a0c50c3f72",
      "new_mode": 33261,
      "new_path": "tools/ci_select.py"
    }
  ]
}
