Properties and tests
read/write expose conventional Java getters/setters. lazy fix evaluates its initializer once and safely publishes success or the original failure. late var has a runtime guard for both Kalm and Java reads before assignment. It throws IllegalStateException until initialized; setters reject null and allow reassignment. Use ordinary initialized fields when construction should establish the invariant.
Kalm
before { require true; }
test "a record preserves its value" {
fix box: Box<Text> = Box<Text>("Mira");
expect box.value() == "Mira";
}
after { ensure true; }Tests and hooks belong under test roots. Every test runs with its hooks; cleanup still runs after a failed check. The CLI and both build plugins share the test runner and XML/HTML reports.