From a22063218669898c717ab741d2c5d3a9fdab25d4 Mon Sep 17 00:00:00 2001 From: Matt Van Horn Date: Wed, 15 Apr 2026 08:40:09 -0400 Subject: [PATCH] fix: restore /last30days slash command on Claude Code v2.1.105+ (#261) Two regressions were silently breaking /last30days for every user: 1. plugin.json declared "skills": ["./"], which newer Claude Code rejects with "Path escapes plugin directory: ./ (skills)". The skill loader refused to register the command, so /last30days returned "Unknown command" even though /plugin list showed the plugin as installed. Fix: "skills": ["skills"] so the loader scans the real subdirectory. 2. marketplace.json pinned "version": "3.0.0" while plugin.json advertised "3.0.1". The /plugin resolver used the marketplace version and could install a phantom user-scope copy at a stale SHA alongside the correct project-scope install, creating duplicate skill-name collisions. Both manifests now agree on 3.0.2. Prior attempt: commit 93fbed2 fixed (1) before but got reverted. This lands both fixes together in a tagged release so users can /plugin update to recover. Recovery for affected users is in CHANGELOG.md under 3.0.2. Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> --- .claude-plugin/marketplace.json | 2 +- .claude-plugin/plugin.json | 4 ++-- CHANGELOG.md | 11 +++++++++++ gemini-extension.json | 2 +- 4 files changed, 15 insertions(+), 4 deletions(-) diff --git a/.claude-plugin/marketplace.json b/.claude-plugin/marketplace.json index af07962..aef8f1b 100644 --- a/.claude-plugin/marketplace.json +++ b/.claude-plugin/marketplace.json @@ -10,7 +10,7 @@ { "name": "last30days", "description": "Research any topic across Reddit, X, YouTube, TikTok, Instagram, HN, Polymarket, GitHub, and 5+ more sources.", - "version": "3.0.0", + "version": "3.0.2", "author": { "name": "Matt Van Horn", "url": "https://github.com/mvanhorn" diff --git a/.claude-plugin/plugin.json b/.claude-plugin/plugin.json index 21ec5c7..8d40c9d 100644 --- a/.claude-plugin/plugin.json +++ b/.claude-plugin/plugin.json @@ -1,6 +1,6 @@ { "name": "last30days", - "version": "3.0.1", + "version": "3.0.2", "description": "Research any topic across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, GitHub, and 5+ more sources. AI agent scores by upvotes, likes, and real money - not editors.", "author": { "name": "Matt Van Horn", @@ -11,6 +11,6 @@ "repository": "https://github.com/mvanhorn/last30days-skill", "license": "MIT", "keywords": ["research", "reddit", "twitter", "youtube", "tiktok", "instagram", "trends", "prompts", "polymarket", "github", "perplexity", "threads", "pinterest", "eli5", "hacker-news"], - "skills": ["./"], + "skills": ["skills"], "hooks": {} } diff --git a/CHANGELOG.md b/CHANGELOG.md index 9016772..6309ed2 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,17 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## [3.0.2] - 2026-04-15 + +### Fixed + +- **`/last30days` slash command now registers on Claude Code v2.1.105+.** `.claude-plugin/plugin.json` declared `"skills": ["./"]`, which newer Claude Code rejects with `Path escapes plugin directory: ./ (skills)`. The skill silently failed to register, so `/last30days ` returned "Unknown command" even though `/plugin list` showed the plugin as installed. Fix: `"skills": ["skills"]` so the loader scans the real skill subdirectory. +- **Version drift between manifests.** `.claude-plugin/marketplace.json` was pinned to `3.0.0` while `.claude-plugin/plugin.json` advertised `3.0.1`. The `/plugin` resolver used the marketplace version and could install stale cached metadata alongside the correct build. Both manifests now agree on `3.0.2`. + +### Recovery + +If `/last30days` stopped working for you, run `/plugin update last30days` then `/reload-plugins`. If `/doctor` still reports errors, uninstall and reinstall the plugin from the marketplace. + ## [3.0.1] - 2026-04-14 ### Fixed diff --git a/gemini-extension.json b/gemini-extension.json index 9111c79..9ce995c 100644 --- a/gemini-extension.json +++ b/gemini-extension.json @@ -1,6 +1,6 @@ { "name": "last30days-skill", - "version": "3.0.1", + "version": "3.0.2", "description": "Research a topic from the last 30 days across Reddit, X, YouTube, TikTok, Instagram, Hacker News, Polymarket, and the web.", "settings": [ {