| 01-project-infrastructure-module-wiring |
02 |
infra |
| gradle |
| build-logic |
| included-build |
| precompiled-plugins |
| version-catalog |
| kotlin-multiplatform |
| compose |
| ktor |
| spotless |
| flyway |
| pitfall-1 |
| pitfall-2 |
| pitfall-9 |
| pitfall-10 |
|
|
| build-logic/ included build resolving the parent catalog via files("../gradle/libs.versions.toml") |
| Precompiled plugin recipe.quality (Spotless + ktlint + D-11 allWarningsAsErrors safety net via plugins.withId guard) |
| Precompiled plugin recipe.kotlin.multiplatform (D-05 target matrix: androidTarget, iosArm64, iosSimulatorArm64, jvm, wasmJs; JVM toolchain 21 + JVM 11 Android bytecode per D-08; framework baseName = ComposeApp; Koin BOM + koin-core + Kermit + kotlin-test common deps; allWarningsAsErrors at kotlin{} level) |
| Precompiled plugin recipe.compose.multiplatform (layers on recipe.kotlin.multiplatform — PITFALL #2 avoided; Compose + composeCompiler + composeHotReload + commonMain Compose deps + lifecycle-viewmodel-compose + koin-compose) |
| Precompiled plugin recipe.android.application (namespace dev.ulfrx.recipe; findVersion catalog accessor per PITFALL #1; SDK versions from catalog) |
| Precompiled plugin recipe.jvm.server (Kotlin JVM + Ktor + Flyway + application; quoted "implementation" configs; cleanDisabled=true; D-08 JVM toolchain 21) |
| Root settings.gradle.kts with includeBuild("build-logic") placed inside pluginManagement{} (PITFALL #9) |
| Root build.gradle.kts with 10 alias(...) apply false entries (8 existing + Spotless + Flyway classloader hints) |
|
| 01-03 |
| 01-04 |
| 01-05 |
| 01-06 |
| 01-07 |
|
| added |
patterns |
| build-logic/ included build (kotlin-dsl convention-plugin project) |
| 5 precompiled script plugins: recipe.quality, recipe.kotlin.multiplatform, recipe.compose.multiplatform, recipe.android.application, recipe.jvm.server |
|
| PITFALL #1 mitigation: every precompiled plugin reads versions via extensions.getByType<VersionCatalogsExtension>().named("libs") |
| PITFALL #2 mitigation: recipe.compose.multiplatform applies id("recipe.kotlin.multiplatform") — KMP plugin applied transitively |
| PITFALL #9 mitigation: includeBuild("build-logic") sits inside pluginManagement{} |
| PITFALL #10 mitigation: baseName = "ComposeApp" set on both iOS frameworks |
| Quoted-configuration footgun avoidance: recipe.jvm.server uses "implementation"(...) string-literal configs |
| D-11 redundancy guard: recipe.quality uses plugins.withId guards for composability |
| Plugin coordinate synthesis via Provider<PluginDependency>.asDependency() keeps build-logic/build.gradle.kts catalog-only |
|
|
| created |
modified |
| build-logic/settings.gradle.kts |
| build-logic/build.gradle.kts |
| build-logic/src/main/kotlin/recipe.quality.gradle.kts |
| build-logic/src/main/kotlin/recipe.kotlin.multiplatform.gradle.kts |
| build-logic/src/main/kotlin/recipe.compose.multiplatform.gradle.kts |
| build-logic/src/main/kotlin/recipe.android.application.gradle.kts |
| build-logic/src/main/kotlin/recipe.jvm.server.gradle.kts |
|
| settings.gradle.kts |
| build.gradle.kts |
|
|
| Content for all 7 build-logic/ files copied verbatim from 01-RESEARCH.md § Code Examples + 01-PATTERNS.md; no structural changes. |
| 9 compileOnly(...asDependency()) entries omit androidLibrary — no recipe-family precompiled plugin applies com.android.library; shared/build.gradle.kts applies that plugin directly in 01-03. |
| recipe.quality's D-11 safety net is plugins.withId-guarded so the plugin remains composable when applied standalone. |
|
| Pattern 1 (role declarations): each recipe.* plugin encodes a module role; shared/ cannot pull Compose transitively (INFRA-06). |
| Pattern 2 (catalog-only versioning inside build-logic): plugin coordinates via asDependency(); library refs via findLibrary; version refs via findVersion.toString().toInt(). |
| Pattern 3 (Flyway CLI + runtime split): flyway{} block for CLI ergonomics; runtime migration handled in 01-05. |
| Pattern 4 (JVM target split): jvmToolchain(21) drives shared/server/desktop; Android bytecode pinned at JVM 11; server JVM output at JVM 21. |
|
|
~5min |
2026-04-24 |
2 |
7 |
2 |