Contributing Guidelines

We welcome contributions in the form of bug reports, bug fixes, new features, and documentation updates.

Contribution Policy

All contributions should align with the core engineering direction of navigate:

  • Keep a clear model-view-controller separation. See software architecture.

  • Minimize new dependencies when possible.

  • Avoid unnecessary configuration variables in configuration.yaml and experiment.yaml.

  • Discuss major refactors with the software team before implementation.

  • For microscope-control behavior changes, require live-system validation before merge into develop.

  • Use standard units in model/view/controller code:

    • Time: milliseconds

    • Distance: micrometers

    • Voltage: volts

    • Rotation: degrees

Contribution Workflow

For setup and submission mechanics (forking, cloning, environment setup, branch creation, and pull requests), follow Developer Install.

PR Quality Bar

Before opening a pull request, complete all required checks:

  1. Run formatting and linting: pre-commit run --all-files

  2. Run tests: pytest

  3. If documentation changed, run: conda run -n navigate make -C docs html -j 15

  4. Add or update tests for new or changed behavior

  5. Update documentation for user-facing or developer-facing changes

Code and Testing Standards

For coding style, type hints, docstring standards, linting/formatting policy, and testing guidance, see Code Quality.

Hardware Integration Guidance

For hardware concurrency, blocking communication patterns, and device interface requirements, see Hardware Communication Guidelines.

Where To Ask For Help

Contributor Behavior

All contributors are expected to follow the Code of Conduct.