Restructure the QCOW2 build pipeline so the target filesystem is created
and mounted before Phase 1, allowing rootfs population directly into it.
This removes the wasteful and fragile copy_rootfs step that was the source
of merged-/usr symlink breakage and fixes the ZFS shadow-mount bug where
the BE dataset was mounted over the staging root.
New flow: Phase 2 prepare → Phase 1 populate → Phase 2 finalize → cleanup.
OCI/Artifact targets are unchanged.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Standalone workspace with 4 crates for building optimized OS images
and publishing to OCI registries:
- spec-parser: KDL image spec parsing with include resolution and
profile-based conditional filtering
- forge-oci: OCI image creation (tar layers, manifests, Image Layout)
and registry push via oci-client
- forge-engine: Build pipeline with Phase 1 (rootfs assembly via native
package managers with -R) and Phase 2 (QCOW2/OCI/artifact targets),
plus dyn-compatible ToolRunner trait for external tool execution
- forger: CLI binary with build, validate, inspect, push, and targets
commands
Ported KDL specs and overlay files from the vm-manager prototype.
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>