From a05b64d677820d658a3adbd24a12c8f1f5e99727 Mon Sep 17 00:00:00 2001 From: HexLab98 Date: Sun, 5 Jul 2026 14:12:23 -0700 Subject: [PATCH] test(setup): blank-slate disabled list must not overlap kept tools MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Overlap-invariant regression test from PR #58686 — no toolset in the blank-slate disabled_toolsets may share a tool with a kept toolset, since the subtraction happens at tool granularity (#57315, #58281). --- tests/hermes_cli/test_setup_blank_slate.py | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/tests/hermes_cli/test_setup_blank_slate.py b/tests/hermes_cli/test_setup_blank_slate.py index b4afd3e138e..54722febea7 100644 --- a/tests/hermes_cli/test_setup_blank_slate.py +++ b/tests/hermes_cli/test_setup_blank_slate.py @@ -45,6 +45,25 @@ class TestBlankSlateMinimalToolsets: disabled = set(cfg["agent"]["disabled_toolsets"]) assert "coding" not in disabled + def test_no_disabled_bundle_overlaps_kept_tools(self): + """Invariant: ``disabled_toolsets`` is applied at *tool* granularity and + a single tool can belong to several toolsets, so no disabled entry may + share a tool with a kept toolset — it would silently strip that tool + from the blank-slate agent (#57315, #58281). + """ + from toolsets import resolve_toolset + cfg = {} + _blank_slate_minimal_toolsets(cfg) + kept_tools = set() + for ts in cfg["platform_toolsets"]["cli"]: + kept_tools.update(resolve_toolset(ts)) + for ts in cfg["agent"]["disabled_toolsets"]: + overlap = set(resolve_toolset(ts)) & kept_tools + assert not overlap, ( + f"disabled toolset '{ts}' overlaps kept tools {sorted(overlap)}; " + "it would silently strip them from the blank-slate agent" + ) + def test_resolver_yields_exactly_file_and_terminal(self): from hermes_cli.tools_config import _get_platform_tools cfg = {}