Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package openQA for openSUSE:Factory checked 
in at 2026-10-23 20:28:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/openQA (Old)
 and      /work/SRC/openSUSE:Factory/.openQA.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "openQA"

Fri Oct 23 20:28:39 2026 rev:897 rq:1387213 version:5.1792679797.1d1b53d2

Changes:
--------
--- /work/SRC/openSUSE:Factory/openQA/openQA.changes    2026-10-22 
15:54:58.719879809 +0200
+++ /work/SRC/openSUSE:Factory/.openQA.new.2252680/openQA.changes       
2026-10-23 20:29:32.078691930 +0200
@@ -1,0 +2,25 @@
+Thu Oct 22 14:39:18 UTC 2026 - [email protected]
+
+- Update to version 5.1792679797.1d1b53d2:
+  * chore(deps-dev): bump stylelint from 17.14.1 to 17.16.0 (#8011)
+  * chore(deps): Remove unused dependency SQL::SplitStatement
+  * refactor(OpenQA::Files): Remove dead code
+
+-------------------------------------------------------------------
+Thu Oct 22 05:22:00 UTC 2026 - [email protected]
+
+- Update to version 5.1792643104.8298c14a:
+  * chore(deps-dev): bump fastq from 1.20.1 to 1.20.3 (#8007)
+
+-------------------------------------------------------------------
+Thu Oct 22 02:48:29 UTC 2026 - [email protected]
+
+- Update to version 5.1792617696.d7563f0b:
+  * feat: Improve use of the tempfile-move pattern
+  * refactor: Ensure common file permissions in `OpenQA::Downloader`
+  * feat: Ensure cached assets have 0644 permissions
+  * refactor(tests): Rename test to reflect topic
+  * refactor(tests): Remove unused imports
+  * fix(etc): remove specific auto_clone_regex definition
+
+-------------------------------------------------------------------

Old:
----
  openQA-5.1792607148.117af9ef.obscpio

New:
----
  openQA-5.1792679797.1d1b53d2.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ openQA-client-test.spec ++++++
--- /var/tmp/diff_new_pack.DuUWLa/_old  2026-10-23 20:29:33.570754510 +0200
+++ /var/tmp/diff_new_pack.DuUWLa/_new  2026-10-23 20:29:33.572754594 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-client
 Name:           %{short_name}-test
-Version:        5.1792607148.117af9ef
+Version:        5.1792679797.1d1b53d2
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA-test.spec ++++++
--- /var/tmp/diff_new_pack.DuUWLa/_old  2026-10-23 20:29:33.595755558 +0200
+++ /var/tmp/diff_new_pack.DuUWLa/_new  2026-10-23 20:29:33.596755600 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA
 Name:           %{short_name}-test
-Version:        5.1792607148.117af9ef
+Version:        5.1792679797.1d1b53d2
 Release:        0
 Summary:        Test package for openQA
 License:        GPL-2.0-or-later

++++++ openQA-worker-test.spec ++++++
--- /var/tmp/diff_new_pack.DuUWLa/_old  2026-10-23 20:29:33.619756565 +0200
+++ /var/tmp/diff_new_pack.DuUWLa/_new  2026-10-23 20:29:33.620756607 +0200
@@ -18,7 +18,7 @@
 
 %define         short_name openQA-worker
 Name:           %{short_name}-test
-Version:        5.1792607148.117af9ef
+Version:        5.1792679797.1d1b53d2
 Release:        0
 Summary:        Test package for %{short_name}
 License:        GPL-2.0-or-later

++++++ openQA.spec ++++++
--- /var/tmp/diff_new_pack.DuUWLa/_old  2026-10-23 20:29:33.648757781 +0200
+++ /var/tmp/diff_new_pack.DuUWLa/_new  2026-10-23 20:29:33.650757865 +0200
@@ -104,7 +104,7 @@
 %define devel_requires %devel_no_selenium_requires chromedriver
 
 Name:           openQA
-Version:        5.1792607148.117af9ef
+Version:        5.1792679797.1d1b53d2
 Release:        0
 Summary:        Framework for automated system-level testing (web-frontend, 
scheduler and tools)
 Group:          Development/Tools/Other
@@ -127,7 +127,6 @@
 %requires_eq    perl-Mojolicious-Plugin-AssetPack
 Recommends:     %{name}-local-db
 Requires(post): coreutils
-Requires(post): perl(SQL::SplitStatement)
 Recommends:     apache2
 Recommends:     apparmor-profiles
 Recommends:     apparmor-utils
@@ -202,7 +201,7 @@
 %package worker
 Summary:        The openQA worker
 Group:          Development/Tools/Other
-%define worker_requires_including_uncovered_in_tests %worker_requires 
perl(SQL::SplitStatement)
+%define worker_requires_including_uncovered_in_tests %worker_requires
 Requires:       %{worker_requires_including_uncovered_in_tests}
 # FIXME: use proper Requires(pre/post/preun/...)
 PreReq:         openQA-common = %{version}

++++++ node_modules.obscpio ++++++
Binary files old/@csstools-css-calc-3.2.1.tgz and 
new/@csstools-css-calc-3.2.1.tgz differ
Binary files old/@csstools-css-calc-3.4.3.tgz and 
new/@csstools-css-calc-3.4.3.tgz differ
Binary files old/@csstools-css-parser-algorithms-4.0.0.tgz and 
new/@csstools-css-parser-algorithms-4.0.0.tgz differ
Binary files old/@csstools-css-parser-algorithms-4.0.2.tgz and 
new/@csstools-css-parser-algorithms-4.0.2.tgz differ
Binary files old/@csstools-css-syntax-patches-for-csstree-1.1.15.tgz and 
new/@csstools-css-syntax-patches-for-csstree-1.1.15.tgz differ
Binary files old/@csstools-css-syntax-patches-for-csstree-1.1.7.tgz and 
new/@csstools-css-syntax-patches-for-csstree-1.1.7.tgz differ
Binary files old/@csstools-css-tokenizer-4.0.0.tgz and 
new/@csstools-css-tokenizer-4.0.0.tgz differ
Binary files old/@csstools-css-tokenizer-4.0.2.tgz and 
new/@csstools-css-tokenizer-4.0.2.tgz differ
Binary files old/@csstools-selector-resolve-nested-4.0.0.tgz and 
new/@csstools-selector-resolve-nested-4.0.0.tgz differ
Binary files old/@csstools-selector-resolve-nested-4.0.2.tgz and 
new/@csstools-selector-resolve-nested-4.0.2.tgz differ
Binary files old/colord-2.10.0.tgz and new/colord-2.10.0.tgz differ
Binary files old/colord-2.9.3.tgz and new/colord-2.9.3.tgz differ
Binary files old/fastq-1.20.1.tgz and new/fastq-1.20.1.tgz differ
Binary files old/fastq-1.20.3.tgz and new/fastq-1.20.3.tgz differ
Binary files old/ignore-7.0.12.tgz and new/ignore-7.0.12.tgz differ
Binary files old/stylelint-17.14.1.tgz and new/stylelint-17.14.1.tgz differ
Binary files old/stylelint-17.16.0.tgz and new/stylelint-17.16.0.tgz differ

++++++ node_modules.spec.inc ++++++
--- /var/tmp/diff_new_pack.DuUWLa/_old  2026-10-23 20:29:34.237782486 +0200
+++ /var/tmp/diff_new_pack.DuUWLa/_new  2026-10-23 20:29:34.240782612 +0200
@@ -2,12 +2,12 @@
 Source1001:         
https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.29.7.tgz#/@babel-helper-validator-identifier-7.29.7.tgz
 Source1002:         
https://registry.npmjs.org/@cacheable/memory/-/memory-2.2.0.tgz#/@cacheable-memory-2.2.0.tgz
 Source1003:         
https://registry.npmjs.org/@cacheable/utils/-/utils-2.5.0.tgz#/@cacheable-utils-2.5.0.tgz
-Source1004:         
https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz#/@csstools-css-calc-3.2.1.tgz
-Source1005:         
https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz#/@csstools-css-parser-algorithms-4.0.0.tgz
-Source1006:         
https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz#/@csstools-css-syntax-patches-for-csstree-1.1.7.tgz
-Source1007:         
https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz#/@csstools-css-tokenizer-4.0.0.tgz
+Source1004:         
https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.3.tgz#/@csstools-css-calc-3.4.3.tgz
+Source1005:         
https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.2.tgz#/@csstools-css-parser-algorithms-4.0.2.tgz
+Source1006:         
https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.15.tgz#/@csstools-css-syntax-patches-for-csstree-1.1.15.tgz
+Source1007:         
https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.2.tgz#/@csstools-css-tokenizer-4.0.2.tgz
 Source1008:         
https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-5.0.0.tgz#/@csstools-media-query-list-parser-5.0.0.tgz
-Source1009:         
https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz#/@csstools-selector-resolve-nested-4.0.0.tgz
+Source1009:         
https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.2.tgz#/@csstools-selector-resolve-nested-4.0.2.tgz
 Source1010:         
https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-6.0.0.tgz#/@csstools-selector-specificity-6.0.0.tgz
 Source1011:         
https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.10.1.tgz#/@eslint-community-eslint-utils-4.10.1.tgz
 Source1012:         
https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.2.tgz#/@eslint-community-regexpp-4.12.2.tgz
@@ -55,7 +55,7 @@
 Source1054:         
https://registry.npmjs.org/chosen-js/-/chosen-js-1.8.7.tgz#/chosen-js-1.8.7.tgz
 Source1055:         
https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz#/color-convert-2.0.1.tgz
 Source1056:         
https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz#/color-name-1.1.4.tgz
-Source1057:         
https://registry.npmjs.org/colord/-/colord-2.9.3.tgz#/colord-2.9.3.tgz
+Source1057:         
https://registry.npmjs.org/colord/-/colord-2.10.0.tgz#/colord-2.10.0.tgz
 Source1058:         
https://registry.npmjs.org/commander/-/commander-7.2.0.tgz#/commander-7.2.0.tgz
 Source1059:         
https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.2.tgz#/cosmiconfig-9.0.2.tgz
 Source1060:         
https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz#/cross-spawn-7.0.6.tgz
@@ -122,7 +122,7 @@
 Source1121:         
https://registry.npmjs.org/fast-levenshtein/-/fast-levenshtein-2.0.6.tgz#/fast-levenshtein-2.0.6.tgz
 Source1122:         
https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.7.tgz#/fast-uri-3.1.7.tgz
 Source1123:         
https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz#/fastest-levenshtein-1.0.16.tgz
-Source1124:         
https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz#/fastq-1.20.1.tgz
+Source1124:         
https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz#/fastq-1.20.3.tgz
 Source1125:         
https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-11.1.5.tgz#/file-entry-cache-11.1.5.tgz
 Source1126:         
https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz#/file-entry-cache-8.0.0.tgz
 Source1127:         
https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz#/fill-range-7.1.1.tgz
@@ -146,110 +146,111 @@
 Source1145:         
https://registry.npmjs.org/html-tags/-/html-tags-5.1.0.tgz#/html-tags-5.1.0.tgz
 Source1146:         
https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.6.3.tgz#/iconv-lite-0.6.3.tgz
 Source1147:         
https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz#/ignore-5.3.2.tgz
-Source1148:         
https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz#/ignore-7.0.5.tgz
-Source1149:         
https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz#/import-fresh-3.3.1.tgz
-Source1150:         
https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz#/import-meta-resolve-4.2.0.tgz
-Source1151:         
https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#/imurmurhash-0.1.4.tgz
-Source1152:         
https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#/ini-1.3.8.tgz
-Source1153:         
https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz#/internmap-2.0.3.tgz
-Source1154:         
https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#/is-arrayish-0.2.1.tgz
-Source1155:         
https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#/is-extglob-2.1.1.tgz
-Source1156:         
https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#/is-fullwidth-code-point-3.0.0.tgz
-Source1157:         
https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#/is-glob-4.0.3.tgz
-Source1158:         
https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#/is-number-7.0.0.tgz
-Source1159:         
https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz#/is-path-inside-4.0.0.tgz
-Source1160:         
https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#/is-plain-object-5.0.0.tgz
-Source1161:         
https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#/isexe-2.0.0.tgz
-Source1162:         
https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz#/jquery-3.7.1.tgz
-Source1163:         
https://registry.npmjs.org/jquery/-/jquery-4.0.0.tgz#/jquery-4.0.0.tgz
-Source1164:         
https://registry.npmjs.org/jquery-ujs/-/jquery-ujs-1.2.3.tgz#/jquery-ujs-1.2.3.tgz
-Source1165:         
https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#/js-tokens-4.0.0.tgz
-Source1166:         
https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz#/js-yaml-4.3.2.tgz
-Source1167:         
https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#/json-buffer-3.0.1.tgz
-Source1168:         
https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#/json-parse-even-better-errors-2.3.1.tgz
-Source1169:         
https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#/json-schema-traverse-0.4.1.tgz
-Source1170:         
https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#/json-schema-traverse-1.0.0.tgz
-Source1171:         
https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#/json-stable-stringify-without-jsonify-1.0.1.tgz
-Source1172:         
https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#/keyv-4.5.4.tgz
-Source1173:         
https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz#/keyv-5.6.0.tgz
-Source1174:         
https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#/kind-of-6.0.3.tgz
-Source1175:         
https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz#/known-css-properties-0.37.0.tgz
-Source1176:         
https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#/levn-0.4.1.tgz
-Source1177:         
https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#/lines-and-columns-1.2.4.tgz
-Source1178:         
https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#/locate-path-6.0.0.tgz
-Source1179:         
https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz#/lodash-4.18.1.tgz
-Source1180:         
https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#/lodash.truncate-4.4.2.tgz
-Source1181:         
https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-4.0.0.tgz#/mathml-tag-names-4.0.0.tgz
-Source1182:         
https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz#/mdn-data-2.27.1.tgz
-Source1183:         
https://registry.npmjs.org/meow/-/meow-14.1.0.tgz#/meow-14.1.0.tgz
-Source1184:         
https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#/merge2-1.4.1.tgz
-Source1185:         
https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz#/micromatch-4.0.8.tgz
-Source1186:         
https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz#/minimatch-10.2.4.tgz
-Source1187:         https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#/ms-2.1.3.tgz
-Source1188:         
https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz#/nanoid-3.3.20.tgz
-Source1189:         
https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#/natural-compare-1.4.0.tgz
-Source1190:         
https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#/normalize-path-3.0.0.tgz
-Source1191:         
https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz#/optionator-0.9.4.tgz
-Source1192:         
https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#/p-limit-3.1.0.tgz
-Source1193:         
https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#/p-locate-5.0.0.tgz
-Source1194:         
https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#/parent-module-1.0.1.tgz
-Source1195:         
https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#/parse-json-5.2.0.tgz
-Source1196:         
https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#/path-exists-4.0.0.tgz
-Source1197:         
https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#/path-key-3.1.1.tgz
-Source1198:         
https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz#/picocolors-1.1.1.tgz
-Source1199:         
https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz#/picomatch-2.3.2.tgz
-Source1200:         
https://registry.npmjs.org/postcss/-/postcss-8.5.30.tgz#/postcss-8.5.30.tgz
-Source1201:         
https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#/postcss-media-query-parser-0.2.3.tgz
-Source1202:         
https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz#/postcss-resolve-nested-selector-0.1.6.tgz
-Source1203:         
https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.1.0.tgz#/postcss-safe-parser-7.1.0.tgz
-Source1204:         
https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz#/postcss-scss-4.0.9.tgz
-Source1205:         
https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz#/postcss-selector-parser-7.1.6.tgz
-Source1206:         
https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#/postcss-value-parser-4.2.0.tgz
-Source1207:         
https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#/prelude-ls-1.2.1.tgz
-Source1208:         
https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz#/prettier-3.9.6.tgz
-Source1209:         
https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz#/prettier-linter-helpers-1.0.1.tgz
-Source1210:         
https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#/punycode-2.3.1.tgz
-Source1211:         
https://registry.npmjs.org/qified/-/qified-0.10.1.tgz#/qified-0.10.1.tgz
-Source1212:         
https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#/queue-microtask-1.2.3.tgz
-Source1213:         
https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#/require-from-string-2.0.2.tgz
-Source1214:         
https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#/resolve-from-4.0.0.tgz
-Source1215:         
https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz#/reusify-1.1.0.tgz
-Source1216:         
https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz#/robust-predicates-3.0.3.tgz
-Source1217:         
https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#/run-parallel-1.2.0.tgz
-Source1218:         https://registry.npmjs.org/rw/-/rw-1.3.3.tgz#/rw-1.3.3.tgz
-Source1219:         
https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#/safer-buffer-2.1.2.tgz
-Source1220:         
https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#/shebang-command-2.0.0.tgz
-Source1221:         
https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#/shebang-regex-3.0.0.tgz
-Source1222:         
https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#/signal-exit-4.1.0.tgz
-Source1223:         
https://registry.npmjs.org/slash/-/slash-5.1.0.tgz#/slash-5.1.0.tgz
-Source1224:         
https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#/slice-ansi-4.0.0.tgz
-Source1225:         
https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz#/source-map-js-1.2.2.tgz
-Source1226:         
https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#/string-width-4.2.3.tgz
-Source1227:         
https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz#/string-width-8.2.2.tgz
-Source1228:         
https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#/strip-ansi-6.0.1.tgz
-Source1229:         
https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz#/strip-ansi-7.2.0.tgz
-Source1230:         
https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz#/style-search-0.1.0.tgz
-Source1231:         
https://registry.npmjs.org/stylelint/-/stylelint-17.14.1.tgz#/stylelint-17.14.1.tgz
-Source1232:         
https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-18.0.0.tgz#/stylelint-config-recommended-18.0.0.tgz
-Source1233:         
https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-17.0.1.tgz#/stylelint-config-recommended-scss-17.0.1.tgz
-Source1234:         
https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-40.0.0.tgz#/stylelint-config-standard-40.0.0.tgz
-Source1235:         
https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-17.0.0.tgz#/stylelint-config-standard-scss-17.0.0.tgz
-Source1236:         
https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-5.0.3.tgz#/stylelint-prettier-5.0.3.tgz
-Source1237:         
https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-7.0.0.tgz#/stylelint-scss-7.0.0.tgz
-Source1238:         
https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz#/supports-color-10.2.2.tgz
-Source1239:         
https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-4.5.0.tgz#/supports-hyperlinks-4.5.0.tgz
-Source1240:         
https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz#/svg-tags-1.0.0.tgz
-Source1241:         
https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz#/synckit-0.11.13.tgz
-Source1242:         
https://registry.npmjs.org/table/-/table-6.9.0.tgz#/table-6.9.0.tgz
-Source1243:         
https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz#/timeago.js-4.0.2.tgz
-Source1244:         
https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#/to-regex-range-5.0.1.tgz
-Source1245:         
https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#/type-check-0.4.0.tgz
-Source1246:         
https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz#/unicorn-magic-0.4.0.tgz
-Source1247:         
https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#/uri-js-4.4.1.tgz
-Source1248:         
https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#/util-deprecate-1.0.2.tgz
-Source1249:         
https://registry.npmjs.org/which/-/which-1.3.1.tgz#/which-1.3.1.tgz
-Source1250:         
https://registry.npmjs.org/which/-/which-2.0.2.tgz#/which-2.0.2.tgz
-Source1251:         
https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz#/word-wrap-1.2.5.tgz
-Source1252:         
https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.1.tgz#/write-file-atomic-7.0.1.tgz
-Source1253:         
https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#/yocto-queue-0.1.0.tgz
+Source1148:         
https://registry.npmjs.org/ignore/-/ignore-7.0.12.tgz#/ignore-7.0.12.tgz
+Source1149:         
https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz#/ignore-7.0.5.tgz
+Source1150:         
https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.1.tgz#/import-fresh-3.3.1.tgz
+Source1151:         
https://registry.npmjs.org/import-meta-resolve/-/import-meta-resolve-4.2.0.tgz#/import-meta-resolve-4.2.0.tgz
+Source1152:         
https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz#/imurmurhash-0.1.4.tgz
+Source1153:         
https://registry.npmjs.org/ini/-/ini-1.3.8.tgz#/ini-1.3.8.tgz
+Source1154:         
https://registry.npmjs.org/internmap/-/internmap-2.0.3.tgz#/internmap-2.0.3.tgz
+Source1155:         
https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz#/is-arrayish-0.2.1.tgz
+Source1156:         
https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz#/is-extglob-2.1.1.tgz
+Source1157:         
https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#/is-fullwidth-code-point-3.0.0.tgz
+Source1158:         
https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz#/is-glob-4.0.3.tgz
+Source1159:         
https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz#/is-number-7.0.0.tgz
+Source1160:         
https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz#/is-path-inside-4.0.0.tgz
+Source1161:         
https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz#/is-plain-object-5.0.0.tgz
+Source1162:         
https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz#/isexe-2.0.0.tgz
+Source1163:         
https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz#/jquery-3.7.1.tgz
+Source1164:         
https://registry.npmjs.org/jquery/-/jquery-4.0.0.tgz#/jquery-4.0.0.tgz
+Source1165:         
https://registry.npmjs.org/jquery-ujs/-/jquery-ujs-1.2.3.tgz#/jquery-ujs-1.2.3.tgz
+Source1166:         
https://registry.npmjs.org/js-tokens/-/js-tokens-4.0.0.tgz#/js-tokens-4.0.0.tgz
+Source1167:         
https://registry.npmjs.org/js-yaml/-/js-yaml-4.3.2.tgz#/js-yaml-4.3.2.tgz
+Source1168:         
https://registry.npmjs.org/json-buffer/-/json-buffer-3.0.1.tgz#/json-buffer-3.0.1.tgz
+Source1169:         
https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz#/json-parse-even-better-errors-2.3.1.tgz
+Source1170:         
https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#/json-schema-traverse-0.4.1.tgz
+Source1171:         
https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-1.0.0.tgz#/json-schema-traverse-1.0.0.tgz
+Source1172:         
https://registry.npmjs.org/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#/json-stable-stringify-without-jsonify-1.0.1.tgz
+Source1173:         
https://registry.npmjs.org/keyv/-/keyv-4.5.4.tgz#/keyv-4.5.4.tgz
+Source1174:         
https://registry.npmjs.org/keyv/-/keyv-5.6.0.tgz#/keyv-5.6.0.tgz
+Source1175:         
https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz#/kind-of-6.0.3.tgz
+Source1176:         
https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.37.0.tgz#/known-css-properties-0.37.0.tgz
+Source1177:         
https://registry.npmjs.org/levn/-/levn-0.4.1.tgz#/levn-0.4.1.tgz
+Source1178:         
https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz#/lines-and-columns-1.2.4.tgz
+Source1179:         
https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz#/locate-path-6.0.0.tgz
+Source1180:         
https://registry.npmjs.org/lodash/-/lodash-4.18.1.tgz#/lodash-4.18.1.tgz
+Source1181:         
https://registry.npmjs.org/lodash.truncate/-/lodash.truncate-4.4.2.tgz#/lodash.truncate-4.4.2.tgz
+Source1182:         
https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-4.0.0.tgz#/mathml-tag-names-4.0.0.tgz
+Source1183:         
https://registry.npmjs.org/mdn-data/-/mdn-data-2.27.1.tgz#/mdn-data-2.27.1.tgz
+Source1184:         
https://registry.npmjs.org/meow/-/meow-14.1.0.tgz#/meow-14.1.0.tgz
+Source1185:         
https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz#/merge2-1.4.1.tgz
+Source1186:         
https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz#/micromatch-4.0.8.tgz
+Source1187:         
https://registry.npmjs.org/minimatch/-/minimatch-10.2.4.tgz#/minimatch-10.2.4.tgz
+Source1188:         https://registry.npmjs.org/ms/-/ms-2.1.3.tgz#/ms-2.1.3.tgz
+Source1189:         
https://registry.npmjs.org/nanoid/-/nanoid-3.3.20.tgz#/nanoid-3.3.20.tgz
+Source1190:         
https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz#/natural-compare-1.4.0.tgz
+Source1191:         
https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz#/normalize-path-3.0.0.tgz
+Source1192:         
https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz#/optionator-0.9.4.tgz
+Source1193:         
https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz#/p-limit-3.1.0.tgz
+Source1194:         
https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz#/p-locate-5.0.0.tgz
+Source1195:         
https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz#/parent-module-1.0.1.tgz
+Source1196:         
https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz#/parse-json-5.2.0.tgz
+Source1197:         
https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz#/path-exists-4.0.0.tgz
+Source1198:         
https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz#/path-key-3.1.1.tgz
+Source1199:         
https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz#/picocolors-1.1.1.tgz
+Source1200:         
https://registry.npmjs.org/picomatch/-/picomatch-2.3.2.tgz#/picomatch-2.3.2.tgz
+Source1201:         
https://registry.npmjs.org/postcss/-/postcss-8.5.30.tgz#/postcss-8.5.30.tgz
+Source1202:         
https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz#/postcss-media-query-parser-0.2.3.tgz
+Source1203:         
https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.6.tgz#/postcss-resolve-nested-selector-0.1.6.tgz
+Source1204:         
https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.1.0.tgz#/postcss-safe-parser-7.1.0.tgz
+Source1205:         
https://registry.npmjs.org/postcss-scss/-/postcss-scss-4.0.9.tgz#/postcss-scss-4.0.9.tgz
+Source1206:         
https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-7.1.6.tgz#/postcss-selector-parser-7.1.6.tgz
+Source1207:         
https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz#/postcss-value-parser-4.2.0.tgz
+Source1208:         
https://registry.npmjs.org/prelude-ls/-/prelude-ls-1.2.1.tgz#/prelude-ls-1.2.1.tgz
+Source1209:         
https://registry.npmjs.org/prettier/-/prettier-3.9.6.tgz#/prettier-3.9.6.tgz
+Source1210:         
https://registry.npmjs.org/prettier-linter-helpers/-/prettier-linter-helpers-1.0.1.tgz#/prettier-linter-helpers-1.0.1.tgz
+Source1211:         
https://registry.npmjs.org/punycode/-/punycode-2.3.1.tgz#/punycode-2.3.1.tgz
+Source1212:         
https://registry.npmjs.org/qified/-/qified-0.10.1.tgz#/qified-0.10.1.tgz
+Source1213:         
https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz#/queue-microtask-1.2.3.tgz
+Source1214:         
https://registry.npmjs.org/require-from-string/-/require-from-string-2.0.2.tgz#/require-from-string-2.0.2.tgz
+Source1215:         
https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz#/resolve-from-4.0.0.tgz
+Source1216:         
https://registry.npmjs.org/reusify/-/reusify-1.1.0.tgz#/reusify-1.1.0.tgz
+Source1217:         
https://registry.npmjs.org/robust-predicates/-/robust-predicates-3.0.3.tgz#/robust-predicates-3.0.3.tgz
+Source1218:         
https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz#/run-parallel-1.2.0.tgz
+Source1219:         https://registry.npmjs.org/rw/-/rw-1.3.3.tgz#/rw-1.3.3.tgz
+Source1220:         
https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz#/safer-buffer-2.1.2.tgz
+Source1221:         
https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz#/shebang-command-2.0.0.tgz
+Source1222:         
https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz#/shebang-regex-3.0.0.tgz
+Source1223:         
https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz#/signal-exit-4.1.0.tgz
+Source1224:         
https://registry.npmjs.org/slash/-/slash-5.1.0.tgz#/slash-5.1.0.tgz
+Source1225:         
https://registry.npmjs.org/slice-ansi/-/slice-ansi-4.0.0.tgz#/slice-ansi-4.0.0.tgz
+Source1226:         
https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.2.tgz#/source-map-js-1.2.2.tgz
+Source1227:         
https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz#/string-width-4.2.3.tgz
+Source1228:         
https://registry.npmjs.org/string-width/-/string-width-8.2.2.tgz#/string-width-8.2.2.tgz
+Source1229:         
https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz#/strip-ansi-6.0.1.tgz
+Source1230:         
https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.2.0.tgz#/strip-ansi-7.2.0.tgz
+Source1231:         
https://registry.npmjs.org/style-search/-/style-search-0.1.0.tgz#/style-search-0.1.0.tgz
+Source1232:         
https://registry.npmjs.org/stylelint/-/stylelint-17.16.0.tgz#/stylelint-17.16.0.tgz
+Source1233:         
https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-18.0.0.tgz#/stylelint-config-recommended-18.0.0.tgz
+Source1234:         
https://registry.npmjs.org/stylelint-config-recommended-scss/-/stylelint-config-recommended-scss-17.0.1.tgz#/stylelint-config-recommended-scss-17.0.1.tgz
+Source1235:         
https://registry.npmjs.org/stylelint-config-standard/-/stylelint-config-standard-40.0.0.tgz#/stylelint-config-standard-40.0.0.tgz
+Source1236:         
https://registry.npmjs.org/stylelint-config-standard-scss/-/stylelint-config-standard-scss-17.0.0.tgz#/stylelint-config-standard-scss-17.0.0.tgz
+Source1237:         
https://registry.npmjs.org/stylelint-prettier/-/stylelint-prettier-5.0.3.tgz#/stylelint-prettier-5.0.3.tgz
+Source1238:         
https://registry.npmjs.org/stylelint-scss/-/stylelint-scss-7.0.0.tgz#/stylelint-scss-7.0.0.tgz
+Source1239:         
https://registry.npmjs.org/supports-color/-/supports-color-10.2.2.tgz#/supports-color-10.2.2.tgz
+Source1240:         
https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-4.5.0.tgz#/supports-hyperlinks-4.5.0.tgz
+Source1241:         
https://registry.npmjs.org/svg-tags/-/svg-tags-1.0.0.tgz#/svg-tags-1.0.0.tgz
+Source1242:         
https://registry.npmjs.org/synckit/-/synckit-0.11.13.tgz#/synckit-0.11.13.tgz
+Source1243:         
https://registry.npmjs.org/table/-/table-6.9.0.tgz#/table-6.9.0.tgz
+Source1244:         
https://registry.npmjs.org/timeago.js/-/timeago.js-4.0.2.tgz#/timeago.js-4.0.2.tgz
+Source1245:         
https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz#/to-regex-range-5.0.1.tgz
+Source1246:         
https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz#/type-check-0.4.0.tgz
+Source1247:         
https://registry.npmjs.org/unicorn-magic/-/unicorn-magic-0.4.0.tgz#/unicorn-magic-0.4.0.tgz
+Source1248:         
https://registry.npmjs.org/uri-js/-/uri-js-4.4.1.tgz#/uri-js-4.4.1.tgz
+Source1249:         
https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz#/util-deprecate-1.0.2.tgz
+Source1250:         
https://registry.npmjs.org/which/-/which-1.3.1.tgz#/which-1.3.1.tgz
+Source1251:         
https://registry.npmjs.org/which/-/which-2.0.2.tgz#/which-2.0.2.tgz
+Source1252:         
https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz#/word-wrap-1.2.5.tgz
+Source1253:         
https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-7.0.1.tgz#/write-file-atomic-7.0.1.tgz
+Source1254:         
https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz#/yocto-queue-0.1.0.tgz
 

++++++ openQA-5.1792607148.117af9ef.obscpio -> 
openQA-5.1792679797.1d1b53d2.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/dist/rpm/openQA.spec 
new/openQA-5.1792679797.1d1b53d2/dist/rpm/openQA.spec
--- old/openQA-5.1792607148.117af9ef/dist/rpm/openQA.spec       2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/dist/rpm/openQA.spec       2026-10-22 
16:36:37.000000000 +0200
@@ -128,7 +128,6 @@
 %requires_eq    perl-Mojolicious-Plugin-AssetPack
 Recommends:     %{name}-local-db
 Requires(post): coreutils
-Requires(post): perl(SQL::SplitStatement)
 Recommends:     apache2
 Recommends:     apparmor-profiles
 Recommends:     apparmor-utils
@@ -203,7 +202,7 @@
 %package worker
 Summary:        The openQA worker
 Group:          Development/Tools/Other
-%define worker_requires_including_uncovered_in_tests %worker_requires 
perl(SQL::SplitStatement)
+%define worker_requires_including_uncovered_in_tests %worker_requires
 Requires:       %{worker_requires_including_uncovered_in_tests}
 # FIXME: use proper Requires(pre/post/preun/...)
 PreReq:         openQA-common = %{version}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/etc/openqa/openqa.ini 
new/openQA-5.1792679797.1d1b53d2/etc/openqa/openqa.ini
--- old/openQA-5.1792607148.117af9ef/etc/openqa/openqa.ini      2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/etc/openqa/openqa.ini      2026-10-22 
16:36:37.000000000 +0200
@@ -106,7 +106,7 @@
 
 ## Causes jobs reported as incomplete by the worker to be cloned automatically 
when the
 ## reason matches; set to 0 to disable
-#auto_clone_regex = ^(cache failure: |terminated prematurely: |api failure: 
Failed to register .* 503|backend died: .*VNC.*(timeout|timed out|refused)|QEMU 
terminated: Failed to allocate KVM HPT of order 25.* Cannot allocate 
memory|timeout: setup exceeded MAX_SETUP_TIME|backend died: Open vSwitch 
command .* failed: org\.freedesktop\.DBus\.Error\.NoReply)
+#auto_clone_regex = ^(cache failure: |terminated prematurely: |api failure: 
Failed to register .* 503|backend died: .*VNC.*(timeout|timed out|refused)|QEMU 
terminated: Failed to allocate KVM HPT of order 25.* Cannot allocate 
memory|timeout: setup exceeded MAX_SETUP_TIME|backend died: Open vSwitch 
command .* failed:)
 ## The maximum amount of times a job will be restarted if the auto_clone_regex 
