Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package skillspector for openSUSE:Factory 
checked in at 2026-08-30 19:08:22
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/skillspector (Old)
 and      /work/SRC/openSUSE:Factory/.skillspector.new.1265 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "skillspector"

Sun Aug 30 19:08:22 2026 rev:6 rq:1374666 version:2.11.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/skillspector/skillspector.changes        
2026-08-27 18:56:08.486608051 +0200
+++ /work/SRC/openSUSE:Factory/.skillspector.new.1265/skillspector.changes      
2026-08-30 19:08:30.350648280 +0200
@@ -1,0 +2,31 @@
+Sun Aug 30 08:09:19 UTC 2026 - Martin Pluskal <[email protected]>
+
+- Update to version 2.11.0:
+  * Analyse bundled execution surfaces: hooks/hooks.json and
+    .claude/settings*.json now yield BH1 (hooks can execute), BH2 (proven
+    remote transfer of sensitive content) and BH3 (broad or ignored
+    permission modes) findings
+  * Resolve exact npm versions from package-lock.json and
+    npm-shrinkwrap.json (formats 1-3) instead of manifest ranges
+  * Add SKILLSPECTOR_TEMPERATURE and SKILLSPECTOR_SEED sampling controls,
+    keeping provider defaults when unset
+  * Traverse path ancestors with O_PATH so restricted sandboxes need only
+    search permission on them
+  * Drop the nominal MP3/P6 false positives without weakening directive
+    detection
+  * Resolve the model default from the provider that actually builds the
+    chat model on the OpenAI fallback path
+- New dependencies python-pywhatwgurl and python-regex for the
+  bundled-execution-surface analyzer; upstream pins both exactly, floors
+  only here because Factory already ships newer
+- Re-select test_dense_directory_discovery_and_cache_complete_with_...:
+  the O_PATH traversal took it from 19.7 s to 1.7 s, back inside its own
+  5 s ceiling
+- Deselect the four test_bundled_execution_surface_acceptance.py tests
+  that shell out to /usr/bin/skillspector, which only an editable dev
+  install provides, and the malformed_schema case of
+  test_discovery_parser_bounds_and_ledger_table, where Factory's
+  pywhatwgurl 0.1.2 parses two invalid punycode hosts that upstream's
+  pinned 0.1.1 rejects
+
+-------------------------------------------------------------------

Old:
----
  skillspector-2.10.0.tar.gz

New:
----
  skillspector-2.11.0.tar.gz

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

Other differences:
------------------
++++++ skillspector.spec ++++++
--- /var/tmp/diff_new_pack.gXutzA/_old  2026-08-30 19:08:31.175676825 +0200
+++ /var/tmp/diff_new_pack.gXutzA/_new  2026-08-30 19:08:31.177676894 +0200
@@ -21,7 +21,7 @@
 # %%{primary_python} so it stays correct as the primary interpreter moves.
 %define pythons %{primary_python}
 Name:           skillspector
-Version:        2.10.0
+Version:        2.11.0
 Release:        0
 Summary:        Security scanner for AI agent skills
 License:        Apache-2.0
@@ -50,6 +50,12 @@
 BuildRequires:  %{python_module pydantic >= 2.11.7}
 BuildRequires:  %{python_module pytest-asyncio}
 BuildRequires:  %{python_module pytest}
+# New in 2.11.0 (bundled_execution_surface analyzer): WHATWG URL parsing and
+# \p{...} classes stdlib re lacks. Upstream pins both exactly; Factory already
+# ships newer, so floors only -- an `=` is unresolvable the moment either 
bumps.
+# The in-tree BiDi check is additive, so it stays correct on pywhatwgurl > 
0.1.1.
+BuildRequires:  %{python_module pywhatwgurl >= 0.1.1}
+BuildRequires:  %{python_module regex >= 2026.5.9}
 BuildRequires:  %{python_module rich >= 14.0.0}
 BuildRequires:  %{python_module typer >= 0.16.0}
 BuildRequires:  %{python_module wheel}
@@ -69,6 +75,8 @@
 Requires:       %{primary_python}-openai >= 2.25.0
 Requires:       %{primary_python}-packaging >= 24.0
 Requires:       %{primary_python}-pydantic >= 2.11.7
+Requires:       %{primary_python}-pywhatwgurl >= 0.1.1
+Requires:       %{primary_python}-regex >= 2026.5.9
 Requires:       %{primary_python}-rich >= 14.0.0
 # Upstream caps typer < 0.24 to avoid a click clash with semgrep; that cap is
 # environment-specific (Factory ships typer 0.27), so only the floor is
