Skip to content

Conversation

@jacob-derynk
Copy link
Contributor

@jacob-derynk jacob-derynk commented Jun 24, 2025

  • Updated various dependencies to their latest versions.
  • Enabled Dokka V2 plugin mode.
  • Updated Dokka configuration to use the new HTML plugin configuration DSL.
  • Replaced Icons.Filled.ArrowBack with Icons.AutoMirrored.Filled.ArrowBack.

Summary by CodeRabbit

  • Style

    • Updated the app’s back navigation icon to use an auto-mirrored variant for improved mirroring and visual consistency.
  • Chores

    • Upgraded many dependencies and build plugins for stability, compatibility, and tooling updates.
    • Removed the documentation-generation plugin and its related configuration from the build setup.

- Updated various dependencies to their latest versions.
- Enabled Dokka V2 plugin mode.
- Updated Dokka configuration to use the new HTML plugin configuration DSL.
- Replaced `Icons.Filled.ArrowBack` with `Icons.AutoMirrored.Filled.ArrowBack`.
@jacob-derynk jacob-derynk self-assigned this Jun 24, 2025
@coderabbitai
Copy link

coderabbitai bot commented Jun 24, 2025

Walkthrough

The PR changes the icon import and usage in ThirdScreenUi from Icons.Filled.ArrowBack to Icons.AutoMirrored.Filled.ArrowBack. The Gradle version catalog (gradle/libs.versions.toml) was extensively updated with many dependency and plugin version bumps, some removals (including Dokka entries) and bundle adjustments. The Dokka plugin application and its Dokka task configuration were removed from shared/feature/build.gradle.kts. No public API signatures or runtime control-flow logic were modified.

Sequence Diagram(s)

sequenceDiagram
    participant User
    participant ThirdScreenUi
    participant Icons

    User->>ThirdScreenUi: Open screen
    Note right of ThirdScreenUi #e6f7ff: Top app bar requests nav icon
    ThirdScreenUi->>Icons: Request AutoMirrored.Filled.ArrowBack
    Icons-->>ThirdScreenUi: Return auto-mirrored arrow icon
    ThirdScreenUi-->>User: Render top app bar with returned icon
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Tip

🔌 Remote MCP (Model Context Protocol) integration is now available!

Pro plan users can now connect to remote MCP servers from the Integrations page. Connect with popular remote MCPs such as Notion and Linear to add more context to your reviews and chats.

✨ Finishing Touches
🧪 Generate unit tests
  • Create PR with unit tests
  • Post copyable unit tests in a comment
  • Commit unit tests in branch housekeep/bump-dependencies

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
🪧 Tips

Chat

There are 3 ways to chat with CodeRabbit:

  • Review comments: Directly reply to a review comment made by CodeRabbit. Example:
    • I pushed a fix in commit <commit_id>, please review it.
    • Open a follow-up GitHub issue for this discussion.
  • Files and specific lines of code (under the "Files changed" tab): Tag @coderabbit in a new review comment at the desired location with your query.
  • PR comments: Tag @coderabbit in a new PR comment to ask questions about the PR branch. For the best results, please provide a very specific query, as very limited context is provided in this mode. Examples:
    • @coderabbit gather interesting stats about this repository and render them as a table. Additionally, render a pie chart showing the language distribution in the codebase.
    • @coderabbit read the files in the src/scheduler package and generate a class diagram using mermaid and a README in the markdown format.

Support

Need help? Create a ticket on our support page for assistance with any issues or questions.

CodeRabbit Commands (Invoked using PR/Issue comments)

Type @coderabbit help to get the list of available commands.

Other keywords and placeholders

  • Add @coderabbit ignore or @coderabbitai ignore anywhere in the PR description to prevent this PR from being reviewed.
  • Add @coderabbit summary or @coderabbitai summary to generate the high-level summary at a specific location in the PR description.
  • Add @coderabbit or @coderabbitai anywhere in the PR title to generate the title automatically.

CodeRabbit Configuration File (.coderabbit.yaml)

  • You can programmatically configure CodeRabbit by adding a .coderabbit.yaml file to the root of your repository.
  • Please see the configuration documentation for more information.
  • If your editor has YAML language server enabled, you can add the path at the top of this file to enable auto-completion and validation: # yaml-language-server: $schema=https://coderabbit.ai/integrations/schema.v2.json

Status, Documentation and Community

  • Visit our Status Page to check the current availability of CodeRabbit.
  • Visit our Documentation for detailed information on how to use CodeRabbit.
  • Join our Discord Community to get help, request features, and share feedback.
  • Follow us on X/Twitter for updates and announcements.

Copy link

