herdingcats 0.3.0

Deterministic rule orchestration for ambiguity-free turn-based games.
Documentation

herdingcats

Deterministic rule orchestration for turn-based games.

Author: Madeline Prelee (mprelee@gmail.com)

Overview

herdingcats is a generic engine for implementing deterministic, rule-driven turn-based systems.

It provides:

  • Explicit priority-ordered rule execution
  • Transactional state mutation
  • Undo / redo
  • Replay-safe hashing (FNV‑1a)
  • Rule enable / disable
  • Rule lifetimes (per-turn / per-trigger)
  • Event cancellation
  • Preview execution without committing state
  • Static, enum-based event dispatch
  • Compile-time enforced integer-backed priority

The engine is application-agnostic and does not prescribe game semantics.


Core Model

The engine is parameterized over:

  • S — game state
  • O — operation type (Operation<S>)
  • E — event enum
  • P — priority enum (#[repr(i32)], sealed)

State mutation occurs exclusively through Operation.

All irreversible transactions:

  • Are logged
  • Are undoable
  • Update the replay hash
  • Produce commit frames

Determinism Guarantees

  • No hidden state mutation
  • No dynamic event dispatch
  • No runtime type inspection
  • No unordered rule execution
  • Replay hash restored on undo / redo
  • Preview execution does not mutate history

All ordering is explicit via priority.


Intended Use

Designed for discrete, turn-based systems such as:

  • Roguelikes
  • Tactical strategy games
  • Card systems
  • Deterministic multiplayer simulations
  • Digital board games

Not intended for:

  • Real-time systems
  • Physics simulations
  • Dynamic scripting engines
  • Freeform narrative interpretation

Status

Pre‑1.0. API may change.


License

MIT OR Apache-2.0

AI Usage Policy (subject to change)

This codebase is being (co)written using AI frameworks and committed to enforcing idiomatic rust patterns where-possible. It's more important that the code adheres to good standards to the point where it is unclear whether it was written by a knowledgeable Rust expert or a very good LLM.