Warning: Permanently added '54.160.236.11' (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 --srpm --task-url https://copr.fedorainfracloud.org/backend/get-srpm-build-task/10591537 Version: 1.8 PID: 9532 Logging PID: 9534 Task: {'appstream': False, 'background': True, 'build_id': 10591537, 'chroot': None, 'distributions_in_build': ['centos-stream-10', 'epel-10', 'fedora-42', 'fedora-43', 'fedora-44', 'fedora-rawhide'], 'distributions_in_project': ['centos-stream-10', 'epel-10', 'fedora-42', 'fedora-43', 'fedora-44', 'fedora-rawhide'], 'package_name': 'dms', 'project_dirname': 'dms-git', 'project_name': 'dms-git', 'project_owner': 'avengemedia', 'repos': [], 'sandbox': 'avengemedia/dms-git--https://api.github.com/users/Purian23', 'source_json': {'clone_url': 'https://github.com/AvengeMedia/DankMaterialShell.git', 'committish': '5a5cc4f4e971bfa3c1d6b64bfc089e556379773c', 'spec': 'distro/fedora/dms-git.spec', 'srpm_build_method': 'rpkg', 'subdirectory': '', 'type': 'git'}, 'source_type': 8, 'submitter': 'https://api.github.com/users/Purian23', 'task_id': '10591537'} Running: git clone https://github.com/AvengeMedia/DankMaterialShell.git /var/lib/copr-rpmbuild/workspace/workdir-qbywv5_6/DankMaterialShell --depth 500 --no-single-branch --recursive cmd: ['git', 'clone', 'https://github.com/AvengeMedia/DankMaterialShell.git', '/var/lib/copr-rpmbuild/workspace/workdir-qbywv5_6/DankMaterialShell', '--depth', '500', '--no-single-branch', '--recursive'] cwd: . rc: 0 stdout: stderr: Cloning into '/var/lib/copr-rpmbuild/workspace/workdir-qbywv5_6/DankMaterialShell'... Running: git checkout 5a5cc4f4e971bfa3c1d6b64bfc089e556379773c -- cmd: ['git', 'checkout', '5a5cc4f4e971bfa3c1d6b64bfc089e556379773c', '--'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-qbywv5_6/DankMaterialShell rc: 0 stdout: stderr: Note: switching to '5a5cc4f4e971bfa3c1d6b64bfc089e556379773c'. 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 5a5cc4f4 feat(plugins): expose scan/rescan/reload IPC handlers for runtime plugin discovery (#2611) Generated rpkg config: [rpkg] preprocess_spec = True [git] anon_clone_url = https://github.com/%(repo_path)s [lookaside] download_url = https://${git_props:remote_netloc}/repo/pkgs/%(repo_path)s/%(filename)s/%(hashtype)s/%(hash)s/%(filename)s Writing config into /var/lib/copr-rpmbuild/workspace/workdir-qbywv5_6/.config/rpkg.conf Running: rpkg srpm --outdir /var/lib/copr-rpmbuild/results --spec /var/lib/copr-rpmbuild/workspace/workdir-qbywv5_6/DankMaterialShell/distro/fedora/dms-git.spec cmd: ['rpkg', 'srpm', '--outdir', '/var/lib/copr-rpmbuild/results', '--spec', '/var/lib/copr-rpmbuild/workspace/workdir-qbywv5_6/DankMaterialShell/distro/fedora/dms-git.spec'] cwd: /var/lib/copr-rpmbuild/workspace/workdir-qbywv5_6/DankMaterialShell rc: 0 stdout: Wrote: /var/lib/copr-rpmbuild/results/dms-git.spec Wrote: /var/lib/copr-rpmbuild/results/dms-0.0.git.3833.5a5cc4f4-1.src.rpm RPM build warnings: stderr: git_repo_pack: archiving /var/lib/copr-rpmbuild/workspace/workdir-qbywv5_6/DankMaterialShell: commit 5a5cc4f4e971bfa3c1d6b64bfc089e556379773c (HEAD, origin/master, origin/HEAD, master) Author: David Mireles Date: Thu Jun 11 12:44:41 2026 -0600 feat(plugins): expose scan/rescan/reload IPC handlers for runtime plugin discovery (#2611) * feat(plugins): expose IPC handlers for runtime plugin discovery Follow-up to #1659. That issue landed hot-reload for settings.json via FileView.watchChanges + a 1ms Timer to skirt the JSON parse race. It does not cover plugin discovery in runtime: adding a new plugin directory to ~/.config/DankMaterialShell/plugins/ while the shell is running is not consistently picked up by the existing FolderListModel watcher in PluginService.qml, and there is no IPC handle for forcing a rescan from outside the shell. Adds an IpcHandler on PluginService with five small functions: - scan(): wraps existing scanPlugins(), returns count snapshot - rescan(pluginId): wraps existing forceRescanPlugin(id), validates id - reload(pluginId): wraps existing reloadPlugin(id), validates id - list(): newline-joined id\tloaded\ttype\tname for every known plugin - status(pluginId): loaded\ttype\terror for one plugin Scope intentionally small: no file-watcher changes, no new daemons, no schema additions. Target string "plugins" does not collide with any existing target in DMSShellIPC.qml. Validation: - qs ipc --pid call plugins list returns one row per known plugin - qs ipc --pid call plugins scan returns SCAN_TRIGGERED with count - qs ipc --pid call plugins rescan returns RESCAN_TRIGGERED - Empty-arg paths return ERROR strings instead of throwing - git merge-tree against origin/master is clean * hardening(plugins): fix 7 review findings in scan-ipc IPC handlers Follow-up to commit 43603f56 which ported PR #2601 (AvengeMedia scan-ipc) to the fork. The original port was functionally correct but had seven review issues that would block upstream adoption. This patch addresses each one with a minimal, focused change. * B1 IPC target collision: renamed `target: "plugins"` to `target: "plugin-scan"`. The original name collided with the existing IpcHandler in DMSShellIPC.qml:1180 which already registers enable/disable/toggle/list/status under "plugins". The split keeps both APIs discoverable without one shadowing the other. * H1 Fire-and-forget scan: documented that scan() returns the pre-debounce count and that callers must poll list/status (or wait ~200ms) to observe the post-debounce state. A proper requestId + await mechanism was considered and rejected for scope reasons. * H2 TOCTOU in rescan(): the handler now reads availablePlugins[id] inside forceRescanPlugin via the id string only — no captured object reference. A parallel resyncDebounce tick can otherwise mutate the entry between the read and the use. * M1 list() cap: added a 256-entry cap and a leading header line (`# count=N returned=M`) so callers can detect truncation. A hostile / buggy plugin mass-creating entries could otherwise allocate 80 KB+ per IPC call. * M2 status() prefix: "unknown\t\t" became `ERROR: unknown pluginId '...'` to match the rest of the handlers' prefix convention. Empty trailing field means no error. * M3 id sanitization: every handler that takes pluginId now validates against `/^[a-zA-Z0-9_\-:]{1,64}$` before use. This rejects shell-injection payloads ("foo\tmalicious") and prototype pollution attempts ("__proto__", "constructor"). The list() and status() handlers also sanitize \t/\n in name and error fields so callers can rely on the TSV structure. Verification: brace count balanced (252/252). Manual read of all five handlers confirms no logic regression. QML runtime tests are not part of the DMS test suite, so end-to-end validation requires rebuilding the shell — deferred to the user. Not pushed. Stage-local-first rule. Co-Authored-By: Claude Opus 4.8 * refactor(plugins): strip inline comments per review feedback Purian23 in PR #2611 review: 'let's address the amount of line comments in the code, there's not a need for all of them to exist.' Removed 48 comment lines. The substantive justification (why the regex, why fire-and-forget, why re-read inside forceRescanPlugin, why the 256 cap, why the target rename) now lives in the PR body under 'Review-driven fixes in this iteration' and 'What changed' where the reviewer already reads it. No code logic changed. Brace count 252/252. Diff is -48/+0 on quickshell/Services/PluginService.qml. Co-Authored-By: Claude Opus 4.8 --------- git_repo_pack: Wrote: /var/lib/copr-rpmbuild/results/DankMaterialShell-5a5cc4f4.tar.gz warning: Downloading https://go.dev/dl/go1.26.1.linux-amd64.tar.gz to /var/lib/copr-rpmbuild/results/go1.26.1.linux-amd64.tar.gz warning: Downloading https://go.dev/dl/go1.26.1.linux-arm64.tar.gz to /var/lib/copr-rpmbuild/results/go1.26.1.linux-arm64.tar.gz warning: %source_date_epoch_from_changelog is set, but %changelog has no entries to take a date from Downloading https://go.dev/dl/go1.26.1.linux-amd64.tar.gz to /var/lib/copr-rpmbuild/results/go1.26.1.linux-amd64.tar.gz Downloading https://go.dev/dl/go1.26.1.linux-arm64.tar.gz to /var/lib/copr-rpmbuild/results/go1.26.1.linux-arm64.tar.gz %source_date_epoch_from_changelog is set, but %changelog has no entries to take a date from Output: ['go1.26.1.linux-arm64.tar.gz', 'DankMaterialShell-5a5cc4f4.tar.gz', 'go1.26.1.linux-amd64.tar.gz', 'dms-git.spec', 'dms-0.0.git.3833.5a5cc4f4-1.src.rpm'] Running SRPMResults tool Using distributions_in_build for this build. Extracting arch-specific tags for centos-stream-10 Extracting arch-specific tags for epel-10 Extracting arch-specific tags for fedora-42 Extracting arch-specific tags for fedora-43 Extracting arch-specific tags for fedora-44 Extracting arch-specific tags for fedora-rawhide Package info: { "architecture_specific_tags": { "centos-stream-10": {}, "epel-10": {}, "fedora-42": {}, "fedora-43": {}, "fedora-44": {}, "fedora-rawhide": {} }, "name": "dms", "epoch": 2, "version": "0.0.git.3833.5a5cc4f4", "release": "1" } SRPMResults finished