matches
 #auto_clone_limit = 20
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/lib/OpenQA/Constants.pm 
new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Constants.pm
--- old/openQA-5.1792607148.117af9ef/lib/OpenQA/Constants.pm    2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Constants.pm    2026-10-22 
16:36:37.000000000 +0200
@@ -22,6 +22,8 @@
 
 use constant DEFAULT_UPLOAD_CHUNK_SIZE => 10_000_000;
 
+use constant DOWNLOAD_PERMISSION => $ENV{OPENQA_DOWNLOAD_PERMISSION} // 0644;
+
 # Define worker commands; used to validate and differentiate commands
 use constant {
     # stop the current job(s), do *not* upload logs and assets
@@ -139,6 +141,7 @@
   JOBS_OVERVIEW_SEARCH_CRITERIA
   BUILD_SORT_BY_NAME BUILD_SORT_BY_NEWEST_JOB BUILD_SORT_BY_OLDEST_JOB
   VNCPORT_OFFSET VNC_PORT
+  DOWNLOAD_PERMISSION
 );
 
 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1792607148.117af9ef/lib/OpenQA/Downloader.pm 
new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Downloader.pm
--- old/openQA-5.1792607148.117af9ef/lib/OpenQA/Downloader.pm   2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Downloader.pm   2026-10-22 
16:36:37.000000000 +0200
@@ -7,6 +7,7 @@
 use Mojo::Loader 'load_class';
 use Mojo::File 'path';
 use Mojo::URL;
