AGPL-3.0-or-later · forever.

operations · production

Operate the process you actually have.

Boot, supervise, probe, deploy and investigate the stable resident firer without inventing an HTTP health surface.

A production runbook names the project room, binary, state volume, signal path and evidence check. nika serve stays a foreground process that a normal supervisor can own.

Refuse the deploy before the loop starts.

Run the same released binary from the production working directory. Version, arm report and dry sweep prove binary resolution, project discovery and cadence parsing without starting a resident loop.

cd /srv/nika/project
/usr/local/bin/nika --version
/usr/local/bin/nika arm --plain
/usr/local/bin/nika serve --dry --plain

Keep Nika in the foreground.

Give systemd, a container runtime or another supervisor the process lifetime. Pin WorkingDirectory and ExecStart so login shells and PATH never become production configuration.

[Service]
Type=simple
WorkingDirectory=/srv/nika/project
ExecStart=/usr/local/bin/nika serve --plain
EnvironmentFile=/etc/nika/project.env
Restart=on-failure
KillSignal=SIGTERM

Do not curl a port that does not exist.

The resident firer exposes no HTTP health endpoint. Liveness is the supervised process. Configuration readiness is a separate nika arm probe from the same cwd. Workload truth lives in decision lines and durable state.

process alive ─────────────── LIVENESS
nika arm exits 0 ─────────── CONFIG READINESS
beat decision + ledger ───── WORKLOAD TRUTH
trace verify ─────────────── RUN INTEGRITY

Follow one evidence path.

Preflight a new file before replacement. The resident loop keeps the last valid registry on a refused edit. When a beat surprises you, start at its one-line decision, inspect the matching arm history, then verify the referenced workflow trace.

nika arm --plain
nika trace ls
nika trace verify .nika/traces/<run>.ndjson