perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LC_NUMERIC = (unset),
	LC_COLLATE = (unset),
	LC_TIME = (unset),
	LC_MESSAGES = (unset),
	LC_MONETARY = (unset),
	LC_ADDRESS = (unset),
	LC_IDENTIFICATION = (unset),
	LC_MEASUREMENT = (unset),
	LC_PAPER = (unset),
	LC_TELEPHONE = (unset),
	LC_NAME = (unset),
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LC_NUMERIC = (unset),
	LC_COLLATE = (unset),
	LC_TIME = (unset),
	LC_MESSAGES = (unset),
	LC_MONETARY = (unset),
	LC_ADDRESS = (unset),
	LC_IDENTIFICATION = (unset),
	LC_MEASUREMENT = (unset),
	LC_PAPER = (unset),
	LC_TELEPHONE = (unset),
	LC_NAME = (unset),
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").
login ok, csrf len 64
tr: write error: Broken pipe
tr: write error: Broken pipe
tr: write error: Broken pipe
tr: write error: Broken pipe
tr: write error: Broken pipe
2026-09-16T20:30:18Z  nextcloud      -> 202  {"ok":true,"message":"Telepítés elindítva – az állapot a kártyán követhető"}
tr: write error: Broken pipe
2026-09-16T20:30:18Z  immich         -> 202  {"ok":true,"data":{"warning":"Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát. Normá
tr: write error: Broken pipe
tr: write error: Broken pipe
2026-09-16T20:30:18Z  bookstack      -> 202  {"ok":true,"data":{"warning":"Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát. Normá
2026-09-16T20:30:19Z  privatebin     -> 202  {"ok":true,"data":{"warning":"Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát. Normá
2026-09-16T20:30:19Z  gokapi         -> 202  {"ok":true,"data":{"warning":"Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát. Normá
tr: write error: Broken pipe
2026-09-16T20:30:19Z  vaultwarden    -> 202  {"ok":true,"data":{"warning":"Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát. Normá
tr: write error: Broken pipe
tr: write error: Broken pipe
2026-09-16T20:30:19Z  paperless-ngx  -> 202  {"ok":true,"data":{"warning":"Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát. Normá
2026-09-16T20:30:19Z  jellyfin       -> 202  {"ok":true,"data":{"warning":"Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát. Normá
2026-09-16T20:30:19Z  mealie         -> 400  {"ok":false,"error":"Nincs elég memória az alkalmazás telepítéséhez. Szükséges: 200 MB, Elérhető: 136 MB (öss
2026-09-16T20:30:19Z  uptime-kuma    -> 202  {"ok":true,"data":{"warning":"Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát. Normá
tr: write error: Broken pipe
tr: write error: Broken pipe
2026-09-16T20:30:19Z  adventurelog   -> 400  {"ok":false,"error":"Nincs elég memória az alkalmazás telepítéséhez. Szükséges: 100 MB, Elérhető: 86 MB (össz
tr: write error: Broken pipe
2026-09-16T20:30:20Z  homebox        -> 202  {"ok":true,"data":{"warning":"Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát. Normá
all twelve deploys ACCEPTED (202 = accepted, not installed — R-536: the two are different things)
perl: warning: Setting locale failed.
perl: warning: Please check that your locale settings:
	LANGUAGE = (unset),
	LC_ALL = (unset),
	LC_CTYPE = "UTF-8",
	LC_NUMERIC = (unset),
	LC_COLLATE = (unset),
	LC_TIME = (unset),
	LC_MESSAGES = (unset),
	LC_MONETARY = (unset),
	LC_ADDRESS = (unset),
	LC_IDENTIFICATION = (unset),
	LC_MEASUREMENT = (unset),
	LC_PAPER = (unset),
	LC_TELEPHONE = (unset),
	LC_NAME = (unset),
	LANG = "en_US.UTF-8"
    are supported and installed on your system.
perl: warning: Falling back to a fallback locale ("en_US.UTF-8").

## CORRECTION — the line my own script printed is FALSE, and it is corrected here before anything else
My seeding script ended with „all twelve deploys ACCEPTED". **Ten were accepted; two were refused.**
The sentence was a fixed `echo` at the end of the script, printed without consulting a single result
— the exact "a script that announces a conclusion it never checked" failure this project keeps
re-learning, and it would have put a false line into tonight's record.

  ACCEPTED (202), 10:  nextcloud · immich · bookstack · privatebin · gokapi · vaultwarden ·
                       paperless-ngx · jellyfin · uptime-kuma · homebox
  REFUSED (400), 2:
     mealie        „Nincs elég memória az alkalmazás telepítéséhez. Szükséges: 200 MB, Elérhető: 136 MB…"
     adventurelog  „Nincs elég memória az alkalmazás telepítéséhez. Szükséges: 100 MB, Elérhető: 86 MB…"

Note also that nine of the ten acceptances carried a warning of their own:
  „Az alkalmazások csúcsterhelése meghaladhatja a rendelkezésre álló memóriát…"
so the box was telling the truth about its memory on the way up, and then refused the last two
outright. The refusal is the controller's memory guard doing its job, fail-closed and in plain
Hungarian with the numbers in it.

**Consequence for the drawn schedule, stated now rather than discovered at 23:30:** rounds 1 and 4
act on `adventurelog` and `mealie`, and round 6 on `adventurelog` — apps that are NOT installed.
The schedule was drawn before the night and is not being re-drawn; what changes is that those rounds
must either act on an app that exists, or be recorded as unrunnable. That decision is made and
recorded explicitly, not silently.

Also true and worth keeping: „202 = accepted, not installed" (R-536). How many of the ten actually
finished installing is a separate measurement, taken next.

## The memory facts behind the two refusals — measured
    the VM (the whole box):      7939 MB total, 5814 MB available
    the CUSTOMER GUEST (LXC 9201): **memory: 4096, swap: 512, cores: 3**
    inside the guest at the moment of the refusals: 4096 MB total, ~3685 MB available
    containers actually running then: 4 (cloudflared, felhom-controller, filebrowser, traefik)

So the box had ~5.8 GB free while the guest the apps live in was capped at 4 GB — and the guard
refused the eleventh and twelfth apps against the guest's cap, counting the memory already COMMITTED
by ten in-flight installs rather than the memory currently in use. That is the honest way to count
it (otherwise ten simultaneous pulls would all be admitted and then fight), and the message quoted
the two numbers it compared.

**This is the constraint that decides whether tonight's household can be twelve apps at all.** The
brief asks for the twelve of BIGNIGHT. The box as installed gives its customer guest 4 GB. Nothing
has been changed yet: first the ten in-flight installs are allowed to finish, because the memory
picture during a pull is not the memory picture afterwards, and a decision taken on the wrong
picture is worse than a late one.

## DECISION — what happens to the rounds that name apps which are not installed
Three rounds name apps the box refused to install: round 1 (`offsite-run adventurelog`), round 4
(`offsite-run mealie`), round 6 (`backup-system adventurelog`).

**The schedule is not re-drawn.** It was fixed from the seed before anything ran, and re-drawing it
now — after seeing which apps happened to fit in memory — is exactly the "choose the night after the
fact" failure the seed exists to prevent.

What the rounds actually do, and why this costs less than it looks:

  * **`offsite-run` is a TIER action, not an app action.** The off-site leg is repo-global — one
    `LastRun` for the whole repository, no per-app run time — so rounds 1 and 4 exercise the tier
    exactly as drawn. The named app is which app's row I read afterwards; where that app is absent,
    the round records the tier's own result and says the app was not installed.
  * **`backup-system` (round 6) is a whole-box action** and does not depend on the named app either.

So all three rounds run as drawn; what changes is that their "what the customer saw" cell reports the
tier or the whole-system page rather than that app's row. Each affected round says so in its own line
rather than leaving a reader to assume the app was there.

**And the memory refusal is itself a finding, not just an inconvenience:** a fresh box built to the
documented shape gives its customer guest 4 GB, and the twelve-app household of BIGNIGHT does not fit
in it. Nothing was resized to make the drill comfortable.

## Deploy progress, and a second instrument lesson
At 20:32:59Z, twelve minutes after the ten deploys were accepted:
    app.yaml recorded:  10        (the box registered all ten)
    containers running:  5        (cloudflared, felhom-controller, filebrowser, traefik, **privatebin**)
    guest memory available: 3818 MB
So exactly one of the ten household apps was actually up; the rest were still pulling images. This is
R-536's distinction in the flesh: ten "telepítés elindítva" acceptances, one installed app.

**The instrument lesson (my second tonight):** I read the deploy watcher with
`tail -6 … | grep -vE "locale|…"`, and the locale warnings filled the whole tail, so the watcher's
ONE real line was filtered out and the watcher looked dead. I had already declared one watcher dead
tonight for a different reason and killed it with a `pkill` that killed itself. The fix both times
was the same: **ask the box directly instead of trusting my own reporting layer.** The box answered
in one call, and the watcher turned out to have been working the whole time.
