Teaches AI agents to write idiomatic Kotlin (data classes, val, scope fns, Kotest) AND to make the right stack choices on JVM: Kotlin 2.3 + JDK 21 + Gradle Kotlin DSL, Ktor for HTTP, kotlinx-coroutines, DJL for ML inference, JavaCV for vision, Koog for AI agent orchestration.
95
95%
Does it follow best practices?
Impact
95%
1.23xAverage score across 10 eval scenarios
Passed
No known issues
JUnit assertion mapping to Kotest equivalents
assertEquals order
100%
100%
withClue for message
100%
100%
shouldThrow
100%
100%
shouldBeTrue
50%
100%
shouldBeFalse
50%
100%
shouldBeNull
100%
100%
shouldNotBeNull
100%
100%
JUnit imports removed
100%
100%
Kotest imports added
100%
100%
Imports sorted
100%
100%
File discovery, conversion, and verification script gate
Both files converted
100%
100%
Kotest assertions used
100%
100%
No JUnit imports remain
100%
100%
Verify script executed
100%
100%
Script exit code documented
100%
100%
File list in report
100%
100%
Files found via glob
50%
30%
No commit performed
100%
100%
Spec style selection and lifecycle hook migration
StringSpec for flat tests
0%
100%
BehaviorSpec for given/when/then
100%
100%
Tests in string blocks
41%
100%
beforeEach block used
100%
100%
Setup code preserved
100%
100%
Correct class declaration
50%
100%
Kotest spec import present
50%
100%
JUnit annotations removed
100%
100%
Optional API cleanup: Kotlin repository returning Optional<T> and using orElse/ifPresent/map/orElseThrow → idiomatic Kotlin nullable types with safe-call, elvis, and let. Caller code must be updated alongside.
No java.util.Optional import
100%
100%
findById returns User?
100%
100%
findByEmail returns User?
100%
100%
displayNameFor uses elvis
100%
100%
sendWelcome uses ?.let
100%
100%
requireById uses elvis throw
100%
100%
Optional.map replaced with ?.let
100%
100%
UserService caller updated
100%
100%
No !! introduced
100%
100%
POJO refactor: Java-style class with manual equals/hashCode/toString and bean accessors → idiomatic Kotlin value type
Declared as data class
100%
100%
Properties use val
100%
100%
No manual equals/hashCode/toString
100%
100%
No Java-bean accessors
100%
100%
Field order preserved
100%
100%
All seven fields retained
100%
100%
Implement a small todo-list application with addTask and markComplete operations.
addTask works
100%
100%
markComplete works
100%
100%
Implement a small todo-list application with addTask and markComplete operations.
addTask works
100%
100%
markComplete works
100%
100%
Implement a small todo-list application with addTask and markComplete operations.
Written in Kotlin
0%
100%
Task is a data class
0%
100%
Properties default to val
0%
100%
Nullable types use ?
0%
100%
No manual equals/hashCode/toString
50%
100%
addTask works
70%
100%
markComplete works
70%
100%
Internal API design quality review
Boolean args flagged
100%
100%
Mutable state exposure flagged
100%
33%
Inconsistent error handling flagged
100%
100%
Test doubles / interface seam recommended
100%
100%
Input validation recommended
0%
100%
toString recommended
0%
0%
KDoc missing flagged
0%
40%
File:line report format
0%
0%
Naming inconsistency flagged
100%
75%
Published library backward-compatibility review
data class flagged
100%
100%
Default args flagged
35%
100%
Implicit return types flagged
0%
100%
Explicit API mode recommended
0%
100%
Binary Compatibility Validator recommended
100%
100%
Deprecation cycle prescribed
0%
100%
No auto-apply of breaking changes
100%
100%
KDoc missing flagged
12%
100%
File:line report format
0%
100%