gpu-tenancy.mjs judges permission, then the one slot, then one host free-VRAM
read per admission. The permission is a gamecult.vili.gpu_permission.v1
document in vili.service.cc, set only from loopback at POST /gpu-permission;
absent means not allowed. The daemon holds one CultCache instance. Tests pin
the gate with fake ports and the daemon edge over HTTP, including the slot
wiring through acquire() (finding s2 slot-wiring-unpinned).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
acquire() judges at the slot: household signals first (admission), then a held slot (slot);
nothing queues, so a request can no longer wait on the worker lock past a changed gate. While
Vili's job holds the slot, and until free VRAM recovers to its pre-job level (capped), low free
VRAM is not the household's; full-screen and 3D always count. A sample with no resolved 3D
counters is a probe fault and the gate fails closed. The placement 503 carries no gate status.
A malformed VILI_GPU_* override refuses to start, naming the variable.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drops the claim that the child's 2 GiB check refuses under contention
(closes gpu-busy-blind's README overstatement).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Serves motion-pipeline fork: which motion model and text encoder Vili runs
(follow_up kimodo-v1-2).
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Campaign motion-pipeline, opened 2026-10-20 at the operator's word; first
consumer is the StreamPixels RPS duel.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>