Skip to content
Kassandra
On this pageWhy this is an application

What this is

Internal documentation for Kassandra — the rules, and where they are enforced.

Internal documentation. Not a design pitch and not a README: this is where the rules are written down in the order a person would ask about them.

Why this is an application

Because a number written in prose starts lying the moment the code changes.

Pages here reach into the simulation. The table of spells is built from SPELLS — the same record the server casts from — and a sentence that quotes a figure asks for it by name rather than stating it. Prose carries the reasoning, which is the part code cannot hold; figures come from the code, which is the part prose cannot keep up with.

The practical rule: if you find yourself typing a number, add it to src/figures.ts and ask for it instead. A player's health is not written on this page; it is asked for, and the simulation answers.

640

What is authoritative

Nothing here. This documents the simulation; it never defines it.

  • The rules live in libraries/domain/simulation and run on the server.

  • The wire contract lives in libraries/foundation/protocol.

  • The decisions and their reasons live in the ADR ledger, in .claude/skills/architectural-decisions. When a page explains why, it is usually restating an ADR — link to it rather than re-arguing it.

If a page and the code disagree, the code is right and the page is a bug.

Where to start

  • How damage is worked out — the whole path from a statistic to a health bar, in the order it actually happens.

  • Shields — absorption, and why the pools are spent in the order they are.

  • Statistics — the seven, and which of them answer each other.

Last updated Aug 3, 2026