# Contributing to Bascule ## Development Setup ```bash git clone https://github.com/your-org/bascule.git cd bascule cargo build --all cargo test --all ``` ## Architecture Bascule is a Rust workspace: | Crate | Purpose | |-------|---------| | `bascule-core` | Library — SSH server, auth, PTY, proxy, container, hooks, store | | `bascule-server` | Binary — SSH proxy + management API (axum) | | `bascule-auth-agent-id` | Optional — Entra Agent ID auth | | `bascule-shell` | Binary — Identity-aware login shell with TPM | | `bascule-dashboard` | Library — Dioxus UI components | | `bascule-dashboard-web` | Binary — WASM web dashboard target | ## Testing ```bash cargo test --all ``` ## Code Style - `cargo fmt` before committing - `cargo clippy` must pass - No `unwrap()` in production code - All public items need doc comments ## Pull Request Process 1. Create a feature branch 2. Ensure `make ci` passes 3. Update docs if adding features 4. Submit PR against `main` ## Commit Messages Format: `type: description` Types: feat, fix, docs, chore, refactor, test ## Developer Certificate of Origin (DCO) All contributions must be signed off under the [Developer Certificate of Origin](DCO) (DCO Version 1.1). Every commit must include a `Signed-off-by` line: ```bash git commit -s -m "feat: my contribution" # Result includes: Signed-off-by: Your Name ``` ### What DCO means - You certify you have the right to submit the contribution - Your contribution is licensed under Apache 2.0 - You **retain copyright** to your contribution - You do NOT assign ownership to Guildhouse ### Corporate contributions If contributing on behalf of your employer, ensure your employer permits the contribution under Apache 2.0. ### Why DCO (not CLA) - DCO doesn't assign rights — you keep your copyright - DCO is lightweight — one line per commit, no legal review - DCO is standard — used by Linux, Kubernetes, CNCF projects See [GOVERNANCE.md](GOVERNANCE.md) for the full IP and dispute resolution framework. ## License By contributing, you agree your contributions are licensed under Apache 2.0.