Contributing¶
Ground Rules¶
AnyVali is a portability-first project. Contributions are expected to preserve deterministic behavior across SDKs and across schema import/export boundaries.
If a change is only correct in one language, it is usually incomplete.
Before You Start¶
- Open an issue for large features, portability changes, or public API changes.
- Keep pull requests focused. Avoid mixing refactors, feature work, and unrelated formatting.
- Prefer spec-first changes for any behavior that affects multiple SDKs.
Required Conditions For Contributions¶
All contributions must satisfy these conditions:
- Behavior changes must be reflected in the spec, docs, or corpus when applicable.
- New features must include tests.
- Bug fixes must include a regression test when practical.
- Portable behavior must not silently diverge between SDKs.
- New non-portable behavior must be explicitly documented as local-only or extension-based.
- Breaking changes must be called out clearly in the pull request.
- Generated artifacts, local caches, and dependency folders should not be committed unless intentionally tracked.
Commit Style¶
This repository uses conventional commits for release automation and changelog generation.
Examples:
feat(js): add record schema import
fix(python): validate default before returning parsed output
docs: tighten portability guide wording
chore(ci): add kotlin and cpp jobs
Use scopes when the change is specific to one SDK or subsystem.
Development Workflow¶
Use the root runner where possible:
./runner.sh install
./runner.sh build
./runner.sh test
./runner.sh ci
Run a single SDK if needed:
./runner.sh test go
./runner.sh build js
Testing Expectations¶
At minimum, contributors should run the relevant local test suite for the code they changed.
If a change affects the portable format, conformance corpus, parse semantics, or import/export behavior, run all impacted SDK suites before submitting.
Pull Request Checklist¶
- The change is scoped and explained clearly.
- Tests were added or updated.
- Relevant docs were updated.
- Public behavior changes are called out.
- Commit messages follow conventional commits.
- CI is expected to pass on supported platforms.
Coding Expectations¶
- Match existing style in the touched SDK.
- Keep APIs small and explicit.
- Prefer declarative, portable semantics over clever runtime-specific behavior.
- Do not introduce hidden coercions or lossy numeric conversions in portable flows.
License¶
By contributing, you agree that your contributions will be licensed under the MIT License in this repository.