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: