Running a Realm

A realm is an OTP release, a PostgreSQL history, an Ed25519 identity, an archipelago.toml, and a body of authored content. The current code runs one default realm per node. Multi-realm concepts exist in stream IDs and tests, but the SSH boot path still reads one configured default_realm and default_start_room.

The working surface

The engine already provides:

The sea layer, cross-realm transfer, customs, sealed mail, provenance chains, confederations, moderation console, archive, and atlas are not operational yet.

Authoring content

The durable source format is Markdown:

content/<realm>/rooms/*.md
content/<realm>/npcs/*.md
content/<realm>/items/*.md
mix content.new room my-realm/harbor
mix content.new npc my-realm/keeper
mix content.validate my-realm
mix content.seed my-realm

Rooms use frontmatter for identity and exits, an H1 for name, the first italic paragraph for the brief, body prose for the full description, and ## Details / ### name sections for examinable features. NPC headings encode greetings, topics, gift reactions, action reactions, idle lines, and schedules.

Seeding is additive. If a stream already contains events, mix content.seed skips it. Edit the source before first seed or use build-mode events afterward.

Live modes

The session model recognizes four modes:

ModePromptRequired capability
play>none
buildchart>:write
scriptrig>:author_scripts
adminwatch>:realm_admin

The mode and command implementations are tested, but the current SSH account login does not load a capability into the connection state. Operators can exercise them through an embedded or test-harness connection; production account-to-capability assignment still needs wiring.

Tending the node

Watch PostgreSQL pool pressure, NIF failures, SSH and WebSocket connection rates, LLM envelope consumption, and federation link state. The admin dispatcher currently covers LLM budgets, ambient line-bank review, partial harbormaster controls, and peer management. It does not yet provide general player kick/ban/trust commands.

An operator should read absence as a boundary. If a command appears in a design specification but has no dispatcher or handler in the running branch, it is not part of the realm.