CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/kotlin-tutor

Teaches AI agents to write idiomatic Kotlin instead of Java-in-a-.kt-file.

98

1.20x
Quality

98%

Does it follow best practices?

Impact

99%

1.20x

Average score across 8 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-8/

{
  "context": "Checks whether the agent's todo-app implementation is written in idiomatic Kotlin — a data class for the task record, val properties, nullable types with the question-mark suffix, no manual equals/hashCode/toString — AND implements the two required operations correctly.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "Written in Kotlin",
      "description": "The output file is a Kotlin source file (`.kt`), uses `fun` for function declarations and Kotlin syntax (not Python `def`, JavaScript `function`, Java `public static void`, etc.). The output compiles as Kotlin.",
      "max_score": 25
    },
    {
      "name": "Task is a data class",
      "description": "The internal task record is declared as a `data class` (e.g. `data class Task(val id: Int, val title: String, val completed: Boolean)`). Not a regular `class` with manual `equals`/`hashCode`/`toString`.",
      "max_score": 20
    },
    {
      "name": "Properties default to val",
      "description": "Properties on the task record and on the todo-app holder use `val`, not `var`, unless mutation is genuinely required.",
      "max_score": 15
    },
    {
      "name": "Nullable types use ?",
      "description": "If any field can be absent (e.g. a `description` or `dueAt`), it is typed `String?` / `Instant?` etc., not `Optional<String>` or a Java-style nullable workaround.",
      "max_score": 10
    },
    {
      "name": "No manual equals/hashCode/toString",
      "description": "The task record (and any helper types) does not include hand-written `override fun equals`, `override fun hashCode`, or `override fun toString`. The compiler generates these for `data class` automatically.",
      "max_score": 10
    },
    {
      "name": "addTask works",
      "description": "Calling addTask(\"buy milk\") followed by reading the list returns a single task with title 'buy milk'",
      "max_score": 10
    },
    {
      "name": "markComplete works",
      "description": "Calling markComplete(id) on a previously-added task flips its completed flag (or equivalent state representation) to true; the task remains in the list",
      "max_score": 10
    }
  ]
}

evals

README.md

tile.json