# Contributing to rdbms-playground Contributions are welcome — bug reports, ideas, and pull requests. The project lives on Gitea at ; please file issues and open pull requests there. It's approaching its first public release, so the most useful contributions right now are bug reports and rough edges you hit while learning. ## Getting set up The toolchain is pinned with a Nix flake, so dev and CI share one Rust version. With [Nix](https://nixos.org/download) (flakes enabled): ```sh nix develop # a shell with the pinned toolchain ``` Run everything through `nix develop -c …` so you match CI exactly. ## The checks your change must pass CI runs these on every push and PR; run them locally first, and **check the exit code** (a piped `… | tail` can hide a failure): ```sh nix develop -c cargo fmt --check nix develop -c cargo clippy --all-targets -- -D warnings nix develop -c cargo test ``` All three must be green, with no skipped tests. New behaviour needs tests — the suite runs in tiers from unit up to a PTY-driven end-to-end harness. ## Branches and pull requests - **`main` is protected** and always green; it isn't pushed to directly. Every change lands through a pull request. - **Branch off `main`**, one logical change per branch, named with a conventional prefix: `feat/…`, `fix/…`, `docs/…`, `chore/…`, `refactor/…`, `test/…`, `ci/…`. - **Commit messages** follow [Conventional Commits](https://www.conventionalcommits.org/) (`feat:`, `fix:`, `docs:` …) and reference the issue (`… (#123)` / `Closes #123`). - **Open a PR against `main`.** The CI gate must pass before it can merge; PRs land as merge commits — history is append-only, so please don't force-push or rebase shared branches. - Keep one PR to one concern; don't fold unrelated changes together. ## User-facing text Two rules bind anything a user can see (errors, help, notes): - **Don't name the database engine** — say "the database" / "the engine". - **Don't say "DSL"** — say "simple mode" / "advanced mode". ## Significant changes get a decision record Architectural or otherwise consequential changes are recorded as ADRs in [`docs/adr/`](docs/adr/) — start with [`docs/adr/README.md`](docs/adr/README.md). If your change touches a decided area, read the relevant ADR first; if it would change a decision, propose a new ADR rather than quietly diverging. Opening an issue to discuss a substantial change before building it is always welcome. ## Code style Match the surrounding code — its naming, comment density, and idioms. The Clippy nursery lints are enabled and must pass clean. ## License of contributions Unless you explicitly state otherwise, any contribution you intentionally submit for inclusion in this project — as defined in the Apache-2.0 license — shall be **dual-licensed under `MIT OR Apache-2.0`** (the project's licenses), without any additional terms or conditions. This is the standard Rust "inbound = outbound" arrangement: your contribution is offered under the same licenses the project distributes under, so — via Apache-2.0 §5 — it carries the Apache-2.0 §3 patent grant to all users. No separate CLA is required.