Repository navigation
user-experience: reject dotfile team paths and add the plugin to fragment mode after its first release #6700
Copy link
Copy link
Open
Labels
area: securitySecurity-relevant: vulnerability, hardening, or disclosure follow-up.Security-relevant: vulnerability, hardening, or disclosure follow-up.needs-triageNot yet classified. Floor until a type and one priority tier are set.Not yet classified. Floor until a type and one priority tier are set.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.
Description
Refs: #6306
Problem
Two follow-ups from shipping the user-experience plugin in #6669. Neither blocks the plugin; part 1 is the only one that touches what it can read.
- Team research paths accept dotfiles such as
.env.plugins/user-experience/scripts/detect.mjsteamSettings()dropsresearch_paths,persona_pathsandoutput_homethat escape the project or whose first segment is.claudeor.git, checked as written and through symlinks (RESERVEDat detect.mjs:293,reserved/resolvesReserved/usableat :307-319, withinside()for containment). A team file can still list.env(or.npmrc,.aws/…) as a research path. The job skills then read it as research data, so secrets could reach the model's context and a deliverable. Exposure needs the team's own committed file to name such a path. user-experienceis the one plugin missing fromscripts/fragment-plugins.txt. Main moved every plugin to changelog fragments (chore(release): move the remaining 68 plugins to changelog fragments #6661) while feat(user-experience): add the user-experience plugin #6669 was open. Listinguser-experiencethen failed FRAGMENT-MODE RELEASE on its initial0.1.0CHANGELOG heading, so it shipped unlisted (per-PR version bump still works). After its first release, add it (keep the list sorted) so later changes go through fragments like every other plugin.
Fix notes
- Part 1: extend
reserved()(or a sibling predicate) to reject a first segment that is a dotfile or dot-directory, with an explicit allow-list if a real research folder needs one (decide the list;.claude-notes/uxstyle names must keep working, see the test "a path whose first segment only starts with .claude is kept"). Add a failing test inplugins/user-experience/tests/detect.test.mjsnext to "team paths may not point into .claude or .git" forresearch_paths: [.env],persona_paths: [.aws/credentials]andoutput_home: .ssh/x, plus a symlink case. Mirror the refusal in the job skills'## Deliverableoutput-home check if output_home is covered. - Part 2: one-line add to
scripts/fragment-plugins.txt; runscripts/check-changelog-parity.sh --check-bump origin/mainandscripts/check-changelog-fragments.sh --check.
Acceptance criteria
detect.mjsdrops a research, persona or output path whose first segment is a dotfile not on the allow-list, with a warning, and the new tests fail before the fix and pass after;node --test 'plugins/user-experience/tests/*.test.mjs'passes.scripts/fragment-plugins.txtlistsuser-experience, and both changelog checks above pass.
Reactions are currently unavailable
Metadata
Metadata
Assignees
Labels
area: securitySecurity-relevant: vulnerability, hardening, or disclosure follow-up.Security-relevant: vulnerability, hardening, or disclosure follow-up.needs-triageNot yet classified. Floor until a type and one priority tier are set.Not yet classified. Floor until a type and one priority tier are set.priority: mediumReal value, no hard deadline; normal backlog flow.Real value, no hard deadline; normal backlog flow.
Activity
github-actions commentedon Oct 10, 2026
Thanks for filing this. I understood two concrete follow-ups from the
user-experienceplugin work: (1)detect.mjsshould drop research/persona/output paths whose first segment is a dotfile (beyond an allow-list to be decided), with a warning and a test that fails before the fix, so a team config can't point research at files like.env; and (2)user-experienceneeds to be added toscripts/fragment-plugins.txtnow that it has shipped its first release, so later changes go through fragments like other plugins, and the two parity/fragment check scripts should pass. The acceptance criteria are clear and no reproduction or further detail is needed from you. I didn't find any duplicate open issues covering this.Automated triage. A maintainer reviews it.