Skip to content

recent typelevel library updates#52

Open
anakos wants to merge 3 commits intokaizen-solutions:mainfrom
anakos:update_doobie
Open

recent typelevel library updates#52
anakos wants to merge 3 commits intokaizen-solutions:mainfrom
anakos:update_doobie

Conversation

@anakos
Copy link
Copy Markdown
Collaborator

@anakos anakos commented Feb 3, 2026

also, scala version updates

Summary by CodeRabbit

  • Chores

    • Updated Scala toolchain and build tooling to newer patch releases and upgraded build plugins.
    • Bumped several library dependency versions (Cats Effect, Doobie, FS2, FS2 Kafka, ZIO interop).
  • Refactor

    • Simplified exit/termination handling in example applications so they return the underlying run result rather than an explicit exit code.

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Feb 3, 2026

Warning

Rate limit exceeded

@anakos has exceeded the limit for the number of commits that can be reviewed per hour. Please wait 15 minutes and 23 seconds before requesting another review.

⌛ How to resolve this issue?

After the wait time has elapsed, a review can be triggered using the @coderabbitai review command as a PR comment. Alternatively, push new commits to this PR.

We recommend that you space out your commits to avoid hitting the rate limit.

🚦 How do rate limits work?

CodeRabbit enforces hourly rate limits for each developer per organization.

Our paid plans have higher rate limits than the trial, open-source and free plans. In all cases, we re-allow further reviews after a brief timeout.

Please see our FAQ for further information.

📝 Walkthrough

Walkthrough

Updates to build configuration and dependencies (Scala, sbt plugins, library versions) plus removal of trailing .exitCode calls from several ZIO example applications.

Changes

Cohort / File(s) Summary
Build files
build.sbt, project/build.properties, .github/workflows/ci.yml, project/plugins.sbt
Bump Scala versions (2.13.16→2.13.17, 3.3.6→3.3.7), update sbt from 1.11.3→1.12.0, adjust CI artifact names, and update scalafmt and bloop plugin versions.
Dependency versions
project/Versions.scala
Update library version constants: catsEffect 3.6.2→3.6.3, doobie 1.0.0-RC10→1.0.0-RC11, fs2 3.12.0→3.12.2, fs2Kafka 3.8.0→3.9.1, zioInteropCats 23.1.0.5→23.1.0.13.
Kind-projector plugin
build.sbt
Non-Scala-3 compiler plugin version for kind-projector changed 0.13.3→0.13.4.
Example apps (ZIO)
core-examples/src/main/scala/.../ExampleApp.scala, fs2-examples/src/main/scala/.../ExampleApp.scala, zio-http-examples/src/main/scala/.../ExampleClientApp.scala
Removed final .exitCode calls from ZIO pipelines, leaving underlying effect/result type (no public API changes).

Estimated code review effort

🎯 2 (Simple) | ⏱️ ~10 minutes

Possibly related PRs

Suggested reviewers

  • soujiro32167
  • calvinlfer

Poem

🐰 I hopped through versions, small and spry,

Bumped Scala, plugins, watched the old bits fly,
ExitCode waved — “I’m leaving, friend,”
Examples run simpler from end to end,
A carrot for CI, dependencies updated with a sigh.

🚥 Pre-merge checks | ✅ 3
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title 'recent typelevel library updates' accurately captures the main changes, which include updates to typelevel libraries like Cats Effect and Doobie, along with Scala versions and other dependencies.
Docstring Coverage ✅ Passed No functions found in the changed files to evaluate docstring coverage. Skipping docstring coverage check.

✏️ Tip: You can configure your own custom pre-merge checks in the settings.

✨ Finishing touches
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Post copyable unit tests in a comment

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 3

🤖 Fix all issues with AI agents
In `@build.sbt`:
- Around line 4-5: Update CI and local verification to build and run the full
test suite against both scala213 ("scala213") and scala3 ("scala3") declared in
build.sbt; search the codebase for case classes that override productPrefix or
hashCode (they can behave differently under 2.13.17) and adapt those overrides
to not rely on productPrefix, or remove custom hashCode logic, and add targeted
tests. Audit uses of scala.util.Using (search for Using.apply/manager) for code
that assumes suppressed-exception ordering and explicitly catch/control
ControlThrowable cases or avoid relying on suppression ordering by manually
adding suppressed exceptions. For Scala 3, fix interpolator usages that
implicitly call toString (replace with explicit .show/.toString or safer
formatting) and resolve implicit defaults that shadow given declarations (rename
or make givens explicit) to avoid new warnings (or adjust compiler flags in
build.sbt/ci if necessary), then re-run tests on both versions and fix any
failures.

