From d951089e882922ebf90563193494ccca794578b1 Mon Sep 17 00:00:00 2001 From: Jean-Luc Makiola Date: Mon, 8 Jun 2026 14:52:44 +0200 Subject: [PATCH] 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) --- .../plans/2026-06-08-01-foundation.md | 100 +++++++++++------- 1 file changed, 59 insertions(+), 41 deletions(-) diff --git a/docs/superpowers/plans/2026-06-08-01-foundation.md b/docs/superpowers/plans/2026-06-08-01-foundation.md index df0c465..2bae8aa 100644 --- a/docs/superpowers/plans/2026-06-08-01-foundation.md +++ b/docs/superpowers/plans/2026-06-08-01-foundation.md @@ -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 17–21. 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 17–21). 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 } }