Skip to main content

CONTRIBUTING.md

# Contributing to Decant

Thanks for taking the time to contribute. Decant is a young library —
PRs, bug reports, and design feedback all welcome.

## Development setup

Prerequisites: Elixir `~> 1.19` and Erlang/OTP `~> 28`. Postgres
required for the test suite.

```bash
git clone https://github.com/Arsenalist/decant.git
cd decant
mix deps.get
createdb decant_test
mix test
```

Format before pushing:

```bash
mix format
```

## Branching & PRs

- `main` is the release branch.
- Branch from `main` for features and fixes; submit a PR.
- Keep PRs scoped — one logical change per PR.
- Update `CHANGELOG.md` under `[Unreleased]` for every user-visible change.
- The architecture test (`test/decant/architecture_test.exs`) enforces
  the boundary: no host-app references in `lib/`, runtime deps locked
  to `[:ecto]`. Fix the offending file rather than weakening the test.

## TDD discipline

This codebase was built test-first. Every implementation has a paired
test. When adding behaviour, write the failing test first, watch it go
red, then make it pass. Pull requests adding code without test coverage
will be sent back.

## Versioning

While in `0.x`, the minor version bumps for every breaking change. The
patch version bumps for non-breaking additions and fixes.