ferryx is a Rust-first semantic projection framework. Contributions must preserve one hard boundary:
Rust AST -> semantic IR -> language emitters
Direct AST-to-language output is out of scope and will be rejected.
- Rust stable (latest), plus nightly for selected checks.
- Python 3.9+ for generated SDK validation.
cargo,rustfmt,clippy,maturin.
Recommended local loop:
cargo fmt --allcargo clippy --workspace --all-targets -- -D warningscargo test --workspace- Run relevant benchmarks when touching runtime/codegen/ffi.
- Open an issue (bug, feature, design concern) or link to an existing one.
- For non-trivial design changes, create an RFC before implementation.
- Submit PR with:
- Problem statement.
- Design summary and tradeoffs.
- Compatibility impact.
- Test plan and benchmark evidence (if perf-sensitive).
- Maintainer review:
- Correctness.
- IR architecture compliance.
- API stability and migration impact.
- Safety and ABI review where relevant.
- Squash or rebase is fine; maintain clear commit semantics.
Changes are accepted when they include:
- Tests for happy path and failure path.
- Updated docs for any user-facing behavior.
- Benchmarks for claimed performance improvements.
- Safety notes for
unsafeblocks. - Compatibility notes for API/ABI changes.
Any unsafe requires:
- Dedicated safety comment explaining invariants.
- Why safe Rust alternatives are not viable.
- At least one maintainer with unsafe/ABI review context.
- Public Rust API follows SemVer.
- Python generated API follows projection compatibility guarantees defined in
CHANGELOG.md. - ABI compatibility rules are defined in
SECURITY.mdandGOVERNANCE.md.
If change touches parser, runtime registry, emitter, FFI, or generated call path:
- Run benchmark harnesses in
benchmarks/. - Include before/after artifacts in PR.
- Regressions >5% in core paths require explicit maintainer approval and rationale.
Contributors must update docs in the same PR when behavior changes:
README.mdfor high-level UX.docs/for deep design.rfcs/when architecture direction changes.
RFC required for:
- ABI changes.
- IR schema changes.
- Macro syntax changes.
- Async ownership/bridging model shifts.
- New language targets.
Use rfcs/RFC_TEMPLATE.md.
Maintainers label issues by:
kind:bug,kind:feature,kind:docs,kind:perf,kind:securityarea:macros,area:ir,area:runtime,area:python,area:ffi,area:cli,area:buildpriority:P0..P3
- Stable releases: from
mainwith green CI, changelog entry, and migration notes. - Patch releases: bug/security/perf fixes without breaking API contracts.
- Minors/majors: follow SemVer + stabilization policy in
CHANGELOG.md.