# Contributing

Changes should preserve the explicit v0.1 compatibility boundary and keep the
core library target-neutral. Native I/O belongs under `cmd/` or `examples/`.

Before committing, run:

```text
moon fmt --check
moon check --target all --deny-warn
moon build --target all --deny-warn
moon test --target all --deny-warn
python scripts/count_effective_moonbit.py --minimum 4000 --maximum 4500
moon info
git diff --exit-code
```

New semantics require named tests on all stable targets. Parser/checker/runtime
errors should carry a precise `SourceSpan` and a stable error or diagnostic
code. New loops over user-controlled data must charge an existing budget or
introduce an explicit bounded limit.

Do not copy upstream conformance files into the package. Record provenance in
`UPSTREAM.md`, adapt only cases that belong to the supported subset, and list
unsupported families honestly.
