)]}'
{
  "log": [
    {
      "commit": "41fe7727fa65dc4202800ea94ec6c12e31094f39",
      "tree": "265d6aab7fefd6f734d509624cef5879c0906247",
      "parents": [
        "7f8b0d846c1b8b103f15320009ea36e9ec6cf659"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Sep 14 08:13:29 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Sep 14 08:13:29 2026 +0100"
      },
      "message": "build(deps): bump actions/setup-java from 6.0.0 to 6.0.1 (#887)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 6.0.0 to 6.0.1.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/dd06d9cba3e5552c54d9f8ea23572deb30010f7c...de7274f081f381c8f8158605e0321c36c376e2e6)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 6.0.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "7f8b0d846c1b8b103f15320009ea36e9ec6cf659",
      "tree": "09fbd7736e1f1d89505e8041f1a3893a1e7c6109",
      "parents": [
        "707e5b6a4c466e763cf89338a213b7307fae5534"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Tue Sep 08 21:14:27 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 20:14:27 2026 +0100"
      },
      "message": "Update sbt-mima-plugin to 1.2.0 (#884)"
    },
    {
      "commit": "707e5b6a4c466e763cf89338a213b7307fae5534",
      "tree": "150268e5147b816b9de5094886b3991976c43bc4",
      "parents": [
        "922fbb536b8cb3a8dcbbb1af5f1cad6786b595d2"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Tue Sep 08 21:08:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 08 20:08:16 2026 +0100"
      },
      "message": "Update org.eclipse.jgit to 7.8.0.202609011348-r (#885)"
    },
    {
      "commit": "922fbb536b8cb3a8dcbbb1af5f1cad6786b595d2",
      "tree": "001d6f7a78b18d037d12c6398ac75aa9c6da8d7d",
      "parents": [
        "c9a15638a685bfdf431b0e3de65cb93b27b108fa"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Sep 04 21:34:50 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 20:34:50 2026 +0100"
      },
      "message": "Update scala-library to 3.9.0 (#881)\n\n* Update scala-library to 3.9.0\n\n* fix\n\n* Drop stray $ from PekkoHttpServerProviderJava test object name\n\nMotivation:\nScala 3.9.0 added syntax warning E230, which flags identifiers containing\n`$` as reserved for internal compiler use. The interop-tests test sources\nare compiled with `-Werror`, so `object PekkoHttpServerProviderJava$` turns\nthat warning into a build failure.\n\nThe trailing `$` is not intentional. It is a leftover from the Akka to\nPekko rename in 7ad0b5d6; the equivalent object in the sbt scripted test\ncopy of this spec is named `PekkoHttpServerProviderJava` with no `$`.\n\nModification:\nRename the object to `PekkoHttpServerProviderJava` and update its single\nreference in `Servers.Pekko.Java`.\n\nResult:\ninterop-tests test sources compile under Scala 3.9.0 with `-Werror`.\n\nTests:\n- sbt -batch \"++3.9.0!\" Test/compile - success\n\nReferences:\nRefs #883\n\n* Keep the sbt 2.x plugin on the Scala version sbt itself is built with\n\nMotivation:\nBumping scala3Next to 3.9.0 broke the `sbt scripted tests (scala3, next)`\njob. scala3Next was doing two unrelated jobs at once: it is the newest\nScala 3 release the library is compiled and tested against, and it is also\nthe Scala version the sbt 2.x plugin is cross-built with.\n\nThe second is not ours to choose. sbt uses its own Scala compiler to\ncompile build.sbt, and every sbt 2.x release to date, up to and including\n2.0.8, depends on scala3-library_3 3.8.4. A plugin built with 3.9.0 emits\nTASTy 28.9, which that compiler cannot read, so loading any build that\nuses the plugin fails:\n\n  value autoImport is not a member of object\n  org.apache.pekko.grpc.sbt.PekkoGrpcPlugin\n    error while loading IArray$package,\n    TASTy file scala/IArray$package.tasty could not be read, failing with:\n      Forward incompatible TASTy file has version 28.9, produced by\n      Scala 3.9.0-bin-nonbootstrapped, expected stable TASTy from\n      28.0 to 28.8.\n\nModification:\nSplit the two roles apart. Add Versions.scala3ForSbtPlugin, pinned to the\nScala version sbt 2.x is built with, and use it in CrossScalaForSbtPlugin.\nscala3Next stays free to track the newest Scala 3 release.\n\nAdd a `sbt-plugin-scala3` case to resolve-scala-version.sh and point the\n`scala3` scripted matrix entry at it, so the scripted job builds the plugin\nwith a version sbt can load.\n\nThe scripted test projects still receive scala3Next through\n-Dpekko.grpc.scala3.next.version, so their generated sources are still\ncompiled with the newest Scala 3 - which is the part of that job worth\ntesting. Publishing is unaffected: `+publish` picks up the cross version\nfrom CrossScalaForSbtPlugin.\n\nResult:\nThe sbt plugin is loadable by sbt 2.x again, and scala3Next can be bumped\nindependently of sbt\u0027s release cadence.\n\nTests:\n- sbt -batch \"++3.9.0!\" Test/compile - success\n- bash .github/scripts/resolve-scala-version.sh sbt-plugin-scala3 - 3.8.4\n- bash .github/scripts/resolve-scala-version.sh next - 3.9.0\n- sbt \"sbt-plugin/scripted scala3/*\" - not run locally, relying on CI\n\nReferences:\nRefs #881\n\n---------\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e"
    },
    {
      "commit": "c9a15638a685bfdf431b0e3de65cb93b27b108fa",
      "tree": "dfd6572bac2352bf73424db95fe954865690d64f",
      "parents": [
        "022414594595ee3e71476bd0b522ea2bf108bb47"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Sep 04 19:25:46 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Sep 04 18:25:46 2026 +0100"
      },
      "message": "Update slf4j-api to 2.0.19 (#882)"
    },
    {
      "commit": "022414594595ee3e71476bd0b522ea2bf108bb47",
      "tree": "ba1ea2035f79f522738b4ea8d50a790aacaffb8e",
      "parents": [
        "9167279035f401016d2f3dbb61f234772c58addf"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Wed Sep 02 18:29:57 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 17:29:57 2026 +0100"
      },
      "message": "Update protobuf-java to 4.36.1 (#879)\n\n* Update protobuf-java to 4.36.1\n\n* more refs\n\n---------\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e"
    },
    {
      "commit": "9167279035f401016d2f3dbb61f234772c58addf",
      "tree": "937c84e9693a3bdc94166ac924f7bb63385e3f8c",
      "parents": [
        "02a70d2f064e808c2bea4916da72d6f585a661b9"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Wed Sep 02 18:29:20 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Sep 02 17:29:20 2026 +0100"
      },
      "message": "Update grpc-core, grpc-interop-testing, ... to 1.84.0 (#880)\n\n* Update grpc-core, grpc-interop-testing, ... to 1.84.0\n\n* more refs\n\n---------\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e"
    },
    {
      "commit": "02a70d2f064e808c2bea4916da72d6f585a661b9",
      "tree": "3d547ca2ca3a1cc5b55046e9fc6c0123fbe4d556",
      "parents": [
        "2629e0af13344bd82bee60114d4c0b0de8d0b5ce"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Sep 01 11:21:24 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 11:21:24 2026 +0100"
      },
      "message": "Report malformed response headers as a gRPC status (#870)\n\nMotivation:\nTwo spots in the pekko-http client turned a malformed response from the peer\ninto a raw JVM exception rather than a `StatusRuntimeException`, so a caller\nmatching on gRPC status saw something it could not handle.\n\n`Status.fromCodeValue(statusCode.toInt)` threw `NumberFormatException` for a\nserver sending `grpc-status: abc`. Building the response metadata\nbase64-decodes every `-bin` header, so a malformed one threw\n`IllegalArgumentException` - and `mapToStatusException` builds that metadata for\nevery error response, so an invalid binary header replaced the error actually\nbeing reported with an exception about itself.\n\nBoth are reachable from any peer. The netty backend rejects these at the\ntransport layer, so this was pekko-http only.\n\nModification:\n- A non-numeric `grpc-status` is reported as `INTERNAL`, quoting the offending\n  value. `parseResponseStatus` already matches on `Some(\"0\")`, so such a\n  response was on the failure path regardless; it now fails with a status.\n- Metadata construction falls back to empty metadata if a header cannot be\n  represented, so the status and message still reach the caller.\n\nResult:\nA broken or hostile peer produces a `StatusRuntimeException` like any other\nfailure, instead of an exception the caller is not expecting.\n\nTests:\n- 2 cases in `PekkoHttpClientUtilsSpec`: a non-numeric `grpc-status`, and a\n  malformed `-bin` header alongside a real error that must still be reported\n- Confirmed both guards bite: restoring `toInt` fails the first, removing the\n  metadata fallback fails the second\n- sbt \"runtime/testOnly ...PekkoHttpClientUtilsSpec\" - 8 passed\n- sbt \"runtime/mimaReportBinaryIssues\" - passed\n- sbt scalafmtAll scalafmtSbt - applied\n- sbt \"runtime/test\" - not run locally, left to CI\n\nNote: `HeaderMetadataImpl.getBinary` and `asList` still throw on a malformed\nbinary header when a user calls them directly on a successful response. That is\nleft as is - an explicit accessor call is a different contract from the error\npath, where the exception displaces an unrelated failure.\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "2629e0af13344bd82bee60114d4c0b0de8d0b5ce",
      "tree": "dba89defab2bbcb6bcbdefff57d1749751df5ad1",
      "parents": [
        "5d0a3446ad77639ea050a4828b1ae4abfad4a880"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Sep 01 11:20:59 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 11:20:59 2026 +0100"
      },
      "message": "Use FastFuture for already completed marshalling futures (#863)\n\n* Use FastFuture for completed futures.\n\nUse FastFuture.apply and FastFuture.successful/failed for trivially completed futures to optimise subsequent transforms.\nThis speeds up a lot of service invocations in existing generated code that depend on these, especially GrpcMarshalling.unmarshal on strict request entities.\n\n* Benchmark and test FastFuture completion of marshalling futures\n\nMotivation:\nThe FastFuture change is only observable as a threading/scheduling\nproperty: the returned futures are already completed, so transforms\nchained onto them run directly instead of being scheduled on an\nExecutionContext. Nothing asserted or measured that.\n\nModification:\nAdd scaladsl GrpcMarshallingSpec, which asserts that unmarshal of a\nstrict entity (both success and failure), unmarshalStream,\nGrpcExceptionHandler.from and the ServiceHandler notFound /\nunsupportedMediaType responses are already completed, and that a\ntransform chained onto each still completes when given an\nExecutionContext that throws if anything is scheduled on it.\n\nAdd GrpcMarshallingBenchmark.unmarshallStrictChained, covering the\nunmarshal-then-transform chain that generated unary handlers use, and\nScalaUnaryHandlerBenchmark.oldStyleUnaryStrictRequestProcessingFastImplementation,\na variant whose service implementation returns an already completed\nFastFuture so the whole handler chain can run directly.\n\nResult:\nThe intent of the change is pinned by tests, and the benchmarks show\nwhere the saved dispatches actually come from.\n\nTests:\n- sbt runtime/test - 139 succeeded, 0 failed\n- sbt checkCodeStyle - success\n- sbt \"benchmarks/Jmh/run -f 2 -wi 5 -i 5 ...\" - see PR body\n\nReferences:\nRefs #862\n\n---------\n\nCo-authored-by: Tim Whittington \u003ctim.whittington@indexity.io\u003e"
    },
    {
      "commit": "5d0a3446ad77639ea050a4828b1ae4abfad4a880",
      "tree": "f2e4a3d3353bb4cdc14cd3d872a3ab44cbb63bbd",
      "parents": [
        "3dd4c68219394fe2f64da86702e309063ea092e1"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Sep 01 10:10:08 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 10:10:08 2026 +0100"
      },
      "message": "Replace the resolver\u0027s assert with an IllegalArgumentException (#873)\n\nMotivation:\nThe pekko-http transport resolver checked the host it was asked to resolve\nagainst the configured `override-authority` with `assert`. Two problems:\n\n`assert` throws `AssertionError`, which is an `Error` and not an `Exception`, so\nit passes straight through a handler that catches `Exception` and is not what a\ncaller inspecting a failed connection would expect to match on.\n\n`assert` is also elided entirely under `-Xdisable-assertions`. That is the\ncalling application\u0027s compiler flag, not this project\u0027s, so the check silently\ndisappears in a build this project does not control.\n\nThe message was also just \"assertion failed\", naming neither the host nor the\nauthority it was compared against.\n\nModification:\nExtracted `checkAuthority`, which throws an `IllegalArgumentException` naming\nboth hosts and the client it belongs to. Extracting it also gives the check a\nseam a test can reach; it previously lived inside a closure passed to\n`ClientTransport.withCustomResolver`.\n\nResult:\nThe check runs regardless of the caller\u0027s compiler flags, fails with an\nexception rather than an error, and says what mismatched.\n\nTests:\n- 3 cases in `PekkoHttpClientUtilsSpec`: a matching authority, no configured\n  authority, and a mismatch asserting the failure is an `Exception` and names\n  both hosts\n- Confirmed the guard bites: restoring `assert` fails the mismatch case, since\n  `AssertionError` is not an `Exception`\n- sbt \"runtime/testOnly ...PekkoHttpClientUtilsSpec\" - 12 passed\n- sbt \"runtime/mimaReportBinaryIssues\" - passed\n- sbt scalafmtAll scalafmtSbt - applied\n- sbt \"runtime/test\" - not run locally, left to CI\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "3dd4c68219394fe2f64da86702e309063ea092e1",
      "tree": "bc28e81e26174f4005118c6da0d06da5293b3c5e",
      "parents": [
        "1d2a2f6f00d39de1a1f71976d2d8f66628d81d74"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Sep 01 10:07:48 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Sep 01 10:07:48 2026 +0100"
      },
      "message": "Do not return NotImplementedError messages to the caller (#874)\n\nMotivation:\n`defaultMapper` logged and scrubbed the message of every failure it did not\nrecognise, but two cases were different:\n\n    case e: NotImplementedError           \u003d\u003e Trailers(Status.UNIMPLEMENTED.withDescription(e.getMessage))\n    case e: UnsupportedOperationException \u003d\u003e Trailers(Status.UNIMPLEMENTED.withDescription(e.getMessage))\n\nThose messages come from whatever the service implementation threw, so an\nexception raised deep inside a handler put its text on the wire. Neither case was\nlogged either, so the detail went to the caller and nowhere else - the opposite\nof every other branch.\n\n`???` in Scala throws `NotImplementedError`, and `UnsupportedOperationException`\ncomes out of many collection and stream operations, so these are easy to hit\nwithout meaning to report anything.\n\nModification:\nBoth cases now log at warning and answer with a bare `UNIMPLEMENTED`, matching\nhow the mapper treats every other unrecognised failure, in both the scaladsl and\njavadsl handlers.\n\n`GrpcServiceException` remains the way to send a description deliberately, so the\ngenerated handlers now raise that for an unknown method rather than relying on\nthe message of a `NotImplementedError` reaching the caller. The behaviour a\nclient sees for an unknown method is unchanged.\n\nResult:\nAn accidental `???` or unsupported collection operation no longer describes\nitself to the caller, and the detail is logged where an operator can see it.\nDeliberate descriptions still work.\n\nTests:\n- 3 new cases in `GrpcExceptionHandlerSpec`: the message of each exception type\n  is withheld, and a deliberate `GrpcServiceException` description still arrives\n- The existing table-driven expectation is updated, which is the behaviour change\n- The existing end-to-end `ErrorReportingSpec` in both plugin-testers already\n  asserts a client calling an unknown method receives\n  `grpc-message: Not implemented: UnknownMethod`; both still pass, which is what\n  covers the codegen half of this\n- Confirmed the guard bites: restoring the leak fails 3 tests\n- sbt \"runtime/testOnly ...GrpcExceptionHandlerSpec\" - 29 passed\n- sbt \"plugin-tester-scala/testOnly ...ErrorReportingSpec\" - 2 passed\n- sbt \"plugin-tester-java/testOnly ...ErrorReportingSpec\" - 2 passed\n- sbt \"runtime/mimaReportBinaryIssues\" - passed\n- sbt scalafmtAll scalafmtSbt - applied\n- sbt \"runtime/test\" - not run locally, left to CI\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "1d2a2f6f00d39de1a1f71976d2d8f66628d81d74",
      "tree": "66067167e1607ec1dcc0c37b4592bb25f3e87a4d",
      "parents": [
        "66b15d92fec9b2b934acc45286cc3cdfac54384c"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Aug 31 12:52:13 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 12:52:13 2026 +0100"
      },
      "message": "Ship a complete LICENSE and NOTICE in the assembly jars (#865)\n\n* Ship a complete LICENSE and NOTICE in the assembly jars\n\nMotivation:\npekko-grpc-codegen and pekko-grpc-scalapb-protoc-plugin publish assembly jars\nand bat archives that bundle classes from 3rd party projects, so their\nMETA-INF/LICENSE and META-INF/NOTICE have to account for those projects.\nlegal/AssemblyLicense.txt and legal/AssemblyNotice.txt exist for that, but:\n\n- The codegen assembly jar and bat shipped no META-INF/LICENSE at all. The\n  merge strategy discarded META-INF/LICENSE to stop guava/failureaccess\n  colliding, and that also discarded the copy the ApacheSonatypePlugin\n  resource generator puts in the jar.\n- legal/AssemblyLicense.txt had drifted from what is actually bundled. It\n  listed org.checkerframework:checker-qual, which guava dropped in favour of\n  org.jspecify:jspecify, and jspecify was not listed anywhere.\n- The scalapb-protoc-plugin assembly bundled protobuf-java 4.35.0, pulled in\n  transitively by compilerplugin, rather than the pinned 4.36.0 that codegen\n  and runtime bundle.\n\nNothing failed the build when the legal files fell behind a dependency change.\n\nModification:\nMerge META-INF/LICENSE and META-INF/NOTICE with MergeStrategy.preferProject in\nboth assemblies, so our own files win over the ones the dependencies bring in.\n\nSwap checker-qual for jspecify in legal/AssemblyLicense.txt and drop the MIT\ntext that was only there for checker-qual.\n\nPin protobuf-java in scalapb-protoc-plugin via a new Dependencies group, the\nsame way codegen and runtime already do.\n\nAdd project/AssemblyLicenseCheck.scala with two tasks, wired into both\nassembly projects and run in CI as the checkAssemblyLicenses alias:\n\n- assemblyLicenseCheck fails when a module on the assembly classpath is not\n  named in the assembly LICENSE file, and warns about listed modules that are\n  not bundled for the Scala version being built.\n- assemblyMetaInfCheck opens the published assembly jar and bat archive and\n  fails unless each carries META-INF/LICENSE and META-INF/NOTICE matching the\n  files in legal/.\n\nResult:\nBoth assembly jars and both bat archives ship a LICENSE and NOTICE covering\nthe 3rd party classes they bundle, both bundle protobuf-java 4.36.0, and CI\nfails if a dependency change leaves the legal files behind.\n\nTests:\n- sbt checkAssemblyLicenses - passed. assemblyMetaInfCheck fails on the\n  codegen assembly before the merge strategy fix (META-INF/LICENSE is\n  missing), and assemblyLicenseCheck fails before the AssemblyLicense.txt fix\n  (org.jspecify:jspecify is not accounted for).\n- sbt scalafmtSbtCheck - passed.\n\nReferences:\nNone - assembly jar license completeness\n\n* Update AssemblyLicenseCheck.scala\n\n* Name the archive when it cannot be read as a zip\n\nMotivation:\n`assemblyMetaInfCheck` opened each archive with `new ZipFile`, which throws\n`ZipException: error in opening zip file` without naming the file, so a corrupt\nor truncated archive in CI gave no clue which one it was.\n\nModification:\nOpen the archive and its entries through `sbt.io.Using`, and report `IOException`\nwith the archive name.\n\nResult:\nA failure to read an archive names it, like the license problems reported below it.\n\nTests:\n- sbt checkAssemblyLicenses - passed for both assembly projects (jar and bat)\n\nReferences:\nRefs #865\n\n* Assert the shipped LICENSE and NOTICE still say something\n\nMotivation:\n`assemblyMetaInfCheck` only compared the archived files with the curated ones in\n`legal/`, which says the merge strategy picked our copy but not that the copy is\nstill a real LICENSE or NOTICE. An emptied or truncated curated file would ship\nand pass.\n\nModification:\nCheck the shipped bytes for the markers each file has to carry: the Apache\nLicense 2.0 heading and terms plus the 3rd party section in LICENSE, and the\nproduct name, the ASF attribution and the 3rd party section in NOTICE. Missing\nmarkers are reported alongside the existing problems for that archive.\n\nResult:\nAn assembly that ships a gutted LICENSE or NOTICE fails the check.\n\nTests:\n- sbt checkAssemblyLicenses - passed for both assembly projects (jar and bat)\n- With legal/AssemblyLicense.txt cut down to its first two lines,\n  codegen/assemblyMetaInfCheck fails: \"META-INF/LICENSE does not mention\n  \u0027TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION\u0027,\n  \u0027contain classes from 3rd party projects\u0027, \u0027Apache License Version 2.0:\u0027\"\n\nReferences:\nRefs #865"
    },
    {
      "commit": "66b15d92fec9b2b934acc45286cc3cdfac54384c",
      "tree": "40a779a948f3e4be6045337d5682924936032e8c",
      "parents": [
        "6477f539792c1a96fe799fc9b3e7abd9990d3a55"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Aug 31 08:20:01 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 31 08:20:01 2026 +0200"
      },
      "message": "build(deps): bump actions/setup-java from 5.7.0 to 6.0.0 (#876)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 5.7.0 to 6.0.0.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/b6effb05e454b25005698d916606bdc6ffcbf961...dd06d9cba3e5552c54d9f8ea23572deb30010f7c)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 6.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "6477f539792c1a96fe799fc9b3e7abd9990d3a55",
      "tree": "928aeb84b89c08797fbf5adc310a305982ae7853",
      "parents": [
        "8c11091f8a97ae1e4a26302d1dd0598f33c39bfa"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Aug 30 08:38:53 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 30 09:38:53 2026 +0200"
      },
      "message": "apply a max message len (#818)\n\n* apply a max message len\n\nMotivation:\ngRPC message size limits protect both clients and servers from decompression\nbombs and memory exhaustion. grpc-java defaults to 4 MiB but Pekko gRPC had no\nlimit, leaving it vulnerable to oversized frames and gzip decompression attacks.\n\nModification:\nProtocol layer - `GrpcFramingDecoderStage` and the strict decoder validate the\ndeclared frame length against `maxInboundMessageSize` before the payload is\nbuffered. `Codec.uncompress` gained overloads that bound the decompressed size\nand throw `RESOURCE_EXHAUSTED` when it is exceeded; the compression-bit overload\ndelegates to the size-bounded one so `Gzip` can fail fast while decompressing\nrather than after. `Gzip` checks cumulative output during streaming\ndecompression using a `Long` accumulator and a clamped initial buffer. Negative\nframe lengths are reported as `INTERNAL` on both the streaming and the strict\npath.\n\nClient side - added `max-inbound-message-size` to `pekko.grpc.client.\"*\"`\n(default 4 MiB) and `GrpcClientSettings.withMaxInboundMessageSize`. Both\nbackends honour it.\n\nServer side - added `pekko.grpc.server.max-inbound-message-size` and a new\n`GrpcServerSettings` class. Generated Scala and Java handlers resolve the\nsetting once per `partial`/`handler` call rather than per request.\n\nResult:\nBoth clients and servers reject inbound messages exceeding the configured limit\nwith `RESOURCE_EXHAUSTED`. Oversized frames are rejected from the declared\nlength before the payload is buffered, and gzip frames that inflate past the\nlimit are rejected while decompressing rather than after.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\n\n* Deprecate the unbounded Codec.uncompress overloads\n\nMotivation:\n`uncompress(bytes)` and `uncompress(compressedBitSet, bytes)` place no bound on\nthe decompressed output, so a caller that reaches for them is exposed to the\ndecompression bomb this branch otherwise closes. No production call site uses\nthem any more - the framing decoder went through the size-bounded overloads -\nbut they remain public and are the shape through which a future caller would\nreintroduce the problem.\n\nModification:\nMarked both overloads `@deprecated` in `Codec`, `Gzip` and `Identity`, pointing\nat the size-bounded replacements. The default `uncompress(bytes, max)` in\n`Codec` and `Gzip`\u0027s compression-bit overload still delegate to them, so both\ncarry `@nowarn(\"cat\u003ddeprecation\")`; the build runs with `-Xfatal-warnings`.\nDocumented on the default `uncompress(bytes, max)` that it checks after\ndecompressing and that codecs able to fail fast should override it, as `Gzip`\ndoes.\n\nResult:\nThe unbounded entry points still work for source compatibility but now warn,\nand the bounded overloads are the discoverable ones.\n\nCo-Authored-By: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e\n\n---------\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "8c11091f8a97ae1e4a26302d1dd0598f33c39bfa",
      "tree": "1f3d90a0cbc0f59292b6119d4c1a9519a0baf14b",
      "parents": [
        "f978f7e6f0c9f455c663c5f270757faa83fb0993"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sun Aug 30 08:37:39 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 30 09:37:39 2026 +0200"
      },
      "message": "Percent-decode grpc-message on the pekko-http client (#869)\n\nMotivation:\n`grpc-message` travels UTF-8 percent-encoded on the wire. The server side\nencodes it, and `Status-Message.parse` exists to decode it, but the pekko-http\nclient\u0027s `mapToStatusException` read the header value raw. A non-ASCII error\ndescription reached the caller as `%D0%BF...` rather than text. The netty\nbackend decodes it in grpc-java, so this was pekko-http only.\n\nFixing that exposed a second bug underneath. `PercentEncoding.Decoder.decode`\nconverted its input with `getBytes(US_ASCII)`, which replaces every non-ASCII\ncharacter with \u0027?\u0027. A conforming grpc-message is pure ASCII so this never bit on\nvalid input, but the protocol requires that an invalid value is neither errored\non nor thrown away, and this silently destroyed it. Only values containing a\npercent reach the slow path, which is why the existing round-trip tests missed\nit: they always encode first, so the non-ASCII is already escaped by then.\n\ngrpc-java does not have this bug. Its `parseAsciiString` takes the wire bytes\ndirectly and uses US-ASCII only for the two hex digits after a percent, which\nare ASCII by definition. The pekko port takes a String, because\n`ModeledCustomHeaderCompanion.parse` hands it one, so it needs a String-to-bytes\nstep that grpc-java does not have - and that step picked US-ASCII, following the\nname `parseAsciiString` rather than its data flow.\n\nModification:\n- `mapToStatusException` decodes the header through `PercentEncoding.Decoder`.\n- `Decoder.TransferEncoding` is UTF-8. It is byte-identical to US-ASCII for\n  conforming input, and preserves the characters of a non-conforming one.\n  `decodeSlow` already copies payload bytes through one at a time and decodes\n  once as UTF-8 at the end, so multi-byte sequences reassemble correctly.\n\nResult:\nA percent-encoded `grpc-message` reaches the caller as text on both backends,\nand a non-conforming one is no longer mangled.\n\nTests:\n- 3 cases in `PekkoHttpClientUtilsSpec`: an encoded message, a plain one that\n  must pass through untouched, and a broken `%ZZ` escape that must not be\n  thrown away\n- 1 case in `HeadersSpec` for the decoder, covering non-ASCII alongside a\n  percent - the shape the existing round-trip tests could not reach\n- Confirmed both guards bite: reverting the client-side decode fails the\n  encoded-message case, and restoring US-ASCII fails the decoder case\n- sbt \"runtime/testOnly ...PekkoHttpClientUtilsSpec ...HeadersSpec\" - 14 passed\n- sbt \"runtime/mimaReportBinaryIssues\" - passed\n- sbt scalafmtAll scalafmtSbt - applied\n- sbt \"runtime/test\" - not run locally, left to CI\n\nCo-authored-by: Claude Opus 5 (1M context) \u003cnoreply@anthropic.com\u003e"
    },
    {
      "commit": "f978f7e6f0c9f455c663c5f270757faa83fb0993",
      "tree": "7997d56dc42139af4b5e40fc5a6d9002b0f92640",
      "parents": [
        "150f0179b015be4dd4aabeca78ea9168b4dc2f10"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Sat Aug 29 17:33:47 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 29 16:33:47 2026 +0100"
      },
      "message": "Update sbt-assembly to 2.5.0 (#864)"
    },
    {
      "commit": "150f0179b015be4dd4aabeca78ea9168b4dc2f10",
      "tree": "98b62c5c5d897add84ccd2c6a25a15bec0644641",
      "parents": [
        "954a105a68c48df0891de86b78c7e4052dea5ed6"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Tue Aug 25 18:19:37 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 17:19:37 2026 +0100"
      },
      "message": "Update protobuf-java to 4.36.0 (#854)\n\n* Update protobuf-java to 4.36.0\n\n* more refs\n\n* Stop duplicate com.google.protobuf gencode shadowing protobuf-java\n\nMotivation:\nThe gen-scala-server/00-interop scripted test fails with protobuf-java 4.36.0:\n\n  IllegalArgumentException: Edition EDITION_PROTO2 is greater than the\n  maximum supported edition EDITION_UNKNOWN!\n\nThat test depends on grpc-interop-testing in the \"protobuf-src\" configuration\nand generates Java as well as Scala, so protoc also compiles the\ngoogle/protobuf/*.proto extracted from the transitive protobuf-java into\ncom.google.protobuf gencode. Those classes shadow the real protobuf-java on\nthe classpath, and the \"protobuf-src\" configuration resolves protobuf-java\nindependently of the pinned version, so the gencode came from 4.34.0 while the\nruntime was 4.36.0. 4.34.0\u0027s Edition enum has no EDITION_2026, which 4.36.0\ndeclares as its maximum edition, so the shadowing FeatureSetDefaults reported\nEDITION_UNKNOWN. With 4.35.1 the maximum was EDITION_2024, which that gencode\nknows, so the duplicate classes stayed benign.\n\nModification:\nPass the pinned protobuf-java version to scripted tests and use it for the\n\"protobuf-src\" dependency in 00-interop, so the extracted well-known-type\nprotos match the runtime. Also keep the duplicate com.google.protobuf gencode\nout of that test\u0027s compilation, as the interop-tests project already does.\nExtract the interop-tests well-known-type protos from the same pinned\nprotobuf-java rather than the older one grpc brings in.\n\nResult:\nThe gencode no longer shadows protobuf-java, and the interop scripted test\npasses on protobuf-java 4.36.0.\n\nTests:\n- sbt \"sbt-plugin / scripted gen-scala-server/00-interop\" - passed (failed\n  before this change with the error above)\n- sbt \"interop-tests / Test / compile\" - passed\n- sbt scalafmtSbtCheck - passed\n\nReferences:\nRefs #854\n\n---------\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e"
    },
    {
      "commit": "954a105a68c48df0891de86b78c7e4052dea5ed6",
      "tree": "0180f4bb205e1f911a0c784997ff6b908ead3418",
      "parents": [
        "4084ae5ee9bb9ad8904d94d43e2379e70583f14f"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Aug 25 16:18:40 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 25 16:18:40 2026 +0100"
      },
      "message": "build(deps): bump sbt/setup-sbt from 1.5.7 to 1.5.8 (#861)\n\nBumps [sbt/setup-sbt](https://github.com/sbt/setup-sbt) from 1.5.7 to 1.5.8.\n- [Release notes](https://github.com/sbt/setup-sbt/releases)\n- [Commits](https://github.com/sbt/setup-sbt/compare/8feba82adc7f01ddcf8165b86f778bdb5b82cebc...c7d2d6258b4bd0d3ec5129e6b3453199d3c79729)\n\n---\nupdated-dependencies:\n- dependency-name: sbt/setup-sbt\n  dependency-version: 1.5.8\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "4084ae5ee9bb9ad8904d94d43e2379e70583f14f",
      "tree": "4f8d68ccc53a6f7b3bd955be9ce11601fb1267d5",
      "parents": [
        "fbb7f41eb20b77d7984a355a0704fd62bbef67d7"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Aug 24 11:45:35 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 24 11:45:35 2026 +0100"
      },
      "message": "Harden and test TLS hostname verification for the pekko-http client (#857)\n\nMotivation:\nFollow-up to #820 and #830. `ConnectionContext.httpsClient(SSLContext)`,\nwhich the client used before #820, already sets both client mode and the\n`https` endpoint identification algorithm, so hostname verification was\nnever absent. What #820 changed was to move to the\n`httpsClient((host, port) \u003d\u003e ...)` overload, which pekko-http marks\n`@ApiMayChange` and documents as leaving SNI and hostname verification to\nthe caller. The secure default now depends on pekko-grpc reproducing that\nsetup correctly, and nothing tests or documents it.\n\nModification:\n- The verifying path delegates to `ConnectionContext.httpsClient(SSLContext)`\n  again, so the default rides on pekko-http\u0027s own maintained implementation.\n  The hand-built engine is confined to the `verify-hostname \u003d false` opt-out,\n  where it now also sets client mode: `Http.sslTlsStage` leaves the engine\n  entirely to the creator, so nothing sets it on the HTTP/1.1 path. Only\n  `Http2.outgoingConnection` happens to set it today, which is an internal\n  detail rather than a contract.\n- Extracted `sslContextFor`, `insecureSslEngineCreator` and `connectionContext`\n  as internal helpers so the verification contract is reachable from a test.\n- The netty backend logs a warning when `verify-hostname \u003d false` is set.\n  grpc-java\u0027s netty transport always verifies and exposes no switch, so the\n  setting was silently ignored on what is the default backend.\n- Reworded the pekko-http warning: the only readers of it are users who\n  explicitly disabled verification, so pointing at the default is clearer\n  than telling them to set what they just overrode.\n- New `HostnameVerificationSpec` performs real TLS handshakes against a local\n  server whose certificate carries a single `DNS:localhost` SAN, asserting\n  that reaching it as `127.0.0.1` fails when verification is on and succeeds\n  when it is off. The pair is a differential guard: with endpoint\n  identification unset the rejecting case passes, since the certificate is\n  otherwise valid and trusted.\n- Documented the setting, which hostname is actually checked (the authority,\n  not the discovered address), the production warning, and that it does not\n  apply to the netty backend.\n\nThe certificates under runtime/src/test/resources/certs are copied from\nplugin-tester-scala/src/main/resources/certs in this repository.\n\nResult:\nThe secure default is provided by pekko-http rather than reimplemented,\nthe opt-out no longer depends on an unrelated part of pekko-http to set\nclient mode, a silently ignored setting on the default backend is now\nreported, and the verification contract is covered by tests and docs.\n\nTests:\n- sbt \"runtime/test\" - 134 tests passed, 5 of them new\n- sbt \"runtime/mimaReportBinaryIssues\" - passed\n- sbt scalafmtCheckAll scalafmtSbtCheck - passed\n- sbt docs/paradox - passed\n- sbt headerCreateAll - applied\n- sbt \"sbt-plugin / scripted\" - Not run, left to CI\n- sbt +mimaReportBinaryIssues - Not run, single-version run passed, cross\n  version left to CI\n\nReferences:\nRefs #820, Refs #830"
    },
    {
      "commit": "fbb7f41eb20b77d7984a355a0704fd62bbef67d7",
      "tree": "46ff1edb6e2572de85cd7c3f60a87155a7ee3a65",
      "parents": [
        "85ec44b046f79b46c57a25296c48b33f8375df51"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Sun Aug 23 17:38:07 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Aug 23 16:38:07 2026 +0100"
      },
      "message": "Update scripted-plugin to 1.12.15 (#860)"
    },
    {
      "commit": "85ec44b046f79b46c57a25296c48b33f8375df51",
      "tree": "25219c4685a424e73c3f05dd0b03260a91c5312a",
      "parents": [
        "e457fd078355b17ec7a2d9af2436620c251de3d7"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sat Aug 22 12:01:39 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 22 12:01:39 2026 +0100"
      },
      "message": "Update pekkoVersion to 2.0.0-M4 (#856)\n\n* Update pekkoVersion to 2.0.0-M4\n\n* avoid deprecated method\n\n* more versions to update"
    },
    {
      "commit": "e457fd078355b17ec7a2d9af2436620c251de3d7",
      "tree": "9e657ad43a3f6faca7d285236a9ab10cc23b3ae1",
      "parents": [
        "1b3e197cd1633dbe499237ed9d95797579eb738a"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Aug 21 16:24:43 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 15:24:43 2026 +0100"
      },
      "message": "Update sbt, scripted-plugin to 1.13.0 (#855)"
    },
    {
      "commit": "1b3e197cd1633dbe499237ed9d95797579eb738a",
      "tree": "b52a730d0d62c66207309c9e3ecd4c08b56a8ac5",
      "parents": [
        "10ff8fcf4ad54791df5d97650a3d80a41bdacaa4"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Fri Aug 21 10:11:50 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 21 10:11:50 2026 +0100"
      },
      "message": "CI jobs for 1.3.x (#853)"
    },
    {
      "commit": "10ff8fcf4ad54791df5d97650a3d80a41bdacaa4",
      "tree": "bc90fbf5f0a98124b44593802f56427daf3c6f74",
      "parents": [
        "24c42730804b190b0c2f78aad0ac448abc0024e3"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Thu Aug 20 14:27:59 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 14:27:59 2026 +0100"
      },
      "message": "csvparser util for headers (#852)\n\n* csvparser util for headers\n\n* Update headers.scala"
    },
    {
      "commit": "24c42730804b190b0c2f78aad0ac448abc0024e3",
      "tree": "204aa25c7caf5644bb1c245440659292d2244cfd",
      "parents": [
        "72cbb022de2e42bb5cc672ec80d892fb2f8bb7b6"
      ],
      "author": {
        "name": "haroldb1",
        "email": "harold.bergson@pirum.com",
        "time": "Thu Aug 20 10:16:22 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Aug 20 10:16:22 2026 +0100"
      },
      "message": "Fix Codecs.negotiate() dropping supported encodings with whitespace (#850)\n\nMotivation:\ngrpc-accept-encoding headers formatted with a space after the comma\n(e.g. \"deflate, gzip\", as sent by grpc-go/grpc-python/grpcurl) were\nnever matched against supported codec names, silently downgrading\nnegotiation to Identity even when the client offered gzip.\n\nModification:\nTrim each split token in `Message-Accept-Encoding`.findIn before\ncodec-name lookup.\n\nResult:\nCodecs.negotiate now correctly picks a supported codec regardless of\nwhitespace around commas in grpc-accept-encoding.\n\nTests:\n- sbt \"runtime / testOnly org.apache.pekko.grpc.CodecsSpec\" - pass\n\nReferences:\nFixes #847"
    },
    {
      "commit": "72cbb022de2e42bb5cc672ec80d892fb2f8bb7b6",
      "tree": "0af80986aa4befbc12641265364d5aca65b0bdf5",
      "parents": [
        "23d6b2c38c9b669dadff39255cecec49b7b2bd77"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Aug 19 22:59:39 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 22:59:39 2026 +0100"
      },
      "message": "Protect 1.3.x branch (#844)"
    },
    {
      "commit": "23d6b2c38c9b669dadff39255cecec49b7b2bd77",
      "tree": "78e0d31e0d9bc78e7189b0bffdb941fbcb218e92",
      "parents": [
        "f33c583116e70dfa4c81bd30b9a0028ef381b345"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Wed Aug 19 20:13:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 19 19:13:34 2026 +0100"
      },
      "message": "Update sbt-assembly to 2.4.2 (#843)"
    },
    {
      "commit": "f33c583116e70dfa4c81bd30b9a0028ef381b345",
      "tree": "f6fb35fa15e5b230290658623777b03bea5efb87",
      "parents": [
        "f5f08e0d50adacb5e5701f7879c6f2c0c78c1b7e"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Aug 17 10:29:23 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 10:29:23 2026 +0100"
      },
      "message": "build(deps): bump sbt/setup-sbt from 1.5.6 to 1.5.7 (#841)\n\nBumps [sbt/setup-sbt](https://github.com/sbt/setup-sbt) from 1.5.6 to 1.5.7.\n- [Release notes](https://github.com/sbt/setup-sbt/releases)\n- [Commits](https://github.com/sbt/setup-sbt/compare/bfea3c5f48abd221b04a6df4798aa5eb8b6a2baf...8feba82adc7f01ddcf8165b86f778bdb5b82cebc)\n\n---\nupdated-dependencies:\n- dependency-name: sbt/setup-sbt\n  dependency-version: 1.5.7\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "f5f08e0d50adacb5e5701f7879c6f2c0c78c1b7e",
      "tree": "d892d1b2ba16980a867b1ff0dcf13021b2026491",
      "parents": [
        "cbb8dad99d40c17fd380c047064a798edfbb3b4a"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Mon Aug 17 10:28:48 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 17 10:28:48 2026 +0100"
      },
      "message": "add gzip header regression tests (#839)"
    },
    {
      "commit": "cbb8dad99d40c17fd380c047064a798edfbb3b4a",
      "tree": "5b3a3945f0d2f6fd93f41355d6b0522f49e1d4d5",
      "parents": [
        "2a35abf81b1225e474bf757aa88071e959cd00e2"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Sat Aug 15 21:55:47 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 15 20:55:47 2026 +0100"
      },
      "message": "Update logback-classic to 1.6.3 (#840)"
    },
    {
      "commit": "2a35abf81b1225e474bf757aa88071e959cd00e2",
      "tree": "da44dcfbc1cf3869873889a7a43c3159bf4e6d96",
      "parents": [
        "77978a7be1276de439edf481cf6f70b457e2327a"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Tue Aug 11 17:35:46 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 17:35:46 2026 +0200"
      },
      "message": "Update logback-classic to 1.6.2 (#836)"
    },
    {
      "commit": "77978a7be1276de439edf481cf6f70b457e2327a",
      "tree": "2150393bcfebffb136b30c30d3ffd64de0258df4",
      "parents": [
        "cbf4097173f1955ea1cb8f7b15e5955b75522b46"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Tue Aug 11 16:35:06 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 11 16:35:06 2026 +0200"
      },
      "message": "Update sbt-site-paradox to 1.8.0 (#837)"
    },
    {
      "commit": "cbf4097173f1955ea1cb8f7b15e5955b75522b46",
      "tree": "eb77ec3ae0bb7b32a4960b417a98a88d1e1aa536",
      "parents": [
        "faabc60a155d660a4ac748f2a1bf5c0ea9e3a8f9"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Aug 10 12:54:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 10 12:54:00 2026 +0800"
      },
      "message": "build(deps): bump coursier/setup-action from 3.0.0 to 3.0.2 (#835)\n\nBumps [coursier/setup-action](https://github.com/coursier/setup-action) from 3.0.0 to 3.0.2.\n- [Release notes](https://github.com/coursier/setup-action/releases)\n- [Commits](https://github.com/coursier/setup-action/compare/fd1707a76b027efdfb66ca79318b4d29b72e5a02...9b7939bf01fd1185ce2babe16135168361bf2c62)\n\n---\nupdated-dependencies:\n- dependency-name: coursier/setup-action\n  dependency-version: 3.0.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "faabc60a155d660a4ac748f2a1bf5c0ea9e3a8f9",
      "tree": "371a99414e059b42c0777a4924b522c56cd449c8",
      "parents": [
        "5d4932115c7e5f861c3ef9e02c447ad00ef9c9b3"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sat Aug 08 22:04:24 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 22:04:24 2026 +0100"
      },
      "message": "trailer frame support in GrpcProtocol appears broken (#822)\n\n* trailer frame support in GrpcProtocol appears broken\n\n* Update GrpcProtocolWebSpec.scala\n\n* support LF only splits in trailer\n\n* Update GrpcProtocolWeb.scala\n\n* Update GrpcProtocolWebSpec.scala\n\n* test issue\n\n* remove return from decodeTrailer"
    },
    {
      "commit": "5d4932115c7e5f861c3ef9e02c447ad00ef9c9b3",
      "tree": "ac74d6cb85bc1a512b3dc0242f34457109c36146",
      "parents": [
        "bcbacbb035e82f556793387d5acbda9fcbe78856"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sat Aug 08 08:37:45 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 08:37:45 2026 +0100"
      },
      "message": "apply deadline on pekko-http backend (#824)\n\n* apply deadline on pekko-http backend\n\n* Refactor applyDeadline call for clarity\n\n* Update PekkoHttpClientUtils.scala"
    },
    {
      "commit": "bcbacbb035e82f556793387d5acbda9fcbe78856",
      "tree": "c61ac6f28033565a92032a4a93213f5e6b7bb199",
      "parents": [
        "5014c835b3cb628c79aea1684f13255aa0616ab3"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Sat Aug 08 07:12:41 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Aug 08 07:12:41 2026 +0100"
      },
      "message": "tidy up close logic (#825)"
    },
    {
      "commit": "5014c835b3cb628c79aea1684f13255aa0616ab3",
      "tree": "70260e860f464ec28a03b6973e4b3441ed7dc832",
      "parents": [
        "fbd673fb6b5ad2c46e5ea44f891b96fd71360309"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Aug 07 20:22:08 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 19:22:08 2026 +0100"
      },
      "message": "Update sbt-paradox, sbt-paradox-theme to 0.11.0 (#831)"
    },
    {
      "commit": "fbd673fb6b5ad2c46e5ea44f891b96fd71360309",
      "tree": "17104139fdf6d18514869524d33c783b5594043e",
      "parents": [
        "90a561d00f9f3ee9474c9dcbe31b0571390c52d3"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Fri Aug 07 17:09:54 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 17:09:54 2026 +0100"
      },
      "message": "build(deps): bump sbt/setup-sbt from 1.5.4 to 1.5.6 (#828)\n\nBumps [sbt/setup-sbt](https://github.com/sbt/setup-sbt) from 1.5.4 to 1.5.6.\n- [Release notes](https://github.com/sbt/setup-sbt/releases)\n- [Commits](https://github.com/sbt/setup-sbt/compare/f6db8ab474efba716fc7f04441ab33714e4825af...bfea3c5f48abd221b04a6df4798aa5eb8b6a2baf)\n\n---\nupdated-dependencies:\n- dependency-name: sbt/setup-sbt\n  dependency-version: 1.5.6\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "90a561d00f9f3ee9474c9dcbe31b0571390c52d3",
      "tree": "57722b9d112f244c3b5ee7f7d99d7d0f42a7df86",
      "parents": [
        "57bfd5ed31f7b0c9fb07f4e4db6c2bd13b061107"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Aug 07 18:09:41 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 17:09:41 2026 +0100"
      },
      "message": "Update junit-jupiter-api, ... to 6.1.3 (#832)"
    },
    {
      "commit": "57bfd5ed31f7b0c9fb07f4e4db6c2bd13b061107",
      "tree": "e604b55aa469f642ffc0fc0c02752040564fc3dc",
      "parents": [
        "5ad3a6339b24e0c1ae832c9b0b905a2bcaa62d84"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Aug 07 18:09:20 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 17:09:20 2026 +0100"
      },
      "message": "Update junit-platform-launcher to 6.1.3 (#833)"
    },
    {
      "commit": "5ad3a6339b24e0c1ae832c9b0b905a2bcaa62d84",
      "tree": "e0605ea7bc7c45534d8e0ea186152f06a95838d0",
      "parents": [
        "bf041bbcd138cf58e01ab70ba6aecf103733fba4"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Aug 07 18:09:03 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Aug 07 17:09:03 2026 +0100"
      },
      "message": "Update sbt, scripted-plugin to 1.12.15 (#834)"
    },
    {
      "commit": "bf041bbcd138cf58e01ab70ba6aecf103733fba4",
      "tree": "dfe38ef1d653fde9fba1614764619de6ed90fd1d",
      "parents": [
        "af8aa19e73ca07995b6b06dce2c85895dff6f726"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Aug 05 21:14:29 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 21:14:29 2026 +0100"
      },
      "message": "Verify hostname defaulting to true (#830)\n\n* change default for verify-hostname to true\n\n* Update GrpcClientSettings.scala"
    },
    {
      "commit": "af8aa19e73ca07995b6b06dce2c85895dff6f726",
      "tree": "7f1bf8665d511c10875dff99810c6d05a9fd8c82",
      "parents": [
        "d1a17ddb27228d05c218373455659bf41f8c2f29"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Wed Aug 05 11:04:51 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Aug 05 11:04:51 2026 +0100"
      },
      "message": "add verify-hostname support (#820)"
    },
    {
      "commit": "d1a17ddb27228d05c218373455659bf41f8c2f29",
      "tree": "9c0ee46670de2a63b8b74ecd2acacd0e42562a01",
      "parents": [
        "b93130840a1f5cec9ce7b52102e2e0856d3615f2"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Aug 04 09:42:33 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 09:42:33 2026 +0100"
      },
      "message": "PekkoHttpClientUtils: division by zero guard (#819)\n\n* concurrency issue with roundRobin var\n\n* Update PekkoHttpClientUtils.scala\n\n* Update PekkoHttpClientUtils.scala\n\n* Update PekkoHttpClientUtils.scala\n\n* Update PekkoHttpClientUtils.scala"
    },
    {
      "commit": "b93130840a1f5cec9ce7b52102e2e0856d3615f2",
      "tree": "4045cbd2052b06125ecae52ab2c18887b0d688d9",
      "parents": [
        "b9523b3b171c8c677d226dc0bc2bb6fdef7c0a94"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Aug 04 09:41:44 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 09:41:44 2026 +0100"
      },
      "message": "mark headers field as volatile (#821)"
    },
    {
      "commit": "b9523b3b171c8c677d226dc0bc2bb6fdef7c0a94",
      "tree": "8ea5451b30744096cbb8aa2fc2d4c6f15898e88e",
      "parents": [
        "0b5895dad12ac1142b8b0fc1cc7e045445ea4d5b"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Aug 04 09:41:13 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Aug 04 09:41:13 2026 +0100"
      },
      "message": "try to improve the memory usage in ByteStringUtil (#826)"
    },
    {
      "commit": "0b5895dad12ac1142b8b0fc1cc7e045445ea4d5b",
      "tree": "6ee8df834522061e922499c9295f1bd7cff5a434",
      "parents": [
        "e9fae66513c08e6f0a09ae3d3597dee3308ee34e"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Mon Aug 03 19:57:11 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 18:57:11 2026 +0100"
      },
      "message": "Update sbt-java-formatter to 0.13.1 (#829)"
    },
    {
      "commit": "e9fae66513c08e6f0a09ae3d3597dee3308ee34e",
      "tree": "6338af180d50debe2edb32b92aea3a205a10cc78",
      "parents": [
        "fbefc10d7a1061b23b49252b289ac68d8cc675d7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Aug 03 08:57:12 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Aug 03 08:57:12 2026 +0100"
      },
      "message": "build(deps): bump actions/setup-java from 5.6.0 to 5.7.0 (#827)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 5.6.0 to 5.7.0.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/03ad4de0992f5dab5e18fcb136590ce7c4a0ac95...b6effb05e454b25005698d916606bdc6ffcbf961)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 5.7.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "fbefc10d7a1061b23b49252b289ac68d8cc675d7",
      "tree": "a4919ccab2d88662a52f227c6797eccf076d2325",
      "parents": [
        "0779328d3e33b73485289fed574c7cfcc1401b7f"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Thu Jul 30 17:42:58 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 30 16:42:58 2026 +0100"
      },
      "message": "Update grpc-core, grpc-interop-testing, ... to 1.83.1 (#817)\n\n* Update grpc-core, grpc-interop-testing, ... to 1.83.1\n\n* more\n\n---------\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e"
    },
    {
      "commit": "0779328d3e33b73485289fed574c7cfcc1401b7f",
      "tree": "f56e2a78fdc37a55ddd58f182d6988f717af2cb7",
      "parents": [
        "5314f7af094d245ed2669cf68f99d06762cf9486"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Wed Jul 29 22:24:49 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 29 22:24:49 2026 +0100"
      },
      "message": "build(deps): bump sbt/setup-sbt from 1.5.2 to 1.5.4 (#812)\n\nBumps [sbt/setup-sbt](https://github.com/sbt/setup-sbt) from 1.5.2 to 1.5.4.\n- [Release notes](https://github.com/sbt/setup-sbt/releases)\n- [Commits](https://github.com/sbt/setup-sbt/compare/6444f4c8111de4b9059c3975def104b03cfaa5f0...f6db8ab474efba716fc7f04441ab33714e4825af)\n\n---\nupdated-dependencies:\n- dependency-name: sbt/setup-sbt\n  dependency-version: 1.5.4\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "5314f7af094d245ed2669cf68f99d06762cf9486",
      "tree": "282ebbf2c4cb82c0592edcf0295ae99151fe3945",
      "parents": [
        "4128e7b551a8f569e505a656da0efa6eebe2a366"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Tue Jul 28 22:02:12 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 22:02:12 2026 +0100"
      },
      "message": "build(deps): bump actions/checkout from 7.0.0 to 7.0.1 (#813)\n\nBumps [actions/checkout](https://github.com/actions/checkout) from 7.0.0 to 7.0.1.\n- [Release notes](https://github.com/actions/checkout/releases)\n- [Changelog](https://github.com/actions/checkout/blob/main/CHANGELOG.md)\n- [Commits](https://github.com/actions/checkout/compare/9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0...3d3c42e5aac5ba805825da76410c181273ba90b1)\n\n---\nupdated-dependencies:\n- dependency-name: actions/checkout\n  dependency-version: 7.0.1\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "4128e7b551a8f569e505a656da0efa6eebe2a366",
      "tree": "b4844ad92d5c68a08cb42cecc61b96eb609ce5b9",
      "parents": [
        "91c93c4787b30a209eca1a37322f99a82db0e9eb"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Tue Jul 28 23:01:38 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 22:01:38 2026 +0100"
      },
      "message": "Update logback-classic to 1.6.1 (#814)"
    },
    {
      "commit": "91c93c4787b30a209eca1a37322f99a82db0e9eb",
      "tree": "62bfa29aa2c1468863b1b2b4841d377a6eb36b1d",
      "parents": [
        "c709aff916a6e5e30a66ec7fa08b4e08b7543b06"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Tue Jul 28 23:01:13 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 22:01:13 2026 +0100"
      },
      "message": "Update sbt-source-dist to 0.2.0 (#815)"
    },
    {
      "commit": "c709aff916a6e5e30a66ec7fa08b4e08b7543b06",
      "tree": "add813bbaf00f9543a8887b2fd747f305ca65fb2",
      "parents": [
        "6b5de86275c74c14a9a15a306cafe0b379f3f6a2"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Tue Jul 28 23:00:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 28 22:00:45 2026 +0100"
      },
      "message": "Update scalafmt-core to 3.11.5 (#816)"
    },
    {
      "commit": "6b5de86275c74c14a9a15a306cafe0b379f3f6a2",
      "tree": "8f1076d242bdb4e9d6a90007b566dd7acc8ef3ba",
      "parents": [
        "11ae7b1c8fe914d9362b0781b6a0976ca1b41a3c"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Sun Jul 26 20:39:45 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 26 19:39:45 2026 +0100"
      },
      "message": "Update org.eclipse.jgit to 7.7.1.202607240634-r (#811)"
    },
    {
      "commit": "11ae7b1c8fe914d9362b0781b6a0976ca1b41a3c",
      "tree": "fbc2c9f6c00cf221e41352226009b5b5440db459",
      "parents": [
        "907dfa0e52aa2c55addba974b5a8a97bda85762a"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jul 24 18:46:36 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 17:46:36 2026 +0100"
      },
      "message": "Update grpc-core, grpc-interop-testing, ... to 1.83.0 (#809)\n\n* Update grpc-core, grpc-interop-testing, ... to 1.83.0\n\n* more\n\n---------\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e"
    },
    {
      "commit": "907dfa0e52aa2c55addba974b5a8a97bda85762a",
      "tree": "b5f6a0d4c2f6ce7022ffe59ffec39574e72de8ce",
      "parents": [
        "f2781a6cc20534d19f4222fa072b2e3f06a6961f"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jul 24 17:37:16 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 16:37:16 2026 +0100"
      },
      "message": "Update sbt-assembly to 2.4.1 (#807)"
    },
    {
      "commit": "f2781a6cc20534d19f4222fa072b2e3f06a6961f",
      "tree": "417124d9a9f5691653a1781318218c8060c74947",
      "parents": [
        "100006b505650988514a836ed2dca4b6a38bc6e0"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jul 24 17:36:56 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 16:36:56 2026 +0100"
      },
      "message": "Update logback-classic to 1.6.0 (#806)"
    },
    {
      "commit": "100006b505650988514a836ed2dca4b6a38bc6e0",
      "tree": "97633f35fa95b5cf116312927464548bc6a05003",
      "parents": [
        "c39de4e34716f2307dbb009ed2457ab7c279a78e"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jul 24 17:36:11 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 24 16:36:11 2026 +0100"
      },
      "message": "Update sbt2-compat to 0.2.0 (#808)"
    },
    {
      "commit": "c39de4e34716f2307dbb009ed2457ab7c279a78e",
      "tree": "8ce11d83b416063a4a1656a2c55cbf4a8006aca1",
      "parents": [
        "cad15414ab46c1ee37841039e898432f1579dcf7"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 20:24:18 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 20:24:18 2026 +0200"
      },
      "message": "build(deps): bump sbt/setup-sbt from 1.5.0 to 1.5.2 (#803)\n\nBumps [sbt/setup-sbt](https://github.com/sbt/setup-sbt) from 1.5.0 to 1.5.2.\n- [Release notes](https://github.com/sbt/setup-sbt/releases)\n- [Commits](https://github.com/sbt/setup-sbt/compare/66fb4376e81982c7d92a4074170846fff88e2e30...6444f4c8111de4b9059c3975def104b03cfaa5f0)\n\n---\nupdated-dependencies:\n- dependency-name: sbt/setup-sbt\n  dependency-version: 1.5.2\n  dependency-type: direct:production\n  update-type: version-update:semver-patch\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "cad15414ab46c1ee37841039e898432f1579dcf7",
      "tree": "3aecc366683e3e429b692f33169f68c9f9212827",
      "parents": [
        "1f46218b65834648cab3f5e7a53a95bbb3e16b7b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 10:39:22 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:39:22 2026 +0100"
      },
      "message": "build(deps): bump actions/setup-java from 5.5.0 to 5.6.0 (#804)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 5.5.0 to 5.6.0.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/0f481fcb613427c0f801b606911222b5b6f3083a...03ad4de0992f5dab5e18fcb136590ce7c4a0ac95)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 5.6.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "1f46218b65834648cab3f5e7a53a95bbb3e16b7b",
      "tree": "03c4bf936031c8d0af29f85fb5e73630f831e6de",
      "parents": [
        "9a1bec131072979ecf18ae64f50a9b1691cab56b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 20 10:38:43 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 20 10:38:43 2026 +0100"
      },
      "message": "build(deps): bump actions/setup-go from 6.5.0 to 7.0.0 (#805)\n\nBumps [actions/setup-go](https://github.com/actions/setup-go) from 6.5.0 to 7.0.0.\n- [Release notes](https://github.com/actions/setup-go/releases)\n- [Commits](https://github.com/actions/setup-go/compare/924ae3a1cded613372ab5595356fb5720e22ba16...b7ad1dad31e06c5925ef5d2fc7ad053ef454303e)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-go\n  dependency-version: 7.0.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "9a1bec131072979ecf18ae64f50a9b1691cab56b",
      "tree": "e61f63ddcad23907ba752910f9fc110b55ff8bf6",
      "parents": [
        "f9df35a12f9794ea8265ed386e8263f43d094571"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Sat Jul 18 17:45:14 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 23:45:14 2026 +0800"
      },
      "message": "Update sbt-scalafmt to 2.6.2 (#801)"
    },
    {
      "commit": "f9df35a12f9794ea8265ed386e8263f43d094571",
      "tree": "4b1a943556753237d3f84d0d3767100b3f61e7e2",
      "parents": [
        "660b1a84153d12dabc3189eb5b878f7455633f62"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Sat Jul 18 17:38:56 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 23:38:56 2026 +0800"
      },
      "message": "Update sbt, scripted-plugin to 1.12.14 (#800)"
    },
    {
      "commit": "660b1a84153d12dabc3189eb5b878f7455633f62",
      "tree": "9735ed334262e9393f597501130953571207c540",
      "parents": [
        "0a3519b196d4b7ddf85c310bacb7a977f65ff897"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Sat Jul 18 17:38:49 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jul 18 23:38:49 2026 +0800"
      },
      "message": "Update scalafmt-core to 3.11.4 (#802)"
    },
    {
      "commit": "0a3519b196d4b7ddf85c310bacb7a977f65ff897",
      "tree": "4b59b199798b02e0a7d4ab6dcebb519a82c3698d",
      "parents": [
        "9268cd9bc29dabd0b1b13d099da404e4a7bbd123"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Fri Jul 17 22:04:47 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 22:04:47 2026 +0100"
      },
      "message": "use FastFuture.successful (#390)"
    },
    {
      "commit": "9268cd9bc29dabd0b1b13d099da404e4a7bbd123",
      "tree": "be353cf3f7f87fa662b98bc41f5ffd3124370ae4",
      "parents": [
        "1f3772fe7754290a0b522c408a237e315d51aba7"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Sat Jul 18 05:02:41 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 22:02:41 2026 +0100"
      },
      "message": "chore: disable additional Scala 3 specific syntax in scalafmt (#760)\n\nMotivation:\nEnsure consistent code style across the codebase by explicitly disabling\nScala 3 specific syntax features that could lead to inconsistent formatting.\n\nModification:\n- Add allowQuestionMarkPlaceholder \u003d false to dialectOverride\n- Add allowMatchAsExpr \u003d false to dialectOverride\n- Document Scala 3 syntax restrictions in CLAUDE.md\n\nResult:\nscalafmt now enforces restrictions on Scala 3 specific syntax including\nsignificant indentation, as import rename, * wildcard import, postfix *\nvararg splices, ? placeholder, and match as expression.\n\nTests:\nNot run - configuration only\n\nReferences:\nNone - code style configuration"
    },
    {
      "commit": "1f3772fe7754290a0b522c408a237e315d51aba7",
      "tree": "24662a05b2612e78742dbcea03636ccbb04b7312",
      "parents": [
        "d5baa2bcda72183473f45c7f5d34c06f5af78aad"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jul 17 22:58:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 17 21:58:17 2026 +0100"
      },
      "message": "Update sbt-license-report to 1.10.0 (#798)"
    },
    {
      "commit": "d5baa2bcda72183473f45c7f5d34c06f5af78aad",
      "tree": "df98c5c129c30e85e0d6431cd869552796a9d019",
      "parents": [
        "1a3072bae8f632c06655c77fc6650b1581b39ce0"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Mon Jul 13 14:14:58 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 13:14:58 2026 +0100"
      },
      "message": "Update junit-jupiter-api, ... to 6.1.2 (#792)"
    },
    {
      "commit": "1a3072bae8f632c06655c77fc6650b1581b39ce0",
      "tree": "5fbc3c5bf2dba506efefd806330cb2a70e9dfc65",
      "parents": [
        "ded945eb4b7437ee780d699e54e5665eb308ebb2"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Mon Jul 13 14:14:34 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 13:14:34 2026 +0100"
      },
      "message": "Update junit-platform-launcher to 6.1.2 (#793)"
    },
    {
      "commit": "ded945eb4b7437ee780d699e54e5665eb308ebb2",
      "tree": "775cd5a6dff0957bfeb00dfd4085b062f2cab644",
      "parents": [
        "9b5fcf87032b0d3cd7ad490c20f0f01aced5aa5f"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Mon Jul 13 14:14:07 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 13:14:07 2026 +0100"
      },
      "message": "Update scalafmt-core to 3.11.3 (#794)"
    },
    {
      "commit": "9b5fcf87032b0d3cd7ad490c20f0f01aced5aa5f",
      "tree": "8aaffb5d4730296093749e07785c8ec74bfed9d7",
      "parents": [
        "d104fa3d232e9084213a630c832f727c4845c5bd"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 13 05:38:37 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 13 05:38:37 2026 +0100"
      },
      "message": "build(deps): bump actions/setup-java from 5.4.0 to 5.5.0 (#795)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 5.4.0 to 5.5.0.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/1bcf9fb12cf4aa7d266a90ae39939e61372fe520...0f481fcb613427c0f801b606911222b5b6f3083a)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 5.5.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "d104fa3d232e9084213a630c832f727c4845c5bd",
      "tree": "57f74fb299a42c4cc3ac2119b2c1ecd70f89d4cb",
      "parents": [
        "cee26a6a930ecbd9d48881ee275736302a22216b"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jul 10 19:17:39 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 18:17:39 2026 +0100"
      },
      "message": "Update grpc-core, grpc-interop-testing, ... to 1.82.2 (#789)\n\n* Update grpc-core, grpc-interop-testing, ... to 1.82.2\n\n* more updates\n\n---------\n\nCo-authored-by: PJ Fanning \u003cpjfanning@users.noreply.github.com\u003e"
    },
    {
      "commit": "cee26a6a930ecbd9d48881ee275736302a22216b",
      "tree": "9ad67525571e3480fca77ba9fe60e6f8029902ed",
      "parents": [
        "162a667554bc9bc4d6ac6eaeadc331e13bfa38ae"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jul 10 19:00:51 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 18:00:51 2026 +0100"
      },
      "message": "Update logback-classic to 1.5.38 (#788)"
    },
    {
      "commit": "162a667554bc9bc4d6ac6eaeadc331e13bfa38ae",
      "tree": "58d026c7eadaae973b27346c18121c5495e8b7c1",
      "parents": [
        "c012e301f47d25ce26c29eafd07281031049f7bd"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jul 10 19:00:02 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 18:00:02 2026 +0100"
      },
      "message": "Update sbt-reproducible-builds to 0.35 (#790)"
    },
    {
      "commit": "c012e301f47d25ce26c29eafd07281031049f7bd",
      "tree": "be416b137696e9606c374ed95a2e7502485be577",
      "parents": [
        "ede672416bff1d06db574be9a32147570ba971bc"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jul 10 18:59:31 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 10 17:59:31 2026 +0100"
      },
      "message": "Update scalafmt-core to 3.11.2 (#791)"
    },
    {
      "commit": "ede672416bff1d06db574be9a32147570ba971bc",
      "tree": "694efa67d7c88ddd6714e170b635091d4fc986d7",
      "parents": [
        "81cc77364bfc60b01ef5b8287d5bda60f8061165"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Thu Jul 09 21:08:53 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 09 21:08:53 2026 +0800"
      },
      "message": "refactor: replace codegen reflection with method handles (#782)\n\nMotivation:\nAvoid reflective constructor, method, and Scala module invocation in gRPC code generation and plugin bridge paths while keeping generator loading compatible across Scala versions.\n\nModification:\nCache MethodHandles for logger forwarding and extra generator constructors. Use public MethodHandles for Scala singleton module access and generator bridge calls. Remove the Scala 2.12 ToolBox path in ReflectiveCodeGen and use fixed-arity invoke() call sites with explicit Object values where needed.\n\nResult:\nCodegen, Maven plugin, sbt plugin, and reflective test build generation use MethodHandles consistently while preserving public access semantics and avoiding avoidable invokeWithArguments boxing.\n\nTests:\n- JDK 17: sbt \"codegen / compile\" \"maven-plugin / compile\" \"sbt-plugin / compile\" - success\n- JDK 17: sbt \"++2.13.18!\" codegen/test \"++3.3.8!\" codegen/test - success, 2 tests per version\n- JDK 17: sbt \"++2.13.*\" \"sbt-plugin/scripted gen-scala-server/06-compatibility-plugins\" - first failed because protoc-gen-go was missing; installed protoc-gen-go v1.32.0, rerun success\n- JDK 17: sbt \"++3.8.4!\" \"sbt-plugin/scripted scala3/*\" - success, 3 scripted tests\n- JDK 17: sbt \"++2.13.*\" \"sbt-plugin/scripted gen-scala-server/06-compatibility-plugins\" \"++3.8.4!\" \"sbt-plugin/scripted scala3/03-sbt2-basic\" - success after explicit Object annotations\n- scalafmt --mode diff-ref\u003dorigin/main - success\n- scalafmt --list --mode diff-ref\u003dorigin/main - success\n- git diff --check - success\n- Qoder stdout review: /tmp/project-qoder-review.log - No must-fix findings\n\nReferences:\nNone - internal refactoring"
    },
    {
      "commit": "81cc77364bfc60b01ef5b8287d5bda60f8061165",
      "tree": "9632113f73eb96015a7540c5707ba5bdb9555d3a",
      "parents": [
        "97344e35e3b648b9767f37925a46a1bec3c463ff"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Wed Jul 08 18:21:52 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Wed Jul 08 17:21:52 2026 +0100"
      },
      "message": "Update sbt-protoc to 1.1.0-RC2 (#786)"
    },
    {
      "commit": "97344e35e3b648b9767f37925a46a1bec3c463ff",
      "tree": "98fb6fb90e9efaf4d6f064aaa894683b1620adfa",
      "parents": [
        "3729e1277d1622dba6b75232030f89d65fd8078c"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Tue Jul 07 14:34:36 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 14:34:36 2026 +0100"
      },
      "message": "Update ScalaPB compiler plugin version to 1.0.0-alpha.6 (#785)"
    },
    {
      "commit": "3729e1277d1622dba6b75232030f89d65fd8078c",
      "tree": "25018cca4c6602872c65cca5945d1ff0296a0802",
      "parents": [
        "d9714dc4184f8b4af20e8d41c8f397cf48a3e88b"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Tue Jul 07 02:11:48 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Tue Jul 07 02:11:48 2026 +0800"
      },
      "message": "fix: fix scaladoc warnings in runtime module (#776)\n\nMotivation:\nThe runtime module had 8 scaladoc warnings about unresolvable links\nfor external types and types with incorrect package prefixes.\n\nModification:\n- Replace [[io.grpc.StatusException]] with backtick-quoted code (external type)\n- Replace [[Failure]] with backtick-quoted code (scala.util.Failure external type)\n- Replace [[Chunk]] and [[LastChunk]] with backtick-quoted code (pekko-http types)\n- Replace [[pekko.japi.function.Function]] with backtick-quoted code (wrong prefix)\n- Replace [[pekko.grpc.GrpcChannel]] with backtick-quoted code (wrong prefix)\n\nResult:\nAll 8 scaladoc warnings in the runtime module are resolved.\n`sbt runtime/doc` completes with no warnings.\n\nTests:\nVerified with `sbt runtime/clean; runtime/doc` - 0 warnings."
    },
    {
      "commit": "d9714dc4184f8b4af20e8d41c8f397cf48a3e88b",
      "tree": "e8f8e969aea2e5b59e5d5941e3780bf99f830b25",
      "parents": [
        "419a983b8a93f43bded93ae19946ecd6d9040657"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Mon Jul 06 23:17:34 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 23:17:34 2026 +0800"
      },
      "message": "chore: use StandardCharsets.UTF_8 (#783)\n\nMotivation:\\nAvoid stringly-typed UTF-8 charset usage in encoding and decoding code paths.\\n\\nModification:\\nReplace UTF-8 charset string arguments with StandardCharsets.UTF_8 and normalize touched XML declarations where applicable.\\n\\nResult:\\nCharset usage is type-safe and exact lowercase \"utf-8\" string literals are removed from the touched areas."
    },
    {
      "commit": "419a983b8a93f43bded93ae19946ecd6d9040657",
      "tree": "4149e3c25128612e780bc71120323e72b47c4f96",
      "parents": [
        "09f3cebdb1bc4b73b8a7461722a24c439259f10b"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jul 06 11:54:12 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 11:54:12 2026 +0800"
      },
      "message": "Bump sbt/setup-sbt from 1.4.0 to 1.5.0 (#780)\n\nBumps [sbt/setup-sbt](https://github.com/sbt/setup-sbt) from 1.4.0 to 1.5.0.\n- [Release notes](https://github.com/sbt/setup-sbt/releases)\n- [Commits](https://github.com/sbt/setup-sbt/compare/3afe9cf056c5d139bfc46579af1192d77a2f0821...66fb4376e81982c7d92a4074170846fff88e2e30)\n\n---\nupdated-dependencies:\n- dependency-name: sbt/setup-sbt\n  dependency-version: 1.5.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "09f3cebdb1bc4b73b8a7461722a24c439259f10b",
      "tree": "cfc8b8b65aa976389e2d0934820aebcb9b9b8748",
      "parents": [
        "bbaa2df120d0cd1cc947d9d9a35a591e6a2c0270"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Mon Jul 06 05:25:02 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jul 06 05:25:02 2026 +0800"
      },
      "message": "feat: add Scala next cross-build coverage (#779)\n\nMotivation:\\nPrepare the build for the next Scala 3 LTS lane while keeping published Scala artifacts on the current 2.13.x and 3.3.x release lines.\\n\\nModification:\\nCentralize the next Scala version lookup for CI, keep published crossScalaVersions on release lanes, force the next lane only in build/test matrices, and fix Scala 3.8.4 compile, MiMa, and formatting issues.\\n\\nResult:\\n2.13.x, 3.3.8, and 3.8.4 build/test coverage can run while MiMa and publishing remain on published Scala versions."
    },
    {
      "commit": "bbaa2df120d0cd1cc947d9d9a35a591e6a2c0270",
      "tree": "89cd610dd3dad8c15ad5c79656459fd91add2269",
      "parents": [
        "ac696fada1b57ce3625831c18b91df48c93e558a"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Sun Jul 05 06:14:17 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 06:14:17 2026 +0800"
      },
      "message": "fix: fix javadoc warning in JavaTestServiceImpl.java (#775)\n\n* fix: fix javadoc warning in JavaTestServiceImpl.java\n\nMotivation:\nRunning `sbt doc` produces a javadoc warning:\n- Scala-style `[[...]]` link is not recognized by javadoc\n\nModification:\n- Replace `[[io.grpc.testing.integration.TestServiceImpl]]` with\n  `{@code io.grpc.testing.integration.TestServiceImpl}`\n\nResult:\nJavadoc warning is eliminated.\n\nTests:\nNot run - docs only\n\nReferences:\nNone\n\n* fix: fix additional javadoc warnings in Java sources\n\nMotivation:\nAdditional javadoc warnings found in Java source files:\n- Scala-style `[[...]]` links in interop test files\n- Unqualified `@throws IllegalArgumentException` in benchmark files\n\nModification:\n- JavaTestServiceImpl.java (interop-tests): Replace `[[...]]` with `{@code}`\n- PekkoGrpcJavaClientTester.java: Replace `[[...]]` with `{@code}`\n- Transport.java, ServerConfiguration.java, Configuration.java:\n  Use fully qualified `java.lang.IllegalArgumentException` in @throws\n\nResult:\nRemaining javadoc warnings in Java sources are eliminated.\n\nTests:\nNot run - docs only\n\nReferences:\nFollow-up to #775\n\n* style: apply javafmt to javadoc PR files\n\nMotivation:\nCI javafmtCheck fails on the javadoc warnings PR due to unformatted Java files.\n\nModification:\nRun sbt javafmt to auto-format all Java source files.\n\nResult:\nCI javafmtCheck should now pass."
    },
    {
      "commit": "ac696fada1b57ce3625831c18b91df48c93e558a",
      "tree": "30c534dded8979b609e25c5dc272c59a9361b7a1",
      "parents": [
        "87f0b2e1a44078f3be38d427bf34ccb56c6d3ee7"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Sun Jul 05 01:31:31 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jul 05 01:31:31 2026 +0800"
      },
      "message": "test: remove Gradle 4.0 from compatibility test (#777)\n\nMotivation:\nThe GradleCompatibilitySpecTest downloads Gradle 4.0 distribution from\nservices.gradle.org during CI, which frequently times out causing\nspurious test failures unrelated to code changes.\n\nModification:\nRemove Gradle 4.0 from the failVersions parameterized test. Gradle 5.5\nremains to verify the \"below minimum 5.6\" rejection logic. Simplify the\nassumeGradleVersionCanRunOnCurrentJava guard that had a special case for 4.0.\n\nResult:\nMore reliable CI with no loss of test coverage for the minimum version check."
    },
    {
      "commit": "87f0b2e1a44078f3be38d427bf34ccb56c6d3ee7",
      "tree": "1a3b636d4017d90992decabf190ad053bba6e233",
      "parents": [
        "e9342f67355b662dad65fa18afc391b435e71033"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Fri Jul 03 22:34:53 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 22:34:53 2026 +0100"
      },
      "message": "Update dependencies in build.gradle (#767)\n\n* Update dependencies in build.gradle\n\n* Downgrade protobuf-gradle-plugin version to 0.9.6\n\n* upgrade"
    },
    {
      "commit": "e9342f67355b662dad65fa18afc391b435e71033",
      "tree": "8d3cc4e9f1d98a39fdbbddda29c7bfe11f14dd85",
      "parents": [
        "f3a13c76df59e9f520740f1f722e2b6cb50ef6c3"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Fri Jul 03 22:34:37 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 22:34:37 2026 +0100"
      },
      "message": "upgrade maven plugins (#769)"
    },
    {
      "commit": "f3a13c76df59e9f520740f1f722e2b6cb50ef6c3",
      "tree": "6a3d702034f77772f114a494a57de21fece59364",
      "parents": [
        "bd2ec65d8c3814d361352ca70d20785984dd6962"
      ],
      "author": {
        "name": "Arnout Engelen",
        "email": "arnout@bzzt.net",
        "time": "Fri Jul 03 18:39:26 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 18:39:26 2026 +0200"
      },
      "message": "sbt-reproducible-builds: update to 0.33 (#774)"
    },
    {
      "commit": "bd2ec65d8c3814d361352ca70d20785984dd6962",
      "tree": "23abda1b45f89a6a90013d2e6032c920d2c3ac06",
      "parents": [
        "641d969ecbd468e223749f9645bd81c5c65bfe82"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Fri Jul 03 20:41:46 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 20:41:46 2026 +0800"
      },
      "message": "Generate Scala 3-friendly gRPC sources (#770)\n\nMotivation:\nScala 3 generated sources still used Scala 2 implicit syntax when scala3_sources was enabled, and Gradle users had no direct scala3Sources option.\n\nModification:\nGenerate using/given syntax and Scala 3 wildcard imports from the Scala templates when scala3_sources is enabled. Add Gradle scala3Sources wiring for pekkoGrpc and scalapb, cover Maven generator setting parsing, and document the Gradle and Maven configuration. Use a VarHandle-based Gradle unit-test helper instead of reflective Method#setAccessible access.\n\nResult:\nGenerated Scala sources can opt into Scala 3 syntax consistently across sbt, Gradle, and Maven configuration paths.\n\nTests:\n- sbt \"sbt-plugin/scripted scala3/02-scala3-sourcegen\" / environment failed before publishing local Scala 3 runtime: missing org.apache.pekko:pekko-grpc-runtime_3 SNAPSHOT\n- sbt \"codegen / Compile / compile\" / passed\n- sbt \"maven-plugin / Test / compile\" / passed\n- sbt \"maven-plugin / Test / testOnly org.apache.pekko.grpc.maven.ProtocSpec\" / passed\n- cd gradle-plugin \u0026\u0026 ./gradlew test --tests unit.ApplySpecTest.shouldExposeScala3SourcesOption --tests unit.ApplySpecTest.shouldPassScala3SourcesToScalaGenerators / passed\n- cd gradle-plugin \u0026\u0026 ./gradlew test --tests unit.ApplySpecTest.shouldPassScala3SourcesToScalaGenerators / environment failed once while sbt javafmtCheckAll was running concurrently: sbt boot socket Address already in use\n- cd gradle-plugin \u0026\u0026 ./gradlew test --tests unit.ApplySpecTest.shouldPassScala3SourcesToScalaGenerators / passed after replacing reflection with VarHandle\n- sbt \"++ 3.3.8 runtime/publishLocal\" \"sbt-plugin/scripted scala3/02-scala3-sourcegen\" / passed\n- sbt docs/paradox / passed\n- sbt headerCreateAll / passed\n- sbt +headerCheckAll / passed\n- sbt checkCodeStyle / passed\n- scalafmt --mode diff-ref\u003dorigin/main / passed\n- scalafmt --list --mode diff-ref\u003dorigin/main / passed\n- JDK 17 sbt javafmtAll / passed\n- JDK 17 sbt javafmtCheckAll / passed\n- cd gradle-plugin \u0026\u0026 ./gradlew test / environment failed on Java 25 because Gradle 7.6.4 cannot process class file major version 69\n- JDK 17 cd gradle-plugin \u0026\u0026 ./gradlew test / passed with pekkoGrpcTest.baselineVersion\u003d2.0.0-M2-43-6b2d34c7-20260703-0040-SNAPSHOT\n- git diff --check / passed\n\nReferences:\nFixes #766"
    },
    {
      "commit": "641d969ecbd468e223749f9645bd81c5c65bfe82",
      "tree": "ec0f08af2358be10f323790e7f848823a323b241",
      "parents": [
        "fac9b2bad9f8a9d7b0f0539272ad57a3d055b7b6"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Fri Jul 03 11:13:00 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 11:13:00 2026 +0800"
      },
      "message": "Remove private[this] from Maven plugin (#771)\n\nMotivation:\nAvoid using private[this] in Scala sources.\n\nModification:\nReplace the remaining Maven plugin private[this] method modifiers with ordinary private modifiers.\n\nResult:\nThe repository no longer contains private[this] usages.\n\nTests:\n- rg -n \"private\\[this\\]\" . / no matches\n- scalafmt --mode diff-ref\u003dorigin/main / passed\n- scalafmt --list --mode diff-ref\u003dorigin/main / passed\n- sbt \"maven-plugin / Compile / compile\" / passed\n- git diff --check / passed\n\nReferences:\nNone - cleanup requested separately from #766"
    },
    {
      "commit": "fac9b2bad9f8a9d7b0f0539272ad57a3d055b7b6",
      "tree": "3f1df7f3b9ed171f37f73f325b1d3fed73be7a05",
      "parents": [
        "6b2d34c7f98885259253395802e36123b8eeaab4"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Fri Jul 03 11:12:14 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jul 03 11:12:14 2026 +0800"
      },
      "message": "fix: pass all protoPaths as -I import params to protoc in Maven plugin (#773)\n\nMotivation:\nWhen using Maven, only the current protoDir was passed as -I to protoc.\nThis prevented proto files from importing definitions in other configured\nprotoPaths (e.g. unpacked artifact dependencies). sbt and Gradle already\nsupported this use case.\n\nModification:\nExtract normalize helper and normalizedProtoPaths lazy val. Remove\nprotoDir parameter from executeProtoc and instead pass all\nnormalizedProtoPaths as -I include paths. Update Maven docs to document\nthe artifact dependency workflow.\n\nResult:\nAll configured protoPaths are now passed as -I to protoc, enabling proto\nimports from artifact dependencies in Maven builds.\n\nTests:\nsbt \"maven-plugin / compile\" — success\n\nReferences:\nFixes akka/akka-grpc#1300, Fixes akka/akka-grpc#686, Refs akka/akka-grpc#1768"
    },
    {
      "commit": "6b2d34c7f98885259253395802e36123b8eeaab4",
      "tree": "296e4190b12c66b46caf4b5c6d8b8c8254fc5d7f",
      "parents": [
        "79af633998939b75c65d329d35c2bfc0b0842857"
      ],
      "author": {
        "name": "PJ Fanning",
        "email": "pjfanning@users.noreply.github.com",
        "time": "Thu Jul 02 14:30:33 2026 +0100"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Thu Jul 02 14:30:33 2026 +0100"
      },
      "message": "scala 3.8.4 build (#768)"
    },
    {
      "commit": "79af633998939b75c65d329d35c2bfc0b0842857",
      "tree": "0c87009b1f4f47408ce114141bff400fb48348d6",
      "parents": [
        "ad11f97dc09809dd6e2073acd44f2a077a4222b6"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 29 12:26:45 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 12:26:45 2026 +0800"
      },
      "message": "Bump actions/setup-go from 6.4.0 to 6.5.0 (#763)\n\nBumps [actions/setup-go](https://github.com/actions/setup-go) from 6.4.0 to 6.5.0.\n- [Release notes](https://github.com/actions/setup-go/releases)\n- [Commits](https://github.com/actions/setup-go/compare/4a3601121dd01d1626a1e23e37211e3254c1c06c...924ae3a1cded613372ab5595356fb5720e22ba16)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-go\n  dependency-version: 6.5.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "ad11f97dc09809dd6e2073acd44f2a077a4222b6",
      "tree": "4c1ce573ba90b7e111ab5425cae85dbee3591421",
      "parents": [
        "28c24e659509ffd204212121b3321e3af9d4ea2d"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 29 12:26:20 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 12:26:20 2026 +0800"
      },
      "message": "Bump actions/cache from 5.0.5 to 6.1.0 (#764)\n\nBumps [actions/cache](https://github.com/actions/cache) from 5.0.5 to 6.1.0.\n- [Release notes](https://github.com/actions/cache/releases)\n- [Changelog](https://github.com/actions/cache/blob/main/RELEASES.md)\n- [Commits](https://github.com/actions/cache/compare/27d5ce7f107fe9357f9df03efb73ab90386fccae...55cc8345863c7cc4c66a329aec7e433d2d1c52a9)\n\n---\nupdated-dependencies:\n- dependency-name: actions/cache\n  dependency-version: 6.1.0\n  dependency-type: direct:production\n  update-type: version-update:semver-major\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "28c24e659509ffd204212121b3321e3af9d4ea2d",
      "tree": "72920a5bb914986c13d06fb0defc3cee904a3fca",
      "parents": [
        "db93b5803becd64ab4ecfde8addc1984a6d49386"
      ],
      "author": {
        "name": "dependabot[bot]",
        "email": "49699333+dependabot[bot]@users.noreply.github.com",
        "time": "Mon Jun 29 12:26:01 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Mon Jun 29 12:26:01 2026 +0800"
      },
      "message": "Bump actions/setup-java from 5.3.0 to 5.4.0 (#765)\n\nBumps [actions/setup-java](https://github.com/actions/setup-java) from 5.3.0 to 5.4.0.\n- [Release notes](https://github.com/actions/setup-java/releases)\n- [Commits](https://github.com/actions/setup-java/compare/ad2b38190b15e4d6bdf0c97fb4fca8412226d287...1bcf9fb12cf4aa7d266a90ae39939e61372fe520)\n\n---\nupdated-dependencies:\n- dependency-name: actions/setup-java\n  dependency-version: 5.4.0\n  dependency-type: direct:production\n  update-type: version-update:semver-minor\n...\n\nSigned-off-by: dependabot[bot] \u003csupport@github.com\u003e\nCo-authored-by: dependabot[bot] \u003c49699333+dependabot[bot]@users.noreply.github.com\u003e"
    },
    {
      "commit": "db93b5803becd64ab4ecfde8addc1984a6d49386",
      "tree": "fbcb3999d241569e883cd9db805184cee1e0e4dd",
      "parents": [
        "2005fcb3e94d0e097922e4db05db0c99f62305d2"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Sun Jun 28 18:37:12 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 28 17:37:12 2026 +0100"
      },
      "message": "Update junit-jupiter-api, ... to 6.1.1 (#761)"
    },
    {
      "commit": "2005fcb3e94d0e097922e4db05db0c99f62305d2",
      "tree": "da06180c035e663d75a2185ebd3547e72a99ed96",
      "parents": [
        "51736716fa526902e358b308ef03334e2346feac"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Sun Jun 28 18:35:17 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sun Jun 28 17:35:17 2026 +0100"
      },
      "message": "Update junit-platform-launcher to 6.1.1 (#762)"
    },
    {
      "commit": "51736716fa526902e358b308ef03334e2346feac",
      "tree": "3a688f72165110dd7304bcb944defd3d2ca0a47f",
      "parents": [
        "1ad39c29d3edcc88938a1c85f25443362ee09394"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Sat Jun 27 21:50:51 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 27 21:50:51 2026 +0800"
      },
      "message": "refactor: migrate JUnit 4 to JUnit 6.1.0 (#758)\n\nMotivation:\nJUnit 4 is end-of-life. JUnit 6 unifies version numbering across\nPlatform, Jupiter, and Vintage components.\n\nModification:\n- Add sbt-jupiter-interface plugin and JupiterKeys overrides for\n  JUnit Jupiter and Platform 6.1.0\n- Migrate test files (Java, Scala, Groovy) from JUnit 4 to Jupiter:\n  * Java: @Test, @Before/@After -\u003e @BeforeEach/@AfterEach,\n    @Ignore -\u003e @Disabled, Assert.xxx -\u003e Assertions.xxx\n    (message param moves from first to last)\n  * Java: Remove `extends JUnitSuite` and @RunWith(JUnit4.class)\n  * Scala: Remove @RunWith(classOf[JUnitRunner]) from ScalaTest specs\n    where discovery does not depend on the JUnit 4 bridge\n  * Scala: org.junit.Assert._ -\u003e org.junit.jupiter.api.Assertions._\n  * Groovy: Spock specs converted to JUnit Jupiter Java tests\n    (@Unroll+where -\u003e @ParameterizedTest+@MethodSource,\n    cleanup() -\u003e @AfterEach, @TempDir replaced with manual\n    Files.createTempDirectory management)\n- Replace scalatestplus-junit with Jupiter test dependencies in\n  Dependencies.scala (keep scalaTestPlusJunit for plugin-tester-scala\n  where Gradle relies on the JUnit 4 runner for ScalaTest discovery)\n- Update Gradle build files to use JUnit Jupiter and useJUnitPlatform()\n- Convert gradle-plugin Spock/Groovy tests to JUnit Jupiter Java tests\n  to avoid Groovy version conflicts with Gradle\u0027s bundled Groovy\n- Update benchmark-java standalone build to use JUnit Jupiter 6.1.0\n- Update scripted test build and PekkoGrpcClientTester to use\n  Jupiter assertions\n- Configure explicit ScalaFutures PatienceConfig in Scala 3 scripted\n  greeter specs and use brace syntax for scalafmt compatibility\n- Pin Gradle plugin tests to JUnit Jupiter 5.14.1 and add explicit\n  junit-platform-launcher:1.14.1 for Spock 2.4 compatibility\n  (main project tests use JUnit 6)\n\nResult:\nAll tests run on JUnit 6.1.0 (Jupiter). JUnit 4 is no longer a test\ndependency in the main project.\n\nTests:\nNot run here - each constituent change was validated in its own\ncommit; full validation to follow after rebase.\n\nReferences:\nRefs #759 (Gradle wrapper 8.14.5 upgrade, now on main)\nRefs #762 (scalafmt disable Scala 3 syntax)"
    },
    {
      "commit": "1ad39c29d3edcc88938a1c85f25443362ee09394",
      "tree": "69004d709069d1d2f6b1441206d97c6bf8e570b1",
      "parents": [
        "9c1d9e875f9b618e3866179c455be4bb43ab518c"
      ],
      "author": {
        "name": "He-Pin(kerr)",
        "email": "hepin1989@gmail.com",
        "time": "Sat Jun 27 19:31:39 2026 +0800"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Sat Jun 27 19:31:39 2026 +0800"
      },
      "message": "Upgrade Gradle wrapper from 7.6.4 to 8.14.5 (#759)\n\n* chore: upgrade Gradle wrapper from 7.6.4 to 8.12\n\nMotivation:\nGradle 7.6.4 bundles Groovy 3.0.13 which has a GroovyBugError when\nTestKit runs in-process (withDebug(true)) on JDK 17, causing\nNoClassDefFoundError for org.codehaus.groovy.vmplugin.v7.Java7.\nThis blocks all gradle-plugin tests in CI.\n\nModification:\nUpgrade Gradle wrapper from 7.6.4 to 8.12 in all three Gradle\nprojects: gradle-plugin, plugin-tester-java, plugin-tester-scala.\nUpdated gradle-wrapper.properties and gradlew scripts.\n\nResult:\nGradle 8.12 bundles a compatible Groovy version, resolving the\nin-process TestKit initialization failure on JDK 17.\n\nTests:\ncd gradle-plugin \u0026\u0026 ./gradlew clean test\n\nReferences:\nNone - infrastructure upgrade\n\n* chore: use Gradle 8.14.5 instead of 8.12\n\nUse the latest patch version in the 8.x line for best JDK\ncompatibility (supports up to JDK 24) while avoiding Gradle 9.x\nbreaking API changes.\n\n* fix: restore gradlew scripts with wrapper jar download fallback\n\nThe gradlew scripts on main include a curl-based fallback to download\ngradle-wrapper.jar when it\u0027s missing (the jar is in .gitignore).\nRunning ./gradlew wrapper replaced them with standard scripts lacking\nthis mechanism, causing CI failures.\n\n* fix: wire Gradle license resources through processResources\n\nMotivation:\nGradle 8.14.5 fails the Gradle test CI job because compileTestGroovy sees files written by copyLicenseToBuildResources in build/resources/main without a declared task dependency.\n\nModification:\nMove the Gradle plugin LICENSE, NOTICE, and DISCLAIMER resource copy into processResources and remove the separate Copy task and jar dependency.\n\nResult:\nGradle owns the resource output directory, so test compilation and publishing no longer trip implicit dependency validation.\n\nTests:\n- export JAVA_HOME\u003d/Users/hepin/Library/Java/JavaVirtualMachines/azul-17.0.17/Contents/Home; cd gradle-plugin \u0026\u0026 ./gradlew clean test publishToMavenLocal --console\u003dplain --stacktrace: passed\n- export JAVA_HOME\u003d/Users/hepin/Library/Java/JavaVirtualMachines/azul-17.0.17/Contents/Home; sbt codegen/publishM2 scalapb-protoc-plugin/publishM2 +runtime/publishM2: passed\n- git diff --check: passed\n\nReferences:\nRefs #759\n\n* fix: relax Scala 3 scripted future patience\n\nMotivation:\nCI exposed a timing-sensitive Scala 3 scripted test failure when server binding took longer than ScalaTest futureValue default timeout.\n\nModification:\nSet an explicit ScalaFutures PatienceConfig in both Scala 3 scripted greeter specs and remove the unused patience import.\n\nResult:\nThe Scala 3 scripted examples tolerate normal CI startup latency.\n\nTests:\n- scalafmt sbt-plugin/src/sbt-test/scala3/01-basic-client-server/src/test/scala/example/myapp/helloworld/GreeterServiceSpec.scala sbt-plugin/src/sbt-test/scala3/02-scala3-sourcegen/src/test/scala/example/myapp/helloworld/GreeterServiceSpec.scala - failed; current scalafmt dialect rejected existing Scala 3 significant-indentation syntax at the class declaration\n- JDK 17: sbt ++3.3.* \"sbt-plugin/scripted scala3/01-basic-client-server\" - passed\n- JDK 17: sbt ++3.3.* \"sbt-plugin/scripted scala3/*\" - passed\n- git diff --check - passed\n\nReferences:\nRefs #759\n\n* fix: make Scala 3 scripted specs scalafmt-compatible\n\nMotivation:\nThe native scalafmt PR check formats changed files with --mode diff-ref\u003dorigin/main and the existing Scala 3 scripted test syntax failed to parse under the repository scalafmt configuration.\n\nModification:\nUse brace syntax in the two changed Scala 3 scripted greeter specs while keeping the explicit ScalaFutures patience configuration.\n\nResult:\nThe native scalafmt check can parse the changed scripted specs and the Scala 3 scripted tests still pass.\n\nTests:\n- scalafmt --mode diff-ref\u003dorigin/main - passed\n- scalafmt --list --mode diff-ref\u003dorigin/main - passed\n- JDK 17: sbt ++3.3.* \"sbt-plugin/scripted scala3/*\" - passed\n- git diff --check - passed\n\nReferences:\nRefs #759"
    },
    {
      "commit": "9c1d9e875f9b618e3866179c455be4bb43ab518c",
      "tree": "91a231fba9e9650d9800e2d15b027f230d7012fc",
      "parents": [
        "58e28a512f88d7fbac3da74d6f25ee02d0e74175"
      ],
      "author": {
        "name": "Scala Steward",
        "email": "43047562+scala-steward@users.noreply.github.com",
        "time": "Fri Jun 26 17:43:46 2026 +0200"
      },
      "committer": {
        "name": "GitHub",
        "email": "noreply@github.com",
        "time": "Fri Jun 26 16:43:46 2026 +0100"
      },
      "message": "Update logback-classic to 1.5.37 (#757)"
    }
  ],
  "next": "58e28a512f88d7fbac3da74d6f25ee02d0e74175"
}