@@ -123,50 +131,52 @@
 # test_input_handler_ssrf.py plus three equivalents added upstream in
 # test_input_handler.py.
 #
-# test_mcp_stdio_initialize_registers_scan_skill re-execs "python -m
-# skillspector.cli mcp" with PYTHONPATH *replaced* by the source src/ 
directory.
-# The child therefore imports the module from the source tree, which carries no
-# .dist-info, and dies with "PackageNotFoundError: No package metadata was 
found
-# for skillspector" before the server ever speaks; the harness assumes an
-# editable dev install, while we install into the buildroot. Its assertion --
-# that the server registers the scan_skill tool -- is covered in-process by
-# test_build_server_registers_scan_skill, which does run here.
-#
-# Four tests added in 2.10.0 fail on aarch64 because this release's analysis
-# is slower per artifact than the ceilings those tests assume. Each was
-# re-run undeselected in this chroot on an otherwise idle machine, so these
-# are deterministic results, not contention: the timings below are pytest
-# --durations figures from that run.
-#
-# Three of them assert that an artifact was inspected to completion, but the
-# scanner enforces MAX_STATIC_ANALYSIS_SECONDS_PER_ARTIFACT = 30.0 s per
-# artifact; when analysis reaches that budget the inspection ledger records
+# Five tests need a console script installed next to sys.executable, i.e.
+# /usr/bin/skillspector, which only an editable dev install provides -- we
+# install into the buildroot, so they die before the CLI ever runs:
+#   * test_mcp_stdio_initialize_registers_scan_skill re-execs "python -m
+#     skillspector.cli mcp" with PYTHONPATH replaced by the source src/, which
+#     carries no .dist-info, so it dies with PackageNotFoundError. Its
+#     assertion is covered in-process by
+#     test_build_server_registers_scan_skill.
+#   * the four in test_bundled_execution_surface_acceptance.py resolve
+#     Path(sys.executable).with_name("skillspector") and get
+#     FileNotFoundError. The remaining eight tests in that file drive the same
+#     analyzer in-process and do run.
+#
+# test_discovery_parser_bounds_and_ledger_table[malformed_schema] expects the
+# invalid punycode hosts xn--a.com (decodes to U+0080) and xn--drf7t.example
+# (leading combining mark) to be rejected by domain-to-ASCII. Upstream pins
+# pywhatwgurl==0.1.1, which rejects both; Factory ships 0.1.2, which parses
+# them, so two extra BH1 findings appear. That is over-reporting on a
+# malformed host, not missed detection, and the other four cases of this
+# parametrization still run.
+#
+# Three tests assert an artifact was inspected to completion, but the scanner
+# enforces MAX_STATIC_ANALYSIS_SECONDS_PER_ARTIFACT = 30.0 s per artifact; on
+# aarch64 each one reaches that budget, so the inspection ledger records
 # outcome=partial / reason_code=runtime_limit and the completeness assertion
 # can no longer hold. That is the fail-closed bound doing its job, not a
-# regression in what the scanner detects:
-#   * test_five_megabyte_... (5 MB artifact) -- 30.07 s, pinned exactly at the
-#     budget; observed_seconds 30.047 against limit_seconds 30.0. The memory
-#     property this test exists for still holds (peak 2.1 MiB against its own
-#     64 MiB ceiling); only its "completed" assertion fails.
-#   * test_rd04_... and test_nine_case_... (~1.26 MB fixture) -- 33 s and 34 s.
-#     The first sees only 2 of its 4 window markers, the second reports
-#     is_complete=False; both are the same truncation.
-# Note test_cross_window_separator_pair_across_public_surfaces (~512 KB) is
-# NOT deselected: it was verified to pass here, so it stays in the suite.
-#
-# The fourth, test_dense_directory_discovery_..., asserts elapsed < 5.0 s to
-# walk and cache 256 one-byte files, and measures 19.73 s -- about 77 ms per
-# one-byte file. 2.10.0 moved nested-artifact inspection, artifact
-# classification and reference resolution into that path, so the ceiling does
-# not hold on this architecture; upstream CI does not see it.
+# regression in what the scanner detects. Re-measured undeselected in this
+# chroot on an idle host, pytest --durations:
+#   * test_five_megabyte_... (5 MB artifact) -- 30.03 s, pinned exactly at the
+#     budget. The memory property this test exists for still holds (peak
+#     2.1 MiB against its own 64 MiB ceiling); only "completed" fails.
+#   * test_rd04_... 31.55 s and test_nine_case_... 31.70 s (~1.26 MB fixture)
+#     -- the same truncation.
+# Note test_cross_window_separator_pair_across_public_surfaces (~512 KB, 84 s)
+# is NOT deselected: it asserts no completeness bound and passes here.
+# test_dense_directory_discovery_... is no longer deselected either -- 2.11.0's
+# O_PATH ancestor traversal took it from 19.73 s to 1.68 s against its own
+# 5.0 s ceiling.
 #
 # Deselecting keeps the build gate meaningful without hiding a detection
 # failure: the same resource bounds are asserted deterministically by the
 # tests that monkeypatch the budget rather than racing it (e.g.
 # test_static_runtime_limit_is_reported_as_partial,
 # test_static_output_limit_is_reported_as_partial, and the build_context
