Design note: errors, not warnings

This note goes with Compile-Time Code Quality Enforcement, in particular Why Compile-Time Enforcement? and Impact on AI-Assisted Development. EK9 checks code quality in the compiler and reports every failure as an error. There are no quality warnings.

The problem with optional tools

Most languages rely on a fragmented set of optional, external tools:

The result is quality enforcement that is fragmented, optional and bypassable. Warnings accumulate, tools are misconfigured, and technical debt compounds over time.

One tool: the compiler

EK9 replaces that set of tools with the compiler. The thresholds are part of the language, so there is nothing to configure; the checks run during compilation, so there is nothing to install; and every failure is an error, so there is nothing to bypass.

The important step is removing the warning. A warning is a statement that something "will be fixed later". Under deadline pressure, later does not come, and the warnings become the technical debt. With no warnings, there is nothing to put off: the code meets the standard or it does not compile.

AI coding assistants

AI coding assistants (GitHub Copilot, Claude and others) generate code quickly, and often with quality problems:

Generating code faster does not make it better, and an assistant that is not stopped produces debt at the speed it produces code. The compiler stops it the same way it stops a person:

For a team adopting AI assistants, that means:

The For AI Assistants page documents the machine-readable side of this.