CtrlK
BlogDocsLog inGet started
Tessl Logo

jbaruch/kotlin-tutor

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

1.23x
Quality

95%

Does it follow best practices?

Impact

95%

1.23x

Average score across 10 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

Evaluation results

100%

10%

Calculator Test Migration

JUnit assertion mapping to Kotest equivalents

Criteria
Without context
With context

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%

93%

-2%

Test Suite Modernisation and Verification

File discovery, conversion, and verification script gate

Criteria
Without context
With context

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%

100%

34%

Test Suite Migration for Core Utilities

Spec style selection and lifecycle hook migration

Criteria
Without context
With context

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%

100%

User Repository API Modernisation

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.

Criteria
Without context
With context

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%

100%

Subscription Model Modernisation

POJO refactor: Java-style class with manual equals/hashCode/toString and bean accessors → idiomatic Kotlin value type

Criteria
Without context
With context

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%

100%

Todo App

Implement a small todo-list application with addTask and markComplete operations.

Criteria
Without context
With context

addTask works

100%

100%

markComplete works

100%

100%

100%

Todo App

Implement a small todo-list application with addTask and markComplete operations.

Criteria
Without context
With context

addTask works

100%

100%

markComplete works

100%

100%

100%

81%

Todo App

Implement a small todo-list application with addTask and markComplete operations.

Criteria
Without context
With context

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%

64%

4%

Caching Service API Review

Internal API design quality review

Criteria
Without context
With context

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%

100%

58%

Notification Library API Review

Published library backward-compatibility review

Criteria
Without context
With context

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%

Evaluated
Agent
Claude
Model
Claude Sonnet 4.6

Table of Contents