In `@project/Versions.scala`:
- Around line 3-7: The doobie version in Versions.scala is set to a release
candidate (val doobie = "1.0.0-RC11"); mark this as an RC in the PR notes and do
not treat it as a final upgrade until validated, then run integration tests that
exercise Postgres JSON/JSONB array mappings and Scala 3 enum-derived Read/Write
instances (or any codepaths using those features) to confirm compatibility
before merging; if tests fail or you rely on those features, either pin back to
the previous stable doobie version or add targeted test coverage and a follow-up
task to revisit doobie after a final release.
- Line 23: The project sets val zioInteropCats = "23.1.0.13" but that release
requires ZIO 2.1.23 while the project currently uses ZIO 2.1.19; update
Versions.scala to fix the mismatch by either (A) bumping the ZIO version
constant (val zioVersion or whatever ZIO version symbol is defined) to "2.1.23"
and re-run the build/tests, or (B) downgrade val zioInteropCats to a prior
interop-cats release that is compatible with ZIO 2.1.19; pick one approach,
change the corresponding val in Versions.scala, and run the CI/build to verify
compatibility (also verify cats-effect compatibility as noted).

Comment on lines +4 to +5
val scala213 = "2.13.17"
val scala3 = "3.3.7"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🏁 Script executed:

cd . && find . -name "build.sbt" -type f -exec head -50 {} + | head -100

Repository: kaizen-solutions/trace4cats-zio-extras

Length of output: 1878


🌐 Web query:

Scala 2.13.17 release notes breaking changes

💡 Result:

Scala 2.13.17 (released October 6, 2025) lists two breaking changes in its release notes:

  1. Case class hashCode changes when productPrefix is overridden

    • Change: “Mix in the productPrefix hash statically in case class hashCode.”
    • Impact: the synthetic hashCode of a case class no longer calls productPrefix, so the hash code changes for case classes that override productPrefix. [1]
  2. scala.util.Using suppressed-exception ordering changed

    • Change: “Improve scala.util.Using suppression order (NonFatal suppresses ControlThrowable).”
    • Impact: when multiple exceptions occur, the ordering of which exception is rethrown vs. attached as suppressed can differ from previous versions. [1]

Sources: Scala 2.13.17 GitHub release notes [1]; Scala-lang announcement (points to GitHub notes) [2].


🌐 Web query:

Scala 3.3.7 release notes breaking changes compatibility

💡 Result:

Scala 3.3.7 (LTS) was released on October 13, 2025. It is a patch release, and the Scala team states the backports were validated to not break binary or source compatibility (tested across 1500+ projects in the Scala 3 Open Community Build). [1][3]

Breaking changes / compatibility notes

  • No intentional breaking changes (binary or source) are expected vs earlier 3.3.x releases. [1]
  • Potentially “compatibility-affecting in practice” items are mostly:
    • New/adjusted warnings (could fail builds that use -Werror / strict warning policies), e.g. warning when an interpolator uses toString, and warning when an implicit default shadows a given. [1]
    • REPL command change: :jar was implemented and :require was deprecated (so existing REPL workflows/scripts using :require may need updating). [1]

Notable changes called out in the announcement

  • Warn if interpolator uses toString [1]
  • Fix: unblock Scala 3 on Android [1]
  • REPL: implement :jar (deprecate :require) [1]
  • -Wunused/unused-import checking improvement (import qualifier/prefix matching) [1]
  • REPL: flag to quit after evaluating init script [1]
  • Warn if implicit default shadows given [1]
  • Coverage behavior made closer to Scala 2 [1]

Primary references (release notes/announcement): Scala 3.3.7 announcement and the scala3 GitHub releases page. [1][2]


Verify codebase compatibility with Scala 2.13.17 and 3.3.7 breaking changes.

