# Contributing to ObanSentinel

Thanks for helping make Oban operations safer. Contributions should preserve
the library's core promise: telemetry handlers must never synchronously perform
network I/O, database work, or blocking queue control.

## Development setup

Install a supported Elixir and OTP release, then run:

```sh
mix deps.get
mix format --check-formatted
mix test
```

Run the full suite before opening a pull request. New behavior should include a
success path and an error or boundary case.

## Design rules

- Keep state owned by OTP processes; do not expose Sentinel ETS tables.
- Do not create atoms from Oban worker or queue strings.
- Treat queue pauses and resumes as fallible side effects.
- Keep public APIs documented with specs and return structured errors.
- Do not add mandatory hosted services, telemetry collection, or credentials.
- Never put webhook URLs, tokens, or production job payloads in tests, commits,
  issues, or logs.

## Pull requests

Keep changes focused and describe the operational impact: failure mode,
telemetry emitted, retry behavior, and recovery behavior. Changes that alter
circuit defaults, guards, or queue control require release-note entries in
`CHANGELOG.md`.

## Reporting security issues

Do not disclose credentials, job payloads, or exploitable details in public
issues. Report security-sensitive behavior privately to the repository
maintainers.