@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: 2

🧹 Nitpick comments (2)
androidApp/src/main/kotlin/app/futured/kmptemplate/android/ui/screen/ThirdScreenUi.kt (1)

12-12: Remove the now-unused import.

Because the code still references the icon via Icons.AutoMirrored.Filled.ArrowBack, the explicit import of ArrowBack is never used and will trigger an “unused import” warning.
Either drop this import line or switch the call site to the short form Icon(ArrowBack, …).

-import androidx.compose.material.icons.automirrored.filled.ArrowBack
shared/feature/build.gradle.kts (1)

88-97: Relative paths may break when project layout changes.

layout.projectDirectory.dir("../../doc/documentation/html") and the stylesheet path assume the module will always live two levels below the repo root.
If the module is moved or renamed, Dokka will silently generate into a non-existent folder.

Consider anchoring the output to rootProject.layout.projectDirectory (or a Gradle property) instead of string-based ../...

-    dokkaPublications.html {
-        outputDirectory.set(layout.projectDirectory.dir("../../doc/documentation/html"))
-    }
+    dokkaPublications.html {
+        outputDirectory.set(rootProject.layout.projectDirectory.dir("doc/documentation/html"))
+    }
📜 Review details

Configuration used: CodeRabbit UI
Review profile: CHILL
Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 799040c and 92beddf.

📒 Files selected for processing (4)
  • androidApp/src/main/kotlin/app/futured/kmptemplate/android/ui/screen/ThirdScreenUi.kt (2 hunks)
  • gradle.properties (1 hunks)
  • gradle/libs.versions.toml (1 hunks)
  • shared/feature/build.gradle.kts (1 hunks)
⏰ Context from checks skipped due to timeout of 90000ms (2)
  • GitHub Check: check-android / Lint & Tests
  • GitHub Check: check-ios / Test
🔇 Additional comments (2)
gradle/libs.versions.toml (1)

2-4: Verify tool-chain compatibility after bumping AGP & Kotlin.

Jumping to AGP 8.10.1 and Kotlin 2.1.20 in one step may break the Compose compiler and KSP if matching versions are not yet published.
Please run a quick build on CI before merging or downgrade to the latest stable pair known to work (currently 8.5.x / 2.0.x for many teams).

gradle.properties (1)

26-29: Enabling Dokka V2 is experimental—confirm build stability.

org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled opt-in may introduce breaking changes (configuration DSL, output paths, etc.).
Make sure every module builds its docs on CI; otherwise pin Dokka to V1 until V2 leaves experimental status.

navigationIcon = {
IconButton(onClick = { actions.onBack() }) {
Icon(Icons.Filled.ArrowBack, contentDescription = null)
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null)
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Provide an explicit content description for accessibility.

Passing null silences accessibility tools. Supply a short, localised string such as "Back" (or reuse an MR string) so TalkBack/VoiceOver can announce the action.

-Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null)
+Icon(
+    Icons.AutoMirrored.Filled.ArrowBack,
+    contentDescription = kmpStringResource(MR.strings.back_cd)
+)
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
Icon(Icons.AutoMirrored.Filled.ArrowBack, contentDescription = null)
Icon(
Icons.AutoMirrored.Filled.ArrowBack,
contentDescription = kmpStringResource(MR.strings.back_cd)
)
🤖 Prompt for AI Agents
In
androidApp/src/main/kotlin/app/futured/kmptemplate/android/ui/screen/ThirdScreenUi.kt
at line 55, the Icon composable has a null contentDescription which disables
accessibility announcements. Replace the null with a meaningful, localized
string such as "Back" or use a string resource from the MR strings to provide an
explicit content description for screen readers.

Comment on lines +6 to +10
androidxLifecycle = "2.9.1"
androidxComposeBom = "2025.06.01"
jetbrainsComposeRuntime = "1.8.2" # Needs to align with version in Compose BOM as closely as possible
androidxActivity = "1.10.1"
decompose = "3.3.0"
Copy link

Choose a reason for hiding this comment

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

🛠️ Refactor suggestion

Possible mismatch between Compose BOM (2025.06.01) and runtime (1.8.2).

The comment says the JetBrains runtime “needs to align with” the BOM, but these numbers look far apart and may trigger runtime/ABI conflicts at compile time.

Consider either:
• dropping an explicit version for jetbrains-compose-runtime and letting the BOM control it, or
• updating it to the 2025.x artifact line if it exists.

