# Contributing to Nebulex

Thanks for your interest in contributing.

This guide defines the expected contribution workflow for the `nebulex` core
repository.

## Scope

This repository contains Nebulex core. Adapter projects (for example
`nebulex_local`, `nebulex_distributed`) are maintained in sibling repositories
and have their own contribution rules.

## Before You Start

1. Read `README.md`.
2. Read the latest section of `CHANGELOG.md`.
3. Read `usage-rules/workflow.md` (source of coding/review conventions used in
   this repo).

## Issues

Use the issue tracker for bug reports and feature discussions:

- https://github.com/elixir-nebulex/nebulex/issues

When opening a bug report, include:

- Elixir and OTP versions
- Nebulex version/branch
- Minimal reproduction steps
- Expected vs actual behavior

## Feature Requests

Feature proposals are welcome.

For non-trivial features, open an issue first before implementing code so
scope and design can be aligned early.

When proposing a feature, include:

- Problem statement.
- Real-world use case.
- Proposed API/behavior.
- Alternatives considered.

## Pull Requests

Open pull requests at:

- https://github.com/elixir-nebulex/nebulex/pulls

### PR Expectations

1. Keep changes focused and avoid unrelated commits.
2. Add or update tests with code changes.
3. Update documentation when behavior changes.
4. Do not update CHANGELOG.md directly; include release-note context in the PR
   description for maintainers.
5. Reference related issues (for example, `Closes #123`).

### Validation

Run targeted checks during development and run the full CI command before
requesting review:

```bash
# quick targeted check
mix test path/to/changed_test.exs

# full validation
mix test.ci
```

## Commit Message Convention

Commit messages must follow
[Conventional Commits](https://www.conventionalcommits.org/):

```text
type(scope): short summary
```

Examples:

- `feat(cache): add runtime option validation for ttl`
- `fix(decorators): handle nested context pop safely`
- `docs(workflow): add contribution and review checklist`

## Documentation Conventions

For `@doc`, `@moduledoc`, and `@typedoc`, keep the first paragraph short and
summary-oriented. Add examples when possible, ideally doctest-friendly.

## License

By submitting a contribution, you agree that your work is licensed under the
project's MIT license.
