# Contributing Solo project. External contributions aren't accepted yet, the design is still moving. When that changes this file will grow. ## Working in this repo - Design and load-bearing decisions live in `~/Wiki/quasi-overview.md`, not here. - Work backlog is in GoingsOn (project `quasicoherent`), not `todo.md`. - Rust 2024 edition, latest stable toolchain. - `cargo deny check` must pass before commit. No GPL/LGPL/AGPL, ever. - `cargo fmt` + `cargo clippy --all-targets` clean. - Commits are concise, imperative, no emoji. ## The rule this repo exists to hold **Nothing in `quasi-router` may import a host crate.** Not `tauri`, not `axum`, not `wry`. Those are adapters written on top of the router, and the moment one of them appears in its dependency tree the stack has a host again. The same rule applies one level up: the router returns a description, never markup. A route that returns HTML is a webview route wearing a neutral name. ## Admitting a new boundary quasi owns seams, not vendors. Before adding a crate or a trait that wraps a dependency, answer one question: **Which two implementations does this have, today or already committed to?** If the answer is one, it is an indirection and it does not belong here yet. The lesson is recorded in `~/Wiki/makeover-geometry.md`: the hardest open question in that crate only got answered because a second consumer forced it, and the window to move the API shut within 48 hours of adoptions landing. Boundaries enter when the second implementation exists, not when it is imagined. Two further exclusions, both deliberate: - Ubiquitous and stable with no plausible alternative (`tokio`, `serde`, `tracing`, `chrono`, `uuid`, `thiserror`). Wrapping buys nothing. - Dependencies whose value *is* their API surface. `sqlx`'s compile-time-checked queries are the reason to use it, so quasi configures the driver and runs the migrations and queries stay written against `sqlx`. ## Adding a component crate Crates are scaffolded when they start, not up front: ``` cargo new --lib crates/quasi-wry ``` Then add it to `Cargo.toml`'s `[workspace] members`, add the `[lints] workspace = true` block, and inherit `edition` / `rust-version` / `authors` / `repository` / `license` from `[workspace.package]`.