2026-08-02 — Parent verify CI: from red to a full green board¶
The parents' CI renders every form/combo with the released templetry v0.1.0 binary and compiles the output — the engine verifying its own product. Thirteen rounds later: 7/7 jobs green (single-module × 4 platform combos incl. iOS, modular-features android+desktop and iOS, android assembleDebug).
Defect inventory exhumed by the CI¶
None of the failures was an engine bug. All were latent defects in the source templates, which had never survived a clean build:
Infrastructure: missing build-logic/settings.gradle.kts (no libs catalog, later no :convention include) · gradle wrapper jar and gradle.properties eaten by a *.properties / **/gradle/wrapper/ gitignore on fresh import · missing root gradle.properties in the KMP form · JVM 21 requirement undeclared · mandatory secrets.properties undocumented (now shipped with placeholders).
Code that never compiled: missing JavaVersion imports in convention plugins · debugImplementation inside a KMP source-set block · eager getByName("iosMain") on an intermediate source set (3 modules) · MVI intentHandler overrides returning Unit against a Job contract (2 ViewModels) · expect/actual return-type mismatches in all three httpEngineFactory actuals · AndroidSqliteDriver import with swapped package segments · missing Color import in Theme · SQLDelight .sq file outside the configured package path · missing module dep (:core:security) and three leaked-type deps needing api() (kotlinx-datetime, DataStore, HttpClient) · launcher icons referenced but never shipped (now an XML vector placeholder) · spaced app-label identity variant added to the manifest.
Environment flake: one Maven Central 403 on a GitHub runner (artifact verified present; rerun passed).
Takeaways¶
- The "templates compile" thesis needed teeth, and this CI is them: every defect above is now impossible to reintroduce silently.
- Each fix was committed individually with its cause — the parents' history doubles as a sanitation log of the source templates.
- The onion pattern is expected when adopting templates that never had working CI: budget for several short rounds, not one big one.