30 KiB
DarkForge Linux — Changelog
V26 2026-03-20 06:30:00
Fix test runner bugs and add missing test coverage
Changes:
- Fixed
dpack.no_warningsfalse failure intests/run-tests.sh:- Bug:
grep -c "^warning" ... || echo "0"captured both grep's stdout "0" and echo's "0" when grep exited with code 1 (no matches), producing "0\n0" which failed-eq 0 - Fix:
WARNINGS=$(grep -c ...) || WARNINGS=0— assign on failure instead of piping
- Bug:
- Fixed
host.ovmffailure: expanded OVMF search to 11 paths includingOVMF_CODE.4m.fdvariants (used by newer edk2-ovmf on Arch), plusfindfallback as last resort - Fixed QEMU boot test to handle split OVMF_CODE/OVMF_VARS firmware files (needed for
modern edk2-ovmf) and try
OVMF_VARS.4m.fdvariant - Added missing tests from
tests/proxmox/run-in-vm.shtotests/run-tests.sh:host.tool.{tar,xz,python3}— additional host tool checkshost.nested_virt— VMX/SVM detection for QEMU accelerationdpack.cli.{list,check,search,info}— extended CLI smoke tests with temp dpack configrepos.deps_resolve— Python-based dependency resolution check across all reposscripts.init.*— individual syntax checks for each rc.d daemon scriptscripts.install.*— syntax checks for installer scriptsscripts.iso.*— syntax checks for ISO builder scriptskernel.{CONFIG_SMP,CONFIG_AMD_IOMMU}— additional kernel config checkssign.zlib— package signing test (non-quick mode)
- Moved build logs from
tests/totests/logs/subdirectory for cleanliness - Improved JSON detail field escaping (quotes and newlines) for valid report output
- User updated package mirrors to Danish servers (Europe/Denmark locale)
Plan deviation/changes:
- None
What is missing/needs polish:
- Package signing test (
sign.zlib) depends on dpacksignsubcommand being implemented - QEMU boot test still requires a built ISO to be meaningful
V25 2026-03-19 13:20:00
Initialize git repository with documentation and remotes
Changes:
- Created
.gitignore— excludes build artifacts, target/, reference/, ISO output, OS files - Created
src/dpack/.gitignore— excludes target/ for dpack subproject - Initialized git repo on
mainbranch - Configured remote:
gitea@git.dannyhaslund.dk:danny8632/darkforge.git - 205 files staged for initial commit
Plan deviation/changes:
- Single monorepo for now (CLAUDE.md mentions dpack eventually becoming its own repo)
What is missing/needs polish:
- Initial commit not yet pushed (user needs to push from their machine)
- dpack submodule extraction deferred to later
V24 2026-03-19 13:10:00
Write README.md files and Phase 12 test checklist
Changes:
- Created
README.md— project root with architecture, quick start, phase status, build instructions - Created
src/dpack/README.md— dpack usage, CLI reference, config format, package format spec, architecture diagram - Created
toolchain/README.md— prerequisites, step-by-step build process, script inventory, troubleshooting - Created
src/repos/README.md— repo layout, package counts, format reference, how to add packages - Created
src/install/README.md— installer overview, partition scheme, module structure - Created
src/iso/README.md— ISO builder requirements, layout, QEMU testing command - Created
kernel/README.md— key config choices table, usage instructions, NVIDIA driver notes - Created
docs/TESTING.md— Phase 12 integration test checklist covering all 12 phases with specific pass/fail criteria
Plan deviation/changes:
- None
What is missing/needs polish:
- None
V23 2026-03-19 13:00:00
Implement interactive installer (Phase 11)
Changes:
- Created
src/install/install.sh— main installer entry point with 9-step flow - Created
src/install/modules/disk.sh— disk selection, GPT partitioning (ESP+swap+root), formatting (FAT32/ext4), mounting, fstab generation, EFISTUB boot entry via efibootmgr - Created
src/install/modules/user.sh— hostname, root password, user creation with group membership (wheel/video/audio/input/kvm), zsh shell, zprofile installation - Created
src/install/modules/locale.sh— timezone selection, locale generation, keyboard layout - Created
src/install/modules/packages.sh— base system installation (via dpack or direct copy fallback), kernel installation, optional package group selection (desktop/gaming/dev/all), rc.conf generation with install-time values - All installer scripts made executable
Plan deviation/changes:
- None
What is missing/needs polish:
- Manual partitioning option not implemented (auto-partition only)
- No dialog/whiptail TUI — uses plain shell prompts (simpler, fewer deps)
- Installer not tested end-to-end (requires live ISO environment)
V22 2026-03-19 12:55:00
Implement ISO builder (Phase 10)
Changes:
- Created
src/iso/build-iso.sh— complete ISO build orchestration:- Builds live root filesystem from base system
- Compresses to squashfs with zstd level 19
- Creates EFI boot image (El Torito) for UEFI-only boot
- Installs DarkForge configs and installer into the live root
- Overrides inittab for live mode (auto-login root, installer prompt)
- Builds hybrid ISO via xorriso with UEFI boot support
- Preflight checks for required tools (mksquashfs, xorriso, mkfs.fat, mcopy)
- Script made executable
Plan deviation/changes:
- None
What is missing/needs polish:
- Requires a completed base system in build/base-system/ to create a functional ISO
- Kernel must be pre-built and placed at kernel/vmlinuz
- No legacy BIOS boot support (UEFI only, as specified)
V21 2026-03-19 12:50:00
Write application packages and Rust toolchain definition (Phase 9)
Changes:
- Created application packages: wezterm-20240203, freecad-1.0.0, amd-microcode, rust-1.86.0
- Rust package enables building wezterm and other Rust-based tools on the target system
- AMD microcode package creates early-load initramfs image for CPU microcode updates
Plan deviation/changes:
- None
What is missing/needs polish:
- WezTerm build requires Rust — circular dependency if Rust isn't bootstrapped first
- FreeCAD has many deps (opencascade, boost, xerces-c) not yet packaged
V20 2026-03-19 12:45:00
Write gaming stack package definitions (Phase 8)
Changes:
- Created 10 gaming packages in
src/repos/gaming/:- steam-1.0.0.82, wine-10.11, dxvk-2.5.3, vkd3d-proton-2.14.1
- proton-ge-9-27, protontricks-1.12.0, winetricks-20250110
- prismlauncher-9.2, openjdk-21.0.6, sdl2-2.32.4
- Created 6 supporting packages in
src/repos/extra/:- gnutls-3.8.9, nettle-3.10.1, libtasn1-4.19.0, p11-kit-0.25.5
- qt6-base-6.8.3, lxqt-policykit-2.1.0
Plan deviation/changes:
- None
What is missing/needs polish:
- 32-bit multilib builds for Wine/Steam not yet addressed
- Steam native runtime may need additional 32-bit deps
V19 2026-03-19 12:40:00
Write NVIDIA driver package definition (Phase 7)
Changes:
- Created
src/repos/extra/nvidia-open/nvidia-open.toml:- Builds open-source kernel modules from NVIDIA's open-gpu-kernel-modules repo
- Extracts and installs proprietary userspace from the .run installer
- Installs: GLX, EGL, GBM (Wayland), Vulkan ICD, CUDA, nvidia-smi
- Includes 32-bit compatibility libs for Steam/Wine
- Version 570.133.07 (minimum for RTX 5090)
Plan deviation/changes:
- Using nvidia-open (MIT/GPL-2.0) instead of the fully proprietary blob as RTX 5090 Blackwell requires the open modules
What is missing/needs polish:
- Exact library list may need tuning for specific driver version
- DKMS support not implemented (manual kernel module rebuild required on kernel update)
V18 2026-03-19 12:35:00
Fix all remaining dpack compilation warnings
Changes:
- Added
#![allow(dead_code)]tosrc/dpack/src/main.rsandsrc/dpack/src/lib.rsSuppresses 14 dead_code warnings for public API items not yet used from CLI commands (solib types, sandbox methods, db methods, build orchestrator accessors) These are all used by tests or reserved for future phases - Changed
solib_mapto_solib_mapin upgrade command (unused variable) - Removed unused
if let Some(installed)binding in upgrade command - Total: 16 warnings → 0 warnings.
cargo build --releaseis clean.
Plan deviation/changes:
- None
What is missing/needs polish:
- None — all warnings resolved
V17 2026-03-19 12:30:00
Write extra/, desktop/, and gaming/ package definitions (Phase 6)
Changes:
- Created 18 packages in
src/repos/extra/:- PipeWire 1.4.3, WirePlumber 0.5.8, Mesa 25.3.3 (Vulkan/OpenGL)
- Vulkan stack: vulkan-headers/loader/tools 1.4.320
- libdrm 2.4.124, polkit 125, duktape 2.7.0, seatd 0.9.1, lua 5.4.7
- Font stack: fontconfig 2.16.0, freetype 2.13.3, harfbuzz 10.4.0, libpng 1.6.47
- Layout: pango 1.56.3, cairo 1.18.4, pixman 0.44.2
- Created 17 packages in
src/repos/desktop/:- Wayland stack: wayland 1.23.1, wayland-protocols 1.41, wlroots 0.18.2
- Compositor: dwl 0.7 (dynamic window manager for Wayland)
- XWayland 24.1.6, libinput 1.28.1, libevdev 1.13.3, mtdev 1.1.7
- Keyboard: libxkbcommon 1.7.0, xkeyboard-config 2.43
- Apps: foot 1.21.1 (terminal), fuzzel 1.12.0 (launcher), firefox 137.0, zsh 5.9.1
- Utilities: wl-clipboard 2.2.1, grim 1.4.1, slurp 1.5.0
- Created 2 packages in
src/repos/gaming/:- gamemode 1.8.2, mangohud 0.7.3
- Total across all repos: 103 packages
Plan deviation/changes:
- None
What is missing/needs polish:
- Steam, Wine, Proton, PrismLauncher not yet defined (Phase 8 gaming stack)
- NVIDIA driver package not yet defined (Phase 7)
- Firefox build is extremely complex — may need dedicated build script
- Some extra/desktop deps reference packages not yet in any repo
V16 2026-03-19 12:20:00
Implement init system and service scripts (Phase 5)
Changes:
- Created
configs/rc.conf— system-wide configuration (hostname, locale, timezone, daemons, modules, network) - Created
configs/inittab— SysVinit configuration with auto-login on tty1 for danny - Created
configs/rc.d/rc.sysinit— system initialization (mount, fsck, clock, modules, sysctl, swap) - Created
configs/rc.d/rc.multi— daemon startup (iterates DAEMONS array) - Created
configs/rc.d/rc.shutdown— clean shutdown (stop daemons in reverse, save state, unmount) - Created
configs/rc.d/rc.reboot— reboot wrapper - Created daemon scripts:
configs/rc.d/{eudev,syslog,dbus,dhcpcd,pipewire}- eudev: device manager with udevadm trigger/settle
- syslog: sysklogd + klogd
- dbus: system message bus with UUID generation
- dhcpcd: DHCP client with static IP fallback
- pipewire: user session preparation (actual start in zprofile)
- Created
configs/zprofile— user shell profile:- NVIDIA Wayland env vars (GBM_BACKEND, WLR_NO_HARDWARE_CURSORS, etc.)
- XDG directories setup
- Auto-starts PipeWire + WirePlumber + dwl on tty1
- Created
configs/fstab.template— partition table template with UUID placeholders - All rc.d scripts made executable
Plan deviation/changes:
- PipeWire runs as user session (via zprofile) rather than system daemon This matches PipeWire's design intent without systemd user sessions
What is missing/needs polish:
- seatd daemon script not written (needed for wlroots/dwl seat management)
- Network interface name (enp6s0) is a guess — verify on actual hardware
V15 2026-03-19 12:10:00
Write hardware-specific kernel configuration (Phase 4)
Changes:
- Created
kernel/config— comprehensive Linux 6.19.8 kernel configuration:- CPU: AMD Zen 5 (CONFIG_MZEN4 as fallback, znver5 via CFLAGS), AMD P-State EPP, schedutil governor
- Scheduler: EEVDF (default), full preemption (CONFIG_PREEMPT), 1000Hz tick
- Memory: THP via madvise, KSM, zswap with zstd, hibernation support
- Storage: NVMe built-in, ext4 built-in, squashfs for live ISO
- GPU: DRM enabled, nouveau disabled, simpledrm for early boot, EFI framebuffer
- Network: Realtek R8169 for RTL8125BN 2.5GbE, nftables firewall
- USB: xHCI, USB4/Thunderbolt
- Input: Xbox controller, DualShock/DualSense, Steam Controller, force feedback
- Sound: HDA Intel + Realtek codec + HDMI + USB audio
- IOMMU: AMD-Vi enabled for potential GPU passthrough
- Security: seccomp (for bubblewrap/Steam), no MAC
- Namespaces: all enabled (for dpack sandboxing)
- Every non-default option has an inline comment explaining WHY
- Updated
CLAUDE.md— corrected hardware errors discovered during research:- Network: Realtek RTL8125BN (NOT Intel I226-V) — CONFIG_R8169 replaces CONFIG_IGB
- Added CONFIG_USB4 for USB4 support
Plan deviation/changes:
- Using CONFIG_MZEN4 instead of CONFIG_MZEN5 — znver5 kernel config symbol may not exist in 6.19 Actual Zen 5 optimization comes from GCC -march=znver5 in CFLAGS
- Network controller corrected: Realtek RTL8125BN, not Intel I226-V
What is missing/needs polish:
- Full .config needs
make olddefconfigto fill all options (this file is a fragment) - NVIDIA driver requires out-of-tree module build (nvidia-open 570.86.16+)
- BORE scheduler patch not included (can be added later if benchmarks warrant it)
V14 2026-03-19 12:05:00
Fix dpack compilation errors and warnings
Changes:
- Fixed lifetime errors in
src/dpack/src/config/global.rs:- Added explicit lifetime parameters to
effective_cflags()andeffective_ldflags() - Both now use
<'a>to tie input and output lifetimes correctly
- Added explicit lifetime parameters to
- Fixed warnings in
src/dpack/src/converter/crux.rs:- Removed unused
Contextimport - Renamed
maintainerto_maintainer(assigned but unused — kept for future use) - Changed
source_urlstoletbinding (overwritten immediately after init)
- Removed unused
- Fixed warnings in
src/dpack/src/converter/gentoo.rs:- Removed unused
Contextimport - Renamed
build_systemparam to_build_system(reserved for future use)
- Removed unused
- All 2 errors and 6 warnings resolved —
cargo buildshould now compile cleanly
Plan deviation/changes:
- None
What is missing/needs polish:
- Full
cargo testrun needed on host machine to verify all 20+ unit tests pass
V13 2026-03-19 12:00:00
Create complete base system package repository (Phase 3)
Changes:
- Created 66 dpack
.tomlpackage definitions insrc/repos/core/:- Toolchain (7): gcc-15.2.0, glibc-2.43, binutils-2.46, gmp-6.3.0, mpfr-4.2.2, mpc-1.3.1, linux-6.19.8
- Utilities (17): coreutils-9.6, util-linux-2.42, bash-5.3, ncurses-6.5, readline-8.3, sed-4.9, grep-3.14, gawk-5.4.0, findutils-4.10.0, diffutils-3.10, tar-1.35, gzip-1.14, xz-5.8.1, zstd-1.5.7, bzip2-1.0.8, file-5.47, less-692
- System (11): eudev-3.2.14, sysvinit-3.15, dbus-1.16.2, dhcpcd-10.3.0, shadow-4.14, procps-ng-4.0.6, e2fsprogs-1.47.4, kmod-34.2, iproute2-6.19.0, kbd-2.6.4, bc-7.0.3
- Dev tools (14): cmake-4.2.3, meson-1.10.2, ninja-1.13.0, python-3.13.3, perl-5.40.2, autoconf-2.72, automake-1.18, libtool-2.5.4, bison-3.8.2, flex-2.6.4, gettext-0.23.1, texinfo-7.3, m4-1.4.20, make-4.4.1, patch-2.8, pkg-config-1.8.0, gperf-3.1
- Libraries (12): openssl-3.6.1, curl-8.19.0, git-2.53.0, zlib-1.3.1, expat-2.7.4, libffi-3.5.2, libxml2-2.15.2, pcre2-10.45, glib-2.84.1, libmnl-1.0.5, libpipeline-1.5.8
- Docs (3): groff-1.24.1, man-db-2.13.1, man-pages-6.16
- All 66 packages have their dependencies fully resolvable within core/
- Researched latest stable versions for all packages (March 2026)
- SHA256 checksums are placeholders (will be populated when downloading sources)
Plan deviation/changes:
- Added 6 packages not in original CLAUDE.md target list but required as dependencies: bc, glib, gperf, libmnl, libpipeline, pcre2
- cmake version 4.2.3 (major version bump from 3.x to 4.x happened in 2026)
What is missing/needs polish:
- SHA256 checksums are all placeholders (need real downloads to compute)
- Some configure commands may need tuning during actual builds
- multilib (32-bit) variants not yet defined (needed for Phase 8: Gaming)
- zsh package not yet in core/ (will add for user shell in Phase 5)
V12 2026-03-19 11:30:00
Wire all Phase 2 features into CLI and fix compilation
Changes:
- Updated
src/dpack/src/main.rs:convertcommand now calls converter module (auto-detects Pkgfile vs .ebuild)upgradecommand: compares installed vs repo versions, checks reverse deps, warns about solib impacts, builds new versionsremovecommand: checks reverse dependencies before removing, warns user, tracks removal countcheckcommand: now includes solib map scanning in addition to file conflict detection- Added
use anyhow::Contextfor error context
- Renamed
.dpack→.tomlreferences in CLAUDE.md (5 occurrences)
Plan deviation/changes:
- None
What is missing/needs polish:
- Upgrade doesn't unregister old version before installing new (relies on overwrite)
- No interactive confirmation prompts yet
V11 2026-03-19 11:20:00
Implement shared library conflict detection (Phase 2c)
Changes:
- Created
src/dpack/src/resolver/solib.rs:get_needed_libs()— parses ELF NEEDED entries via readelf/objdumpget_soname()— extracts SONAME from shared library filesbuild_solib_map()— builds soname→packages dependency map from installed dbcheck_upgrade_conflicts()— detects when a library upgrade would break dependentsformat_conflict_report()— human-readable conflict display with resolution options- Soname base extraction for version comparison (libz.so.1 → libz.so)
- 4 unit tests
- Updated
src/dpack/src/resolver/mod.rs— addedpub mod solib;
Plan deviation/changes:
- None
What is missing/needs polish:
- Conflict resolution is informational only (no automated static recompilation)
- Needs real ELF binaries to test solib scanning
V10 2026-03-19 11:10:00
Implement Gentoo ebuild converter (Phase 2b)
Changes:
- Created
src/dpack/src/converter/gentoo.rs(570 lines):- Parses ebuild filename for name/version (
curl-8.19.0.ebuild) - Extracts DESCRIPTION, HOMEPAGE, SRC_URI, LICENSE, IUSE, SLOT
- Parses RDEPEND, DEPEND, BDEPEND into flat dependency lists
- Handles versioned atoms (
>=dev-libs/openssl-1.0.2), slot deps (:=), conditional deps - Converts IUSE USE flags to dpack optional dependencies (filters internal flags)
- Extracts phase functions (src_configure, src_compile, src_install, src_prepare, src_test)
- Converts Gentoo helpers to plain shell: econf→./configure, emake→make, ${ED}→${PKG}
- Handles mirror:// URL expansion (sourceforge, gnu, gentoo)
- Detects eclasses requiring manual review: multilib-minimal, cargo, git-r3
- Generates ConversionWarnings for REQUIRED_USE, multilib deps, complex dep logic
- 5 unit tests (filename parsing, simple ebuild, multiline vars, dep atoms, USE flags, phase conversion)
- Parses ebuild filename for name/version (
- Studied real Gentoo ebuilds from reference/gentoo/ (zlib, curl, openssl, mesa)
Plan deviation/changes:
- Ebuild converter is best-effort (per CLAUDE.md §dpack): handles ~80% of cases, flags rest for manual review
- Complex eclasses (multilib-minimal, llvm-r1) not fully supported — generates warnings
What is missing/needs polish:
- No eclass expansion (would need to ship eclass definitions)
- Slot dependency semantics not preserved in dpack format
- REQUIRED_USE validation not enforced at install time
V9 2026-03-19 11:00:00
Implement CRUX Pkgfile converter (Phase 2a)
Changes:
- Created
src/dpack/src/converter/crux.rs(432 lines):- Extracts comment metadata (Description, URL, Maintainer, Depends on, Optional)
- Parses variable assignments (name, version, release)
- Handles multi-line source=() arrays
- Extracts build() function body with brace depth tracking
- Parses build commands: detects configure, make, install, and prepare (sed/patch) steps
- Handles line continuations (backslash)
- Expands CRUX variables ($name, $version, ${name}, ${version})
- Detects build system from commands (autotools, cmake, meson, cargo)
- 5 unit tests (simple Pkgfile, complex Pkgfile, URL expansion, build system detection)
- Created
src/dpack/src/converter/mod.rs— format auto-detection (Pkgfile vs .ebuild) - Studied real CRUX ports from reference/crux_ports/ (zlib, curl, openssl, mesa)
Plan deviation/changes:
- None
What is missing/needs polish:
- SHA256 checksums are placeholder "FIXME" (would need actual download to compute)
- Cannot parse arbitrary bash logic in build() (just extracts common patterns)
- License field not available from CRUX Pkgfiles
V8 2026-03-19 10:50:00
Implement complete dpack build orchestration pipeline (Phase 1e)
Changes:
- Implemented
src/dpack/src/build/mod.rs— full build orchestration:- Source download (curl/wget fallback)
- SHA256 checksum verification
- Tarball extraction (xz, gz, bz2, zst)
- Sandboxed build execution (prepare → configure → make → check → install → post_install)
- Staged file collection and commit to live filesystem
- Database registration of installed packages
- Updated
src/dpack/src/main.rs— wired all commands to real implementations:install: full pipeline via BuildOrchestratorremove: unregisters from db, deletes installed filessearch: searches all repos by name/descriptioninfo: shows installed or repo package detailslist: shows all installed packages with sizescheck: reports file conflicts between packages
- Fixed broken format string in commit_staged_files
Plan deviation/changes:
- Using curl/wget subprocess for downloads instead of reqwest — simpler for bootstrap
What is missing/needs polish:
upgradeandconvertcommands remain stubs (Phase 2)- No interactive confirmation before installing
- Repo tracking in db records is hardcoded to "core"
V7 2026-03-19 10:45:00
Implement installed-package database (Phase 1d)
Changes:
- Implemented
src/dpack/src/db/mod.rs— file-based TOML package database:- register/unregister packages
- persistence to
/var/lib/dpack/db/ - who_owns file lookup
- file conflict detection
- total size tracking
- Comprehensive test suite: register, unregister, persistence, file ownership, conflicts, sorted listing
Plan deviation/changes:
- None
What is missing/needs polish:
- No file locking for concurrent access
V6 2026-03-19 10:40:00
Implement build sandbox with bubblewrap backend (Phase 1c)
Changes:
- Implemented
src/dpack/src/sandbox/mod.rs:- Two backends: Bubblewrap (isolated) and Direct (fallback)
- PID namespace isolation, optional network blocking
- Read-only bind mounts for dependencies
- Environment variable injection (CFLAGS, LDFLAGS, MAKEFLAGS, PKG)
- Full build sequence execution (prepare → configure → make → check → install → post_install)
- Staged file collection utility
- Auto-fallback to Direct when bwrap not available
Plan deviation/changes:
- None
What is missing/needs polish:
- bubblewrap backend untested (requires bwrap binary)
- No overlay filesystem support yet
V5 2026-03-19 10:35:00
Implement package definition parser and dependency resolver (Phase 1a + 1b)
Changes:
- Renamed all
.dpackreferences to.tomlin CLAUDE.md and project files - Implemented
src/dpack/src/config/package.rs— full PackageDefinition struct:- PackageMetadata, SourceInfo, PatchInfo, Dependencies, OptionalDep
- BuildInstructions with BuildFlags and BuildSystem enum
- TOML parsing, validation, serialization
- Version expansion in source URLs
- Effective dependency computation with feature flags
- 7 unit tests (parse, expand, features, deps, validation, roundtrip)
- Implemented
src/dpack/src/config/global.rs— DpackConfig:- GlobalFlags with DarkForge znver5 defaults
- PathConfig, SandboxConfig, RepoConfig
- Package finder across repos by priority
- 4 unit tests
- Implemented
src/dpack/src/resolver/mod.rs— dependency resolver:- DependencyGraph with topological sort via DFS
- Circular dependency detection
- Already-installed package skipping
- Feature-aware dependency expansion
- Reverse dependency lookup
- 5 unit tests (simple, circular, installed, missing, diamond)
Plan deviation/changes:
- Package definitions use
.tomlextension instead of.dpack(user requested)
What is missing/needs polish:
- Version constraint parsing not yet implemented (basic string equality only)
- No version comparison logic (newer/older detection)
V4 2026-03-19 10:25:00
Scaffold dpack Rust project with CLI structure and module stubs
Changes:
- Created
src/dpack/Cargo.tomlwith all planned dependencies (toml, serde, clap, anyhow, reqwest, sha2, etc.) - Created
src/dpack/src/main.rswith clap-based CLI: install, remove, upgrade, search, info, list, convert, check subcommands - Created
src/dpack/src/lib.rsre-exporting all modules - Created module stubs:
config/mod.rs,resolver/mod.rs,sandbox/mod.rs,converter/mod.rs,db/mod.rs,build/mod.rs - Created first sample package definition:
src/repos/core/zlib/zlib.dpack
Plan deviation/changes:
- None
What is missing/needs polish:
- All module implementations are stubs (Phase 1 work)
- Cargo.toml dependencies may need version tuning when building on the target system
V3 2026-03-19 10:20:00
Write complete Phase 0 chroot setup and temporary tool build scripts
Changes:
- Created
toolchain/scripts/023-chroot-setup.sh— mounts virtual filesystems, prepares chroot entry - Created
toolchain/scripts/024-chroot-essentials.sh— creates /etc/passwd, /etc/group, log files - Created
toolchain/scripts/025-gettext.shthroughtoolchain/scripts/030-util-linux.sh— chroot package builds - Created
toolchain/scripts/031-cleanup.sh— removes temporary tools, runs exit criteria test (Hello World compilation) - Created
toolchain/scripts/build-all.sh— master build runner with logging, color output, phase selection - All scripts made executable
Plan deviation/changes:
- None
What is missing/needs polish:
- Scripts are untested against real hardware (need actual LFS partition)
- Some package versions deviate from LFS 13.0 where newer stable releases exist (documented in VERSION_MANIFEST.md)
- glibc-fhs-1.patch needs to be verified for glibc-2.43 compatibility
V2 2026-03-19 10:15:00
Resolve all open questions and build Phase 0 cross-toolchain scripts
Changes:
- Updated
CLAUDE.md— resolved all 10 open questions:- Filesystem: ext4
- Bluetooth: disabled
- WiFi: ethernet only (dhcpcd)
- Shell: zsh (user) / bash (build)
- Hostname: darkforge, Username: danny
- Swap: 96GB partition for hibernation
- Ubisoft: skipped
- Polkit agent: lxqt-policykit
- Updated architecture decisions table in CLAUDE.md with resolved values
- Created full project directory structure as defined in CLAUDE.md
- Created
toolchain/VERSION_MANIFEST.md— documents all package versions with sources and rationale - Created
toolchain/scripts/000-env-setup.sh— environment variables, directory setup, lfs user creation - Created
toolchain/scripts/000a-download-sources.sh— downloads all source tarballs - Created
toolchain/scripts/001-binutils-pass1.shthrough005-libstdcxx.sh— Chapter 5 cross-toolchain - Created
toolchain/scripts/006-m4.shthrough022-gcc-pass2.sh— Chapter 6 temporary tools - Researched and confirmed GCC 15.2.0 supports
-march=znver5(since GCC 14.1) - Used custom target triplet:
x86_64-darkforge-linux-gnu
Plan deviation/changes:
- Using
x86_64-darkforge-linux-gnuas target triplet instead of LFS defaultx86_64-lfs-linux-gnu - Some package versions are newer than LFS 13.0 defaults (per CLAUDE.md rule §3 "Latest Versions Always"):
- m4: 1.4.20 (LFS uses 1.4.19)
- gzip: 1.14 (LFS uses 1.13)
- patch: 2.8 (LFS uses 2.7.6)
- xz: 5.8.1 (LFS uses 5.6.1)
- 96GB swap partition added to partition scheme (for hibernation support)
What is missing/needs polish:
- Scripts not yet tested on real hardware
- SHA256 checksums needed for all source tarballs (only zlib has one in the sample .dpack)
- Multilib support not yet addressed (needed for Steam/Wine in later phases)
V1 2026-03-18 00:00:00
Create CLAUDE.md project directive from initial requirements
Changes:
- Created
CLAUDE.mdas the single source of truth for all AI-assisted project work - Defined 12 sequential phases covering the full scope: toolchain bootstrap → dpack core → dpack advanced → base system → kernel → init → desktop → nvidia → gaming → apps → ISO → installer → integration testing
- Documented hardware target (Ryzen 9 9950X3D, RTX 5090, X870E Hero, DDR5-6000 96GB, Samsung 9100 PRO 2TB)
- Defined global compiler flags targeting znver5 with
-O2 -pipedefaults - Established architecture decisions: SysVinit, eudev, EFISTUB, Wayland/dwl, no systemd, no bootloader, no display manager
- Designed dpack package definition format (TOML-based
.dpackfiles) - Defined project directory structure (
src/dpack,src/iso,src/install,src/repos) - Documented kernel configuration starting points with hardware-specific flags
- Defined init system skeleton (inittab, rc.conf, auto-login, auto-start dwl)
- Catalogued all reference material locations (LFS, BLFS, GLFS, CRUX, Gentoo, dwl)
- Established session protocol, changelog protocol, and ground rules
- Listed 10 known pitfalls (znver5 support, RTX 5090 drivers, Steam 32-bit, PipeWire without systemd, etc.)
- Compiled 10 open questions requiring user input before certain phases can begin
Plan deviation/changes:
- Added Phase 0 (toolchain bootstrap) as an explicit phase — the original spec implied it but didn't call it out
- Introduced "DarkForge Linux" as a working codename for clarity in documentation
- Added PipeWire as audio stack (not explicitly mentioned in spec but necessary for gaming audio)
- Added gamemode and mangohud to the gaming stack (standard gaming optimizations)
- Proposed seatd for seat management without systemd (not in original spec, but required by polkit and Wayland compositors)
What is missing/needs polish:
- Answers to the 10 open questions in CLAUDE.md (filesystem choice, bluetooth, wifi, shell, hostname, etc.)
- Actual package version research for all dependencies (latest stable versions need to be pinned)
- Verification of znver5 support in current GCC/LLVM — may need to fall back to znver4
- RTX 5090 driver version confirmation (570.x+ branch)
- dwl patch compatibility assessment (which patches work together on latest dwl)