# SH2103: The rules use what keeps them from being pure and deterministic

Source: https://zafnok.github.io/shuyi-engine/learn/errors/sh2103/

Class: content, exit code 1.

`shuyi lint` ran `cargo clippy` on the rules crate (`shuyi.ron`'s
`rules`), and it used something its fence bans (ADR-0032 §4): a hash map,
whose order changes from run to run; a float, which can come out
differently on another machine or the web; the clock; the environment;
a thread; a file; or luck other than the `SimRng` kept in the state. A
replay of the same commands must play the same everywhere. The rules
crate's `clippy.toml` gives each ban its reason, and its `lib.rs` denies
float arithmetic.

**How to fix it.** Use what the message's reason names: a `BTreeMap` or
`BTreeSet` for a hash map, whole numbers (tiles, turns, hundredths) for a
float, a turn count or a value passed in a `Command` for the time, the
game crate for files, and the state's `SimRng` for luck.

For example:

```text
crates/rules/src/lib.rs:403:34: error[SH2103]: use of a disallowed type `std::collections::HashMap`: its order changes from run to run, so replays differ: use BTreeMap
```