🤖 Prompt for AI Agents
In gradle/libs.versions.toml around lines 6 to 10, the version of
jetbrainsComposeRuntime (1.8.2) does not align with the androidxComposeBom
version (2025.06.01), risking runtime or ABI conflicts. To fix this, either
remove the explicit version for jetbrainsComposeRuntime so it inherits the
version from the BOM, or update jetbrainsComposeRuntime to a version that
matches the 2025.x artifact line if available.

This commit removes Dokka plugin configuration from `gradle.properties`, `shared/feature/build.gradle.kts`, and `gradle/libs.versions.toml`.

The specific changes include:
- Removing `org.jetbrains.dokka.experimental.gradle.pluginMode=V2Enabled` from `gradle.properties`.
- Removing Dokka plugin declaration and its configuration block from `shared/feature/build.gradle.kts`.
- Removing Dokka plugin alias and its version from `gradle/libs.versions.toml`.
matejsemancik
matejsemancik previously approved these changes Jul 2, 2025
# Conflicts:
#	gradle/libs.versions.toml
Copy link

@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: 1

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (2)
gradle/libs.versions.toml (2)

131-131: Ktor 3.x incompatibility: remove deprecated ktor-client-serialization.
In Ktor 3, serialization goes via ContentNegotiation + ktor-serialization-kotlinx-json. Keeping ktor-client-serialization can cause resolution errors.

Apply:

- network-ktor-client-serialization = { group = "io.ktor", name = "ktor-client-serialization", version.ref = "ktor" }

And in the bundle:

 ktorfit = [
   "network-ktorfit-lib",
   "network-ktorfit-converters",
   "network-ktor-client-contentNegotiation",
-  "network-ktor-client-serialization",
   "network-ktor-client-logging",
   "network-ktor-serialization-kotlinx-json",
 ]

Also applies to: 187-194


60-69: Declare and bundle the extended Material icons dependency
Add the material-icons-extended alias and include it in the compose bundle so Icons.AutoMirrored.Filled.ArrowBack resolves:

 # Compose
 …
 androidx-compose-material3 = { group = "androidx.compose.material3", name = "material3" }
+androidx-compose-material-icons-extended = { group = "androidx.compose.material", name = "material-icons-extended" }

 [bundles]
 compose = [
   "androidx-compose-runtime",
   "androidx-compose-foundation",
   "androidx-compose-ui",
   "androidx-compose-ui-tooling",
   "androidx-compose-ui-tooling-preview",
-  "androidx-compose-material3"
+  "androidx-compose-material3",
+  "androidx-compose-material-icons-extended"
 ]
♻️ Duplicate comments (1)
gradle/libs.versions.toml (1)

7-9: Compose stack alignment: avoid mixing AndroidX BOM (2025.06.01) with JB Compose runtime 1.8.2.
This can cause ABI/runtime drift on shared codepaths. Either drop JB runtime if unused, or gate it to non-Android targets, or introduce a JB Compose BOM and let it manage versions.

Option A — remove JB runtime if unused:

-jetbrainsComposeRuntime = "1.8.2" # Needs to align with version in Compose BOM as closely as possible
...
-jetbrains-compose-runtime = { group = "org.jetbrains.compose.runtime", name = "runtime", version.ref = "jetbrainsComposeRuntime" }

Option B — use JB Compose BOM (then omit explicit version on JB runtime and import the BOM in modules):

+[versions]
+jetbrainsCompose = "1.8.2"
...
+[libraries]
+jetbrains-compose-bom = { group = "org.jetbrains.compose", name = "compose-bom", version.ref = "jetbrainsCompose" }
-jetbrains-compose-runtime = { group = "org.jetbrains.compose.runtime", name = "runtime", version.ref = "jetbrainsComposeRuntime" }
+jetbrains-compose-runtime = { group = "org.jetbrains.compose.runtime", name = "runtime" }

To confirm actual usage:

#!/bin/bash
rg -nP -C2 '\borg\.jetbrains\.compose\.runtime\b'

Also applies to: 67-69

🧹 Nitpick comments (1)
gradle/libs.versions.toml (1)

90-94: Decompose extensions artifact per Compose stack.
If JB Compose is used on Desktop/common, consider adding the jetbrains-specific extensions artifact and wiring it in the respective targets.

+decompose-compose-ext-jetbrains = { group = "com.arkivanov.decompose", name = "extensions-compose-jetbrains", version.ref = "decompose" }

Then apply per-target deps accordingly.

📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between d3b0976 and cf893aa.

📒 Files selected for processing (1)
  • gradle/libs.versions.toml (1 hunks)
🔇 Additional comments (1)
gradle/libs.versions.toml (1)

2-2: AGP bump to 8.11.1 looks good; resolves Danger warning.
Change aligns with the bot’s suggestion that 8.11.1 is available.

