The previous normalization logic aligned the upper bound using (b // 100) * 100 + 99, which rounded down to a block start and then extended to +99. For any input where the upper bound did not already end in 99 (such as 10000-15000 or 10000-20000), this spilled over by (99 - (b % 100)) ports past the user's requested range (e.g. 10000-15000 became 10000-15099). Ports outside the user's input may be in use or unavailable. Align the upper bound strictly inward so each allocated block is a subset of the input: - calculate hi as ((b + 1) / PortsPerUser) * PortsPerUser - 1 (ending in ...99 <= b) - mirror the calculation in scripts/00-ip-ask.sh normalize_user_ports - update unit tests in internal/cfg to verify strict inward alignment - update docs/configuration.md examples and container capacity readouts
Documentation
Technical documentation for vpsmgr. All docs are in English.
| Doc | What it covers |
|---|---|
| architecture.md | System design: components, storage, network, security, traffic, users and user groups, image, install/uninstall lifecycle |
| configuration.md | Full reference for /etc/vpsmgr/config.yaml |
| ipv6.md | IPv6 pass-through design: per-account blocks, prefix support, routing, installer flow |
| ipv6-ndp-responder.md | Why prefix mode replaced ndppd with an in-tree NDP responder, design hardening, and what to test at scale |
| web-ssh.md | The browser terminal: how it reaches a container, how a session survives a dropped connection, and how to disable it |
| development.md | Building, testing, releasing, conventions |
See also AGENTS.md at the repo root — short version aimed at AI coding agents.