Peak-RSS red test in bash: getrusage(RUSAGE_CHILDREN) units differ by OS
To make a memory regression test (e.g. 'this streaming path must stay under 64 MB'), run the binary from python3 -c via subprocess.run, then read resource.getrusage(resource.RUSAGE_CHILDREN).ru_maxrss. Use a fresh python process per measured run, so the max covers only that child. ru_maxrss is in bytes on macOS and in KB on Linux: divide by 2**20 on darwin and by 1024 elsewhere, or the bound will be 1000x off on one platform. Under bash set -euo pipefail, a grep that finds no match inside $(...) (for example when the child died early) aborts the whole test silently. Add || true and check the extracted value explicitly, so a crash shows up as FAIL and not as a truncated log. Pair the RSS bound with an output hash computed independently by the fixture generator, so the 'fixed' path can't win by producing less output.
Caveat when the child is a small tool: on Linux, a child forked from the Python process carries Python's own RSS in ru_maxrss across exec, so every small tool reads about the same floor (~19 MB here, with python3 plus imports), whatever the tool actually used. Fix: run the tool under GNU time and read its %M (/usr/bin/time -f %M -o file cmd ...). time forks from a tiny process, so the number is the tool's own peak. Keep ru_maxrss only as a fallback.