)]}'
{
  "log": [
    {
      "commit": "e7f9963b6a83025ff81ced4e73de33a5b50c4fbb",
      "tree": "6bf3bcd9731a92571a4012e01ae88f17c89acd98",
      "parents": [
        "0cbefba206314f6cf079ae3313b437768e6f197d",
        "2cbdce272b37814910be9f43fee8741df4e4b4cd"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu Mar 05 11:13:05 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Mar 05 11:13:05 2026"
      },
      "message": "Merge pull request #2806 from blundell/update-min-sdk-to-api-21\n\nUpdate minimum SDK to API 26 (Android 8.0 Oreo)"
    },
    {
      "commit": "2cbdce272b37814910be9f43fee8741df4e4b4cd",
      "tree": "e7af9ab1a082a40160b675fa2b716f3d40c89ff4",
      "parents": [
        "6f79d2232b1a8a1f4aedf541ef69463c9ce4238f"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Wed Mar 04 09:49:19 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Wed Mar 04 10:01:35 2026"
      },
      "message": "Remove obsolete AndroidLeakFixes after minimum SDK upgrade\n\nRemoves 5 AndroidLeakFixes enum constants that are no longer needed\nwith minimum SDK 26+:\n\n- MEDIA_SESSION_LEGACY_HELPER (API 21 only)\n- CONNECTIVITY_MANAGER (API ≤23 only)\n- ACTIVITY_MANAGER (Samsung API 22 only)\n- IMM_FOCUSED_VIEW (API ≤23 only)\n- SPELL_CHECKER (API 23 only)\n\nThese fixes were already no-ops with early returns after the min SDK\nupgrade. Removing them completely eliminates ~200 lines of dead code\nand documentation while maintaining all functional leak fixes.\n\nThe remaining 10 AndroidLeakFixes enum constants continue to provide\nuseful leak fixes for Android 26+.\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "6f79d2232b1a8a1f4aedf541ef69463c9ce4238f",
      "tree": "fdbadc2f685f0f0120aa9ead43870a98107dcbed",
      "parents": [
        "6885e6876ae457627679a1331bc08ffd37c3b400"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Fri Feb 27 14:39:04 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Sat Feb 28 23:06:30 2026"
      },
      "message": "Fix ObsoleteSdkInt lint errors after API 26 upgrade\n\nWith minSdkVersion now set to API 26 (Android 8.0), many of the Android leak fixes in the plumber module are no longer necessary as they targeted older API levels. This commit resolves lint warnings by adding early returns to obsolete fixes and removing unnecessary API annotations.\n\nChanges made:\n- AndroidLeakFixes.kt: Added early returns to 6 leak fixes that only applied to API levels below 26:\n  • MEDIA_SESSION_LEGACY_HELPER (was for API 21)\n  • FLUSH_HANDLER_THREADS (was for API 14-25)\n  • LEAK_CANARY_THREAD_EDGE_CASE (was for API 21-25)\n  • ACTIVITY_THREAD_EDGE_CASE (was for API 16-25)\n  • CONNECTIVITY_MANAGER (was for API 21-25)\n- FixedWindowCallback.java: Removed obsolete @RequiresApi(23) annotation from onSearchRequested method\n- Cleaned up unused Build.VERSION imports after removing version checks\n\nThese changes eliminate 11 ObsoleteSdkInt lint errors while maintaining API compatibility. The affected leak fixes are no longer needed since Android 8.0+ doesn\u0027t have these issues.\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "0cbefba206314f6cf079ae3313b437768e6f197d",
      "tree": "70b4b1797c3f1d49bab57f6075c056832b0dbbe8",
      "parents": [
        "c2ddc5a5c5fecb3c10dff82955187f0d39ece4df",
        "a6b2310ce808495afdd44d0c83ec134bce6e0429"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Sat Feb 28 11:42:33 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Feb 28 11:42:33 2026"
      },
      "message": "Merge pull request #2736 from square/py/strip_more\n\nHprofPrimitiveArrayStripper: sync with android-register, fix bugs, clean up"
    },
    {
      "commit": "a6b2310ce808495afdd44d0c83ec134bce6e0429",
      "tree": "70b4b1797c3f1d49bab57f6075c056832b0dbbe8",
      "parents": [
        "c2ddc5a5c5fecb3c10dff82955187f0d39ece4df"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Sat Feb 28 10:34:06 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Sat Feb 28 10:34:06 2026"
      },
      "message": "HprofPrimitiveArrayStripper: fix bugs, add StreamingSinkProvider\n\nFix two correctness bugs:\n\n- INSTANCE_DUMP: stackTraceSerialNumber is always u4 (4 bytes), not\n  identifier-sized. This was silently corrupting output for heap dumps\n  with 8-byte identifiers.\n- PRIMITIVE_ARRAY_DUMP: CopyingSource.transferUnsignedByte() already\n  copies the type byte to the sink — the extra sink.writeByte(type) call\n  was writing it twice, corrupting all primitive array records.\n\nFix a third bug in CopyingSource.transferUtf8: it decoded bytes as\nUTF-8 into a Java String then re-encoded, which produces different byte\ncounts for Modified UTF-8 sequences (used by HotSpot HPROF). The fix\nreads the raw bytes and copies them unchanged, only decoding to String\nfor the return value.\n\nOther changes:\n- Add StreamingSinkProvider (mirrors StreamingSourceProvider) so the\n  sink lifecycle is managed inside the function via .use {}\n- Replace BufferedSink parameter with StreamingSinkProvider in the\n  streaming overload\n- Refactor parsing into a private stripPrimitiveArrays(CopyingSource)\n  method\n- Add CopyingSource.indexOf delegate\n- Also updates all primitive wrapper instance values to 0 (in addition\n  to primitive arrays), as an additional PII safety measure\n- Add deleteInputHprofFile parameter to delete the input file eagerly\n  after the source is opened, using the Unix trick\n- Clean up test: replace raw-byte helpers with HprofWriter-based\n  fixture, add JVM heap dump tests for string replacement and wrapper\n  value zeroing\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "6885e6876ae457627679a1331bc08ffd37c3b400",
      "tree": "cde1c0f05f89fd05c4b0f5d12d698f3cd0bb4ad1",
      "parents": [
        "c1b9efe48204f35fc0b8865877e6253aa755f844"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Fri Feb 27 14:14:22 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Fri Feb 27 14:14:22 2026"
      },
      "message": "Update minimum SDK to API 26 (Android 8.0 Oreo)\n\nThis commit migrates the entire LeakCanary project from minimum SDK API 21\nto API 26, enabling modern Android features and further simplifying the codebase.\n\nAPI 26 corresponds to Android 8.0 (Oreo), released in 2017, providing\nover 7 years of Android compatibility while enabling notification channels\nand modern development practices.\n\nChanges included:\n\n## Build Configuration\n- Update androidMinSdk from \"21\" to \"26\" in version catalog\n- Update hardcoded minSdk value in leakcanary-app from 21 to 26\n- Update comment to reflect modern Android features requirement\n\n## GitHub Actions / CI\n- Remove API 21 and API 23 from test matrix\n- Streamline CI to test only API 26+ (26, 31, 33, 34)\n- Improve CI efficiency with fewer test combinations\n\n## Code Modernization\n- Simplify notification builder to always use notification channels (API 26+ requirement)\n- Remove obsolete PendingIntent FLAG_IMMUTABLE version checks (API 23+ always available)\n- Simplify instant app detection (API 26+ always supports this)\n- Remove obsolete SDK version checks for dynamic shortcuts (N_MR1 no longer relevant)\n- Modernize Context.getColor() usage (API 23+ always available)\n- Simplify process utilities in UiAutomator (API 23+ features always available)\n- Remove obsolete @TargetApi annotations for API levels below 26\n\n## Resources \u0026 UI\n- Move adaptive icons from mipmap-anydpi-v26 to mipmap-anydpi (no qualifier needed)\n- Move app launcher icons from drawable-v24 to drawable (API 26+ always supports adaptive icons)\n- Remove obsolete resource version qualifiers\n\n## Code Cleanup\n- Remove unused import statements after version check removals\n- Simplify conditional logic where version checks became always true/false\n- Remove dead code branches for pre-API 26 compatibility\n\n## Benefits\n- Access to notification channels (API 26 requirement) without compatibility code\n- Simplified codebase with removed legacy compatibility workarounds\n- Modern UI patterns with adaptive icons as standard\n- Faster CI builds with fewer test matrix combinations\n\n## Compatibility\nAll modules now consistently require Android 8.0 (API 26, 2017) or higher.\nThis affects minSdk but does not change the public API surface.\nLibrary consumers benefit from simplified, more reliable notification handling.\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "c1b9efe48204f35fc0b8865877e6253aa755f844",
      "tree": "5952902924fd8954fdf06e310b0381b3107c4953",
      "parents": [
        "a6d2b6b9352b3c1d3ea1b9b22fb12a4b04a51846"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Fri Feb 27 00:01:04 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Fri Feb 27 00:04:42 2026"
      },
      "message": "Update minimum SDK to API 21 (Android 5.0 Lollipop)\n\nThis commit migrates the entire LeakCanary project from minimum SDK API 14\nto API 21, enabling modern Android features and simplifying the codebase.\n\nAPI 21 corresponds to Android 5.0 (Lollipop), released in 2014, providing\nover a decade of Android compatibility while enabling Material Design and\nmodern development practices.\n\nChanges included:\n\n## Build Configuration\n- Update androidMinSdk from \"14\" to \"21\" in version catalog\n- Standardize all modules to use libs.versions.androidMinSdk reference\n- Update hardcoded minSdk values in sample and library modules to use TOML\n\n## GitHub Actions / CI\n- Remove API 16 and API 19 from test matrix\n- Streamline CI to test only API 21+ (21, 23, 26, 31, 33, 34)\n- Improve CI efficiency with fewer test combinations\n\n## Test Infrastructure\n- Upgrade androidx.test:orchestrator from 1.4.2 to 1.5.0\n- Modernize test assertions to use direct assertThat(Throwable) calls\n- Remove API 16 workaround comments and code\n\n## Code Modernization\n- Remove obsolete SDK version checks (9 lint issues resolved)\n- Simplify file provider methods for API 21+ only\n- Update notification builder usage for modern APIs\n- Remove legacy view tree observer workarounds\n- Modernize layout and rendering code\n\n## Resources \u0026 UI\n- Migrate drawable resources from selectors to Material ripple effects\n- Update themes from Holo to Material Design (API 21+ requirement)\n- Merge and remove obsolete -v21 resource folders\n- Modernize button and touch feedback using ripples\n\n## Benefits\n- Access to Material Design components and APIs\n- Simplified codebase with removed legacy compatibility code\n- Enhanced test infrastructure with latest orchestrator\n- Improved user experience with modern UI patterns\n- Faster CI builds with fewer test matrix combinations\n\n## Compatibility\nAll modules now consistently require Android 5.0 (API 21, 2014) or higher.\nThis affects minSdk but does not change the public API surface.\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "c2ddc5a5c5fecb3c10dff82955187f0d39ece4df",
      "tree": "10cc078a785787127831509ebb4efb6873eb7c07",
      "parents": [
        "a6d2b6b9352b3c1d3ea1b9b22fb12a4b04a51846",
        "23cd68b081c20ae5df5d9e51e33de2881037b1b4"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu Feb 26 23:49:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 23:49:12 2026"
      },
      "message": "Merge pull request #2737 from jjliu15/reference_matchers_mnextservedview\n\nExtend InputMethodManager workaround to API level 35"
    },
    {
      "commit": "a6d2b6b9352b3c1d3ea1b9b22fb12a4b04a51846",
      "tree": "8cf154a76e98763176a47f18255e8df0948571e5",
      "parents": [
        "fabd71f66c984c226c3faa3a63a728ce956d956f",
        "89a3079e5684606b28b4ed31b58774331f68b1e6"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu Feb 26 20:47:04 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 20:47:04 2026"
      },
      "message": "Merge pull request #2799 from blundell/fix-instru-tests\n\nUpdate Gradle, AGP, Hilt"
    },
    {
      "commit": "89a3079e5684606b28b4ed31b58774331f68b1e6",
      "tree": "8cf154a76e98763176a47f18255e8df0948571e5",
      "parents": [
        "cd658fe3c3263393cd2f22dff95589b5a28ae449"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 20:28:39 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 20:28:39 2026"
      },
      "message": "Remove trailing inline comments from @Suppress annotations\n\nMove the explanation to the preceding comment line instead of appending\nit to the annotation itself, per project style conventions.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "cd658fe3c3263393cd2f22dff95589b5a28ae449",
      "tree": "3780492d1f29d41b70623e78e7c4fa72e5470b69",
      "parents": [
        "1395f93c416435d70a2962c9f4f4a9c27c7bef60",
        "fabd71f66c984c226c3faa3a63a728ce956d956f"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 20:28:23 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 20:28:23 2026"
      },
      "message": "Merge remote-tracking branch \u0027origin/main\u0027 into fix-instru-tests\n\n* origin/main:\n  Pin gradle/actions/wrapper-validation to commit SHA to satisfy code scanning\n  Drop API 28 and 29 from instrumentation test matrix\n  Fix LeakActivityTest on API 33+ by disabling notifications during test\n  Fix INSTALL_FAILED_DEPRECATED_SDK_VERSION on API 28+ for leakcanary-android tests\n  Upgrade wrapper-validation-action to gradle/actions/wrapper-validation@v4\n  Add recent Android API levels to instrumentation test matrix\n  Fix pkill self-match: use qemu-syste[m] pattern\n  Update changelog entry wording for ToastEventListener fix\n  Fix emulator process hanging 20+ min after CI tests finish\n  Add changelog entry for ToastEventListener race condition fix\n  Fix ToastEventListener race condition retaining finished Toast\n"
    },
    {
      "commit": "fabd71f66c984c226c3faa3a63a728ce956d956f",
      "tree": "0ff64dbdf1093b3b8b001f645082c686d8410653",
      "parents": [
        "31ca31149e47ec8d0f5bd4a4a7736e27eaeb083c",
        "17318857461bac3e8d9f7995f3552be792182702"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu Feb 26 20:25:11 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 20:25:11 2026"
      },
      "message": "Merge pull request #2803 from square/worktree-add-emulators\n\nAdd recent Android API levels (28, 29, 31, 33, 34) to instrumentation CI matrix"
    },
    {
      "commit": "17318857461bac3e8d9f7995f3552be792182702",
      "tree": "0ff64dbdf1093b3b8b001f645082c686d8410653",
      "parents": [
        "b72effd7449e6b586b4cc0988f1f7133f42ffd47"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 20:11:31 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 20:11:31 2026"
      },
      "message": "Pin gradle/actions/wrapper-validation to commit SHA to satisfy code scanning\n\nFixes \"Insecure GitHub Actions: Third-Party Action Not Pinned to Commit SHA\"\nflagged by GitHub Advanced Security on PR #2803. Pins to the commit SHA\ncorresponding to v4 while keeping the tag as a comment for readability.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "b72effd7449e6b586b4cc0988f1f7133f42ffd47",
      "tree": "c6e5860b45dca07ed72fb0bcc325290d0ad6feac",
      "parents": [
        "38deaf55dd4c68a22dde43ee08262f771623f080"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 19:06:54 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 19:06:54 2026"
      },
      "message": "Drop API 28 and 29 from instrumentation test matrix\n\nBased on timing analysis across two full CI runs:\n- API 28 averaged 652s (~11 min), slowest after API 29\n- API 29 averaged 672s (~11 min), consistently the slowest new addition\n\nAPI 31, 33, and 34 provide good modern Android coverage at reasonable\ncost (568–622s avg). APIs 28 and 29 can be reconsidered later if\nAndroid 9/10 coverage becomes a specific need.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "38deaf55dd4c68a22dde43ee08262f771623f080",
      "tree": "011e3b8ee81aa6d2632aab5ffb9403def610c812",
      "parents": [
        "b79e8a9076169871564db717b24d2afc713ebea9"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:53:42 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 19:06:47 2026"
      },
      "message": "Fix LeakActivityTest on API 33+ by disabling notifications during test\n\nWhen targetSdk \u003e\u003d 33 and notifications are not enabled (fresh emulator),\nNotifications.canShowNotification launches RequestPermissionActivity with\nFLAG_ACTIVITY_NEW_TASK to request POST_NOTIFICATIONS permission. This\npushes LeakActivity to PAUSED, causing Espresso\u0027s onView() to throw\nNoActivityResumedException.\n\nThe test is validating the heap import flow, not notifications. Setting\nshowNotifications \u003d false prevents the permission activity from launching\nso LeakActivity stays in the RESUMED state for the Espresso assertions.\nThe tryAndRestoreConfig wrapper already restores the original config.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "b79e8a9076169871564db717b24d2afc713ebea9",
      "tree": "2632b645a0d9bbffe2a6cfe6abd62478627edcb5",
      "parents": [
        "d42b3b575fa5405d183b56e650ddf4279079a36c"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:12:47 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 19:06:47 2026"
      },
      "message": "Fix INSTALL_FAILED_DEPRECATED_SDK_VERSION on API 28+ for leakcanary-android tests\n\nAndroid 9 (API 28) and above refuse to install APKs that target\nSDK version \u003c 23. The leakcanary-android module was missing an explicit\ntargetSdk in its defaultConfig, causing the test APK to default to\ntargetSdkVersion \u003d minSdkVersion \u003d 14.\n\nleakcanary-android-core already had this fix with an explanatory comment.\nApply the same to leakcanary-android so it can run on API 28-34 emulators.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "d42b3b575fa5405d183b56e650ddf4279079a36c",
      "tree": "17f56f66eb934de61f201b8528c604cd526b2bfa",
      "parents": [
        "14b806eb5d83fa6894d61ad22daf90d3a1f5e7c4"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 15:57:42 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 19:06:47 2026"
      },
      "message": "Upgrade wrapper-validation-action to gradle/actions/wrapper-validation@v4\n\nThe old gradle/wrapper-validation-action@v1 was silently failing on all\nPR runs (works on push-to-main but not on PR merge commits). The modern\nreplacement is gradle/actions/wrapper-validation which is actively\nmaintained by Gradle.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "14b806eb5d83fa6894d61ad22daf90d3a1f5e7c4",
      "tree": "7d3c2184b28d3db5c43ee033b63632a5ce05fd51",
      "parents": [
        "31ca31149e47ec8d0f5bd4a4a7736e27eaeb083c"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 15:54:40 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 19:06:47 2026"
      },
      "message": "Add recent Android API levels to instrumentation test matrix\n\nAdd API levels 28, 29, 31, 33, and 34 (Android 9-14) to the CI\nemulator matrix. API 29 was previously marked flaky but is worth\nretrying with current tooling. All use x86_64 + google_apis + stable\nchannel, consistent with the existing modern emulator configuration.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "31ca31149e47ec8d0f5bd4a4a7736e27eaeb083c",
      "tree": "0d22aa12c743517358c39890992d99aae1d24f0e",
      "parents": [
        "96375aa57ea5a97176f0889e964dd3c3b2e23341",
        "e89fff6bef785e82aa02fecc0e007f0982ab8663"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu Feb 26 19:03:35 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 19:03:35 2026"
      },
      "message": "Merge pull request #2804 from square/changelog-toast-fix\n\nAdd changelog entry for ToastEventListener race condition fix"
    },
    {
      "commit": "96375aa57ea5a97176f0889e964dd3c3b2e23341",
      "tree": "c72ee389aded3ac8a4a83ebb2b7ab824def586ae",
      "parents": [
        "aba44b21eda541ffe5f7699df48bae5fdf4fd92f",
        "9d92fecd0c17172bdfe9674aad9c96803d7b4493"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu Feb 26 19:02:38 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 19:02:38 2026"
      },
      "message": "Merge pull request #2805 from square/fix-emulator-hang\n\nFix CI: force-kill emulator to prevent 20+ min hang after tests"
    },
    {
      "commit": "9d92fecd0c17172bdfe9674aad9c96803d7b4493",
      "tree": "c72ee389aded3ac8a4a83ebb2b7ab824def586ae",
      "parents": [
        "5630f9b03f23f1f5975694bb34d413fefa183f79"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:56:15 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:56:15 2026"
      },
      "message": "Fix pkill self-match: use qemu-syste[m] pattern\n"
    },
    {
      "commit": "e89fff6bef785e82aa02fecc0e007f0982ab8663",
      "tree": "fcfa52b46b2d29a06f6c0f66b2fe64288a177de4",
      "parents": [
        "51608c24bb7975c8bbece49e875f90aa165b00bd"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:51:14 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:51:14 2026"
      },
      "message": "Update changelog entry wording for ToastEventListener fix\n"
    },
    {
      "commit": "5630f9b03f23f1f5975694bb34d413fefa183f79",
      "tree": "ff08f2c8ad471ac751ca124270518180148770c9",
      "parents": [
        "aba44b21eda541ffe5f7699df48bae5fdf4fd92f"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:13:18 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:13:18 2026"
      },
      "message": "Fix emulator process hanging 20+ min after CI tests finish\n\nOn API 26 google_apis, the emulator process does not exit after\nreceiving adb emu kill. The android-emulator-runner post-step\npolls until the process dies, which never happens before the\n30-minute job timeout triggers, wasting ~23 minutes of CI time.\n\nForce-kill the qemu-system process at the end of the test script,\nbefore the action\u0027s post-step cleanup runs. When the post-step\nthen checks whether the process has exited, it is already gone\nand the cleanup step exits immediately.\n"
    },
    {
      "commit": "51608c24bb7975c8bbece49e875f90aa165b00bd",
      "tree": "c0d76f2ad1a4bfc3a991d0a5eca0e9695f325446",
      "parents": [
        "aba44b21eda541ffe5f7699df48bae5fdf4fd92f"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:13:14 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 16:13:14 2026"
      },
      "message": "Add changelog entry for ToastEventListener race condition fix\n\nDocument the fix from #2802 in the Unreleased section.\n"
    },
    {
      "commit": "aba44b21eda541ffe5f7699df48bae5fdf4fd92f",
      "tree": "c14d707bf510bb41d6efda1514aae6df39cf3c94",
      "parents": [
        "f3f9207494eba53e2152668751c0fd40c3d70cd0",
        "9890f6931fb036534be5047a0c0b6d870934b484"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu Feb 26 16:07:12 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 16:07:12 2026"
      },
      "message": "Merge pull request #2802 from square/py/fix-toast-leak\n\nFix ToastEventListener race condition that retains a finished Toast"
    },
    {
      "commit": "1395f93c416435d70a2962c9f4f4a9c27c7bef60",
      "tree": "85f5f17b71179f1e134e32597885c071d68df5d5",
      "parents": [
        "5a187b6566b376e4650546dc191e523c89bd1228"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 15:57:19 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 15:57:19 2026"
      },
      "message": "Regenerate the gradle wrapper on gradle bump\n"
    },
    {
      "commit": "5a187b6566b376e4650546dc191e523c89bd1228",
      "tree": "774ea2a0945686f4d2d64d573e4d9a6197ce096e",
      "parents": [
        "82d8c8064208b3d598d5d641f71ac57833944244"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 15:54:56 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 15:54:56 2026"
      },
      "message": "Downgrade test orchestrator\n\n- allow the instrumentation tests running an API 16 to pass\n"
    },
    {
      "commit": "9890f6931fb036534be5047a0c0b6d870934b484",
      "tree": "c14d707bf510bb41d6efda1514aae6df39cf3c94",
      "parents": [
        "f3f9207494eba53e2152668751c0fd40c3d70cd0"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 15:14:07 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 15:21:49 2026"
      },
      "message": "Fix ToastEventListener race condition retaining finished Toast\n\nshowToastBlocking() blocks the heap dump thread (via CountDownLatch)\nuntil onAnimationEnd fires, but only up to a 5-second timeout. If the\ntimeout fires before the animation completes, the heap dump proceeds and\nHeapDump posts a cleanup runnable to the main thread. That cleanup runs\nwhile toastCurrentlyShown is still null (animation not done yet), so it\nis a no-op. Then onAnimationEnd fires and sets toastCurrentlyShown \u003d toast\npermanently — no subsequent event clears it, causing a memory leak.\n\nThe fix: set toastCurrentlyShown \u003d toast immediately after toast.show(),\nbefore starting the animation. The cleanup runnable then always sees a\nnon-null reference and cancels + nulls it correctly, regardless of\nwhether onAnimationEnd has fired yet.\n\nThe partial fix in ade42f792 (adding toastCurrentlyShown \u003d null to the\ncleanup) addressed the common case but not this timeout-driven race.\n\nFixes #2301\nFixes #2325\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "82d8c8064208b3d598d5d641f71ac57833944244",
      "tree": "1ac59f9666f1bce21db6cc620223c13b0e3decca",
      "parents": [
        "dc01b261e4ed8e8d622db4695714dc69de1636e3"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 13:51:17 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 14:52:19 2026"
      },
      "message": "Use the toml hash in the cache file name\n\n- This allows a new emu to be created if dependencies are updated\n- Dependencies being updated can cause signature mismatches in installed test apks\n"
    },
    {
      "commit": "dc01b261e4ed8e8d622db4695714dc69de1636e3",
      "tree": "486cec217c9a7ba1507b4d15c26feb47c33ee64a",
      "parents": [
        "30f34075b9d659316ae984dd442bd4238f655cb1"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 10:24:52 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 13:12:59 2026"
      },
      "message": "Use AGP 8.2.2 for successful test report finding\n"
    },
    {
      "commit": "30f34075b9d659316ae984dd442bd4238f655cb1",
      "tree": "0af371a326081a08e4f87a16c873623188e28b39",
      "parents": [
        "85cfff6776d5fee3316540b2ec28867dd8fb3d82"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 09:40:58 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 13:12:59 2026"
      },
      "message": "Update the API baseline\n\nWhat These Changes Mean:\n\n  Removed Methods: getDefaultImpl() and setDefaultImpl()\n  These were part of an older AIDL pattern for handling default implementations when the service isn\u0027t available. This was a fallback mechanism that\u0027s been deprecated in favor of better error handling.\n\n  Added: DESCRIPTOR Field\n  This is the standard AIDL interface descriptor string - it\u0027s always been there internally, but now it\u0027s explicitly exposed in the public API.\n\n  Added: LeakUiApp$_Parcel Class\n  This is a newer AIDL tooling artifact - modern AIDL compilers generate additional helper classes for parcelization.\n\n  Impact Analysis: ✅ Likely SAFE - No Breaking Changes for Clients\n\n  Why this is probably fine:\n  1. Internal APIs: These are in org.leakcanary.internal.* package - the internal namespace signals these aren\u0027t meant for public consumption\n  2. AIDL Evolution: The Android AIDL compiler has been evolving to generate more modern, efficient code. The removed methods were legacy patterns.\n  3. Backwards Compatible:\n  - The core sendHeapAnalysis() method remains unchanged\n    - The DESCRIPTOR field addition doesn\u0027t break existing clients\n    - The new _Parcel class is just tooling infrastructure\n  4. LeakCanary Context: This appears to be inter-process communication between LeakCanary components, not a public API for app developers\n  ⚠️ Potential Concerns:\n  1. If any external code was using the removed methods (unlikely since they\u0027re internal APIs)\n  2. Binary compatibility for any code that was directly instantiating or reflection-accessing these classes\n\n What Could Have Caused This:\n  1. Java 17 + newer Android Gradle Plugin - may use a newer AIDL compiler\n  2. Updated compileOptions - could affect how AIDL generates code\n  3. Build environment changes - newer toolchain versions\nRecommendation:\n  This is likely safe because:\n  - It\u0027s internal LeakCanary APIs\n  - The core functionality (sendHeapAnalysis) is preserved\n  - This follows AIDL tooling evolution patterns\n\n However, you should consider:\n  - Testing: Ensure LeakCanary still works properly between processes\n  - Release notes: Document that internal AIDL APIs changed (if you publish these changes)\n  - Monitoring: Watch for any reports of inter-process communication issues\n\n The changes appear to be tooling evolution rather than functional changes, but it\u0027s worth testing the actual LeakCanary functionality to be sure.\n"
    },
    {
      "commit": "85cfff6776d5fee3316540b2ec28867dd8fb3d82",
      "tree": "445b1c4796c97f3d64b4cec39feba33df8cda0d0",
      "parents": [
        "f3f9207494eba53e2152668751c0fd40c3d70cd0"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Wed Feb 25 23:26:22 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Thu Feb 26 13:12:59 2026"
      },
      "message": "Fix UI test infrastructure\n\nUpdates Android instrumentation test dependencies and configuration to work with compileSdk 35 and API level 36:\n\n- Update Gradle from 8.2 to 8.10.2\n- Move from KAPT to KSP\n- Update AGP to 8.2.2 and Gradle to 8.2\n- Update Hilt to consistently be 2.53\n- Update AndroidX Test dependencies to modern versions compatible with API 36\n- Fix test namespace configuration to match actual package structure\n- Move TuPeuxPasTest to correct package structure for proper test discovery\n- Fixes build warnings about packagingOptions\n- Add missing Java sourceCompatibility declarations\n- Appease lint by suppressing the failures, we could remove the checks but they where written for a reason so keeping them\n\nThis ensures UI tests are properly discovered and executed by Gradle with correct reporting, while maintaining compatibility with newer Android APIs.\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "f3f9207494eba53e2152668751c0fd40c3d70cd0",
      "tree": "943753d63a892c96be7181a634e345bccfffce70",
      "parents": [
        "959be77f7df4f47dc11fcf29a24cdaf6cb488f7f",
        "470859b3d0f35aaae5e886cba7b1a313abfff911"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu Feb 26 12:25:01 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Feb 26 12:25:01 2026"
      },
      "message": "Merge pull request #2801 from square/worktree-fix-ci-instrumentation-tests\n\nFix instrumentation tests: uninstall stale APKs before connectedCheck"
    },
    {
      "commit": "470859b3d0f35aaae5e886cba7b1a313abfff911",
      "tree": "943753d63a892c96be7181a634e345bccfffce70",
      "parents": [
        "959be77f7df4f47dc11fcf29a24cdaf6cb488f7f"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 12:13:00 2026"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu Feb 26 12:13:00 2026"
      },
      "message": "Fix instrumentation tests failing with INSTALL_PARSE_FAILED_INCONSISTENT_CERTIFICATES\n\nWhen a cached AVD snapshot has LeakCanary packages installed with different\nsigning certificates than the current build, Android refuses to reinstall them.\nFix by explicitly uninstalling all known LeakCanary packages before running\nconnectedCheck, so the fresh build APKs always install cleanly.\n\nCo-Authored-By: Claude Sonnet 4.6 \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "959be77f7df4f47dc11fcf29a24cdaf6cb488f7f",
      "tree": "32b137a541f0e7160281e4259c9b6bc6495e2852",
      "parents": [
        "6de01db2235d952e1bb0a00f10a4a804a8ae04ff",
        "58a5c1cc67893e3c45bf6c348a06531e901bd31c"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Wed Feb 25 19:20:45 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 25 19:20:45 2026"
      },
      "message": "Merge pull request #2797 from blundell/fix-compose-inspector-main\n\nFix COMPOSITION_IMPL inspector for new Compose state field structure"
    },
    {
      "commit": "58a5c1cc67893e3c45bf6c348a06531e901bd31c",
      "tree": "32b137a541f0e7160281e4259c9b6bc6495e2852",
      "parents": [
        "6de01db2235d952e1bb0a00f10a4a804a8ae04ff"
      ],
      "author": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Tue Feb 24 15:13:41 2026"
      },
      "committer": {
        "name": "pblundell",
        "email": "pblundell@roku.com",
        "time": "Wed Feb 25 16:40:02 2026"
      },
      "message": "Fix COMPOSITION_IMPL inspector for new Compose state field structure\n\nFixes NullPointerException when analyzing heap dumps from newer Compose versions\nwhere CompositionImpl uses \"state\" int field instead of \"disposed\" boolean field.\n\nThe inspector now gracefully handles both field structures:\n- Old Compose: disposed boolean field (backward compatibility)\n- New Compose: state int field with values RUNNING\u003d0, DISPOSED\u003d3, etc.\n- Edge case: neither field exists (graceful fallback)\n\nBefore: NullPointerException at AndroidObjectInspectors$COMPOSITION_IMPL$inspect line 792\nAfter: Analysis completes successfully with proper state detection\n\nFixes: https://github.com/square/leakcanary/issues/2781\n\nCo-Authored-By: Claude \u003cnoreply@anthropic.com\u003e\n"
    },
    {
      "commit": "6de01db2235d952e1bb0a00f10a4a804a8ae04ff",
      "tree": "c52fd22bf12f1765e928dd4ecb84ca85ab8c073c",
      "parents": [
        "b9bea46f271e32a1a592d5b5284024fc5602e710",
        "6f95ee9b6d21b1a7a4f442a76ffc213d6dd080bd"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Wed Feb 04 10:25:21 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Feb 04 10:25:21 2026"
      },
      "message": "Merge pull request #2788 from roberto-git0/fix-shark-compliance\n\nUpdate Shark for newer Okio and Kotlin compliance"
    },
    {
      "commit": "6f95ee9b6d21b1a7a4f442a76ffc213d6dd080bd",
      "tree": "c52fd22bf12f1765e928dd4ecb84ca85ab8c073c",
      "parents": [
        "1f33b250a650e35b5ac3ffe3e79d56f77310fde1"
      ],
      "author": {
        "name": "Roberto Stanciu",
        "email": "robertostanciu@google.com",
        "time": "Wed Jan 28 17:41:50 2026"
      },
      "committer": {
        "name": "Roberto Stanciu",
        "email": "robertostanciu@google.com",
        "time": "Wed Jan 28 17:41:50 2026"
      },
      "message": "removing okio 1.x from Gradle Version Catalog\n"
    },
    {
      "commit": "1f33b250a650e35b5ac3ffe3e79d56f77310fde1",
      "tree": "04d4d2360cceda0db001386a36087bdef011a56c",
      "parents": [
        "b9bea46f271e32a1a592d5b5284024fc5602e710"
      ],
      "author": {
        "name": "Roberto Stanciu",
        "email": "robertostanciu@google.com",
        "time": "Tue Jan 20 15:04:00 2026"
      },
      "committer": {
        "name": "Roberto Stanciu",
        "email": "robertostanciu@google.com",
        "time": "Tue Jan 20 15:04:00 2026"
      },
      "message": "Update Shark for newer Okio and Kotlin compliance\n"
    },
    {
      "commit": "b9bea46f271e32a1a592d5b5284024fc5602e710",
      "tree": "ece484b717e4d1630eee80082ddc2c3641f4e729",
      "parents": [
        "22bef70ba5abdba5f65935c1a37227d01be598d3",
        "1aec6dddff327209c7cfa9c1247fa92064b4a89b"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Mon Jan 05 10:58:22 2026"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jan 05 10:58:22 2026"
      },
      "message": "Merge pull request #2779 from 0legg/oleg/fits-system-windows\n\nEnforce LeakActivity to fit system windows"
    },
    {
      "commit": "1aec6dddff327209c7cfa9c1247fa92064b4a89b",
      "tree": "ece484b717e4d1630eee80082ddc2c3641f4e729",
      "parents": [
        "22bef70ba5abdba5f65935c1a37227d01be598d3"
      ],
      "author": {
        "name": "Oleg Godovykh",
        "email": "ogodovykh@roblox.com",
        "time": "Thu Oct 23 17:56:27 2025"
      },
      "committer": {
        "name": "Oleg Godovykh",
        "email": "ogodovykh@roblox.com",
        "time": "Thu Oct 23 17:56:27 2025"
      },
      "message": "Enforce LeakActivity to fit system windows to avoid the content being cut on Android 15+\n"
    },
    {
      "commit": "22bef70ba5abdba5f65935c1a37227d01be598d3",
      "tree": "4931bb56eca8808bcf4909ecb0be09f474b1ee7a",
      "parents": [
        "83a8ad486fa26edbbc5832399f023f50853d48bb",
        "da99e2950778aeac825325957cdfe23bfb602bdd"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Tue Aug 05 05:43:50 2025"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 05 05:43:50 2025"
      },
      "message": "Merge pull request #2772 from Amokrane/amokrane/add_motorola_to_xiami_resources_impl\n\nAdd Motorola to OEMs causing a static context leak"
    },
    {
      "commit": "da99e2950778aeac825325957cdfe23bfb602bdd",
      "tree": "4931bb56eca8808bcf4909ecb0be09f474b1ee7a",
      "parents": [
        "83a8ad486fa26edbbc5832399f023f50853d48bb"
      ],
      "author": {
        "name": "Amokrane Chentir",
        "email": "amokranec@spotify.com",
        "time": "Mon Aug 04 21:27:54 2025"
      },
      "committer": {
        "name": "Amokrane Chentir",
        "email": "amokranec@spotify.com",
        "time": "Mon Aug 04 21:32:49 2025"
      },
      "message": "Add Motorola to OEMs causing a static context leak\n"
    },
    {
      "commit": "83a8ad486fa26edbbc5832399f023f50853d48bb",
      "tree": "4e7a7c31d5a92e28fb257f6341030cd4b42d220f",
      "parents": [
        "02d0d8b6ebfe8de55c109b904d7b526063f3f852",
        "8df729c9f1789ee9e0044570d87e691b6ad8587f"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Fri Mar 14 21:52:49 2025"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Mar 14 21:52:49 2025"
      },
      "message": "Merge pull request #2743 from gmazzo/fix-ci\n\nFixes CI (with minimal changes)"
    },
    {
      "commit": "8df729c9f1789ee9e0044570d87e691b6ad8587f",
      "tree": "4e7a7c31d5a92e28fb257f6341030cd4b42d220f",
      "parents": [
        "02d0d8b6ebfe8de55c109b904d7b526063f3f852"
      ],
      "author": {
        "name": "Guillermo Mazzola",
        "email": "gmazzo65@gmail.com",
        "time": "Fri Mar 14 13:46:39 2025"
      },
      "committer": {
        "name": "Guillermo Mazzola",
        "email": "gmazzo65@gmail.com",
        "time": "Fri Mar 14 13:47:53 2025"
      },
      "message": "Fixing CI (adding `detekt` issues to baseline)\n"
    },
    {
      "commit": "23cd68b081c20ae5df5d9e51e33de2881037b1b4",
      "tree": "b856b867a88f197778ef87ff371997707e99d397",
      "parents": [
        "02d0d8b6ebfe8de55c109b904d7b526063f3f852"
      ],
      "author": {
        "name": "jjliu15",
        "email": "jamesjliu@google.com",
        "time": "Wed Jan 15 00:52:35 2025"
      },
      "committer": {
        "name": "jjliu15",
        "email": "jamesjliu@google.com",
        "time": "Wed Jan 15 00:52:35 2025"
      },
      "message": "Extend API level for InputMethodManager.NextServedView in AndroidReferenceMatchers.\n"
    },
    {
      "commit": "02d0d8b6ebfe8de55c109b904d7b526063f3f852",
      "tree": "be152faf041da7e6396da7a3e910188ec0236229",
      "parents": [
        "315b335fcd2811ac6612b2d8e6452580d58be0e0",
        "ffdf55c3a5528deea3979a45d143df11e81d3073"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Wed Aug 28 22:51:11 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 28 22:51:11 2024"
      },
      "message": "Merge pull request #2697 from square/jwilson.0806.kts\n\nConvert builds to KTS"
    },
    {
      "commit": "ffdf55c3a5528deea3979a45d143df11e81d3073",
      "tree": "be152faf041da7e6396da7a3e910188ec0236229",
      "parents": [
        "540a39bfcd41b6d900f56f458b0e7691104a6b1f"
      ],
      "author": {
        "name": "Jesse Wilson",
        "email": "jwilson@squareup.com",
        "time": "Tue Aug 06 23:40:25 2024"
      },
      "committer": {
        "name": "Jesse Wilson",
        "email": "jwilson@squareup.com",
        "time": "Tue Aug 06 23:40:25 2024"
      },
      "message": "Actually convert\n"
    },
    {
      "commit": "540a39bfcd41b6d900f56f458b0e7691104a6b1f",
      "tree": "b42c352b7908da88e3ffb787a48172727b2dd91a",
      "parents": [
        "315b335fcd2811ac6612b2d8e6452580d58be0e0"
      ],
      "author": {
        "name": "Jesse Wilson",
        "email": "jwilson@squareup.com",
        "time": "Tue Aug 06 23:39:08 2024"
      },
      "committer": {
        "name": "Jesse Wilson",
        "email": "jwilson@squareup.com",
        "time": "Tue Aug 06 23:39:08 2024"
      },
      "message": "Rename build.gradle to build.gradle.kts\n"
    },
    {
      "commit": "315b335fcd2811ac6612b2d8e6452580d58be0e0",
      "tree": "6ea3fa79791adfe1914b1a2baa364cf51113b706",
      "parents": [
        "94332dd1198b455943a8b4c0f8b1f74989cd38a1",
        "d6e368504cf5002e1ed863aa2777c2613d3698ec"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Sat Jun 08 01:11:32 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 08 01:11:32 2024"
      },
      "message": "Merge pull request #2687 from msfjarvis/patch-1\n\nFix unbalanced code fences in changelog"
    },
    {
      "commit": "d6e368504cf5002e1ed863aa2777c2613d3698ec",
      "tree": "6ea3fa79791adfe1914b1a2baa364cf51113b706",
      "parents": [
        "94332dd1198b455943a8b4c0f8b1f74989cd38a1"
      ],
      "author": {
        "name": "Harsh Shandilya",
        "email": "me@msfjarvis.dev",
        "time": "Tue Jun 04 20:17:17 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jun 04 20:17:17 2024"
      },
      "message": "Fix unbalanced code fences in changelog"
    },
    {
      "commit": "94332dd1198b455943a8b4c0f8b1f74989cd38a1",
      "tree": "8b00c46f9d76efeb2ffd9f964c4944b6ca62c3ba",
      "parents": [
        "eab62749918e73fd00b9c521601a6352405d4ef9"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue Jun 04 19:49:15 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue Jun 04 19:49:15 2024"
      },
      "message": "Prepare for next development iteration\n"
    },
    {
      "commit": "eab62749918e73fd00b9c521601a6352405d4ef9",
      "tree": "540d97292126521ddbe75b1f6220326323456d2f",
      "parents": [
        "9a34652ee95fa132d26b15aa8664f7bbe7b82dc8",
        "d3fd078cc4fab75c193e6211d3705c004d48fdb3"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue Jun 04 19:31:02 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue Jun 04 19:31:02 2024"
      },
      "message": "Merge branch \u0027release_3.0-alpha-8\u0027\n\n* release_3.0-alpha-8:\n  Prepare 3.0-alpha-8 release\n"
    },
    {
      "commit": "d3fd078cc4fab75c193e6211d3705c004d48fdb3",
      "tree": "540d97292126521ddbe75b1f6220326323456d2f",
      "parents": [
        "9a34652ee95fa132d26b15aa8664f7bbe7b82dc8"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue Jun 04 18:52:09 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue Jun 04 18:52:09 2024"
      },
      "message": "Prepare 3.0-alpha-8 release\n"
    },
    {
      "commit": "9a34652ee95fa132d26b15aa8664f7bbe7b82dc8",
      "tree": "abff7033bd629eebf0f19ba4060b3a13708c2d78",
      "parents": [
        "5738869542af44bdfd8224603eac7af82327b054"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue Jun 04 18:36:52 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue Jun 04 18:36:52 2024"
      },
      "message": "Inline collaborators and add support for proper hprof handling on failures\n"
    },
    {
      "commit": "5738869542af44bdfd8224603eac7af82327b054",
      "tree": "1e2f6393de0d073c5bf8a8b3fc5db3baf38479ea",
      "parents": [
        "4fc93cb9cb6f947e2dc335747b8269984aaac929"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 22:33:41 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 22:33:41 2024"
      },
      "message": "Prepare for next development iteration\n"
    },
    {
      "commit": "4fc93cb9cb6f947e2dc335747b8269984aaac929",
      "tree": "f1d5e3e357b602540c303318adb5c8febd3a7518",
      "parents": [
        "316e0c8f67e9766feef82a8be8f890b9da9105bf",
        "3f581367dc5066a17ee306db6281cdbfe3d31043"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 22:21:35 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 22:21:35 2024"
      },
      "message": "Merge branch \u0027release_3.0-alpha-7\u0027\n\n* release_3.0-alpha-7:\n  Prepare 3.0-alpha-7 release\n"
    },
    {
      "commit": "3f581367dc5066a17ee306db6281cdbfe3d31043",
      "tree": "f1d5e3e357b602540c303318adb5c8febd3a7518",
      "parents": [
        "316e0c8f67e9766feef82a8be8f890b9da9105bf"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 22:12:14 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 22:12:14 2024"
      },
      "message": "Prepare 3.0-alpha-7 release\n"
    },
    {
      "commit": "316e0c8f67e9766feef82a8be8f890b9da9105bf",
      "tree": "7a9610cd783b64c6c1c2ba3840bd1beca281955e",
      "parents": [
        "45d8ab7d735a2e20626b940b1e2bbca51ffce0e6",
        "cbc1b032bc33db08ba841c606cf9864b2935d560"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu May 30 22:01:19 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 30 22:01:19 2024"
      },
      "message": "Merge pull request #2684 from square/py/storage_not_deletion\n\nrename HeapDumpDeletionStrategy to HeapDumpStorageStrategy"
    },
    {
      "commit": "45d8ab7d735a2e20626b940b1e2bbca51ffce0e6",
      "tree": "a538487048f6d397a110f3490c2f8ae2e24ed195",
      "parents": [
        "32653040960a6f9c1b79d80aa119b41c456fe155",
        "f39d47664d9d4a9f5a2a4d316943461c7a4103fd"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu May 30 21:17:31 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 30 21:17:31 2024"
      },
      "message": "Merge pull request #2683 from square/py/fix_duplicate_class_load_records\n\nFix crash when java.lang.Object has multiple class load records in JVM heap dumps"
    },
    {
      "commit": "32653040960a6f9c1b79d80aa119b41c456fe155",
      "tree": "a681ed2d9e5fa04d8076176317f0cd96f742014d",
      "parents": [
        "15dcc469e8f5a52149e704fc920726652a2eca6a",
        "bf3441dea930be50db3875ac126c814ca84f4f65"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Thu May 30 21:17:19 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu May 30 21:17:19 2024"
      },
      "message": "Merge pull request #2682 from square/py/unload\n\nAdd support for unload class tags and records"
    },
    {
      "commit": "cbc1b032bc33db08ba841c606cf9864b2935d560",
      "tree": "22ff51441d41b380e2de6510c27aabc1eded1903",
      "parents": [
        "15dcc469e8f5a52149e704fc920726652a2eca6a"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 21:16:57 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 21:16:57 2024"
      },
      "message": "rename HeapDumpDeletionStrategy to HeapDumpStorageStrategy\n"
    },
    {
      "commit": "f39d47664d9d4a9f5a2a4d316943461c7a4103fd",
      "tree": "069280dbc2da6ec787d5481f582d5351a613672b",
      "parents": [
        "d84896b8bbc3f9279d076acef7cea4213f76f107"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 21:09:19 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 21:09:19 2024"
      },
      "message": "Rename to differentiate from HprofHeapGraphTest in another module\n"
    },
    {
      "commit": "d84896b8bbc3f9279d076acef7cea4213f76f107",
      "tree": "e66d2d59a8b51a4319adc021c6fb0303166b53bf",
      "parents": [
        "15dcc469e8f5a52149e704fc920726652a2eca6a"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 21:07:01 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 21:08:35 2024"
      },
      "message": "Fix crash when java.lang.Object has multiple class load records in JVM heap dumps\n"
    },
    {
      "commit": "15dcc469e8f5a52149e704fc920726652a2eca6a",
      "tree": "7853b055dbc0b50bf278d6efcf2b53605148f0fe",
      "parents": [
        "1087e7f520eee5aa93a77a9f07b0d4a75227443a"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 20:58:45 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 20:58:45 2024"
      },
      "message": "Don\u0027t rely on path that doesn\u0027t exist\n"
    },
    {
      "commit": "bf3441dea930be50db3875ac126c814ca84f4f65",
      "tree": "4492db98ce2749aefa286245d6c02f8e6943f0fa",
      "parents": [
        "1087e7f520eee5aa93a77a9f07b0d4a75227443a"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 17:59:59 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 18:09:07 2024"
      },
      "message": "add support for unload class tags and records\n"
    },
    {
      "commit": "1087e7f520eee5aa93a77a9f07b0d4a75227443a",
      "tree": "00cbfe2f88308ecf7dbf4b386f9f27a3ac26af16",
      "parents": [
        "b9d52fd8e830e085e30c246ac53667211c0b7fe4"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 05:13:22 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 05:13:22 2024"
      },
      "message": "update changelog\n"
    },
    {
      "commit": "b9d52fd8e830e085e30c246ac53667211c0b7fe4",
      "tree": "2f627e92c82ae781e7c5ebf5d17219727c413e47",
      "parents": [
        "bd2dc1f9c4b4fc5b8a6b5c3aec2ded1bd28ea8ed"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 03:32:57 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 03:32:57 2024"
      },
      "message": "revamp directory provides to centralize caching\n"
    },
    {
      "commit": "bd2dc1f9c4b4fc5b8a6b5c3aec2ded1bd28ea8ed",
      "tree": "ae17bab9ccd023a7d3d6ca72f55e7bbb67660dcf",
      "parents": [
        "afd39cbfdf45e30ae8751337d28c5ffacebaeec4"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 02:11:56 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Thu May 30 02:11:56 2024"
      },
      "message": "rename and improve zip approach in success case\n"
    },
    {
      "commit": "afd39cbfdf45e30ae8751337d28c5ffacebaeec4",
      "tree": "f41485df1429a96e2ce860f41b27a729fe7a1ec9",
      "parents": [
        "342fbc540bebe8961285894433a40da86deeca2c"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 23:21:45 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 23:21:45 2024"
      },
      "message": "Snapshot deployment not blocking on UI tests\n"
    },
    {
      "commit": "342fbc540bebe8961285894433a40da86deeca2c",
      "tree": "5efc1709fccc6a59547cd50b7bf919f664a18b76",
      "parents": [
        "0fb9e129158517501e66d96f3d83531fd850b152"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:56:00 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:56:00 2024"
      },
      "message": "Add support for finding the repo root\n"
    },
    {
      "commit": "0fb9e129158517501e66d96f3d83531fd850b152",
      "tree": "f72b139d1c6ebd79c15abeba5d89f43c03885ff5",
      "parents": [
        "397591a2df6d35804c55114bdabbdc0e7fd4ef6e"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:51:34 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:51:34 2024"
      },
      "message": "update API\n"
    },
    {
      "commit": "397591a2df6d35804c55114bdabbdc0e7fd4ef6e",
      "tree": "5a39c03bb54d6ec52564444887bf936321cd2da1",
      "parents": [
        "1749e2a5df2287926efe64a8d8d99feed006e325"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:42:57 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:42:57 2024"
      },
      "message": "remove constant\n"
    },
    {
      "commit": "1749e2a5df2287926efe64a8d8d99feed006e325",
      "tree": "68b3df0e6056f39fb1d31149847fe670a8af9f76",
      "parents": [
        "30d437844ba017b3f77a73f4e0d8bcf0574258f0"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:40:13 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:40:13 2024"
      },
      "message": "oops revert\n"
    },
    {
      "commit": "30d437844ba017b3f77a73f4e0d8bcf0574258f0",
      "tree": "aa43235890496994770411c535306f07674fa39e",
      "parents": [
        "79048cbaec428bcad58d6fbc1db868357014eeeb"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:39:26 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:39:26 2024"
      },
      "message": "Use provider every time\n"
    },
    {
      "commit": "79048cbaec428bcad58d6fbc1db868357014eeeb",
      "tree": "77d8dac6193da988e624a84fc567dbb4e4e1e01c",
      "parents": [
        "6e42b4626199938b7b5ed43af4e7bcf8280ef65c",
        "6340bc5fbf8320e56e966dc0ed1b5b875b93ebf8"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Wed May 29 22:33:46 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed May 29 22:33:46 2024"
      },
      "message": "Merge pull request #2681 from square/py/next_iteration\n\nNext API iteration based on using it in Square unit tests"
    },
    {
      "commit": "6340bc5fbf8320e56e966dc0ed1b5b875b93ebf8",
      "tree": "77d8dac6193da988e624a84fc567dbb4e4e1e01c",
      "parents": [
        "6e42b4626199938b7b5ed43af4e7bcf8280ef65c"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:05:13 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Wed May 29 22:23:09 2024"
      },
      "message": "Next API iteration based on using it in Square unit tests\n"
    },
    {
      "commit": "6e42b4626199938b7b5ed43af4e7bcf8280ef65c",
      "tree": "8c130951aa312df419e41b0a20b1b3c7bbe05dc9",
      "parents": [
        "96a022fb0834b06188ea58f0cb95ab1ef8035d64"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 22:42:39 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 22:42:39 2024"
      },
      "message": "Prepare for next development iteration\n"
    },
    {
      "commit": "96a022fb0834b06188ea58f0cb95ab1ef8035d64",
      "tree": "b2e4d57271bf74c31f00c50f7b4886d670998a52",
      "parents": [
        "075663e3836a39625d096314de078c0979baded0",
        "9aff0760d8bbda78b4a787f0581b97d508aef7d6"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 21:32:29 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 21:32:29 2024"
      },
      "message": "Merge branch \u0027release_3.0-alpha-6\u0027\n\n* release_3.0-alpha-6:\n  Prepare 3.0-alpha-6 release\n"
    },
    {
      "commit": "9aff0760d8bbda78b4a787f0581b97d508aef7d6",
      "tree": "b2e4d57271bf74c31f00c50f7b4886d670998a52",
      "parents": [
        "075663e3836a39625d096314de078c0979baded0"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 21:04:55 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 21:04:55 2024"
      },
      "message": "Prepare 3.0-alpha-6 release\n"
    },
    {
      "commit": "075663e3836a39625d096314de078c0979baded0",
      "tree": "1e4a354b646e1ae89013940f6b77c6482f13fb08",
      "parents": [
        "d65afbac5393cc59ace0fc256d25391d12b0ff41",
        "78a735c67ca57d45461d510b6db64c6d9cc21aeb"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Tue May 21 21:03:42 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 21 21:03:42 2024"
      },
      "message": "Merge pull request #2679 from square/py/fix_android_growth_crash\n\nFix warmup for Android heap growth"
    },
    {
      "commit": "78a735c67ca57d45461d510b6db64c6d9cc21aeb",
      "tree": "1e4a354b646e1ae89013940f6b77c6482f13fb08",
      "parents": [
        "d65afbac5393cc59ace0fc256d25391d12b0ff41"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 18:55:29 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 20:35:49 2024"
      },
      "message": "Fix warmup for Android heap growth\n"
    },
    {
      "commit": "d65afbac5393cc59ace0fc256d25391d12b0ff41",
      "tree": "a5f27f7a498cb4bf9007293e0c3e863eb512f8b2",
      "parents": [
        "73308bdebb5d01c2d11ad00a4838cae40091553e"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 05:45:33 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 05:45:33 2024"
      },
      "message": "Prepare for next development iteration\n"
    },
    {
      "commit": "73308bdebb5d01c2d11ad00a4838cae40091553e",
      "tree": "51aecb77d83ff04825ea7f6f364576cc5a34f6f3",
      "parents": [
        "27b6f0bd28591de54ebc96663803f6e5deecdb59",
        "058b9356e246530699ee6da49915e7d5e80ff014"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 05:34:32 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 05:34:32 2024"
      },
      "message": "Merge branch \u0027release_3.0-alpha-5\u0027\n\n* release_3.0-alpha-5:\n  Prepare 3.0-alpha-5 release\n"
    },
    {
      "commit": "058b9356e246530699ee6da49915e7d5e80ff014",
      "tree": "51aecb77d83ff04825ea7f6f364576cc5a34f6f3",
      "parents": [
        "27b6f0bd28591de54ebc96663803f6e5deecdb59"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 05:22:03 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Tue May 21 05:22:03 2024"
      },
      "message": "Prepare 3.0-alpha-5 release\n"
    },
    {
      "commit": "27b6f0bd28591de54ebc96663803f6e5deecdb59",
      "tree": "c7b7940abf7d36f589832b479f0658dd6eba5ef3",
      "parents": [
        "023890bf0ea305eceb19c0f40cf523ee7016d06d",
        "cfc836034a61bf1f73f0f1e2c3cf56f4456879e8"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Tue May 21 01:23:26 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue May 21 01:23:26 2024"
      },
      "message": "Merge pull request #2676 from square/py/improve_heap_diff\n\nIterating on heap growth based on friction / feedback from trying to integrate it inside Square."
    },
    {
      "commit": "cfc836034a61bf1f73f0f1e2c3cf56f4456879e8",
      "tree": "3da787d222c44bd245125aabdc466fce152f6f12",
      "parents": [
        "88a17d4182c192cd28e3c29a1b3af218f7d32034"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 23:48:31 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 23:48:31 2024"
      },
      "message": "Add multidex to UI tests\n"
    },
    {
      "commit": "88a17d4182c192cd28e3c29a1b3af218f7d32034",
      "tree": "59879067ffb75c16b3c33384d8b999d1509e5d3b",
      "parents": [
        "90bb5e49a150dca78bc081064fdf7f7062d027af"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 23:24:17 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 23:24:17 2024"
      },
      "message": "woopsee api dump\n"
    },
    {
      "commit": "023890bf0ea305eceb19c0f40cf523ee7016d06d",
      "tree": "11abc1c97af55521faf9e19af3d6e587d2c63ab3",
      "parents": [
        "ef09e171c0e59d0d2852b824f03656c5c87261c0",
        "d0f2b67c2ae0ade9f6da89823993d7b9c72d6908"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Mon May 20 23:22:21 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 20 23:22:21 2024"
      },
      "message": "Merge pull request #2669 from mhansen/stub\n\nshark: append explanation for binder stubs to labels"
    },
    {
      "commit": "ef09e171c0e59d0d2852b824f03656c5c87261c0",
      "tree": "0cd9ef9e78ce16f889e1e4c1bb08e3e35c672d27",
      "parents": [
        "8986f340c0f6568b4630becd33eeba305717e730",
        "24be0b5ccc301b003af069cdc604f2db16b9aac8"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Mon May 20 23:21:24 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 20 23:21:24 2024"
      },
      "message": "Merge pull request #2668 from mhansen/shark-imports\n\nshark: make examples compile in different package"
    },
    {
      "commit": "8986f340c0f6568b4630becd33eeba305717e730",
      "tree": "6c05371153674cb6f3a5d69997e9c3400bff0b8a",
      "parents": [
        "74c9821b69c9a5c362782a8011e885dafe0fe346",
        "155a88396ee3d5ce65dd7438cf038297dadf2901"
      ],
      "author": {
        "name": "py - Pierre Yves Ricau",
        "email": "pyricau@users.noreply.github.com",
        "time": "Mon May 20 23:17:13 2024"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon May 20 23:17:13 2024"
      },
      "message": "Merge pull request #2670 from g-jiannan/toast-context\n\nUse activity context for Toast.makeText"
    },
    {
      "commit": "90bb5e49a150dca78bc081064fdf7f7062d027af",
      "tree": "1148cb0f134a9dbdf937f45df6d8ba8738c256ae",
      "parents": [
        "1c2eba286e195a467ac2c52bef4fb1f76623b9a2"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 22:55:06 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 22:55:06 2024"
      },
      "message": "Ignore static \u003cresolved_references\u003e on JVM\n"
    },
    {
      "commit": "1c2eba286e195a467ac2c52bef4fb1f76623b9a2",
      "tree": "8d3b223fe7f3b7c7556b7fbcf043737085e2e9a6",
      "parents": [
        "2bb6f671ddc46107147099eb2c1fdbc9bba82047"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 22:53:17 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 22:53:17 2024"
      },
      "message": "Small escape optimization\n"
    },
    {
      "commit": "2bb6f671ddc46107147099eb2c1fdbc9bba82047",
      "tree": "56bfa9678c9c2a0033da5ce2ad83653e113f961c",
      "parents": [
        "c5fd4dd94377b5eb559701296501ce44f8c3096e"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 22:16:45 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 22:16:45 2024"
      },
      "message": "Removed intermediary data structures and lower memory footprint\n"
    },
    {
      "commit": "c5fd4dd94377b5eb559701296501ce44f8c3096e",
      "tree": "eb0c0c661eea13973f0943a917ef0604cba62f03",
      "parents": [
        "19c0586732e3c66a18ef120ae300b7844e4d86c3"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 05:45:35 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 05:45:35 2024"
      },
      "message": "Inline all the things\n"
    },
    {
      "commit": "19c0586732e3c66a18ef120ae300b7844e4d86c3",
      "tree": "7ae9d79150689ad34233154a3ecaf9b1c38ce95d",
      "parents": [
        "7836ab4bbe6722cc77915380a92c6fdc0f9cd2ed"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 05:32:02 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 05:32:02 2024"
      },
      "message": "Backport JVM test to ObjectGrowthDetectorTest\n"
    },
    {
      "commit": "7836ab4bbe6722cc77915380a92c6fdc0f9cd2ed",
      "tree": "820f669a7b17bf9ddb25e04ef90d804d91e8679a",
      "parents": [
        "18050068aa3583f77f3011efad54ed6b899f389b"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 05:15:13 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 05:15:13 2024"
      },
      "message": "remove heapGraphCount\n"
    },
    {
      "commit": "18050068aa3583f77f3011efad54ed6b899f389b",
      "tree": "0654a07f30b870d48d03176ae4e63c173306a373",
      "parents": [
        "5670d75b0dcb7e38b47a52aa308966de1bc45858"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 04:46:49 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 04:46:49 2024"
      },
      "message": "Make visitedSet an androidx collection\n"
    },
    {
      "commit": "5670d75b0dcb7e38b47a52aa308966de1bc45858",
      "tree": "cc3d205e9754a4136b4bd54ac5e1e0d7bd989057",
      "parents": [
        "c56c8c4a5c277910f0b1a1620e6cf3f31e4ea4cd"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 04:27:44 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 04:27:44 2024"
      },
      "message": "API dump\n"
    },
    {
      "commit": "c56c8c4a5c277910f0b1a1620e6cf3f31e4ea4cd",
      "tree": "a3d84fb688b59fbc60bf38193d911d02a6c77d6f",
      "parents": [
        "ef81c41cb425f4c644c05c8ad3772ebc56c42eaf"
      ],
      "author": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 04:27:31 2024"
      },
      "committer": {
        "name": "Pierre-Yves Ricau",
        "email": "py@squareup.com",
        "time": "Mon May 20 04:27:31 2024"
      },
      "message": "Make Retained a value class, smoll footprint\n"
    }
  ],
  "next": "ef81c41cb425f4c644c05c8ad3772ebc56c42eaf"
}