Comment on lines 3 to 5
kotlin = "2.1.20"
ksp = "2.1.20-1.0.32" # Must be compatible with: `kotlin`
desugarLibs = "2.1.5"
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Version compatibility sanity check (Kotlin 2.1.20 ⇄ KSP, Coroutines, Serialization).
These triples often have tight matrix constraints; please confirm published compat notes.

If any mismatch is reported, bump/downgrade to the nearest compatible set.

Also applies to: 14-16, 24-24


🌐 Web query:

Are KSP 1.0.32, kotlinx-coroutines 1.10.2, and kotlinx-serialization 1.8.0 compatible with Kotlin 2.1.20?

💡 Result:

Short answer — mostly yes, with one recommended upgrade:

  • KSP 1.0.32: compatible — there are KSP 1.0.32 artifacts published for Kotlin 2.1.20 (e.g. symbol-processing-aa-embeddable 2.1.20-1.0.32). [1]

  • kotlinx-coroutines 1.10.2: compatible — 1.10.2 was released in Apr 2025 and is published to work with recent Kotlin 2.1.x toolchain (used in dependency coordinates). Use the 1.10.2 artifacts that match your JVM/JS/Native targets. [2][3]

  • kotlinx-serialization 1.8.0: not officially targeted at Kotlin 2.1.20. v1.8.0 used Kotlin 2.1.0 by default (supports up to 2.1.10 per its release notes); the project published v1.8.1 to update support to Kotlin 2.1.20. Recommendation: upgrade serialization to 1.8.1 when using Kotlin 2.1.20. [4][5]

Sources:

  1. Maven listing for KSP 1.0.32 artifact (symbol-processing-aa-embeddable 2.1.20-1.0.32). [turn2search2]
  2. kotlinx.coroutines 1.10.2 release notes. [turn3search1]
  3. kotlinx.coroutines Maven coordinates (1.10.2). [turn3search2]
  4. kotlinx.serialization releases (1.8.0 / 1.8.1 notes). [turn0search2]
  5. kotlinx.serialization README / setup page (plugin/library versioning guidance). [turn0search1]

Upgrade kotlinx-serialization to 1.8.1 for full Kotlin 2.1.20 support
KSP 2.1.20-1.0.32 and kotlinx-coroutines 1.10.2 are already compatible with Kotlin 2.1.20, but kotlinx-serialization 1.8.0 only targets up to Kotlin 2.1.10—bump it to 1.8.1.

🤖 Prompt for AI Agents
In gradle/libs.versions.toml around lines 3 to 5, the project currently uses
kotlinx-serialization 1.8.0 which only targets up to Kotlin 2.1.10; update the
kotlinx-serialization version to 1.8.1 to ensure full compatibility with Kotlin
2.1.20 — locate the kotlinx-serialization entry (or add it if missing) and set
its value to "1.8.1", then run a quick dependency refresh/build to verify there
are no resolution conflicts.

@@ -1,44 +1,43 @@
[versions]
agp = "8.11.0"
agp = "8.11.1"
Copy link

@github-actions github-actions bot Aug 29, 2025

Choose a reason for hiding this comment

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

⚠️ A newer version of com.android.application than 8.11.1 is available: 8.12.2

@@ -1,44 +1,43 @@
[versions]
agp = "8.11.0"
agp = "8.11.1"
Copy link

@github-actions github-actions bot Aug 29, 2025

Choose a reason for hiding this comment

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

⚠️ A newer version of com.android.library than 8.11.1 is available: 8.12.2

@@ -1,44 +1,43 @@
[versions]
agp = "8.11.0"
agp = "8.11.1"
Copy link

@github-actions github-actions bot Aug 29, 2025

Choose a reason for hiding this comment

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

⚠️ A newer version of com.android.test than 8.11.1 is available: 8.12.2

The `ktor-client-serialization` dependency is no longer needed as its functionality is covered by `ktor-client-content-negotiation`.

This commit removes:
- The `network-ktor-client-serialization` alias from `gradle/libs.versions.toml`.
- The `network-ktor-client-serialization` entry from the `network` bundle in `gradle/libs.versions.toml`.
Copy link

@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: 1

♻️ Duplicate comments (1)
gradle/libs.versions.toml (1)

24-24: Bump kotlinx-serialization to 1.8.1 for Kotlin 2.1.20 compatibility.

1.8.0 targets up to Kotlin 2.1.10; 1.8.1 aligns with 2.1.20. Recommend upgrading.

Apply:

- k
otlinx-serialization = "1.8.0" # Must be compatible with: `kotlin`
+ kotlinx-serialization = "1.8.1" # Must be compatible with: `kotlin`

Verify with:

Does kotlinx-serialization 1.8.1 officially support Kotlin 2.1.20?
🧹 Nitpick comments (1)
gradle/libs.versions.toml (1)

7-8: Clarify JetBrains Compose vs AndroidX BOM — remove misleading alignment note.

JetBrains Compose (org.jetbrains.compose.runtime: 1.8.2) is versioned independently from AndroidX Compose and not governed by the AndroidX BOM. Keep it explicitly pinned; drop the “Needs to align…” remark to avoid confusion.

- jetbrainsComposeRuntime = "1.8.2" # Needs to align with version in Compose BOM as closely as possible
+ jetbrainsComposeRuntime = "1.8.2" # JetBrains Compose is independent of the AndroidX Compose BOM
📜 Review details

Configuration used: CodeRabbit UI

Review profile: CHILL

Plan: Pro

💡 Knowledge Base configuration:

  • MCP integration is disabled by default for public repositories
  • Jira integration is disabled by default for public repositories
  • Linear integration is disabled by default for public repositories

You can enable these sources in your CodeRabbit configuration.

📥 Commits

Reviewing files that changed from the base of the PR and between cf893aa and 4c17988.

📒 Files selected for processing (1)
  • gradle/libs.versions.toml (1 hunks)
🔇 Additional comments (2)
gradle/libs.versions.toml (2)

171-178: Compose bundle wiring looks correct with BOM-managed versions.

Using BOM-scoped artifacts without explicit versions is the right setup.


186-192: Good: Ktorfit bundle explicitly includes Ktor serialization module.

Separation of converters and kotlinx-json serialization matches Ktor 3.x best practices.

@@ -1,44 +1,43 @@
[versions]
agp = "8.11.0"
agp = "8.11.1"
Copy link

Choose a reason for hiding this comment

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

💡 Verification agent

🧩 Analysis chain

Consider AGP 8.12.2 once toolchain compatibility is confirmed.

Danger notes a newer AGP. Validate Gradle and Kotlin plugin compatibility before bumping.


🌐 Web query:

What are the Kotlin (2.1.20) and Gradle compatibility requirements for Android Gradle Plugin 8.12.2?

💡 Result:

Short answer: Kotlin 2.1.20 is not compatible with AGP 8.12.2.

Details:

  • Kotlin 2.1.20 (KGP 2.1.20) supports Gradle 7.6.3–8.11 and AGP 7.4.2–8.7.2. [1][2]
  • Android Gradle Plugin 8.12.x requires Gradle 8.13 (AGP 8.12 → Gradle 8.13). [3]

So AGP 8.12.2 (which requires Gradle 8.13) lies outside the AGP/Gradle ranges officially supported by Kotlin 2.1.20. [1][3]

Sources:
[1] Kotlin compatibility table / docs for 2.1.20.
[2] Kotlin “what’s new” (Kotlin 2.1.20) — Gradle compatibility note.
[3] Android Gradle Plugin release notes / compatibility table (AGP 8.12 → Gradle 8.13).


Hold AGP upgrade to 8.12.2
Kotlin 2.1.20 supports AGP only up to 8.7.2 and Gradle up to 8.11, whereas AGP 8.12.2 requires Gradle 8.13 (unsupported by Kotlin 2.1.20). Delay the bump until the Kotlin plugin adds Gradle 8.13 support.

🤖 Prompt for AI Agents
In gradle/libs.versions.toml around line 2, do not upgrade AGP to 8.12.2; keep
the agp version at the current supported value (leave as "8.11.1" or revert to
the previous repo value) because Kotlin 2.1.20 does not support the Gradle 8.13
requirement of AGP 8.12.2; hold the bump until the Kotlin plugin adds Gradle
8.13 support and optionally add a short inline comment noting the compatibility
constraint.

@github-actions
Copy link

2 Messages
📖 iosAppTests: Executed 1 test, with 0 failures (0 expected) in 0.001 (0.001) seconds
📖 iosAppUITests: Executed 1 test, with 0 failures (0 expected) in 8.166 (8.166) seconds

Generated by 🚫 Danger

@jacob-derynk jacob-derynk merged commit 57789ce into develop Sep 3, 2025
6 checks passed
@jacob-derynk jacob-derynk deleted the housekeep/bump-dependencies branch September 3, 2025 08:23
alias(libs.plugins.kotlin.multiplatform)
alias(libs.plugins.compose.compiler)
alias(libs.plugins.kotlin.serialization)
alias(libs.plugins.dokka)
Copy link
Member

Choose a reason for hiding this comment

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

Remove also from libs.versions.toml

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.

3 participants