)]}'
{
  "commit": "95df70f3f2b083d2e921f8596f9388ea925af007",
  "tree": "c3d56089d1c08d54806009a27297c7b2bff646de",
  "parents": [
    "9eaa46b710746546df355ce1134a87c30c8b1a79"
  ],
  "author": {
    "name": "Ha Thach",
    "email": "thach@tinyusb.org",
    "time": "Sat Sep 19 14:32:21 2026 +0700"
  },
  "committer": {
    "name": "GitHub",
    "email": "noreply@github.com",
    "time": "Sat Sep 19 14:32:21 2026 +0700"
  },
  "message": " ci: rework code metrics around membrowse (#3887)\n\nci: replace the linkermap metrics pipeline with membrowse\n\nUpload size history for a pinned roster of boards rather than every\ntarget: per-commit history is only continuous for a bounded set, and the\nroster is chosen to cover every dcd/hcd driver. Its coverage is derived\nfrom hw/bsp/family.json instead of hand-written driver lists, so it\ncannot go stale against the build.\n\nBuild only the pinned boards in the GHA cmake leg — CircleCI already\nbuilds every board of every family, so the first-board-of-family\nfallback added nothing.",
  "tree_diff": [
    {
      "type": "modify",
      "old_id": "8c3f09111bed40904490d4c1b543a75e913de0d2",
      "old_mode": 33188,
      "old_path": ".circleci/config.yml",
      "new_id": "00a2ee6b767817f863c72fdacec5c684e56aa533",
      "new_mode": 33188,
      "new_path": ".circleci/config.yml"
    },
    {
      "type": "modify",
      "old_id": "2e69588ae7ae95c6eba056ffe23b8be3930a5fe2",
      "old_mode": 33188,
      "old_path": ".circleci/config2.yml",
      "new_id": "bf2cf85772f2790223c59ec817accd27f6f3c503",
      "new_mode": 33188,
      "new_path": ".circleci/config2.yml"
    },
    {
      "type": "modify",
      "old_id": "b62601d075a6ce8fc351a4f29623e6a06d809c59",
      "old_mode": 33188,
      "old_path": ".claude/skills/build/SKILL.md",
      "new_id": "c57de6f4ce5d3fd85a0c3d64a50c30f3307d1799",
      "new_mode": 33188,
      "new_path": ".claude/skills/build/SKILL.md"
    },
    {
      "type": "modify",
      "old_id": "66dad8a4118b76ce850057d9a87b2650d5456ca9",
      "old_mode": 33261,
      "old_path": ".claude/skills/build/scripts/check_build.py",
      "new_id": "c9d714cb801c2e4f4bf7db33137c82e19c48e080",
      "new_mode": 33261,
      "new_path": ".claude/skills/build/scripts/check_build.py"
    },
    {
      "type": "modify",
      "old_id": "0a5305221ff479f8c259d299e9bd5953bde0f279",
      "old_mode": 33188,
      "old_path": ".claude/skills/code-size/SKILL.md",
      "new_id": "0a15ec2fb04f3346c62d23a6cd8f944de018b1b4",
      "new_mode": 33188,
      "new_path": ".claude/skills/code-size/SKILL.md"
    },
    {
      "type": "modify",
      "old_id": "002b2186fba2146d463248f68e8452a688b969bf",
      "old_mode": 33188,
      "old_path": ".claude/skills/make-release/SKILL.md",
      "new_id": "1fd45ced49f92973b41ab1197a20221403e5b404",
      "new_mode": 33188,
      "new_path": ".claude/skills/make-release/SKILL.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "d7b42d3ff892d65652ad8833ece8ed0985b3a55c",
      "new_mode": 33188,
      "new_path": ".claude/skills/membrowse/SKILL.md"
    },
    {
      "type": "modify",
      "old_id": "1b00090426a259bccd3a5a9b5266d3f128c0fd41",
      "old_mode": 33188,
      "old_path": ".claude/skills/pre-pr/SKILL.md",
      "new_id": "84829d1e0049d7d0d948e7b2b6b48c73fb8ed826",
      "new_mode": 33188,
      "new_path": ".claude/skills/pre-pr/SKILL.md"
    },
    {
      "type": "modify",
      "old_id": "33a8b1d4020639339bd842560eb26081c44e6ce5",
      "old_mode": 33188,
      "old_path": ".claude/test/test_build.py",
      "new_id": "3a1686e83001ebefdc7524667b6c6914f65233b1",
      "new_mode": 33188,
      "new_path": ".claude/test/test_build.py"
    },
    {
      "type": "modify",
      "old_id": "ff6972af6cea504487595878eb096b416a9256c0",
      "old_mode": 33188,
      "old_path": ".github/actions/get_deps/action.yml",
      "new_id": "96eee01d843a7fb3c26346003d98be7855bded8a",
      "new_mode": 33188,
      "new_path": ".github/actions/get_deps/action.yml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "0df573820e74465dd2df38897e10a35b4b2ba5d2",
      "new_mode": 33188,
      "new_path": ".github/ci-pinned-boards.json"
    },
    {
      "type": "modify",
      "old_id": "409e6dbc1f51d845dc8c8ad56a9f0addb88e7c36",
      "old_mode": 33261,
      "old_path": ".github/scripts/ci_set_matrix.py",
      "new_id": "6b7866a745d9315c40597a79275f55332a69cfc5",
      "new_mode": 33261,
      "new_path": ".github/scripts/ci_set_matrix.py"
    },
    {
      "type": "delete",
      "old_id": "50107cf7241a7bebd540db363d53a6bb63bc35d8",
      "old_mode": 33261,
      "old_path": ".github/scripts/metrics_pair_compare.py",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "70555b111410a3717ef222f855720a6427a901e6",
      "old_mode": 33188,
      "old_path": ".github/workflows/build.yml",
      "new_id": "c95021bca12ee20d71f6b3377856647f1cdfc206",
      "new_mode": 33188,
      "new_path": ".github/workflows/build.yml"
    },
    {
      "type": "modify",
      "old_id": "407ed1e7165f6f9c2e778af87902f97a80c272a8",
      "old_mode": 33188,
      "old_path": ".github/workflows/build_util.yml",
      "new_id": "7b295f918586d6f3aec77fe3f7fb4490322ef328",
      "new_mode": 33188,
      "new_path": ".github/workflows/build_util.yml"
    },
    {
      "type": "delete",
      "old_id": "4b9e54cff104cae6ca5b55ca4900794fbd692f77",
      "old_mode": 33188,
      "old_path": ".github/workflows/membrowse-onboard.yml",
      "new_id": "0000000000000000000000000000000000000000",
      "new_mode": 0,
      "new_path": "/dev/null"
    },
    {
      "type": "modify",
      "old_id": "868e56405ff76abe5b152f5908fdb811984de97c",
      "old_mode": 33188,
      "old_path": ".github/workflows/pr_comment.yml",
      "new_id": "1393e13953a3452a4aa684ac773986946c877534",
      "new_mode": 33188,
      "new_path": ".github/workflows/pr_comment.yml"
    },
    {
      "type": "modify",
      "old_id": "f324cc562be8a26bbf2d551407be5a090083ef2d",
      "old_mode": 33188,
      "old_path": ".pre-commit-config.yaml",
      "new_id": "e8341a7587f5d5ea7f139a5f3d5dbacda68933fa",
      "new_mode": 33188,
      "new_path": ".pre-commit-config.yaml"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "231fd66a4643e092fe1412b0f9cc5f1d01398094",
      "new_mode": 33188,
      "new_path": "docs/superpowers/followup/pr3887-drop-linkermap.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "a67047d62c4cfead6bb25ca939de56bdd5038ab3",
      "new_mode": 33188,
      "new_path": "docs/superpowers/followup/pr3887-membrowse-combined.md"
    },
    {
      "type": "modify",
      "old_id": "c63839257da1e88e3a26adae57c613879639052b",
      "old_mode": 33188,
      "old_path": "docs/superpowers/specs/2026-08-19-ci-build-family-filter-design.md",
      "new_id": "b2a97b05f18c66bf9fc0001c9ab49e5bdc9d8b98",
      "new_mode": 33188,
      "new_path": "docs/superpowers/specs/2026-08-19-ci-build-family-filter-design.md"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "03b12b6227d7841478dfc668b8317e6c84274e76",
      "new_mode": 33188,
      "new_path": "docs/superpowers/specs/2026-08-25-rework-metrics-design.md"
    },
    {
      "type": "modify",
      "old_id": "6122b7d544c10762459e12f97db164ea2875673b",
      "old_mode": 33188,
      "old_path": "examples/CMakeLists.txt",
      "new_id": "cd3f258f6ee69d8efa5352b61d6cdd5c934b10e3",
      "new_mode": 33188,
      "new_path": "examples/CMakeLists.txt"
    },
    {
      "type": "modify",
      "old_id": "cfde51051dfd4632fdb57afe3e97f77804c3a03f",
      "old_mode": 33188,
      "old_path": "examples/device/audio_4_channel_mic_freertos/skip.txt",
      "new_id": "d47f1d327c6d6443465d424ebf0f94866713d37c",
      "new_mode": 33188,
      "new_path": "examples/device/audio_4_channel_mic_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "3d8d43286ca6f803bd4841e79f7e7e9fa646cc3c",
      "old_mode": 33188,
      "old_path": "examples/device/audio_test_freertos/skip.txt",
      "new_id": "70aa232d07da6c4f781fb4b3e0470d2de257c279",
      "new_mode": 33188,
      "new_path": "examples/device/audio_test_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "095e350c922fb6cda8a4cdfc4aa788b5784c0b69",
      "old_mode": 33188,
      "old_path": "examples/device/cdc_msc_freertos/skip.txt",
      "new_id": "24e6931419f37c3e8bfbfeb4e29893f65c4098d7",
      "new_mode": 33188,
      "new_path": "examples/device/cdc_msc_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "0e8415d3b59afca975e75672e4bdc957890619e4",
      "old_mode": 33188,
      "old_path": "examples/device/hid_composite_freertos/skip.txt",
      "new_id": "049ea996f1cc09bad4f99b780c4182ceaa904a05",
      "new_mode": 33188,
      "new_path": "examples/device/hid_composite_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "0e8415d3b59afca975e75672e4bdc957890619e4",
      "old_mode": 33188,
      "old_path": "examples/device/midi_test_freertos/skip.txt",
      "new_id": "049ea996f1cc09bad4f99b780c4182ceaa904a05",
      "new_mode": 33188,
      "new_path": "examples/device/midi_test_freertos/skip.txt"
    },
    {
      "type": "modify",
      "old_id": "77acddaff3bfcb7e6fa2c5ef6f8046d2b31d874b",
      "old_mode": 33188,
      "old_path": "hw/bsp/family_support.cmake",
      "new_id": "76231371e1b4b163a038398e96407d809fef8b85",
      "new_mode": 33188,
      "new_path": "hw/bsp/family_support.cmake"
    },
    {
      "type": "modify",
      "old_id": "3c5022eb634411af36da8d0891be4bf87f56af1b",
      "old_mode": 33188,
      "old_path": "hw/bsp/rp2040/family.c",
      "new_id": "c4f9d6614bd00a361fee0ed58e952c27d6a281f9",
      "new_mode": 33188,
      "new_path": "hw/bsp/rp2040/family.c"
    },
    {
      "type": "modify",
      "old_id": "fc2071b3aa3c1f8fd53b4aab3d69cb7793805ebd",
      "old_mode": 33188,
      "old_path": "hw/bsp/same7x/boards/same70_qmtech/board.cmake",
      "new_id": "9dac9733f04badf990f92c70f4dd353e15272e9b",
      "new_mode": 33188,
      "new_path": "hw/bsp/same7x/boards/same70_qmtech/board.cmake"
    },
    {
      "type": "modify",
      "old_id": "4ad8212a88506cf187cb28f74efd4069e544ca44",
      "old_mode": 33188,
      "old_path": "hw/bsp/same7x/boards/same70_qmtech/board.mk",
      "new_id": "708fa148452135c1027083930f4e39aa315a693f",
      "new_mode": 33188,
      "new_path": "hw/bsp/same7x/boards/same70_qmtech/board.mk"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "695c2dd9840e47dcacb8aa1b0e09a44510e150c2",
      "new_mode": 33188,
      "new_path": "hw/bsp/same7x/boards/same70_qmtech/same70n19b_flash.ld"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "44a61f715313151133bf359966616acc3ec787b7",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_ci_boards.py"
    },
    {
      "type": "modify",
      "old_id": "a502feb705a2390366ad94df5c46850be93af5dd",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_ci_metrics.py",
      "new_id": "3db5fb6b25cdb2b13b13b3d6b281e888e55cb26e",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_ci_metrics.py"
    },
    {
      "type": "modify",
      "old_id": "4e33538725ddd7f90e918ffc10f5fb848916fff9",
      "old_mode": 33188,
      "old_path": "test/hil/test/test_ci_select.py",
      "new_id": "394617442e84b6245e92e9bf1ba3c99d4f32baad",
      "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": "f88f548654192d3ee173c0ff8194ba3cd2de30e9",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_drivers_coverage.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "be0e31f1faecd82f82b4a132e1e0fb76e85c664e",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_membrowse_compare.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "5fa324f445feb8ca360e7da5e6fb09fc50cd789d",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_membrowse_onboard.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "539dfd61d1d163359a1b2213dd95f1a49be24e1c",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_membrowse_report.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "8e062efd333b601f08f13ec1eed925b1a00cfadc",
      "new_mode": 33188,
      "new_path": "test/hil/test/test_metrics_compare_base.py"
    },
    {
      "type": "modify",
      "old_id": "36fec06a796128861183214222e1411bc8861a5c",
      "old_mode": 33261,
      "old_path": "tools/build.py",
      "new_id": "473ecc4b5305204d301567336fcbe9f4f3d5ca11",
      "new_mode": 33261,
      "new_path": "tools/build.py"
    },
    {
      "type": "modify",
      "old_id": "0b2f792ad181a756020d4d2c767423b50872741c",
      "old_mode": 33261,
      "old_path": "tools/ci_select.py",
      "new_id": "02306ffe48f813c915ac55b35a0b85e5d05db32e",
      "new_mode": 33261,
      "new_path": "tools/ci_select.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "11b6c89d108d55f36a2b7dab2b66c45d0c8eef97",
      "new_mode": 33188,
      "new_path": "tools/drivers_coverage_check.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "162823ee28dd1477de087132e8f62f938df18382",
      "new_mode": 33188,
      "new_path": "tools/membrowse_compare.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "ee52fff9a6e7c2070d7923ce74a5920d60eeedc1",
      "new_mode": 33188,
      "new_path": "tools/membrowse_onboard.py"
    },
    {
      "type": "add",
      "old_id": "0000000000000000000000000000000000000000",
      "old_mode": 0,
      "old_path": "/dev/null",
      "new_id": "c5f7a9f70acf6a22e42b7d1fb654874c40044cce",
      "new_mode": 33188,
      "new_path": "tools/membrowse_report.py"
    },
    {
      "type": "modify",
      "old_id": "27c9959547c3363dc006b03d0e459c9c0764e0c1",
      "old_mode": 33188,
      "old_path": "tools/metrics.py",
      "new_id": "0e29fc1ab688a09d33e8ffb86be4c1d73f71c8b0",
      "new_mode": 33188,
      "new_path": "tools/metrics.py"
    },
    {
      "type": "modify",
      "old_id": "844130097a1bf364085bf01779f50a8564d7715c",
      "old_mode": 33188,
      "old_path": "tools/metrics_compare_base.py",
      "new_id": "8eefeae4d15cd5d9f40d362b7ebe5dc5b6905f92",
      "new_mode": 33188,
      "new_path": "tools/metrics_compare_base.py"
    }
  ]
}
