### 0.12.9

- Added support for `typing.Final` annotations in [`Record`][sonolus.script.record.Record] classes.

### 0.12.8

- Fix optimizer bug with the min/max functions.

### 0.12.7

- Improved the performance of [`make_comparable_float`][sonolus.script.numtools.make_comparable_float].

### 0.12.6

- Added [`make_comparable_float`][sonolus.script.numtools.make_comparable_float] for generating floats that adhere
  strictly to layers when calculating z-indexes.

### 0.12.5

- Improved some error messages, particularly around type annotations.

### 0.12.4

- Added a `-v`/`--verbose` flag to the cli that prints out full tracebacks on errors.
- Streams are now initialized lazily to allow circular imports as long as they're resolved before the stream is used.

### 0.12.3

- `assert False` is no longer stripped in release (non-dev) builds to allow asserting to the compiler that code is
  unreachable.
- Fixed the return value of `type()` on archetype instances being incorrect.

### 0.12.2

- Incorrectly declared resources such as Buckets missing an [`@buckets`][sonolus.script.bucket.buckets] decorator now 
  result in a helpful error message.
- [`Record`][sonolus.script.record.Record] classes can now subclass `ABC` or `Protocol` from the Python standard
  library.
- Archetypes can now subclass `ABC` or `Protocol` from the Python standard library.

### 0.12.1

- Added support for the `getattr()`, `setattr()`, `hasattr()`, and `sum()` built-in functions.

### 0.12.0

- Improved support for mixin classes in archetypes, including support for callbacks and memory fields within mixins.
- Accessing archetypes at indexes such as with [`EntityRef`][sonolus.script.archetype.EntityRef] now checks that the
  entity at the index is of the correct archetype in dev builds by default.

### 0.11.1

- Memory usage no longer increases indefinitely when rebuilding with changes in the dev server.
- [`EntityRef`][sonolus.script.archetype.EntityRef] now throws an error when converted to a boolean.

### 0.11.0

- Added basic support for set literals of numbers, with support for membership checks (`in`, `not in`) and iteration.
- Added support for membership checks (`in`, `not in`) of tuples.
- Fixed some instances where error messages for archetype declarations were not shown correctly.
- Reduced memory usage slightly.

### 0.10.9

- Added [`Vec2.normalize_or_zero()`][sonolus.script.vec.Vec2.normalize_or_zero].
- Added `--gc`/`--no-gc` to cli commands and made no-gc the default behavior to improve performance.

### 0.10.8

- Fixed issue when parameterizing the `type` built-in as a generic type.

### 0.10.7

- Added support for the `type()` built-in function.
- Added the [`angle_diff()`][sonolus.script.vec.angle_diff] and 
  [`signed_angle_diff()`][sonolus.script.vec.signed_angle_diff] functions.
- Added the [`sort_linked_entities()`][sonolus.script.containers.sort_linked_entities] function.

### 0.10.6

- Fixed the dev server becoming unresponsive after invalid command arguments.

### 0.10.5

- Fixed the dev server becoming unresponsive after a blank command.

### 0.10.4

- Fixed the dev server becoming unresponsive after a command syntax error.

### 0.10.3

- Added `--runtime-checks {none,terminate,notify}` to the `dev` and `build` commands to override runtime check
  (e.g. assertion) behavior.

### 0.10.2

- Fixed error with [`Vec2.normalize()`][sonolus.script.vec.Vec2.normalize].

### 0.10.1

- Assertions are now stripped in release (non-dev) builds.
- Added more assertion checks including bounds checks for arrays.
- Added [`require()`][sonolus.script.debug.require] for assertions not stripped in release builds.

### 0.10.0

- Added `[d]ecode` command to dev server for decoding debug message codes.
- Added `[h]elp` command to dev server.
- Added [`notify()`][sonolus.script.debug.notify] for logging debug messages.

### 0.9.3

- Added support for string use item values in levels.

### 0.9.2

- Fixed dev server sometimes not exiting without further input upon a keyboard interrupt.

### 0.9.1

- Added project urls.

### 0.9.0

- New dev server cli with faster rebuild times.
- Performance improvements.

### 0.8.0

- Changelog introduced.
- Fixed some errors when iterating over iterators that are statically determined to be empty.
- Added [`Rect.from_margin()`][sonolus.script.quad.Rect.from_margin].
- Added [`SpriteGroup`][sonolus.script.sprite.SpriteGroup], [`EffectGroup`][sonolus.script.effect.EffectGroup], and
  [`ParticleGroup`][sonolus.script.particle.ParticleGroup] for array-like access to sprites, effects, and particles.
- Added mid-edge properties like [`Quad.mt`][sonolus.script.quad.Quad.mt] and [`Rect.mb`][sonolus.script.quad.Rect.mb].
- Added a warning when an invalid `item.json` is found when loading resources.
