## AirForm 0.2.1: Clean CI, clean types

AirForm's type annotations pass [ty](https://github.com/astral-sh/ty) strict checking. The metadata access pattern uses a typed helper that narrows `BasePresentation` to the specific subclass (Widget, Choices, HelpText, etc.), so type checkers see the correct attributes without casts.

```sh
uv add AirForm --upgrade
```

### What's better

- **Type checking passes with ty.** Accessing AirField metadata like `Widget.kind` or `HelpText.text` through the internal metadata dict is typed correctly. A `_get_meta(meta, Widget)` helper returns `Widget | None`, giving the type checker the narrowing it needs.

- **Dependencies resolve from PyPI in all environments.** CI, contributor clones, and user installs all resolve AirField from PyPI consistently.

### Contributors

[@audreyfeldroy](https://github.com/audreyfeldroy) (Audrey M. Roy Greenfeld) fixed the type checking and dependency resolution for this release.
