You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Contracts the CI gates protect. Each line is enforced by a check listed in the right column. Change an invariant only with a matching change to the gate.
Build & toolchain
invariant
enforced by
Rust toolchain pinned to the channel in rust-toolchain.toml
rust-toolchain.toml consumed by dtolnay/rust-toolchain in .github/workflows/rust-quality.yml
cargo build --release --workspace --locked succeeds with -D warnings
rust-quality.yml step "build"
Every binary --help returns in < 200 ms on dev hardware
manual check; benchmark step not yet wired in rust-quality.yml
Source quality
invariant
enforced by
cargo fmt --all -- --check is clean
rust-quality.yml step "rustfmt"
cargo clippy --workspace --all-targets is clean with -D warnings
rust-quality.yml step "clippy"
Test suite is green: cargo test --release --workspace --locked
rust-quality.yml step "test"
No file in crates/**/*.rs exceeds 700 LOC (soft cap 400)
review-time; no automated gate yet — proposal: scripts/file-budget.sh
Toast announcements use adw::ToastOverlay (role=status) for transient state
enforced by widget choice
Performance budgets
Target budgets (not yet wired into CI; validated manually on a VM).
metric
budget
big-webapps-exec size (release, stripped)
≤ 800 KB
big-webapps-gui size
≤ 7 MB
big-webapps-viewer size
≤ 3 MB
Manager cold RSS @ +1 s
≤ 90 MB
Viewer cold RSS @ +1 s
≤ 180 MB
Manager idle wakeups/s
≤ 5
Viewer idle wakeups/s
≤ 10
"Create webapp" p50
≤ 800 ms
"Launch webapp" p50
≤ 700 ms
CI test runtime
≤ 30 s
Enforcement entrypoint
The single committed enforcement point is .github/workflows/rust-quality.yml
(this file plus that workflow). Internal audit scratch is local-only and not
shipped; every contract above repoints to the real gate, the source path, or an
honest "review-time" / "not yet wired" marker.
How to extend
To add an invariant: file a row above with a concrete enforcement path. To weaken one: open a PR that updates both this file and the enforcing check in the same diff. Drift between the table and the gate is a bug — reviewers should reject either change in isolation.