A maintenance release: current versions of the build toolchain and runtime
dependencies, plus a .gitattributes file that normalizes line endings across
platforms. No runtime behavior, challenge content, or public DSL has changed.
- Gradle wrapper → 9.7.1. Up from 9.6.1.
- Dependency upgrades. Ktor → 3.6.0, Kotest → 6.2.5,
readingbat-core→ 3.4.0. Kotlin (2.4.10),common-utils(3.2.2), andkotlin-logging(8.0.4) are unchanged from 1.0.1. - Build plugin upgrades. kotlinter → 5.7.0, detekt → 2.0.0-alpha.6, versions plugin → 0.64.0.
.gitattributes. Line endings are now normalized on commit:text=autoby default, LF enforced forgradlew,*.sh, and*.py, CRLF for*.bat, and*.jartreated as binary. This keeps the Python challenge files and the Gradle wrapper scripts stable regardless of the contributor's platform.
- The changelog now carries a reconstructed
[1.0.0]section (built from Git history after the tag was created retroactively), replacing the former catch-all "Pre-1.0.1 history" heading, plus compare links for every release. README.md,CLAUDE.md, andllms.txtdocument the new line-ending policy.llms.txtnow mentions the GitHub Actions CI workflow alongside the other development commands.
- Contributors on Windows may see
gradlew.batshow as modified the first time they pull, as Git renormalizes it to CRLF under the new.gitattributes. Runninggit add --renormalize .once resolves it. - Run
./gradlew --refresh-dependencies(ormake build) once after pulling so the new plugin and dependency versions resolve. - The Java 25 toolchain requirement from 1.0.1 is unchanged.
See the compare view on GitHub for the complete set of changes in this release.
This release focuses on developer ergonomics, continuous integration, and toolchain/dependency upgrades. No runtime behavior, challenge content, or public DSL has changed.
- Kotlin linting and formatting. The build applies the
kotlinter Gradle plugin
(5.6.0). Run
make lintto check Kotlin sources, andmake formatto apply fixes. - Detekt static analysis. Detekt is wired up via the
dev.detektplugin (2.0.0-alpha.5) and adetekt { ... }block inbuild.gradle.kts. Usemake detektto run it standalone, ormake detekt-baselineto (re)generate the baseline. - GitHub Actions CI. A new
.github/workflows/ci.ymlrunsmake lintandmake testsas parallel jobs on every push and pull request tomaster, with Gradle caching, concurrency cancellation, and uploaded reports. - Self-documenting Makefile. Run
make helpfor a colorized list of every target, generated from##annotations in the Makefile itself. .editorconfig. Pins charset, EOL, indent width, and the set of ktlint rules disabled to match the existing Kotlin style.- JVM toolchain → Java 25. The Gradle toolchain now targets Java 25 (previously Java 17); Gradle can auto-provision it.
- Dependency upgrades. Kotlin → 2.4.10, Ktor → 3.5.1, Kotest → 6.2.3,
readingbat-core→ 3.3.1,common-utils→ 3.2.2,kotlin-logging→ 8.0.4. The Gradle wrapper moved from 9.5.0 to 9.6.1. - Build script cleanup.
build.gradle.ktsis reorganized into per-concern helper functions, the fat jar is built via Ktor'sfatJartask, the Kotlin unused-return-value checker runs over production code, anddependencyUpdatesnow filters out pre-release candidates for stable dependencies.
Content.ktno longer wildcard-importsReturnType.*; all return types are qualified (e.g.,ReturnType.IntType). When adding new challenges, use the qualified form.- The dependency-updates plugin moved from the retired
com.github.ben-manes.versionsid toio.github.ben-manes.versions(0.57.0). - The
gradleversion key ingradle/libs.versions.tomlwas renamed togradle-wrapper. - The Makefile
versionchecktarget was renamed toversions,helpis now the default target, and the dependency-update check runs with--no-configuration-cache --no-parallel. - The Makefile uses the canonical
-x testflag (with a space) inbuildandcctargets, replacing the deprecated-xtestshort form.
CLAUDE.mdwas trimmed to the guidance the codebase cannot teach on its own. The source-file layout, Python file-pattern code block, Test Structure paragraph,maketarget table, toolchain/lint stack line, and CI section were removed — each is derivable from the repository itself. The Content DSL section, theReturnTypequalification note, themain()-prints test-case contract, and the Adding a New Challenge checklist remain.llms.txtlisted 6 of the 14 topic groups underpython/; the list is now complete.
- Java 25 is now the toolchain target. Gradle will auto-provision a matching JDK; ensure toolchain auto-download is enabled or a Java 25 JDK is installed.
common-utilscrossed a major version during this cycle (2.9.3 → 3.2.2). The build and full test suite pass against it, but treat it as the highest-risk item if you pin it transitively.- If you referenced the dependency-updates plugin by id anywhere outside
libs.versions.toml, update it toio.github.ben-manes.versions. - After pulling, run
./gradlew --refresh-dependencies(ormake build) once so the new plugins and dependencies resolve. - Existing developer workflows are unchanged; the new
lint/formattargets are optional but recommended before pushing.
See the compare view on GitHub for the complete set of changes in this release.