LAVAFALL DEDICATED SERVER
=========================

The server listens on UDP port 5565 and speaks the original Infiniminer 1.5
protocol. Allow UDP 5565 through the host firewall and router if Internet
players will connect.

Linux:
  ./run-server.sh

Windows:
  run-server.cmd

macOS:
  ./run-server.command

Stop the server with Ctrl+C. Lavafall is free software released under the MIT
License. Project information and current downloads are at https://lavafall.org.

ROUND-SAFE CONTAINER UPDATES
============================

The openSUSE deployment script requests a drain before replacing a running
container. The server immediately stops accepting new players, lets connected
players finish the round, and reports when restart is safe. A disconnected
player's reconnect grace also counts as an active session.

If an update command is abandoned, its request expires and the server resumes
normal operation. The one-time transition from a server build that predates
this protocol requires --bootstrap-empty, and only after an operator has
independently confirmed that nobody is playing.

The private bind-mounted server-status.json contains the deployment handoff.
Container deployments also write a separate allowlisted aggregate document to
/opt/lavafall-public-status/status.json for the read-only website API. Neither
document contains player names, addresses, or reconnect identifiers.

OPT-IN PLAYER DEMONSTRATIONS
============================

Player demonstration capture is disabled by default. To make it available,
set LAVAFALL_DEMONSTRATION_CAPTURE=1 in the container environment. The default
output directory is user://demonstrations, which is retained by the existing
Lavafall app-data volume in the container deployment.

Each player controls only their own capture from in-game chat:
  /demo start
  /demo status
  /demo stop

These commands and the server's private replies are not added to chat history
or relayed to other players. Captures contain a pseudonymous ID, round context,
bounded gameplay state, and authoritative action outcomes. They do not contain
player names, chat text, network addresses, peer IDs, or reconnect tokens.

BOT PROGRESS TELEMETRY
======================

Container deployments keep a separate private bot-only progress timeline in
user://bot-telemetry/bot-progress.jsonl. It samples every ten seconds and also
records roster changes and round outcomes. Records contain the replayable world
seed, team economy, bot missions, positions, routes, and project progress, but
no human state, player names, chat, addresses, or reconnect identifiers.

The current and previous files are bounded to 64 MiB each. Set
LAVAFALL_BOT_TELEMETRY=0 to disable collection, or adjust
LAVAFALL_BOT_TELEMETRY_INTERVAL_SECONDS from 1 to 300 seconds. Bot telemetry is
for debugging, evaluation, and failure mining; it remains separate from opt-in
human demonstrations so existing bot behavior is not treated as ground truth.