-# deadline tests), and those do run. Worth reporting upstream.
-%pytest --deselect 
tests/unit/test_mcp_server.py::test_mcp_stdio_initialize_registers_scan_skill 
--deselect 
tests/unit/test_input_handler_ssrf.py::TestGitCloneSSRF::test_github_url_allowed
 --deselect 
tests/unit/test_input_handler_ssrf.py::TestGitCloneSSRF::test_gitlab_url_allowed
 --deselect 
tests/unit/test_input_handler_ssrf.py::TestDownloadSSRF::test_raw_githubusercontent_allowed
 --deselect 
tests/unit/test_input_handler_ssrf.py::TestDownloadSSRF::test_download_does_not_follow_redirects
 --deselect 
tests/unit/test_input_handler.py::test_validate_url_host_scp_extracts_github 
--deselect tests/unit/test_input_handler.py::test_scp_valid_host_clones 
--deselect tests/unit/test_input_handler.py::test_https_url_unchanged 
--deselect 
tests/nodes/test_security_end_to_end.py::test_rd04_large_file_pair_detects_start_boundary_and_end
 --deselect 
tests/nodes/test_security_end_to_end.py::test_nine_case_contract_across_public_surfaces
 --deselect tests/nodes/test_security_remediation.py::test_five_mega
 byte_normalized_static_scan_stays_below_memory_ceiling --deselect 
tests/nodes/test_build_context.py::test_dense_directory_discovery_and_cache_complete_with_modest_real_elapsed_time
+# deadline tests), and those do run.
+%pytest --deselect 
tests/unit/test_mcp_server.py::test_mcp_stdio_initialize_registers_scan_skill 
--deselect 
tests/unit/test_input_handler_ssrf.py::TestGitCloneSSRF::test_github_url_allowed
 --deselect 
tests/unit/test_input_handler_ssrf.py::TestGitCloneSSRF::test_gitlab_url_allowed
 --deselect 
tests/unit/test_input_handler_ssrf.py::TestDownloadSSRF::test_raw_githubusercontent_allowed
 --deselect 
tests/unit/test_input_handler_ssrf.py::TestDownloadSSRF::test_download_does_not_follow_redirects
 --deselect 
tests/unit/test_input_handler.py::test_validate_url_host_scp_extracts_github 
--deselect tests/unit/test_input_handler.py::test_scp_valid_host_clones 
--deselect tests/unit/test_input_handler.py::test_https_url_unchanged 
--deselect 
"tests/nodes/analyzers/test_bundled_execution_surface.py::test_discovery_parser_bounds_and_ledger_table[malformed_schema]"
 --deselect 
tests/test_bundled_execution_surface_acceptance.py::test_public_cli_exit_contract
 --deselect tests/test_bundled_execution_surface_
 
acceptance.py::test_recursive_single_child_routes_execution_surfaces_from_child_root
 --deselect 
tests/test_bundled_execution_surface_acceptance.py::test_cli_fail_on_incomplete_is_opt_in
 --deselect 
tests/nodes/test_security_end_to_end.py::test_rd04_large_file_pair_detects_start_boundary_and_end
 --deselect 
tests/nodes/test_security_end_to_end.py::test_nine_case_contract_across_public_surfaces
 --deselect 
tests/nodes/test_security_remediation.py::test_five_megabyte_normalized_static_scan_stays_below_memory_ceiling
 
 %files
 %license LICENSE

++++++ skillspector-2.10.0.tar.gz -> skillspector-2.11.0.tar.gz ++++++
++++ 6208 lines of diff (skipped)

Reply via email to