+use OpenQA::Constants 'DOWNLOAD_PERMISSION';
 use OpenQA::UserAgent;
 use OpenQA::Utils 'human_readable_size';
 use Time::HiRes 'sleep';
@@ -75,7 +76,8 @@
     my $ua = $self->ua;
     my $log = $self->log;
 
-    my $file = path($target)->basename;
+    $target = path($target);
+    my $file = $target->basename;
     $log->info(qq{Downloading "$file" from "$url"});
 
     # Assets might be deleted by a sysadmin
@@ -89,8 +91,9 @@
     my $code = $res->code;
     my $error = $res->error // {message => 'Unknown error'};
     if (defined $code && $code == HTTP_NOT_MODIFIED) {
+        $target->chmod(DOWNLOAD_PERMISSION) if my $exists = -e $target;
         $options->{on_unchanged}->() if $options->{on_unchanged};
-        return (undef, -e $target ? undef : $error->{message});
+        return (undef, $exists ? undef : $error->{message});
     }
 
     if (!$res->is_success) {
@@ -112,7 +115,6 @@
             my $tempfile = path($ENV{MOJO_TMPDIR}, 
Mojo::URL->new($url)->path->parts->[-1])->to_string;
             $log->info(qq{Extracting "$tempfile" to "$target"});
             $asset->move_to($tempfile);
-            $target = path($target);
             $err = $self->_extract_asset($tempfile, $target);
             unlink $tempfile;
             if ($err) {
@@ -124,7 +126,10 @@
                 }
             }
         }
-        else { $asset->move_to($target) }
+        else {
+            $asset->move_to($target);
+            $target->chmod(DOWNLOAD_PERMISSION);
+        }
 
         $options->{on_success}->($res) if $options->{on_success};
     }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/lib/OpenQA/Files.pm 
new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Files.pm
--- old/openQA-5.1792607148.117af9ef/lib/OpenQA/Files.pm        2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Files.pm        2026-10-22 
16:36:37.000000000 +0200
@@ -7,7 +7,6 @@
 use Digest::SHA 'sha1_base64';
 use Mojo::File 'path';
 use OpenQA::File;
-use Mojo::Exception;
 
 sub join ($self) {
     return join '', map { $_->read } $self->each;
@@ -32,46 +31,4 @@
     return $self->each(sub ($file, $i) { $file->prepare });
 }
 
-sub write_chunks ($class, $chunk_path, $file) {
-    return Mojo::File->new($chunk_path)->list_tree()->sort->each(
-        sub {
-            my $chunk = OpenQA::File->deserialize($_->slurp);
-            $chunk->decode_content;    # Decode content before writing it
-            $chunk->write_content($file);
-        });
-}
-
-sub write_verify_chunks ($class, $chunk_path, $file) {
-    $class->write_chunks($chunk_path => $file);
-    return $class->verify_chunks($chunk_path => $file);
-}
-
-sub spew ($self, $dir) {
-    return $self->each(
-        sub {
-            $_->prepare;    # Prepare your data first before serializing
-            Mojo::File->new($dir, $_->index)->spew($_->serialize);
-        });
-}
-
-sub verify_chunks ($class, $chunk_path, $verify_file) {
-    my $sum;
-    for (Mojo::File->new($chunk_path)->list_tree()->each) {
-        my $chunk = OpenQA::File->deserialize($_->slurp);
-
-        $chunk->decode_content;
-        $sum = $chunk->total_cksum if !$sum;
-        return Mojo::Exception->new(
-            'Chunk: ' . $chunk->id() . ' differs in total checksum, expected 
$sum given ' . $chunk->total_cksum)
-          if $sum ne $chunk->total_cksum;
-        return Mojo::Exception->new("Can't verify written data from chunk")
-          unless $chunk->verify_content($verify_file);
-    }
-
-    my $final_sum = 
OpenQA::File->file_digest(Mojo::File->new($verify_file)->to_string);
-    return Mojo::Exception->new("Total checksum failed: expected $sum, 
computed " . $final_sum)
-      if $sum ne $final_sum;
-    return undef;
-}
-
 1;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1792607148.117af9ef/lib/OpenQA/Schema/Result/JobModules.pm 
new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Schema/Result/JobModules.pm
--- old/openQA-5.1792607148.117af9ef/lib/OpenQA/Schema/Result/JobModules.pm     
2026-10-21 20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Schema/Result/JobModules.pm     
2026-10-22 16:36:37.000000000 +0200
@@ -5,6 +5,7 @@
 
 use Mojo::Base 'DBIx::Class::Core', -signatures;
 
+use OpenQA::Constants qw(DOWNLOAD_PERMISSION);
 use OpenQA::Jobs::Constants;
 use Mojo::JSON qw(decode_json encode_json);
 use Mojo::File qw(path tempfile);
@@ -206,7 +207,8 @@
 
     my $dir = $self->job->result_dir;
     my $tmpfile = tempfile(DIR => $dir);
-    $tmpfile->spew(encode_json($results))->chmod(0644)->move_to(path($dir, 
'details-' . $self->name . '.json'));
+    $tmpfile->spew(encode_json($results));
+    $tmpfile->chmod(DOWNLOAD_PERMISSION)->move_to(path($dir, 'details-' . 
$self->name . '.json'));
 }
 
 # incorporate textual step data into details JSON
@@ -237,7 +239,7 @@
     my $new_file_contents = encode_json($results);
     my $tmpfile = tempfile(DIR => $file->dirname);
     $tmpfile->spew($new_file_contents);
-    $tmpfile->chmod(0644)->move_to($file);
+    $tmpfile->chmod(DOWNLOAD_PERMISSION)->move_to($file);
 
     # cleanup incorporated files
     for my $step (@$details) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1792607148.117af9ef/lib/OpenQA/Schema/Result/Jobs.pm 
new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Schema/Result/Jobs.pm
--- old/openQA-5.1792607148.117af9ef/lib/OpenQA/Schema/Result/Jobs.pm   
2026-10-21 20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Schema/Result/Jobs.pm   
2026-10-22 16:36:37.000000000 +0200
@@ -14,6 +14,7 @@
     qw(run_cmd_with_log_return_error needledir testcasedir git_commit_url 
find_video_files)
 );
 use OpenQA::App;