Scala 2.13.17 introduces two breaking changes:

  • Case class hashCode now excludes productPrefix (affects only case classes that override productPrefix)
  • scala.util.Using suppressed-exception ordering changed (NonFatal now suppresses ControlThrowable)

Scala 3.3.7 (patch/LTS) has no breaking changes vs 3.3.x, but adds new warnings for interpolators using toString and implicit defaults shadowing given declarations—these may fail builds with -Werror.

Confirm your test suite passes against both versions and review code for these specific patterns.

🤖 Prompt for AI Agents
In `@build.sbt` around lines 4 - 5, Update CI and local verification to build and
run the full test suite against both scala213 ("scala213") and scala3 ("scala3")
declared in build.sbt; search the codebase for case classes that override
productPrefix or hashCode (they can behave differently under 2.13.17) and adapt
those overrides to not rely on productPrefix, or remove custom hashCode logic,
and add targeted tests. Audit uses of scala.util.Using (search for
Using.apply/manager) for code that assumes suppressed-exception ordering and
explicitly catch/control ControlThrowable cases or avoid relying on suppression
ordering by manually adding suppressed exceptions. For Scala 3, fix interpolator
usages that implicitly call toString (replace with explicit .show/.toString or
safer formatting) and resolve implicit defaults that shadow given declarations
(rename or make givens explicit) to avoid new warnings (or adjust compiler flags
in build.sbt/ci if necessary), then re-run tests on both versions and fix any
failures.

Comment on lines +3 to +7
val catsEffect = "3.6.3"
val doobie = "1.0.0-RC11"
val embeddedPostgres = "2.1.0"
val fs2 = "3.12.0"
val fs2Kafka = "3.8.0"
val fs2 = "3.12.2"
val fs2Kafka = "3.9.1"
Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

⚠️ Potential issue | 🟡 Minor

🧩 Analysis chain

🌐 Web query:

cats-effect 3.6.3 release notes breaking changes compatibility

💡 Result:

