diff --git a/GOVERNANCE.md b/GOVERNANCE.md index 0726f81..596ca51 100644 --- a/GOVERNANCE.md +++ b/GOVERNANCE.md @@ -19,8 +19,9 @@ This document describes how decisions are made and who does what. A change that lets vehicles collide isn't accepted, however much it helps delay. * **Through pull requests.** Every change to `main`, including the maintainer's own, goes through a pull request whose required checks pass: the tests on Linux, macOS and - Windows, the browser build, rustfmt and Clippy, the crate package, the license and - advisory checks, CodeQL, and DCO sign-off. Nobody can push to `main` directly. + Windows, test coverage of at least 80% of lines, the browser build, rustfmt and + Clippy, the crate package, the license and advisory checks, CodeQL, and DCO sign-off. + Nobody can push to `main` directly. * **With reasons.** The maintainer reviews contributions and decides whether to merge them, and explains the reasons when declining a change or asking for a different approach. If you disagree with a decision, say so in the issue or pull request. diff --git a/docs/architecture.md b/docs/architecture.md index 0cc68d1..3294ab9 100644 --- a/docs/architecture.md +++ b/docs/architecture.md @@ -3121,9 +3121,8 @@ permissions unless a job needs more. ```mermaid flowchart TB PR["Pull request"] - CI["Checks
CI, CodeQL and DCO;
10 are required"] + CI["Checks
CI, CodeQL and DCO;
11 are required"] FZ["Fuzz (weights), 60 s:
reported, not required"] - CV["Coverage, at least 80%
of lines: reported,
not required"] M["Merge to main
branch up to date"] PG["Pages: the browser
build, deployed"] SC["Scorecard
also weekly"] @@ -3133,23 +3132,23 @@ flowchart TB C["publish-crate
cargo publish to
crates.io"] PR --> CI --> M --> T --> R --> P --> C PR -.-> FZ - PR -.-> CV M --> PG M --> SC classDef ui fill:#fff3e0,stroke:#c05621,color:#3b1d06 classDef data fill:#f1f3f5,stroke:#5f6b7a,color:#1f2933 classDef safe fill:#fdecec,stroke:#c53030,color:#4a0f0f class PR,M,T,P ui - class CI,FZ,CV safe + class CI,FZ safe class PG,SC,R,C data ``` -The 10 checks that must pass before anything merges to `main`, with the branch up to +The 11 checks that must pass before anything merges to `main`, with the branch up to date: | Check | Workflow | What it does | |---|---|---| | Test (ubuntu-22.04), Test (macos-15), Test (windows-latest) | `ci.yml` | `cargo build --locked --release --all-targets`, then `cargo test --locked --release` | +| Coverage | `ci.yml` | Runs the tests on Linux with [cargo-llvm-cov](https://github.com/taiki-e/cargo-llvm-cov) and fails if they run less than 80% of the crate's lines, every file counted (CONTRIBUTING.md says how to measure it locally). They run one at a time, and under `cfg(coverage)` the tests that run many simulations at once run them in turn, because code built for coverage slows down many times over when several threads run it at once | | Web (wasm32) | `ci.yml` | Builds the app for `wasm32-unknown-unknown` | | Clippy | `ci.yml` | `cargo fmt --check` on the crate and the fuzz target, then `cargo clippy` with warnings as errors, for the native targets and the browser app | | Crate package | `ci.yml` | `cargo package --locked`, which builds the crate from the files crates.io would get | @@ -3159,13 +3158,6 @@ date: * **Fuzz (weights)** in `ci.yml` runs the fuzz target for 60 s from its seeds on the nightly toolchain, and uploads any crash. It isn't required. -* **Coverage** in `ci.yml` runs the tests on Linux with - [cargo-llvm-cov](https://github.com/taiki-e/cargo-llvm-cov) and fails if they run less - than 80% of the crate's lines, every file counted (CONTRIBUTING.md says how to measure - it locally). The tests run one at a time, and under `cfg(coverage)` the ones that run - many simulations at once run them in turn: code built for coverage counts what it runs - in counters that every thread updates, so threads running the same code at once slow - one another down many times over. It isn't required. * **`pages.yml`** builds the browser version with Trunk on every push to `main` and deploys it to GitHub Pages. * **`release.yml`** runs on a `v*` tag, or by hand to build unsigned packages: