Two defect classes surfaced while driving restores on a shared dev box (#850, #851). Each got a deterministic regression test, but the classes are broader than the instances, and the chaos fuzz can hold the line for the class.
Class 1: a companion process dies and the failure blames a downstream symptom
pasta died on a port conflict after writing its PID file and creating its TAP, so three consecutive runs failed with Cannot find device "pasta0" while pasta's own Address already in use reached no log (#851). The instance is fixed; the class is any companion (pasta, holder, UFFD serve, egress proxy) dying between a readiness signal and the next consumer of what it provides.
Proposed fuzz oracle: extend the failpoint harness with a companion-kill fault (SIGKILL one named companion at a failpoint chosen by the schedule). Invariant checked on every failed run: if a companion died, the propagated error text contains that companion's name and its last stderr line. The existing ModelBarrier-style event log can carry the "companion X died at step Y" fact; the oracle greps the run's error against it. This turns "the error blamed the wrong thing" from a human observation into a red test for every companion at every step.
Class 2: a helper binary resolves shared host config differently than podman
skopeo read /etc/containers/storage.conf literally while rootless podman remapped it, so an image podman had just built was unexportable (#850). The class is any helper (skopeo, crun, fuse-overlayfs) interpreting host-wide config differently than the tool fcvm pairs it with.
Proposed CI arm rather than fuzz: a hostile-host-config matrix leg that runs the unprivileged suite with CONTAINERS_STORAGE_CONF pointing at a conf pinning a root-only runroot, mirroring the config-managed hosts where this bit. Cheap (env var plus one file), and it would have made #850 a red CI leg instead of a field failure.
Both oracles verify diagnosability, not just correctness: a failure must carry the evidence needed to attribute it (the standing rule in AGENTS.md's CI-capture section).
Two defect classes surfaced while driving restores on a shared dev box (#850, #851). Each got a deterministic regression test, but the classes are broader than the instances, and the chaos fuzz can hold the line for the class.
Class 1: a companion process dies and the failure blames a downstream symptom
pasta died on a port conflict after writing its PID file and creating its TAP, so three consecutive runs failed with
Cannot find device "pasta0"while pasta's ownAddress already in usereached no log (#851). The instance is fixed; the class is any companion (pasta, holder, UFFD serve, egress proxy) dying between a readiness signal and the next consumer of what it provides.Proposed fuzz oracle: extend the failpoint harness with a companion-kill fault (SIGKILL one named companion at a failpoint chosen by the schedule). Invariant checked on every failed run: if a companion died, the propagated error text contains that companion's name and its last stderr line. The existing
ModelBarrier-style event log can carry the "companion X died at step Y" fact; the oracle greps the run's error against it. This turns "the error blamed the wrong thing" from a human observation into a red test for every companion at every step.Class 2: a helper binary resolves shared host config differently than podman
skopeo read
/etc/containers/storage.confliterally while rootless podman remapped it, so an image podman had just built was unexportable (#850). The class is any helper (skopeo, crun, fuse-overlayfs) interpreting host-wide config differently than the tool fcvm pairs it with.Proposed CI arm rather than fuzz: a hostile-host-config matrix leg that runs the unprivileged suite with
CONTAINERS_STORAGE_CONFpointing at a conf pinning a root-only runroot, mirroring the config-managed hosts where this bit. Cheap (env var plus one file), and it would have made #850 a red CI leg instead of a field failure.Both oracles verify diagnosability, not just correctness: a failure must carry the evidence needed to attribute it (the standing rule in AGENTS.md's CI-capture section).