mikronova/draupnir
Commits
ee46d0260049Merge relruna/sealed into main (lane RELBUILD-RUNA): BootSpec cap_drop, read_only_rootfs, tmpfs and never_pull reach the engine (a never-pulled missing image is refused by name); unnamed stays byte-identical. Gate (ci4, dwarf): container:: 88/08a51241d1485GREEN: BootSpec cap_drop, read_only_rootfs, tmpfs and never_pull reach the engine (HostConfig.cap_drop/readonly_rootfs/tmpfs; a never-pulled missing image is refused by name); unnamed stays byte-identical (lane RELBUILD-RUNA)02fff1b53ed1RED: a sealed container (read-only root, capabilities dropped, tmpfs, never pulled) reaches the engine (lane RELBUILD-RUNA)3c43cc51431fMerge fix/small-4-2026-10-25 into main: no file addresses our repositories on the old forge (A28 N7-left)8435a365d095GREEN: the README and a doc link name tunnr's, Skidbladnir's and edda's real homes (A28 N7-left; guard 4/0; docs and a comment only)d995bc4a6641TEST: no file addresses our repositories on the old forge (A28 N7-left; RED: 3 lines, README links and a doc link)4e18233fe90eMerge v2/n7-a28-small-2026-10-25: every repository = names this repository's real home, with a guard test (A28 L17)0bbc60f3267cGREEN: every repository = names this repository's home (A28 L17)d0a4d094dfc1RED: every Cargo.toml names this repository's real home and none names the old forge (A28 L17)f6eadeda56e2Merge fix/rotaryengine-registry-2026-10-22 into main: rotaryengine from crates.io only, one engine copy in every downstream lock (holger stinky 16/28)59d5270fcf13rotaryengine from crates.io only: one copy of the engine in every downstream lock (holger stinky 16/28)5ecbc8385952Merge fix/log-frames-join-split-lines: container log lines longer than a frame come back whole39bc80fbcb2fcontainer logs: a line split across engine frames is joined back per stream (podman cut a bench's 8 KiB+ JSON envelope into frames handed on as lines; the bench filing found no envelope)7fbfc31d4028Merge fix/engine-drop-in-async-2026-10-17 into main: the engine's tokio runtime shuts down in the background on drop, so a ContainerBoot dropped inside async code (dwarves-server startup probe) no longer panics. Red→green: an_engine_dropped_inside_async_code_does_not_panic; lib (oci) 179 pass, the qemu cloud-shape red is pre-existing59e49b706db4Engine runtime shuts down in the background on drop: a ContainerBoot holding a live engine dropped inside async code (nornir's startup probe → dwarves-server panic 'Cannot drop a runtime in a context where blocking is not allowed') no longer panics. Red first: a lazy engine over a never-dialled socket dropped inside a multi-thread runtime panicked; green with EngineRuntime (Deref to Runtime, shutdown_background in Drop). Lib (oci) 179/1, the one red is the pre-existing time-dependent qemu cloud-shape testc24431afdd51Merge onebox-exec-2026-10-17 into main: ContainerControl::exec_streaming — one process in a running container with its env, user and working dir, stdout/stderr streamed as bytes and returned whole, exit code read until the exec ends; several at once in one container. Live test (arm declared): env/user/dir, exit 7, a 200 000-byte line whole, 4 concurrent 2 s execs in 2.1 s (loki). Lib 179 (oci) / 146 green4f680c05ddc9container: exec_streaming — one process in a running container with its env, user and dir, output streamed as bytes, exit code read until the exec endsf7cdbe11d49fMerge fix/buildthing-sweep-2026-10-16 into main: build thing: draupnir-build-thing named with its reasond77f8d83b702build thing: draupnir-build-thing named with its reason685acfb32859publish prep: repository points at the code's real home (codeberg.org/mikronova/draupnir)bdb471a7bd22publish prep: names out of the shipped files, dev notes out of the package170f4a6c24adpublish prep: versions for the crates.io release75336c672f31tests: the cmd/ports matrix row follows 60ffb06 — a KVM port is a forward, not a refusal05c00b21796ftests: redfish_server_conformance compiles on sha2 0.11 again2aa36a7b941bMerge kvm-guest-shape (370944d) into main: tunnr release-3's BootSpec shape on the 0.2.0 Kind model9de2c99572bedeps: bollard back to 0.20 (0.21 deferred)ce7b9f3e022ddeps: bollard 0.21, libcontainer 0.7, criterion 0.8188fa5a9956eW3 crypto bump: rcgen 0.13 -> 0.14, sha2 0.10 -> 0.11685241fd1059toolchain: re-pin nordisk-cargo-toolchain 3d5115ba… → 668468e7…25bab5fac4700.2.0: `Backend` → `Kind { Vm, Container, BareMetal, Exe }` — the spec says WHAT starts, the `&dyn Boot` passed to `boot()` says which enginef487a4255eafBootOrder::DiskThenMedium: -boot order=cd with no -no-reboot — the blank-disk install (a blank boot disk falls through to the CD, the installer reboots and the laid disk boots first; nothing outside stops, detaches or re-orders). Refused with no medium; Redfish renders no override. Test: argv + every other order keeps -no-rebootbf11cc07603dredfish_server: MediumThenDisk boots the installed disk with the inserted medium beside it (-boot order=dc), and names which half is missing — the all-features build was broken since the order was addeddfb8b260fa90container: BootSpec.cap_add and .devices reach HostConfig (--cap-add, --device); empty stays byte-identical — a guest that raises its own WireGuard interface needs NET_ADMIN and /dev/net/tun (nordisk-pairing fleet test)169a2f401e00qemu: `forward_bind` — a TCP forward pinned to loopback, only when asked09deb19b01f1qemu: the cloud shape is `-machine pc` (i440fx, IDE cdrom), q35 stays the defaultd1e9b285854cqemu: no dead_code warning on QemuGuest.qmp without backend-qemu75c7ca4748fbqemu: draupnir renders its own machine, because the machine shape is not tunnr's283ccf723b67kvm: a wait for a marker on a machine that has no wire is a refusal, not a deadlinee64b0fc6ac5ekvm: `boot.headless = true` was not a choice — it was the only machine this backend could ever bootf5f22110880fcontainer: a killed run's leftover must not wedge the box for everfce95772f3actoolchain: the pin moves to 3d5115ba, the mint that exists on the boxes that build25a8496408c6suites: the 3 rows say ORIGINAL in the CODE, and the toml re-emits with them57d475fed4c2ignorera .claude/ — agentens arbetskopior hör inte till repot4378e24baa11merge lane/container-live-log-and-process-identity: en levande logg och en containers processidentitet31372e989571container: a live log sink, and a container's process identity63e76a3e6691merge lane/oden-stagenothing-2026-09-12: draupnir 0.1.13 — a container's output is what the daemon has, not what the follow task deliveredf006174d1b05draupnir 0.1.13: a container's output is what the daemon has, not what the follow task delivered4b706cc566a4draupnir 0.1.12: BootSpec.binds exists in the source and must exist in the registrye3b5b7f63db1container: a mount is part of WHAT is booted, so it lives on the spec and not on a side door5354da14970fcontainer: the engine's socket can be asked about BEFORE the connect, so a caller can wait