Repository navigation
v3.23.3 - config folder links are refused wherever they point
Config folder links are refused wherever they point
A link at a folder of the project-config chain was followed when its target stayed inside the project; any such link is now refused. plugin/ moved (the three hooks), so this is a PATCH release.
Security
- A link at a config folder is refused, wherever it points. Before: a Windows junction or POSIX symlink at a folder of the project-config chain (
.claude,.claude/coal, any component between the project root and the file's own folder) was followed when its target stayed inside the project, so a planted in-project link could redirect which in-project file was read as the config or rule file (found by the sibling CoalLedger's sweep, CWK2-037; never outside the project). Now: any link at any such component is refused, and the file's own realpath must stay inside its own folder; the project root itself is not walked. Surfaces: the three hooks (hooks/coalmine-conductor.js,hooks/rot-canary-stop.js,hooks/rot-canary-touch.js, throughhooks/_shared/node-config.js) andscripts/lib/repo-fs.mjs(repoEntryKind, used byinstall.mjsandconfigure.mjs). Two named consequences: no rule file under a.claude/rulesjunction is read, andinstall.mjsrefuses a link in the folder chain of the trigger files it reads (the Cursor, Copilot and Antigravity rules files). Not covered: a link swapped in between the check and the open. The Windows junction legs ran locally; the POSIX symlink and file-symlink legs run on this release's CI matrix (ubuntu-latest and macos-latest, Node 22 and 24). See the follow-up record under CWK-137 inSECURITY.md. — test:scripts/lib/folder-pin.test.mjs
Changed
- Internal —
scripts/verify.mjsnow fails a Claude Code hook entry whosetypeis notcommand(and any entry that is not the exec form), and the exec-form test holds the conductor's stdout to the sanctioned output exactly (scripts/lib/verify-hooks-manifest.test.mjs,scripts/lib/hooks-exec-form.test.mjs); this ships nothing inplugin/. SECURITY.md's SkillSpector section describes the v3.23.2 scan (SkillSpector v2.12.0 pinned at2226747, 27 findings, 44 of 49 files covered, all adjudicated).