# How to contribute rustunnel is a small, focused project. Contributions should align with the project's purpose: a lab and development tunneling tool with strong security defaults. ## Work pickup - Check the CI status before starting work. - Open issues or PRs against the `master` branch. - Keep changes focused. The codebase is small enough that large refactors should be discussed first. ## PR process 1. Run the full test suite locally: `cargo fmt --check && cargo clippy --all-targets -- -D warnings && cargo test --all-targets` 2. Ensure E2E tests pass if your change touches the tunnel or SOCKS5 path. 3. Write tests for new behavior. The project uses inline `#[cfg(test)]` modules. 4. Update relevant wiki pages if your change adds or removes features. ## Review expectations - Security-sensitive changes (TLS, auth, framing) get extra scrutiny. - All CI jobs must pass: fmt, clippy, test, build, smoke, and E2E. - The project runs CI on Linux, macOS, and Windows. Avoid platform-specific code unless necessary (the signal handling module is the only current exception). ## Definition of done - Code is formatted with `rustfmt`. - Clippy warnings are resolved. - Tests cover the new behavior, including edge cases. - No `TODO` or `FIXME` comments are introduced (the project currently has zero).