+use OpenQA::Constants qw(DOWNLOAD_PERMISSION);
 use OpenQA::Jobs::Constants;
 use OpenQA::JobDependencies::Constants;
 use OpenQA::Markdown 'markdown_to_html';
@@ -1406,8 +1407,7 @@
     # Worker and WebUI are on the same host (much faster)
     if ($local) {
         path($local)->copy_to($temp_final_file);
-        $temp_final_file->move_to($final_file);
-        chmod 0644, $final_file;
+        $temp_final_file->move_to($final_file)->chmod(DOWNLOAD_PERMISSION);
         $temp_chunk_folder->remove_tree;
         return 0, $fname, $type, 1;
     }
@@ -1441,11 +1441,7 @@
             $temp_chunk_folder->remove_tree
               && die Mojo::Exception->new("Checksum mismatch expected $sum 
got: $real_sum (weak check on last bytes)")
               unless $sum eq $real_sum;
-
-            $temp_final_file->move_to($final_file);
-
-            chmod 0644, $final_file;
-
+            $temp_final_file->move_to($final_file)->chmod(DOWNLOAD_PERMISSION);
             $temp_chunk_folder->remove_tree;
         }
         $chunk->content(\undef);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/lib/OpenQA/Setup.pm 
new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Setup.pm
--- old/openQA-5.1792607148.117af9ef/lib/OpenQA/Setup.pm        2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Setup.pm        2026-10-22 
16:36:37.000000000 +0200
@@ -147,7 +147,7 @@
             auto_duplicate_stale_jobs => 1,
             search_results_limit => 50000,
             auto_clone_regex =>
-'^(cache failure: |terminated prematurely: |api failure: Failed to register .* 
503|backend died: .*VNC.*(timeout|timed out|refused)|QEMU terminated: Failed to 
allocate KVM HPT of order 25.* Cannot allocate memory|backend died: Open 
vSwitch command .* failed: org\.freedesktop\.DBus\.Error\.NoReply)',
+'^(cache failure: |terminated prematurely: |api failure: Failed to register .* 
503|backend died: .*VNC.*(timeout|timed out|refused)|QEMU terminated: Failed to 
allocate KVM HPT of order 25.* Cannot allocate memory|backend died: Open 
vSwitch command .* failed:)',
             auto_clone_limit => 20,
             force_result_regex => '',
             parallel_children_collapsable_results => join(' ', OK_RESULTS),
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1792607148.117af9ef/lib/OpenQA/Task/Asset/Download.pm 
new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Task/Asset/Download.pm
--- old/openQA-5.1792607148.117af9ef/lib/OpenQA/Task/Asset/Download.pm  
2026-10-21 20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Task/Asset/Download.pm  
2026-10-22 16:36:37.000000000 +0200
@@ -79,10 +79,7 @@
     my $downloader = OpenQA::Downloader->new(log => $ctx, tmpdir => 
$ENV{MOJO_TMPDIR});
     my $options = {
         extract => $do_extract,
-        on_success => sub {
-            chmod 0644, $assetpath;
-            $ctx->debug(qq{Download of "$assetpath" successful});
-        }
+        on_success => sub { $ctx->debug(qq{Download of "$assetpath" 
successful}) },
     };
     return _create_symlinks($job, $ctx, $assetpath, \@other_destinations)
       unless my $err = $downloader->download($url, $assetpath, $options);
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/openQA-5.1792607148.117af9ef/lib/OpenQA/Worker/Job.pm 
new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Worker/Job.pm
--- old/openQA-5.1792607148.117af9ef/lib/OpenQA/Worker/Job.pm   2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/lib/OpenQA/Worker/Job.pm   2026-10-22 
16:36:37.000000000 +0200
@@ -6,7 +6,7 @@
 
 use OpenQA::Constants qw(DEFAULT_MAX_JOB_TIME DEFAULT_UPLOAD_CHUNK_SIZE 
DEFAULT_MAX_SETUP_TIME WORKER_COMMAND_ABORT
   WORKER_COMMAND_QUIT WORKER_COMMAND_CANCEL WORKER_COMMAND_OBSOLETE 
WORKER_SR_BROKEN WORKER_SR_SETUP_FAILURE
-  WORKER_SR_API_FAILURE WORKER_SR_TIMEOUT WORKER_SR_DONE WORKER_SR_DIED);
+  WORKER_SR_API_FAILURE WORKER_SR_TIMEOUT WORKER_SR_DONE WORKER_SR_DIED 
DOWNLOAD_PERMISSION);
 use OpenQA::Jobs::Constants;
 use OpenQA::Worker::Engines::isotovideo;
 use OpenQA::Worker::Isotovideo::Client;
@@ -991,7 +991,7 @@
     $ua->upload->once(
         'upload_local.prepare' => sub ($upload) {
             log_info("$filename: local upload (no chunks needed)", channels => 
\@channels_worker_only, default => 1);
-            chmod 0644, $file;
+            chmod DOWNLOAD_PERMISSION, $file;
         });
     $ua->upload->once(
         'upload_chunk.prepare' => sub ($upload, $pieces) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/package-lock.json 
new/openQA-5.1792679797.1d1b53d2/package-lock.json
--- old/openQA-5.1792607148.117af9ef/package-lock.json  2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/package-lock.json  2026-10-22 
16:36:37.000000000 +0200
@@ -29,7 +29,7 @@
         "eslint-plugin-prettier": "^5.5.5",
         "globals": "^17.13.0",
         "prettier": "^3.9.6",
-        "stylelint": "^17.14.1",
+        "stylelint": "^17.16.0",
         "stylelint-config-standard-scss": "^17.0.0",
         "stylelint-prettier": "^5.0.3"
       }
