fix(egress,ctl): survive a dead hostname, name the right workspace #11
Loading…
Reference in a new issue
No description provided.
Delete branch "fix/feedback-notes-triage"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
A triage of the agent feedback log (62 entries, all projects, Oct 5-28). Three
failure classes were worth fixing in code; the rest were stale (the MCP-abort
saga was already fixed by deferring the attach, and remote allowlist refusal is
already loud) or belong to a machine's host-action policy.
Egress: one dead hostname no longer takes the control plane down
A
[[egress.tcp]]rule whose host stops resolving abortedrun.py/agent.pystartup (exit 3). That took every umwelt tool with it - including the
umwelt_egress removecall that would have fixed the rule - so the only way outwas hand-editing
.umwelt.toml. Recorded three times, in three workspaces.resolve_tcp_hosts_tolerantresolves each rule independently and returns(pairs, unresolved); the strictresolve_tcp_hostskeeps its"resolve or raise" contract for callers that want it.
prepare_egress_hooksis the startup path (both front-ends plusrecreate):an unresolvable rule is skipped with one stderr warning and recorded on
EgressState.unresolved.umwelt_egress listreportsunresolved, and a rule absent from therendered ruleset is no longer advertised as
direct(only what the kernelactually permits is direct).
umwelt_egress addresolves the host at write time and returns awarningwhen it does not resolve: the rule is saved, but the agent learns it is inert
before the next start rather than after.
The trade is explicit: a typo now degrades to "no access, loudly reported"
instead of "no control plane, hand-edit to recover".
umwelt-ctl stop: name the right workspace
umwelt-ctl stop reflect, run from a checkout whose root is~/dev/reflect,resolved the package subdir
~/dev/reflect/reflect, stopped nothing, andreported a misleading "control plane unreachable; try --hard".
A directory target with neither a socket nor a container is now refused with
the nearest parent sandbox named - for
--hardtoo, which previously printednothing and "succeeded". A nested workspace that has its own sandbox still
stops normally (pinned by a test), so the hint cannot fire on a real target.
Exec env: writable build caches
$HOME/.cacheis a read-only mount, souvandpipfailed with"Failed to initialize cache ... Read-only file system" in project after
project. Every exec now carries
XDG_CACHE_HOME=/tmp/umwelt-cacheplusUV_CACHE_DIRandPIP_CACHE_DIRunder it. Container-local by design: itremoves the failure, not the re-download after a recreate, and a command's own
exportstill wins.Docs
The egress section, the quirk list (uv/pip cache defaults,
curl --noproxy '*'for a direct rule - LAN rules want an IP, the gateway does not resolve LAN
names,
pkill -fmatching its own wrapper shell,$HOMEinside the sandboxbeing synthetic), the skill's network reference, and the
AGENTS.mdhygienescan (wrapped in
bash -c: dash has nosource, so the bare form exited 127and read as clean).
Verification
python3 -m pytest -m "not integration and not root and not mitmproxy":1187 passed, 44 deselected.
AttributeError/KeyError/ConfigError/ misleading-stop) before the code that makes it pass.xxd,pngquant,python3-pil) went into a machine-local image overlay ratherthan this repo, so the public image is unchanged.