- Shipped
- September 23, 2026 at 7:28 AM UTC
- Author
- Kamo
- Commit
- 05ecc14
The settings page and the nav option both check organization.isHostedComputers, and until now that was the whole gate. AppAvailabilityInterceptor never mapped /api/security/hosted-computers to anything, so an organization that lost the app kept a working API behind a hidden screen - which is the asymmetry this interceptor exists to prevent, and the one the achievements entry was added for. It matters more here than for a screen-only app. Every other gated prefix returns rows; this one spends a physical resource. The assign handler creates a KubeVirt VM holding 2-16 GiB of a node's memory, reachable with nothing but a session and MANAGE_HOSTED_COMPUTERS, and the scheduler bounds the fleet by REQUESTS - so an org whose app was switched off would go on taking capacity from the orgs that still have it. Every handler under the prefix is session-scoped: the administrator's assignment and capacity surfaces, and the member's /mine and /{id}/launch pair. None of it is a cross-service seam, so one entry covers it and gatedPathPatterns derives the registration. The agent endpoints are deliberately outside it. They live on ComputeService behind APIService, authenticate with a per-computer bearer token and carry no session for resolveOrgId to read - and a running machine has to keep reporting its storage while the app is being switched off around it. A computer that cannot check in looks like one that has stopped.
