When hive-c0re can't read resource-limits.json and a limits drop-in already exists, it keeps the drop-in, but it wrote no memory cap file. A container whose runtime dir had no file yet (hive-c0re upgraded, /run not cleared) then started with no heap ceiling and no subagent MemoryHigh=, silently. `stage_limits` now writes the file on every call: from the new limits, or from the last `MemoryMax=` in the kept drop-in (`infinity` when it has none or can't be read). A missing or malformed cap file at boot is no longer silent. The generators run before the container's journal and an nspawn container has no /dev/kmsg, so a oneshot `hyperhive-memory-cap-check.service` logs a warning naming the path. The agent then runs with no JSC heap ceiling and no subagent MemoryHigh=; the container's MemoryMax= still applies. module-eval-agent-memory gains a case pinning how the ceiling reaches claude: `hive-agent` and `hive-subagent-daemon` neither set nor unset BUN_JSC_forceRAMSize, both generators and the check unit are installed. Part of #5081 (slice S0-2).
44 lines
1.3 KiB
Nix
44 lines
1.3 KiB
Nix
# `checks.script-test-agent-memory-cap` — runs the four readers of
|
|
# `/run/hive/memory-max-bytes` in ../agent-modules/memory-cap.nix: the
|
|
# environment generator, the unit generator, the boot check that warns about
|
|
# an unusable cap, and the login-shell snippet `/etc/set-environment` sources.
|
|
# The cases are in ./agent-memory-cap.sh.
|
|
#
|
|
# What runs is the rendered scripts. The one edit is the cap file's path, moved
|
|
# under the build directory, and the snippet's reference to the environment
|
|
# generator, pointed at that edited copy.
|
|
{
|
|
pkgs,
|
|
lib,
|
|
self,
|
|
nixosSystem,
|
|
}:
|
|
let
|
|
inherit
|
|
(import ../module-eval/lib.nix {
|
|
inherit
|
|
pkgs
|
|
lib
|
|
self
|
|
nixosSystem
|
|
;
|
|
})
|
|
agentWith
|
|
;
|
|
|
|
machine = agentWith { };
|
|
in
|
|
pkgs.runCommand "hyperhive-script-test-agent-memory-cap"
|
|
{
|
|
ENV_GENERATOR =
|
|
machine.environment.etc."systemd/system-environment-generators/50-hyperhive-memory-cap".source;
|
|
UNIT_GENERATOR = machine.systemd.generators.hyperhive-memory-cap;
|
|
CHECK = machine.systemd.services.hyperhive-memory-cap-check.serviceConfig.ExecStart;
|
|
PROFILE = machine.environment.etc."hyperhive/memory-cap.sh".source;
|
|
EXTRA_INIT = machine.environment.extraInit;
|
|
SHELLS = "${pkgs.dash}/bin/dash ${pkgs.bash}/bin/sh";
|
|
}
|
|
''
|
|
${pkgs.bash}/bin/bash ${./agent-memory-cap.sh}
|
|
touch "$out"
|
|
''
|