# Contributing to nido
Thank you for considering a contribution. nido is a public-bound extraction
of the operator's private daily-driver fork of forge-operator. Contributions
that improve the *public* surface -- bug fixes, docs, new managed CLIs,
new Ansible roles, new hook templates, new skills -- are welcome.
## Developer Certificate of Origin (DCO)
All commits MUST be signed off with the Developer Certificate of Origin:
```
Signed-off-by: Jane Doe <jane@example.com>
```
Use `git commit -s` to add the line automatically. The full DCO text is at
<https://developercertificate.org/>. PRs without DCO sign-off on every
commit will not be merged.
## Code of Conduct
This project follows the [Contributor Covenant 2.1](CODE_OF_CONDUCT.md).
By participating you agree to abide by it. Report unacceptable behavior
to <fschulz0787@gmail.com>.
## Conventional Commits
nido uses [Conventional Commits](https://www.conventionalcommits.org/) for
release-plz to auto-generate the changelog and version bumps. Examples:
- `feat(tasks): add fuzzy search to nido tasks list`
- `fix(build-queue): release lease when PSI gate trips`
- `docs(readme): clarify Windows install path`
- `refactor(llm-router): collapse two fallback chains into one`
- `chore(deps): bump rmcp to 1.4.0`
Breaking changes use `feat!:` or include `BREAKING CHANGE:` in the body.
## Development workflow
```sh
# Clone and bootstrap
git clone https://github.com/nash87/nido && cd nido
cargo build --workspace
cargo test --workspace
# Run the local scan gate before committing
lefthook run pre-commit
# Open a PR
git checkout -b feat/my-feature
git commit -s -m "feat: my feature"
git push origin feat/my-feature
gh pr create
```
## Pull request review
Every PR runs the CI gate (`test + clippy + fmt + deny + gitleaks`). PRs that
introduce new public CLI surface require:
1. `--help` text on every new subcommand and flag
2. At least one integration test that exercises the subcommand end-to-end
3. A docs entry under `docs/cli/` (auto-generated by `cargo xtask gen-docs`)
4. An entry in the relevant section of the next CHANGELOG (release-plz does
the wiring -- you just need a clean conventional commit)
PRs from AI agents should be reviewed and signed off by a human contributor;
please describe the testing you performed.
## Bidirectional sync with `forge-operator`
nido is downstream of `github.com/njbrake/forge-operator` (Brake's original)
and parallel to the operator's private `forge-operator` daily driver.
- **Upstream -> nido**: `xtask/sync-from-fop` pulls public-safe changes
from the private `forge-operator`. It runs gitleaks + cargo-deny as a
post-step. Any leak findings block the sync.
- **nido -> private fop**: `xtask/feature-parity-check` runs weekly,
lists subcommands in nido that should be backported, and writes a
diff report to `~/dev/_handoffs/feature-parity-YYYY-MM-DD.md`.
If your PR adds a new subcommand and there is a clear way to backport it
to private fop, mention it in the PR description. Not required.
## Supported OS matrix (v0.1.0)
- Linux: Fedora 43, Bazzite, Ubuntu 24.04 (best-effort)
- macOS: 14+
- Windows: 11 (TUI via WSL2, GUI via native Tauri MSI)
PRs that expand the matrix are welcome.
## Releasing
Maintainers only. `release-plz` opens version PRs against `main`; merging the
PR creates the tag, which fires the cargo-dist + tauri-action release
pipelines. Contributors do not need to think about releases.