Skip to content

Commit 34e657b

Browse files
committed
fix: flatten plugin structure for hook path resolution
Moved .claude-plugin/, hooks/, and skills/ from plugins/claude-git-native-issue/ to the repo root. Claude Code resolves CLAUDE_PLUGIN_ROOT and hook paths relative to the repo root. The nested structure caused the UserPromptSubmit hook to silently fail because the resolved path didn't exist. Matches the flat structure used by official plugins (e.g. context7).
1 parent a989784 commit 34e657b

13 files changed

Lines changed: 30 additions & 30 deletions

File tree

plugins/claude-git-native-issue/.claude-plugin/plugin.json renamed to .claude-plugin/plugin.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "claude-git-native-issue",
33
"description": "Replace Claude's internal task management with git-native-issue. Autonomous issue creation, tracking, and resolution stored as Git refs. Distributed, offline-first, travels with your code.",
4-
"version": "1.0.0",
4+
"version": "1.0.1",
55
"license": "GPL-2.0",
66
"keywords": ["git", "issues", "tasks", "tracking", "distributed", "offline", "git-native-issue", "task-management"],
77
"author": {

.github/workflows/validate.yml

Lines changed: 7 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,20 +11,17 @@ jobs:
1111
steps:
1212
- uses: actions/checkout@v4
1313

14-
- name: Validate marketplace.json syntax
15-
run: python3 -c "import json; json.load(open('.claude-plugin/marketplace.json'))"
16-
1714
- name: Validate plugin.json syntax
18-
run: python3 -c "import json; json.load(open('plugins/claude-git-native-issue/.claude-plugin/plugin.json'))"
15+
run: python3 -c "import json; json.load(open('.claude-plugin/plugin.json'))"
1916

2017
- name: Validate hooks.json syntax
21-
run: python3 -c "import json; json.load(open('plugins/claude-git-native-issue/hooks/hooks.json'))"
18+
run: python3 -c "import json; json.load(open('hooks/hooks.json'))"
2219

2320
- name: Check required plugin.json fields
2421
run: |
2522
python3 -c "
2623
import json
27-
data = json.load(open('plugins/claude-git-native-issue/.claude-plugin/plugin.json'))
24+
data = json.load(open('.claude-plugin/plugin.json'))
2825
required = ['name', 'description', 'version', 'license']
2926
for field in required:
3027
assert field in data, f'Missing required field: {field}'
@@ -33,19 +30,19 @@ jobs:
3330
3431
- name: Check SKILL.md frontmatter
3532
run: |
36-
for f in plugins/claude-git-native-issue/skills/*/SKILL.md; do
33+
for f in skills/*/SKILL.md; do
3734
echo "Checking $f"
3835
head -1 "$f" | grep -q "^---" || (echo "Missing frontmatter in $f" && exit 1)
3936
done
4037
4138
- name: Validate hook script is executable
42-
run: test -x plugins/claude-git-native-issue/hooks/task-intercept.sh
39+
run: test -x hooks/task-intercept.sh
4340

4441
- name: Validate hook script outputs valid JSON
45-
run: bash plugins/claude-git-native-issue/hooks/task-intercept.sh | python3 -c "import json, sys; json.load(sys.stdin)"
42+
run: bash hooks/task-intercept.sh | python3 -c "import json, sys; json.load(sys.stdin)"
4643

4744
- name: Validate version matches CHANGELOG
4845
run: |
49-
VERSION=$(python3 -c "import json; print(json.load(open('plugins/claude-git-native-issue/.claude-plugin/plugin.json'))['version'])")
46+
VERSION=$(python3 -c "import json; print(json.load(open('.claude-plugin/plugin.json'))['version'])")
5047
grep -q "\[${VERSION}\]" CHANGELOG.md || (echo "Version $VERSION not found in CHANGELOG.md" && exit 1)
5148
echo "Version $VERSION found in CHANGELOG.md"

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,11 @@ All notable changes to this project will be documented in this file.
44

55
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
66

7+
## [1.0.1] - 2026-02-22
8+
9+
### Fixed
10+
- **Flatten plugin structure**: moved `.claude-plugin/`, `hooks/`, and `skills/` from `plugins/claude-git-native-issue/` to the repo root. Claude Code resolves hook paths relative to the repo root, so the nested structure prevented the UserPromptSubmit hook from firing.
11+
712
## [1.0.0] - 2026-02-22
813

914
### Added

CONTRIBUTING.md

Lines changed: 17 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -7,24 +7,23 @@ Contributions are welcome.
77
### Structure
88

99
```
10-
plugins/claude-git-native-issue/
11-
├── .claude-plugin/plugin.json # Plugin manifest
12-
├── hooks/
13-
│ ├── hooks.json # Hook definitions
14-
│ └── task-intercept.sh # UserPromptSubmit hook script
15-
└── skills/
16-
├── git-issue-tracker/SKILL.md # Ambient reference (non-user-invocable)
17-
├── setup/SKILL.md # /setup command
18-
├── create/SKILL.md # /create command
19-
├── issues/SKILL.md # /issues command
20-
├── show/SKILL.md # /show command
21-
├── close/SKILL.md # /close command
22-
└── sync/SKILL.md # /sync command
10+
.claude-plugin/plugin.json # Plugin manifest
11+
hooks/
12+
├── hooks.json # Hook definitions
13+
└── task-intercept.sh # UserPromptSubmit hook script
14+
skills/
15+
├── git-issue-tracker/SKILL.md # Ambient reference (non-user-invocable)
16+
├── setup/SKILL.md # /setup command
17+
├── create/SKILL.md # /create command
18+
├── issues/SKILL.md # /issues command
19+
├── show/SKILL.md # /show command
20+
├── close/SKILL.md # /close command
21+
└── sync/SKILL.md # /sync command
2322
```
2423

2524
### Adding a New Skill
2625

27-
1. Create a directory under `plugins/claude-git-native-issue/skills/<name>/`
26+
1. Create a directory under `skills/<name>/`
2827
2. Add a `SKILL.md` with YAML frontmatter:
2928
```yaml
3029
---
@@ -48,15 +47,14 @@ Run the CI validation locally:
4847

4948
```bash
5049
# Validate JSON files
51-
python3 -c "import json; json.load(open('.claude-plugin/marketplace.json'))"
52-
python3 -c "import json; json.load(open('plugins/claude-git-native-issue/.claude-plugin/plugin.json'))"
53-
python3 -c "import json; json.load(open('plugins/claude-git-native-issue/hooks/hooks.json'))"
50+
python3 -c "import json; json.load(open('.claude-plugin/plugin.json'))"
51+
python3 -c "import json; json.load(open('hooks/hooks.json'))"
5452

5553
# Validate hook script output
56-
bash plugins/claude-git-native-issue/hooks/task-intercept.sh | python3 -c "import json, sys; json.load(sys.stdin)"
54+
bash hooks/task-intercept.sh | python3 -c "import json, sys; json.load(sys.stdin)"
5755

5856
# Check SKILL.md frontmatter
59-
for f in plugins/claude-git-native-issue/skills/*/SKILL.md; do
57+
for f in skills/*/SKILL.md; do
6058
head -1 "$f" | grep -q "^---" && echo "OK: $f" || echo "FAIL: $f"
6159
done
6260
```

plugins/claude-git-native-issue/hooks/hooks.json renamed to hooks/hooks.json

File renamed without changes.

plugins/claude-git-native-issue/hooks/task-intercept.sh renamed to hooks/task-intercept.sh

File renamed without changes.

plugins/claude-git-native-issue/skills/close/SKILL.md renamed to skills/close/SKILL.md

File renamed without changes.

plugins/claude-git-native-issue/skills/create/SKILL.md renamed to skills/create/SKILL.md

File renamed without changes.

plugins/claude-git-native-issue/skills/git-issue-tracker/SKILL.md renamed to skills/git-issue-tracker/SKILL.md

File renamed without changes.

plugins/claude-git-native-issue/skills/issues/SKILL.md renamed to skills/issues/SKILL.md

File renamed without changes.

0 commit comments

Comments
 (0)