No browser caller exists, so no page needs to read the daemon. The wildcard let any page read /gpu-permission and /operator-state.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A real daemon on stub wsl.exe and nvidia-smi.exe runs one job held open by the test; requests during
it are 503 source slot, the slot frees at the job's end, and the next job is admitted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
POST /gpu-permission and POST /motion/generate now require Content-Type application/json and
refuse a request whose Origin is present and not the daemon's own loopback origin, 403 cross-site,
before the body is read. The blanket OPTIONS handler that approved any preflight is deleted.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
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>
The household's use is no longer detected. gpu-probe.mjs, the PowerShell probe
child, the hysteresis/3D/full-screen/own-VRAM rules, three env variables and the
README paragraph go; the gate keeps only the single slot and the placement
refusal until the permission lands in the next commit.
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>
One owner for "may heavy GPU work start": numbers-only samples (full-screen
state, sustained 3D use, host free VRAM) in, { inUse, since, checkedAt,
probeOk } out; fail closed at start and when the probe goes stale.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>