@@ -121,9 +121,9 @@
       }
     },
     "node_modules/@csstools/css-calc": {
-      "version": "3.2.1",
-      "resolved": 
"https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.2.1.tgz";,
-      "integrity": 
"sha512-DtdHlgXh5ZkA43cwBcAm+huzgJiwx3ZTWVjBs94kwz2xKqSimDA3lBgCjphYgwgVUMWatSM0pDd8TILB1yrVVg==",
+      "version": "3.4.3",
+      "resolved": 
"https://registry.npmjs.org/@csstools/css-calc/-/css-calc-3.4.3.tgz";,
+      "integrity": 
"sha512-iex20d8CHVkyvg6B7UKV7uHnI2Bqo9g+EFfT9E0y+GvTvhZ/DwONJ+9aKb1dlqm0ZiGsL5RXjp0fCoJYnkeDjA==",
       "dev": true,
       "funding": [
         {
@@ -140,14 +140,14 @@
         "node": ">=20.19.0"
       },
       "peerDependencies": {
-        "@csstools/css-parser-algorithms": "^4.0.0",
-        "@csstools/css-tokenizer": "^4.0.0"
+        "@csstools/css-parser-algorithms": "^4.0.2",
+        "@csstools/css-tokenizer": "^4.0.2"
       }
     },
     "node_modules/@csstools/css-parser-algorithms": {
-      "version": "4.0.0",
-      "resolved": 
"https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.0.tgz";,
-      "integrity": 
"sha512-+B87qS7fIG3L5h3qwJ/IFbjoVoOe/bpOdh9hAjXbvx0o8ImEmUsGXN0inFOnk2ChCFgqkkGFQ+TpM5rbhkKe4w==",
+      "version": "4.0.2",
+      "resolved": 
"https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-4.0.2.tgz";,
+      "integrity": 
"sha512-40cSKyMvK+tq4qz6Awrlye2WGuOKt3FwPgtGg6KTfbHOWNw+Rk1rzbAtZnZ6IBhsY491HLRnDXwoyBAijmmILA==",
       "dev": true,
       "funding": [
         {
@@ -164,13 +164,13 @@
         "node": ">=20.19.0"
       },
       "peerDependencies": {
-        "@csstools/css-tokenizer": "^4.0.0"
+        "@csstools/css-tokenizer": "^4.0.2"
       }
     },
     "node_modules/@csstools/css-syntax-patches-for-csstree": {
-      "version": "1.1.7",
-      "resolved": 
"https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.7.tgz";,
-      "integrity": 
"sha512-fQ+05118eQS1cofO3aJpB5efgpBZMvIzwr/sbC8kDLVA5XLG8q1kJV5yzrUAI1f7lvhPnm8fgIjzFB8/O/5Dig==",
+      "version": "1.1.15",
+      "resolved": 
"https://registry.npmjs.org/@csstools/css-syntax-patches-for-csstree/-/css-syntax-patches-for-csstree-1.1.15.tgz";,
+      "integrity": 
"sha512-J0u7HkVl2nzSlhsiTOp4AmwcUQ3D+mGEEKfBy/7To5/y7F2OHwyLrXfrhR0SMgr4p5Lo+eaMVSeai24zUcBIxA==",
       "dev": true,
       "funding": [
         {
@@ -193,9 +193,9 @@
       }
     },
     "node_modules/@csstools/css-tokenizer": {
-      "version": "4.0.0",
-      "resolved": 
"https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.0.tgz";,
-      "integrity": 
"sha512-QxULHAm7cNu72w97JUNCBFODFaXpbDg+dP8b/oWFAZ2MTRppA3U00Y2L1HqaS4J6yBqxwa/Y3nMBaxVKbB/NsA==",
+      "version": "4.0.2",
+      "resolved": 
"https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-4.0.2.tgz";,
+      "integrity": 
"sha512-OoKoR0f76dCY666JlcbhmVTs2drYj1GUXZTYTcbUgJjh9Nv41aFfZ21bPQTERm5+L5cBDo466NltB2lplS5GBw==",
       "dev": true,
       "funding": [
         {
@@ -237,9 +237,9 @@
       }
     },
     "node_modules/@csstools/selector-resolve-nested": {
-      "version": "4.0.0",
-      "resolved": 
"https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.0.tgz";,
-      "integrity": 
"sha512-9vAPxmp+Dx3wQBIUwc1v7Mdisw1kbbaGqXUM8QLTgWg7SoPGYtXBsMXvsFs/0Bn5yoFhcktzxNZGNaUt0VjgjA==",
+      "version": "4.0.2",
+      "resolved": 
"https://registry.npmjs.org/@csstools/selector-resolve-nested/-/selector-resolve-nested-4.0.2.tgz";,
+      "integrity": 
"sha512-JpjNBJFA+4OnAHKRK4AMp8xrYyLhI9XapOeBlP2PhRU/IylSw+1ep3BFNTksBJnrTS3KT6kqKNVfpzLLwZUW5Q==",
       "dev": true,
       "funding": [
         {
@@ -824,9 +824,9 @@
       "license": "MIT"
     },
     "node_modules/colord": {
-      "version": "2.9.3",
-      "resolved": "https://registry.npmjs.org/colord/-/colord-2.9.3.tgz";,
-      "integrity": 
"sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==",
+      "version": "2.10.0",
+      "resolved": "https://registry.npmjs.org/colord/-/colord-2.10.0.tgz";,
+      "integrity": 
"sha512-AidJptpBJmjTclAp9BkLwJi0T93fo5epJnbaZslpg6QVzpHjAiveF55mE9AcUJiGMqRHgMDY8soMsQtuNYMHfw==",
       "dev": true,
       "license": "MIT"
     },
@@ -1719,9 +1719,9 @@
       }
     },
     "node_modules/fastq": {
-      "version": "1.20.1",
-      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.1.tgz";,
-      "integrity": 
"sha512-GGToxJ/w1x32s/D2EKND7kTil4n8OVk/9mycTc4VDza13lOvpUZTGX3mFSCtV9ksdGBVzvsyAVLM6mHFThxXxw==",
+      "version": "1.20.3",
+      "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.20.3.tgz";,
+      "integrity": 
"sha512-XKv5nnLs6nLF71NgiKJLIZFLkPyIEuOselLG7ujZnGrRfQK8HpvY+WqKhAJUAdLomwVHErVS4LfxFlPq0/FTAw==",
       "dev": true,
       "license": "ISC",
       "dependencies": {
@@ -2907,9 +2907,9 @@
       "license": "ISC"
     },
     "node_modules/stylelint": {
-      "version": "17.14.1",
-      "resolved": 
"https://registry.npmjs.org/stylelint/-/stylelint-17.14.1.tgz";,
-      "integrity": 
"sha512-xVQwyiuxALUBNB2fBe0tmNemg9KqLtdj3T64mioFDar79B2cU8LIyz+3KL6LdiHs9NkeNfwxpKSaIVOY8f112g==",
+      "version": "17.16.0",
+      "resolved": 
"https://registry.npmjs.org/stylelint/-/stylelint-17.16.0.tgz";,
+      "integrity": 
"sha512-ejlWnbJ13x1GU32+zZXa6sYQJsKKkwSdv2B4rAdO3OWdEmvhSJKcXi5pOphQYSzyaj1kXpuGJr7pcMBNfDIuPw==",
       "dev": true,
       "funding": [
         {
@@ -2923,14 +2923,14 @@
       ],
       "license": "MIT",
       "dependencies": {
-        "@csstools/css-calc": "^3.2.1",
+        "@csstools/css-calc": "^3.3.0",
         "@csstools/css-parser-algorithms": "^4.0.0",
-        "@csstools/css-syntax-patches-for-csstree": "^1.1.6",
+        "@csstools/css-syntax-patches-for-csstree": "^1.1.9",
         "@csstools/css-tokenizer": "^4.0.0",
         "@csstools/media-query-list-parser": "^5.0.0",
-        "@csstools/selector-resolve-nested": "^4.0.0",
+        "@csstools/selector-resolve-nested": "^4.0.1",
         "@csstools/selector-specificity": "^6.0.0",
-        "colord": "^2.9.3",
+        "colord": "^2.10.0",
         "cosmiconfig": "^9.0.2",
         "css-functions-list": "^3.3.3",
         "css-tree": "^3.2.1",
@@ -2939,21 +2939,21 @@
         "fastest-levenshtein": "^1.0.16",
         "file-entry-cache": "^11.1.5",
         "global-modules": "^2.0.0",
-        "globby": "^16.2.1",
+        "globby": "^16.2.4",
         "globjoin": "^0.1.4",
         "html-tags": "^5.1.0",
-        "ignore": "^7.0.5",
+        "ignore": "^7.0.6",
         "import-meta-resolve": "^4.2.0",
         "mathml-tag-names": "^4.0.0",
         "meow": "^14.1.0",
         "micromatch": "^4.0.8",
         "normalize-path": "^3.0.0",
         "picocolors": "^1.1.1",
-        "postcss": "^8.5.16",
+        "postcss": "^8.5.26",
         "postcss-safe-parser": "^7.0.1",
-        "postcss-selector-parser": "^7.1.4",
+        "postcss-selector-parser": "^7.1.5",
         "postcss-value-parser": "^4.2.0",
-        "string-width": "^8.2.1",
+        "string-width": "^8.2.2",
         "supports-hyperlinks": "^4.5.0",
         "svg-tags": "^1.0.0",
         "table": "^6.9.0",
@@ -3125,9 +3125,9 @@
       }
     },
     "node_modules/stylelint/node_modules/ignore": {
-      "version": "7.0.5",
-      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.5.tgz";,
-      "integrity": 
"sha512-Hs59xBNfUIunMFgWAbGX5cq6893IbWg4KnrjbYwX3tx0ztorVgTDA6B2sxf8ejHJ4wz8BqGUMYlnzNBer5NvGg==",
+      "version": "7.0.12",
+      "resolved": "https://registry.npmjs.org/ignore/-/ignore-7.0.12.tgz";,
+      "integrity": 
"sha512-/8UvqAPU9DGTI9k4mxtf49U37Isfwr8Uts96+SBHIkFxPJnHS0Ew4f00sM4Scd8V8EjM0jUNtVDdv1kPdt35lg==",
       "dev": true,
       "license": "MIT",
       "engines": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/package.json 
new/openQA-5.1792679797.1d1b53d2/package.json
--- old/openQA-5.1792607148.117af9ef/package.json       2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/package.json       2026-10-22 
16:36:37.000000000 +0200
@@ -19,7 +19,7 @@
     "eslint-plugin-prettier": "^5.5.5",
     "globals": "^17.13.0",
     "prettier": "^3.9.6",
-    "stylelint": "^17.14.1",
+    "stylelint": "^17.16.0",
     "stylelint-config-standard-scss": "^17.0.0",
     "stylelint-prettier": "^5.0.3"
   },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/t/25-cache-service.t 
new/openQA-5.1792679797.1d1b53d2/t/25-cache-service.t
--- old/openQA-5.1792607148.117af9ef/t/25-cache-service.t       2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/t/25-cache-service.t       2026-10-22 
16:36:37.000000000 +0200
@@ -94,6 +94,8 @@
         wait_for_or_bail_out { 
$cache_client->status($asset_request)->is_processed } 'asset';
     }
     ok $cache_client->asset_exists('localhost', $asset), "Asset $asset 
downloaded";
+    is sprintf('%04o', (stat $cache_client->asset_path('localhost', 
$asset))[2] & 07777), '0644',
+      "Asset $asset has 0644 permissions";
     ok $asset_request->minion_id, 'Minion job id recorded in the request 
object' or die always_explain $asset_request;
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/t/25-cache.t 
new/openQA-5.1792679797.1d1b53d2/t/25-cache.t
--- old/openQA-5.1792607148.117af9ef/t/25-cache.t       2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/t/25-cache.t       2026-10-22 
16:36:37.000000000 +0200
@@ -238,14 +238,17 @@
 like $cache_log, qr/Download of ".*sle-12-SP3-x86_64-0368-200.*" successful 
\([\d\.]+ \w+\/s\), new cache size is 1024/,
   'Full download logged';
 like $cache_log, qr/Size of .* is 1024 Byte, with ETag "andi \$a3, \$t1, 
41399"/, 'Etag and size are logged';
-ok -e $cachedir->child($host, '[email protected]'), 
'Asset exist in cache';
-is $cache->asset($cachedir->child($host, 
'[email protected]')->to_string)->{pending}, 0,
-  'Pending flag unset after download';
+ok -e (my $cached_asset = $cachedir->child($host, 
'[email protected]')), 'Asset exist in cache';
+is sprintf('%04o', (stat $cached_asset)[2] & 07777), '0644', 'Cached asset has 
0644 permissions';
+is $cache->asset($cached_asset->to_string)->{pending}, 0, 'Pending flag unset 
after download';
 $cache_log = '';
 
+chmod 0600, $cached_asset;
 $cache->get_asset($host, {id => 922756}, 'hdd', 
'[email protected]');
 like $cache_log, qr/Downloading "sle-12-SP3-x86_64-0368-200\@64bit.qcow2" 
from/, 'Asset download attempt';
 like $cache_log, qr/Content of ".*0368-200\@64bit.qcow2" has not changed, 
updating last use/, 'Content has not changed';
+is sprintf('%04o', (stat $cached_asset)[2] & 07777), '0644',
+  'Cached asset permissions updated to 0644 on unchanged check';
 $cache_log = '';
 
 $cache->get_asset($host, {id => 922756}, 'hdd', 
'[email protected]');
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/t/31-client.t 
new/openQA-5.1792679797.1d1b53d2/t/31-client.t
--- old/openQA-5.1792607148.117af9ef/t/31-client.t      2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/t/31-client.t      2026-10-22 
16:36:37.000000000 +0200
@@ -9,13 +9,10 @@
 
 use Test::Mojo;
 use Test::MockModule;
-use Test::MockObject;
 use Test::Mock::Time;
 use Test::Output;
 use Test::Warnings ':report_warnings';
 use OpenQA::Client;
-use OpenQA::WebAPI;
-use OpenQA::Test::Case;
 use OpenQA::Test::FakeWorker;
 use OpenQA::Scheduler::Client;
 use OpenQA::WebSockets::Client;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/t/31-client_file.t 
new/openQA-5.1792679797.1d1b53d2/t/31-client_file.t
--- old/openQA-5.1792607148.117af9ef/t/31-client_file.t 2026-10-21 
20:25:48.000000000 +0200
+++ new/openQA-5.1792679797.1d1b53d2/t/31-client_file.t 1970-01-01 
01:00:00.000000000 +0100
@@ -1,197 +0,0 @@
-#!/usr/bin/env perl
-# Copyright SUSE LLC
-# SPDX-License-Identifier: GPL-2.0-or-later
-
-use Test::Most;
-use Mojo::Base -signatures;
-use Test::Warnings ':report_warnings';
-
-use FindBin;
-use lib "$FindBin::Bin/lib", 
"$FindBin::Bin/../external/os-autoinst-common/lib";
-use OpenQA::Client;
-use OpenQA::File;
-use Digest::SHA 'sha1_base64';
-use Mojo::File qw(path tempfile tempdir);
-use OpenQA::Test::TimeLimit '15';
-
-sub file_path (@args) { OpenQA::File->new(file => path(@args)) }
-
-subtest 'base' => sub {
-    my $file = file_path($FindBin::Bin, 'data', 'ltp_test_result_format.json');
-    ok $file->end;
-    $file->read;
-    my $content = $file->content();
-    $file->encode_content();
-    isnt $file->content(), $content or die always_explain $file;
-    $file->decode_content();
-    is $file->content(), $content, 'decoded content match to original one' or 
die 'Horrible thing would happen';
-};
-
-subtest 'split/join' => sub {
-    my $size = file_path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->size;
-
-    is $size, 6991, 'size matches';
-
-    is OpenQA::File::_chunk_size(20, 10), 2, 'calculated chunk match';
-    is OpenQA::File::_chunk_size(21, 10), 3;
-    is OpenQA::File::_chunk_size(29, 10), 3;
-    is OpenQA::File::_chunk_size(30, 10), 3;
-    is OpenQA::File::_chunk_size(31, 10), 4;
-
-    my $pieces = file_path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->split(2000);
-
-    is $pieces->last->end, $size, 'Last piece end must match with size';
-
-    is $pieces->join(), path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp, 'Content match'
-      or die always_explain $pieces;
-
-    is $pieces->generate_sum(), sha1_base64(path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp),
-      'SHA-1 match'
-      or die always_explain $pieces;
-
-    my $t_file = tempfile();
-    $pieces->write($t_file);
-
-    is $t_file->slurp, path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp,
-      'Composed content is same as original'
-      or die always_explain $pieces;
-
-    my @serialized = $pieces->serialize();
-    is scalar @serialized, $pieces->size(), 'Serialized number of files match';
-    # Send over the net ..
-    my $des_pieces = OpenQA::Files->deserialize(@serialized);    #recompose
-
-
-    is_deeply $des_pieces, $pieces or die always_explain $des_pieces;
-
-    is $des_pieces->join(), path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp, 'Content match'
-      or die always_explain $des_pieces;
-
-    is $des_pieces->generate_sum(),
-      sha1_base64(path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp), 'SHA-1 match'
-      or die always_explain $des_pieces;
-
-    ok $des_pieces->is_sum(sha1_base64(path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp));
-};
-
-
-subtest 'recompose in-place' => sub {
-    my $original = file_path($FindBin::Bin, 'data', 
'ltp_test_result_format.json');
-
-    my $pieces = $original->split(103);
-
-    my $t_dir = tempdir();
-    my $copied_file = tempfile();
-
-
-    # Save pieces to disk
-    $_->prepare && Mojo::File->new($t_dir, $_->index)->spew($_->serialize) for 
$pieces->each();
-    #$pieces->prepare(); it will call prepare for each one
-
-    is $t_dir->list_tree->size, $pieces->last->total;
-
-    # Write piece-by-piece to another file.
-    $t_dir->list_tree->shuffle->each(
-        sub {
-            my $chunk = OpenQA::File->deserialize(path($_)->slurp);
-            $chunk->decode_content;
-            $chunk->write_content($copied_file);
-        });
-
-    my $sha;
-    $t_dir->list_tree->shuffle->each(
-        sub {
-            my $chunk = OpenQA::File->deserialize(path($_)->slurp);
-            $chunk->decode_content;
-            is $chunk->verify_content($copied_file), 1, 'chunk: ' . 
$chunk->index . ' verified';
-            $sha = $chunk->total_cksum;
-        });
-
-    is $sha, OpenQA::File->file_digest($copied_file->to_string), 'SHA-1 
Matches';
-
-    is $original->file->slurp, path($copied_file)->slurp, 'Same content';
-
-    $pieces->first->content('42')->write_content($copied_file);    #Let's 
simulate a writing error
-    isnt $sha, sha1_base64(path($copied_file)->slurp), 'SHA-1 Are not matching 
anymore';
-    isnt $original->file->slurp, path($copied_file)->slurp, 'Not same content';
-
-    my $chunk = 
OpenQA::File->deserialize(path($t_dir->list_tree->first)->slurp);
-    ok !$chunk->verify_content($copied_file), 'chunk NOT verified';
-};
-
-subtest 'prepare_chunks' => sub {
-    my $original = file_path($FindBin::Bin, 'data', 
'ltp_test_result_format.json');
-
-    my $pieces = $original->split(10);
-
-    $pieces->prepare;
-
-    ok $_->cksum, 'Checksum present for ' . $_->index for $pieces->each;
-};
-
-subtest 'verify_chunks' => sub {
-    my $original = file_path($FindBin::Bin, 'data', 
'ltp_test_result_format.json');
-
-    my $pieces = $original->split(100000);
-
-    my $t_dir = tempdir();
-    my $copied_file = tempfile();
-
-    # Save pieces to disk
-    $pieces->spew($t_dir);
-
-    is $t_dir->list_tree->size, $pieces->last->total;
-
-    OpenQA::Files->write_chunks($t_dir => $copied_file);
-
-    is +OpenQA::Files->verify_chunks($t_dir => $copied_file), undef, 'Verify 
chunks passes';
-    $copied_file->spew('');
-
-    is +OpenQA::Files->verify_chunks($t_dir => $copied_file)->message(),
-      'Can\'t verify written data from chunk',
-      'Cannot verify chunks passes';
-    is $copied_file->slurp, '', 'File is empty now';
-
-    is +OpenQA::Files->write_verify_chunks($t_dir => $copied_file), undef, 
'Write and verify passes';
-
-    is $original->file->slurp, path($copied_file)->slurp, 'Same content';
-
-    $pieces->first->content('42')->write_content($copied_file);    #Let's 
simulate a writing error
-    like +OpenQA::Files->verify_chunks($t_dir => $copied_file),
-      qr/^Can't verify written data from chunk/,
-      'Verify chunks fail';
-    isnt $original->file->slurp, path($copied_file)->slurp, 'Not same content';
-};
-
-sub compare ($file, $chunk_size) {
-    my $original = file_path($FindBin::Bin, 'data', $file);
-    my $pieces = $original->split($chunk_size);
-
-    is OpenQA::File::_chunk_size($original->size, $chunk_size), $pieces->size, 
'Size and pieces matches!';
-
-    for my $i (1 .. $pieces->size) {
-        my $piece = $original->get_piece($i => $chunk_size);
-        my $from_split = $pieces->get($i - 1);
-        is_deeply $piece, $from_split, 'Structs are matching';
-
-        $piece->prepare();
-        $from_split->prepare();
-
-        ok $piece->verify_content($original->file->to_string), 'Chunk 
verified';
-        ok $from_split->verify_content($original->file->to_string), 'Chunk 
verified';
-
-        is_deeply $piece, $from_split, 'Structs are matching after prepare()';
-    }
-}
-
-subtest 'get_piece' => sub {
-    my $file = 'ltp_test_result_format.json';
-    my $size = file_path($FindBin::Bin, 'data', $file)->size;
-
-    compare($file => 1);
-    compare($file => 10);
-    compare($file => 21);
-    compare($file => $size);
-};
-
-done_testing();
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/openQA-5.1792607148.117af9ef/t/47-openqa-file.t 
new/openQA-5.1792679797.1d1b53d2/t/47-openqa-file.t
--- old/openQA-5.1792607148.117af9ef/t/47-openqa-file.t 1970-01-01 
01:00:00.000000000 +0100
+++ new/openQA-5.1792679797.1d1b53d2/t/47-openqa-file.t 2026-10-22 
16:36:37.000000000 +0200
@@ -0,0 +1,162 @@
+#!/usr/bin/env perl
+# Copyright SUSE LLC
+# SPDX-License-Identifier: GPL-2.0-or-later
+
+use Test::Most;
+use Mojo::Base -signatures;
+use Test::Warnings ':report_warnings';
+
+use FindBin;
+use lib "$FindBin::Bin/lib", 
"$FindBin::Bin/../external/os-autoinst-common/lib";
+use OpenQA::File;
+use Digest::SHA 'sha1_base64';
+use Mojo::File qw(path tempfile tempdir);
+use OpenQA::Test::TimeLimit '15';
+
+sub file_path (@args) { OpenQA::File->new(file => path(@args)) }
+
+subtest 'base' => sub {
+    my $file = file_path($FindBin::Bin, 'data', 'ltp_test_result_format.json');
+    ok $file->end;
+    $file->read;
+    my $content = $file->content();
+    $file->encode_content();
+    isnt $file->content(), $content or die always_explain $file;
+    $file->decode_content();
+    is $file->content(), $content, 'decoded content match to original one' or 
die 'Horrible thing would happen';
+};
+
+subtest 'split/join' => sub {
+    my $size = file_path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->size;
+
+    is $size, 6991, 'size matches';
+
+    is OpenQA::File::_chunk_size(20, 10), 2, 'calculated chunk match';
+    is OpenQA::File::_chunk_size(21, 10), 3;
+    is OpenQA::File::_chunk_size(29, 10), 3;
+    is OpenQA::File::_chunk_size(30, 10), 3;
+    is OpenQA::File::_chunk_size(31, 10), 4;
+
+    my $pieces = file_path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->split(2000);
+
+    is $pieces->last->end, $size, 'Last piece end must match with size';
+
+    is $pieces->join(), path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp, 'Content match'
+      or die always_explain $pieces;
+
+    is $pieces->generate_sum(), sha1_base64(path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp),
+      'SHA-1 match'
+      or die always_explain $pieces;
+
+    my $t_file = tempfile();
+    $pieces->write($t_file);
+
+    is $t_file->slurp, path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp,
+      'Composed content is same as original'
+      or die always_explain $pieces;
+
+    my @serialized = $pieces->serialize();
+    is scalar @serialized, $pieces->size(), 'Serialized number of files match';
+    # Send over the net ..
+    my $des_pieces = OpenQA::Files->deserialize(@serialized);    #recompose
+
+
+    is_deeply $des_pieces, $pieces or die always_explain $des_pieces;
+
+    is $des_pieces->join(), path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp, 'Content match'
+      or die always_explain $des_pieces;
+
+    is $des_pieces->generate_sum(),
+      sha1_base64(path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp), 'SHA-1 match'
+      or die always_explain $des_pieces;
+
+    ok $des_pieces->is_sum(sha1_base64(path($FindBin::Bin, 'data', 
'ltp_test_result_format.json')->slurp));
+};
+
+
+subtest 'recompose in-place' => sub {
+    my $original = file_path($FindBin::Bin, 'data', 
'ltp_test_result_format.json');
+
+    my $pieces = $original->split(103);
+
+    my $t_dir = tempdir();
+    my $copied_file = tempfile();
+
+
+    # Save pieces to disk
+    $_->prepare && Mojo::File->new($t_dir, $_->index)->spew($_->serialize) for 
$pieces->each();
+    #$pieces->prepare(); it will call prepare for each one
+
+    is $t_dir->list_tree->size, $pieces->last->total;
+
+    # Write piece-by-piece to another file.
+    $t_dir->list_tree->shuffle->each(
+        sub {
+            my $chunk = OpenQA::File->deserialize(path($_)->slurp);
+            $chunk->decode_content;
+            $chunk->write_content($copied_file);
+        });
+
+    my $sha;
+    $t_dir->list_tree->shuffle->each(
+        sub {
+            my $chunk = OpenQA::File->deserialize(path($_)->slurp);
+            $chunk->decode_content;
+            is $chunk->verify_content($copied_file), 1, 'chunk: ' . 
$chunk->index . ' verified';
+            $sha = $chunk->total_cksum;
+        });
+
+    is $sha, OpenQA::File->file_digest($copied_file->to_string), 'SHA-1 
Matches';
+
+    is $original->file->slurp, path($copied_file)->slurp, 'Same content';
+
+    $pieces->first->content('42')->write_content($copied_file);    #Let's 
simulate a writing error
+    isnt $sha, sha1_base64(path($copied_file)->slurp), 'SHA-1 Are not matching 
anymore';
+    isnt $original->file->slurp, path($copied_file)->slurp, 'Not same content';
+
+    my $chunk = 
OpenQA::File->deserialize(path($t_dir->list_tree->first)->slurp);
+    ok !$chunk->verify_content($copied_file), 'chunk NOT verified';
+};
+
+subtest 'prepare_chunks' => sub {
+    my $original = file_path($FindBin::Bin, 'data', 
'ltp_test_result_format.json');
+
+    my $pieces = $original->split(10);
+
+    $pieces->prepare;
+
+    ok $_->cksum, 'Checksum present for ' . $_->index for $pieces->each;
+};
+
+sub compare ($file, $chunk_size) {
+    my $original = file_path($FindBin::Bin, 'data', $file);
+    my $pieces = $original->split($chunk_size);
+
+    is OpenQA::File::_chunk_size($original->size, $chunk_size), $pieces->size, 
'Size and pieces matches!';
+
+    for my $i (1 .. $pieces->size) {
+        my $piece = $original->get_piece($i => $chunk_size);
+        my $from_split = $pieces->get($i - 1);
+        is_deeply $piece, $from_split, 'Structs are matching';
+
+        $piece->prepare();
+        $from_split->prepare();
+
+        ok $piece->verify_content($original->file->to_string), 'Chunk 
verified';
+        ok $from_split->verify_content($original->file->to_string), 'Chunk 
verified';
+
+        is_deeply $piece, $from_split, 'Structs are matching after prepare()';
+    }
+}
+
+subtest 'get_piece' => sub {
+    my $file = 'ltp_test_result_format.json';
+    my $size = file_path($FindBin::Bin, 'data', $file)->size;
+
+    compare($file => 1);
+    compare($file => 10);
+    compare($file => 21);
+    compare($file => $size);
+};
+
+done_testing();

++++++ openQA.obsinfo ++++++
--- /var/tmp/diff_new_pack.DuUWLa/_old  2026-10-23 20:29:46.110280526 +0200
+++ /var/tmp/diff_new_pack.DuUWLa/_new  2026-10-23 20:29:46.113280652 +0200
@@ -1,5 +1,5 @@
 name: openQA
-version: 5.1792607148.117af9ef
-mtime: 1792607148
-commit: 117af9ef0fc009cf9afa792d2e3915730183000f
+version: 5.1792679797.1d1b53d2
+mtime: 1792679797
+commit: 1d1b53d26d29215398b1928f21c7ade1434e5313
 

Reply via email to