Repository navigation
uv-manager 0.4.1
What changed for sites
uv, uvx and uvm stop doing metadata work on every invocation. uvm_export_env issued a
six-directory mkdir -p inside a umask 077 subshell on every call, defended in a comment as "a
handful of metadata operations". Measured, it is a fork, an exec, and — under GNU coreutils — one
EEXIST-failing mkdir(2) per path component of every operand, to resolve six directories that
already exist. The count grows with the depth of UVM_ROOT, so a deep scratch path costs more, not
less.
It now runs behind a six-way [[ -d ]] guard, placed outside the subshell. Six shell builtin tests
cost 15 µs and spawn nothing.
Measured against real uv 0.12.4: wrapper overhead above the exec'd binary falls from about 6.9 ms
to about 5.15 ms, and two of the three warm-path process creations are gone. Every measurement is
macOS on APFS — the cluster figure is unmeasured, and the part that transfers is the syscall
reduction rather than the milliseconds. A failing mkdir RPC cannot be served from a parallel
filesystem's client attribute cache, where a stat often can, which is why this matters more at rank
scale than the local numbers suggest.
Behavior is unchanged. A missing state directory is still created, under umask 077. Modes are
still not repaired — mkdir -p never chmodded an existing directory either. Parity with 0.4.0 was
driven across about fifteen state configurations, a 40-way concurrency race, three levels of wrapper
re-entrancy, and the tool/python non-exec path.
Documentation
- The
README.mddesign note records this as a rejection reversed by measurement, rather than
dropping the entry. - Documented wrapper overhead corrected from roughly 7 ms to roughly 5 ms.
- The
cp -rsymlink claim in the deployment notes corrected: GNU coreutils preserves symlinks under
-r,-Rand-aalike, while macOS and the BSDs dereference under lowercase-r. Use
git cloneorrsync -a.
Internal
Twenty-one [harness] commits to .agents/, the spec-driven factory this project is developed with.
Nothing a site deploys.
Upgrading
No action beyond the deploy. No new environment variable, no new subcommand, no configuration change.
The Lmod modulefile derives its prefix from myModuleVersion() and needs no edit; a site that
deploys per-version modulefiles has to add one for 0.4.1.
Sites tracking a moving main pick this up automatically. Sites pinned to a tag must re-clone:
git clone --branch 0.4.1 https://github.com/PurdueRCAC/uv-manager /apps/external/uv/0.4.1
git clone and rsync -a preserve the bin/ symlinks, which are what make the four entry points one
script.
The design record for this change is retained at spec/purge-resilient-run/.