mirror of
https://github.com/Donchitos/Claude-Code-Game-Studios.git
synced 2026-06-27 04:51:46 +00:00
Add /skill-test suite: linter, behavioral specs, and coverage catalog for 52 skills
- New skill: /skill-test (static | spec | audit modes) - static: 7-check structural linter per skill file - spec: Claude-evaluated behavioral assertions against test specs - audit: coverage report across all 52 skills with priority gaps - New hook: validate-skill-change.sh — advisory reminder to lint after skill edits - New template: skill-test-spec.md — standard structure for authoring test specs - New: tests/skills/catalog.yaml — machine-readable coverage index (52 skills) - New: tests/skills/_fixtures/ — shared fixtures (complete concept, incomplete GDD) - New: 4 seed test specs for critical gate skills (gate-check, design-review, story-readiness, story-done) — 4 cases each - Modified: settings.json — validate-skill-change.sh added to PostToolUse hook Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
39
.claude/hooks/validate-skill-change.sh
Normal file
39
.claude/hooks/validate-skill-change.sh
Normal file
@@ -0,0 +1,39 @@
|
||||
#!/bin/bash
|
||||
# Claude Code PostToolUse hook: Advises running skill-test after skill file changes
|
||||
# Fires when any file inside .claude/skills/ is written or edited.
|
||||
#
|
||||
# Exit behavior:
|
||||
# exit 0 = advisory only (non-blocking)
|
||||
#
|
||||
# Input schema (PostToolUse for Write|Edit):
|
||||
# { "tool_name": "Write", "tool_input": { "file_path": "...", "content": "..." } }
|
||||
|
||||
INPUT=$(cat)
|
||||
|
||||
# Parse file path -- use jq if available, fall back to grep
|
||||
if command -v jq >/dev/null 2>&1; then
|
||||
FILE_PATH=$(echo "$INPUT" | jq -r '.tool_input.file_path // empty')
|
||||
else
|
||||
FILE_PATH=$(echo "$INPUT" | grep -oE '"file_path"[[:space:]]*:[[:space:]]*"[^"]*"' | sed 's/"file_path"[[:space:]]*:[[:space:]]*"//;s/"$//')
|
||||
fi
|
||||
|
||||
# Normalize path separators (Windows backslash to forward slash)
|
||||
FILE_PATH=$(echo "$FILE_PATH" | sed 's|\\|/|g')
|
||||
|
||||
# Only act on files inside .claude/skills/
|
||||
if ! echo "$FILE_PATH" | grep -qE '(^|/)\.claude/skills/'; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
# Extract skill name from path (.claude/skills/[skill-name]/SKILL.md)
|
||||
SKILL_NAME=$(echo "$FILE_PATH" | grep -oE '\.claude/skills/[^/]+' | sed 's|\.claude/skills/||')
|
||||
|
||||
if [ -z "$SKILL_NAME" ]; then
|
||||
exit 0
|
||||
fi
|
||||
|
||||
echo "=== Skill Modified: $SKILL_NAME ===" >&2
|
||||
echo "Run /skill-test static $SKILL_NAME to validate structural compliance." >&2
|
||||
echo "====================================" >&2
|
||||
|
||||
exit 0
|
||||
Reference in New Issue
Block a user