From 9980cfaa616bf1273b754c7c281a2cdfeceae600 Mon Sep 17 00:00:00 2001
From: Jothi Mani Rajendran
<250249270+jothimani-rajendran@users.noreply.github.com>
Date: Sat, 17 Oct 2026 23:30:30 +0000
Subject: [PATCH] feat(vendors): Copilot CLI witness on vscode_copilot's
loads_claude_plugins (CC-2b)
vscode_copilot's loads_claude_plugins row gains `witnessed` for the Copilot
CLI surface only: GitHub Copilot CLI 1.0.98 on Windows 11, 2026-10-17, plugin
installed with `copilot plugin install
` (local path, which Copilot warns
is deprecated); guard (shell) and gate (file write) refused by preToolUse deny
(org-plan witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md at
6516f57). Its notes now read the Copilot CLI nested-deny "unknown" as settled
for those two cases; VS Code Copilot stays as recorded.
The witness test now covers every witnessed agent, not grok alone; the vendor
JSON is regenerated with tools/recount_vendor_config.py --write.
Co-Authored-By: Claude Opus 5.5
Claude-Session: https://claude.ai/code/session_017kgeWgju5ysB7LVpEcD9cF
Signed-off-by: Jothi Mani Rajendran <250249270+jothimani-rajendran@users.noreply.github.com>
---
src/agentseam/data/vendors/grok.json | 2 +-
.../data/vendors/vscode_copilot.json | 7 +--
tests/test_claude_plugins.py | 46 +++++++++++++++----
tools/recount/claude_plugins.json | 5 +-
tools/recount/sourced.py | 5 +-
5 files changed, 47 insertions(+), 18 deletions(-)
diff --git a/src/agentseam/data/vendors/grok.json b/src/agentseam/data/vendors/grok.json
index 95a6ec2..9c106f6 100644
--- a/src/agentseam/data/vendors/grok.json
+++ b/src/agentseam/data/vendors/grok.json
@@ -79,7 +79,7 @@
"loads_claude_plugins": {
"basis": "vendor-source",
"date": "2026-10-17",
- "test": "tests/test_claude_plugins.py::test_grok_carries_the_witness_and_no_other_agent_does"
+ "test": "tests/test_claude_plugins.py::test_only_the_witnessed_agents_carry_a_witness"
},
"tools": {
"basis": "vendor-docs",
diff --git a/src/agentseam/data/vendors/vscode_copilot.json b/src/agentseam/data/vendors/vscode_copilot.json
index fddc78c..7704729 100644
--- a/src/agentseam/data/vendors/vscode_copilot.json
+++ b/src/agentseam/data/vendors/vscode_copilot.json
@@ -67,7 +67,7 @@
"loads_claude_plugins": {
"basis": "vendor-source",
"date": "2026-10-17",
- "test": "tests/test_claude_plugins.py::test_each_entry_records_the_discovery_row"
+ "test": "tests/test_claude_plugins.py::test_only_the_witnessed_agents_carry_a_witness"
},
"tools": {
"basis": "vendor-docs",
@@ -148,9 +148,10 @@
"hooks": "yes",
"how": "Claude-format plugin by manifest location, from a marketplace (.claude-plugin/marketplace.json, anthropics/claude-code accepted) or chat.pluginLocations; needs chat.plugins.enabled",
"loads": "yes",
- "notes": "VS Code: the Local harness ignores matchers, so every nested command for the event runs; HSO deny and exit 2 block. Copilot CLI (chock's copilot client builds for this entry): loads yes via copilot plugin install or --plugin-dir, legacy manifest includes .claude-plugin/plugin.json, copilot plugin marketplace add anthropics/claude-code; hooks yes (hooks.json or hooks/hooks.json); payload Claude Code for PascalCase events (Claude tool names, e.g. Bash), Copilot camelCase otherwise; deny partial: exit 2 denies, flat permissionDecision documented, nested hookSpecificOutput unknown (closed source)",
+ "notes": "VS Code: the Local harness ignores matchers, so every nested command for the event runs; HSO deny and exit 2 block. Copilot CLI (chock's copilot client builds for this entry): loads yes via copilot plugin install or --plugin-dir, legacy manifest includes .claude-plugin/plugin.json, copilot plugin marketplace add anthropics/claude-code; hooks yes (hooks.json or hooks/hooks.json); payload Claude Code for PascalCase events (Claude tool names, e.g. Bash), Copilot camelCase otherwise; deny partial: exit 2 denies, flat permissionDecision documented, nested hookSpecificOutput unknown from the docs (closed source), settled by the Copilot CLI 1.0.98 witness for a shell command and a file write (see witnessed)",
"payload": "Claude-shaped snake_case, but VS Code's own Local tool names",
- "source": "microsoft/vscode-docs@ef0ca127 docs/agents/reference/agent-plugin-reference.md; Copilot CLI: github/docs@dae83f7d content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md (org-plan discovery/2026-10-17-claude-plugin-compat.md)"
+ "source": "microsoft/vscode-docs@ef0ca127 docs/agents/reference/agent-plugin-reference.md; Copilot CLI: github/docs@dae83f7d content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md (org-plan discovery/2026-10-17-claude-plugin-compat.md)",
+ "witnessed": "Copilot CLI only, not VS Code: guard (shell command) and gate (file write) refused by preToolUse deny; GitHub Copilot CLI 1.0.98 on Windows 11, 2026-10-17; plugin installed by copilot plugin install (a local path, which Copilot warns is deprecated) (org-plan witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md at 6516f57)"
},
"needs_trust": false,
"tools": {
diff --git a/tests/test_claude_plugins.py b/tests/test_claude_plugins.py
index e39a5a5..4a797db 100644
--- a/tests/test_claude_plugins.py
+++ b/tests/test_claude_plugins.py
@@ -14,7 +14,31 @@
from agentseam.vendor_config import SCHEMA, VENDOR_CONFIG, loads_claude_plugins # noqa: E402
FIELD = "loads_claude_plugins"
-WITNESS_FILE = "witness/results/witness-grok-claude-plugin-2026-10-17.md"
+#: agent -> what its witness note must name: the run, the result file and the org-plan commit.
+WITNESSES = {
+ "grok": (
+ "guard",
+ "gate",
+ "refus",
+ "Grok Build 1.0.62",
+ "2026-10-17",
+ "witness/results/witness-grok-claude-plugin-2026-10-17.md",
+ "25b9d9d",
+ ),
+ "vscode_copilot": (
+ "Copilot CLI only, not VS Code",
+ "guard",
+ "gate",
+ "refused by preToolUse deny",
+ "Copilot CLI 1.0.98",
+ "Windows 11",
+ "2026-10-17",
+ "copilot plugin install ",
+ "deprecated",
+ "witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md",
+ "6516f57",
+ ),
+}
#: (loads, hooks, deny_reply) per agent, as org-plan discovery/2026-10-17-claude-plugin-compat.md records them.
DISCOVERY_ROWS = {
@@ -49,15 +73,16 @@ def test_each_entry_records_the_discovery_row():
assert record["date"] == "2026-10-17", agent
-def test_grok_carries_the_witness_and_no_other_agent_does():
+def test_only_the_witnessed_agents_carry_a_witness():
witnessed = {agent for agent, entry in VENDOR_CONFIG.items() if "witnessed" in entry[FIELD]}
- assert witnessed == {"grok"}
- note = VENDOR_CONFIG["grok"][FIELD]["witnessed"]
- for needle in ("guard", "gate", "refus", "Grok Build 1.0.62", "2026-10-17", WITNESS_FILE, "25b9d9d"):
- assert needle in note, needle
- record = VENDOR_CONFIG["grok"]["evidence"][FIELD]
- assert record["basis"] == "vendor-source"
- assert record["test"].endswith("::test_grok_carries_the_witness_and_no_other_agent_does")
+ assert witnessed == set(WITNESSES)
+ for agent, needles in WITNESSES.items():
+ note = VENDOR_CONFIG[agent][FIELD]["witnessed"]
+ for needle in needles:
+ assert needle in note, (agent, needle)
+ record = VENDOR_CONFIG[agent]["evidence"][FIELD]
+ assert record["basis"] == "vendor-source", agent
+ assert record["test"].endswith("::test_only_the_witnessed_agents_carry_a_witness"), agent
def test_a_no_or_unknown_load_never_reports_a_hook_or_deny_verdict():
@@ -74,7 +99,8 @@ def test_vscode_copilot_also_records_the_copilot_cli_row():
"Copilot CLI",
"copilot plugin install",
".claude-plugin/plugin.json",
- "nested hookSpecificOutput unknown",
+ "nested hookSpecificOutput unknown from the docs",
+ "settled by the Copilot CLI 1.0.98 witness for a shell command and a file write",
):
assert needle in row["notes"], needle
assert "github/docs@dae83f7d" in row["source"]
diff --git a/tools/recount/claude_plugins.json b/tools/recount/claude_plugins.json
index d467dd1..1b86a31 100644
--- a/tools/recount/claude_plugins.json
+++ b/tools/recount/claude_plugins.json
@@ -186,9 +186,10 @@
"hooks": "yes",
"how": "Claude-format plugin by manifest location, from a marketplace (.claude-plugin/marketplace.json, anthropics/claude-code accepted) or chat.pluginLocations; needs chat.plugins.enabled",
"loads": "yes",
- "notes": "VS Code: the Local harness ignores matchers, so every nested command for the event runs; HSO deny and exit 2 block. Copilot CLI (chock's copilot client builds for this entry): loads yes via copilot plugin install or --plugin-dir, legacy manifest includes .claude-plugin/plugin.json, copilot plugin marketplace add anthropics/claude-code; hooks yes (hooks.json or hooks/hooks.json); payload Claude Code for PascalCase events (Claude tool names, e.g. Bash), Copilot camelCase otherwise; deny partial: exit 2 denies, flat permissionDecision documented, nested hookSpecificOutput unknown (closed source)",
+ "notes": "VS Code: the Local harness ignores matchers, so every nested command for the event runs; HSO deny and exit 2 block. Copilot CLI (chock's copilot client builds for this entry): loads yes via copilot plugin install or --plugin-dir, legacy manifest includes .claude-plugin/plugin.json, copilot plugin marketplace add anthropics/claude-code; hooks yes (hooks.json or hooks/hooks.json); payload Claude Code for PascalCase events (Claude tool names, e.g. Bash), Copilot camelCase otherwise; deny partial: exit 2 denies, flat permissionDecision documented, nested hookSpecificOutput unknown from the docs (closed source), settled by the Copilot CLI 1.0.98 witness for a shell command and a file write (see witnessed)",
"payload": "Claude-shaped snake_case, but VS Code's own Local tool names",
- "source": "microsoft/vscode-docs@ef0ca127 docs/agents/reference/agent-plugin-reference.md; Copilot CLI: github/docs@dae83f7d content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md (org-plan discovery/2026-10-17-claude-plugin-compat.md)"
+ "source": "microsoft/vscode-docs@ef0ca127 docs/agents/reference/agent-plugin-reference.md; Copilot CLI: github/docs@dae83f7d content/copilot/reference/copilot-cli-reference/cli-plugin-reference.md (org-plan discovery/2026-10-17-claude-plugin-compat.md)",
+ "witnessed": "Copilot CLI only, not VS Code: guard (shell command) and gate (file write) refused by preToolUse deny; GitHub Copilot CLI 1.0.98 on Windows 11, 2026-10-17; plugin installed by copilot plugin install (a local path, which Copilot warns is deprecated) (org-plan witness/results/witness-copilot-cli-claude-plugin-2026-10-17.md at 6516f57)"
}
},
"windsurf": {
diff --git a/tools/recount/sourced.py b/tools/recount/sourced.py
index 7dceece..96116b6 100644
--- a/tools/recount/sourced.py
+++ b/tools/recount/sourced.py
@@ -26,12 +26,13 @@
#: Whether each agent loads a Claude Code plugin, transcribed from org-plan
#: discovery/2026-10-17-claude-plugin-compat.md (CC-1, read 2026-10-17); unknown and partial
-#: rows stay so. Grok alone adds the owner's witness run (witness/results at org-plan 25b9d9d).
+#: rows stay so. Grok (org-plan 25b9d9d) and vscode_copilot's Copilot CLI (org-plan 6516f57) add
+#: the owner's witness runs, from witness/results.
with open(os.path.join(os.path.dirname(__file__), "claude_plugins.json"), encoding="utf-8") as _fh:
LOADS_CLAUDE_PLUGINS = json.load(_fh)
_CLAUDE_PLUGINS_READ = "2026-10-17"
_CLAUDE_PLUGINS_TEST = "tests/test_claude_plugins.py::test_each_entry_records_the_discovery_row"
-_CLAUDE_PLUGINS_WITNESS_TEST = "tests/test_claude_plugins.py::test_grok_carries_the_witness_and_no_other_agent_does"
+_CLAUDE_PLUGINS_WITNESS_TEST = "tests/test_claude_plugins.py::test_only_the_witnessed_agents_carry_a_witness"
#: Repo hook configs this agent read before its current `config_path`, and still reads as a
#: fallback. windsurf: docs.devin.ai/desktop/cascade/hooks (read 2026-10-13), Workspace-Level --