Teaches AI agents to write idiomatic Kotlin instead of Java-in-a-.kt-file.
98
98%
Does it follow best practices?
Impact
99%
1.20xAverage score across 8 eval scenarios
Passed
No known issues
{
"context": "Checks whether the agent refactors a Java-style value class (manual equals/hashCode/toString, Java-bean accessors, var properties) into the idiomatic Kotlin shape: data class, val properties, no manual override of standard object methods, no bean accessors. Field order must be preserved so positional construction at call sites still compiles.",
"type": "weighted_checklist",
"checklist": [
{
"name": "Declared as data class",
"description": "The output declares `data class Subscription(...)` with a primary constructor — not a regular `class Subscription { ... }`",
"max_score": 25
},
{
"name": "Properties use val",
"description": "Every property in the primary constructor uses `val` (not `var`). The output has no `var` declarations on the Subscription type",
"max_score": 15
},
{
"name": "No manual equals/hashCode/toString",
"description": "The output contains no `override fun equals(...)`, `override fun hashCode()`, or `override fun toString()` — the compiler generates them for data classes",
"max_score": 20
},
{
"name": "No Java-bean accessors",
"description": "The output contains no `fun getX(...)`, `fun setX(...)`, or `fun isX(...)` method declarations. Property access uses Kotlin's auto-generated accessors instead",
"max_score": 15
},
{
"name": "Field order preserved",
"description": "The primary constructor parameters appear in this exact order: subscriptionId, planCode, status, billingPeriodMonths, autoRenew, createdAtEpochMillis, renewsAtEpochMillis. This preserves componentN() destructuring for any callers that relied on it",
"max_score": 15
},
{
"name": "All seven fields retained",
"description": "All seven fields from the original class are present in the new data class — none accidentally dropped during refactor",
"max_score": 10
}
]
}