Cats Effect 3.6.3 — release notes / breaking changes / compatibility

  • Release notes (what changed): 3.6.3 is primarily a bugfix release. It fixes a bug introduced in 3.6.2 that could “poison” the thread pool and cause severe performance degradation; upgrading from 3.6.2 to 3.6.3 is strongly recommended. The only listed change is a spinlock fix (PR #4449). [1]
  • Breaking changes: The 3.6.3 release notes explicitly state it is fully binary compatible with every Cats Effect 3.x release and fully source-compatible within the 3.6.x line—so no intentional breaking changes are called out for 3.6.3. [1]
  • Compatibility notes:
    • Scala Native: Cats Effect 3.6.x targets Scala Native 0.4.x and therefore does not support native multithreading in this series (planned for a later minor line). [1]
    • Supported platforms (3.6.x artifacts): Scala.js 1.x and Scala Native 0.4. [2]

Sources:
[1] Cats Effect GitHub Releases — v3.6.3 notes
[2] Scala Index — cats-effect 3.6.x artifact metadata (Scala.js/Scala Native versions)


🌐 Web query:

doobie 1.0.0-RC11 release notes features stability

💡 Result:

doobie 1.0.0-RC11 (released Nov 8, 2025) — release notes / features / stability

Notable new features / changes

  • Postgres: adds Array[Json] instances (improves mapping support for Postgres JSON arrays). [1]
  • Scala 3: adds enum derivation support (plus documentation for it). [1]

Dependency / maintenance updates (highlights)

  • Updates cats-effect / cats-effect-testkit to 3.6.3. [1]
  • Updates HikariCP to 7.0.2. [1]
  • Updates PostgreSQL JDBC driver to 42.7.8. [1]
  • Updates fs2 to 3.12.2, munit to 1.2.0, circe to 0.14.15, mysql-connector-j to 9.4.0, scala-collection-compat to 2.14.0. [1]
  • H2 update to address a security vulnerability. [1]

Stability take

  • RC11 appears to be a small, targeted RC (two user-facing feature items) plus dependency/security updates, which generally suggests low behavioral churn relative to earlier RCs—but it is still a release candidate, so you should run your integration test suite, especially around:
    • Postgres JSON/JSONB array mappings
    • Scala 3 enum-derived Read/Write/Get/Put usage
    • Connection pooling behavior if you rely on HikariCP defaults [1]

Sources: doobie GitHub release notes for v1.0.0-RC11 [1]; Scala Index release metadata for 1.0.0-RC11 artifacts [2].

[1] (github.com)
[2] (index.scala-lang.org)

Citations:


🌐 Web query:

fs2 3.12.2 release notes breaking changes

💡 Result:

FS2 v3.12.2 (released Sep 4, 2025) is a bugfix/security release and its release notes do not list any breaking changes. [1], [2]

What changed in 3.12.2:

  • Includes remediation for security advisory GHSA-rrw2-px9j-qffj (TLS on JVM: upgrade recommended to 3.12.1+). [1], [3]
  • Bugfix: Backport #3591 (fix related to issue #3590; released via PR #3603). [1], [4]

Bottom line: No API/behavior-breaking changes are called out in the official v3.12.2 release notes—just a targeted backported fix plus the security remediation note. [1]

Sources
[1] FS2 GitHub Releases – v3.12.2 notes: (github.com)
[2] Scala Index – fs2-core 3.12.2 (release date): (index.scala-lang.org)
[3] GHSA-rrw2-px9j-qffj advisory (typelevel/fs2): (github.com)
[4] PR #3591 (fix) / backport referenced by release notes: (github.com)

Citations:


🌐 Web query:

fs2-kafka 3.9.1 release notes compatibility

💡 Result:

fs2-kafka 3.9.1 release notes (highlights)

Release date: 2025-10-24. [1]

What changed vs 3.9.0 → 3.9.1: mostly dependency bumps, including:

  • org.apache.kafka:kafka-clients3.9.1
  • co.fs2:fs2-core3.12.2
  • org.typelevel:cats-effect3.6.3
  • (plus build/tooling updates and Confluent Avro serializer bump in the vulcan module) [1]

Compatibility

Binary compatibility (library):

  • fs2-kafka guarantees backward binary compatibility across minor + patch versions within the same major (3.x) (milestones excluded). [2]

Scala / Cats-Effect / FS2 / Kafka client compatibility (3.9.1):

  • Scala: 2.12, 2.13, 3.3 [2]
  • FS2: 3.12.2 [2]
  • Kafka clients: 3.9.1 [2]
  • Series matrix: fs2-kafka 3.x is for cats-effect/fs2 3.x and kafka-clients 3.x. [3]

Kafka 3.9.1 note (upstream):

  • Apache Kafka 3.9.1 is a bugfix release and adds Java 23 support. [4]

Sources: GitHub release v3.9.1 [1], FS2 Kafka docs overview/compatibility table [2], Scala Index version matrix [3], Apache Kafka 3.9.1 announcement [4].


Flag doobie 1.0.0-RC11 as a release candidate — test Postgres JSON arrays and Scala 3 enums.

The non-RC upgrades are safe: cats-effect 3.6.3 and fs2 3.12.2 are bugfix releases with no breaking changes; fs2-kafka 3.9.1 is a dependency-bump release backward-compatible within the 3.x series. However, doobie 1.0.0-RC11 is a release candidate (pre-release), not a final version. While targeted and low-churn, it introduces two user-facing features (Postgres JSON array mappings and Scala 3 enum derivation) that require integration testing before merging. Run tests on Postgres JSON/JSONB array handling and Scala 3 enum-derived Read/Write instances if you use those features.

🤖 Prompt for AI Agents
In `@project/Versions.scala` around lines 3 - 7, The doobie version in
Versions.scala is set to a release candidate (val doobie = "1.0.0-RC11"); mark
this as an RC in the PR notes and do not treat it as a final upgrade until
validated, then run integration tests that exercise Postgres JSON/JSONB array
mappings and Scala 3 enum-derived Read/Write instances (or any codepaths using
those features) to confirm compatibility before merging; if tests fail or you
rely on those features, either pin back to the previous stable doobie version or
add targeted test coverage and a follow-up task to revisit doobie after a final
release.

Copy link
Copy Markdown
Collaborator

@soujiro32167 soujiro32167 left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM. I'd also bump up the tapir version to 1.13

@anakos
Copy link
Copy Markdown
Collaborator Author

anakos commented Feb 4, 2026 via email

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants