docs(plan): bump all dependency versions to verified latest stable

All versions verified against canonical registries on 2026-06-08:

- Kotlin 2.1.0 -> 2.3.21 (paired with KSP)
- AGP 8.7.2 -> 9.1.1
- KSP 2.1.0-1.0.29 -> 2.3.9
- Hilt 2.53 -> 2.59.2
- Compose BOM 2025.05.00 -> 2026.06.00
- Material 3 -> PINNED to 1.5.0-alpha21 (Expressive APIs live only here)
- AndroidX Core KTX 1.15.0 -> 1.19.0
- Lifecycle 2.8.7 -> 2.10.0
- Activity Compose 1.9.3 -> 1.13.0
- DataStore 1.1.1 -> 1.2.1
- JUnit Jupiter 5.11.4 -> 6.1.0 (with unified platform 6.1.0)
- Truth 1.4.4 -> 1.4.5
- AndroidX Test JUnit 1.2.1 -> 1.3.0
- Espresso 3.6.1 -> 3.7.0
- Gradle 8.14 -> 9.5.1 (required by AGP 9.1.1; bootstrap via two-step
  wrapper upgrade from HouseHoldKeaper's 8.14 wrapper)

Also moved kotlinOptions DSL to the new top-level kotlin {} block
(required with Kotlin 2.3+ / AGP 9.x).

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
Jean-Luc Makiola
2026-06-08 14:52:44 +02:00
parent f13523c865
commit d951089e88

View File

@@ -6,14 +6,19 @@
**Architecture:** Single Gradle module `:app`, Kotlin 2.1 + Jetpack Compose mit Material 3 Expressive (1.5+), Hilt für DI, DataStore-Preferences für App-Settings. Build via Gradle Kotlin DSL und Version Catalog (`libs.versions.toml`). CI über Gitea Workflows (adaptiert von HouseHoldKeaper, Flutter-Steps durch Gradle-Steps ersetzt). Alle Resourcen + Strings i18n-fähig ab Tag 1 (DE + EN).
**Tech Stack:**
- Kotlin 2.1.0, Gradle 8.14 (bootstrapped from HouseHoldKeaper's wrapper), AGP 8.7.2, JVM Target 17
**Tech Stack (versions verified 2026-06-08 against canonical registries):**
- Kotlin 2.3.21 (paired with KSP — Kotlin 2.4.0 has no KSP release yet)
- Gradle 9.5.1 (bootstrap from HouseHoldKeaper's 8.14 wrapper, then `wrapper --gradle-version 9.5.1`)
- AGP 9.1.1, JVM Target 17
- minSdk 29, targetSdk 36, compileSdk 36
- Jetpack Compose BOM 2025.05.00, Material3 1.5.0 (Expressive APIs)
- Hilt 2.53 + KSP 2.1.0-1.0.29
- AndroidX DataStore Preferences 1.1.1
- Tests: JUnit5 5.11.x + Truth 1.4.4 + Compose UI Test (BOM)
- CI: Gitea Actions auf Docker-Runner (Java 17 + Android SDK 36)
- Jetpack Compose BOM 2026.06.00 (provides Material 3 1.4.0 by default; we override material3 to 1.5.0-alpha21 explicitly)
- **Material 3 1.5.0-alpha21** — Expressive APIs only exist in 1.5 alpha line; accepting alpha is intentional because Expressive is the whole point of this app
- Hilt 2.59.2 + KSP 2.3.9
- AndroidX Core KTX 1.19.0, Lifecycle Runtime KTX 2.10.0, Activity Compose 1.13.0
- AndroidX DataStore Preferences 1.2.1
- Tests: JUnit Jupiter 6.1.0 (unified launcher version) + Truth 1.4.5 + Compose UI Test (BOM)
- AndroidX Test JUnit 1.3.0, Espresso 3.7.0
- CI: Gitea Actions on Docker runner (Java 17 + Android SDK 36)
---
@@ -582,23 +587,28 @@ include(":app")
- [ ] **Step 2: Create `gradle/libs.versions.toml`**
> All versions verified against canonical registries on 2026-06-08. Material 3 is pinned to alpha intentionally — see the `material3` comment below.
```toml
[versions]
agp = "8.7.2"
kotlin = "2.1.0"
ksp = "2.1.0-1.0.29"
hilt = "2.53"
coreKtx = "1.15.0"
lifecycleRuntime = "2.8.7"
activityCompose = "1.9.3"
composeBom = "2025.05.00"
material3 = "1.5.0"
datastore = "1.1.1"
junit = "5.11.4"
junitJupiterPlatform = "1.11.4"
truth = "1.4.4"
androidxJunit = "1.2.1"
espressoCore = "3.6.1"
agp = "9.1.1"
kotlin = "2.3.21"
ksp = "2.3.9"
hilt = "2.59.2"
coreKtx = "1.19.0"
lifecycleRuntime = "2.10.0"
activityCompose = "1.13.0"
composeBom = "2026.06.00"
# Material 3 Expressive APIs currently live only in the 1.5 alpha line.
# Pin explicitly to override the BOM (which ships stable 1.4.0).
# Re-evaluate when 1.5.0 stable lands.
material3 = "1.5.0-alpha21"
datastore = "1.2.1"
junit = "6.1.0"
junitPlatform = "6.1.0"
truth = "1.4.5"
androidxJunit = "1.3.0"
espressoCore = "3.7.0"
[libraries]
# AndroidX core
@@ -628,7 +638,7 @@ androidx-datastore-preferences = { group = "androidx.datastore", name = "datasto
# Unit tests
junit-jupiter-api = { group = "org.junit.jupiter", name = "junit-jupiter-api", version.ref = "junit" }
junit-jupiter-engine = { group = "org.junit.jupiter", name = "junit-jupiter-engine", version.ref = "junit" }
junit-platform-launcher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitJupiterPlatform" }
junit-platform-launcher = { group = "org.junit.platform", name = "junit-platform-launcher", version.ref = "junitPlatform" }
truth = { group = "com.google.truth", name = "truth", version.ref = "truth" }
# Android tests
@@ -691,11 +701,17 @@ cp /home/jlmak/Projects/jlmak/HouseHoldKeaper/android/gradle/wrapper/gradle-wrap
chmod +x gradlew
```
Gradle 8.14 is compatible with AGP 8.7.2 (Gradle is backward-compatible for AGP versions; newer Gradle works fine).
- [ ] **Step 6: Upgrade the wrapper to the version AGP 9.1.1 requires**
- [ ] **Step 6: Verify gradle wrapper works (with JDK 17)**
AGP 9.1.1 mandates Gradle ≥ 9.3.1. Use 9.5.1 (latest stable). This step uses Gradle 8.14 just to upgrade itself — safe because no AGP is wired in yet:
The system default JDK is 26, but AGP 8.7.2's compatibility envelope is JDK 1721. Use JDK 17 explicitly for every gradle invocation in this plan:
```bash
JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./gradlew wrapper --gradle-version 9.5.1 --distribution-type bin
```
Expected: Gradle downloads 9.5.1, writes the new `gradle-wrapper.properties` and `gradle-wrapper.jar`. Output ends with `BUILD SUCCESSFUL`.
- [ ] **Step 7: Verify the upgraded wrapper works**
```bash
JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./gradlew --version
@@ -703,12 +719,12 @@ JAVA_HOME=/usr/lib/jvm/java-17-openjdk ./gradlew --version
Expected output includes:
```
Gradle 8.14
Gradle 9.5.1
```
> Going forward in this plan, every `./gradlew ...` invocation must be prefixed with `JAVA_HOME=/usr/lib/jvm/java-17-openjdk` on this dev machine. CI sets `setup-java@v4 java-version: 17` so no prefix is needed there.
> Going forward in this plan, every `./gradlew ...` invocation must be prefixed with `JAVA_HOME=/usr/lib/jvm/java-17-openjdk` on this dev machine (the system default is JDK 26, but AGP 9.1.1's compatibility envelope is JDK 1721). CI sets `setup-java@v4 java-version: 17` so no prefix is needed there.
- [ ] **Step 7: Commit**
- [ ] **Step 8: Commit**
```bash
git add settings.gradle.kts build.gradle.kts gradle.properties gradle/
@@ -787,9 +803,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
compose = true
@@ -802,9 +815,13 @@ android {
}
testOptions {
unitTests.all { test ->
test.useJUnitPlatform()
}
unitTests.all { it.useJUnitPlatform() }
}
}
kotlin {
compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}
}
@@ -1848,9 +1865,6 @@ android {
sourceCompatibility = JavaVersion.VERSION_17
targetCompatibility = JavaVersion.VERSION_17
}
kotlinOptions {
jvmTarget = "17"
}
buildFeatures {
compose = true
@@ -1863,9 +1877,13 @@ android {
}
testOptions {
unitTests.all { test ->
test.useJUnitPlatform()
}
unitTests.all { it.useJUnitPlatform() }
}
}
kotlin {
compilerOptions {
jvmTarget = org.jetbrains.kotlin.gradle.dsl.JvmTarget.JVM_17
}
}