Shared main status. Layer investigation on 2026-10-19 starts at 4e88610;
earlier application/image evidence below retains its historical scope.
Decisions records accepted choices; DEVELOPMENT.md
has build instructions. Variant-only work belongs in docs/<branch>/STATUS.md
and DECISIONS.md, not these shared files.
-
Implemented shared uv tools on 2026-10-22 (committed as
8fdc7a5): ctmodbus, ctserial, greatfet, rfcat and urh, with managed Python 3.13. The final selection supersedes the earlier ctmodbus/ctserial exclusions; ctui is a required dependency, not a standalone selection. The common manual installer and disk preparation use the same manifest/helper. Stores live under/var/lib/uv-tools, owned by the reserved non-login UID/GID 395; normal OS builds create only empty stores and integration files. Wheel administrators receive fixed install/update permissions; package builds run without root or supplementary groups. Bash/fish permit personal overrides. URH has a desktop entry; GreatFET/RfCat USB rules ship with the OS. See implementation and decisions. Manualujust update/upgradedelegates to Aurora before shared/personal uv updates. A top-level recipe avoids Just's imported-recipe precedence issue. Automatic shared updates use the existing uupd services and timer/toggle behavior, with no independent timer or uv-only enabled-state gate. Existing tools are preserved on install reruns and manifest removal; updates never add missing selections. Disk metadata records runtime and dependency versions. Passed policy/manual-installer/payload/disk-orchestration/reuse regressions, actual Just recipe/alias/failure-boundary execution, Bash/fish syntax, sudoers, udev/desktop validation and systemd unit verification. Private namespace checks exercised real sysusers, privilege dropping, account collisions, normal-user access, unsafe permissions, additive reruns and failed-install recovery. Real isolated AMD64 installation/update/inventory passed with uv 0.12.24, CPython 3.13.16, ctmodbus 0.6.0, ctserial 0.5.0, greatfet 2026.0.0, rfcat 2.0.1 and urh 2.10.0. All five passed offline startup as a normal user; URH used Qt offscreen mode and the ControlThings TUIs used a dummy terminal with automatic exit. URH's isolated source build also passed locally. These tests did not modify host installations/accounts or run real hardware operations. Container CI run 39917151287 at8fdc7a5failed duringuv-tools setup: the unbooted build container had no/run/lock, so opening the maintenance lock failed before account/store setup. Fixed on 2026-10-23 by creating the missing lock directory in the root-only helper path, preserving existing system permissions and rejecting unsafe parents. The isolated fixture now starts with an empty/run; it reproduced the original error before the fix and passed afterward, including real sysusers/privilege checks, existing lock inode/mode preservation and lock-directory symlink rejection. The uv policy/update regression and whitespace review also passed. A corrected full image build was subsequently reported validated by the user on 2026-10-24, along with working uv tool integration. Exact artifacts, architectures and CI run identities were not supplied; no independent remote CI verification is recorded. Remaining validation details: guest login/PATH/desktop behavior, sudo authorization, SELinux labels, automatic service execution/toggle/retry, multiple real users, OS-update persistence, ARM64 builds and physical device/SDR backend coverage. No publication or CI rerun was performed during the repair. -
README policy clarified on 2026-10-20: repository instructions now require explicit approval for any README edit, with suggestions only until approved. Its scope is marketing and user help. The unapproved wallpaper addition was reverted; README matches HEAD. Development guidance remains in DEVELOPMENT and decisions in DECISIONS. Content and whitespace review passed.
-
Implemented the Plasma Login Manager default background change to Aquila Aurea Machina on 2026-10-20 (committed as
f5f079b). The build updates onlyImageandPreviewImagein Aurora's/usr/lib/plasmalogin/defaults.conf, using the existing wallpaper package, with required-file/asset guards. Administrator overrides in/etc/plasmalogin.confretain precedence. User-supplied VM output established Plasma Login Manager 6.7.5, Aurora's existing wallpaper defaults, and no local wallpaper override; it does not validate this change. Isolated execution of the build block with realkwriteconfig6/kreadconfig6passed for both keys, preservation of other greeter/wallpaper/autologin settings, repeated application, and failure before mutation when the defaults file or wallpaper assets are absent. Bash syntax and whitespace checks passed. No image build, remote CI or graphical guest validation was performed. Next: deploy a rebuilt image and verify boot/login, logout, display cropping, local override precedence and persistence across an image update. See configuration and validation. -
Completed the same-commit
0ae7fc9image investigation: exact supplied digests share 232/256 layers; 24 replacements total 604,756,457 compressed bytes while total compressed size grows only 312 bytes. All 48 changed old/new blobs were SHA-256 verified and their tar payloads/metadata compared. Twenty-one layers (468,508,962 bytes) differ only in mtimes; the other three contain RPM/DNF bookkeeping changes. Same base layers, 2,599 package identities, CyberChef archive and Chunkah grouping; RPM changes are 12 install-time/transaction-time header pairs and DNF logical changes are transaction timestamps only. No runtime/build changes were made. See evidence and deferred follow-up. Deferred by user direction on 2026-10-19: keep timestamp normalization and database isolation on the upstream watch list. Review Aurora’s adoption, measured results, and regressions before revisiting a local implementation; tracking links and revisit criteria are in the decision entry. This is a project watch-list item, not a scheduled background monitor. -
VMDK
.7zpackaging and direct QCOW2 downloads implemented on 2026-10-21 (committed as6d187a6), extending the direct monolithicSparse/VM bundle work committed asfb67d62. VMDK uses host 7-Zip, LZMA2 level 5, a 32 MiB dictionary, two threads and non-solid mode. Temporary hard-link staging avoids another disk copy; compression failures remove partial archives. Latest bundles contain VMDK/VMX/VBOX; branch bundles contain VMDK/VMX. The same.7zuploads directly to GitHub and S3, with disk/bundle checksums and JSON metadata kept separate. QCOW2 uploads directly to GitHub; checksums, manifest and source metadata move into a separate metadata ZIP. CI QCOW2 filenames include run/attempt for unique direct artifact names. QCOW2 S3 layout and ISO packaging are unchanged. No format option was added. README and VM source templates are untouched. Passedtests/check_vmdk.py,tests/check_build_disk.pyandtests/check_disk_payload_reuse.py: real local OSBuild QEMU-stage disk assembly, content/write support, UUID/configuration preservation, 7z integrity/extraction, exact channel membership and extracted bytes, checksums, missing-tool/partial compression cleanup, CI/local naming, mocked build/registry failures, workflow upload routing/S3 filters and embedded Bash syntax. Local 7zz version: 26.04. These checks use small fixtures and mocked container/registry commands; they do not establish full-size performance or guest boot success; subsequent CI evidence is recorded below. Content/link and whitespace review passed. User-reported monolithicSparse VMware/VirtualBox tests predatefb67d62; exact artifact identities are unrecorded. Original native failures used streamOptimized output (course run39360470160, attempt 1). CI attempts at6d187a6, runs 39659636082 and 39662488106, failed before preparation/assembly: the ISO dependency preflight receivedmanifest unknownfor the Fedora installer digest pinned indisk_config/installer/Containerfile. All three formats were selected, so the shared preflight blocked them together; packaging/upload changes were not reached. Live Skopeo metadata checks on 2026-10-21 reproduced the missing digest and confirmed that the current Fedora 44 tag resolves for linux/amd64. This does not establish why the old manifest disappeared or validate a replacement ISO build. The QCOW2/VMDK-only run 39663118651 passed resolution and payload preparation. QCOW2 assembly, direct disk upload and the separate three-file metadata ZIP upload succeeded. VMDK's OSBuild manifest finished successfully, then export failed withNo space left on devicewhile copying the staged VMDK from the OSBuild store into/output/vmdkusingcp --reflink=auto -a. The 7z packaging/checksum and upload steps were not reached. Jobs use separate runners; selecting QCOW2 did not consume the VMDK runner's storage. Logs establish export-time space exhaustion, but do not quantify peak allocated storage or the extra capacity needed. Download/guest checks remain. Implemented the export/storage repair (committed as9d8568d): the VMDK runner creates a private store under/output, uses a guarded hard-link export adapter, and removes the store on success/failure before UUID updates and 7z packaging. Export logs report logical/allocated disk size and free space. Refreshed the ISO installer to Fedora 44 indexsha256:28f842889ffee5a2bfc1c1bd742a15c13b2f73a41a492312410a961e457e8d63. Live dependency preflight passed for AMD64 and ARM64. The sparse 5 GiB export regression passed with local OSBuild 193 and OSBuild 194 inside the exact pinned builder: same inode/allocation, content survival after store cleanup, and rejection of symlinks, extra files, existing destinations and failed links. Inspected the pinned runtime's export callback contract. Mocked runner checks passed cleanup/setup/failure boundaries; disk orchestration, retained payload and real VMDK packaging regressions passed. Run 39682536214 at9d8568dconfirms full privileged VMDK assembly and hard-link export succeeded: 30,131,027,968 logical bytes, 30,126,514,176 allocated bytes and 9,433,157,632 output bytes free at export. It then failed before compression because packaging invoked7zz; Ubuntu's installed7zip23.01+dfsg-11 package provides7z. Verified the exact Ubuntu package contents. Fixed executable discovery to accept7zzor7zand reject missing tools before any VMDK assembly (1d3d9bb). Regression checks cover both command names and missing-tool early failure. VMDK integrity/extraction/checksums, disk orchestration and retained payload checks passed using the actual Ubuntu 23.01 binary on a PATH without7zz. Successful VMDK run 39691650438 at1d3d9bbreused that payload and completed full assembly, 7z packaging, checksums and GitHub uploads. Timing review on 2026-10-22: VMDK job 1h53m24s; setup 2m01s, input pulls/manifest setup about 4m17s, OSBuild build environment 3m57s, raw image installation/configuration 31m11s (bootc install 30m22s), VMDK creation 2m24s, export/object-store cleanup about 40s, then 66m34s until 7-Zip completion, checksums/metadata about 1m30s and uploads/finalization 51s. The 66m34s interval includes remaining runner cleanup, validation/configuration and compression: 7-Zip buffered its output, so exact compression-only duration cannot be isolated. Disk bytes: 30,117,199,872; archive bytes: 7,847,124,461. The separate earlier QCOW2 job in run39663118651took 47m46s; these are different runners/runs, not a controlled benchmark. Refreshed ISO build/install, downloaded-byte verification and guest boot remain unvalidated. Next: validate downloads and guest boot; consider explicit phase timing and a compression speed/size benchmark before changing settings. No runtime changes made during this timing review. See build and packaging details. Retry inputs from the successful payload descriptor: source taglatest-20261021-6d187a6, payloadghcr.io/controlthings-io/controlthingsplatform-disk-payload@sha256:5b9f41f506571b34b2e6fc7a1fcf591eca4bfcbfb4b05b346531eb336aa1fb81. Payload retention remains manual; no new publication or CI dispatch was performed. -
Removed the manual tool installer's
pkexecwrapper (cd57dc9). System Flatpak remote/install commands now run as the Brew owner through native authorization, matching the user's reported password-free Aurora behavior. The CLI'sinstall-flatpaksaction also accepts normal users. ZAP's manual X11 override is per-user; disk payload preparation retains its all-user override. Installer regression checks passed for normal-user dispatch, absence of elevation commands, Brew ownership/failure boundaries and architecture filtering. The isolated disk-payload shell regression and whitespace checks also passed. Package commands are mocked; no guest installation was performed. Next: deploy the updated image and verifyujust install-controlthings-toolscompletes without authentication and ZAP launches for the invoking user. -
Implemented build-time GitHub API authentication on main (
0ae7fc9). Actions passes its temporary token through a private file and Podman secret; CyberChef uses the API-only helper with redirect rejection and bounded HTTP retries. ZIP/license downloads share retries for transient HTTP/network failures and truncated transfers. Eligible jobs authenticate before pulls, using an explicit temporary rootful Podman auth file; Docker login still supports signing. Local builds optionally useGITHUB_API_TOKEN_FILE. No workbook changes are included; the course stash is preserved. The motivating course container run 39346663938 failed on anonymous CyberChef metadata lookup with HTTP 403 rate limit exceeded. Local API, HTTP-download, registry-login, CyberChef and workflow-tag regressions passed, along with Just/Bash syntax and whitespace checks. Fixtures cover API credential scope, redirects, bounded retries, token-file permissions, environment removal and cleanup after successful/failed builds, partial-download replacement, retry exhaustion, filesystem failures and registry auth-file export/cleanup. Podman and network requests are mocked. CyberChef desktop validation emitted only its existing multiple-category hint. No live authenticated request, image build or remote CI run was performed in those local checks. The user reports the new authenticated builds working on 2026-10-19; the tested run identity is unrecorded. See build instructions. -
Added
/etc/skel/Samplespointing to/usr/share/controlthings/sampleson main (committed ase35ccbe). Symlink target, temporary-home copy preservation and whitespace checks passed. Existing homes are not migrated; fresh-user guest validation remains pending. -
Added
nmapto the shared Brewfile on main (committed as0f773a5). Entry uniqueness and whitespace checks passed; installation and image builds were not run. Fresh prepared disk payloads include it; existing systems can useujust install-controlthings-toolswith the updated image. -
Firefox editable defaults committed on main as
8c7a9f1: ControlThings homepage, one row of the six named pins in requested order, and widgets, stories, and sponsored content off. Policy is installed beside the RPM Firefox. Real isolated Firefox 158.0 checks passed for active policy, effective defaults, pin order/labels, unlocked preferences, and saved homepage/session restore, widgets and edited pin across restart. Bash syntax, policy JSON and whitespace checks passed. Host browser profiles were untouched. Image build, ARM64 and graphical guest verification remain pending. Next: fresh guestabout:policies, startup, Settings and New Tab checks. See build/configuration. -
ZAP X11 workaround implemented in payload preparation and the manual installer, guarded by selected app ID (committed as
70a7af1). Installer and isolated payload-shell regressions passed (mocked package commands), including retained override content and ARM64 installer omission. Bash syntax and whitespace passed. Updated stale test expectations to the current 16-app selection. Guest validation of the new system-wide override remains pending. -
Main uses Aurora DX stable. The custom Brewfile is enabled (29 formulae, 16 AMD64 Flatpaks; ZAP excluded on ARM64). Aurora defaults remain excluded; selected apps are explicit. Firefox is an RPM and CyberChef launches it. App-list expansion is committed as
6d17d8c; Firefox/Bazaar changes asec2cc8a. -
Manual preparation retains a GHCR application payload for digest-based reuse by ISO/QCOW2 assembly. OS updates retain the original channel and mutable app stores. Legacy local disk recipes do not populate these stores.
-
Main's new-user MOTD marker is committed as
8952b79. Automatic-update defaults remain inherited. Course-specific policy is tracked on the course branch.
User-reported QCOW2 smoke results: boot, offline cold boot, ripgrep/Okteta launch,
first-user update/removal through normal Aurora tooling, reboot persistence, and
persistence across an OS update all passed. CyberChef and /etc/skel content worked.
Earlier QCOW2 testing also confirmed new-user desktop and lock-screen defaults.
The user now reports all Flatpak and Brew installations validated and functional.
ZAP requires the X11 workaround above. The precise tested artifact identity was
not recorded; Firefox launcher and Bazaar first-login icon checks remain unrecorded.
User reports ISO build success; download/installation testing remains pending. No ISO offline-installation success is established.
- QCOW2 run 38990955138
at
59659b7prepared, published, retrieved, and assembled the retained smoke payload; artifact archive: 8,209,935,549 bytes. - Historical reuse inputs: source
latest-20261017-59659b7, payloadghcr.io/controlthings-io/controlthingsplatform-disk-payload@sha256:066031ab6dcddf2db1980e7cf48d3d78bea2d4f2e004ec9f7d7ec5fd0c7cc4c1. These contain the old smoke selection; current apps require fresh preparation. - ISO installer pin repair is committed as
44b5d0c; metadata-only AMD64 ISO preflight passed using the historical payload. The user's later ISO build report supersedes the earlier instruction to dispatch it; its run identity is unrecorded. - Full-bundle builds previously exhausted runner storage. Scoped builder cleanup was validated, and smoke assembly succeeded; full-size capacity is still unknown.
Historical local checks during the full-bundle work passed manifest/manual-installer,
payload shell, disk orchestration, retained reuse, workflow tagging, CyberChef,
Bash syntax, and whitespace regressions. Package commands in these fixtures are
mocked and checks preceded the user's additional Flatpaks in 6d17d8c; they do
not prove current full-list regression success, installation, or remote CI success.
Real isolated fixtures established nested Bubblewrap setup with SYS_ADMIN plus NET_ADMIN, copied Flatpak deployments/exports/hardlinks, Brew UID/GID preservation across OCI transport, and scoped image cleanup. They did not establish complete Obsidian extra-data execution or full-size bootc/Anaconda import.
| Feature | Established evidence | Remaining checks |
|---|---|---|
| Disk orchestration | Both formats, architectures, channels and failure boundaries in fixtures; AMD64 smoke QCOW2 CI | Full bundle capacity, ISO blank-disk/offline install, S3 uploads; ARM64 needs a published source |
| Capture groups | Real isolated groupadd/usermod, version markers, vendor GIDs, failure/retry and recipe delegation | Boot service, KDE pkexec, effective login groups and physical packet/USB capture |
| CyberChef | Extraction/security regressions; live v11.5.0 installation smoke test on 2026-10-15; user-reported VM use | RPM Firefox launcher/icon; offline Base64, worker/SHA-256 and file input on current image |
| Backgrounds | Mocked Plasma hook; real KDE system/user precedence tests; user-reported new-user defaults | Saved choices across update/reboot; light theme and extra displays |
| Rechunking/countme | Regression/cleanup fixtures; successful historical Chunkah CI | Controlled identical-input rebuild and small-change update measurements |
Installed Aurora Bash/fish hooks suppressed MOTD with the skeleton marker and resumed output after its removal in temporary user homes. Host preferences were untouched. Current-image first-login and interactive ujust toggle need VM checks.
Historical metadata/file analysis explains large downloads without equivalent installed-size growth; exact VM network traffic was not measured.
- Same-source
9cd857drebuilds replaced 591,308,140 compressed bytes; visible differences were package-manager state. Countme cookies alone invalidated a 409.844 MiB layer, motivating the implemented cleanup. 895b82a→0a629ccreplaced 1,225,805,091 bytes despite only 74,849,244 bytes of image growth. Both used identical Aurora layers and Chunkah. Repacking, timestamps, linker/RPM/DNF state and Python caches contributed; timestamp-only initramfs/wallpaper replacements totaled 355,869,404 bytes.- Retain digests rather than relying on same-day tags. Inherited revision and OSTree kernel annotations were inconsistent with project/image identities; metadata correction remains unresolved.
Full digests, CI references, layer tables, and rejected explanations are preserved in the pre-cleanup status at 8952b79. Timestamp normalization, component packing, and generated-state isolation remain proposals, not accepted fixes or measured savings.
- Publish a current OS container and prepare a fresh AMD64 QCOW2 payload. Measure runner free space, payload/artifact sizes and guest free space for the full list.
- Verify ZAP launches with the new system-wide override on a fresh payload and through the updated manual installer. Check first-user ownership, Bazaar's first-login icon, Firefox/CyberChef, MOTD toggle, and capture-group setup. Verify apps survive a normal OS update.
- Reuse the successful payload for ISO; install to a blank disk offline, remove
the ISO, and verify first login, tools, and
bootc statuschannel. Finish the previously downloaded ISO test independently. - Validate user background persistence and real capture hardware. Publish an ARM64 source before attempting ARM64 disks; migrate legacy local disk recipes separately.
- Validate the shared Python implementation in a fresh AMD64 guest through manual and disk provisioning, automatic updates/toggle, personal overrides and physical devices; then validate ARM64. Managed classroom accounts/home content, a complete Aurora fork/installer migration, and reproducibility optimizations remain proposals. Do not infer release readiness from smoke checks.