rustcrates.git / rete / CLAUDE.md
1@README.md
2
3- **No I/O, no async, no host vocabulary.** Nothing here may name Jev, a
4  model, a fact of any one host, `worker` or a runtime. A host's facts live
5  in its own `Domain`; the tests use a domain of their own for that reason.
6- **The network is the only decider.** `decide` evaluates the joins that a
7  drawing draws. Do not add a second path that decides from facts directly:
8  the picture would stop being the thing that runs.
9- **Rule order is priority**, in code and in a file. Loaded rules go after
10  compiled-in ones, so a user's rule cannot outrank the host's.
11- **Loading refuses by default.** `Domain::parse_*` returning `Err` is how a
12  host keeps an effect, end or note out of users' hands. Never loosen the
13  defaults, and never let a loaded rule name something the domain did not
14  put in its vocabulary.
15- **A trace is names, ids and counts.** A `Record` must never carry a value's
16  content; the domain's `value_name` is a name of a kind of value, not the
17  value.
18- **A change to `decide` must keep lmjtfy's tests passing unchanged**
19  (`packages/rules` there), since its behaviour is this function's.