| Russelfile | ✅ | One port model (#41), service.args (#43), checks at load time (#44), [database] removed (#40) |
| Deploys pinned to commits | ✅ | service.name is the identity (russel-dev#446), all settings come from the Russelfile (russel-dev#447), each deployment records its commit (russel-dev#448) |
| Containers | ✅ | Readiness checks the app itself (russel-dev#462), service.cpus applies (russel-dev#468), secrets passed as Podman secrets (russel-dev#457) |
| Apps run unprivileged | ✅ | By default on both runtimes; user = "root" opts out (#66) |
| Safe updates | ✅ | Candidate health is watched through proxy-confirmed cutover and drain; failed rollback confirmation retains managed backends (contract) |
Dedicated russel account | ✅ | The installer runs everything as an unprivileged system account (russel-dev#515) |
| MicroVMs without root | ✅ experimental | passt networking (russel-dev#461, #47) |
| MicroVM feature parity | ✅ experimental | service.args (russel-dev#463), [[ports]] and [[volumes]] (#42), restart = "unless-stopped" (russel-dev#467), read-only root (russel-dev#469) |
| Example CI | ✅ containers, manual for microVMs | Every container example deploys and answers on each PR (russel-dev#474). The microVM run is started by hand, because building the kernel on a CI runner takes hours (russel-dev#470). |
| Nix GC roots, test isolation | ✅ | #45, #46 |
| Licensing | ✅ | LICENSE, kernel source tarball, dashboard third-party licenses, SECURITY.md, DCO (russel-dev#418, russel-dev#421, russel-dev#424) |