From 959cc42242074b3460815282875356da2e4e5705 Mon Sep 17 00:00:00 2001 From: Kyle Sexton <153232337+kyle-sexton@users.noreply.github.com> Date: Wed, 4 Nov 2026 04:17:31 -0500 Subject: [PATCH] fix(education): read the teach workspace-root pointer in its own call The workspace-root ladder now tells the model to read ${CLAUDE_PLUGIN_DATA}/workspace-root with the Read tool, never through Bash chained with list-workspaces.sh. The eval sandbox denied that chained call in 4 of 9 with-arm runs of te-root-declared-substitution, and run-validity.py counts it as a with-arm denial inside the plugin. Refs: #7296 Co-Authored-By: Claude Opus 5.5 --- .../host-run-7296-r11-teach-pointer-read-7b2d54e1.md | 7 +++++++ plugins/education/skills/teach/SKILL.md | 6 ++++-- 2 files changed, 11 insertions(+), 2 deletions(-) create mode 100644 .changes/education/host-run-7296-r11-teach-pointer-read-7b2d54e1.md diff --git a/.changes/education/host-run-7296-r11-teach-pointer-read-7b2d54e1.md b/.changes/education/host-run-7296-r11-teach-pointer-read-7b2d54e1.md new file mode 100644 index 00000000000..539c728922a --- /dev/null +++ b/.changes/education/host-run-7296-r11-teach-pointer-read-7b2d54e1.md @@ -0,0 +1,7 @@ +--- +bump: patch +--- + +### Changed + +- **teach:** the workspace-root ladder reads the `${CLAUDE_PLUGIN_DATA}/workspace-root` pointer file with the Read tool in a call of its own, never chained with `list-workspaces.sh` in one Bash call. The eval sandbox denied that chained call in 4 of 9 with-arm runs of `te-root-declared-substitution` ([#7296](https://github.com/melodic-software/claude-code-plugins/issues/7296)). diff --git a/plugins/education/skills/teach/SKILL.md b/plugins/education/skills/teach/SKILL.md index eaa3182430a..b1eb7eb1901 100644 --- a/plugins/education/skills/teach/SKILL.md +++ b/plugins/education/skills/teach/SKILL.md @@ -125,8 +125,10 @@ surfaced to the user, never merged. at a configured root. Persist the answer in the pointer file `${CLAUDE_PLUGIN_DATA}/workspace-root` (never a `pluginConfigs` write), a machine-local cache that also records the migration-offer outcome, and recommend making it durable via - `/education:setup`. Non-interactive or headless sessions skip this rung silently; when plugin data is unavailable, - fall through silently. + `/education:setup`. Read the pointer file with the Read tool in a call of its own, never + through Bash and never chained with `list-workspaces.sh` or another command. Non-interactive + or headless sessions skip this rung silently; when plugin data is unavailable, fall through + silently. 4. **OS Documents default, `topic` mode only.** Run `bash "${CLAUDE_PLUGIN_ROOT}/skills/teach/scripts/list-workspaces.sh" --default-root`. It resolves the platform Documents directory (Windows: the Documents known folder resolved