Warning: Permanently added '98.93.236.54' (ED25519) to the list of known hosts. You can reproduce this build on your computer by running: sudo dnf install copr-rpmbuild /usr/bin/copr-rpmbuild --verbose --drop-resultdir --task-url https://copr.fedorainfracloud.org/backend/get-build-task/11169469-fedora-43-aarch64 --chroot fedora-43-aarch64 Version: 1.10 PID: 11907 Logging PID: 11909 Task: {'allow_user_ssh': False, 'appstream': False, 'background': False, 'build_id': 11169469, 'buildroot_pkgs': [], 'chroot': 'fedora-43-aarch64', 'enable_net': False, 'fedora_review': False, 'git_hash': '20ed2bab2a331ddd242c4f6fd841d5abe6c9632b', 'git_repo': 'https://copr-dist-git.fedorainfracloud.org/git/erez-c137/kempt/kempt', 'isolation': 'default', 'memory_reqs': 2048, 'package_name': 'kempt', 'package_version': '0.1.8-1', 'project_dirname': 'kempt', 'project_name': 'kempt', 'project_owner': 'erez-c137', 'repo_priority': None, 'repos': [{'baseurl': 'https://download.copr.fedorainfracloud.org/results/erez-c137/kempt/fedora-43-aarch64/', 'id': 'copr_base', 'name': 'Copr repository', 'priority': None, 'repo_gpgcheck': False}], 'sandbox': 'erez-c137/kempt--erez-c137', 'source_json': {}, 'source_type': None, 'ssh_public_keys': None, 'storage': 1, 'submitter': 'erez-c137', 'tags': [], 'task_id': '11169469-fedora-43-aarch64', 'timeout': 18000, 'uses_devel_repo': False, 'with_opts': [], 'without_opts': []} Running: git clone https://copr-dist-git.fedorainfracloud.org/git/erez-c137/kempt/kempt /var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt --depth 500 --no-single-branch --recursive cmd: ['git', 'clone', 'https://copr-dist-git.fedorainfracloud.org/git/erez-c137/kempt/kempt', '/var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt', '--depth', '500', '--no-single-branch', '--recursive'] cwd: . rc: 0 stdout: stderr: Cloning into '/var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt'... Running: git checkout 20ed2bab2a331ddd242c4f6fd841d5abe6c9632b -- cmd: ['git', 'checkout', '20ed2bab2a331ddd242c4f6fd841d5abe6c9632b', '--'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt rc: 0 stdout: stderr: Note: switching to '20ed2bab2a331ddd242c4f6fd841d5abe6c9632b'. You are in 'detached HEAD' state. You can look around, make experimental changes and commit them, and you can discard any commits you make in this state without impacting any branches by switching back to a branch. If you want to create a new branch to retain commits you create, you may do so (now or later) by using -c with the switch command. Example: git switch -c Or undo this operation with: git switch - Turn off this advice by setting config variable advice.detachedHead to false HEAD is now at 20ed2ba automatic import of kempt Running: dist-git-client sources cmd: ['dist-git-client', 'sources'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt rc: 0 stdout: stderr: INFO: Reading stdout from command: git rev-parse --abbrev-ref HEAD INFO: Reading stdout from command: git rev-parse HEAD INFO: Reading sources specification file: sources INFO: Downloading kempt-0.1.8.tar.gz INFO: Reading stdout from command: curl --help all INFO: Calling: curl -H Pragma: -H 'Accept-Encoding: identity' -o kempt-0.1.8.tar.gz --location --connect-timeout 60 --retry 3 --retry-delay 10 --remote-time --show-error --fail --retry-all-errors https://copr-dist-git.fedorainfracloud.org/repo/pkgs/erez-c137/kempt/kempt/kempt-0.1.8.tar.gz/md5/0a3eeb49f586635df373a6d3c902c1c1/kempt-0.1.8.tar.gz % Total % Received % Xferd Average Speed Time Time Time Current Dload Upload Total Spent Left Speed 100 1.65M 100 1.65M 0 0 94.96M 0 0 INFO: Reading stdout from command: md5sum kempt-0.1.8.tar.gz tail: /var/lib/copr-rpmbuild/main.log: file truncated Running (timeout=18000): unbuffer mock --spec /var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt/kempt.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1792358989.688234 -r /var/lib/copr-rpmbuild/results/configs/child.cfg INFO: mock.py version 6.9 starting (python version = 3.14.5, NVR = mock-6.9-1.fc44), args: /usr/libexec/mock/mock --spec /var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt/kempt.spec --sources /var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt --resultdir /var/lib/copr-rpmbuild/results --uniqueext 1792358989.688234 -r /var/lib/copr-rpmbuild/results/configs/child.cfg Start(bootstrap): init plugins INFO: tmpfs initialized INFO: selinux enabled INFO: chroot_scan: initialized INFO: compress_logs: initialized Finish(bootstrap): init plugins Start: init plugins INFO: tmpfs initialized INFO: selinux enabled INFO: chroot_scan: initialized INFO: compress_logs: initialized Finish: init plugins INFO: Signal handler active Start: run INFO: Start(/var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt/kempt.spec) Config(fedora-43-aarch64) Start: clean chroot Finish: clean chroot Mock Version: 6.9 INFO: Mock Version: 6.9 Start(bootstrap): chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-43-aarch64-bootstrap-1792358989.688234/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start(bootstrap): cleaning package manager metadata Finish(bootstrap): cleaning package manager metadata INFO: Guessed host environment type: unknown INFO: Using container image: registry.fedoraproject.org/fedora:43 INFO: Pulling image: registry.fedoraproject.org/fedora:43 INFO: Tagging container image as mock-bootstrap-8bc41a3a-73d3-4bc2-a2f3-f43cecc4d881 INFO: Checking that 731f4fb78497c21b0041d628e092d0bc36342cb47ad3f857b65d7f9db4fa58d1 image matches host's architecture INFO: Copy content of container 731f4fb78497c21b0041d628e092d0bc36342cb47ad3f857b65d7f9db4fa58d1 to /var/lib/mock/fedora-43-aarch64-bootstrap-1792358989.688234/root INFO: mounting 731f4fb78497c21b0041d628e092d0bc36342cb47ad3f857b65d7f9db4fa58d1 with podman image mount INFO: image 731f4fb78497c21b0041d628e092d0bc36342cb47ad3f857b65d7f9db4fa58d1 as /var/lib/containers/storage/overlay/2c0133ef156b540ca0d9cb4e2908c2db030287c9dbbf14065f720272e4cab7ff/merged INFO: umounting image 731f4fb78497c21b0041d628e092d0bc36342cb47ad3f857b65d7f9db4fa58d1 (/var/lib/containers/storage/overlay/2c0133ef156b540ca0d9cb4e2908c2db030287c9dbbf14065f720272e4cab7ff/merged) with podman image umount INFO: Removing image mock-bootstrap-8bc41a3a-73d3-4bc2-a2f3-f43cecc4d881 INFO: Package manager dnf5 detected and used (fallback) INFO: Not updating bootstrap chroot, bootstrap_image_ready=True Start(bootstrap): creating root cache Finish(bootstrap): creating root cache Finish(bootstrap): chroot init Start: chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-43-aarch64-1792358989.688234/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Package manager dnf5 detected and used (direct choice) INFO: Buildroot is handled by package management downloaded with a bootstrap image: rpm-6.0.2-1.fc43.aarch64 rpm-sequoia-1.10.3-1.fc43.aarch64 dnf5-5.2.18.0-5.fc43.aarch64 dnf5-plugins-5.2.18.0-5.fc43.aarch64 Start: installing minimal buildroot with dnf5 Updating and loading repositories: Copr repository 100% | 5.8 KiB/s | 5.1 KiB | 00m01s updates 100% | 20.2 MiB/s | 33.0 MiB | 00m02s fedora 100% | 8.7 MiB/s | 35.0 MiB | 00m04s Repositories loaded. Package Arch Version Repository Size Installing group/module packages: bash aarch64 5.3.0-2.fc43 fedora 8.4 MiB bzip2 aarch64 1.0.8-21.fc43 fedora 171.3 KiB coreutils aarch64 9.7-10.fc43 updates 8.1 MiB cpio aarch64 2.15-6.fc43 fedora 1.1 MiB diffutils aarch64 3.12-3.fc43 fedora 1.6 MiB fedora-release-common noarch 43-27 updates 20.6 KiB findutils aarch64 1:4.10.0-6.fc43 fedora 1.9 MiB gawk aarch64 5.3.2-2.fc43 fedora 2.6 MiB glibc-minimal-langpack aarch64 2.42-17.fc43 updates 0.0 B grep aarch64 3.12-2.fc43 fedora 1.0 MiB gzip aarch64 1.13-4.fc43 fedora 424.7 KiB info aarch64 7.2-7.fc43 updates 421.6 KiB patch aarch64 2.8-2.fc43 fedora 262.5 KiB redhat-rpm-config noarch 343-14.fc43 updates 182.9 KiB rpm-build aarch64 6.0.2-1.fc43 updates 598.1 KiB sed aarch64 4.9-5.fc43 fedora 873.2 KiB shadow-utils aarch64 2:4.18.0-3.fc43 fedora 4.4 MiB tar aarch64 2:1.35-6.fc43 fedora 3.0 MiB unzip aarch64 6.0-67.fc43 fedora 470.2 KiB util-linux aarch64 2.41.5-1.fc43 updates 6.8 MiB which aarch64 2.23-3.fc43 fedora 123.4 KiB xz aarch64 1:5.8.1-4.fc43 updates 1.4 MiB Installing dependencies: add-determinism aarch64 0.6.0-3.fc43 updates 2.0 MiB alternatives aarch64 1.33-3.fc43 updates 90.2 KiB ansible-srpm-macros noarch 1-18.1.fc43 fedora 35.7 KiB audit-libs aarch64 4.2.1-1.fc43 updates 486.5 KiB binutils aarch64 2.45.1-5.fc43 updates 31.0 MiB build-reproducibility-srpm-macros noarch 0.6.0-3.fc43 updates 735.0 B bzip2-libs aarch64 1.0.8-21.fc43 fedora 72.6 KiB ca-certificates noarch 2026.2.90_v9.0.317-1.fc43 updates 2.7 MiB cmake-srpm-macros noarch 3.31.11-1.fc43 updates 524.0 B coreutils-common aarch64 9.7-10.fc43 updates 11.3 MiB crypto-policies noarch 20251125-1.git63291f8.fc43 updates 147.1 KiB curl aarch64 8.15.0-10.fc43 updates 457.5 KiB cyrus-sasl-lib aarch64 2.1.28-33.fc43 fedora 2.4 MiB debugedit aarch64 5.2-3.fc43 fedora 317.9 KiB dwz aarch64 0.16-2.fc43 fedora 322.6 KiB ed aarch64 1.22.2-1.fc43 fedora 156.0 KiB efi-srpm-macros noarch 6-4.fc43 fedora 40.1 KiB elfutils aarch64 0.196-1.fc43 updates 3.8 MiB elfutils-debuginfod-client aarch64 0.196-1.fc43 updates 143.8 KiB elfutils-default-yama-scope noarch 0.196-1.fc43 updates 1.8 KiB elfutils-libelf aarch64 0.196-1.fc43 updates 1.5 MiB elfutils-libs aarch64 0.196-1.fc43 updates 746.6 KiB fedora-gpg-keys noarch 43-2 updates 259.0 KiB fedora-release noarch 43-27 updates 0.0 B fedora-release-identity-basic noarch 43-27 updates 631.0 B fedora-repos noarch 43-2 updates 4.9 KiB file aarch64 5.46-9.fc43 updates 140.2 KiB file-libs aarch64 5.46-9.fc43 updates 11.9 MiB filesystem aarch64 3.18-50.fc43 fedora 112.0 B filesystem-srpm-macros noarch 3.18-50.fc43 fedora 38.2 KiB fonts-srpm-macros noarch 1:2.0.5-23.fc43 fedora 55.8 KiB forge-srpm-macros noarch 0.4.0-3.fc43 fedora 38.9 KiB fpc-srpm-macros noarch 1.3-15.fc43 fedora 144.0 B gap-srpm-macros noarch 2-1.fc43 fedora 2.1 KiB gdb-minimal aarch64 17.2-2.fc43 updates 13.4 MiB gdbm-libs aarch64 1:1.23-10.fc43 fedora 233.9 KiB ghc-srpm-macros noarch 1.9.2-3.fc43 fedora 779.0 B glibc aarch64 2.42-17.fc43 updates 6.3 MiB glibc-common aarch64 2.42-17.fc43 updates 1.3 MiB glibc-gconv-extra aarch64 2.42-17.fc43 updates 18.5 MiB gmp aarch64 1:6.3.0-4.fc43 fedora 657.9 KiB gnat-srpm-macros noarch 7-1.fc43 updates 1.0 KiB gnome-srpm-macros noarch 1.0-1.fc43 updates 3.5 KiB gnulib-l10n noarch 20241231-1.fc43 fedora 655.0 KiB gnupg2 aarch64 2.4.9-5.fc43 updates 6.5 MiB gnupg2-dirmngr aarch64 2.4.9-5.fc43 updates 646.4 KiB gnupg2-gpg-agent aarch64 2.4.9-5.fc43 updates 847.3 KiB gnupg2-gpgconf aarch64 2.4.9-5.fc43 updates 321.9 KiB gnupg2-keyboxd aarch64 2.4.9-5.fc43 updates 233.3 KiB gnupg2-verify aarch64 2.4.9-5.fc43 updates 364.4 KiB gnutls aarch64 3.8.13-1.fc43 updates 3.7 MiB go-srpm-macros noarch 3.8.0-1.fc43 fedora 61.9 KiB gpgverify noarch 2.2-3.fc43 fedora 8.7 KiB ima-evm-utils-libs aarch64 1.6.2-6.fc43 fedora 92.7 KiB jansson aarch64 2.14-3.fc43 fedora 93.1 KiB java-srpm-macros noarch 1-7.fc43 fedora 870.0 B json-c aarch64 0.18-7.fc43 fedora 138.7 KiB kernel-srpm-macros noarch 1.0-27.fc43 fedora 1.9 KiB keyutils-libs aarch64 1.6.3-6.fc43 fedora 98.3 KiB krb5-libs aarch64 1.22.2-4.fc43 updates 2.5 MiB libacl aarch64 2.4.0-1.fc43 updates 67.9 KiB libarchive aarch64 3.8.4-1.fc43 updates 975.3 KiB libassuan aarch64 2.5.7-4.fc43 fedora 215.8 KiB libattr aarch64 2.6.0-1.fc43 updates 68.3 KiB libblkid aarch64 2.41.5-1.fc43 updates 290.4 KiB libbrotli aarch64 1.2.0-1.fc43 updates 909.5 KiB libcap aarch64 2.76-4.fc43 updates 508.8 KiB libcap-ng aarch64 0.9.6-1.fc43 updates 160.8 KiB libcom_err aarch64 1.47.3-2.fc43 fedora 111.2 KiB libcurl aarch64 8.15.0-10.fc43 updates 915.0 KiB libeconf aarch64 0.7.9-2.fc43 fedora 81.0 KiB libevent aarch64 2.1.13-1.fc43 updates 1.1 MiB libfdisk aarch64 2.41.5-1.fc43 updates 418.8 KiB libffi aarch64 3.5.2-1.fc43 updates 155.9 KiB libfsverity aarch64 1.6-3.fc43 fedora 68.5 KiB libgcc aarch64 15.3.1-1.fc43 updates 222.2 KiB libgcrypt aarch64 1.11.1-4.fc43 updates 1.2 MiB libgomp aarch64 15.3.1-1.fc43 updates 517.3 KiB libgpg-error aarch64 1.55-2.fc43 fedora 971.3 KiB libidn2 aarch64 2.3.8-2.fc43 fedora 560.6 KiB libksba aarch64 1.6.7-4.fc43 fedora 398.4 KiB liblastlog2 aarch64 2.41.5-1.fc43 updates 137.7 KiB libmount aarch64 2.41.5-1.fc43 updates 420.1 KiB libnghttp2 aarch64 1.66.0-3.fc43 updates 197.8 KiB libpfm aarch64 4.13.0-20.fc43 updates 251.9 KiB libpkgconf aarch64 2.3.0-3.fc43 fedora 134.0 KiB libpsl aarch64 0.21.5-6.fc43 fedora 132.5 KiB libselinux aarch64 3.9-5.fc43 fedora 201.1 KiB libsemanage aarch64 3.9-4.fc43 fedora 360.2 KiB libsepol aarch64 3.9-2.fc43 fedora 809.8 KiB libsmartcols aarch64 2.41.5-1.fc43 updates 224.4 KiB libssh aarch64 0.11.5-1.fc43 updates 588.9 KiB libssh-config noarch 0.11.5-1.fc43 updates 277.0 B libstdc++ aarch64 15.3.1-1.fc43 updates 2.8 MiB libtasn1 aarch64 4.21.0-1.fc43 updates 220.8 KiB libtool-ltdl aarch64 2.5.4-8.fc43 updates 94.0 KiB libunistring aarch64 1.1-10.fc43 fedora 1.7 MiB libusb1 aarch64 1.0.30-1.fc43 updates 179.6 KiB libuuid aarch64 2.41.5-1.fc43 updates 69.3 KiB libverto aarch64 0.3.2-11.fc43 fedora 69.4 KiB libxcrypt aarch64 4.5.2-1.fc43 updates 273.4 KiB libxml2 aarch64 2.12.10-5.fc43 fedora 1.9 MiB libzstd aarch64 1.5.7-2.fc43 fedora 667.7 KiB lua-libs aarch64 5.4.8-4.fc43 updates 329.9 KiB lua-srpm-macros noarch 1-16.fc43 fedora 1.3 KiB lz4-libs aarch64 1.10.0-3.fc43 fedora 197.4 KiB mpfr aarch64 4.2.2-2.fc43 fedora 755.5 KiB ncurses-base noarch 6.5-7.20250614.fc43 fedora 328.1 KiB ncurses-libs aarch64 6.5-7.20250614.fc43 fedora 1.2 MiB nettle aarch64 3.10.1-2.fc43 fedora 765.3 KiB npth aarch64 1.8-3.fc43 fedora 93.5 KiB ocaml-srpm-macros noarch 11-2.fc43 fedora 1.9 KiB openblas-srpm-macros noarch 2-20.fc43 fedora 112.0 B openldap aarch64 2.6.14-1.fc43 updates 764.8 KiB openssl-libs aarch64 1:3.5.9-1.fc43 updates 7.4 MiB p11-kit aarch64 0.26.5-1.fc43 updates 2.7 MiB p11-kit-trust aarch64 0.26.5-1.fc43 updates 530.1 KiB package-notes-srpm-macros noarch 0.20-1.fc43 updates 1.6 KiB pam-libs aarch64 1.7.1-5.fc43 updates 222.5 KiB pcre2 aarch64 10.47-1.fc43 updates 714.5 KiB pcre2-syntax noarch 10.47-1.fc43 updates 281.9 KiB perl-srpm-macros noarch 1-60.fc43 fedora 861.0 B pkgconf aarch64 2.3.0-3.fc43 fedora 112.4 KiB pkgconf-m4 noarch 2.3.0-3.fc43 fedora 14.4 KiB pkgconf-pkg-config aarch64 2.3.0-3.fc43 fedora 990.0 B popt aarch64 1.19-9.fc43 fedora 144.8 KiB publicsuffix-list-dafsa noarch 20260116-1.fc43 updates 70.4 KiB pyproject-srpm-macros noarch 1.23.2-1.fc43 updates 3.4 KiB python-srpm-macros noarch 3.14-5.fc43 fedora 51.5 KiB qt5-srpm-macros noarch 5.15.18-1.fc43 updates 500.0 B qt6-srpm-macros noarch 6.10.3-1.fc43 updates 472.0 B readline aarch64 8.3-2.fc43 fedora 563.8 KiB rpm aarch64 6.0.2-1.fc43 updates 3.4 MiB rpm-build-libs aarch64 6.0.2-1.fc43 updates 264.0 KiB rpm-libs aarch64 6.0.2-1.fc43 updates 995.3 KiB rpm-sequoia aarch64 1.10.3-1.fc43 updates 2.3 MiB rpm-sign-libs aarch64 6.0.2-1.fc43 updates 67.6 KiB rust-srpm-macros noarch 28.5-1.fc43 updates 5.5 KiB setup noarch 2.15.0-26.fc43 fedora 725.0 KiB sqlite-libs aarch64 3.50.2-3.fc43 updates 1.5 MiB systemd-libs aarch64 258.11-1.fc43 updates 2.5 MiB systemd-standalone-sysusers aarch64 258.11-1.fc43 updates 329.5 KiB tpm2-tss aarch64 4.1.3-8.fc43 fedora 2.1 MiB tree-sitter-srpm-macros noarch 0.4.2-1.fc43 fedora 8.3 KiB util-linux-core aarch64 2.41.5-1.fc43 updates 2.4 MiB xxhash-libs aarch64 0.8.4-1.fc43 updates 85.7 KiB xz-libs aarch64 1:5.8.1-4.fc43 updates 201.6 KiB zig-srpm-macros noarch 1-5.fc43 fedora 1.1 KiB zip aarch64 3.0-44.fc43 fedora 762.5 KiB zlib-ng-compat aarch64 2.3.3-2.fc43 updates 133.5 KiB zstd aarch64 1.5.7-2.fc43 fedora 1.5 MiB Installing groups: Buildsystem building group Transaction Summary: Installing: 173 packages Total size of inbound packages is 58 MiB. Need to download 58 MiB. After this operation, 228 MiB extra will be used (install 228 MiB, remove 0 B). [ 1/173] bzip2-0:1.0.8-21.fc43.aarch64 100% | 70.8 KiB/s | 51.6 KiB | 00m01s [ 2/173] cpio-0:2.15-6.fc43.aarch64 100% | 321.4 KiB/s | 289.6 KiB | 00m01s [ 3/173] diffutils-0:3.12-3.fc43.aarch 100% | 773.2 KiB/s | 389.7 KiB | 00m01s [ 4/173] findutils-1:4.10.0-6.fc43.aar 100% | 1.0 MiB/s | 552.7 KiB | 00m01s [ 5/173] grep-0:3.12-2.fc43.aarch64 100% | 779.6 KiB/s | 296.2 KiB | 00m00s [ 6/173] gzip-0:1.13-4.fc43.aarch64 100% | 600.8 KiB/s | 167.6 KiB | 00m00s [ 7/173] patch-0:2.8-2.fc43.aarch64 100% | 531.3 KiB/s | 111.6 KiB | 00m00s [ 8/173] gawk-0:5.3.2-2.fc43.aarch64 100% | 882.5 KiB/s | 1.1 MiB | 00m01s [ 9/173] bash-0:5.3.0-2.fc43.aarch64 100% | 744.7 KiB/s | 1.8 MiB | 00m03s [ 10/173] sed-0:4.9-5.fc43.aarch64 100% | 913.8 KiB/s | 314.4 KiB | 00m00s [ 11/173] unzip-0:6.0-67.fc43.aarch64 100% | 707.6 KiB/s | 185.4 KiB | 00m00s [ 12/173] which-0:2.23-3.fc43.aarch64 100% | 285.3 KiB/s | 41.4 KiB | 00m00s [ 13/173] coreutils-0:9.7-10.fc43.aarch 100% | 6.3 MiB/s | 1.1 MiB | 00m00s [ 14/173] fedora-release-common-0:43-27 100% | 1.8 MiB/s | 22.6 KiB | 00m00s [ 15/173] glibc-minimal-langpack-0:2.42 100% | 3.1 MiB/s | 47.1 KiB | 00m00s [ 16/173] info-0:7.2-7.fc43.aarch64 100% | 7.0 MiB/s | 179.2 KiB | 00m00s [ 17/173] redhat-rpm-config-0:343-14.fc 100% | 3.9 MiB/s | 76.1 KiB | 00m00s [ 18/173] rpm-build-0:6.0.2-1.fc43.aarc 100% | 6.3 MiB/s | 129.9 KiB | 00m00s [ 19/173] shadow-utils-2:4.18.0-3.fc43. 100% | 1.5 MiB/s | 1.3 MiB | 00m01s [ 20/173] util-linux-0:2.41.5-1.fc43.aa 100% | 12.6 MiB/s | 1.2 MiB | 00m00s [ 21/173] xz-1:5.8.1-4.fc43.aarch64 100% | 6.3 MiB/s | 573.5 KiB | 00m00s [ 22/173] tar-2:1.35-6.fc43.aarch64 100% | 850.8 KiB/s | 850.8 KiB | 00m01s [ 23/173] filesystem-0:3.18-50.fc43.aar 100% | 5.9 MiB/s | 1.3 MiB | 00m00s [ 24/173] bzip2-libs-0:1.0.8-21.fc43.aa 100% | 302.9 KiB/s | 40.9 KiB | 00m00s [ 25/173] libselinux-0:3.9-5.fc43.aarch 100% | 657.3 KiB/s | 96.6 KiB | 00m00s [ 26/173] ncurses-libs-0:6.5-7.20250614 100% | 767.3 KiB/s | 324.6 KiB | 00m00s [ 27/173] mpfr-0:4.2.2-2.fc43.aarch64 100% | 2.0 MiB/s | 322.0 KiB | 00m00s [ 28/173] gmp-1:6.3.0-4.fc43.aarch64 100% | 753.6 KiB/s | 271.3 KiB | 00m00s [ 29/173] ed-0:1.22.2-1.fc43.aarch64 100% | 561.6 KiB/s | 83.1 KiB | 00m00s [ 30/173] readline-0:8.3-2.fc43.aarch64 100% | 786.4 KiB/s | 221.8 KiB | 00m00s [ 31/173] libeconf-0:0.7.9-2.fc43.aarch 100% | 236.0 KiB/s | 35.2 KiB | 00m00s [ 32/173] libsemanage-0:3.9-4.fc43.aarc 100% | 699.0 KiB/s | 119.5 KiB | 00m00s [ 33/173] coreutils-common-0:9.7-10.fc4 100% | 14.8 MiB/s | 2.1 MiB | 00m00s [ 34/173] glibc-common-0:2.42-17.fc43.a 100% | 9.5 MiB/s | 322.1 KiB | 00m00s [ 35/173] cmake-srpm-macros-0:3.31.11-1 100% | 985.6 KiB/s | 9.9 KiB | 00m00s [ 36/173] gnome-srpm-macros-0:1.0-1.fc4 100% | 956.8 KiB/s | 8.6 KiB | 00m00s [ 37/173] setup-0:2.15.0-26.fc43.noarch 100% | 563.9 KiB/s | 157.3 KiB | 00m00s [ 38/173] glibc-0:2.42-17.fc43.aarch64 100% | 10.8 MiB/s | 1.8 MiB | 00m00s [ 39/173] ansible-srpm-macros-0:1-18.1. 100% | 148.6 KiB/s | 19.9 KiB | 00m00s [ 40/173] efi-srpm-macros-0:6-4.fc43.no 100% | 167.1 KiB/s | 22.4 KiB | 00m00s [ 41/173] dwz-0:0.16-2.fc43.aarch64 100% | 944.3 KiB/s | 132.2 KiB | 00m00s [ 42/173] filesystem-srpm-macros-0:3.18 100% | 197.1 KiB/s | 26.4 KiB | 00m00s [ 43/173] fonts-srpm-macros-1:2.0.5-23. 100% | 202.8 KiB/s | 27.2 KiB | 00m00s [ 44/173] forge-srpm-macros-0:0.4.0-3.f 100% | 149.9 KiB/s | 20.1 KiB | 00m00s [ 45/173] fpc-srpm-macros-0:1.3-15.fc43 100% | 58.9 KiB/s | 7.9 KiB | 00m00s [ 46/173] gap-srpm-macros-0:2-1.fc43.no 100% | 66.9 KiB/s | 9.0 KiB | 00m00s [ 47/173] ghc-srpm-macros-0:1.9.2-3.fc4 100% | 65.3 KiB/s | 8.7 KiB | 00m00s [ 48/173] go-srpm-macros-0:3.8.0-1.fc43 100% | 209.7 KiB/s | 28.3 KiB | 00m00s [ 49/173] java-srpm-macros-0:1-7.fc43.n 100% | 59.3 KiB/s | 7.9 KiB | 00m00s [ 50/173] kernel-srpm-macros-0:1.0-27.f 100% | 66.6 KiB/s | 8.9 KiB | 00m00s [ 51/173] lua-srpm-macros-0:1-16.fc43.n 100% | 64.9 KiB/s | 8.8 KiB | 00m00s [ 52/173] ocaml-srpm-macros-0:11-2.fc43 100% | 69.1 KiB/s | 9.3 KiB | 00m00s [ 53/173] openblas-srpm-macros-0:2-20.f 100% | 51.7 KiB/s | 7.6 KiB | 00m00s [ 54/173] perl-srpm-macros-0:1-60.fc43. 100% | 61.9 KiB/s | 8.3 KiB | 00m00s [ 55/173] python-srpm-macros-0:3.14-5.f 100% | 174.4 KiB/s | 23.4 KiB | 00m00s [ 56/173] tree-sitter-srpm-macros-0:0.4 100% | 99.6 KiB/s | 13.4 KiB | 00m00s [ 57/173] zig-srpm-macros-0:1-5.fc43.no 100% | 62.9 KiB/s | 8.4 KiB | 00m00s [ 58/173] rpm-0:6.0.2-1.fc43.aarch64 100% | 9.7 MiB/s | 574.4 KiB | 00m00s [ 59/173] pkgconf-pkg-config-0:2.3.0-3. 100% | 66.5 KiB/s | 9.6 KiB | 00m00s [ 60/173] debugedit-0:5.2-3.fc43.aarch6 100% | 388.4 KiB/s | 84.7 KiB | 00m00s [ 61/173] zip-0:3.0-44.fc43.aarch64 100% | 934.5 KiB/s | 262.6 KiB | 00m00s [ 62/173] libblkid-0:2.41.5-1.fc43.aarc 100% | 4.6 MiB/s | 122.0 KiB | 00m00s [ 63/173] libfdisk-0:2.41.5-1.fc43.aarc 100% | 5.4 MiB/s | 154.6 KiB | 00m00s [ 64/173] liblastlog2-0:2.41.5-1.fc43.a 100% | 1.8 MiB/s | 24.2 KiB | 00m00s [ 65/173] popt-0:1.19-9.fc43.aarch64 100% | 480.2 KiB/s | 65.3 KiB | 00m00s [ 66/173] libmount-0:2.41.5-1.fc43.aarc 100% | 5.6 MiB/s | 160.1 KiB | 00m00s [ 67/173] libsmartcols-0:2.41.5-1.fc43. 100% | 3.2 MiB/s | 82.8 KiB | 00m00s [ 68/173] libuuid-0:2.41.5-1.fc43.aarch 100% | 2.0 MiB/s | 26.2 KiB | 00m00s [ 69/173] xz-libs-1:5.8.1-4.fc43.aarch6 100% | 4.7 MiB/s | 111.1 KiB | 00m00s [ 70/173] util-linux-core-0:2.41.5-1.fc 100% | 11.0 MiB/s | 540.9 KiB | 00m00s [ 71/173] ncurses-base-0:6.5-7.20250614 100% | 551.4 KiB/s | 88.2 KiB | 00m00s [ 72/173] gnulib-l10n-0:20241231-1.fc43 100% | 921.3 KiB/s | 150.2 KiB | 00m00s [ 73/173] zstd-0:1.5.7-2.fc43.aarch64 100% | 895.5 KiB/s | 446.9 KiB | 00m00s [ 74/173] glibc-gconv-extra-0:2.42-17.f 100% | 17.0 MiB/s | 1.7 MiB | 00m00s [ 75/173] libsepol-0:3.9-2.fc43.aarch64 100% | 727.1 KiB/s | 323.6 KiB | 00m00s [ 76/173] pkgconf-0:2.3.0-3.fc43.aarch6 100% | 310.5 KiB/s | 44.4 KiB | 00m00s [ 77/173] pkgconf-m4-0:2.3.0-3.fc43.noa 100% | 103.8 KiB/s | 13.9 KiB | 00m00s [ 78/173] rpm-libs-0:6.0.2-1.fc43.aarch 100% | 10.2 MiB/s | 377.6 KiB | 00m00s [ 79/173] lz4-libs-0:1.10.0-3.fc43.aarc 100% | 496.7 KiB/s | 79.5 KiB | 00m00s [ 80/173] rpm-build-libs-0:6.0.2-1.fc43 100% | 4.7 MiB/s | 115.0 KiB | 00m00s [ 81/173] rpm-sign-libs-0:6.0.2-1.fc43. 100% | 2.2 MiB/s | 24.8 KiB | 00m00s [ 82/173] libpkgconf-0:2.3.0-3.fc43.aar 100% | 185.7 KiB/s | 37.9 KiB | 00m00s [ 83/173] libzstd-0:1.5.7-2.fc43.aarch6 100% | 1.8 MiB/s | 283.6 KiB | 00m00s [ 84/173] ima-evm-utils-libs-0:1.6.2-6. 100% | 199.4 KiB/s | 29.3 KiB | 00m00s [ 85/173] libfsverity-0:1.6-3.fc43.aarc 100% | 131.7 KiB/s | 18.6 KiB | 00m00s [ 86/173] libgcc-0:15.3.1-1.fc43.aarch6 100% | 11.3 MiB/s | 126.9 KiB | 00m00s [ 87/173] libstdc++-0:15.3.1-1.fc43.aar 100% | 14.5 MiB/s | 862.0 KiB | 00m00s [ 88/173] zlib-ng-compat-0:2.3.3-2.fc43 100% | 3.9 MiB/s | 72.2 KiB | 00m00s [ 89/173] libusb1-0:1.0.30-1.fc43.aarch 100% | 4.5 MiB/s | 78.4 KiB | 00m00s [ 90/173] json-c-0:0.18-7.fc43.aarch64 100% | 260.8 KiB/s | 45.1 KiB | 00m00s [ 91/173] libacl-0:2.4.0-1.fc43.aarch64 100% | 1.5 MiB/s | 26.4 KiB | 00m00s [ 92/173] audit-libs-0:4.2.1-1.fc43.aar 100% | 4.3 MiB/s | 141.3 KiB | 00m00s [ 93/173] tpm2-tss-0:4.1.3-8.fc43.aarch 100% | 1.4 MiB/s | 400.5 KiB | 00m00s [ 94/173] pam-libs-0:1.7.1-5.fc43.aarch 100% | 1.7 MiB/s | 56.2 KiB | 00m00s [ 95/173] libattr-0:2.6.0-1.fc43.aarch6 100% | 1.7 MiB/s | 17.3 KiB | 00m00s [ 96/173] openssl-libs-1:3.5.9-1.fc43.a 100% | 18.9 MiB/s | 2.5 MiB | 00m00s [ 97/173] libxcrypt-0:4.5.2-1.fc43.aarc 100% | 1.8 MiB/s | 125.2 KiB | 00m00s [ 98/173] pcre2-syntax-0:10.47-1.fc43.n 100% | 6.0 MiB/s | 164.7 KiB | 00m00s [ 99/173] pcre2-0:10.47-1.fc43.aarch64 100% | 5.5 MiB/s | 246.2 KiB | 00m00s [100/173] elfutils-libelf-0:0.196-1.fc4 100% | 7.2 MiB/s | 234.8 KiB | 00m00s [101/173] elfutils-debuginfod-client-0: 100% | 3.0 MiB/s | 45.5 KiB | 00m00s [102/173] elfutils-libs-0:0.196-1.fc43. 100% | 7.9 MiB/s | 267.4 KiB | 00m00s [103/173] elfutils-0:0.196-1.fc43.aarch 100% | 5.0 MiB/s | 634.6 KiB | 00m00s [104/173] jansson-0:2.14-3.fc43.aarch64 100% | 293.6 KiB/s | 46.7 KiB | 00m00s [105/173] systemd-libs-0:258.11-1.fc43. 100% | 11.9 MiB/s | 792.9 KiB | 00m00s [106/173] libcap-ng-0:0.9.6-1.fc43.aarc 100% | 2.6 MiB/s | 35.1 KiB | 00m00s [107/173] libcap-0:2.76-4.fc43.aarch64 100% | 4.3 MiB/s | 87.1 KiB | 00m00s [108/173] gnupg2-0:2.4.9-5.fc43.aarch64 100% | 13.2 MiB/s | 1.6 MiB | 00m00s [109/173] gnupg2-dirmngr-0:2.4.9-5.fc43 100% | 10.4 MiB/s | 266.2 KiB | 00m00s [110/173] gpgverify-0:2.2-3.fc43.noarch 100% | 82.9 KiB/s | 11.1 KiB | 00m00s [111/173] gnupg2-gpgconf-0:2.4.9-5.fc43 100% | 4.8 MiB/s | 114.0 KiB | 00m00s [112/173] gnupg2-gpg-agent-0:2.4.9-5.fc 100% | 8.1 MiB/s | 266.4 KiB | 00m00s [113/173] gnupg2-keyboxd-0:2.4.9-5.fc43 100% | 7.4 MiB/s | 91.4 KiB | 00m00s [114/173] gnupg2-verify-0:2.4.9-5.fc43. 100% | 4.9 MiB/s | 164.3 KiB | 00m00s [115/173] libassuan-0:2.5.7-4.fc43.aarc 100% | 332.6 KiB/s | 66.5 KiB | 00m00s [116/173] libgpg-error-0:1.55-2.fc43.aa 100% | 1.1 MiB/s | 243.5 KiB | 00m00s [117/173] npth-0:1.8-3.fc43.aarch64 100% | 185.2 KiB/s | 25.0 KiB | 00m00s [118/173] lua-libs-0:5.4.8-4.fc43.aarch 100% | 4.9 MiB/s | 129.1 KiB | 00m00s [119/173] libksba-0:1.6.7-4.fc43.aarch6 100% | 960.4 KiB/s | 157.5 KiB | 00m00s [120/173] binutils-0:2.45.1-5.fc43.aarc 100% | 7.9 MiB/s | 6.3 MiB | 00m01s [121/173] rpm-sequoia-0:1.10.3-1.fc43.a 100% | 12.5 MiB/s | 882.8 KiB | 00m00s [122/173] file-0:5.46-9.fc43.aarch64 100% | 6.0 MiB/s | 48.8 KiB | 00m00s [123/173] libgomp-0:15.3.1-1.fc43.aarch 100% | 22.7 MiB/s | 372.1 KiB | 00m00s [124/173] sqlite-libs-0:3.50.2-3.fc43.a 100% | 12.5 MiB/s | 740.4 KiB | 00m00s [125/173] libarchive-0:3.8.4-1.fc43.aar 100% | 25.2 MiB/s | 413.6 KiB | 00m00s [126/173] curl-0:8.15.0-10.fc43.aarch64 100% | 27.3 MiB/s | 223.6 KiB | 00m00s [127/173] build-reproducibility-srpm-ma 100% | 1.7 MiB/s | 11.9 KiB | 00m00s [128/173] file-libs-0:5.46-9.fc43.aarch 100% | 12.7 MiB/s | 847.7 KiB | 00m00s [129/173] gnat-srpm-macros-0:7-1.fc43.n 100% | 865.6 KiB/s | 8.7 KiB | 00m00s [130/173] package-notes-srpm-macros-0:0 100% | 985.4 KiB/s | 9.9 KiB | 00m00s [131/173] add-determinism-0:0.6.0-3.fc4 100% | 26.1 MiB/s | 827.2 KiB | 00m00s [132/173] pyproject-srpm-macros-0:1.23. 100% | 1.5 MiB/s | 15.5 KiB | 00m00s [133/173] qt5-srpm-macros-0:5.15.18-1.f 100% | 1.1 MiB/s | 8.6 KiB | 00m00s [134/173] rust-srpm-macros-0:28.5-1.fc4 100% | 1.4 MiB/s | 11.2 KiB | 00m00s [135/173] qt6-srpm-macros-0:6.10.3-1.fc 100% | 1.0 MiB/s | 9.1 KiB | 00m00s [136/173] crypto-policies-0:20251125-1. 100% | 4.5 MiB/s | 97.8 KiB | 00m00s [137/173] ca-certificates-0:2026.2.90_v 100% | 29.7 MiB/s | 973.1 KiB | 00m00s [138/173] libgcrypt-0:1.11.1-4.fc43.aar 100% | 11.5 MiB/s | 518.1 KiB | 00m00s [139/173] gnutls-0:3.8.13-1.fc43.aarch6 100% | 27.8 MiB/s | 1.3 MiB | 00m00s [140/173] libxml2-0:2.12.10-5.fc43.aarc 100% | 3.0 MiB/s | 678.7 KiB | 00m00s [141/173] libidn2-0:2.3.8-2.fc43.aarch6 100% | 1.2 MiB/s | 174.6 KiB | 00m00s [142/173] openldap-0:2.6.14-1.fc43.aarc 100% | 8.2 MiB/s | 251.3 KiB | 00m00s [143/173] nettle-0:3.10.1-2.fc43.aarch6 100% | 2.9 MiB/s | 425.7 KiB | 00m00s [144/173] cyrus-sasl-lib-0:2.1.28-33.fc 100% | 4.9 MiB/s | 774.0 KiB | 00m00s [145/173] fedora-repos-0:43-2.noarch 100% | 887.9 KiB/s | 8.9 KiB | 00m00s [146/173] fedora-gpg-keys-0:43-2.noarch 100% | 6.4 MiB/s | 184.2 KiB | 00m00s [147/173] elfutils-default-yama-scope-0 100% | 1.0 MiB/s | 11.3 KiB | 00m00s [148/173] gdbm-libs-1:1.23-10.fc43.aarc 100% | 373.4 KiB/s | 56.0 KiB | 00m00s [149/173] libffi-0:3.5.2-1.fc43.aarch64 100% | 4.8 MiB/s | 39.4 KiB | 00m00s [150/173] libpfm-0:4.13.0-20.fc43.aarch 100% | 3.0 MiB/s | 53.0 KiB | 00m00s [151/173] p11-kit-0:0.26.5-1.fc43.aarch 100% | 16.7 MiB/s | 530.6 KiB | 00m00s [152/173] p11-kit-trust-0:0.26.5-1.fc43 100% | 5.0 MiB/s | 139.5 KiB | 00m00s [153/173] alternatives-0:1.33-3.fc43.aa 100% | 4.9 MiB/s | 40.3 KiB | 00m00s [154/173] libtasn1-0:4.21.0-1.fc43.aarc 100% | 4.0 MiB/s | 73.8 KiB | 00m00s [155/173] libevent-0:2.1.13-1.fc43.aarc 100% | 16.6 MiB/s | 254.5 KiB | 00m00s [156/173] fedora-release-0:43-27.noarch 100% | 1.6 MiB/s | 11.5 KiB | 00m00s [157/173] libtool-ltdl-0:2.5.4-8.fc43.a 100% | 2.7 MiB/s | 35.6 KiB | 00m00s [158/173] systemd-standalone-sysusers-0 100% | 5.4 MiB/s | 144.0 KiB | 00m00s [159/173] xxhash-libs-0:0.8.4-1.fc43.aa 100% | 2.3 MiB/s | 34.6 KiB | 00m00s [160/173] fedora-release-identity-basic 100% | 1.2 MiB/s | 12.3 KiB | 00m00s [161/173] libcurl-0:8.15.0-10.fc43.aarc 100% | 9.6 MiB/s | 391.8 KiB | 00m00s [162/173] libssh-0:0.11.5-1.fc43.aarch6 100% | 7.8 MiB/s | 232.8 KiB | 00m00s [163/173] gdb-minimal-0:17.2-2.fc43.aar 100% | 29.6 MiB/s | 4.2 MiB | 00m00s [164/173] libssh-config-0:0.11.5-1.fc43 100% | 894.4 KiB/s | 8.9 KiB | 00m00s [165/173] publicsuffix-list-dafsa-0:202 100% | 3.7 MiB/s | 60.3 KiB | 00m00s [166/173] libpsl-0:0.21.5-6.fc43.aarch6 100% | 397.1 KiB/s | 65.1 KiB | 00m00s [167/173] krb5-libs-0:1.22.2-4.fc43.aar 100% | 4.8 MiB/s | 761.9 KiB | 00m00s [168/173] libunistring-0:1.1-10.fc43.aa 100% | 679.0 KiB/s | 539.2 KiB | 00m01s [169/173] keyutils-libs-0:1.6.3-6.fc43. 100% | 206.0 KiB/s | 31.5 KiB | 00m00s [170/173] libcom_err-0:1.47.3-2.fc43.aa 100% | 185.5 KiB/s | 26.7 KiB | 00m00s [171/173] libbrotli-0:1.2.0-1.fc43.aarc 100% | 9.5 MiB/s | 350.4 KiB | 00m00s [172/173] libnghttp2-0:1.66.0-3.fc43.aa 100% | 8.6 MiB/s | 70.7 KiB | 00m00s [173/173] libverto-0:0.3.2-11.fc43.aarc 100% | 143.9 KiB/s | 20.4 KiB | 00m00s -------------------------------------------------------------------------------- [173/173] Total 100% | 6.6 MiB/s | 58.1 MiB | 00m09s Running transaction Importing OpenPGP key 0x31645531: UserID : "Fedora (43) " Fingerprint: C6E7F081CF80E13146676E88829B606631645531 From : file:///usr/share/distribution-gpg-keys/fedora/RPM-GPG-KEY-fedora-43-primary The key was successfully imported. [ 1/175] Verify package files 100% | 793.0 B/s | 173.0 B | 00m00s [ 2/175] Prepare transaction 100% | 2.8 KiB/s | 173.0 B | 00m00s [ 3/175] Installing libgcc-0:15.3.1-1. 100% | 218.5 MiB/s | 223.7 KiB | 00m00s [ 4/175] Installing publicsuffix-list- 100% | 69.4 MiB/s | 71.1 KiB | 00m00s [ 5/175] Installing libssh-config-0:0. 100% | 0.0 B/s | 816.0 B | 00m00s [ 6/175] Installing fedora-release-ide 100% | 867.2 KiB/s | 888.0 B | 00m00s [ 7/175] Installing fedora-gpg-keys-0: 100% | 31.5 MiB/s | 355.0 KiB | 00m00s [ 8/175] Installing fedora-repos-0:43- 100% | 0.0 B/s | 5.7 KiB | 00m00s [ 9/175] Installing fedora-release-com 100% | 24.3 MiB/s | 24.8 KiB | 00m00s [ 10/175] Installing fedora-release-0:4 100% | 13.5 KiB/s | 124.0 B | 00m00s >>> Running sysusers scriptlet: setup-0:2.15.0-26.fc43.noarch >>> Finished sysusers scriptlet: setup-0:2.15.0-26.fc43.noarch >>> Scriptlet output: >>> Creating group 'adm' with GID 4. >>> Creating group 'audio' with GID 63. >>> Creating group 'cdrom' with GID 11. >>> Creating group 'clock' with GID 103. >>> Creating group 'dialout' with GID 18. >>> Creating group 'disk' with GID 6. >>> Creating group 'floppy' with GID 19. >>> Creating group 'ftp' with GID 50. >>> Creating group 'games' with GID 20. >>> Creating group 'input' with GID 104. >>> Creating group 'kmem' with GID 9. >>> Creating group 'kvm' with GID 36. >>> Creating group 'lock' with GID 54. >>> Creating group 'lp' with GID 7. >>> Creating group 'mail' with GID 12. >>> Creating group 'man' with GID 15. >>> Creating group 'mem' with GID 8. >>> Creating group 'nobody' with GID 65534. >>> Creating group 'render' with GID 105. >>> Creating group 'root' with GID 0. >>> Creating group 'sgx' with GID 106. >>> Creating group 'sys' with GID 3. >>> Creating group 'tape' with GID 33. >>> Creating group 'tty' with GID 5. >>> Creating group 'users' with GID 100. >>> Creating group 'utmp' with GID 22. >>> Creating group 'video' with GID 39. >>> Creating group 'wheel' with GID 10. >>> Creating user 'adm' (adm) with UID 3 and GID 4. >>> Creating group 'bin' with GID 1. >>> Creating user 'bin' (bin) with UID 1 and GID 1. >>> Creating group 'daemon' with GID 2. >>> Creating user 'daemon' (daemon) with UID 2 and GID 2. >>> Creating user 'ftp' (FTP User) with UID 14 and GID 50. >>> Creating user 'games' (games) with UID 12 and GID 100. >>> Creating user 'halt' (halt) with UID 7 and GID 0. >>> Creating user 'lp' (lp) with UID 4 and GID 7. >>> Creating user 'mail' (mail) with UID 8 and GID 12. >>> Creating user 'nobody' (Kernel Overflow User) with UID 65534 and GID 65534. >>> Creating user 'operator' (operator) with UID 11 and GID 0. >>> Creating user 'root' (Super User) with UID 0 and GID 0. >>> Creating user 'shutdown' (shutdown) with UID 6 and GID 0. >>> Creating user 'sync' (sync) with UID 5 and GID 0. >>> [ 11/175] Installing setup-0:2.15.0-26. 100% | 37.6 MiB/s | 730.6 KiB | 00m00s >>> [RPM] /etc/hosts created as /etc/hosts.rpmnew [ 12/175] Installing filesystem-0:3.18- 100% | 1.9 MiB/s | 212.8 KiB | 00m00s [ 13/175] Installing rust-srpm-macros-0 100% | 6.2 MiB/s | 6.4 KiB | 00m00s [ 14/175] Installing qt6-srpm-macros-0: 100% | 0.0 B/s | 748.0 B | 00m00s [ 15/175] Installing qt5-srpm-macros-0: 100% | 0.0 B/s | 776.0 B | 00m00s [ 16/175] Installing package-notes-srpm 100% | 0.0 B/s | 2.1 KiB | 00m00s [ 17/175] Installing gnat-srpm-macros-0 100% | 0.0 B/s | 1.3 KiB | 00m00s [ 18/175] Installing pcre2-syntax-0:10. 100% | 277.7 MiB/s | 284.3 KiB | 00m00s [ 19/175] Installing pkgconf-m4-0:2.3.0 100% | 0.0 B/s | 14.8 KiB | 00m00s [ 20/175] Installing gnulib-l10n-0:2024 100% | 129.3 MiB/s | 661.9 KiB | 00m00s [ 21/175] Installing coreutils-common-0 100% | 305.2 MiB/s | 11.3 MiB | 00m00s [ 22/175] Installing ncurses-base-0:6.5 100% | 49.3 MiB/s | 353.5 KiB | 00m00s [ 23/175] Installing bash-0:5.3.0-2.fc4 100% | 205.6 MiB/s | 8.4 MiB | 00m00s [ 24/175] Installing glibc-common-0:2.4 100% | 60.2 MiB/s | 1.3 MiB | 00m00s [ 25/175] Installing glibc-gconv-extra- 100% | 396.3 MiB/s | 18.6 MiB | 00m00s [ 26/175] Installing glibc-0:2.42-17.fc 100% | 149.5 MiB/s | 6.3 MiB | 00m00s [ 27/175] Installing ncurses-libs-0:6.5 100% | 249.5 MiB/s | 1.2 MiB | 00m00s [ 28/175] Installing glibc-minimal-lang 100% | 0.0 B/s | 124.0 B | 00m00s [ 29/175] Installing zlib-ng-compat-0:2 100% | 131.2 MiB/s | 134.4 KiB | 00m00s [ 30/175] Installing bzip2-libs-0:1.0.8 100% | 72.0 MiB/s | 73.8 KiB | 00m00s [ 31/175] Installing libgpg-error-0:1.5 100% | 47.7 MiB/s | 977.1 KiB | 00m00s [ 32/175] Installing libstdc++-0:15.3.1 100% | 315.1 MiB/s | 2.8 MiB | 00m00s [ 33/175] Installing xz-libs-1:5.8.1-4. 100% | 197.9 MiB/s | 202.7 KiB | 00m00s [ 34/175] Installing libassuan-0:2.5.7- 100% | 212.6 MiB/s | 217.7 KiB | 00m00s [ 35/175] Installing libgcrypt-0:1.11.1 100% | 238.9 MiB/s | 1.2 MiB | 00m00s [ 36/175] Installing readline-0:8.3-2.f 100% | 276.3 MiB/s | 565.9 KiB | 00m00s [ 37/175] Installing gmp-1:6.3.0-4.fc43 100% | 214.9 MiB/s | 660.1 KiB | 00m00s [ 38/175] Installing libuuid-0:2.41.5-1 100% | 68.8 MiB/s | 70.4 KiB | 00m00s [ 39/175] Installing libacl-0:2.4.0-1.f 100% | 67.1 MiB/s | 68.7 KiB | 00m00s [ 40/175] Installing popt-0:1.19-9.fc43 100% | 49.3 MiB/s | 151.4 KiB | 00m00s [ 41/175] Installing libzstd-0:1.5.7-2. 100% | 217.8 MiB/s | 669.0 KiB | 00m00s [ 42/175] Installing elfutils-libelf-0: 100% | 364.6 MiB/s | 1.5 MiB | 00m00s [ 43/175] Installing npth-0:1.8-3.fc43. 100% | 92.4 MiB/s | 94.6 KiB | 00m00s [ 44/175] Installing libblkid-0:2.41.5- 100% | 142.3 MiB/s | 291.5 KiB | 00m00s [ 45/175] Installing libxcrypt-0:4.5.2- 100% | 134.8 MiB/s | 276.1 KiB | 00m00s [ 46/175] Installing sqlite-libs-0:3.50 100% | 250.2 MiB/s | 1.5 MiB | 00m00s [ 47/175] Installing gnupg2-gpgconf-0:2 100% | 18.6 MiB/s | 324.0 KiB | 00m00s [ 48/175] Installing json-c-0:0.18-7.fc 100% | 136.7 MiB/s | 139.9 KiB | 00m00s [ 49/175] Installing libunistring-0:1.1 100% | 291.0 MiB/s | 1.7 MiB | 00m00s [ 50/175] Installing libidn2-0:2.3.8-2. 100% | 138.4 MiB/s | 566.7 KiB | 00m00s [ 51/175] Installing libtasn1-0:4.21.0- 100% | 24.2 MiB/s | 222.6 KiB | 00m00s [ 52/175] Installing crypto-policies-0: 100% | 24.0 MiB/s | 172.2 KiB | 00m00s [ 53/175] Installing gnupg2-verify-0:2. 100% | 19.8 MiB/s | 365.8 KiB | 00m00s [ 54/175] Installing dwz-0:0.16-2.fc43. 100% | 18.6 MiB/s | 324.0 KiB | 00m00s [ 55/175] Installing mpfr-0:4.2.2-2.fc4 100% | 246.5 MiB/s | 757.2 KiB | 00m00s [ 56/175] Installing gawk-0:5.3.2-2.fc4 100% | 103.3 MiB/s | 2.6 MiB | 00m00s [ 57/175] Installing libksba-0:1.6.7-4. 100% | 195.8 MiB/s | 401.0 KiB | 00m00s [ 58/175] Installing unzip-0:6.0-67.fc4 100% | 27.2 MiB/s | 473.7 KiB | 00m00s [ 59/175] Installing file-libs-0:5.46-9 100% | 594.2 MiB/s | 11.9 MiB | 00m00s [ 60/175] Installing file-0:5.46-9.fc43 100% | 8.6 MiB/s | 141.7 KiB | 00m00s [ 61/175] Installing libeconf-0:0.7.9-2 100% | 80.7 MiB/s | 82.6 KiB | 00m00s [ 62/175] Installing libsmartcols-0:2.4 100% | 220.3 MiB/s | 225.6 KiB | 00m00s [ 63/175] Installing libsepol-0:3.9-2.f 100% | 263.9 MiB/s | 810.8 KiB | 00m00s [ 64/175] Installing lz4-libs-0:1.10.0- 100% | 193.9 MiB/s | 198.5 KiB | 00m00s [ 65/175] Installing libattr-0:2.6.0-1. 100% | 67.6 MiB/s | 69.3 KiB | 00m00s [ 66/175] Installing pcre2-0:10.47-1.fc 100% | 233.0 MiB/s | 715.9 KiB | 00m00s [ 67/175] Installing libselinux-0:3.9-5 100% | 98.8 MiB/s | 202.4 KiB | 00m00s [ 68/175] Installing grep-0:3.12-2.fc43 100% | 47.2 MiB/s | 1.0 MiB | 00m00s [ 69/175] Installing findutils-1:4.10.0 100% | 80.0 MiB/s | 1.9 MiB | 00m00s [ 70/175] Installing sed-0:4.9-5.fc43.a 100% | 41.0 MiB/s | 881.4 KiB | 00m00s [ 71/175] Installing xz-1:5.8.1-4.fc43. 100% | 61.5 MiB/s | 1.4 MiB | 00m00s [ 72/175] Installing libmount-0:2.41.5- 100% | 205.7 MiB/s | 421.3 KiB | 00m00s [ 73/175] Installing libcap-ng-0:0.9.6- 100% | 158.9 MiB/s | 162.7 KiB | 00m00s [ 74/175] Installing audit-libs-0:4.2.1 100% | 238.8 MiB/s | 489.1 KiB | 00m00s [ 75/175] Installing pam-libs-0:1.7.1-5 100% | 219.7 MiB/s | 224.9 KiB | 00m00s [ 76/175] Installing libcap-0:2.76-4.fc 100% | 27.9 MiB/s | 513.9 KiB | 00m00s [ 77/175] Installing systemd-libs-0:258 100% | 307.7 MiB/s | 2.5 MiB | 00m00s [ 78/175] Installing lua-libs-0:5.4.8-4 100% | 161.8 MiB/s | 331.4 KiB | 00m00s [ 79/175] Installing libffi-0:3.5.2-1.f 100% | 153.6 MiB/s | 157.3 KiB | 00m00s [ 80/175] Installing p11-kit-0:0.26.5-1 100% | 101.4 MiB/s | 2.7 MiB | 00m00s [ 81/175] Installing alternatives-0:1.3 100% | 5.6 MiB/s | 91.8 KiB | 00m00s [ 82/175] Installing p11-kit-trust-0:0. 100% | 20.0 MiB/s | 531.8 KiB | 00m00s [ 83/175] Installing openssl-libs-1:3.5 100% | 296.8 MiB/s | 7.4 MiB | 00m00s [ 84/175] Installing coreutils-0:9.7-10 100% | 177.2 MiB/s | 8.2 MiB | 00m00s [ 85/175] Installing ca-certificates-0: 100% | 1.5 MiB/s | 2.5 MiB | 00m02s [ 86/175] Installing gzip-0:1.13-4.fc43 100% | 22.1 MiB/s | 430.2 KiB | 00m00s [ 87/175] Installing libfsverity-0:1.6- 100% | 67.8 MiB/s | 69.4 KiB | 00m00s [ 88/175] Installing rpm-sequoia-0:1.10 100% | 286.4 MiB/s | 2.3 MiB | 00m00s [ 89/175] Installing libevent-0:2.1.13- 100% | 271.6 MiB/s | 1.1 MiB | 00m00s [ 90/175] Installing util-linux-core-0: 100% | 94.7 MiB/s | 2.5 MiB | 00m00s [ 91/175] Installing libusb1-0:1.0.30-1 100% | 17.7 MiB/s | 181.3 KiB | 00m00s >>> Running sysusers scriptlet: tpm2-tss-0:4.1.3-8.fc43.aarch64 >>> Finished sysusers scriptlet: tpm2-tss-0:4.1.3-8.fc43.aarch64 >>> Scriptlet output: >>> Creating group 'tss' with GID 59. >>> Creating user 'tss' (Account used for TPM access) with UID 59 and GID 59. >>> [ 92/175] Installing tpm2-tss-0:4.1.3-8 100% | 239.9 MiB/s | 2.2 MiB | 00m00s [ 93/175] Installing ima-evm-utils-libs 100% | 91.8 MiB/s | 94.0 KiB | 00m00s [ 94/175] Installing gnupg2-gpg-agent-0 100% | 28.7 MiB/s | 851.3 KiB | 00m00s [ 95/175] Installing systemd-standalone 100% | 19.0 MiB/s | 330.1 KiB | 00m00s [ 96/175] Installing rpm-libs-0:6.0.2-1 100% | 243.4 MiB/s | 996.8 KiB | 00m00s [ 97/175] Installing liblastlog2-0:2.41 100% | 15.2 MiB/s | 139.7 KiB | 00m00s [ 98/175] Installing libsemanage-0:3.9- 100% | 176.7 MiB/s | 361.9 KiB | 00m00s [ 99/175] Installing tar-2:1.35-6.fc43. 100% | 103.6 MiB/s | 3.0 MiB | 00m00s [100/175] Installing zstd-0:1.5.7-2.fc4 100% | 71.7 MiB/s | 1.5 MiB | 00m00s [101/175] Installing zip-0:3.0-44.fc43. 100% | 41.6 MiB/s | 766.4 KiB | 00m00s [102/175] Installing gnupg2-keyboxd-0:2 100% | 28.6 MiB/s | 234.6 KiB | 00m00s [103/175] Installing libpsl-0:0.21.5-6. 100% | 130.5 MiB/s | 133.6 KiB | 00m00s [104/175] Installing libfdisk-0:2.41.5- 100% | 205.0 MiB/s | 419.8 KiB | 00m00s [105/175] Installing nettle-0:3.10.1-2. 100% | 187.6 MiB/s | 768.4 KiB | 00m00s [106/175] Installing gnutls-0:3.8.13-1. 100% | 285.4 MiB/s | 3.7 MiB | 00m00s [107/175] Installing libxml2-0:2.12.10- 100% | 78.8 MiB/s | 1.9 MiB | 00m00s [108/175] Installing libarchive-0:3.8.4 100% | 238.6 MiB/s | 977.2 KiB | 00m00s [109/175] Installing bzip2-0:1.0.8-21.f 100% | 10.1 MiB/s | 175.8 KiB | 00m00s [110/175] Installing add-determinism-0: 100% | 92.4 MiB/s | 2.0 MiB | 00m00s [111/175] Installing build-reproducibil 100% | 0.0 B/s | 1.0 KiB | 00m00s [112/175] Installing cpio-0:2.15-6.fc43 100% | 52.2 MiB/s | 1.1 MiB | 00m00s [113/175] Installing diffutils-0:3.12-3 100% | 70.6 MiB/s | 1.6 MiB | 00m00s [114/175] Installing ed-0:1.22.2-1.fc43 100% | 9.7 MiB/s | 158.3 KiB | 00m00s [115/175] Installing patch-0:2.8-2.fc43 100% | 15.2 MiB/s | 264.1 KiB | 00m00s [116/175] Installing libpkgconf-0:2.3.0 100% | 132.0 MiB/s | 135.1 KiB | 00m00s [117/175] Installing pkgconf-0:2.3.0-3. 100% | 6.6 MiB/s | 114.9 KiB | 00m00s [118/175] Installing pkgconf-pkg-config 100% | 110.8 KiB/s | 1.8 KiB | 00m00s [119/175] Installing jansson-0:2.14-3.f 100% | 92.3 MiB/s | 94.5 KiB | 00m00s [120/175] Installing libgomp-0:15.3.1-1 100% | 253.3 MiB/s | 518.7 KiB | 00m00s [121/175] Installing gdbm-libs-1:1.23-1 100% | 230.1 MiB/s | 235.6 KiB | 00m00s [122/175] Installing cyrus-sasl-lib-0:2 100% | 105.1 MiB/s | 2.4 MiB | 00m00s [123/175] Installing libpfm-0:4.13.0-20 100% | 247.3 MiB/s | 253.3 KiB | 00m00s [124/175] Installing libtool-ltdl-0:2.5 100% | 92.9 MiB/s | 95.1 KiB | 00m00s [125/175] Installing openldap-0:2.6.14- 100% | 187.6 MiB/s | 768.6 KiB | 00m00s [126/175] Installing gnupg2-dirmngr-0:2 100% | 23.5 MiB/s | 649.1 KiB | 00m00s [127/175] Installing gnupg2-0:2.4.9-5.f 100% | 167.7 MiB/s | 6.5 MiB | 00m00s [128/175] Installing rpm-sign-libs-0:6. 100% | 66.9 MiB/s | 68.5 KiB | 00m00s [129/175] Installing gpgverify-0:2.2-3. 100% | 9.2 MiB/s | 9.4 KiB | 00m00s [130/175] Installing xxhash-libs-0:0.8. 100% | 85.1 MiB/s | 87.1 KiB | 00m00s [131/175] Installing keyutils-libs-0:1. 100% | 97.4 MiB/s | 99.8 KiB | 00m00s [132/175] Installing libcom_err-0:1.47. 100% | 109.5 MiB/s | 112.2 KiB | 00m00s [133/175] Installing libverto-0:0.3.2-1 100% | 69.5 MiB/s | 71.2 KiB | 00m00s [134/175] Installing krb5-libs-0:1.22.2 100% | 253.3 MiB/s | 2.5 MiB | 00m00s [135/175] Installing libssh-0:0.11.5-1. 100% | 192.4 MiB/s | 591.0 KiB | 00m00s [136/175] Installing libbrotli-0:1.2.0- 100% | 222.6 MiB/s | 911.8 KiB | 00m00s [137/175] Installing libnghttp2-0:1.66. 100% | 194.3 MiB/s | 198.9 KiB | 00m00s [138/175] Installing libcurl-0:8.15.0-1 100% | 223.7 MiB/s | 916.1 KiB | 00m00s [139/175] Installing curl-0:8.15.0-10.f 100% | 16.0 MiB/s | 460.0 KiB | 00m00s [140/175] Installing rpm-0:6.0.2-1.fc43 100% | 59.9 MiB/s | 2.8 MiB | 00m00s [141/175] Installing cmake-srpm-macros- 100% | 785.2 KiB/s | 804.0 B | 00m00s [142/175] Installing efi-srpm-macros-0: 100% | 40.2 MiB/s | 41.1 KiB | 00m00s [143/175] Installing java-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [144/175] Installing lua-srpm-macros-0: 100% | 0.0 B/s | 1.9 KiB | 00m00s [145/175] Installing tree-sitter-srpm-m 100% | 9.1 MiB/s | 9.3 KiB | 00m00s [146/175] Installing zig-srpm-macros-0: 100% | 0.0 B/s | 1.7 KiB | 00m00s [147/175] Installing filesystem-srpm-ma 100% | 38.0 MiB/s | 38.9 KiB | 00m00s [148/175] Installing elfutils-default-y 100% | 255.4 KiB/s | 2.0 KiB | 00m00s [149/175] Installing elfutils-libs-0:0. 100% | 182.7 MiB/s | 748.4 KiB | 00m00s [150/175] Installing elfutils-debuginfo 100% | 7.5 MiB/s | 146.1 KiB | 00m00s [151/175] Installing elfutils-0:0.196-1 100% | 139.9 MiB/s | 3.8 MiB | 00m00s [152/175] Installing binutils-0:2.45.1- 100% | 292.6 MiB/s | 31.0 MiB | 00m00s [153/175] Installing gdb-minimal-0:17.2 100% | 238.4 MiB/s | 13.4 MiB | 00m00s [154/175] Installing debugedit-0:5.2-3. 100% | 17.4 MiB/s | 321.2 KiB | 00m00s [155/175] Installing rpm-build-libs-0:6 100% | 129.3 MiB/s | 264.8 KiB | 00m00s [156/175] Installing perl-srpm-macros-0 100% | 0.0 B/s | 1.1 KiB | 00m00s [157/175] Installing openblas-srpm-macr 100% | 0.0 B/s | 392.0 B | 00m00s [158/175] Installing ocaml-srpm-macros- 100% | 0.0 B/s | 2.1 KiB | 00m00s [159/175] Installing kernel-srpm-macros 100% | 0.0 B/s | 2.3 KiB | 00m00s [160/175] Installing ghc-srpm-macros-0: 100% | 0.0 B/s | 1.0 KiB | 00m00s [161/175] Installing gap-srpm-macros-0: 100% | 0.0 B/s | 2.7 KiB | 00m00s [162/175] Installing fpc-srpm-macros-0: 100% | 0.0 B/s | 420.0 B | 00m00s [163/175] Installing ansible-srpm-macro 100% | 35.4 MiB/s | 36.2 KiB | 00m00s [164/175] Installing gnome-srpm-macros- 100% | 4.0 MiB/s | 4.1 KiB | 00m00s [165/175] Installing rpm-build-0:6.0.2- 100% | 29.7 MiB/s | 607.2 KiB | 00m00s [166/175] Installing pyproject-srpm-mac 100% | 3.9 MiB/s | 4.0 KiB | 00m00s [167/175] Installing redhat-rpm-config- 100% | 61.6 MiB/s | 189.1 KiB | 00m00s [168/175] Installing forge-srpm-macros- 100% | 39.3 MiB/s | 40.3 KiB | 00m00s [169/175] Installing fonts-srpm-macros- 100% | 55.7 MiB/s | 57.0 KiB | 00m00s [170/175] Installing go-srpm-macros-0:3 100% | 61.6 MiB/s | 63.0 KiB | 00m00s [171/175] Installing python-srpm-macros 100% | 25.8 MiB/s | 52.8 KiB | 00m00s [172/175] Installing util-linux-0:2.41. 100% | 131.8 MiB/s | 6.9 MiB | 00m00s [173/175] Installing shadow-utils-2:4.1 100% | 104.5 MiB/s | 4.5 MiB | 00m00s [174/175] Installing which-0:2.23-3.fc4 100% | 7.2 MiB/s | 125.6 KiB | 00m00s [175/175] Installing info-0:7.2-7.fc43. 100% | 198.4 KiB/s | 422.0 KiB | 00m02s Complete! Finish: installing minimal buildroot with dnf5 Start: creating root cache Finish: creating root cache Finish: chroot init INFO: Installed packages: INFO: add-determinism-0.6.0-3.fc43.aarch64 alternatives-1.33-3.fc43.aarch64 ansible-srpm-macros-1-18.1.fc43.noarch audit-libs-4.2.1-1.fc43.aarch64 bash-5.3.0-2.fc43.aarch64 binutils-2.45.1-5.fc43.aarch64 build-reproducibility-srpm-macros-0.6.0-3.fc43.noarch bzip2-1.0.8-21.fc43.aarch64 bzip2-libs-1.0.8-21.fc43.aarch64 ca-certificates-2026.2.90_v9.0.317-1.fc43.noarch cmake-srpm-macros-3.31.11-1.fc43.noarch coreutils-9.7-10.fc43.aarch64 coreutils-common-9.7-10.fc43.aarch64 cpio-2.15-6.fc43.aarch64 crypto-policies-20251125-1.git63291f8.fc43.noarch curl-8.15.0-10.fc43.aarch64 cyrus-sasl-lib-2.1.28-33.fc43.aarch64 debugedit-5.2-3.fc43.aarch64 diffutils-3.12-3.fc43.aarch64 dwz-0.16-2.fc43.aarch64 ed-1.22.2-1.fc43.aarch64 efi-srpm-macros-6-4.fc43.noarch elfutils-0.196-1.fc43.aarch64 elfutils-debuginfod-client-0.196-1.fc43.aarch64 elfutils-default-yama-scope-0.196-1.fc43.noarch elfutils-libelf-0.196-1.fc43.aarch64 elfutils-libs-0.196-1.fc43.aarch64 fedora-gpg-keys-43-2.noarch fedora-release-43-27.noarch fedora-release-common-43-27.noarch fedora-release-identity-basic-43-27.noarch fedora-repos-43-2.noarch file-5.46-9.fc43.aarch64 file-libs-5.46-9.fc43.aarch64 filesystem-3.18-50.fc43.aarch64 filesystem-srpm-macros-3.18-50.fc43.noarch findutils-4.10.0-6.fc43.aarch64 fonts-srpm-macros-2.0.5-23.fc43.noarch forge-srpm-macros-0.4.0-3.fc43.noarch fpc-srpm-macros-1.3-15.fc43.noarch gap-srpm-macros-2-1.fc43.noarch gawk-5.3.2-2.fc43.aarch64 gdb-minimal-17.2-2.fc43.aarch64 gdbm-libs-1.23-10.fc43.aarch64 ghc-srpm-macros-1.9.2-3.fc43.noarch glibc-2.42-17.fc43.aarch64 glibc-common-2.42-17.fc43.aarch64 glibc-gconv-extra-2.42-17.fc43.aarch64 glibc-minimal-langpack-2.42-17.fc43.aarch64 gmp-6.3.0-4.fc43.aarch64 gnat-srpm-macros-7-1.fc43.noarch gnome-srpm-macros-1.0-1.fc43.noarch gnulib-l10n-20241231-1.fc43.noarch gnupg2-2.4.9-5.fc43.aarch64 gnupg2-dirmngr-2.4.9-5.fc43.aarch64 gnupg2-gpg-agent-2.4.9-5.fc43.aarch64 gnupg2-gpgconf-2.4.9-5.fc43.aarch64 gnupg2-keyboxd-2.4.9-5.fc43.aarch64 gnupg2-verify-2.4.9-5.fc43.aarch64 gnutls-3.8.13-1.fc43.aarch64 go-srpm-macros-3.8.0-1.fc43.noarch gpg-pubkey-c6e7f081cf80e13146676e88829b606631645531-66b6dccf gpgverify-2.2-3.fc43.noarch grep-3.12-2.fc43.aarch64 gzip-1.13-4.fc43.aarch64 ima-evm-utils-libs-1.6.2-6.fc43.aarch64 info-7.2-7.fc43.aarch64 jansson-2.14-3.fc43.aarch64 java-srpm-macros-1-7.fc43.noarch json-c-0.18-7.fc43.aarch64 kernel-srpm-macros-1.0-27.fc43.noarch keyutils-libs-1.6.3-6.fc43.aarch64 krb5-libs-1.22.2-4.fc43.aarch64 libacl-2.4.0-1.fc43.aarch64 libarchive-3.8.4-1.fc43.aarch64 libassuan-2.5.7-4.fc43.aarch64 libattr-2.6.0-1.fc43.aarch64 libblkid-2.41.5-1.fc43.aarch64 libbrotli-1.2.0-1.fc43.aarch64 libcap-2.76-4.fc43.aarch64 libcap-ng-0.9.6-1.fc43.aarch64 libcom_err-1.47.3-2.fc43.aarch64 libcurl-8.15.0-10.fc43.aarch64 libeconf-0.7.9-2.fc43.aarch64 libevent-2.1.13-1.fc43.aarch64 libfdisk-2.41.5-1.fc43.aarch64 libffi-3.5.2-1.fc43.aarch64 libfsverity-1.6-3.fc43.aarch64 libgcc-15.3.1-1.fc43.aarch64 libgcrypt-1.11.1-4.fc43.aarch64 libgomp-15.3.1-1.fc43.aarch64 libgpg-error-1.55-2.fc43.aarch64 libidn2-2.3.8-2.fc43.aarch64 libksba-1.6.7-4.fc43.aarch64 liblastlog2-2.41.5-1.fc43.aarch64 libmount-2.41.5-1.fc43.aarch64 libnghttp2-1.66.0-3.fc43.aarch64 libpfm-4.13.0-20.fc43.aarch64 libpkgconf-2.3.0-3.fc43.aarch64 libpsl-0.21.5-6.fc43.aarch64 libselinux-3.9-5.fc43.aarch64 libsemanage-3.9-4.fc43.aarch64 libsepol-3.9-2.fc43.aarch64 libsmartcols-2.41.5-1.fc43.aarch64 libssh-0.11.5-1.fc43.aarch64 libssh-config-0.11.5-1.fc43.noarch libstdc++-15.3.1-1.fc43.aarch64 libtasn1-4.21.0-1.fc43.aarch64 libtool-ltdl-2.5.4-8.fc43.aarch64 libunistring-1.1-10.fc43.aarch64 libusb1-1.0.30-1.fc43.aarch64 libuuid-2.41.5-1.fc43.aarch64 libverto-0.3.2-11.fc43.aarch64 libxcrypt-4.5.2-1.fc43.aarch64 libxml2-2.12.10-5.fc43.aarch64 libzstd-1.5.7-2.fc43.aarch64 lua-libs-5.4.8-4.fc43.aarch64 lua-srpm-macros-1-16.fc43.noarch lz4-libs-1.10.0-3.fc43.aarch64 mpfr-4.2.2-2.fc43.aarch64 ncurses-base-6.5-7.20250614.fc43.noarch ncurses-libs-6.5-7.20250614.fc43.aarch64 nettle-3.10.1-2.fc43.aarch64 npth-1.8-3.fc43.aarch64 ocaml-srpm-macros-11-2.fc43.noarch openblas-srpm-macros-2-20.fc43.noarch openldap-2.6.14-1.fc43.aarch64 openssl-libs-3.5.9-1.fc43.aarch64 p11-kit-0.26.5-1.fc43.aarch64 p11-kit-trust-0.26.5-1.fc43.aarch64 package-notes-srpm-macros-0.20-1.fc43.noarch pam-libs-1.7.1-5.fc43.aarch64 patch-2.8-2.fc43.aarch64 pcre2-10.47-1.fc43.aarch64 pcre2-syntax-10.47-1.fc43.noarch perl-srpm-macros-1-60.fc43.noarch pkgconf-2.3.0-3.fc43.aarch64 pkgconf-m4-2.3.0-3.fc43.noarch pkgconf-pkg-config-2.3.0-3.fc43.aarch64 popt-1.19-9.fc43.aarch64 publicsuffix-list-dafsa-20260116-1.fc43.noarch pyproject-srpm-macros-1.23.2-1.fc43.noarch python-srpm-macros-3.14-5.fc43.noarch qt5-srpm-macros-5.15.18-1.fc43.noarch qt6-srpm-macros-6.10.3-1.fc43.noarch readline-8.3-2.fc43.aarch64 redhat-rpm-config-343-14.fc43.noarch rpm-6.0.2-1.fc43.aarch64 rpm-build-6.0.2-1.fc43.aarch64 rpm-build-libs-6.0.2-1.fc43.aarch64 rpm-libs-6.0.2-1.fc43.aarch64 rpm-sequoia-1.10.3-1.fc43.aarch64 rpm-sign-libs-6.0.2-1.fc43.aarch64 rust-srpm-macros-28.5-1.fc43.noarch sed-4.9-5.fc43.aarch64 setup-2.15.0-26.fc43.noarch shadow-utils-4.18.0-3.fc43.aarch64 sqlite-libs-3.50.2-3.fc43.aarch64 systemd-libs-258.11-1.fc43.aarch64 systemd-standalone-sysusers-258.11-1.fc43.aarch64 tar-1.35-6.fc43.aarch64 tpm2-tss-4.1.3-8.fc43.aarch64 tree-sitter-srpm-macros-0.4.2-1.fc43.noarch unzip-6.0-67.fc43.aarch64 util-linux-2.41.5-1.fc43.aarch64 util-linux-core-2.41.5-1.fc43.aarch64 which-2.23-3.fc43.aarch64 xxhash-libs-0.8.4-1.fc43.aarch64 xz-5.8.1-4.fc43.aarch64 xz-libs-5.8.1-4.fc43.aarch64 zig-srpm-macros-1-5.fc43.noarch zip-3.0-44.fc43.aarch64 zlib-ng-compat-2.3.3-2.fc43.aarch64 zstd-1.5.7-2.fc43.aarch64 Start: buildsrpm Start: rpmbuild -bs Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1792368000 Wrote: /builddir/build/SRPMS/kempt-0.1.8-1.fc43.src.rpm Finish: rpmbuild -bs INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-43-aarch64-1792358989.688234/root/var/log/dnf5.log INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz /bin/tar: Removing leading `/' from member names Finish: buildsrpm INFO: Done(/var/lib/copr-rpmbuild/workspace/workdir-k8gl7dpv/kempt/kempt.spec) Config(child) 0 minutes 30 seconds INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results INFO: Cleaning up build root ('cleanup_on_success=True') Start: clean chroot INFO: unmounting tmpfs. Finish: clean chroot INFO: Start(/var/lib/copr-rpmbuild/results/kempt-0.1.8-1.fc43.src.rpm) Config(fedora-43-aarch64) Start(bootstrap): chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-43-aarch64-bootstrap-1792358989.688234/root. INFO: reusing tmpfs at /var/lib/mock/fedora-43-aarch64-bootstrap-1792358989.688234/root. INFO: calling preinit hooks INFO: enabled root cache INFO: enabled package manager cache Start(bootstrap): cleaning package manager metadata Finish(bootstrap): cleaning package manager metadata Finish(bootstrap): chroot init Start: chroot init INFO: mounting tmpfs at /var/lib/mock/fedora-43-aarch64-1792358989.688234/root. INFO: calling preinit hooks INFO: enabled root cache Start: unpacking root cache Finish: unpacking root cache INFO: enabled package manager cache Start: cleaning package manager metadata Finish: cleaning package manager metadata INFO: enabled HW Info plugin INFO: Buildroot is handled by package management downloaded with a bootstrap image: rpm-6.0.2-1.fc43.aarch64 rpm-sequoia-1.10.3-1.fc43.aarch64 dnf5-5.2.18.0-5.fc43.aarch64 dnf5-plugins-5.2.18.0-5.fc43.aarch64 Finish: chroot init Start: build phase for kempt-0.1.8-1.fc43.src.rpm Start: build setup for kempt-0.1.8-1.fc43.src.rpm Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1792368000 Wrote: /builddir/build/SRPMS/kempt-0.1.8-1.fc43.src.rpm Updating and loading repositories: Copr repository 100% | 10.9 KiB/s | 1.5 KiB | 00m00s fedora 100% | 35.3 KiB/s | 11.6 KiB | 00m00s updates 100% | 39.7 KiB/s | 10.5 KiB | 00m00s Repositories loaded. Package "util-linux-core-2.41.5-1.fc43.aarch64" is already installed. Package Arch Version Repository Size Installing: appstream aarch64 1.1.3-1.fc43 updates 5.0 MiB jq aarch64 1.8.1-3.fc43 updates 485.0 KiB libappstream-glib aarch64 0.8.4-1.fc43 updates 1.5 MiB python3 aarch64 3.14.8-1.fc43 updates 84.7 KiB Installing dependencies: abattis-cantarell-vf-fonts noarch 0.301-15.fc43 fedora 192.7 KiB bubblewrap aarch64 0.12.0-1.fc43 updates 183.7 KiB cairo aarch64 1.18.6-1.fc43 updates 1.8 MiB cairo-gobject aarch64 1.18.6-1.fc43 updates 67.0 KiB default-fonts-core-sans noarch 4.2-5.fc43 fedora 11.9 KiB expat aarch64 2.8.5-1.fc43 updates 386.1 KiB fontconfig aarch64 2.17.0-3.fc43 fedora 1.2 MiB fonts-filesystem noarch 1:2.0.5-23.fc43 fedora 0.0 B freetype aarch64 2.13.3-3.fc43 fedora 814.5 KiB fribidi aarch64 1.0.16-3.fc43 fedora 246.3 KiB gdk-pixbuf2 aarch64 2.44.6^really2.44.4-3.fc43 updates 2.6 MiB glib2 aarch64 2.86.5-1.fc43 updates 15.7 MiB glycin-libs aarch64 2.0.8-1.fc43 updates 4.0 MiB glycin-loaders aarch64 2.0.8-1.fc43 updates 11.8 MiB google-noto-fonts-common noarch 20251101-2.fc43 updates 17.7 KiB google-noto-sans-vf-fonts noarch 20251101-2.fc43 updates 1.4 MiB graphite2 aarch64 1.3.14-19.fc43 fedora 239.6 KiB harfbuzz aarch64 11.5.1-2.fc43 updates 2.7 MiB highway aarch64 1.3.0-1.fc43 updates 1.5 MiB json-glib aarch64 1.10.8-4.fc43 updates 616.4 KiB lcms2 aarch64 2.16-6.fc43 fedora 484.8 KiB libX11 aarch64 1.8.13-1.fc43 updates 1.3 MiB libX11-common noarch 1.8.13-1.fc43 updates 1.1 MiB libXau aarch64 1.0.12-3.fc43 fedora 121.0 KiB libXext aarch64 1.3.6-4.fc43 fedora 145.9 KiB libXft aarch64 2.3.8-9.fc43 fedora 192.4 KiB libXrender aarch64 0.9.12-3.fc43 fedora 70.0 KiB libaom aarch64 3.13.3-1.fc43 updates 3.9 MiB libdatrie aarch64 0.2.13-12.fc43 fedora 93.9 KiB libdav1d aarch64 1.5.4-1.fc43 updates 920.5 KiB libfyaml aarch64 0.8-8.fc43 fedora 566.9 KiB libheif aarch64 1.23.6-1.fc43 updates 2.6 MiB libjpeg-turbo aarch64 3.1.3-1.fc43 updates 741.8 KiB libjxl aarch64 1:0.11.2-1.fc43 updates 2.6 MiB libopenjph aarch64 0.22.0-2.fc43 fedora 325.6 KiB libpng aarch64 2:1.6.58-1.fc43 updates 269.7 KiB librsvg2 aarch64 2.61.5-1.fc43 updates 4.6 MiB libseccomp aarch64 2.6.1-2.fc43 updates 246.2 KiB libstemmer aarch64 3.0.1-8.fc43 fedora 725.6 KiB libthai aarch64 0.1.29-11.fc43 fedora 807.4 KiB libwebp aarch64 1.6.0-2.fc43 fedora 817.5 KiB libxcb aarch64 1.17.0-6.fc43 fedora 2.2 MiB libxmlb aarch64 0.3.29-1.fc43 updates 323.6 KiB lzo aarch64 2.10-15.fc43 fedora 162.9 KiB mpdecimal aarch64 4.0.1-2.fc43 fedora 281.2 KiB noopenh264 aarch64 2.6.0-2.fc43 fedora 95.2 KiB oniguruma aarch64 6.9.10-3.fc43 fedora 766.8 KiB openjpeg aarch64 2.5.4-1.fc43 fedora 412.4 KiB pango aarch64 1.57.1-1.fc43 updates 1.2 MiB pixman aarch64 0.46.2-2.fc43 fedora 654.5 KiB python-pip-wheel noarch 25.1.1-19.fc43 updates 1.2 MiB python3-libs aarch64 3.14.8-1.fc43 updates 45.4 MiB rav1e-libs aarch64 0.8.1-2.fc43 updates 2.1 MiB shared-mime-info aarch64 2.4-2.fc43 fedora 5.3 MiB svt-av1-libs aarch64 3.1.2-1.fc43 fedora 3.4 MiB tzdata noarch 2026e-1.fc43 updates 1.6 MiB xml-common noarch 0.6.3-67.fc43 fedora 78.4 KiB Transaction Summary: Installing: 61 packages Total size of inbound packages is 37 MiB. Need to download 37 MiB. After this operation, 140 MiB extra will be used (install 140 MiB, remove 0 B). [ 1/61] jq-0:1.8.1-3.fc43.aarch64 100% | 243.4 KiB/s | 204.9 KiB | 00m01s [ 2/61] python3-0:3.14.8-1.fc43.aarch64 100% | 206.8 KiB/s | 29.6 KiB | 00m00s [ 3/61] libfyaml-0:0.8-8.fc43.aarch64 100% | 4.3 MiB/s | 221.1 KiB | 00m00s [ 4/61] libstemmer-0:3.0.1-8.fc43.aarch 100% | 4.4 MiB/s | 157.0 KiB | 00m00s [ 5/61] oniguruma-0:6.9.10-3.fc43.aarch 100% | 6.7 MiB/s | 212.9 KiB | 00m00s [ 6/61] libappstream-glib-0:0.8.4-1.fc4 100% | 352.0 KiB/s | 391.0 KiB | 00m01s [ 7/61] mpdecimal-0:4.0.1-2.fc43.aarch6 100% | 4.1 MiB/s | 95.8 KiB | 00m00s [ 8/61] expat-0:2.8.5-1.fc43.aarch64 100% | 622.3 KiB/s | 125.7 KiB | 00m00s [ 9/61] appstream-0:1.1.3-1.fc43.aarch6 100% | 629.5 KiB/s | 934.3 KiB | 00m01s [10/61] tzdata-0:2026e-1.fc43.noarch 100% | 1.0 MiB/s | 713.0 KiB | 00m01s [11/61] python-pip-wheel-0:25.1.1-19.fc 100% | 978.9 KiB/s | 1.2 MiB | 00m01s [12/61] gdk-pixbuf2-0:2.44.6^really2.44 100% | 1.0 MiB/s | 484.4 KiB | 00m00s [13/61] shared-mime-info-0:2.4-2.fc43.a 100% | 6.5 MiB/s | 394.6 KiB | 00m00s [14/61] json-glib-0:1.10.8-4.fc43.aarch 100% | 633.0 KiB/s | 169.6 KiB | 00m00s [15/61] glycin-libs-0:2.0.8-1.fc43.aarc 100% | 986.9 KiB/s | 1.5 MiB | 00m02s [16/61] fontconfig-0:2.17.0-3.fc43.aarc 100% | 6.0 MiB/s | 274.5 KiB | 00m00s [17/61] lcms2-0:2.16-6.fc43.aarch64 100% | 4.6 MiB/s | 180.8 KiB | 00m00s [18/61] glib2-0:2.86.5-1.fc43.aarch64 100% | 1.2 MiB/s | 3.1 MiB | 00m03s [19/61] default-fonts-core-sans-0:4.2-5 100% | 1.7 MiB/s | 29.9 KiB | 00m00s [20/61] fonts-filesystem-1:2.0.5-23.fc4 100% | 964.2 KiB/s | 8.7 KiB | 00m00s [21/61] freetype-0:2.13.3-3.fc43.aarch6 100% | 8.0 MiB/s | 402.0 KiB | 00m00s [22/61] xml-common-0:0.6.3-67.fc43.noar 100% | 2.5 MiB/s | 31.0 KiB | 00m00s [23/61] abattis-cantarell-vf-fonts-0:0. 100% | 5.3 MiB/s | 120.1 KiB | 00m00s [24/61] libxmlb-0:0.3.29-1.fc43.aarch64 100% | 539.6 KiB/s | 113.9 KiB | 00m00s [25/61] harfbuzz-0:11.5.1-2.fc43.aarch6 100% | 1.0 MiB/s | 1.1 MiB | 00m01s [26/61] graphite2-0:1.3.14-19.fc43.aarc 100% | 2.4 MiB/s | 91.7 KiB | 00m00s [27/61] libpng-2:1.6.58-1.fc43.aarch64 100% | 503.6 KiB/s | 117.8 KiB | 00m00s [28/61] glycin-loaders-0:2.0.8-1.fc43.a 100% | 1.0 MiB/s | 2.7 MiB | 00m03s [29/61] google-noto-fonts-common-0:2025 100% | 131.2 KiB/s | 17.3 KiB | 00m00s [30/61] google-noto-sans-vf-fonts-0:202 100% | 1.0 MiB/s | 614.5 KiB | 00m01s [31/61] bubblewrap-0:0.12.0-1.fc43.aarc 100% | 493.8 KiB/s | 65.2 KiB | 00m00s [32/61] libXext-0:1.3.6-4.fc43.aarch64 100% | 2.1 MiB/s | 38.4 KiB | 00m00s [33/61] libXrender-0:0.9.12-3.fc43.aarc 100% | 2.0 MiB/s | 27.0 KiB | 00m00s [34/61] libxcb-0:1.17.0-6.fc43.aarch64 100% | 6.6 MiB/s | 242.1 KiB | 00m00s [35/61] lzo-0:2.10-15.fc43.aarch64 100% | 4.0 MiB/s | 65.7 KiB | 00m00s [36/61] pixman-0:0.46.2-2.fc43.aarch64 100% | 4.3 MiB/s | 213.2 KiB | 00m00s [37/61] libXau-0:1.0.12-3.fc43.aarch64 100% | 2.7 MiB/s | 33.6 KiB | 00m00s [38/61] cairo-0:1.18.6-1.fc43.aarch64 100% | 955.4 KiB/s | 700.3 KiB | 00m01s [39/61] libopenjph-0:0.22.0-2.fc43.aarc 100% | 3.8 MiB/s | 110.3 KiB | 00m00s [40/61] libwebp-0:1.6.0-2.fc43.aarch64 100% | 7.5 MiB/s | 260.4 KiB | 00m00s [41/61] noopenh264-0:2.6.0-2.fc43.aarch 100% | 2.0 MiB/s | 22.3 KiB | 00m00s [42/61] openjpeg-0:2.5.4-1.fc43.aarch64 100% | 4.8 MiB/s | 183.5 KiB | 00m00s [43/61] svt-av1-libs-0:3.1.2-1.fc43.aar 100% | 14.4 MiB/s | 1.3 MiB | 00m00s [44/61] libheif-0:1.23.6-1.fc43.aarch64 100% | 1.0 MiB/s | 769.4 KiB | 00m01s [45/61] libjxl-1:0.11.2-1.fc43.aarch64 100% | 1.1 MiB/s | 853.0 KiB | 00m01s [46/61] cairo-gobject-0:1.18.6-1.fc43.a 100% | 128.9 KiB/s | 16.9 KiB | 00m00s [47/61] libseccomp-0:2.6.1-2.fc43.aarch 100% | 384.5 KiB/s | 75.7 KiB | 00m00s [48/61] librsvg2-0:2.61.5-1.fc43.aarch6 100% | 1.1 MiB/s | 1.7 MiB | 00m02s [49/61] python3-libs-0:3.14.8-1.fc43.aa 100% | 1.1 MiB/s | 9.8 MiB | 00m09s [50/61] libX11-0:1.8.13-1.fc43.aarch64 100% | 984.9 KiB/s | 645.1 KiB | 00m01s [51/61] libX11-common-0:1.8.13-1.fc43.n 100% | 660.1 KiB/s | 175.6 KiB | 00m00s [52/61] fribidi-0:1.0.16-3.fc43.aarch64 100% | 2.3 MiB/s | 53.5 KiB | 00m00s [53/61] libXft-0:2.3.8-9.fc43.aarch64 100% | 3.6 MiB/s | 70.4 KiB | 00m00s [54/61] libthai-0:0.1.29-11.fc43.aarch6 100% | 9.3 MiB/s | 209.7 KiB | 00m00s [55/61] libdatrie-0:0.2.13-12.fc43.aarc 100% | 2.4 MiB/s | 31.9 KiB | 00m00s [56/61] pango-0:1.57.1-1.fc43.aarch64 100% | 899.1 KiB/s | 355.1 KiB | 00m00s [57/61] libdav1d-0:1.5.4-1.fc43.aarch64 100% | 821.6 KiB/s | 377.9 KiB | 00m00s [58/61] highway-0:1.3.0-1.fc43.aarch64 100% | 653.0 KiB/s | 173.7 KiB | 00m00s [59/61] libjpeg-turbo-0:3.1.3-1.fc43.aa 100% | 950.5 KiB/s | 251.9 KiB | 00m00s [60/61] rav1e-libs-0:0.8.1-2.fc43.aarch 100% | 898.6 KiB/s | 833.0 KiB | 00m01s [61/61] libaom-0:3.13.3-1.fc43.aarch64 100% | 1.1 MiB/s | 1.7 MiB | 00m01s -------------------------------------------------------------------------------- [61/61] Total 100% | 3.1 MiB/s | 36.7 MiB | 00m12s Running transaction [ 1/63] Verify package files 100% | 500.0 B/s | 61.0 B | 00m00s [ 2/63] Prepare transaction 100% | 1.1 KiB/s | 61.0 B | 00m00s [ 3/63] Installing glib2-0:2.86.5-1.fc4 100% | 224.3 MiB/s | 15.7 MiB | 00m00s [ 4/63] Installing shared-mime-info-0:2 100% | 82.4 MiB/s | 2.6 MiB | 00m00s [ 5/63] Installing fonts-filesystem-1:2 100% | 769.5 KiB/s | 788.0 B | 00m00s [ 6/63] Installing libdav1d-0:1.5.4-1.f 100% | 225.0 MiB/s | 921.7 KiB | 00m00s [ 7/63] Installing libpng-2:1.6.58-1.fc 100% | 132.3 MiB/s | 271.0 KiB | 00m00s [ 8/63] Installing abattis-cantarell-vf 100% | 94.9 MiB/s | 194.4 KiB | 00m00s [ 9/63] Installing libxmlb-0:0.3.29-1.f 100% | 16.7 MiB/s | 325.9 KiB | 00m00s [10/63] Installing json-glib-0:1.10.8-4 100% | 87.7 MiB/s | 628.5 KiB | 00m00s [11/63] Installing rav1e-libs-0:0.8.1-2 100% | 295.1 MiB/s | 2.1 MiB | 00m00s [12/63] Installing libjpeg-turbo-0:3.1. 100% | 242.0 MiB/s | 743.5 KiB | 00m00s [13/63] Installing libaom-0:3.13.3-1.fc 100% | 297.3 MiB/s | 3.9 MiB | 00m00s [14/63] Installing highway-0:1.3.0-1.fc 100% | 368.0 MiB/s | 1.5 MiB | 00m00s [15/63] Installing libjxl-1:0.11.2-1.fc 100% | 327.1 MiB/s | 2.6 MiB | 00m00s [16/63] Installing libdatrie-0:0.2.13-1 100% | 92.8 MiB/s | 95.0 KiB | 00m00s [17/63] Installing libthai-0:0.1.29-11. 100% | 263.4 MiB/s | 809.2 KiB | 00m00s [18/63] Installing fribidi-0:1.0.16-3.f 100% | 13.5 MiB/s | 248.8 KiB | 00m00s [19/63] Installing libX11-common-0:1.8. 100% | 84.8 MiB/s | 1.2 MiB | 00m00s [20/63] Installing libseccomp-0:2.6.1-2 100% | 242.3 MiB/s | 248.1 KiB | 00m00s [21/63] Installing svt-av1-libs-0:3.1.2 100% | 284.8 MiB/s | 3.4 MiB | 00m00s [22/63] Installing openjpeg-0:2.5.4-1.f 100% | 202.3 MiB/s | 414.3 KiB | 00m00s [23/63] Installing noopenh264-0:2.6.0-2 100% | 94.5 MiB/s | 96.8 KiB | 00m00s [24/63] Installing libwebp-0:1.6.0-2.fc 100% | 200.6 MiB/s | 821.7 KiB | 00m00s [25/63] Installing libopenjph-0:0.22.0- 100% | 159.5 MiB/s | 326.7 KiB | 00m00s [26/63] Installing libheif-0:1.23.6-1.f 100% | 288.5 MiB/s | 2.6 MiB | 00m00s [27/63] Installing libXau-0:1.0.12-3.fc 100% | 119.6 MiB/s | 122.5 KiB | 00m00s [28/63] Installing libxcb-0:1.17.0-6.fc 100% | 270.9 MiB/s | 2.2 MiB | 00m00s [29/63] Installing libX11-0:1.8.13-1.fc 100% | 320.0 MiB/s | 1.3 MiB | 00m00s [30/63] Installing libXrender-0:0.9.12- 100% | 69.6 MiB/s | 71.3 KiB | 00m00s [31/63] Installing libXext-0:1.3.6-4.fc 100% | 143.7 MiB/s | 147.1 KiB | 00m00s [32/63] Installing pixman-0:0.46.2-2.fc 100% | 320.1 MiB/s | 655.6 KiB | 00m00s [33/63] Installing lzo-0:2.10-15.fc43.a 100% | 160.7 MiB/s | 164.6 KiB | 00m00s [34/63] Installing bubblewrap-0:0.12.0- 100% | 10.7 MiB/s | 186.0 KiB | 00m00s [35/63] Installing google-noto-fonts-co 100% | 18.1 MiB/s | 18.5 KiB | 00m00s [36/63] Installing google-noto-sans-vf- 100% | 278.3 MiB/s | 1.4 MiB | 00m00s [37/63] Installing default-fonts-core-s 100% | 8.9 MiB/s | 18.2 KiB | 00m00s [38/63] Installing graphite2-0:1.3.14-1 100% | 13.1 MiB/s | 241.7 KiB | 00m00s [39/63] Installing harfbuzz-0:11.5.1-2. 100% | 271.9 MiB/s | 2.7 MiB | 00m00s [40/63] Installing freetype-0:2.13.3-3. 100% | 88.6 MiB/s | 816.2 KiB | 00m00s [41/63] Installing xml-common-0:0.6.3-6 100% | 39.6 MiB/s | 81.1 KiB | 00m00s [42/63] Installing fontconfig-0:2.17.0- 100% | 1.2 MiB/s | 1.2 MiB | 00m01s [43/63] Installing cairo-0:1.18.6-1.fc4 100% | 254.9 MiB/s | 1.8 MiB | 00m00s [44/63] Installing cairo-gobject-0:1.18 100% | 66.3 MiB/s | 67.8 KiB | 00m00s [45/63] Installing libXft-0:2.3.8-9.fc4 100% | 94.7 MiB/s | 193.9 KiB | 00m00s [46/63] Installing pango-0:1.57.1-1.fc4 100% | 53.0 MiB/s | 1.2 MiB | 00m00s [47/63] Installing lcms2-0:2.16-6.fc43. 100% | 158.3 MiB/s | 486.4 KiB | 00m00s [48/63] Installing gdk-pixbuf2-0:2.44.6 100% | 80.8 MiB/s | 2.6 MiB | 00m00s [49/63] Installing librsvg2-0:2.61.5-1. 100% | 286.4 MiB/s | 4.6 MiB | 00m00s [50/63] Installing glycin-loaders-0:2.0 100% | 382.3 MiB/s | 11.9 MiB | 00m00s [51/63] Installing glycin-libs-0:2.0.8- 100% | 235.6 MiB/s | 4.0 MiB | 00m00s [52/63] Installing tzdata-0:2026e-1.fc4 100% | 34.1 MiB/s | 1.9 MiB | 00m00s [53/63] Installing python-pip-wheel-0:2 100% | 415.3 MiB/s | 1.2 MiB | 00m00s [54/63] Installing expat-0:2.8.5-1.fc43 100% | 21.1 MiB/s | 388.1 KiB | 00m00s [55/63] Installing mpdecimal-0:4.0.1-2. 100% | 39.4 MiB/s | 282.7 KiB | 00m00s [56/63] Installing python3-libs-0:3.14. 100% | 254.6 MiB/s | 45.8 MiB | 00m00s [57/63] Installing oniguruma-0:6.9.10-3 100% | 187.7 MiB/s | 768.9 KiB | 00m00s [58/63] Installing libstemmer-0:3.0.1-8 100% | 236.6 MiB/s | 727.0 KiB | 00m00s [59/63] Installing libfyaml-0:0.8-8.fc4 100% | 29.3 MiB/s | 571.0 KiB | 00m00s [60/63] Installing appstream-0:1.1.3-1. 100% | 146.1 MiB/s | 5.0 MiB | 00m00s [61/63] Installing jq-0:1.8.1-3.fc43.aa 100% | 26.4 MiB/s | 487.3 KiB | 00m00s [62/63] Installing python3-0:3.14.8-1.f 100% | 4.7 MiB/s | 86.4 KiB | 00m00s [63/63] Installing libappstream-glib-0: 100% | 4.6 MiB/s | 1.5 MiB | 00m00s Complete! Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1792368000 Wrote: /builddir/build/SRPMS/kempt-0.1.8-1.fc43.src.rpm Updating and loading repositories: Copr repository 100% | 13.5 KiB/s | 1.5 KiB | 00m00s fedora 100% | 49.8 KiB/s | 11.6 KiB | 00m00s updates 100% | 60.8 KiB/s | 10.5 KiB | 00m00s Repositories loaded. Package "appstream-1.1.3-1.fc43.aarch64" is already installed. Package "jq-1.8.1-3.fc43.aarch64" is already installed. Package "libappstream-glib-0.8.4-1.fc43.aarch64" is already installed. Package "python3-3.14.8-1.fc43.aarch64" is already installed. Package "util-linux-core-2.41.5-1.fc43.aarch64" is already installed. Nothing to do. Finish: build setup for kempt-0.1.8-1.fc43.src.rpm Start: rpmbuild kempt-0.1.8-1.fc43.src.rpm Building target platforms: aarch64 Building for target aarch64 setting SOURCE_DATE_EPOCH=1792368000 Executing(%mkbuilddir): /bin/sh -e /var/tmp/rpm-tmp.rLA7w2 Executing(%prep): /bin/sh -e /var/tmp/rpm-tmp.MS8xwF + umask 022 + cd /builddir/build/BUILD/kempt-0.1.8-build + cd /builddir/build/BUILD/kempt-0.1.8-build + rm -rf kempt-0.1.8 + /usr/lib/rpm/rpmuncompress -x /builddir/build/SOURCES/kempt-0.1.8.tar.gz + STATUS=0 + '[' 0 -ne 0 ']' + cd kempt-0.1.8 + /usr/bin/chmod -Rf a+rX,u+w,g-w,o-w . + cp -a . ../kempt-pristine + sed -i 's|/usr/local/libexec|/usr/libexec|g' polkit/io.github.erez_c137.kempt.policy lib/common.sh + RPM_EC=0 ++ jobs -p + exit 0 Executing(%build): /bin/sh -e /var/tmp/rpm-tmp.3XOHuD + umask 022 + cd /builddir/build/BUILD/kempt-0.1.8-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd kempt-0.1.8 + RPM_EC=0 ++ jobs -p + exit 0 Executing(%install): /bin/sh -e /var/tmp/rpm-tmp.p4dgVQ + umask 022 + cd /builddir/build/BUILD/kempt-0.1.8-build + '[' /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT '!=' / ']' + rm -rf /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT ++ dirname /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT + mkdir -p /builddir/build/BUILD/kempt-0.1.8-build + mkdir /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd kempt-0.1.8 + install -d /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt + cp -a bin lib backends /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/ + install -d /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/bin + ln -s /usr/share/kempt/bin/kempt /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/bin/kempt + install -p -m 0644 VERSION /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/VERSION + install -p -D -m 0644 polkit/49-kempt.rules.in /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/polkit/49-kempt.rules.in + sed -i '1{/^#!/d}' /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/lib/common.sh /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/backends/dnf.sh /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/backends/flatpak.sh + install -p -D -m 0755 libexec/kempt-flatpak-unused /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/libexec/kempt-flatpak-unused + install -p -D -m 0755 libexec/kempt-refresh /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-refresh + install -p -D -m 0755 libexec/kempt-apply /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-apply + install -p -D -m 0644 polkit/io.github.erez_c137.kempt.policy /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/polkit-1/actions/io.github.erez_c137.kempt.policy + install -d /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/plasma/plasmoids/io.github.erez_c137.kempt + cp -a plasmoid/metadata.json plasmoid/contents /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/plasma/plasmoids/io.github.erez_c137.kempt/ + for pair in scalable:kempt.svg 64x64:kempt-48.svg 48x48:kempt-48.svg 32x32:kempt-32.svg 22x22:kempt-22.svg 16x16:kempt-16.svg + install -p -D -m 0644 plasmoid/contents/icons/kempt.svg /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/icons/hicolor/scalable/apps/kempt.svg + for pair in scalable:kempt.svg 64x64:kempt-48.svg 48x48:kempt-48.svg 32x32:kempt-32.svg 22x22:kempt-22.svg 16x16:kempt-16.svg + install -p -D -m 0644 plasmoid/contents/icons/kempt-48.svg /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/icons/hicolor/64x64/apps/kempt.svg + for pair in scalable:kempt.svg 64x64:kempt-48.svg 48x48:kempt-48.svg 32x32:kempt-32.svg 22x22:kempt-22.svg 16x16:kempt-16.svg + install -p -D -m 0644 plasmoid/contents/icons/kempt-48.svg /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/icons/hicolor/48x48/apps/kempt.svg + for pair in scalable:kempt.svg 64x64:kempt-48.svg 48x48:kempt-48.svg 32x32:kempt-32.svg 22x22:kempt-22.svg 16x16:kempt-16.svg + install -p -D -m 0644 plasmoid/contents/icons/kempt-32.svg /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/icons/hicolor/32x32/apps/kempt.svg + for pair in scalable:kempt.svg 64x64:kempt-48.svg 48x48:kempt-48.svg 32x32:kempt-32.svg 22x22:kempt-22.svg 16x16:kempt-16.svg + install -p -D -m 0644 plasmoid/contents/icons/kempt-22.svg /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/icons/hicolor/22x22/apps/kempt.svg + for pair in scalable:kempt.svg 64x64:kempt-48.svg 48x48:kempt-48.svg 32x32:kempt-32.svg 22x22:kempt-22.svg 16x16:kempt-16.svg + install -p -D -m 0644 plasmoid/contents/icons/kempt-16.svg /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/icons/hicolor/16x16/apps/kempt.svg + install -p -D -m 0644 docs/man/kempt.1 /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/man/man1/kempt.1 + install -p -D -m 0644 io.github.erez_c137.kempt.metainfo.xml /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/metainfo/io.github.erez_c137.kempt.metainfo.xml + rm -rf docs/man docs/RELEASING.md docs/ROADMAP.md docs/images/kempt-tray-icon.png + /usr/lib/rpm/check-buildroot + /usr/lib/rpm/redhat/brp-ldconfig + /usr/lib/rpm/brp-compress + /usr/lib/rpm/brp-strip /usr/bin/strip + /usr/lib/rpm/brp-strip-comment-note /usr/bin/strip /usr/bin/objdump + /usr/lib/rpm/redhat/brp-strip-lto /usr/bin/strip + /usr/lib/rpm/check-rpaths + /usr/lib/rpm/redhat/brp-mangle-shebangs mangling shebang in /usr/share/kempt/bin/kempt from /usr/bin/env bash to #!/usr/bin/bash + /usr/lib/rpm/brp-remove-la-files + /usr/lib/rpm/redhat/brp-python-rpm-in-distinfo + env /usr/lib/rpm/redhat/brp-python-bytecompile '' 1 0 -j4 + /usr/lib/rpm/redhat/brp-python-hardlink + /usr/bin/add-determinism --brp -j4 /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT SOURCE_DATE_EPOCH timestamp: 1792368000 (2026-10-19 00:00:00 UTC) SOURCE_DATE_EPOCH timestamp is in the future: 1792368000 > 1792359043 SOURCE_DATE_EPOCH timestamp: 1792368000 (2026-10-19 00:00:00 UTC) SOURCE_DATE_EPOCH timestamp is in the future: 1792368000 > 1792359043 SOURCE_DATE_EPOCH timestamp: 1792368000 (2026-10-19 00:00:00 UTC) SOURCE_DATE_EPOCH timestamp is in the future: 1792368000 > 1792359043 SOURCE_DATE_EPOCH timestamp: 1792368000 (2026-10-19 00:00:00 UTC) SOURCE_DATE_EPOCH timestamp is in the future: 1792368000 > 1792359043 SOURCE_DATE_EPOCH timestamp: 1792368000 (2026-10-19 00:00:00 UTC) SOURCE_DATE_EPOCH timestamp is in the future: 1792368000 > 1792359043 Scanned 37 directories and 36 files, processed 1 inodes, 0 modified (0 replaced + 0 rewritten), 0 unsupported format, 0 errors Executing(%check): /bin/sh -e /var/tmp/rpm-tmp.BTzDNp + umask 022 + cd /builddir/build/BUILD/kempt-0.1.8-build + CFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CFLAGS + CXXFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Werror=format-security -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer ' + export CXXFLAGS + FFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FFLAGS + FCFLAGS='-O2 -flto=auto -ffat-lto-objects -fexceptions -g -grecord-gcc-switches -pipe -Wall -Wp,-U_FORTIFY_SOURCE,-D_FORTIFY_SOURCE=3 -Wp,-D_GLIBCXX_ASSERTIONS -specs=/usr/lib/rpm/redhat/redhat-hardened-cc1 -fstack-protector-strong -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -mbranch-protection=standard -fasynchronous-unwind-tables -fstack-clash-protection -fno-omit-frame-pointer -mno-omit-leaf-frame-pointer -I/usr/lib64/gfortran/modules ' + export FCFLAGS + VALAFLAGS=-g + export VALAFLAGS + RUSTFLAGS='-Copt-level=3 -Cdebuginfo=2 -Ccodegen-units=1 -Cstrip=none -Cforce-frame-pointers=yes -Clink-arg=-specs=/usr/lib/rpm/redhat/redhat-package-notes --cap-lints=warn' + export RUSTFLAGS + LDFLAGS='-Wl,-z,relro -Wl,--as-needed -Wl,-z,pack-relative-relocs -Wl,-z,now -specs=/usr/lib/rpm/redhat/redhat-hardened-ld -specs=/usr/lib/rpm/redhat/redhat-hardened-ld-errors -specs=/usr/lib/rpm/redhat/redhat-annobin-cc1 -Wl,--build-id=sha1 -specs=/usr/lib/rpm/redhat/redhat-package-notes ' + export LDFLAGS + LT_SYS_LIBRARY_PATH=/usr/lib64: + export LT_SYS_LIBRARY_PATH + CC=gcc + export CC + CXX=g++ + export CXX + cd kempt-0.1.8 + bash -n bin/kempt lib/common.sh backends/dnf.sh backends/flatpak.sh libexec/kempt-refresh libexec/kempt-apply + python3 -c 'import sys; compile(open(sys.argv[1]).read(), sys.argv[1], "exec")' libexec/kempt-flatpak-unused + cd ../kempt-pristine + tests/run_tests.sh == test_apply_refusal.sh ok: a refused arm fails the run ok: ...and is not unwound with a clean, which the helper would refuse too ok: ...and writes no marker ok: ...and the reason names what is stored ok: ...and nothing advises the command that would delete the release upgrade ok: a refused stage fails the run ok: ...arms nothing ok: ...and cleans nothing ok: ...and says nothing was staged, and why ok: ...and the event log records the refusal ok: ...and does not advise a clean ok: the rebuild fixture starts from a real armed stage ok: a refused re-stage never cleans the previous stage ok: ...and its marker stays, because nothing changed ok: an arm failure whose unwind is refused still fails the run ok: ...and the reason stays the arm ok: ...and the warning says the stored transaction was left in place, and why ok: ...and the notification points at the doctor ok: ...and nothing advises a clean ok: the second rebuild fixture starts from a real armed stage ok: a failed re-stage still tries its unwind ok: ...and when the helper refuses it, the marker stays ok: ...and the reason says what was left and why ok: ...and nothing advises a clean ok: the supersede fixture starts from a real armed stage ok: a superseding live run asks for the clean ok: ...and when a release upgrade is what refused it, our marker is dropped ok: ...with the same event as when the CLI saw it first ok: a refused supersede clean keeps the marker for the doctor ok: ...and warns that it was left in place ok: ...and does not advise a clean ok: a stage refused over an unsafe dnf folder fails the run ok: ...arms nothing ok: ...and cleans nothing ok: ...and the reason names the folder and the doctor ok: an arm refused over an unsafe dnf folder is not unwound ok: ...and the reason names the staged-package folder ok: a live update refused over an unsafe dnf folder fails the run ok: ...and the reason names the folder and the doctor ok: ...and the event log records the refusal ok: ...and the notification points at the doctor ok: ...and without a folder to name, it says dnf's folders ok: every run in history recorded dnf as ok or failed == test_check.sh ok: unset key falls back to the defaults table ok: defaults table covers include_flatpak ok: status ok ok: state schema v1 ok: dnf items in state ok: flatpak items in state ok: actionable = all when no holds ok: a successful check stamps last_success ok: state persisted atomically ok: held_total counts the hold ok: badge count excludes held ok: per-backend actionable excludes held ok: per-backend held count ok: flatpak disabled ok: disabled flatpak is flagged, not just empty ok: dnf stays enabled ok: check failure → stale ok: stale keeps previous dnf items ok: stale preserves the previous last_success ok: preserved last_success is non-null ok: stale error names the failing backend ok: the dnf check error loses credentials, path tokens, the query and the home path ok: ...and so does the flatpak check error ok: ...with nothing of the password left ok: a failed check without --strict exits 0 ok: check --strict exits 1 when a backend failed ok: ...and still prints the state ok: ...and still writes it ok: unhold validates backend ok: corrupt state () → check still exits 0 ok: corrupt state () → stale ok: corrupt state () → no fabricated items ok: corrupt state () → last_success is a single value ok: corrupt state (garbage) → check still exits 0 ok: corrupt state (garbage) → stale ok: corrupt state (garbage) → no fabricated items ok: corrupt state (garbage) → last_success is a single value ok: corrupt state ({"backends":{"dnf":{"items":"nope"}}}) → check still exits 0 ok: corrupt state ({"backends":{"dnf":{"items":"nope"}}}) → stale ok: corrupt state ({"backends":{"dnf":{"items":"nope"}}}) → no fabricated items ok: corrupt state ({"backends":{"dnf":{"items":"nope"}}}) → last_success is a single value ok: corrupt state ({"last_success":"2020-01-01T00:00:00+00:00"}{"last_success":"2021-01-01T00:00:00+00:00"}) → check still exits 0 ok: corrupt state ({"last_success":"2020-01-01T00:00:00+00:00"}{"last_success":"2021-01-01T00:00:00+00:00"}) → stale ok: corrupt state ({"last_success":"2020-01-01T00:00:00+00:00"}{"last_success":"2021-01-01T00:00:00+00:00"}) → no fabricated items ok: corrupt state ({"last_success":"2020-01-01T00:00:00+00:00"}{"last_success":"2021-01-01T00:00:00+00:00"}) → last_success is a single value ok: check --strict exits 0 when every backend answered ok: concurrent checks never collide ok: state intact after concurrent writes ok: concurrent block ends in real ok state ok: a slow in-flight check cannot overwrite a newer result ok: cold check refreshes metadata once ok: cold refresh stamps last_refresh ok: a second check inside the 3h window does not refresh ok: refresh resumes once the 3h window lapses ok: a last_refresh stamp in the future does not hold the refresh off ok: ...and the stamp is rewritten to now, so the next window starts from a real time ok: the flatpak summary rides the same gate, fetch for fetch ok: the summary is still fetched with pkexec in play ok: ...and the pkexec recorder really was in the path ok: the flatpak refresh never goes through pkexec ok: include_flatpak=false fetches no flatpak summary ok: a failed dnf arm does not stop the flatpak one ok: one arm succeeding stamps last_refresh ok: a failed dnf refresh publishes its first error line, without the URL's credentials or query ok: ...and a dnf refresh that works removes it ok: a failed dnf refresh is not tried again within 15 minutes of failing ok: with no dnf refresh ever recorded, a failed one is tried again once 15 minutes old ok: ...without fetching Flatpak again or moving the shared stamp ok: ...and the retry that works clears the error, still inside the gate ok: once a dnf refresh has worked, a failing one waits for the gate ok: ...even 15 minutes on, while its cache is there ok: ...but with no usable cache it is tried again once 15 minutes old ok: ...while a cache you cannot read counts as there ok: with no error line, dnf's >>> status line is used, without its query ok: the query is removed before the tail is cut, and a word the cut splits is dropped ok: ...nor credentials cut in half ok: a quote inside a query does not stop its removal ok: user:password@ is removed wherever it appears ok: the line is at most 200 bytes and ends on a whole character ok: a refresh that printed nothing is named by how it ended ok: a password holding @ is removed up to the last @ before the host ok: ...an empty user or a user alone too ok: a token in a URL path is removed ok: ...after a prefix too ok: ...and a UUID ok: ...while ordinary path words stay ok: a fragment is removed, and the bracket after it stays ok: a bare user:password@ is removed, @ in the password included ok: the home directory becomes ~, and only as a whole path ok: ...and a home of / changes nothing ok: a question mark in prose stays, and lines join ok: any scheme, in any case ok: a long stderr is redacted before its last 200 bytes are taken ok: ...so a credential longer than the window does not leak ok: ...nor one in a non-ASCII password (window parity 1) ok: ...nor one in a non-ASCII password (window parity 2) ok: a password holding ? or / is still removed up to the host ok: the bracket or quote that closes a query stays ok: a password holding @ and / goes up to the last @ ok: a password holding @ goes when quotes, brackets or an odd host follow ok: a bracket inside a query does not end it, and one that closes the word stays ok: a host with a port keeps an @ in its path ok: ...and so does a registry digest ok: ...and an IPv6 host, while userinfo in front of one still goes ok: URLs glued with a comma are each redacted ok: a megabyte of stderr is capped and redacted quickly ok: ...and the capped text is still redacted ok: both arms failing leaves the window open ok: a failed flatpak refresh does not fail the check ok: the fixture starts from one fetch inside the window ok: ...and an ordinary check inside it still does not fetch ok: check --refresh fetches inside the 3h window ok: a box that has fetched metadata publishes when ok: ...as an ISO 8601 stamp ok: ...and the additive key does not bump the frozen schema ok: --refresh does not fetch on battery ok: ...and not on a metered connection either ok: a Flatpak refresh that never answers is given up on after KEMPT_REFRESH_TIMEOUT (1s) ok: ...and the dnf arm that did answer still stamps last_refresh ok: a Flatpak fetch beside a failed dnf fetch still stamps the rate limit ok: ...but metadata_refreshed keeps dnf's own, older date ok: ...and a dnf fetch that succeeds moves it ok: with no dnf stamp there is no date, whatever the shared stamp says ok: a Flatpak fetch alone on a new box claims no dnf metadata date ok: ...and nor does a second one, as a date or an age ok: a 0.1.7 box with only the shared stamp has no dnf date ok: ...and a Flatpak fetch alone after the upgrade gives it none ok: ...nor writes a dnf stamp ok: ...until a dnf fetch works, which dates it ok: three skipped refreshes in a row are logged once ok: ...and the line says which rule skipped it ok: ...and again a day later, so a box that has stopped fetching still says so ok: check still refuses an option it does not know ok: a check whose fetch was skipped says why in refresh_skipped ok: ...and a fetch that ran leaves it empty ok: ...and battery is named as battery ok: ...and with refreshing turned off it says off, beside the old failure it did not retry ok: --anyway fetches on battery ok: ...and leaves refresh_skipped empty ok: ...and logs the override as on battery ok: --anyway fetches on a metered connection ok: ...and leaves refresh_skipped empty ok: ...and logs the override as metered ok: every override is logged, not once a day ok: ...and nothing is logged when no rule was passed ok: check --refresh on that link still skips the fetch ok: check --anyway fetches there, with no --refresh beside it ok: ...and publishes no refresh_skipped ok: ...in the state file too ok: ...and logs refresh anyway (the connection is metered) ok: ...and the refresh helper inherits no variable that carries it ok: ...and writes no history entry ok: KEMPT_SKIP_REFRESH still skips with --anyway, and says off ok: ...and warns on stderr, in one line, that it downloaded nothing ok: ...a warning a check without --anyway does not give ok: check refuses --anyway with a value ok: bin/kempt has its eight internal checks (premise) ok: ...and every one runs cmd_check with no arguments, so none can pass --anyway ok: ...and no variable carrying it is exported ok: --anyway is parsed in one place ok: ...and that place is cmd_check ok: risky_names matches session-critical families, skips ordinary and held packages ok: no items → no recommendation, not an error ok: devel/headers/doc/macros tails are excluded, the session's own packages are not ok: risky_pending is published even when empty ok: additive key does not bump the frozen schema ok: pending session-critical package is flagged ok: holding it stops the recommendation ok: risky_regex is configurable ok: a check with no restart owed records false ok: ...and true when the backend says one is owed ok: ...written to the state file, not merely printed ok: an additive key does not bump the frozen schema ok: the next check clears it, the way a real restart would ok: an unusable reboot verdict degrades to false instead of losing the check ok: ...and the check it rode in on is still ok ok: ...still carrying exactly the pending items a healthy check reports ok: one unpriced item omits that backend's total ok: ...and the top-level total with it ok: the priced items keep their own size_bytes ok: and the unpriced one has no size key at all, rather than a zero ok: a multilib item carries the bytes both arches would download ok: full coverage publishes a dnf total ok: ...and a flatpak one ok: ...and the top level is their sum ok: the held item is still listed as pending ok: the top-level total is exactly the two backend totals ok: a disabled backend gets no total, not a zero ok: ...and does not suppress the top-level total either ok: a failed size query does not fail the check ok: ...and does not make it stale ok: ...and reports nothing rather than zero ok: an image-based system is published in the state ok: ...additively: the schema does not move ok: ...and an ordinary Fedora carries no such key at all, never image_based: false ok: a staged release upgrade is published: where from ok: ...and where to ok: ...and which of its three states it is in, which is what every sentence about it turns on ok: a downloaded-but-not-started release upgrade is published as downloaded ok: ...and still names the release ok: a ready release upgrade whose boot symlink is gone is stranded, not downloaded and not armed ok: release_upgrade is additive: the schema does not move ok: ...and it is not filed as one of Kempt's own stages, because it is not one ok: an ordinary staged transaction publishes no release upgrade at all ok: an armed stage in the same boot is still pending ok: the state says a staged install is armed ok: ...and how many updates it covers ok: ...and when it was staged ok: offline_staged is additive: the schema does not move ok: no hold, so nothing conflicts with the stage ok: ...and the empty list is one dnf5's own transaction vouches for ok: the fixtures leave some pending updates out of the stage ok: not_staged counts the pending dnf updates the staged transaction leaves out ok: ...and it is absent when the staged names cannot be read ok: a marker with no count says null, not a guess ok: ...and is still a pending install ok: a ready stage whose /system-update a live transaction removed is not published as staged ok: ...and its marker is kept, for the doctor to explain ok: ...while the same stage with its symlink in place is still a pending install ok: a stage that was never armed is not advertised as a pending install ok: ...and its marker is left for the doctor to explain ok: a marker whose transaction is gone is cleared ok: ...along with the snapshot copy it owned ok: ...and the clearing is recorded ok: ...and nothing is published about it ok: a rebooted box with no transaction left stops waiting for it ok: ...and says so the same way ok: an untouched transaction after a reboot is still pending ok: ...and is still published as one ok: a transaction Kempt did not stage is not published as Kempt's ok: a stage that a restart could not install is not cleared ok: ...the one notification that keeps the banner's disappearance from being silent ok: ...and the event log carries the status it was announced for ok: ...and the marker is demoted rather than deleted ok: ...with every other field of it kept ok: ...while nothing is published as a pending install, because nothing is ok: the second check says nothing about it again ok: ...and records nothing again either ok: ...and leaves the marker exactly as it demoted it ok: a demoted marker whose transaction then vanishes is still cleared ok: a download-complete stage in this boot is a stage in flight, not a dead one ok: ...so nothing new is announced ok: ...and the marker is left alone ok: a ready transaction with no restart marker keeps its marker for the doctor ok: ...but the marker is demoted, so no surface promises it ok: ...and it stops being published as a pending install ok: ...and the user is told, in the same words the detour uses ok: ...exactly once, not once per check ok: a second check says nothing more about it ok: a ready transaction whose restart marker still stands is still pending ok: every staged package installed at its staged version is a stage done ok: ...but not at another epoch ok: ...nor for another architecture ok: ...nor when the staged kernel is not among the kernels installed ok: ...while a newer build than the staged one counts: the box has moved past the stage ok: ...and an older one does not ok: ...a higher epoch is newer whatever the version says ok: ...and a lower epoch is older whatever the version says ok: ...a ~ pre-release sorts before the release it leads to ok: ...and a ^ snapshot sorts after it ok: ...release 10 is newer than release 1, by number and not by text ok: versions are ordered as rpm orders them, ~ and ^ included ok: a staged downgrade installed at its build is done ok: ...and not done while a newer build is installed ok: a staged removal is not done while that build is still installed ok: ...an old kernel another updater kept does not stop a stage being done ok: ...though a kept kernel proves nothing on its own ok: kernel is installonly ok: kernel-modules-extra is installonly ok: kernel-devel-matched is installonly ok: kernel-debug-core is installonly ok: kernel-uki-virt is installonly ok: kernel-headers is not ok: kernel-tools is not ok: kernel-tools-libs is not ok: kernel-srpm-macros is not ok: bash is not ok: a name dnf.conf lists as installonly counts ok: ...each of them ok: ...and a provide is not mistaken for a name ok: ...nor is an unlisted package ok: a name rpm resolves from installonlypkg() is installonly ok: ...an akmod too ok: ...and dnf.conf still adds its names ok: ...while the fixed list steps back once rpm has answered ok: ...and rpm's not-found line is no name ok: a failed rpm query falls back to the fixed list ok: the rpm answer is asked once per process ok: ...and a kept build of it does not stop a stage being done ok: ...and done once it is gone, other builds of it staying ok: a transaction of reinstalls alone is never called done ok: ...though a reinstall beside a real change does not stop it ok: ...while a reinstalled package that is not installed at all does ok: ...and an rpm that lists nothing proves nothing ok: ...nor does a transaction that names nothing ok: a stage another updater installed on the restart is announced once, as installed ok: ...and the marker is consumed ok: ...with its snapshot ok: ...and one event records it ok: ...and the history entry says how it arrived ok: ...naming the staged packages and not 7zip, which nothing staged ok: ...and nothing is published as pending ok: ...and the next check says nothing more ok: a stage only partly installed elsewhere is still the detour ok: ...and its marker is demoted, not consumed ok: a newer build installed elsewhere is announced as installed, with no advice to stage again ok: ...and the marker is consumed ok: a replaced stage is never announced as installed when the stored transaction is ok: ...and its marker is demoted, not consumed ok: ...and no history entry claims it ok: ...nor cleared as installed before the restart when the package set did not move ok: ...which keeps its marker ok: doctor names a transaction whose updates are already installed ok: ...instead of calling it someone else's stage ok: ...or a transaction a restart walked past ok: a stage behind another updater's symlink is not pending ok: ...and is published as blocked, with its count ok: ...so offline_armed says no ok: doctor says what the next restart installs instead ok: ...and promises nothing ok: unstage refuses while another updater's symlink stands ok: ...and discards nothing ok: ...and logs why ok: a replaced stage is published as blocked even when the stored transaction is installed ok: ...while Kempt's own stage, installed, is done and not blocked ok: with no marker, nothing is published as blocked ok: a package held after the stage, and in that stage, is named ok: ...on the authority of dnf5's own record, not a snapshot of it ok: a hold on a package that is not in the transaction changes nothing ok: ...and the flatpak hold is real, it just cannot reach an offline transaction ok: a transaction record that will not parse falls back to the marker's own list ok: ...and says which list answered ok: a marker whose names only ever came from a check cannot deny a conflict ok: ...so it publishes no conflict list at all, and the source says why ok: a marker with no names says so ok: ...and claims no conflict either way ok: ...while everything it does know is published as before ok: an unarmed stage publishes no conflict fields, because it publishes nothing ok: the schema is not bumped by an additive field ok: check --anyway that cannot take the lock prints the previous state ok: ...and warns on stderr that it downloaded nothing ok: ...a warning a plain check does not give ok: check --strict that cannot take the lock exits 1 ok: ...and still prints the previous state ok: a check that cannot take the lock still exits 0 ok: ...and says on stderr that the answer is the previous one ok: ...and hands back exactly ONE json document, whatever the file holds ok: ...the first one, which is the state the last complete write left ok: a stage written while the harvest ran survives it ok: ...and it is the NEW stage that is on disk, not the one the harvest read ok: ...and the harvest records that it kept somebody else's marker ok: ...while the applied transaction is still written to history ok: a stage whose packages moved underneath it keeps its marker ok: ...and stays armed, because it is ok: ...and is still the stage that was made ok: ...and no history entry is invented for an install that did not happen ok: ...and the user is not told their staged update was applied ok: ...the deferral is recorded ok: ...on the marker, which is how it is recorded ok: ...exactly once, not once per check for as long as the stage waits ok: the refresh helper is handed no descriptor for the check lock ok: the flatpak backend counts apps and runtimes together (3 + 4) ok: ...four of them runtimes, each saying so ok: the per-backend count includes runtimes ok: ...and so does the badge number ok: one runtime on two branches is two items in the state ok: ...distinguished by branch, which is the other half of the identity ok: an app carries neither key, which is what makes both additive ok: adding both keys leaves the schema at 1 ok: a stale hold on a runtime id does not hold the runtime ok: ...and is counted as held by nothing ok: a coalesced check exits 0 ok: a --coalesce check that waited on another check's write asks dnf nothing ok: ...and prints the state that check wrote ok: ...as exactly one document ok: ...and leaves state.json as that check wrote it ok: ...and is not logged as a check ok: ...but as a shared one ok: a coalesced check --strict exits 0 over an ok state ok: a --coalesce --strict check does not adopt a stale state, and its own check answers ok: without --coalesce the same race still runs its own check ok: --refresh never coalesces ok: ...and prints its own answer ok: a --coalesce check runs a real one when the state it waited on is stale ok: ...and answers from it (stale) ok: a --coalesce check runs a real one when the state it waited on is corrupt ok: ...and answers from it (corrupt) ok: a --coalesce check runs a real one when the state it waited on is absent ok: ...and answers from it (absent) ok: a --coalesce check whose state predates the request runs a real check ok: ...and does not serve the old state ok: a last_check in the request's own second does not count as after it ok: ...and one a second later does ok: ...and one a second earlier does not ok: a last_check under a minute ahead of the clock still counts ok: ...and one two minutes ahead is stale ok: a last_check in date -Is form counts ok: a last_check of 'now' does not ok: a last_check of '+30 minutes' does not ok: a last_check of '2026-10-18' does not ok: a last_check of '2026-10-18T21:31:47Z' does not ok: a last_check of '2026-10-18T21:31:47+00:00 ' does not ok: a last_check of '1792359107' does not ok: a last_check of '2026-10-18T21:31:47,109976564+00:00' does not ok: a --coalesce check over a last_check hours ahead of the clock runs a real check ok: ...and does not serve the future-stamped state ok: write_state refuses empty input ok: ...and leaves the previous state in place (empty input) ok: write_state refuses a bare newline ok: ...and leaves the previous state in place (a bare newline) ok: write_state refuses an array ok: ...and leaves the previous state in place (an array) ok: write_state refuses two objects ok: ...and leaves the previous state in place (two objects) ok: write_state refuses garbage ok: ...and leaves the previous state in place (garbage) ok: write_state still writes a real state ok: no flatpak: the state has no reclaim key ok: a reclaim listing that fails never fails the check ok: ...it is reported inside the block instead ok: ...and the rest of the state is unchanged ok: ...and written ok: a new install is offered nothing ok: an install the migration kept on the terminal is offered the popup ok: ...and the state file says so ok: ...until a surface is chosen ok: with no Discover notifier installed, nothing is offered ok: a notifier that starts with the session is offered ok: ...and the state file says so ok: ...until the person answers, Keep It included ok: a notifier that is off is not offered ok: with notify_security off, dnf is never asked about advisories ok: ...and the state carries no security block ok: notify_security is off by default ok: the block names each pending package once, whatever its arch, epoch or duplicate rows ok: ...with a 16-character digest ok: ...and it is written ok: ...additively: the schema does not move ok: the query is cache-only and asks for security updates as JSON ok: ...and names no cache directory it cannot read ok: a new set sends one notification ok: ...naming the packages ok: ...and the event log says so ok: ...and the advisories are recorded as announced ok: the same set again sends nothing ok: a readable system cache is the one asked ok: a held package drops out of the block ok: ...but its advisory stays on record while the package is pending ok: a set that shrinks and grows back sends nothing ok: a new advisory sends a notification again ok: ...naming the whole set ok: security-ack refuses a digest that is not one ok: security-ack refuses a set it was not shown ok: ...and records nothing ok: security-ack takes the digest the check published ok: ...and the panel stops asking at once ok: ...because the set is recorded as seen ok: ...and the next check keeps it, so a restart does not ask again ok: ...while the count stays until they are installed ok: an advisory nobody has seen asks again ok: with no session bus nothing is sent ok: ...and the advisory is not recorded as announced ok: ...so the next check with a session bus announces it ok: (a stage is armed) ok: an armed stage sends no notification ok: ...and the panel does not ask ok: ...and with the stage gone the set is announced ok: an advisory whose package is no longer pending leaves the seen file ok: unreadable output publishes no block and the check stays ok ok: ...and the event log says the security check failed ok: ...and the seen file is untouched ok: a row of the wrong shape refuses the whole answer ok: a non-zero exit publishes no block ok: ...and is logged once a day, not at every check ok: ...and no failure sends anything ok: ...and again the next day ok: nothing due is a block with nothing in it ok: a query that works clears the stamp, so the next failure is logged at once ok: (230 open advisories on one package: the state publishes 200 of them) ok: ...and records all 230 as announced ok: one new advisory over 5 checks is one notification, though it sorts past the 200 ok: ...and every open advisory is still on record ok: (the notifier was tried and failed) ok: a notification that failed leaves nothing recorded as announced ok: ...so the next check announces the set ok: a seen path that is a directory still publishes the block ok: ...and announces nothing, at any check ok: ...and writes nothing into the directory ok: a wedged lock costs a check its short wait, not 30 s (took 5 s) ok: ...the block is still published ok: ...nothing is announced, since nothing could be recorded ok: ...and the seen file is untouched ok: with notify_security off a check does not wait for the writers' lock (took 0 s) ok: (a set to acknowledge, nothing staged) ok: security-ack waits for state.lock ok: ...then acknowledges ok: ...and the stage published while it waited survives its patch ok: when dnf did not answer there is no block ok: ...and advisories are not asked about ok: an image-based system is never asked ok: per-user apps with updates are counted beside the system ones ok: ...and in the badge number ok: ...each marked scope user ok: the same id installed both ways is two items, each with its own size ok: with no per-user installation no item carries a scope, so the state is what it was ok: ...and the field leaves the schema at 1 ok: each installation's outcome is in the state, only when there is a per-user one ok: a failing per-user query does not make the check stale ok: ...and the state says the per-user side failed ok: the system apps are counted and the last check's per-user apps are kept ok: ...with the sizes they had ok: check --strict exits 1 when the apps for you only could not be listed ok: ...and 0 when both installations answered ok: a first per-user failure counts the system apps alone ok: an empty per-user repo directory changes nothing == test_config.sh ok: default when unset ok: reads set value ok: overwrite same key ok: no duplicate keys ok: second key independent ok: setting a second key preserves the first ok: default numeric ok: config key validated ok: newline value rejected ok: config get refuses a key that is not a key ok: ...and prints no other setting's value ok: ...and kempt config get says so with a usage error ok: rejected writes leave surface intact ok: rejected writes leave include_flatpak intact ok: rejected writes added no lines ok: the defaults table knows restart_reminder ok: an untouched restart_reminder reads as true, not as an empty string ok: ...and a reader that runs it through is_true gets the reminder ON ok: turning the reminder off round-trips ok: ...as exactly one line, like every other key ok: and back on again ok: the defaults table knows notify_security, and it is off ok: ...and it is a known setting ok: an untouched notify_security reads as false ok: turning it on round-trips ok: ...and a value that is not a boolean reads as off ok: the defaults table knows reclaim, and it is ask ok: ...and it is a known setting ok: an unset reclaim reads as ask ok: reclaim=ask reads as ask ok: reclaim=automatic reads as automatic ok: reclaim=off reads as off ok: ...case-folded, because the file is edited by hand ok: reclaim='auto' reads as ask, never automatic ok: reclaim='always' reads as ask, never automatic ok: reclaim='yes' reads as ask, never automatic ok: reclaim='true' reads as ask, never automatic ok: reclaim='bogus' reads as ask, never automatic ok: reclaim='' reads as ask, never automatic ok: an unknown reclaim value is stored and warned about, like surface ok: ...and the warning lists the three values ok: ...and a value it accepts says nothing ok: an unknown key is still stored, and is still a success ok: ...the value really is written ok: ...and the warning names the key that was not recognised ok: ...and lists the settings Kempt does know, which is where the typo shows up ok: an invalid value for a known key is still stored, and still a success ok: ...the value really is written ok: ...and the warning names the key ok: an invalid key is refused with exit 2 ok: ...and only the invalid-key error is printed ok: ...and lists every value it does accept ok: a value the key accepts says nothing ok: ...and so does a known key with no fixed set of values ok: a boolean takes anything, as documented, so it is not warned about ok: ...and widget_icon_size is validated by the widget, which is the half that can see the panel ok: hold stays silent ok: unhold stays silent ok: retention keeps the newest 50 history entries ok: the newest entry survives ok: the 50th-newest survives ok: the 51st-newest is dropped ok: the oldest is dropped ok: a 61-day-old log is dropped ok: a 59-day-old log is kept ok: retention only ever deletes its own file types ok: pruning an empty history dir is not an error ok: an aged orphan temp in the state dir is swept ok: ...and one in snapshots/, where the rebase leaves them ok: a fresh temp (a live concurrent writer's) is left alone ok: the sweep only ever takes .atomic. files ok: an aged orphan temp in the config dir is swept ok: ...while a fresh one there is left alone ok: ...and the config file itself is untouched ok: config set surface widget stores popup ok: ...with no warning, since widget is a value surface accepts ok: ...and config get prints the stored value ok: ...trimmed and in any case, as surfaces are read ok: the warning for an unknown surface names widget ok: ...and never the stored word ok: surface_word shows popup as widget and leaves the rest ok: an aged run-start token is swept ok: ...while a live launch's token is left alone ok: ...and the sweep only ever takes its own file names == test_config_concurrency.sh warning: unknown setting 'key5'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key2'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key9'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key6'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key4'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key7'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key3'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key8'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key10'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key1'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key11'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key20'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key16'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key12'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key17'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key19'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key15'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key14'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key13'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key18'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key22'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key26'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key24'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key23'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key29'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key21'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key30'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key28'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key27'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key25'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key31'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key32'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key40'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key38'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key34'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key36'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key35'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key39'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key33'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security warning: unknown setting 'key37'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security ok: 40 concurrent config writes leave 40 lines ok: ...40 distinct keys, none lost ok: ...and every key carries the value its own writer wrote ok: the writers' lock file lives in the state directory ok: ...and nothing new appears in the user's config directory ok: 40 concurrent holds leave 40 lines ok: ...all 40 distinct, so nothing was held twice ok: a rejected hold name still exits 2 while other writers hold the lock ok: ...and never reached the file ok: 40 concurrent unholds leave the holds file empty warning: unknown setting 'reader_probe'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security ok: a reader answers within a second while a writer holds the lock ok: two writers creating the event log keep all 100 lines ok: ...and the log is 0600 ok: two writers across the trim lose no line of either ok: ...and the log stays within its cap ok: a line waits for events.lock, then lands ok: a publish racing write_state never puts back an older state ok: ...and the last write stands ok: write_state writes when state.lock cannot be opened ok: ...and so does publish_staged_state ok: log_event appends when events.lock cannot be opened ok: write_state still returns the write's failure ok: a log whose lock cannot be opened is still trimmed ok: an inherited lock-held flag does not skip state.lock == test_config_durable_write.sh ok: the background job was forked ok: the shell died to SIGKILL, the way a destroyed KProcess kills it ok: ...and the job it forked is still running, orphaned but alive warning: unknown setting 'durable_key'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security ok: the write landed after its shell was killed - this is the fix ok: the control's shell died the same way ok: ...and its write never landed, so the assertion above is not passing by luck warning: unknown setting 'durable_ok'. Kempt does not read it. Known settings: include_flatpak, auto_accept, surface, refresh_interval_min, widget_icon_size, restart_reminder, risky_regex, reclaim, notify_security ok: a successful durable write exits 0, tag and all ok: ...having written the value ok: a refused durable write propagates the CLI's own exit status, not the shell's == test_diff.sh ok: diff finds updated/added/removed, skips unchanged ok: identical snapshots → empty ok: numeric-looking version bump (1.1 → 1.10) is not swallowed ok: raw multiver input rejected (as before-file) ok: raw multiver input rejected (as after-file) ok: raw multiver input rejected (both files) ok: collapse_versions yields one row per name ok: gpg-pubkey versions comma-joined ok: kernel-core versions comma-joined ok: single-version row survives collapsing unchanged ok: collapsed self-diff reports no phantom updates ok: kernel rotation = exactly one updated row, no phantoms == test_discover_notifier.sh ok: off without the notifier installed is not an error ok: ...and says it is not installed ok: ...and writes nothing ok: ...and stops nothing ok: on says the same ok: ...and records no answer ok: status --json says not installed ok: status: installed, on and running ok: ...and the text form says on ok: off says it is off ok: ...and that it stopped the running one ok: the override hides the notifier ok: ...and carries Kempt's mark ok: ...inside the [Desktop Entry] group ok: the system entry's keys are kept ok: pkill is limited to this user's processes ok: ...and the notifier is no longer running ok: with no entry of the person's own, nothing is backed up ok: status: off, by Kempt ok: the change is in kempt log ok: off again never adds a second Hidden= line ok: ...or a second mark ok: a Hidden=false from the system entry is replaced ok: ...and Hidden=true sits in the [Desktop Entry] group, not the last one ok: on succeeds ok: ...and says it is on ok: on removes the file Kempt wrote ok: on starts the notifier through kstart --application ok: the change is in kempt log ok: a notifier already running is not started again ok: ...and says so once pgrep finds it ok: config set right after on does not wait for the notifier's lock ok: without kstart, the binary is started ok: ...and found running ok: a kstart that starts nothing is tried first ok: ...then the binary, which does ok: when nothing starts it, on still succeeds ok: ...and never claims it started ok: ...and says when it will ok: with nothing to start it with, on still succeeds ok: ...and says it starts at the next login ok: the pattern matches the notifier ok: ...with no arguments too ok: ...and not a command that only names it ok: off keeps a copy of the person's own entry ok: ...and hides the notifier ok: ...keeping the person's own keys ok: a second off leaves that copy alone ok: on puts the person's own entry back as it was ok: ...with its permissions ok: ...and removes the copy ok: off over a new entry of the person's own, with a copy already kept, refuses ok: ...and names the copy in the way ok: ...leaving the new entry as it is ok: ...and the first copy as it was ok: off keeps the symlink itself ok: ...and writes its own entry beside it ok: ...without writing through the link ok: on puts the same symlink back ok: status: off by the person's own entry ok: on over the person's own hiding entry fails ok: ...and says which file keeps it off, and how to undo it ok: ...and leaves that entry alone ok: the entry install.sh 0.1.7 wrote is Kempt's ok: ...and status says Kempt turned it off ok: off over it succeeds ok: ...and says it is already off ok: ...with nothing moved or added beside it ok: ...and answers the offer ok: on over it succeeds ok: ...and says it is on ok: ...and removes the file ok: ...from a system entry with no Hidden= line as well ok: ...but once the system entry changes, the file is the person's ok: an unreadable system entry makes no file Kempt's ok: a hidden entry with a key of the person's own survives off ok: ...and on says it cannot turn it on ok: ...because the person's entry keeps it off ok: ...and still leaves it as it was ok: the earlier installer's exact three-line entry is Kempt's ok: ...so on removes it ok: ...but one byte more and it is the person's ok: a plain copy of the system entry is the person's ok: off says where the person's entry went ok: on says it is back ok: ...and it is, as it was ok: the entry off wrote is Kempt's, byte for byte ok: with cmp missing, the entry off wrote is still Kempt's ok: ...and status says so ok: ...and so is the file install.sh 0.1.7 wrote ok: ...and the earlier three-line entry ok: ...so on removes it with cmp missing ok: ...and once edited it is not ok: ...though status still says Kempt turned it off ok: on over an edited entry turns the notifier on ok: ...and says where the edit went ok: ...which holds the edit ok: ...with the entry itself gone ok: off with a directory at the entry path refuses ok: ...and says why ok: ...writing nothing into it ok: ...or beside it ok: on refuses it too ok: off with a symlink to nothing refuses ok: ...and says so plainly ok: ...with no tool's raw error ok: ...leaving the link as it was ok: ...and keeping no copy of it ok: off with an unreadable entry refuses ok: ...and says it cannot read it ok: ...not that it could not write ok: ...and moves nothing aside ok: on refuses it too ok: ...with the same reason ok: off with an unreadable system entry refuses ok: ...and names that file ok: ...and writes nothing ok: two offs at once both succeed ok: ...and the person's entry is the copy kept ok: ...because the second waited and found it already off ok: an enabled notifier nobody has answered about is offered ok: keep succeeds ok: keep answers the offer ok: ...and leaves even a plain copy of the system entry alone ok: ...and starts and stops nothing ok: ...and is in kempt log ok: keep without the notifier says so ok: a notifier that is off is not offered ok: ...and neither is one that is not installed ok: no verb is a usage error ok: an unknown verb is a usage error ok: an option off does not take is a usage error ok: keep takes no option ok: the help text lists it == test_dnf.sh ok: 7 items (multilib collapses, obsoleted rows and headers filtered) ok: item shape ok: arch suffix stripped ok: bash appears once despite two arches ok: divergent multilib EVRs collapse into one comma-joined to-version, oldest first ok: obsoleted package is not reported as a pending update ok: section header is not parsed as a package ok: not-installed package falls back to ? ok: installed packages resolve real from-versions ok: the JSON fixture parses to exactly the items the text fixture does ok: {} is dnf5's JSON for nothing pending ok: JSON of the wrong shape fails loudly: [] ok: JSON of the wrong shape fails loudly: {"upgrades":{}} ok: JSON of the wrong shape fails loudly: {"upgrades":[{"name":"x"}]} ok: JSON of the wrong shape fails loudly: {"upgrades":[ ok: 1.9 and 1.10 collapse in version order, so the last element is the newest ok: names stay in byte order, which is what join and tsv_diff_updates require ok: parser on empty stdin exits 0 ok: parser on empty stdin → [] ok: lib/common.sh itself sets pipefail (production path) ok: dnf_check wires helper→parser ok: zero pending dnf is success ok: zero pending dnf → empty items ok: dnf_check reads the helper's JSON too ok: parser failure propagates past cleanup rm ok: failing installed-lookup is loud ok: reboot check rc 0 → false ok: reboot check rc 1 WITH the package list → true ok: reboot check unexpected rc → false, never a hang ok: unexpected rc warns on stderr ok: rc 1 with NOTHING on stdout → false: it could not answer ok: ...and says so, rather than answering false silently ok: rc 1 with only whitespace on stdout → false: still no evidence ok: ...and warns, exactly as the empty-stdout case does ok: rc 1 with prose on stdout but no package list → false: prose is not evidence ok: ...and warns, exactly as the empty-stdout case does ok: rc 1 with dnf5's own verdict sentence and no list → true ok: the reboot check really is cache-only ok: ...and really does disable every repo ok: ...on the needs-restarting verb ok: JSON: reboot_required true with rc 1 → true ok: JSON: reboot_required false with rc 0 → false, with no warning ok: JSON: disagree → false ok: ...and warns ok: JSON: shape → false ok: ...and warns ok: JSON: empty → false ok: ...and warns ok: the JSON reboot check is cache-only with every repo disabled, too ok: dnf5 5.4.0 gets the text form ok: dnf_check propagates failure ok: a multilib pair sums to the bytes BOTH arches would download ok: ...and so does the pending multilib twin the check fixture carries ok: a single-arch package is itself ok: one row per name ok: rows come out sorted by name ok: dnf_sizes passes its --qf as a $'...' literal (a double-quoted \t reaches dnf5 as two characters) ok: no double-quoted --qf survives in the dnf backend ok: an unpriced package gets no row ok: a zero-byte row is dropped, not counted as free ok: a literal tag name (the wrong %{download_size} spelling) is not a size ok: a failed size command yields no rows ok: ...and exits clean, because a check must answer without it ok: nothing pending yields no rows ok: the default size query keeps --latest-limit 1 ok: the default size query is cache-only ok: the default size query asks for the tag that exists ok: the default size query cannot block a check forever ok: the default size query is pointed at a cache, not left on whichever one dnf5 picks for the user ok: ...and the cache it is pointed at is the documented seam, so this is testable at all ok: a readable system cache is passed to the size query as one argument ok: ...and pointing it at that cache does not cost the query its offline guarantee ok: an unreadable system cache falls back to the plain query, never points dnf5 at nothing ok: ...and the fallback is the same query, so a box without a system cache still gets what it can == test_docs.sh ok: no Markdown table is split in two by a blank line ok: docs/architecture.md still has an '## Environment seams' section ok: every KEMPT_* seam read by the code has a row in the environment-seams table ok: docs/usage.md still has a '## log' section ok: every log_event line has a row in the kempt log vocabulary table ok: the release check exists ok: ...and its runner is executable ok: docs/RELEASING.md names the release check ok: CONTRIBUTING.md names the release check ok: AGENTS.md names the release check ok: the release check reads VERSION ok: ...and hardcodes no version of its own ok: every docs/*.md has a word budget in tests/test_docs.sh ok: AGENTS.md is 419 words, inside its budget of 420 ok: AGENTS.md passes tools/prose-check.py ok: CONTRIBUTING.md is 1690 words, inside its budget of 1700 ok: CONTRIBUTING.md passes tools/prose-check.py ok: README.md is 820 words, inside its budget of 820 ok: README.md passes tools/prose-check.py ok: SECURITY.md is 398 words, inside its budget of 420 ok: SECURITY.md passes tools/prose-check.py ok: docs/RELEASING.md is 830 words, inside its budget of 840 ok: docs/RELEASING.md passes tools/prose-check.py ok: docs/ROADMAP.md is 1444 words, inside its budget of 1750 ok: docs/ROADMAP.md passes tools/prose-check.py ok: docs/architecture.md is 4457 words, inside its budget of 4500 ok: docs/architecture.md passes tools/prose-check.py ok: docs/configuration.md is 1128 words, inside its budget of 1150 ok: docs/configuration.md passes tools/prose-check.py ok: docs/install.md is 1498 words, inside its budget of 1500 ok: docs/install.md passes tools/prose-check.py ok: docs/security.md is 3678 words, inside its budget of 3680 ok: docs/security.md passes tools/prose-check.py ok: docs/usage.md is 2946 words, inside its budget of 2950 ok: docs/usage.md passes tools/prose-check.py ok: docs/widget.md is 2741 words, inside its budget of 2750 ok: docs/widget.md passes tools/prose-check.py ok: tests/README.md is 294 words, inside its budget of 310 ok: tests/README.md passes tools/prose-check.py ok: CHANGELOG.md and the man page have no em or en dash ok: CHANGELOG.md and the man page have no ' - ' aside (line numbers) ok: docs/man/kempt.1 is 2299 words, inside its budget of 2300 ok: no public file talks about the project's own review process ok: every .md file a public file names is in the repository ok: no email address outside the spec changelog, SECURITY.md and CODE_OF_CONDUCT.md ok: premise: kempt usage has the reclaim line ok: no command line, doc or widget passes or documents reclaim --allow-auth == test_doctor.sh ok: healthy install: doctor exits 0 ok: healthy install says so ok: no FAIL lines on a healthy install ok: reports on root helper (refresh) ok: reports on root helper (apply) ok: reports on polkit action ok: reports on jq ok: reports on terminal emulator ok: reports on flatpak ok: reports on dnf ok: reports on config file ok: reports on state dir ok: reports on checkout ok: reports on package lists ok: reports on polkit exec.path (refresh) ok: reports on polkit exec.path (apply) ok: reports on widget engine ok: doctor takes no arguments ok: a box that has never fetched metadata says so, rather than dating it ok: ...and an old cache is dated in whole days ok: ...and names the command that fetches now ok: ...and one day reads as one day, verb and all ok: ...and a cache fetched today is an ok row, not a finding ok: a box with fetches but no dnf stamp does not date the dnf metadata ok: ...and says how to see why, if it stays ok: a helper that IS root:root 0755 at the annotated path passes its ownership check ok: ...and the ok line reports the ownership it actually verified ok: ...while the skew check says that file is not the checkout's helper ok: a helper at the annotated path that is not root:root 0755 fails the checkup ok: ...and the FAIL line names the owner and the mode it found ok: ...and says how to fix it ok: a helper in a directory others can write to fails the checkup ok: ...and the FAIL line names the directory, its owner and its mode ok: ...while a root-owned directory nobody else can write says nothing ok: a policy that pins the helper this CLI runs is not a problem of its own ok: ...and adds no FAIL of its own (the one there is the install skew) ok: ...and the refresh line names the path both sides agree on ok: ...and the apply line names the path both sides agree on ok: a policy that pins a different apply helper fails the checkup ok: the FAIL line names the action that disagrees ok: ...naming the path the policy pins and the path this CLI runs ok: ...and what it costs, which is a dialog on every privileged run ok: ...including the background check nobody is there to answer ok: ...and the remedy for a checkout ok: ...and the remedy for a package ok: ...while the action that agrees is still reported as ok ok: a policy with no exec.path annotation is reported, not failed ok: ...and an absent annotation is not a problem ok: ...and says so on an info line ok: an unreadable policy file is not an exec.path verdict ok: an unreadable policy leaves an info line, not a second FAIL ok: a helper seam override is not compared against the policy ok: the widget running the same kempt this report describes is not a problem ok: ...and the line names the one kempt both would run ok: a widget that would run a different kempt fails the checkup ok: the FAIL line names the widget's kempt and this report's ok: ...in the order that says which is which ok: no kempt on the widget's PATH is reported, not failed ok: ...on an info line, because the widget says it itself ok: with no root helper, check still exits 0 ok: ...and reports 0 pending system updates, which reads as up to date ok: ...with only 'stale' to hint that anything is wrong ok: the stale error names the missing helper, not a timeout ok: no phantom timeout in the error ok: an ordinary backend failure still reports its own message ok: the stale error joins lines with single spaces and ends with no trailing space ok: ...while doctor fails and names the missing helper ok: the FAIL line names the refresh helper ok: ...and says how to fix it ok: a missing apply helper fails the checkup ok: the FAIL line names the apply helper ok: a missing polkit action fails the checkup ok: the FAIL line names the polkit action ok: a missing terminal emulator fails while surface=terminal ok: the FAIL line names the missing emulator ok: ...but not on a detached surface ok: it is an info line for a surface that never launches one ok: a missing flatpak fails while include_flatpak=true ok: the FAIL line names flatpak ok: ...but is only an info line when include_flatpak=false ok: a disabled backend is information, not a failure ok: no per-user installation: doctor says none ok: a per-user installation: doctor counts its apps ok: a per-user list that fails is information, not a failure ok: ...said as such, with what checks and updates then do ok: a listing helper that cannot load libflatpak fails doctor ok: ...naming what failed ok: ...and the packages to install ok: a listing that fails some other way is reported, not a doctor failure ok: ...with its exit code and its own reason ok: a listing that answers is an ok row ok: ...saying the runtimes can be listed ok: doctor with SUDO_UID=1000 does not fail on the listing ok: ...and says it skipped it ok: doctor with PKEXEC_UID=1000 does not fail on the listing ok: ...and says it skipped it ok: ...without running the helper ok: reclaim=off: the listing is not run ok: ...and has no row ok: include_flatpak=false: the listing is not run ok: no flatpak: the listing is not run ok: a missing dnf command does not fail doctor ok: the info line names the missing dnf command ok: ...and says which answer degrades, not merely that a file is missing ok: a dnf command carrying arguments still resolves ok: the ok line names the resolved dnf command ok: one key reads '1 setting' ok: two keys read '2 settings', the sample docs/usage.md prints ok: an unparseable config line fails the checkup ok: the FAIL line quotes the bad line ok: a config key that config set would refuse fails the checkup ok: an invalid key is reported too ok: an unwritable state dir fails the checkup ok: the FAIL line names the state dir ok: an incomplete checkout fails the checkup ok: the FAIL line says the checkout is incomplete ok: ...and names the missing file ok: the same tree without install.sh still fails ok: ...and a packaged install is told about its program files, not about a checkout ok: ...and never calls them a checkout ok: a freshly staged install matches the checkout it came from ok: reports ok helpers: match checkout ok: reports ok policy: match checkout ok: reports ok widget: match checkout ok: a root helper that drifted from the checkout fails the checkup ok: the FAIL line names the fix ok: ...and re-running the installer clears it ok: a polkit action that drifted from the checkout fails the checkup ok: the FAIL line names the fix ok: a widget package that drifted from the checkout fails the checkup ok: the FAIL line says the shell has to reload too ok: a file the checkout no longer has is skew as well ok: a missing file inside the package is reported ok: a widget that was never installed is not a problem ok: ...and says so in one line ok: a helper that is absent rather than drifted is an info, not a second FAIL skip: not a git checkout - the no-git version line is asserted below ok: a checkout with no git history still names its release ok: a packaged install says so ok: ...and skips the comparison entirely ok: a packaged install's missing helper points at dnf reinstall ok: ...and so does its missing polkit action ok: ...and nothing tells a package user to run install.sh ok: a packaged check names the package fix for a missing helper ok: a packaged install with no user copy of the widget is healthy ok: ...and says nothing about one ok: a store copy with no packaged widget does not fail the checkup ok: ...and does not call it shadowing, because there is nothing to shadow ok: ...it says the widget in use is the store copy, which package updates do not reach ok: ...and to install the widget package first, then remove the store copy ok: ...and does not also claim there is no widget on the panel ok: a user copy shadowing the packaged widget fails the checkup ok: the FAIL line names the directory ok: ...and what it costs, which is every future update of the widget ok: ...and the exact command that removes it ok: ...and that the shell has to reload before it takes effect ok: a packaged install with no widget names the package that carries it ok: ...and says that without it nothing checks on a schedule, and not over SSH ok: ...and stays quiet once the widget package is there ok: a packaged install names KEMPT_PKEXEC as an override rather than certifying itself ok: a packaged install names KEMPT_APPLY_HELPER as an override rather than certifying itself ok: a packaged install names KEMPT_REFRESH_HELPER as an override rather than certifying itself ok: ...and does not end with 'all checks passed' ok: ...and says where such a setting comes from ok: a checkout says nothing about them - its file comparisons answer the question ok: in a checkout the user copy IS the install, so nothing warns about it ok: docs/install.md spells out the same removal command doctor names ok: no staged transaction, no line about one ok: an armed staged transaction is not a problem ok: ...and doctor says how many, and when ok: a single staged package reads as one ok: ...and two is back to the plural ok: an unknown count loses the number, not the line ok: a stage that was never armed is a problem, and doctor exits on it ok: ...saying it can never install, not that it is pending ok: ...and names the exact command that clears it ok: a marker with no transaction left is reported, and not as a problem ok: ...and it does not fail the checkup ok: a transaction Kempt did not stage is named as somebody else's ok: ...pointing at the command that describes it ok: on an image-based system doctor reports the rpm-ostree problem ok: ...and on an ordinary one it says nothing of the kind ok: ...and says so as a FAIL, naming the tool that does update it ok: ...as a not-yet rather than a never, as the other surfaces say ok: ...so the report never ends by saying everything is fine ok: ...directly under the version line, above every check, not as a footnote below them ok: a staged release upgrade is named as one, with both releases ok: a downloaded release upgrade is not described as installing on the next restart ok: ...and it says what starts it, which is the thing the person still has to do ok: ...and never claims a restart installs something that is not armed ok: a stranded release upgrade is described as one a restart has already passed ok: ...and not as one that was never started ok: ...and promises no restart that will not happen ok: ...and the failure names whose transaction it is ok: ...and offers no command that always ends in a refusal ok: an unfinished release upgrade is described as unfinished ok: ...and never called downloaded, which is the opposite of what dnf5 recorded ok: a readable marker beside a release upgrade does not swallow the row about it ok: ...and does not call a marker that parsed unreadable ok: ...saying why Kempt refuses to stage while it is there ok: ...and it is information, not a fault: nothing here is broken ok: a marker that will not parse does not crash the checkup ok: ...and says so instead of describing a pending install it cannot see ok: ...and claims nothing about what a restart would do ok: a demoted marker still fails the checkup over a transaction that cannot install ok: ...with the same precise row, which is what clearing the marker would have lost ok: a hold behind an armed stage is reported, and is not a failure ok: ...leading with what happens and naming the package ok: ...and ending with both remedies, rebuild it or remove it ok: three held packages read as a sentence, plural verb included ok: past four names the rest are counted, not listed ok: a list that cannot deny anything gets the generic line, not silence ok: ...carrying both remedies as well ok: no hold, no conflict line ok: a staged transaction that is not the one Kempt built fails the checkup ok: ...saying whose record it is reading, not just that something is wrong ok: ...and names both directions of the difference ok: ...and ends with both remedies too ok: a transaction that matches what Kempt staged is not drift ok: equal sets say nothing ok: a check-derived list is never compared against dnf5's record ok: nothing to compare, nothing claimed ok: a transaction record that will not parse is not drift either ok: an unreadable record makes no claim about the marker ok: symlink plus a ready transaction is the armed state, not a fault ok: a live boot symlink over an unarmed transaction fails the checkup ok: ...naming the status the boot will detour on ok: ...and the exact command that clears it ok: a boot symlink with nothing staged behind it fails the checkup ok: ...and says the transaction is not there rather than quoting a status ok: a marker does not suppress the symlink row ok: ...and the symlink does not suppress the marker's ok: no boot symlink, no symlink row ok: ...and the unarmed transaction is reported exactly once ok: a ready transaction with no boot symlink fails the checkup ok: ...and the row says the transaction can never install ok: ...and offers the re-stage that fixes it ok: the same transaction with its symlink standing is not a problem ok: with no notifier entry anywhere, doctor says nothing about it ok: an enabled notifier is reported as info, not as a problem ok: ...and the row names the file, so it can be found ok: ...and the command that turns it off ok: ...and the widget's button for the same ok: ...in short sentences ok: ...and it never makes the checkup fail ok: the installer's opt-out is confirmed as ok ok: ...and the enabled row is gone ok: a user entry with Hidden=false still starts, and is reported ok: an entry limited to another desktop is not reported as running here ok: ...and neither is one that excludes this desktop ok: the setting is not reported while the notifier neither starts here nor runs ok: ...but is while it runs ok: a notifier that starts here and installs by itself is reported as info ok: ...saying what it does to a stage, and the command ok: ...and as WARN when Kempt is set to stage ok: ...which never makes the checkup fail ok: ...and the report ends by counting the warning, not with all checks passed ok: the setting turned off is not reported ok: ...nor the key in another section ok: a key locked with [$i] is still the key ok: ...and so is a key in a locked group ok: ...or in a locked file ok: 1 reads as true ok: ...and so does On, spaces and a CRLF line ending included ok: 0 reads as false ok: the last line wins ok: a commented line is not the setting ok: the system file alone turns it on, and is named as the file that decided ok: the user's file overrides the system's, and is named ok: ...in both directions ok: a user file without the key leaves the system's false ok: a key locked in the system file wins over the user's ok: ...and so does a locked group ok: ...and a locked file ok: a locked group that leaves the key unset keeps the user's true out ok: a lock on another group does not stop the user's file ok: ...nor a [$i] that follows a group, which is no file lock ok: the first system directory overrides the later ones ok: ...and the user's file overrides them all ok: a lock in a later system directory holds against the earlier ones and the user ok: ...and a lock in the first one overrides the later ones and holds against the user ok: with no seam set, the system files come from XDG_CONFIG_DIRS ok: several problems at once still exit 1 ok: every problem is reported, not just the first: the missing helper ok: ...and the missing polkit action beside it ok: the summary counts them ok: a cache root does not own is a WARN, even with nothing world-writable in it ok: ...and the last line counts it ok: ...with the move-aside command, its path quoted for the shell, and a warning against dnf5 clean all ok: ...followed by the rerun for a leftover directory, its path quoted the same way ok: ...and dnf5 clean all is never the advice ok: ...nor a chmod, which leaves another user's files theirs ok: with an offline transaction stored, the fix is the same move ok: ...and does not ask to discard the staged update ok: ...and never offers dnf5 clean all ok: ...and doctor changes nothing itself ok: a state directory root does not own is a FAIL: lock the directories, drop hard links, chown, ACLs, chmod, then the links, a restart and a second look ok: a staged-update folder root does not own is a FAIL: discard, remove, stage again ok: ...and doctor does not call the box clean skip: no user namespace with spare ids here, so the root-owned dnf cache and state cases did not run ok: rpm's plugin installed is an ok row ok: libdnf5's plugin installed with enabled = 1 is an ok row ok: ...and so is a config with no enabled key, which libdnf5 reads as on ok: libdnf5's plugin turned off, with no rpm plugin, is a WARN naming the file ok: ...and the last line counts it ok: an enabled key outside [main] does not turn the plugin off ok: with no config file libdnf5 never loads its plugin, so that is a WARN that says the file is missing ok: an indented enabled line continues the value above it, as libdnf5 reads it, so it is not a key ok: rpm's plugin covers for libdnf5's when that one is off ok: neither plugin is a WARN with the command that installs one ok: ...and the last line counts it ok: rpm's not-installed line is not read as the package ok: no failure marker, no download row ok: a failed dnf fetch is a WARN with the first line of its error ok: ...and no second row contradicts it ok: ...in either wording ok: a stale state is a WARN with the first line of its error, and no earlier check means no counts ok: ...and the last line counts both ok: dnf's no-cache text becomes plain words, and an earlier success means the lists were downloaded once ok: ...so it never says never ok: ...never dnf's raw text ok: ...and no hedge after the counts ok: a failure other than no cache keeps its reason, as kempt status gives it ok: with refreshing turned off, no download row ok: ...and the marker is left in place ok: ...the same when the switch is set for this run ok: a state that is not stale adds no row == test_flatpak.sh ok: the six shipped flatpak defaults were read ok: the default flatpak check never leaves the box ok: the flatpak refresh seam is the arm that fetches ok: the refresh is the check command minus --cached ok: FP_REMOTE_DEFAULT is --system scoped ok: FP_REFRESH_DEFAULT is --system scoped ok: FP_LIST_DEFAULT is --system scoped ok: FP_UPDATE_DEFAULT is --system scoped ok: FP_REMOTE_RT_DEFAULT is --system scoped ok: FP_LIST_RT_DEFAULT is --system scoped ok: the apply arm is plain flatpak, run as the user ok: three pending flatpaks ok: item shape ok: not-installed app falls back to ? ok: parser on empty stdin exits 0 ok: parser on empty stdin → [] ok: flatpak_check wires cmds→parser ok: a flatpak version set collapses in version order too ok: app ids stay in byte order for join ok: zero pending flatpak is success, not stale ok: zero pending flatpak → empty items ok: parser failure propagates past cleanup rm ok: failing installed-lookup is loud ok: flatpak_check propagates failure ok: flatpak_refresh keeps both of the seam's streams to itself ok: ...having actually run the seam ok: flatpak_refresh propagates failure ok: with no Flatpak remote, flatpak_refresh says nothing was fetched ok: ...without running the fetch ok: a remotes list that cannot be read still lets the fetch run ok: ...and it did run ok: a remotes listing that hangs still lets the fetch run ok: ...which did run ok: ...after the listing's short timeout, not the refresh's (1s) ok: the listing's timeout defaults to 10 seconds ok: flatpak_apply with no ids updates everything ok: all-apps command ok: no -y omits the auto-accept flags ok: flatpak_apply with ids runs one update per app ok: ...one command per id, not one command with two ids ok: first app's command ok: second app's command ok: one failing app fails the call ok: ...without abandoning the apps after it ok: an option-shaped app id is rejected ok: an injection-shaped app id is rejected ok: a rejected call updates nothing at all ok: a GB row separated by a NO-BREAK SPACE parses ok: ...and an MB one ok: a plain-space bytes row parses too ok: the fixture carries real U+00A0 bytes, not spaces ok: an empty size column yields no row ok: a literal ? yields no row ok: three of the five rows priced ok: kB is SI, not 1024 ok: TB parses ok: a unit nobody has seen is not guessed at ok: a two-column row has no size to read ok: no rows in, no rows out ok: the item parser reads version from a three-column row ok: ...and still joins the installed version onto it ok: no size string leaks into a version field ok: flatpak_check accepts a sizes path ok: ...and fills it from the rows it already had ok: flatpak_check without a sizes path still succeeds ok: the runtime check never leaves the box either ok: the runtime check asks for runtimes ok: ...and so does the runtime installed lookup ok: FP_REMOTE_RT_DEFAULT carries the branch column, because a runtime's identity is id AND branch ok: FP_LIST_RT_DEFAULT carries the branch column, because a runtime's identity is id AND branch ok: a runtime row is keyed by id and branch together ok: a runtime with no version string reads as not known, not as empty ok: four pending runtimes ok: every runtime item says it is one ok: ...and every one of them carries its branch ok: one runtime on two branches is TWO rows, not one ok: ...one per branch ok: ...each moving to its own version, never comma-joined into one ok: ...so no row carries a collapsed set that would claim both versions at once ok: a runtime that is not installed falls back to ? ok: flatpak_check counts apps AND runtimes (3 + 4) ok: ...four of them runtimes ok: ...and an app carries no kind at all, which is what makes the key additive ok: the app items are identical with and without the runtime arm ok: a failing runtime check fails the backend ok: a failing runtime lookup fails the backend ok: flatpak_check prices both arms ok: a runtime's size row is keyed by id and branch ok: ...so the other branch keeps its own, different size ok: attach_sizes joins a runtime on name AND branch ok: ...giving the two branches their own figures rather than one twice ok: ...while an app with no branch still joins by name exactly as before ok: the snapshot carries both apps and runtimes ok: a runtime on two branches is two snapshot rows ok: ...and no name repeats, which is what tsv_diff_updates refuses input for ok: a failing runtime lookup fails the snapshot too ok: ...and so does a failing app lookup, which a group pipeline would have hidden ok: a snapshot row carries the commit as a third field ok: ...which is the commit flatpak reports as active ok: ...while a runtime with no version at all still reads ?, as it always did ok: a ref whose COMMIT moved is reported as updated, though its version did not ok: ...naming the ref that actually changed ok: ...and reporting VERSIONS, which is what a person reads: the widget and kempt summary draw this as a new build ok: ...while a box where nothing moved still reports nothing ok: a runtime is never held ok: ...and an app of the same id is untouched by that rule ok: flatpak_apply --runtime updates every runtime ok: the runtime command ok: ...as ONE command, not one per runtime ok: an option-shaped id is still rejected beside it ok: ...updating nothing at all ok: an installed runtime id is recognised ok: an app id is not a runtime ok: ...and neither is a name nothing answers to ok: end-of-life notices: id, branch or -, reason; Locale folded, repeats dropped ok: no notice, no lookups, no notes ok: two branches installed: flatpak info picks the end-of-life one, and Kate on 6.9 is not blamed ok: a runtime no app uses is reported with no apps ok: an end-of-life app is its own note, named by id when it has no name ok: a failed app lookup fails the notes, not silently empties them ok: every per-user command is its system twin with --user in place of --system ok: ...with none that differ ok: no per-user installation: only the system one is asked ok: ...and no item carries a scope, so the state is what it always was ok: ...and no --user command runs at all, which would create the installation ok: an empty per-user repo directory is not an installation ok: ...so no --user command runs ok: under sudo the per-user installation is left alone ok: ...and under pkexec ok: a per-user installation is asked after the system one ok: per-user only: its two apps and one runtime are counted ok: ...each marked scope user ok: ...with versions from the per-user installed list ok: ...and a per-user runtime itemized like a system one ok: the same id installed both ways is two items ok: ...one of them marked scope user ok: a per-user size row is keyed user: ok: ...so each copy of the id takes its own size ok: ...and a per-user runtime is priced by id and branch ok: a hold on an id holds it in both installations ok: a failing per-user query does not fail the check ok: ...it keeps the system items and drops the per-user ones ok: ...and records each installation's outcome ok: ...with no per-user size rows ok: both answering: both recorded ok ok: the snapshot keeps the two installations apart, per-user rows keyed user: ok: ...and can be asked for one installation ok: the run report names the per-user copy by its id, marked scope user, and leaves the system copy alone ok: the refresh runs for both installations ok: ...the per-user one through its own command ok: ...and a per-user refresh that fails fails the step ok: flatpak_apply --user updates the per-user installation ok: ...with the same flags as the system run ok: ...and per app, for holds ok: a per-user runtime id is recognised as a runtime ok: an end-of-life note names the per-user app behind it == test_helpers.sh ok: refresh: no verb ok: refresh: bad verb ok: refresh: extra args rejected ok: refresh: trailing empty arg rejected ok: refresh helper: check builds exact command ok: refresh helper: check asks for JSON from dnf5 5.4.0 ok: ...compared as versions, so 5.10 is newer than 5.4 ok: ...and text before it ok: refresh helper: refresh builds exact command, bounded as root ok: apply: no verb ok: apply: bad verb ok: apply: injection via exclude ok: apply: option smuggling ok: apply: the flatpak verb is gone from the root helper ok: apply: ...and says so with a usage line naming only the dnf verbs ok: dnf-upgrade builds exact command ok: offline stage builds exact command ok: offline arm builds exact command, with the no-reboot guard ok: offline clean builds exact command ok: apply: arm takes no arguments ok: apply: clean takes no arguments ok: dnf-offline-stage is refused over a stored release upgrade ok: ...and says what is stored, running nothing ok: dnf-offline-stage is refused over a release upgrade that is downloaded but not armed ok: dnf-offline-stage is allowed over an ordinary offline update ok: ...and builds its usual command ok: dnf-offline-stage is allowed when nothing is stored ok: ...and builds its usual command ok: dnf-offline-stage is refused when the stored state is not a transaction-state file ok: ...and says it could not read it ok: dnf-offline-stage is refused when a release version has an unexpected shape ok: dnf-offline-arm is refused over a stored release upgrade ok: ...and says what is stored, running nothing ok: dnf-offline-arm is refused over a release upgrade that is downloaded but not armed ok: dnf-offline-arm is allowed over an ordinary offline update ok: ...and builds its usual command ok: dnf-offline-arm is allowed when nothing is stored ok: ...and builds its usual command ok: dnf-offline-arm is refused when the stored state is not a transaction-state file ok: ...and says it could not read it ok: dnf-offline-arm is refused when a release version has an unexpected shape ok: dnf-offline-clean is refused over a stored release upgrade ok: ...and says what is stored, running nothing ok: dnf-offline-clean is refused over a release upgrade that is downloaded but not armed ok: dnf-offline-clean is allowed over an ordinary offline update ok: ...and builds its usual command ok: dnf-offline-clean is allowed when nothing is stored ok: ...and builds its usual command ok: dnf-offline-clean is refused when the stored state is not a transaction-state file ok: ...and says it could not read it ok: dnf-offline-clean is refused when a release version has an unexpected shape ok: an unreadable transaction-state file is refused, not taken as absent ok: ...with the cannot-be-read line ok: a bad argument is exit 2 even over a stored release upgrade ok: dnf-upgrade is not refused over a stored release upgrade ok: ...and builds its usual command ok: docs/security.md does not call the unguarded live upgrade harmless ok: docs/security.md names the live upgrade as outside the stored-transaction guard ok: dnf-offline-clean is refused behind foreign-link at /system-update ok: ...and says why, running nothing ok: dnf-offline-clean is refused behind dangling-link at /system-update ok: ...and says why, running nothing ok: dnf-offline-clean is refused behind regular-file at /system-update ok: ...and says why, running nothing ok: dnf-offline-arm goes ahead when /system-update is absent ok: ...and builds its usual command ok: dnf-offline-arm goes ahead when /system-update is relative-link ok: ...and builds its usual command ok: dnf-offline-arm goes ahead when /system-update is slash-link ok: ...and builds its usual command ok: dnf-offline-arm goes ahead when /system-update is equivalent-link ok: ...and builds its usual command ok: dnf-offline-clean goes ahead when /system-update is absent ok: ...and builds its usual command ok: dnf-offline-clean goes ahead when /system-update is relative-link ok: ...and builds its usual command ok: dnf-offline-clean goes ahead when /system-update is slash-link ok: ...and builds its usual command ok: dnf-offline-clean goes ahead when /system-update is equivalent-link ok: ...and builds its usual command ok: the arm goes ahead behind foreign-link, since dnf5 leaves an existing link alone ok: ...and builds its usual command ok: the arm goes ahead behind dangling-link, since dnf5 leaves an existing link alone ok: ...and builds its usual command ok: the arm goes ahead behind regular-file, since dnf5 leaves an existing link alone ok: ...and builds its usual command ok: the stage is not refused behind another updater's link ok: the CLI names another updater's restart as the reason ok: ...also when the path is not a link at all ok: dnf-upgrade is refused when the state folder is not root's ok: ...and says which folder, and where the fix is ok: dnf-offline-stage is refused when the state folder is not root's ok: ...and says which folder, and where the fix is ok: dnf-offline-arm is refused when the state folder is not root's ok: ...and says which folder, and where the fix is ok: ...but the clean still runs when the state folder is not root's ok: ...building its usual command ok: dnf-upgrade is refused when the staged-package folder is not root's ok: ...and says which folder, and where the fix is ok: dnf-offline-stage is refused when the staged-package folder is not root's ok: ...and says which folder, and where the fix is ok: dnf-offline-arm is refused when the staged-package folder is not root's ok: ...and says which folder, and where the fix is ok: ...but the clean still runs when the staged-package folder is not root's ok: ...building its usual command ok: dnf-upgrade goes ahead when neither folder exists ok: ...and builds its usual command ok: dnf-offline-stage goes ahead when neither folder exists ok: ...and builds its usual command ok: dnf-offline-arm goes ahead when neither folder exists ok: ...and builds its usual command ok: a bad argument is exit 2 even with an unsafe folder skip: root-owned unsafe-folder cases - need a user namespace with spare ids and /usr/lib/sysimage/libdnf5 or /var/lib/dnf/offline ok: kempt-apply: its own shell has umask 022 and no core files, whatever the caller set ok: kempt-apply: the umask is its first command ok: kempt-refresh: its own shell has umask 022 and no core files, whatever the caller set ok: kempt-refresh: the umask is its first command ok: a directory and a file made under the helper are 755 and 644 after the caller's umask 000 ok: as root, the real path decides: a stored release upgrade is refused even with the seam at an ordinary update ok: ...refused by what the real path holds ok: as root, the seam cannot invent a release upgrade either ok: ...the real path is empty, so it stops only for want of systemd ok: as root, the systemd seams are ignored: no systemd here, though the seams point at a stand-in ok: as root, the link seam cannot invent another updater's restart ok: kempt-refresh: dnf5 starts only through systemd-run, and the shell before it writes nothing ok: kempt-apply: dnf5 starts only through systemd-run, and the shell before it writes nothing ok: ...it catches dnf5 run straight from the shell ok: ...it catches a second exec ok: ...it catches a write before the exec ok: ...it catches another command started as root ok: ...it catches the time limit going back to timeout ok: ...it catches a caller's argument forwarded as a unit property ok: ...it catches an ExecStartPre= smuggled in as a property ok: ...it catches a property smuggled in from a brace group ok: ...it catches a property smuggled in from a subshell ok: ...it catches systemd-run called without run ok: ...it catches eval ok: ...it catches a sourced file ok: ...it catches rpm run straight from the shell ok: ...it catches run_piped handing systemd-run this shell's own stdout again ok: ...it catches a write smuggled into run_piped ok: ...and still catches a write anywhere else ok: kempt-refresh: run_piped is the same in both helpers ok: kempt-apply: run_piped is the same in both helpers ok: kempt-apply: a terminal on stdin gets --pty, with the same properties ok: refresh check runs systemd-run ok: ...with the fixed properties, then -- and dnf5's arguments ok: refresh check on dnf5 5.4 runs systemd-run ok: ...asking for JSON ok: refresh runs systemd-run ok: ...bounded by the unit, not by timeout ok: dnf-upgrade runs systemd-run ok: ...every exclude after the --, where systemd-run cannot read it as an option ok: dnf-offline-stage runs systemd-run ok: ...dnf-offline-stage hands it exactly this ok: dnf-offline-arm runs systemd-run ok: ...dnf-offline-arm hands it exactly this ok: dnf-offline-clean runs systemd-run ok: ...dnf-offline-clean hands it exactly this ok: the helper is gone once systemd-run has finished ok: dnf5's 100 from check-update comes back through the helper ok: ...and a failed refresh's 1 ok: ...and a failed upgrade's 1 ok: ...and systemd-run's own 255 for a dnf5 killed by a signal ok: kempt-refresh: in pipe mode systemd-run's stdin is /dev/null, not the caller's ok: kempt-refresh: ...its stdout is a pipe of the helper's, not the caller's file ok: kempt-refresh: ...and so is its stderr ok: kempt-refresh: ...started as the helper's own child ok: kempt-refresh: ...and what it writes to stdout lands in the caller's stdout ok: kempt-refresh: ...and stderr in the caller's stderr, kept apart ok: kempt-refresh: ...with systemd-run's exit status ok: kempt-refresh: a long output arrives whole on both streams before the helper exits ok: kempt-apply: in pipe mode systemd-run's stdin is /dev/null, not the caller's ok: kempt-apply: ...its stdout is a pipe of the helper's, not the caller's file ok: kempt-apply: ...and so is its stderr ok: kempt-apply: ...started as the helper's own child ok: kempt-apply: ...and what it writes to stdout lands in the caller's stdout ok: kempt-apply: ...and stderr in the caller's stderr, kept apart ok: kempt-apply: ...with systemd-run's exit status ok: kempt-apply: a long output arrives whole on both streams before the helper exits ok: a TERM to the helper comes back as systemd-run's own status for it ok: ...because systemd-run got the TERM ok: ...and the helper did not wait for what still holds the pipes ok: ...and none of its three children (two cats, systemd-run) is left ok: a INT to the helper comes back as systemd-run's own status for it ok: ...because systemd-run got the INT ok: ...and the helper did not wait for what still holds the pipes ok: ...and none of its three children (two cats, systemd-run) is left ok: kempt-refresh refresh exits 4 with KEMPT_SYSTEMD_RUN at no-such-systemd-run ok: ...says why ok: ...and started nothing ok: kempt-refresh refresh exits 4 with KEMPT_SYSTEMD_RUN at not-executable ok: ...says why ok: ...and started nothing ok: kempt-refresh refresh exits 4 with KEMPT_SYSTEMD_BOOTED at no-such-dir ok: ...says why ok: ...and started nothing ok: kempt-apply dnf-upgrade exits 4 with KEMPT_SYSTEMD_RUN at no-such-systemd-run ok: ...says why ok: ...and started nothing ok: kempt-apply dnf-upgrade exits 4 with KEMPT_SYSTEMD_RUN at not-executable ok: ...says why ok: ...and started nothing ok: kempt-apply dnf-upgrade exits 4 with KEMPT_SYSTEMD_BOOTED at no-such-dir ok: ...says why ok: ...and started nothing ok: a bad argument is still exit 2 without systemd ok: ...for the refresh helper too ok: a refusal is still exit 3 without systemd skip: locale probe - en_US.UTF-8 is not installed on this box ok: absolute shebang in privileged mode (kempt-refresh) ok: exported pinned PATH (kempt-refresh) ok: absolute shebang in privileged mode (kempt-apply) ok: exported pinned PATH (kempt-apply) ok: neither helper reads BASH_ENV when executed directly ok: ...while a plain bash does read it, so that assertion can fail ok: kempt-refresh runs no flatpak command at all ok: kempt-apply runs no flatpak command at all == test_hold_conflict.sh ok: one name is just the name ok: two names join with and, no comma ok: three names: commas, then and before the last ok: four names is the cap, and still reads as a sentence ok: one past the cap becomes a count ok: six names: four named, the rest counted ok: no names renders nothing at all ok: the singular warning, verbatim ok: the plural warning, verbatim ok: the recipe offers both remedies - rebuild it, or remove it ok: the warning for when no list may be trusted, verbatim ok: the unhold mirror, verbatim ok: the stage armed and left a marker ok: ...whose names came from dnf5's own transaction ok: holding a package the stage contains says so, and says what to do about it ok: ...and the hold is recorded all the same ok: ...and the event log carries the conflict, not just the hold ok: interactive and non-interactive say exactly the same thing ok: a hold on a package the stage does not contain is silent ok: ...and its event line carries no conflict either ok: a flatpak hold over an armed stage is silent ok: an unreadable transaction record falls back to the marker's own list, which still names it ok: ...and that same list is still allowed to keep Kempt quiet about a package it does not contain ok: a check-derived list cannot deny anything, so the generic warning fires, recipe and all ok: ...and an unconfirmed conflict is not recorded as one ok: a legacy marker with no names warns generically rather than staying quiet, and still names the way out ok: a legacy marker over a readable transaction is answered by the transaction ok: a stage that was never armed raises no warning: no restart applies it ok: no marker, no promise, no warning ok: the stage recorded what it left out ok: releasing a hold the stage was built around says the stage will not install it ok: ...and the event log says which stage it means ok: ...and the hold really is gone ok: no claim about a staged update once a release upgrade has replaced it ok: no claim about a staged update whose /system-update is gone ok: ...while an ordinary stored transaction still gets the warning ok: unholding a package the stage never excluded is silent ok: ...including one that IS in the transaction: it is in there, so nothing was missed ok: bash really is pending, which is what the fallback keys on ok: a legacy marker falls back to what is pending now ok: ...and a package that is not pending at all is still silent ok: before the restart, the hold conflicts with the armed stage ok: after the harvest the same hold is silent: it applies to the next transaction, and says nothing about a past one ok: every hold and unhold above exited 0 - recording warns, it never blocks == test_holds.sh ok: no duplicate holds ok: dnf holds listed ok: flatpak holds listed ok: unhold removes ok: unhold is scoped to backend ok: unhold absent is not an error ok: removing an absent hold preserves other holds ok: hold name validated ok: rejected hold was not written ok: mark_held flags only held items ok: mark_held with no holds for that backend ok: a process can still warn after taking and releasing the writers' lock ok: ...and after the update lock, which closes its descriptor the same way ok: holding a Flatpak runtime is refused ok: the refusal says what it refused ok: ...and why, in terms of what the person would feel ok: ...and what to do instead ok: a refused hold writes nothing ok: holding a Flatpak app still works ok: ...and is written to the holds file ok: a dnf hold is never refused by the runtime gate ok: the dnf holds come out as dnf5 exclude arguments ok: ...on exactly one line, which is what makes it pasteable ok: ...and a flatpak hold never becomes a dnf5 argument ok: the plain listing still names every hold, both backends ok: no dnf holds prints an empty line rather than an error ok: ...and still exits 0, so a command substitution around it is safe ok: holds still refuses an option it does not know == test_install.sh ok: refresh helper staged ok: apply helper staged ok: policy staged ok: CLI symlinked ok: widget metadata staged ok: widget main.qml staged ok: widget logic.js staged ok: widget config page staged ok: the staged package carries the id install.sh removes by ok: the staged widget is a copy, not a symlink into the checkout ok: the app icon is staged into hicolor/scalable/apps, where a name resolves ok: ...and hicolor/scalable/apps got the kempt.svg drawing ok: ...and kempt.svg still ships inside the package too ok: the app icon is staged into hicolor/64x64/apps, where a name resolves ok: ...and hicolor/64x64/apps got the kempt-48.svg drawing ok: ...and kempt-48.svg still ships inside the package too ok: the app icon is staged into hicolor/48x48/apps, where a name resolves ok: ...and hicolor/48x48/apps got the kempt-48.svg drawing ok: ...and kempt-48.svg still ships inside the package too ok: the app icon is staged into hicolor/32x32/apps, where a name resolves ok: ...and hicolor/32x32/apps got the kempt-32.svg drawing ok: ...and kempt-32.svg still ships inside the package too ok: the app icon is staged into hicolor/22x22/apps, where a name resolves ok: ...and hicolor/22x22/apps got the kempt-22.svg drawing ok: ...and kempt-22.svg still ships inside the package too ok: the app icon is staged into hicolor/16x16/apps, where a name resolves ok: ...and hicolor/16x16/apps got the kempt-16.svg drawing ok: ...and kempt-16.svg still ships inside the package too ok: ...and what was staged is the SVG, not a stub ok: the scalable and the 48 drawing are genuinely different artwork ok: ...and so are the 48 and the 32 drawing ok: ...and so are the 32 and the 22 drawing ok: ...and so are the 22 and the 16 drawing ok: the 22 px rung is authored on the 22 px grid, not the 256 one ok: the 16 px rung is authored on the 16 px grid, not the 256 one ok: the ladder does not install a symbolic glyph under the 'kempt' name ok: staged refresh helper matches the repo ok: staged apply helper matches the repo ok: policy is world-readable ok: the CLI symlink points into the checkout ok: man page symlinked into the checkout ok: staging never touches the live HOME ok: re-staging leaves exactly one CLI entry ok: re-staging keeps the symlink pointing into the checkout ok: re-staging the widget drops a file the repo no longer has ok: ...and still stages the real ones ok: uninstall removes the staged refresh helper ok: uninstall removes the staged apply helper ok: uninstall removes the staged policy ok: uninstall removes the staged CLI symlink ok: uninstall removes the staged man page symlink ok: uninstall removes the staged widget package ok: uninstall removes the staged icon from hicolor/scalable/apps ok: uninstall removes the staged icon from hicolor/64x64/apps ok: uninstall removes the staged icon from hicolor/48x48/apps ok: uninstall removes the staged icon from hicolor/32x32/apps ok: uninstall removes the staged icon from hicolor/22x22/apps ok: uninstall removes the staged icon from hicolor/16x16/apps ok: uninstall leaves the config alone ok: uninstall leaves the holds alone ok: unknown option refused ok: --destdir without a value refused ok: a bare positional argument refused ok: run as root, the installer refuses ok: ...says why, and stages nothing ok: the root script reads its paths from $1/$2, not from interpolation ok: the three paths are trailing positional args ok: each path appears exactly once, as an argument ok: creates /usr/local/libexec with an explicit mode (a fresh Fedora box has none) ok: one pkexec prompt for the whole root install ok: the root install runs /usr/bin/bash, never a bash found on the caller's PATH ok: the root uninstall runs /usr/bin/bash too ok: real mode symlinks the CLI into ~/.local/bin ok: real mode symlink points into the checkout ok: says the checkout is load-bearing ok: a declined install exits 1, not a bare pkexec rc ok: a declined install says the helpers are missing ok: ...and that the widget was skipped along with them ok: a declined uninstall exits 1, not a bare pkexec rc ok: a declined uninstall names the half-removed state ok: ...and says how to finish ok: test mode with no directory named prints the command ok: ...and writes no autostart entry ok: ...and records no answer ok: declining with n writes nothing ok: declining with the word 'no' writes nothing either ok: and it says the notifier is still on ok: ...and how to turn it off later ok: 'no' never claims it turned anything off ok: accepting writes the override ok: ...records the answer inside the named directory ok: ...and nothing in the usual state directory ok: the override has one Hidden= line ok: ...and it hides the notifier ok: ...marked as Kempt's, so kempt discover-notifier on can remove it ok: accepting says the notifier is off ok: with the notifier already off, the installer says so ok: ...and never says it was left on ok: ...and leaves the entry alone ok: uninstall says how to turn the notifier back on while Kempt's file keeps it off ok: ...and the command turns it back on ok: ...removing the installer's file ok: with the notifier on, uninstall says nothing about it ok: uninstall names on for the file install.sh 0.1.7 wrote ok: ...and on removes that file ok: an empty answer is yes, over the person's own entry too ok: ...which is kept beside it ok: ...and put back by on ok: a non-interactive install never turns the notifier off ok: and it says so ok: nothing was turned off ok: with no notifier installed, yes writes nothing ok: ...and says it is not installed ok: a first install calls kpackagetool6 exactly once ok: ...as an Applet install of the repo's own plasmoid tree ok: and it says how to actually put the widget on the panel ok: ...and that the widget, unlike the CLI, is a copy ok: ...and how to get the icon to appear if the session missed the reload ok: ...and a FIRST install says nothing about restarting the shell ok: an already-installed widget falls back to the upgrade path ok: ...and the fallback is -u against the same tree ok: ...and an upgrade says how to reload the running session ok: ...saying plainly that this was an upgrade, not a fresh install ok: a missing kpackagetool6 never fails the install ok: and it says the widget was skipped ok: a kpackagetool6 that fails both ways never fails the install either ok: and it says what still works ok: uninstall removes the widget by the id in metadata.json ok: ...and that id is the one the package actually declares ok: removing a widget that was never installed is not a failure ok: echo mode prints the kpackagetool command ok: echo mode PRINTS the widget install without running it ok: installing the icon signals running KIconLoaders to re-scan the theme ok: ...and the default sender is dbus-send ok: the installer adds no index.theme to hicolor, which merges without one == test_log.sh ok: kempt log on a box with no events exits 0 ok: ...and says so on stdout, not stderr ok: the line opens with a local ISO-8601 timestamp ok: ...the same shape state.json's timestamps use ok: a command run from a shell is recorded as cli ok: ...and the text names the key, the new value and what it replaced ok: KEMPT_VIA=widget is recorded as widget ok: ...and the old value is the one the previous write left ok: anything that is not exactly 'widget' is cli - there is no third answer ok: the file is 0600 from the moment it exists ok: hold records the backend:name pair ok: ...as exactly one line ok: unhold records the same pair ok: ...also as exactly one line ok: an invalid hold name still exits 2 ok: ...and writes no event, because nothing was held ok: a successful check records the numbers the badge is about to show ok: ...as exactly one line ok: a successful background run exits 0 ok: ...recording exactly one run start ok: ...which names the surface it ran on ok: ...and one run done carrying the update count and the reboot verdict ok: a run that changed nothing says so, reboot verdict and all ok: a staged run records the count the check it was made from reported ok: ...and NOT run done: nothing has been applied, the reboot will do that ok: the check after the reboot harvests it, and says so once ok: ...carrying the same counts phrase the notification carries ok: a marker pointing at a snapshot that is gone is cleared, and recorded as cleared ok: a closed dialog (exit 126) says the authentication was cancelled ok: polkit refusing this session with no dialog (exit 127) never says a dialog was declined ok: ...because over SSH or from a switched-away session nobody was shown one ok: no desktop agent and no terminal to fall back on (exit 127) says nothing could ask ok: ...and so does pkexec's own no-agent line, which carries the refusal prefix but is not a refusal ok: a failure that is not about authorization passes through in its own words ok: polkit being unreachable is said in plain words ok: a run whose authentication was refused exits 1 ok: the event line says it in plain words, with the run's own exit status ok: ...while the raw pkexec text is kept, in the run log where it belongs ok: ...which is not rewritten: the log is evidence, not a summary ok: the history entry carries the same sentence ok: ...so the summary explains the failure instead of pointing at a log file ok: ...and so does the history listing ok: ...and the notification, which is the only one of these a detached run's user sees ok: a check whose authentication was refused is stale ok: ...and state.json names the backend and then says it in plain words ok: ...with the event line carrying exactly the same reason ok: a metadata refresh that worked is recorded ok: the flatpak summary fetch is its own line ok: ...and one that did not is recorded too ok: a refresh the helper stopped (exit 124) is recorded as failed ok: ...and the check still answers from the cached metadata (exit 124) ok: a refresh the helper stopped (exit 137) is recorded as failed ok: ...and the check still answers from the cached metadata (exit 137) ok: a refresh that never answers is recorded as failed ok: ...and the check gives up on it rather than waiting for it (2s) ok: ...and says it could not find out, rather than publishing an old count as current ok: a declined dnf refresh still lets flatpak fetch ok: a flatpak summary fetch that failed is recorded ok: ...and says nothing about the dnf arm's own verdict ok: with no Flatpak remote, no line claims a Flatpak download ok: ...and the plain log does not say it ok: enable-passwordless fails unprivileged ok: ...and the attempt is recorded with the exit status it ended on ok: disabling something never enabled is a clean no-op ok: ...and is recorded as rc 0 warning: 's1' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's2' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's3' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's4' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's5' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's6' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's7' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's8' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's9' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's10' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's11' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's12' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's13' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's14' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's15' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's16' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's17' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's18' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's19' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's20' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's21' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's22' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's23' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's24' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's25' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's26' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's27' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's28' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's29' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's30' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's31' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's32' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's33' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's34' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's35' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's36' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's37' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's38' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's39' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's40' is not a value surface accepts. Accepted: terminal, widget, background, offline ok: kempt log shows the last 30 by default ok: -n takes a count ok: ...counting back from the newest, which is printed last ok: asking for more than exist shows all of them ok: --raw prints the line as events.log stores it ok: ...every line verbatim ok: every line of the sample is shown ok: every family in the sample is shown in plain words ok: ...with none of the file's code words ok: every kind of event the code writes is in the sample ok: a security notice reads as one ok: a stage without its baseline says what that costs ok: a superseded stage says why ok: showing the log leaves events.log as it was ok: a check reads as what the badge shows ok: ...one update is singular, and no held is left out ok: a restart install reads as one ok: a run in the widget says so ok: a setting change names widget, not the stored word ok: a removal gives its size in a unit ok: a last line without a newline is shown ok: no control character reaches the terminal from kempt log, --raw or doctor ok: ...and the rest of the line is still shown ok: a line that is not an event is shown as it is warning: 's1' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's2' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's3' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's4' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's5' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's6' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's7' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's8' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's9' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's10' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's11' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's12' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's13' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's14' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's15' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's16' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's17' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's18' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's19' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's20' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's21' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's22' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's23' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's24' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's25' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's26' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's27' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's28' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's29' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's30' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's31' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's32' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's33' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's34' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's35' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's36' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's37' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's38' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's39' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 's40' is not a value surface accepts. Accepted: terminal, widget, background, offline ok: a zero count is a usage error ok: so is a non-numeric one ok: so is -n with nothing after it ok: and so is an unknown option ok: an empty file reads the same as no file ok: past 2500 lines the file is rewritten to the last 2000 ok: ...keeping the NEWEST 2000, oldest first ok: ...with the event that tripped it still at the end ok: ...and the rewrite keeps the file 0600 ok: below the threshold the file is left exactly as it is ok: a config write still succeeds when the event log cannot be written ok: ...silently: no warning, no stderr noise ok: ...and nothing was created in a directory that refused it ok: ...while the write it was logging landed ok: doctor has a Recent events section ok: ...which says none when there are none warning: 'd1' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 'd2' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 'd3' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 'd4' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 'd5' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 'd6' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 'd7' is not a value surface accepts. Accepted: terminal, widget, background, offline warning: 'd8' is not a value surface accepts. Accepted: terminal, widget, background, offline ok: ...and the last five when there are more ok: ...ending on the newest one ok: ...and the section cannot be mistaken for a report line == test_offline_identity.sh ok: the stage wrote a marker ok: the marker records the rpmdb cookie dnf5 wrote for the transaction ok: ...and the command that built it, verbatim ok: a toml whose identity does not read cleanly still gets a marker ok: ...with no cookie and no command in it, absent rather than guessed ok: ...and everything else recorded as usual ok: the transaction Kempt staged, still stored, is not called replaced ok: ...and nothing is announced ok: a stage replaced outside Kempt is announced ok: ...with the same remedy a stage that can no longer install gets ok: ...and the event names what differs: the command and the packages, not the cookie ok: ...and the marker records it ok: ...and is still the marker of the stage Kempt made ok: ...said once, not once per check ok: ...in the event log too ok: a stage replaced by a release upgrade is announced ok: ...with the release-upgrade remedy ok: ...and no clean that would delete the upgrade ok: a different rpmdb cookie alone is a replaced stage ok: while a stage holds the stage lock, a disagreement is not called replaced ok: ...and a rebuild is never announced as somebody else's ok: ...and once the lock is free, the same check announces it ok: a marker without an identity is never called replaced ok: ...and nothing is announced about it ok: a marker without an identity is harvested as it always was ok: ...with the whole snapshot diff as the report ok: ...and no transaction named ok: ...and dnf5's history is never asked ok: ...and no duration, because nothing measured one ok: ...so the summary prints no time rather than 0s ok: the transaction the marker records ran: harvested as the stage ok: ...naming dnf5's history entry for it ok: ...and the report is that entry's packages: patch, which something else installed across the same restart, is not in it ok: ...with the versions the snapshots saw ok: ...and announced as applied ok: ...and the marker is consumed ok: ...and so is its snapshot copy ok: ...taking as long as dnf5 recorded it taking ok: ...which the summary prints ok: premise: an entry that ends before it starts is still named ok: ...and says nothing about how long it took ok: ...and neither does one with no end time ok: an entry that names no packages is still the transaction that ran ok: ...and is still named ok: ...while the report stays the whole snapshot diff: a run of 3 packages is never reported as 0 ok: a restart that ran another transaction is not recorded as the stage ok: ...names no transaction as Kempt's ok: ...and keeps the whole snapshot diff as the report ok: ...and says the staged update did not run ok: ...never that it was applied ok: ...and gives it no duration ok: ...and the event carries the counts of what did change ok: ...and the marker is consumed: its transaction is gone either way ok: no history entry began at the recorded cookie: the stage did not run ok: a marker found replaced before the restart is never harvested as Kempt's ok: dnf5's history does not answer: the harvest is exactly the one without an identity ok: the history list is not JSON: the harvest is exactly the one without an identity ok: the history list is JSON of another shape: the harvest is exactly the one without an identity ok: the history list carries no command lines: the harvest is exactly the one without an identity ok: the history entry is truncated: the harvest is exactly the one without an identity ok: the history entry records its starting rpmdb in another format: the harvest is exactly the one without an identity ok: the history answers an id with another entry: the harvest is exactly the one without an identity ok: the history has no entry for an id its own list named: the harvest is exactly the one without an identity ok: another command began at the cookie and the marker recorded no package set: the harvest is exactly the one without an identity ok: another command began at the cookie with exactly the packages the marker recorded: the harvest is exactly the one without an identity ok: two history entries match the stage: the harvest is exactly the one without an identity ok: the history has no entry since the stage: the harvest is exactly the one without an identity ok: ...and no entry was asked for ok: more than 20 entries since the stage: the harvest is exactly the one without an identity ok: ...and none of them was asked for ok: a staged_at that is not a time: the harvest is exactly the one without an identity ok: a strict shell survives a history it cannot read ok: ...and reads the real one in the same shell ok: premise: the root helper runs the command dnf5 records ok: premise: ...with the held packages excluded in that order ok: premise: the run upgraded live ok: a live run records the dnf5 transaction that was its own ok: ...and that transaction's packages are the report: patch, installed by something else while the run was going, is not in it ok: ...with the versions the snapshots saw ok: ...found by two reads of the list, one on each side of the apply ok: ...and one entry opened: the only one whose command is the command Kempt ran ok: dnf5 recorded nothing for the run: no transaction is named ok: dnf5 recorded nothing for the run: ...and the whole snapshot diff is the report ok: dnf5's history does not answer: no transaction is named ok: dnf5's history does not answer: ...and the whole snapshot diff is the report ok: ...and the update itself ran regardless ok: an entry that ran the same command was already there before the run: no transaction is named ok: an entry that ran the same command was already there before the run: ...and the whole snapshot diff is the report ok: two entries ran the command Kempt ran: no transaction is named ok: two entries ran the command Kempt ran: ...and the whole snapshot diff is the report ok: a live entry that names no packages is still the run's transaction ok: ...and the report stays the whole snapshot diff ok: the history has no entry for an id its own list named: no transaction is named ok: the history has no entry for an id its own list named: ...and the whole snapshot diff is the report ok: an entry with no command line is another command to the live reader ok: ...and to the restart's reader == test_offline_marker.sh ok: the offline stage wrote a marker ok: the marker a stage writes is 0600 - it is a per-box list of what is pending, like state.json and events.log ok: ...and the write left no temp behind ok: the writer replaces the marker whole ok: ...and lands 0600 over a marker that was not ok: the slow writer really got going ok: a marker being rewritten is never observable half-written ok: a writer killed mid-write leaves the marker it found, never a truncated one ok: an empty marker is left alone, not deleted ok: ...and nothing is recorded about clearing it ok: ...and nothing is published about it ok: ...and the check answers exactly as it does with no marker ok: an unparsable marker is left alone, not deleted ok: ...and nothing is recorded about clearing it ok: ...and nothing is published about it ok: ...and the check answers exactly as it does with no marker ok: the oversized fixture really is valid JSON ok: a marker over 1 MB is left alone, not deleted ok: ...and nothing is recorded about clearing it ok: ...and a marker too big to trust publishes no pending install ok: ...and the check answers exactly as it does with no marker ok: a readable marker is published as it always was ok: ...and a readable marker whose transaction is gone is still cleared ok: ...and the clearing is still recorded ok: the version fixture starts from a real stage ok: a stage stamps the marker with its version ok: ...as an integer, not a string ok: ...beside everything the marker already recorded ok: a marker with no version is published exactly as before ok: ...and is not stamped with a version it cannot vouch for ok: the staged transaction reaches the state file without a check ok: ...described as armed, which it is ok: ...and nothing else in the state is touched ok: ...including the counts it did not re-read ok: ...landing 0600 like every other state write ok: with no stage left, the promise of one is taken back out of the state ok: ...without disturbing the rest of it ok: no state file means nothing to publish into, not a state file to invent ok: a two-document state file comes back as one document ok: ...the first, which is the one every other reader answers from ok: ...carrying the stage that was published ok: a state file that is not JSON is left untouched ok: ...and so is one whose document is not an object ok: a read that failed leaves the staged transaction exactly where it was ok: ...every field of it, not a rewritten shell of one ok: ...and the rest of the state with it ok: ...while an answer of NO stage, which is rc 0 and silence, still takes the promise back out ok: ...leaving the rest of the state alone as before ok: a check holding the lock does not delay the staged fact, which is the whole point of publishing it ok: premise: an armed stage of Kempt's is published ok: a stage replaced outside Kempt is not published as Kempt's ok: every run in history recorded dnf as ok or failed == test_offline_txjson.sh ok: the staged set is the names dnf5 recorded, sorted ok: a package excluded at stage time is absent from the transaction, so it is absent here ok: a hyphenated package name survives whole ok: the four actions that put a package on the disk are the staged set ok: ...and the outgoing side of the transaction is not in it ok: an epoch and a multi-hyphen name both read back as the name alone ok: multilib twins are one name, listed once ok: a transaction that is not there yields no list ok: a zero-length file yields no list, not an empty transaction ok: a file that is not JSON yields no list ok: a truncated file yields no list ok: valid JSON of the wrong shape yields no list ok: no rpms key at all yields no list ok: an rpms that is not an array yields no list ok: an entry with no nevra yields no list, not the rest of them ok: a nevra that is not a string yields no list ok: an entry that is not an object yields no list ok: a version outside the 1.x line yields no list ok: a version that is not even a string yields no list ok: a record with no version stamp still reads ok: one name that fails the name gate drops the whole list ok: a nevra that is not a nevra drops the list ok: a name carrying a newline drops the list ok: the oversized fixture really is valid JSON ok: a transaction record over 8 MB yields no list ok: a transaction record that cannot be read yields no list ok: a strict shell survives a transaction record it cannot parse ok: ...and reads the real one in the same shell ok: a list of ordinary names passes the gate ok: a list with one bad name does not ok: ...and neither does one carrying an empty line ok: an empty list is vacuously valid == test_onscreen_text.sh skip: node is not installed, so the widget's copy table was NOT checked in this run ok: the .qml literals were collected ok: main.qml's own messages are collected ok: the CLI's messages were collected ok: sentences kept in KEMPT_ variables and in *_tail/*_advice endings are collected ok: no on-screen string has an em or en dash ok: no on-screen string has a " - " aside ok: no on-screen string says popup ok: no on-screen string uses the code words surface, harvest, seam, arm or backend ok: the dash check finds an em dash and an en dash ok: the aside check finds an aside ok: the popup check finds the word ok: the code-word check finds a whole code word in any case, not a longer word, and not allowed text == test_polkit.sh ok: policy XML well-formed ok: two actions defined ok: refresh action present ok: apply action present ok: refresh is no-dialog ok: apply is auth_admin_keep ok: refresh path annotated ok: apply path annotated ok: rules template has placeholder ok: rules scoped to apply action only ok: refresh not in rules ok: render refuses a template that lost the scope clause ok: refused render prints nothing ok: render is not fooled by a scope clause that survives only in a comment ok: render refuses a template with a different action id ok: wrong-action render prints nothing ok: render refuses a rule widened inside the block it is allowed to have ok: ...and says it is refusing rather than naming a 'scope check' ok: widened render prints nothing ok: render refuses a template carrying a second rule block ok: render refuses code hidden after a carriage return in a comment ok: ...and says it is refusing ok: CR-hidden render prints nothing ok: render refuses code hidden after a Unicode line separator in a comment ok: render refuses a control byte anywhere in the rule ok: render accepts a template indented with tabs ok: render accepts the shipped template ok: rendered for the real username ok: rendered rule keeps the scope clause ok: exactly one polkit.addRule ok: no placeholder survives the render ok: enable rejects a destination that is not a .rules file ok: enable rejects a relative destination ok: enable-passwordless takes no arguments ok: through pkexec, a destination in root's home is refused ok: ...and says why (/root/49-kempt.rules) ok: ...and pkexec is never asked (/root/49-kempt.rules) ok: through pkexec, a destination under /srv is refused ok: ...and says why (/srv/49-kempt.rules) ok: ...and pkexec is never asked (/srv/49-kempt.rules) ok: through pkexec, a destination in another user's home is refused ok: ...and says why (/home/other/.49-kempt.rules) ok: ...and pkexec is never asked (/home/other/.49-kempt.rules) ok: through pkexec, a destination in a user-writable directory is refused ok: ...and says why (/tmp/kempt-test.c95VpL/race/d/49-kempt.rules) ok: ...and pkexec is never asked (/tmp/kempt-test.c95VpL/race/d/49-kempt.rules) ok: through pkexec, the test setting is refused even when it names the real destination ok: ...and says why (/etc/polkit-1/rules.d/49-kempt.rules) ok: ...and pkexec is never asked (/etc/polkit-1/rules.d/49-kempt.rules) ok: enable rejects a destination that walks out of the polkit rules directory ok: ...and says why (/etc/polkit-1/rules.d/../../cron.d/x.rules) ok: ...and pkexec is never asked (/etc/polkit-1/rules.d/../../cron.d/x.rules) ok: enable rejects a .rules file elsewhere under /etc ok: ...and says why (/etc/cron.d/49-kempt.rules) ok: ...and pkexec is never asked (/etc/cron.d/49-kempt.rules) ok: enable rejects a subdirectory of the polkit rules directory ok: ...and says why (/etc/polkit-1/rules.d/sub/49-kempt.rules) ok: ...and pkexec is never asked (/etc/polkit-1/rules.d/sub/49-kempt.rules) ok: enable rejects polkit's runtime rules directory ok: ...and says why (/run/polkit-1/rules.d/49-kempt.rules) ok: ...and pkexec is never asked (/run/polkit-1/rules.d/49-kempt.rules) ok: enable rejects polkit's /usr/local rules directory ok: ...and says why (/usr/local/share/polkit-1/rules.d/49-kempt.rules) ok: ...and pkexec is never asked (/usr/local/share/polkit-1/rules.d/49-kempt.rules) ok: enable rejects overwriting the polkit rules file the distribution ships ok: ...and says why (/usr/share/polkit-1/rules.d/50-default.rules) ok: ...and pkexec is never asked (/usr/share/polkit-1/rules.d/50-default.rules) ok: enable rejects a udev rules directory, which also takes .rules files ok: ...and says why (/usr/lib/udev/rules.d/99-kempt.rules) ok: ...and pkexec is never asked (/usr/lib/udev/rules.d/99-kempt.rules) ok: through pkexec, enable installs to the fixed destination ok: ...and that destination is exactly /etc/polkit-1/rules.d/49-kempt.rules, through /usr/bin/install ok: through pkexec, disable refuses the test setting too ok: ...and pkexec is never asked ok: through pkexec, disable still works on the fixed destination ok: ...removing exactly /etc/polkit-1/rules.d/49-kempt.rules, through /usr/bin/rm ok: as root, the test setting is refused even with no pkexec wrapper ok: ...and nothing is written there ok: without pkexec, a sandbox destination reaches the unprivileged install ok: the sandbox destination is accepted ok: nothing reached /etc ok: disable-passwordless takes no arguments ok: disable is a clean no-op when nothing is installed ok: disable does not guess when the destination directory cannot be searched ok: no false 'was not enabled' when the directory cannot be searched ok: enable-passwordless succeeds through a pkexec that reads its source as root would ok: root's install(1) reads the rule from stdin, not from a file path ok: ...and what it installs is byte for byte the rule that was checked, after a same-user rewrite ok: ...and no rendered file is left in TMPDIR to rewrite ok: unprivileged enable-passwordless never claims success ok: production render reached the destination ok: rendered rule names id -un, not $USER ok: installed render keeps the scope clause == test_reclaim.sh ok: error_line_of prefers flatpak's "Failed to" line over its generic last one ok: ...else the last error: line ok: ...with CSI, OSC and C1 CSI sequences removed ok: ...cut to 200 characters without splitting one ok: the helper prints the installation, the unused refs with their end-of-life reason, and the rest as used ok: ...an end-of-life runtime carries flatpak's reason ok: ...and a supported one carries null ok: ...and each unused ref says whether it is an extension, from flatpak's metadata ok: ...a Gtk3theme is an extension though its id does not start with its runtime's ok: ...and a ref with unreadable metadata carries no extension field ok: ...and an [ExtensionOf] group with no ref key does not make a ref an extension ok: the helper opens the system installation and nothing else ok: a library that fails is a non-zero exit ok: ...with nothing on stdout for the CLI to parse ok: ...and the reason on stderr ok: no PyGObject at all is exit 3 ok: a system installation with no repository yet lists nothing, and is not a failure ok: the helper takes no arguments ok: the helper names its interpreter absolutely, without the user's site-packages ok: ...so nothing in the user's site-packages is loaded ok: ...and is executable in the tree ok: a check publishes the reclaim block, mode ask by default ok: ...listing every unused ref ok: ...each with its commit, since and end-of-life reason ok: ...the reason carried as flatpak gave it ok: refs seen unused for the first time are not offered: no bytes, no digest ok: ...and with no offer there is no size to estimate ok: ...and since is UTC in a form jq and JavaScript both read back ok: the block is in state.json, not only on stdout ok: a second check keeps the first sighting ok: 58 minutes unused is not yet offerable ok: past an hour every ref is offerable, and the bytes are du's per-directory figures summed ok: ...under a 16-character digest ok: ...which is the digest of the offerable refs and commits ok: du is given the used deploy directories before the unused ones ok: ...all eleven of them, in one call ok: the size estimate is cached while the installed set is unchanged ok: a ref whose commit changed is a new sighting ok: ...and until it has aged nothing is offered, while every ref is still listed ok: ...and no size estimate while there is no offer ok: the same set back, aged again, is the same digest ok: a since in the future or unreadable is a new sighting ok: real du: a file an unused ref shares with a used ref is not counted as freed ok: real du: a file two unused refs share is counted once, for the first ok: a du that fails is an unknown size, never a smaller one ok: ...and the set is still offered ok: ...and the check itself is ok ok: a du that works again restores the figure ok: a listing that fails is status failed with nothing offered ok: ...and never a failed check ok: a listing that is not JSON is the same failure ok: a deploy directory that is not an absolute path rejects the whole listing before du sees it ok: ...and so does a commit that is not one ok: include_flatpak=false: no reclaim block ok: reclaim=off: no reclaim block ok: no flatpak installed: no reclaim block ok: under sudo: no reclaim block ok: under pkexec: no reclaim block ok: ...and in none of those was anything listed ok: reclaim=automatic on a one-person machine publishes automatic ok: ...with a second human account it publishes ask, because flatpak cannot see their apps ok: ...an account lookup that fails reads the same way ok: ...and on an image-based system, where Kempt runs no updates to remove after, it publishes ask ok: a systemd-homed account (UID above 60000) is a second person ok: ...and so is an account with an empty shell, which means /bin/sh ok: ...but never nobody, whatever its shell ok: ...nor an account that cannot log in ok: sss in nsswitch.conf with no sssd config publishes automatic, as an upgraded machine keeps the line ok: ...and so does an sssd config with no domain ok: an sssd domain publishes ask, since getent lists none of its accounts ok: ...and so does an sssd config it cannot read ok: an sssd dir it cannot read defers to systemd: sssd found no config when it last tried, automatic ok: ...sssd running publishes ask ok: ...sssd never tried is not proof of no config, so ask ok: ...and a systemctl that fails publishes ask ok: winbind in nsswitch.conf with no smb.conf publishes automatic ok: ...and so does a Samba that joins no domain, a commented-out line included ok: a Samba joined to a domain publishes ask ok: ...and so does an smb.conf it cannot read ok: ldap in nsswitch.conf publishes ask from the line alone ok: ...while local sources, and a commented-out sss, publish automatic ok: one home with Flatpak data, reached through two paths, is one person ok: two homes with Flatpak data publish ask ok: an unknown value publishes ask ok: a runtime in the snapshot is present ok: ...one that is not there is missing ok: a runtime's Locale extension, hidden from the snapshot, is present when its runtime is ok: an app's Locale extension is present when the app is ok: ...but a runtime that is not an extension never matches an app row ok: ...nor does another app's extension ok: an extension whose app is gone is present when a check saw it unused before the run began ok: ...and missing when it was first seen after ok: ...a rule for extensions only: a runtime the snapshot does not have stays missing ok: an empty snapshot proves nothing: every ref reads as missing ok: a check lists 1000 unused refs ok: ...and, once they have aged, sizes and offers all of them ok: ...and serves the size from its cache ok: kempt reclaim --list shows all 1000 ok: setup: the size cache holds all five ok: a size cache damaged by .sizes[.sizes | keys[0]] = "lots" is measured again, not served as unknown ok: a size cache damaged by del(.sizes[.sizes | keys[0]]) is measured again, not served as unknown ok: a size cache damaged by .sizes = [] is measured again, not served as unknown ok: the listing is given 15 seconds ok: ...and du 30 ok: an account lookup that runs out of time publishes ask ok: ...and it is given 5 seconds ok: a du that runs out of time is an unknown size ok: first use, with no check on record: refused, exit 6 ok: ...saying they were first seen now ok: ...and when to try again ok: ...with each ref marked the same way ok: ...and a check has recorded when each was first seen ok: ...and let go of the update lock ok: ...and of the check lock ok: an hour later the same list is on record ok: ...and no longer called new ok: ...nor too young to remove ok: reclaim --list on first use exits 0 ok: ...and says when they can go ok: with an update running, --list still lists and runs no check ok: reclaim --list exits 0 ok: ...under a plain heading ok: ...one ref per line ok: ...an end-of-life one marked, in the widget's words ok: ...and the estimate, said as one ok: ...and removes nothing ok: no -y and no terminal to ask on: refused, exit 5 ok: ...saying how to remove without being asked ok: ...and nothing removed ok: --expect takes a digest and nothing else ok: an unknown option is a usage error ok: a digest that is not the set on offer: exit 6 ok: ...in the widget's words ok: ...and nothing removed ok: ...recorded as the last outcome ok: ...and in the event log ok: an offer whose runtimes are all in use again: exit 6, nothing removed ok: ...in the widget's words ok: ...recorded as the last outcome ok: ...and in the event log ok: ...and the offer is gone from state.json ok: the same, with no offer named: nothing to remove, exit 0 ok: ...said as such ok: ...--list with the offer named: lists, exit 0, records nothing ok: ...reclaim=off: exit 5 ok: ...an update running: exit 3, as busy ok: an offer whose runtimes all became used during the removal's own look: exit 6, changed ok: ...never that nothing unused was found ok: a pkcheck time limit that is not a number is 10 s, not a refusal ok: ...and one past the widget's wait is 10 s too ok: one ref more than was shown: exit 6 ok: ...and nothing removed ok: a ref unused for less than an hour blocks the removal: exit 6 ok: ...saying why ok: ...and nothing removed ok: ...refused before the question, not after it ok: ...so nobody is asked to agree to a removal that cannot happen ok: polkit would ask for a password: exit 5 ok: ...in the widget's words ok: ...and nothing removed ok: the permission asked is flatpak's own removal action, for this process ok: ...never allowed to raise a dialog ok: the closing check publishes needs_auth ok: ...with the outcome as last ok: a pkcheck that hangs: needs an administrator, nothing removed ok: the set on offer, allowed: removed, exit 0 ok: flatpak is given the refs on offer by name ok: flatpak's own output is shown ok: ...then what was freed ok: the outcome names the refs that went, their size and the set agreed to ok: ...and the event log says it ok: the closing check publishes that nothing is left to offer ok: a removal writes no history entry: the last run is still the last update ok: ...and leaves the update lock free ok: nothing unused: exit 0 ok: ...in plain words ok: --allow-auth is not an option: a usage error, nothing removed ok: a partial removal counts only the refs gone, at their own sizes ok: one runtime removed with no size known is said in the singular ok: a removal flatpak fails: exit 1 ok: ...said plainly, with flatpak's reason ok: the closing check publishes failed, for this set only ok: a removal flatpak refuses: exit 1 ok: ...saying what flatpak said ok: ...kept as the last outcome's error, cleaned ok: ...next to the fields the widget reads, unchanged ok: ...and in the event log, with the exit code ok: ...and in state.json after the closing check ok: flatpak's "not allowed for user" is needs_auth: exit 5 ok: ...in the widget's words ok: with no error line, the last non-empty one, cut to 200 characters ok: ...and the event stays one printable line ok: the removal is given 600 seconds, less the minute its extensions get ok: ...and one that runs out of time is a failure: exit 1 ok: ...logged with its exit code ok: ...and with nothing said, the exit code on screen and the log that keeps it ok: ...where there is no error line to keep ok: a runtime that became used while polkit answered is not removed ok: an extra ref that went is named among the refs gone ok: ...and adds nothing to the space freed, which counts only the refs on offer ok: a removal never forces out a runtime an app uses ok: ...and the extensions, still unused, go in the second pass ok: ...so the runtime that became used in the gap is not among the refs gone ok: a removal flatpak stopped part-way: exit 1 ok: ...saying what it freed ok: ...and flatpak's error ok: ...recorded as removed and partial, with the bytes of the refs that went ok: ...and in the event log ok: a failed removal whose outcome cannot be read: exit 1 ok: ...saying it may be partial ok: ...and never that nothing was removed ok: ...recorded with refs null and partial, so no reader counts it as nothing ok: ...and the event log says so ok: the removal keeps flatpak's output in Kempt's state dir, not in TMPDIR ok: ...and removes it afterwards ok: premise: kempt was killed while the file existed ok: ...and its EXIT trap removed the file ok: ...and still released the update lock ok: a copy left by a kempt killed outright is swept after an hour ok: premise: the synthetic gone set is past the 128 KiB argument limit ok: a removal of 1000 refs records all of them and their size ok: the removal names the refs on offer and passes --no-related, so it takes those refs and no related ref besides ok: an extension is what the helper's metadata says, even a theme whose id does not start with its runtime's ok: ...and without the field, a ref whose id extends another installed id: a runtime's Locale and GL, an app's Locale, an unused runtime's Locale ok: ...by a dot, not by any longer name ok: the runtimes are removed first, then their extensions, in two calls ok: ...and the outcome counts both ok: ...as one whole removal ok: flatpak runs with its messages in English, in UTF-8 ok: the runtimes get 540 s and the extensions what is left of 600 ok: the runtimes running out of time stops the removal: no second pass ok: an app that starts using a runtime and its extensions: only the runtimes are tried ok: ...so nothing went: flatpak stopped at the refusal, and the extensions stay ok: ...with flatpak's refusal as the reason ok: a refused runtime: the extensions still unused go after it ok: ...partial, with the first pass's error kept ok: ...and no second pass skipped ok: premise: the refused runtime is named first ok: ...and the runtime named after it, which flatpak takes first, is counted as gone ok: a list that fails between the passes: no second pass ok: ...the runtimes that went counted, the removal partial, the second pass recorded as skipped ok: ...said as extensions left in place, not as a refusal ok: ...never as Flatpak refusing ok: ...and when no list can be read after it either, flatpak's word for the first pass ok: a refused first pass and a failed list between the passes (refuse-blind): no skipped flag ok: ...and no sentence about extensions left in place (refuse-blind) ok: ...but flatpak's refusal (refuse-blind) ok: a refused first pass and a failed list between the passes (quiet-blind): no skipped flag ok: ...and no sentence about extensions left in place (quiet-blind) ok: ...but flatpak's refusal (quiet-blind) ok: an extension flatpak says an app uses, and removed, is recorded as in use ok: ...and said ok: ...and logged ok: ...two in the plural ok: an extension whose named apps were all installed before the pass is not recorded as in use ok: ...nor said ok: ...but one new app among them makes it in use, also on a wrapped line ok: an Info line in the first pass counts an app installed during it as new ok: premise: with the listing read, an app already there is no race ok: a listing jq cannot read keeps every extension an Info line names as in use ok: ...and so does no listing at all ok: a Gtk3theme leftover goes in the second pass, with the extensions ok: a set of extensions only is one call ok: a set with no extension is one call ok: under sudo: refused, exit 5 ok: ...saying why ok: under pkexec: the same ok: reclaim=off: removal refused, exit 5 ok: ...while --list still shows what could go ok: include_flatpak=false: refused ok: an update holding the lock: exit 3, without waiting ok: and none of those removed anything ok: a listing that fails: exit 1, nothing removed == test_release_upgrade_states.sh skip: node is not installed, so the widget's release-upgrade sentences were NOT checked in this run ok: dnf5 says "ready" -> armed ok: ...and the state file publishes the same word, so the widget agrees ok: ...and staging over it is refused in pre-flight, changing nothing ok: ...with dnf5 never asked to stage ok: dnf5 says "ready" with no boot marker -> stranded ok: ...and the state file publishes the same word, so the widget agrees ok: ...and staging over it is refused in pre-flight, changing nothing ok: ...with dnf5 never asked to stage ok: dnf5 says "download-complete" with no boot marker -> downloaded ok: ...and the state file publishes the same word, so the widget agrees ok: ...and staging over it is refused in pre-flight, changing nothing ok: ...with dnf5 never asked to stage ok: dnf5 says "download-incomplete" with no boot marker -> incomplete ok: ...and the state file publishes the same word, so the widget agrees ok: ...and staging over it is refused in pre-flight, changing nothing ok: ...with dnf5 never asked to stage ok: dnf5 says "transaction-incomplete" with no boot marker -> incomplete ok: ...and the state file publishes the same word, so the widget agrees ok: ...and staging over it is refused in pre-flight, changing nothing ok: ...with dnf5 never asked to stage ok: dnf5 says "some-future-word" with no boot marker -> incomplete ok: ...and the state file publishes the same word, so the widget agrees ok: ...and staging over it is refused in pre-flight, changing nothing ok: ...with dnf5 never asked to stage ok: an ordinary staged transaction is not a release upgrade, and nothing here fires ok: ...and staging over it still works, which is what holds depend on == test_run.sh ok: terminal plan ok: background plan ok: popup plan ok: Install Now passes --risky-ok on to a detached update ok: offline plan ok: no-auto-accept forces terminal ok: ...and a terminal run gets no --risky-ok, so it still asks ok: run: mistyped dry-run flag rejected ok: run: extra arguments rejected ok: --dry-run still does what it always did ok: ...and exactly what the new spelling does ok: the usage text offers the new spelling ok: ...and does not offer the old one ok: ...and neither does the man page warning: 'bogus' is not a value surface accepts. Accepted: terminal, widget, background, offline ok: unknown surface falls back to terminal ok: unknown surface warns on stderr ok: a hand-written surface=widget runs in the widget, with no warning ok: --surface=widget is accepted as the widget ok: an unknown --surface value names widget among the choices ok: --surface=offline stages detached on a box configured for the terminal ok: ...with the flags in either order ok: --surface=terminal on a box configured to stage opens a terminal that updates live ok: ...a surface is read the way the setting is, trimmed and case-folded ok: ...auto_accept=false stages in a terminal, the one surface that can ask, and never updates live ok: ...and sends any other named surface to a live terminal ok: run: an unknown --surface is refused (exit 2) ok: ...naming the surfaces there are ok: run: an empty --surface is refused ok: run: --surface given twice is refused ok: missing terminal emulator is a loud failure ok: the error names the emulator, the command and the control that change it ok: the terminal was launched ok: the launched script re-checks ok: the check is on an EXIT trap ok: HUP, INT and TERM are trapped too ok: the aborted window closed ok: it really was the risky prompt's abort ok: an aborted run leaves the window with the update's 0 ok: an abort still rewrites state.json, so the widget's updating state ends ok: and the check it ran is in the events log ok: the window is waiting at the risky question ok: the check after a closed window is in the events log too ok: a closed window still rewrites state.json ok: a check that takes time still lands after the window is killed ok: ...and state.json is rewritten, which is what ends the popup's updating state ok: the locked-out window closed ok: the wrapper exits with the update's status, not the check's ok: a failed run rewrites state.json too ok: and logs its check ok: a terminal that fails to open is a run that did not start (exit 5) ok: ...reported as soon as the emulator exits, not after the whole wait ok: ...and the message names the emulator ok: ...and the event log records it ok: ...and no start token is left behind ok: a window that never arrives within the wait is a run that did not start ok: the late window did open, after the report ok: ...and says the update was not started ok: ...and ran nothing: no update, no history entry, no check ok: a handed-off window that arrives in time is a run that started ok: ...and the update inside it really ran (to the risky prompt) ok: the clean window closed ok: a clean run leaves the window with 0 ok: ...and runs exactly one check, not one per layer ok: ...and leaves no closing-check mark behind ok: ...and the update says it is checking, right before it checks ok: with an update holding the lock, a terminal run is refused (exit 3) ok: ...in a sentence the widget can show as it is ok: ...and no window is opened ok: a background run is refused the same way ok: a stage asked for with --surface=offline is refused the same way ok: ...in the same sentence == test_status.sh ok: the kempt under test is this tree's bin/kempt ok: state and HOME are the sandbox's ok: no state: says so ok: no state exits 1 ok: updates waiting: count, one line per section, the dateline ok: updates waiting exits 0 ok: stale after a success: the header is the count ok: stale: the footer says the last check failed ok: stale: no problem detail under a calm header ok: stale exits 1 ok: never answered: the problem and the first line of its reason ok: never answered exits 1 ok: the detail is the error's first line only ok: never answered offline: the detail says the lists were never downloaded, and why ok: ...never dnf's raw no-cache text ok: ...and the footer does not say it twice ok: a failed fetch over counts already here: the footer says the lists could not be downloaded ok: ...and with no refresh error it says nothing of the kind ok: ...nor with refreshing turned off ok: a failure other than no cache keeps its reason, not the never-downloaded words ok: all held: up to date, with the held count ok: the held line names them ok: all held exits 0 ok: a restart owed has its line ok: the security block's count ok: one security update is singular ok: a zero count says nothing ok: state-garbage.json reads as no state ok: state-garbage.json exits 1 ok: state-empty.json reads as no state ok: state-empty.json exits 1 ok: a schema this build does not know is unreadable ok: an unreadable state exits 1 ok: staged: the staged header ok: staged: the staged line ok: staged: the restart line ok: staged: no pending sections under the staged header ok: staged: the held line stays ok: staged: no security count ok: staged: no section names ok: staged: the staged line, with held and security ok: one staged update is singular ok: a stage with no count drops the figure ok: per-user apps unchecked: the header says so ok: ...and so does the footer ok: the lists age, past 24 hours ok: runtimes: their own section ok: risky names first ok: the last run, in history's words ok: a failed run says so ok: a damaged newest entry gets no line, not an older run ok: --json prints the state ok: --json with a state exits 0 ok: --json takes the first document ok: --json with no state prints nothing ok: --json with no state exits 1 ok: an unknown option is a usage error ok: a stray argument after --json is a usage error ok: status --help prints the usage ok: status answers while the update lock is held ok: ...and says Kempt is changing the system ok: a free lock says nothing ok: the snapshot sees the state file (stale) ok: status writes nothing to the state or config directory (stale) ok: the snapshot sees the state file (x-staged) ok: status writes nothing to the state or config directory (x-staged) ok: status writes no config ok: status text: no dashes as asides, no popup skip: node is absent, so status was NOT compared with the widget's logic == test_summary.sh ok: summary with no runs exits clean ok: empty history says so in words ok: empty history says so in the same words, instead of printing nothing ok: history --json with no runs exits 0 ok: history --json with no runs prints [] ok: history --json rejects a stray argument ok: history still rejects an unknown option ok: summary --json with no runs exits clean ok: no runs recorded: --json prints nothing at all ok: dnf line ok: flatpak line ok: held surfaced ok: reboot line ok: one held package reads as one, verb and all ok: the shortfall counts holds across both backends ok: a run with no holds says nothing about them ok: an entry with no skipped_held at all renders, and claims no shortfall ok: kempt summary reads latest ok: history lists one run ok: history row shape: timestamp, surface, status, what the run changed ok: a runtime is itemized under its branch ok: ...and the other branch is its own line ok: the flatpak count covers runtimes too ok: ...and so does the one-line history row ok: the summary says what the next restart will install ok: a single staged update reads as one, verb and all ok: ...and two is back to the plural ok: ...and zero takes the plural, not the singular ok: an unknown count drops the number, not the line ok: no staged transaction, no line ok: no state file at all is not a staged transaction either ok: the staged line is added to the summary, not instead of it ok: summary --json stays the run's own entry, staged transaction and all ok: a staging run's history row says what it staged ok: ...and so does its summary, in place of 0 updated ok: ...while --json carries the entry as written ok: one staged update is singular ok: an entry from before the count existed still reads as a stage, without a number ok: ...in the summary too ok: Flatpak's live changes in the same run are still counted ok: a stage that staged nothing promises no restart ok: a failed staging run staged nothing, and says so ok: a run whose Flatpak half failed still says what its dnf half staged ok: ...and so does its summary, never 0 updated ok: a stage behind another updater's restart does not promise to install then ok: ...in the summary too ok: a staged count of 0 reads as unknown, never as 0 updates staged ok: the restart that applied it is a different row and keeps the counts ok: ...and the summary names it the same way, while the entry keeps its stored surface ok: ...which scripts still read as it was written ok: a stage another updater installed reads in the same words ok: ...and keeps its stored surface too ok: failure names the log ok: failing backend is marked ok: skipped backend is marked ok: no held line when nothing is held ok: no reboot line at all when none is owed, because false is not an answer ok: an ascending set renders newest → newest ok: installonly set renders newest → newest ok: superseded versions stay in the JSON, out of the summary ok: summary defaults to the latest run ok: summary N walks back ok: history lists every run ok: history is newest first ok: summary rejects a non-numeric N ok: history --json exits 0 with runs recorded ok: history --json prints one JSON array ok: ...with every run in it ok: ...newest first ok: ...and its first element is the entry summary --json prints ok: history --json exits 0 when an entry is pruned while it runs ok: ...and still prints one JSON array ok: summary --json exits 0 with runs recorded ok: --json serves the NEWEST run, the same one plain summary defaults to ok: --json output is the history entry itself, byte for byte ok: --json takes no N ok: ...in either order ok: plain kempt summary still renders the human text ok: ...which is text, and was never quietly turned into JSON ok: ...and summary N still walks back ok: installs and removals are counted ok: an empty backend line stays clean ok: summary N past the end still succeeds ok: clamping says so on stderr ok: clamped to the oldest run ok: a history row counts installs and removals, not just upgrades ok: no phantom '0 updated' on an install/remove-only run ok: a run that changed nothing says so ok: corrupt newest entry does not fail the command ok: summary falls back to the newest READABLE entry ok: both damaged entries are named on stderr ok: history skips damaged rows and lists the rest ok: history names the damaged entries too ok: history --json leaves the damaged entries out and keeps the rest ok: ...and names them on stderr ok: --json survives a corrupt newest entry ok: --json says nothing at all when the NEWEST entry is unreadable, rather than serving an older run ok: ...naming the entry it could not read on stderr ok: the human summary still exits 0 over the same history ok: ...and still walks back to the newest readable entry for a person ok: all-corrupt history still exits 0 ok: all-corrupt history degrades to the no-runs message ok: history over only damaged entries still exits 0 ok: ...and does not claim that no runs were recorded ok: ...while every damaged entry is still named on stderr ok: all-corrupt history still exits 0 under --json ok: ...and prints nothing, rather than inventing an empty run ok: two entries in one second (LC_ALL=C): --json still emits exactly one whole entry ok: ...stamped in the second that was asked about ok: two entries in one second (LC_ALL=en_US.UTF-8): --json still emits exactly one whole entry ok: ...stamped in the second that was asked about ok: multi-document entry: --json still exits 0 ok: multi-document entry: --json prints nothing rather than the run underneath ok: multi-document entry: --json names the damaged entry on stderr ok: multi-document entry: the human path still exits 0 too ok: multi-document entry: the human path refuses the same bytes ok: array entry: --json still exits 0 ok: array entry: --json prints nothing rather than the run underneath ok: array entry: --json names the damaged entry on stderr ok: array entry: the human path still exits 0 too ok: array entry: the human path refuses the same bytes ok: bare number entry: --json still exits 0 ok: bare number entry: --json prints nothing rather than the run underneath ok: bare number entry: --json names the damaged entry on stderr ok: bare number entry: the human path still exits 0 too ok: bare number entry: the human path refuses the same bytes ok: bare string entry: --json still exits 0 ok: bare string entry: --json prints nothing rather than the run underneath ok: bare string entry: --json names the damaged entry on stderr ok: bare string entry: the human path still exits 0 too ok: bare string entry: the human path refuses the same bytes skip: premise - en_US.UTF-8 is not installed on this box ok: summary --json picks the same entry under LC_ALL=C ok: summary --json picks the same entry under LC_ALL=C.UTF-8 bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory ok: summary --json picks the same entry under LC_ALL=en_US.UTF-8 bash: warning: setlocale: LC_ALL: cannot change locale (he_IL.UTF-8): No such file or directory ok: summary --json picks the same entry under LC_ALL=he_IL.UTF-8 bash: warning: setlocale: LC_ALL: cannot change locale (tr_TR.UTF-8): No such file or directory ok: summary --json picks the same entry under LC_ALL=tr_TR.UTF-8 bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory ok: the human summary picks the same entry too bash: warning: setlocale: LC_ALL: cannot change locale (en_US.UTF-8): No such file or directory ok: ...and so does the top of kempt history ok: the summary heading names a widget run widget ok: ...and so does its history row ok: ...which says widget ok: no arrow between two versions nobody knows ok: ...the row is its name alone, which is the part that is true ok: no arrow between two identical versions either ok: ...it is named a new build, because the commit moved and the version did not ok: an ordinary upgrade is untouched ok: a package that arrived with no readable version is named without a dangling version ok: the raw join key never reaches a reader ok: ...the id and the branch are two words, exactly as the popup draws them ok: ...and a runtime that ARRIVED is split the same way ok: ...as is one that LEFT ok: a dnf package has no fold and is untouched ok: one app on an end-of-life runtime: named, and told nothing needs doing ok: several apps are listed in one sentence ok: an unused end-of-life runtime points at kempt reclaim ok: with reclaim=off an unused end-of-life runtime points at flatpak uninstall --unused ok: ...and not at kempt reclaim ok: an end-of-life app carries the reason flatpak gave ok: an entry written before the field existed renders no notes ok: no em dashes in the notes ok: a run that removed unused runtimes says how many and about how much ok: one runtime removed is said in the singular ok: ...and one that removed nothing says nothing about it == test_surface_default.sh ok: a new install runs updates in the popup by default ok: ...and the widget's twin of that default agrees ok: a new install reads the popup default ok: ...with no surface key written ok: ...and the migration recorded as done ok: ...with nothing to offer ok: ...and a later run does not move it to the terminal ok: an existing install keeps the terminal ok: ...written into its config ok: ...beside the settings it already had ok: ...through the normal config write, which logs it ok: ...and the popup owes it the offer ok: ...which is pending ok: a history entry alone is enough to keep the terminal ok: a config file alone is enough to keep the terminal ok: an empty config file is a new install ok: a new install whose first command sets something keeps the popup ok: discover-notifier runs the migration like every other command ok: discover-notifier status writes nothing ok: the migration runs once: a key removed afterwards stays removed ok: ...and it wrote once ok: an existing install with surface=terminal keeps it ok: ...and its config file is unchanged ok: ...and nothing is offered to it ok: an existing install with surface=background keeps it ok: ...and its config file is unchanged ok: ...and nothing is offered to it ok: an existing install with surface=popup keeps it ok: ...and its config file is unchanged ok: ...and nothing is offered to it ok: an existing install with surface=offline keeps it ok: ...and its config file is unchanged ok: ...and nothing is offered to it ok: another setting leaves the offer pending ok: Keep the Terminal (config set surface terminal) answers it ok: Use the Popup (config set surface popup) answers it ok: ...and updates then run in the popup ok: a surface set by hand is not offered the popup ok: ...and the marker goes with it ok: ...so editing back to the terminal does not bring the offer back ok: a surface written while the migration waits for the lock is kept ok: ...and nothing is offered ok: the if-absent write reports a key that is already there ok: help and the version change nothing ok: ...not even the config ok: a mistyped command changes nothing either ok: an unreadable config is not written ok: ...and the migration tries again next run ok: ...where it finds the surface and keeps it == test_unstage.sh ok: unstage with nothing staged is not a failure ok: ...and says so in words ok: ...without asking root to do anything ok: the fixture starts from a real armed stage ok: unstage over an armed stage succeeds ok: ...through the helper verb that already existed ok: ...and Kempt's marker goes with the transaction ok: ...and says plainly what it did, and what that means ok: ...and the event log records it ok: a clean that left the transaction behind is a failure ok: ...and the marker is KEPT, so doctor can still describe the stage ok: ...and the message says what is still there ok: a stored release upgrade refuses the unstage before anything is changed ok: ...without asking root to do anything ok: ...and the marker is untouched ok: ...and the message names the upgrade it protected ok: ...and never advises the command that would delete it ok: ...and the refusal is in the event log ok: a refusal from the root helper is a refusal here too, not a failed run ok: ...and the marker stays, because nothing changed ok: ...and the reason is the one the boundary gives ok: ...and does not advise a clean either ok: a marker whose transaction has gone is cleared, not an error ok: ...without asking root for anything ok: ...and the marker is gone ok: ...and it says the stage was already gone, never that it discarded one ok: unstage takes no arguments == test_update.sh ok: history status ok ok: dnf updated from snapshot diff ok: held pkg recorded as skipped ok: reboot flag captured ok: hold became --exclude ok: flatpak ran ok: non-terminal surface notified ok: the pkexec recorder really was in the path ok: ...on a run whose flatpak half really ran ok: applying flatpak updates never goes through pkexec ok: ...while the dnf upgrade still does ok: update self-refreshes the state ok: the state written after the run comes from a fresh check ok: summary counts installs and removals ok: notification never claims nothing happened ok: notification counts installs ok: notification counts removals ok: flatpak hold → per-app update of the pending, non-held, installed app only ok: pending-but-not-installed app is never handed to flatpak ok: every pending app held → flatpak is not run at all, rather than run on all of them ok: ...on a run that did reach it ok: every app held but a runtime pending → the runtimes are still updated, as one command ok: ...and no app is named, because every one of them is held ok: a flatpak hold with a failed update lookup reports flatpak failed, not ok ok: ...and fails the run, as a failed dnf lookup does ok: ...saying which lookup failed ok: ...and runs flatpak on nothing it could not list ok: ...on a run that did reach it ok: unknown update option rejected ok: no-reboot-needed run completes and records false ok: auto_accept=false forces the terminal surface ok: auto_accept=false never sends -y to the helper ok: unknown surface warns ok: unknown surface falls back to terminal in update ok: offline stages the transaction ok: offline did not upgrade live ok: auto_accept=false at a terminal: --surface=offline stages ok: ...and never upgrades live ok: ...and lets dnf5 ask (no -y) ok: auto_accept=false with no terminal: nothing can answer, so no stage is attempted ok: offline marker written ok: marker owns its own pre-snapshot copy ok: copy is not the shared before-snapshot ok: offline notification says staged ok: ...and its history entry does not claim nothing was staged ok: ...and its history entry records the staged count ok: ...the same count the marker holds ok: ...and no blocked flag with no other updater ok: ...and kempt history says what was staged, not "no package changes" ok: the run stages the transaction and then arms it ok: an armed stage is not immediately thrown away again ok: the marker records that the stage was armed ok: the marker carries the same staged count the event line reports ok: a closing check that lost the lock does not claim to have checked ok: the run records the staged transaction itself, without waiting for a check ok: ...carrying the marker's count, so no surface has to guess ok: the state already holds the stage when the notification goes out ok: ...and does not stamp the state with a check that never ran ok: ...nor rewrite counts it did not re-read ok: a stage behind another updater's symlink is not promised for the restart ok: ...in any words ok: ...and the terminal says so too ok: ...and the state carries the blocked stage for the widget ok: ...not a pending one ok: ...and its history entry marks the stage as blocked ok: ...so history does not promise the restart either ok: a run that could not arm its stage fails ok: the stage it could not arm is discarded ok: a stage that was never armed leaves no marker ok: ...and the history entry says the run failed ok: ...naming the step that failed, not the first error-shaped line in the log ok: the event log carries the same reason ok: a detached user is told the staging did not take ok: a failed unwind does not change the verdict ok: a failed unwind warns ok: ...and the reason stays the arm, not the cleanup that failed after it ok: a broken after-snapshot never crashes the run ok: broken after-snapshot warns ok: a broken report does not turn a good run into a failure ok: broken after-snapshot degrades to an empty report, never phantom removals ok: marker snapshot survives later runs ok: an arm that fails behind another updater's symlink still fails the run ok: ...and the clean that would remove that symlink is never run ok: ...while Kempt's marker goes ok: ...with its snapshot copy ok: ...and the log says why the stored one stayed ok: ...and the reason says the download will not install at the restart ok: the failure notification carries the command that clears what is left ok: ...while the recorded reason still names the step that failed ok: the rebuild fixture starts from a real armed stage ok: a rebuild whose stage fails fails the run ok: ...and does NOT clean away the previous transaction dnf5 left armed ok: the marker stays: it still describes the stage that still installs ok: ...and so does its snapshot copy ok: ...and the event log says the previous stage is intact ok: ...the history entry says the run failed ok: ...and the reason says the previous stage still installs, not that it was lost ok: a rebuild whose stage fails over an unarmed stage fails the run ok: ...and cleans the stale stage, which no restart would install ok: ...and its marker goes ok: ...and the reason does not claim it still installs ok: a rebuild that fails behind another updater's symlink fails the run ok: ...and never runs the clean that would remove that symlink ok: ...while Kempt's marker goes ok: ...with its snapshot copy ok: ...and the reason says the old stage is gone and the restart installs the other update ok: ...and the log says why nothing was cleaned ok: staging with nothing to stage is not a failure ok: ...and nothing is armed, because there is nothing to arm ok: ...and nothing is cleaned up, because nothing was made ok: no marker is written for a stage that does not exist ok: ...and no staged-count line contradicts it in the same second ok: the event names the reason, so the log does not read as a fault ok: ...and the user is told their holds did it, not that Kempt failed ok: ...and the arm is not blamed for a transaction that was never built ok: ...and the history entry records a run that succeeded ok: ...and says nothing was staged because every pending update is held ok: ...and carries no staged count ok: the held-over-stage fixture starts from a real armed stage ok: an empty stage over a stored transaction is not a failure ok: ...and the old transaction is NOT armed again ok: ...it is cleaned away, so the held package does not install on the next restart ok: ...its marker goes with it ok: ...and so does the marker's snapshot copy ok: ...and the log does not call it a restage ok: ...the log says the stored one was discarded ok: ...and the user is told the earlier stage is gone ok: ...and the history entry records nothing staged, because of holds ok: an empty stage behind another updater's symlink is not a failure ok: ...and the clean that would remove that symlink is never run ok: ...nor the arm ok: ...while Kempt's marker goes ok: ...with its snapshot copy ok: ...and the log says why the stored one stayed ok: ...and the notification claims no removal ok: an empty stage whose clean fails fails the run ok: ...without arming the old transaction ok: ...and the reason says the old one still installs and how to clear it ok: a re-stage that replaced the old transaction and then failed is cleaned up ok: a rebuild that discarded the old stage leaves no marker ok: ...and no snapshot copy either ok: ...and the event log says which of the two it was ok: ...the history entry says the run failed ok: ...naming what the user lost, not the first error-shaped line in the log ok: a rebuild whose cleanup failed too keeps the marker for the doctor ok: ...and the notification carries the command that clears it ok: ...and the reason carries it too, because there is nothing left to chase in the log ok: a first stage that fails unwinds nothing - there was nothing there ok: ...and says nothing about a previous stage that never existed ok: a rebuild over a conflicting hold records the hold it was for ok: ...and the marker is the new stage's, not the one it replaced ok: ...read from the transaction that is there now ok: ...and armed, like any other stage ok: the offline surface asks what is pending before it stages ok: the marker's count comes from that check, not from the state file it found ok: ...and so does the count on the event line ok: a check that could not answer still stages ok: ...and still writes a marker ok: ...carrying the only count left, the stale one ok: ...and says on stderr that the number is not fresh ok: the staged set is recorded from dnf5's own transaction, and the marker says so ok: ...as the names that transaction installs, not the names the check happened to list ok: a package held and pending at stage time is recorded as excluded from it ok: the count stays what it was: pending, minus the held one ok: ...and the marker is still private ok: a transaction record that will not parse falls back to the check, and is labelled as such ok: ...carrying what the check said was pending and not held ok: ...and the excluded list is unaffected: it never came from the transaction ok: a stage with no names available still stages ok: ...and says it knows no names ok: ...with no staged_names key at all, so an empty list can never be read as an empty transaction ok: ...and an empty excluded list, which sends unhold to its pending fallback ok: one name that fails the gate drops the whole list to no source at all ok: ...and nothing of that list is written down ok: unreadable package set aborts pre-flight with exit 5 ok: pre-flight failure says what went wrong ok: pre-flight abort changes nothing ok: a detached user is told the run never started ok: unreadable flatpak set aborts pre-flight too ok: flatpak pre-flight failure is named ok: declining a risky update is not an error ok: recommendation explains the risk ok: recommendation names the package ok: ordinary packages stay out of the list ok: abort runs no privileged command ok: abort records no run ok: abort leaves the lock free ok: [s] switches the run to offline staging ok: [s] never upgrades live ok: staging sweeps orphaned pre-snapshots ok: the surviving copy is the one the marker points at ok: answering [s] with a release upgrade stored never reaches dnf5 ok: ...and Kempt does not record the destruction as its own restage ok: ...because the prompt does not offer a route that is refused ok: ...and answering it anyway is turned down, in words ok: ...and the run ends without staging anything ok: ...and nothing promises an install that was never staged ok: [u] proceeds with the live upgrade ok: declining with n exits 0 ok: n means no: nothing is applied ok: an unanswered risk warning defaults to abort ok: pressing Enter defaults to abort ok: two unparseable answers abort ok: the re-prompt accepts a valid second answer ok: the count is the headline (kernel-devel excluded) ok: terminal listing shows one row per family ok: a 12-package family is one row, not twelve names ok: ...and that row carries the family's own count ok: a one-package family is named outright ok: the kernel is named, not buried by alphabetical qt6 rows ok: no overflow line when every family is shown ok: one family, six packages, counted honestly ok: ...named once, in words, with its count on its own row ok: ...and it really is one row ok: nothing is hidden, so nothing claims to be ok: an unlabelled family prints bare, with nothing invented for it ok: ...while a family Kempt does ship a label for still gets one ok: notification summarises by family, capped at 4 ok: no wall of package names in a notification ok: after Install Now in the popup, no session-critical notification ok: ...and the update still runs, live ok: --risky-ok does not skip the terminal's own question ok: no lock is held while the recommendation waits for an answer ok: background surface proceeds instead of prompting ok: detached surface gets a heads-up ok: detached surface proceeds anyway ok: premise: the run is stopped by the held lock ok: a run stopped by the lock sends no session-critical heads-up ok: ...because it installed nothing ok: offline surface skips the recommendation ok: concurrent update refused ok: a killed holder's lock is gone by construction ok: a non-lock failure fails immediately ok: only package-lock errors are retried ok: a busy rpm lock exits 7 after the retries ok: ...and the event log names the same rc and reason ok: two retries logged ok: ...and the reason is Kempt's busy sentence for dnf, in short sentences ok: gives up loudly after the last attempt ok: the run that lost the lock is recorded as failed ok: ...and the reason is Kempt's own sentence, in words about what happened ok: ...not the lock-file line, which reads as a broken installation ok: ...and it says what to do, because there is something to do ok: ...and the notification says the same thing, in the same words ok: a failure that is not a lock keeps its own reason ok: ...which is dnf's line, because for this one dnf's line is the answer ok: a closing check that wrote state leaves the mark for the update window ok: a closing check whose state could not be built leaves the previous state.json in place ok: ...and does not leave the mark, because it wrote nothing ok: unapplied stage keeps its marker ok: unapplied stage records nothing ok: marker consumed ok: harvest wrote history ok: exactly one history entry harvested ok: harvested entry names the surface ok: harvest diffs against the marker's own snapshot ok: harvest removes the snapshot copy it owned ok: harvest notifies ok: harvest does not repeat ok: update printed a rendered summary ok: offline stage left a marker ok: a live rpm change discards the stage it invalidated ok: ...and the marker goes with it ok: ...along with the snapshot copy the marker owned ok: the drop is recorded - it is the only trace the stage ever left ok: the live run records ONE entry, not one plus a phantom harvest ok: the entry is the live run, not a mislabelled harvest ok: a live run behind another updater's symlink never runs the clean that would remove it ok: ...while the superseded marker goes ok: ...with its snapshot copy ok: ...and the log says why only the marker went ok: a run that changed no rpm leaves the pending stage alone ok: ...and never discards it ok: a failed live run that moved rpms discards the stage it invalidated ok: ...and the marker goes with it ok: ...along with its snapshot copy ok: a superseded stage whose clean failed keeps its marker for the doctor ok: ...marked as no longer armed ok: ...so the state the widget reads shows no staged install ok: staging over a staged release upgrade aborts in pre-flight, changing nothing ok: ...and dnf5 is never asked to stage, so there is nothing to undo ok: ...and nothing else is run either, because the run never starts ok: ...nor to clean: the transaction is somebody else's and it is left exactly where it is ok: ...and no marker is written for a stage that never happened ok: ...and the reason describes an armed upgrade as one that installs ok: ...naming the upgrade that is waiting ok: ...and how to get rid of it if that is what the person wants ok: ...and the refusal is in the event log, not only on a terminal nobody saw ok: ...while the state file is refreshed, which is what releases the widget's spinner ok: a downloaded release upgrade is protected exactly as an armed one is ok: ...nothing staged over it ok: ...and the refusal says which of the two states it is in ok: ...and how to start it, which is what the person still has to do ok: a stranded release upgrade is protected exactly as the other two are ok: ...nothing staged over it ok: ...and the refusal says a restart will not install it as things stand ok: ...and promises nothing a restart will not do ok: an unfinished release upgrade is protected too ok: ...and the refusal says it did not finish, which is what dnf5 recorded ok: ...and never calls download-incomplete downloaded ok: ...and points at the command that says what happened ok: an ordinary staged transaction is still restaged, because the two releasevers match ok: a live run never cleans a transaction Kempt did not stage ok: ...but our marker goes, because it describes one dnf5 already threw away ok: ...along with the snapshot copy it owned ok: ...and the event says which of the two happened ok: a run whose history entry cannot be written is still a successful run ok: ...because the update itself had already happened ok: ...and the notification still carries what actually changed ok: ...and the loss is recorded rather than passed over in silence ok: ...and the run reaches its own end, which it used to die before ok: ...while the state file is rewritten, which is what stops the popup spinning ok: a run whose log stops taking writes after the update still records the update in the history ok: ...with the packages that moved ok: ...and the run reaches its own end ok: ...and the closing check still rewrites the state the widget waits on ok: a run whose temp directory fills after the update is still a successful run ok: ...and reaches its own end instead of dying on a temp file ok: ...saying what it could not keep ok: a harvest whose entry cannot be written does not take the check down with it ok: ...and the check still answers, so the widget still has a state to read ok: ...and the marker is consumed, so this cannot repeat on every check for ever ok: ...with the loss recorded ok: ...and the restart is still announced, without the counts it could not compute ok: on an image-based system the run aborts in pre-flight, having changed nothing ok: ...with nothing escalated and nothing run ok: ...and the refusal names the tool that DOES update this machine ok: ...and says this is a not-yet rather than a never ok: ...on the notification too, for the surfaces where nobody reads stderr ok: staging aborts in the same place, for the same reason ok: ...having staged nothing ok: an ordinary Fedora updates exactly as before ok: a stage whose baseline copy fails is still a successful stage ok: ...and the marker is written anyway, so the box is not armed in secret ok: ...without a baseline it does not have, rather than a path to a file that is not there ok: ...still describing an armed transaction, because it is ok: ...and the log says what the restart report will not be able to say ok: ...and the person is still told the update installs on the next restart ok: ...and that the result after the restart will not be ok: ...while the widget still shows the staged transaction, which is the point of recording it ok: ...and doctor still has it to explain ok: a marker with no baseline is cleared after the restart rather than re-read forever ok: ...and the event log is the trace it leaves, as the staging notification warned ok: a stage Kempt cannot record is still a stage, and the run says so ok: ...and no marker is left behind claiming otherwise ok: ...nor an orphaned baseline that nothing will ever diff ok: ...and the event line says the stage happened and was not recorded ok: ...and the person is still told the update installs on the next restart ok: ...and that Kempt will not be able to report the result ok: the post-reboot check consumes the marker ok: the reboot result is harvested as an offline run ok: the harvest reports the staged package and nothing else ok: a same-second harvest takes its own filename ok: no existing history entry was overwritten ok: a lock-then-disk run fails ok: the dnf lock error is retried three times ok: ...and the flatpak disk error is tried exactly once ok: the disk failure is never retried as a lock error ok: flatpak lock wording retried: libflatpak, path at the end ok: flatpak lock wording retried: libostree, path in the MIDDLE ok: flatpak lock wording retried: the CLI's own parenthesised form ok: flatpak lock wording retried: the lock file could not be opened ok: an UNlock failure is not a lock to wait on, and is tried once ok: a busy Flatpak lock exits 7 after the retries ok: ...and the run is recorded as failed ok: ...with dnf still ok ok: ...and the reason is Kempt's busy sentence for Flatpak ok: ...and the notification says the same ok: ...and so does the event log, with rc=7 ok: a dnf failure followed by a busy Flatpak lock exits 1 ok: ...and the reason is still dnf's ok: dnf busy while Flatpak updated an app still exits 7 ok: ...with the Flatpak update in the history entry ok: ...and the reason no longer says nothing was installed ok: a real lock-held wording is retried: Failed to obtain rpm transaction lock. Another transaction is in progress. ok: a real lock-held wording is retried: error: can't create transaction lock on /usr/lib/sysimage/rpm/.rpm.lock (Resource temporarily unavailable) ok: a real lock-held wording is retried: Unable to lock package database! There is probably another application using it already. ok: a failure that only NAMES a lock is tried once: Problem: package kscreenlocker-6.4.5-1.fc44.x86_64 from updates requires libKScreenLocker.so.6()(64bit), but none of the providers can be installed ok: a failure that only NAMES a lock is tried once: - package xscreensaver-lock-extras-6.10-1.fc44.x86_64 from fedora requires xscreensaver-base = 1:6.10-1.fc44, but none of the providers can be installed ok: a failure that only NAMES a lock is tried once: - file /usr/libexec/kscreenlocker_greet from install of kscreenlocker-6.4.5-1.fc44.x86_64 conflicts with file from package xscreensaver-lock-extras-6.10-1.fc44.x86_64 ok: a failure that only NAMES a lock is tried once: Transaction failed: Rpm transaction failed: unpacking of archive failed on file /usr/libexec/kscreenlocker_greet ok: a failure that only NAMES a lock is tried once: Waiting for a lock on the system repository; another process is currently accessing it. Use the "--skip-file-locks" option to bypass the lock. ok: a failure that only NAMES a lock is tried once: Failed to open lock file "/usr/lib/sysimage/libdnf5/system-repo.lock": Permission denied ok: a failure that only NAMES a lock is tried once: Failed to obtain lock "/usr/lib/sysimage/libdnf5/system-repo.lock": No locks available ok: the second staging really wrote a new copy ok: double staging leaves exactly one pre-snapshot ok: and the survivor is the one the live marker points at ok: an already-applied stage is harvested, never swallowed by a rebase ok: two entries: the live run AND the harvested stage ok: the staged transaction gets its own history entry ok: the live run keeps its own entry ok: the harvested entry reports the staged package ok: the live entry reports the live package, under its own surface ok: the harvest cleans up the snapshot copy the marker owned ok: a truncated after-snapshot leaves the marker in place ok: ...and never overwrites its baseline with the truncation ok: the rebase leaves no temp files behind ok: staging records the boot session ok: a manual install before the reboot leaves the stage pending ok: ...and the marker's snapshot copy with it ok: ...and records no history entry for a transaction that has not happened ok: ...and tells the user nothing was applied ok: the reboot consumes the marker ok: the staged transaction is reported after the reboot ok: the post-reboot diff reports what actually changed since staging ok: and the user is told ok: the harvest notification counts installs, not just upgrades ok: it names the install ok: the harvested run names a log file ok: ...and the file it names is really there ok: ...which says it is Kempt's own record, not captured output ok: ...and lists what the restart actually installed ok: ...and names no dnf5 transaction when it could not identify one ok: a harvest whose log cannot be written is not a failed check ok: the harvest recorded the transaction even with no writable log dir ok: ...the transaction is still recorded ok: ...and the entry claims no log file it could not write ok: a box without a readable boot id stages an unknown session ok: an unknown boot session falls back to the snapshot comparison ok: ...and still reports the staged transaction ok: ...the fake clock really was consulted ok: a run whose clock stepped backwards records a duration of 0, never a negative one ok: an end-of-life runtime is recorded once, its Locale folded in, with the app that uses it ok: a terminal run heads the dnf output ok: ...and the flatpak output ok: the log carries both headings, dnf first ok: the summary names the app behind the notice ok: ...and says whether anything needs doing ok: an end-of-life notice does not fail the run ok: a failed app lookup records no notes and the run still succeeds ok: setup: the five runtimes are on offer ok: reclaim=ask: a run removes nothing ok: ...and its history entry has no reclaimed field ok: reclaim=automatic: the run removes the refs on offer by name, the runtimes before their extensions ok: ...recorded in the run's own history entry ok: ...and not reported as runtimes the update removed ok: the notification says what was freed ok: ...and so does the summary ok: the run log has the removal under its own heading ok: ...with flatpak's lines, then the outcome in kempt reclaim's words ok: ...and off the terminal when the output is not live ok: the closing check publishes nothing left to offer ok: a terminal update says what the removal freed, under its heading ok: ...without flatpak's own lines ok: ...which the run log still has ok: ...and a removal that failed says so there too ok: an extension removed while an app uses it is named in the run's entry ok: ...and said on the terminal ok: a runtime that became used while du ran is not removed ok: ...said for an update, where nothing was shown to agree to ok: a ref missing from the before-snapshot stops the removal ok: ...recorded as changed, and the run still ok ok: ...in the update's words ok: a ref unused for less than an hour stops the removal after an update ok: ...said for an update ok: polkit would ask: nothing removed ok: ...recorded as needs_auth, and the run still ok ok: ...said for an update ok: ...and the notification claims nothing ok: state carries needs_auth for this set ok: the next run does not try the same set again: a failure is shown once, not every run ok: a removal flatpak fails never fails the run ok: a removal flatpak stopped part-way is recorded as partial in the run's entry, and the run stays ok ok: an offer all in use again after a run is nothing to remove ok: a failed run removes nothing ok: the per-user installation is updated after the system one, with the same flags ok: ...in a run that succeeded ok: ...recording each installation's outcome ok: the per-user apps it updated are in the history, marked scope user ok: ...and the summary says they are for you only ok: the log has them under their own heading ok: a per-user update that fails still follows a system update that ran ok: ...and the run is failed, with the system installation recorded ok ok: ...said in the log ok: ...and the summary names which half failed ok: a system update that fails does not stop the per-user one ok: ...and each outcome is recorded ok: ...and the summary names the system half ok: a hold on a per-user app → per-app update of the rest of the per-user installation ok: ...recorded as skipped ok: a hold on an id installed both ways skips the per-user copy ok: ...and the system copy ok: a failed per-user lookup is named as the per-user one ok: ...and the system apps are still updated ok: an unreadable per-user installation: dnf and the system apps update, the per-user apps do not ok: ...and the run records the per-user side as failed ok: ...said in the log ok: ...and no per-user app is reported removed ok: the check after a run that skipped the per-user apps still lists them ok: ...and records that it asked both installations ok: a per-user set unreadable after the run: the per-user apps were still updated ok: ...and the run is failed on the per-user side ok: ...with that as the reason ok: ...and the summary names the per-user half ok: a failed system Flatpak update with an unreadable per-user set after it fails the run ok: ...and the reason is the earlier failure, not the per-user listing ok: ...and no per-user app is reported removed ok: a busy system installation with the per-user one fine still exits 7 ok: a busy system installation and a failed per-user update exit 1 ok: ...the reason still names the busy lock ok: ...and says something else failed ok: ...in place of telling the person to try again ok: ...and the event log says rc=1 with the same reason ok: a busy system installation and a per-user set unreadable after the run exit 1 ok: a busy dnf lock and per-user apps unreadable before the run exit 1 ok: ...the reason names the busy lock ok: ...and says something else failed ok: ...not dnf's raw lock line ok: an empty per-user repo directory changes nothing about the run ok: a run under sudo updates the system apps and leaves the per-user installation alone ok: ...and so does one under pkexec ok: with a per-user installation, reclaim removes the same system runtimes and nothing else ok: every run in history recorded dnf as ok or failed == test_version.sh ok: the VERSION file exists ok: VERSION holds a plain three-part version ok: VERSION carries no stray whitespace ok: the widget's KPlugin.Version agrees with VERSION ok: the AppStream metainfo exists ok: the metainfo's newest release version agrees with VERSION ok: the RPM spec exists ok: kempt.spec's Version agrees with VERSION ok: --version prints the version ok: the bare version subcommand agrees ok: -V agrees ok: a trailing argument is refused ok: help lists it ok: help names the -V alias for the version ok: ...and the ways to ask for this list ok: kempt check --help prints its usage and exits 0 ok: ...and what it prints is the usage of check alone ok: kempt check -h prints its usage and exits 0 ok: ...and what it prints is the usage of check alone ok: kempt summary --help prints its usage and exits 0 ok: ...and what it prints is the usage of summary alone ok: kempt summary -h prints its usage and exits 0 ok: ...and what it prints is the usage of summary alone ok: kempt history --help prints its usage and exits 0 ok: ...and what it prints is the usage of history alone ok: kempt history -h prints its usage and exits 0 ok: ...and what it prints is the usage of history alone ok: kempt log --help prints its usage and exits 0 ok: ...and what it prints is the usage of log alone ok: kempt log -h prints its usage and exits 0 ok: ...and what it prints is the usage of log alone ok: kempt doctor --help prints its usage and exits 0 ok: ...and what it prints is the usage of doctor alone ok: kempt doctor -h prints its usage and exits 0 ok: ...and what it prints is the usage of doctor alone ok: kempt config --help prints its usage and exits 0 ok: ...and what it prints is the usage of config alone ok: kempt config -h prints its usage and exits 0 ok: ...and what it prints is the usage of config alone ok: kempt hold --help prints its usage and exits 0 ok: ...and what it prints is the usage of hold alone ok: kempt hold -h prints its usage and exits 0 ok: ...and what it prints is the usage of hold alone ok: kempt unhold --help prints its usage and exits 0 ok: ...and what it prints is the usage of unhold alone ok: kempt unhold -h prints its usage and exits 0 ok: ...and what it prints is the usage of unhold alone ok: kempt holds --help prints its usage and exits 0 ok: ...and what it prints is the usage of holds alone ok: kempt holds -h prints its usage and exits 0 ok: ...and what it prints is the usage of holds alone ok: kempt unstage --help prints its usage and exits 0 ok: ...and what it prints is the usage of unstage alone ok: kempt unstage -h prints its usage and exits 0 ok: ...and what it prints is the usage of unstage alone ok: kempt reclaim --help prints its usage and exits 0 ok: ...and what it prints is the usage of reclaim alone ok: kempt reclaim -h prints its usage and exits 0 ok: ...and what it prints is the usage of reclaim alone ok: kempt discover-notifier --help prints its usage and exits 0 ok: ...and what it prints is the usage of discover-notifier alone ok: kempt discover-notifier -h prints its usage and exits 0 ok: ...and what it prints is the usage of discover-notifier alone ok: kempt enable-passwordless --help prints its usage and exits 0 ok: ...and what it prints is the usage of enable-passwordless alone ok: kempt enable-passwordless -h prints its usage and exits 0 ok: ...and what it prints is the usage of enable-passwordless alone ok: kempt disable-passwordless --help prints its usage and exits 0 ok: ...and what it prints is the usage of disable-passwordless alone ok: kempt disable-passwordless -h prints its usage and exits 0 ok: ...and what it prints is the usage of disable-passwordless alone ok: kempt help check prints what kempt check --help does ok: kempt help with a command Kempt does not have is a usage error ok: ...and so is --help after one ok: help with an extra word after the command is a usage error ok: ...naming the extra word ok: help with an empty name is a usage error ok: ...and shows the empty name as '' ok: summary's help is one synopsis, so each description belongs to it ok: enable-passwordless says whose password it asks for ok: the internal security-ack still answers --help, without running ok: ...and stays out of the full usage ok: check's help names the Flatpak apps installed for you only ok: config's help lists the surface values ok: enable-passwordless says what it does ok: ...and so does disable-passwordless ok: the usage list never says popup ok: doctor reports the version ok: a missing VERSION file reads as unknown, not as an error ok: ...and does not break the command ok: an empty VERSION file reads as unknown too ok: a CRLF VERSION file still prints a clean version ok: only the first line of VERSION is the version ok: with no stamp the Release starts at 1, as every release build expects ok: a hand build carries its stamp in the Release ok: kempt check as root exits 8 with one line ok: ...and creates no state directory ok: kempt update as root exits 8 ok: kempt config get surface as root exits 8 ok: kempt hold dnf:vim as root exits 8 ok: kempt enable-passwordless as root exits 8 ok: kempt nonsense as root exits 8 ok: kempt --version still answers as root ok: kempt version still answers as root ok: kempt help still answers as root ok: kempt -h still answers as root ok: kempt discover-notifier status still answers as root ok: KEMPT_ALLOW_ROOT=1 lifts the refusal == test_volume.sh ok: the generated pending list is past the single-argument cap on its own ok: a check with 2000 pending updates exits 0 ok: ...without handing the pending list to a command as one argument ok: ...and writes the state file the widget reads ok: ...as exactly one JSON document, which is what parses ok: ...counting every one of them ok: ...and calls the check a success, because it was ok: ...with the check in the event log, so a failure here could never be silent ok: a run that updates 2000 packages exits 0 ok: ...and writes a history entry that calls it a success ok: ...naming every package it moved ok: ...from a report far past the cap ok: ...and the person is told the run finished ok: ...and the state file no longer offers updates that have been installed ok: the check that harvests 2000 applied packages exits 0 ok: ...and consumes the marker, so the next check is an ordinary one ok: ...writing exactly one history entry for the reboot that applied them ok: ...which names the surface ok: ...and every package it found moved == test_widget_logic.sh skip: node is not installed, so logic.js was NOT verified in this run (install nodejs and re-run: these are the only tests the widget's derivation layer has) skip: PySide6 is absent, so the .qml files were NOT compile-checked in this run == test_widget_qml.sh skip: PySide6 is absent, so the widget's QML was NOT executed in this run (install python3-pyside6 and re-run: these probes are the only tests that run the real QML - the rest of the widget's coverage is logic.js under node) ALL PASS - with 10 skipped, so this run did not cover everything: test_doctor.sh: no user namespace with spare ids here, so the root-owned dnf cache and state cases did not run test_helpers.sh: root-owned unsafe-folder cases - need a user namespace with spare ids and /usr/lib/sysimage/libdnf5 or /var/lib/dnf/offline test_helpers.sh: locale probe - en_US.UTF-8 is not installed on this box test_onscreen_text.sh: node is not installed, so the widget's copy table was NOT checked in this run test_release_upgrade_states.sh: node is not installed, so the widget's release-upgrade sentences were NOT checked in this run test_status.sh: node is absent, so status was NOT compared with the widget's logic test_summary.sh: premise - en_US.UTF-8 is not installed on this box test_widget_logic.sh: node is not installed, so logic.js was NOT verified in this run test_widget_logic.sh: PySide6 is absent, so the .qml files were NOT compile-checked in this run test_widget_qml.sh: PySide6 is absent, so the widget's QML was NOT executed in this run ran 33 test file(s) + appstream-util validate-relax --nonet /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/metainfo/io.github.erez_c137.kempt.metainfo.xml /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/metainfo/io.github.erez_c137.kempt.metainfo.xml: OK + appstreamcli validate --no-net --explain /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/metainfo/io.github.erez_c137.kempt.metainfo.xml ✔ Validation was successful. + for f in /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-refresh /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-apply /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/libexec/kempt-flatpak-unused + test -x /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-refresh + for f in /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-refresh /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-apply /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/libexec/kempt-flatpak-unused + test -x /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-apply + for f in /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-refresh /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/libexec/kempt-apply /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/libexec/kempt-flatpak-unused + test -x /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/libexec/kempt-flatpak-unused + grep -q '/usr/libexec/kempt-refresh' /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/polkit-1/actions/io.github.erez_c137.kempt.policy + grep -q '/usr/libexec/kempt-apply' /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/polkit-1/actions/io.github.erez_c137.kempt.policy + grep -q KEMPT_REFRESH_HELPER_PATH:-/usr/libexec/kempt-refresh /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/lib/common.sh + grep -q KEMPT_APPLY_HELPER_PATH:-/usr/libexec/kempt-apply /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/lib/common.sh + grep -rq /usr/local/libexec /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/kempt/lib/common.sh /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/polkit-1/actions/io.github.erez_c137.kempt.policy + RPM_EC=0 ++ jobs -p + exit 0 Processing files: kempt-0.1.8-1.fc43.noarch Executing(%doc): /bin/sh -e /var/tmp/rpm-tmp.q4vUk5 + umask 022 + cd /builddir/build/BUILD/kempt-0.1.8-build + cd kempt-0.1.8 + DOCDIR=/builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/doc/kempt + export LC_ALL=C.UTF-8 + LC_ALL=C.UTF-8 + export DOCDIR + /usr/bin/mkdir -p /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/doc/kempt + cp -pr /builddir/build/BUILD/kempt-0.1.8-build/kempt-0.1.8/README.md /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/doc/kempt + cp -pr /builddir/build/BUILD/kempt-0.1.8-build/kempt-0.1.8/CHANGELOG.md /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/doc/kempt + cp -pr /builddir/build/BUILD/kempt-0.1.8-build/kempt-0.1.8/SECURITY.md /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/doc/kempt + cp -pr /builddir/build/BUILD/kempt-0.1.8-build/kempt-0.1.8/docs /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/doc/kempt + RPM_EC=0 ++ jobs -p + exit 0 Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.GXhL0j + umask 022 + cd /builddir/build/BUILD/kempt-0.1.8-build + cd kempt-0.1.8 + LICENSEDIR=/builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/licenses/kempt + export LC_ALL=C.UTF-8 + LC_ALL=C.UTF-8 + export LICENSEDIR + /usr/bin/mkdir -p /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/licenses/kempt + cp -pr /builddir/build/BUILD/kempt-0.1.8-build/kempt-0.1.8/LICENSE /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/licenses/kempt + RPM_EC=0 ++ jobs -p + exit 0 warning: absolute symlink: /usr/bin/kempt -> /usr/share/kempt/bin/kempt Provides: kempt = 0.1.8-1.fc43 Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Requires: /usr/bin/bash /usr/bin/python3 Recommends: flatpak konsole libnotify Processing files: kempt-plasmoid-0.1.8-1.fc43.noarch Executing(%license): /bin/sh -e /var/tmp/rpm-tmp.nmtMtz + umask 022 + cd /builddir/build/BUILD/kempt-0.1.8-build + cd kempt-0.1.8 + LICENSEDIR=/builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/licenses/kempt-plasmoid + export LC_ALL=C.UTF-8 + LC_ALL=C.UTF-8 + export LICENSEDIR + /usr/bin/mkdir -p /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/licenses/kempt-plasmoid + cp -pr /builddir/build/BUILD/kempt-0.1.8-build/kempt-0.1.8/LICENSE /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT/usr/share/licenses/kempt-plasmoid + RPM_EC=0 ++ jobs -p + exit 0 Provides: kempt-plasmoid = 0.1.8-1.fc43 metainfo() metainfo(io.github.erez_c137.kempt.metainfo.xml) Requires(rpmlib): rpmlib(CompressedFileNames) <= 3.0.4-1 rpmlib(FileDigests) <= 4.6.0-1 rpmlib(PayloadFilesHavePrefix) <= 4.0-1 Supplements: (kempt = 0.1.8-1.fc43 and plasma-workspace) Checking for unpackaged file(s): /usr/lib/rpm/check-files /builddir/build/BUILD/kempt-0.1.8-build/BUILDROOT Wrote: /builddir/build/RPMS/kempt-plasmoid-0.1.8-1.fc43.noarch.rpm Wrote: /builddir/build/RPMS/kempt-0.1.8-1.fc43.noarch.rpm RPM build warnings: absolute symlink: /usr/bin/kempt -> /usr/share/kempt/bin/kempt Finish: rpmbuild kempt-0.1.8-1.fc43.src.rpm Finish: build phase for kempt-0.1.8-1.fc43.src.rpm INFO: chroot_scan: 1 files copied to /var/lib/copr-rpmbuild/results/chroot_scan INFO: /var/lib/mock/fedora-43-aarch64-1792358989.688234/root/var/log/dnf5.log INFO: chroot_scan: creating tarball /var/lib/copr-rpmbuild/results/chroot_scan.tar.gz /bin/tar: Removing leading `/' from member names INFO: Done(/var/lib/copr-rpmbuild/results/kempt-0.1.8-1.fc43.src.rpm) Config(child) 7 minutes 11 seconds INFO: Results and/or logs in: /var/lib/copr-rpmbuild/results INFO: Cleaning up build root ('cleanup_on_success=True') Start: clean chroot INFO: unmounting tmpfs. Finish: clean chroot Finish: run Running RPMResults tool Package info: { "packages": [ { "name": "kempt-plasmoid", "epoch": null, "version": "0.1.8", "release": "1.fc43", "arch": "noarch" }, { "name": "kempt", "epoch": null, "version": "0.1.8", "release": "1.fc43", "arch": "noarch" }, { "name": "kempt", "epoch": null, "version": "0.1.8", "release": "1.fc43", "arch": "src" } ] } RPMResults finished