Files
Claude-Code-Game-Studios/.claude/docs/hooks-reference/post-merge-asset-validation.md
T
DonchitosandClaude Opus 5.5 b21fa0f7f2 Release 1.1.2 — the default path works end to end
Fix release for 1.1.1: the minimal path end to end, engine commands that
run on Godot, Unity and Unreal, hook warnings you can see, and verdicts
that say when they could not check. Details in CHANGELOG.md; upgrade
steps in UPGRADING.md (v1.1.1 → v1.1.2).

Fixes #67
Fixes #131

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01WuJn2FdynEybfL5KC697nJ
2026-09-29 21:32:19 +10:00

85 lines
2.5 KiB
Markdown

# Hook: post-merge-asset-validation
## Trigger
Runs after any merge to `main` (the trunk) or a `release/*` branch that
includes changes to `assets/`.
## Purpose
Validates that all assets in the merged branch conform to naming conventions,
size budgets, and format requirements. Prevents non-compliant assets from
accumulating on the trunk.
## Implementation
```bash
#!/bin/bash
# Post-merge hook: Asset validation
# Checks merged assets against project standards
MERGED_ASSETS=$(git diff --name-only HEAD@{1} HEAD | grep -E '^assets/')
if [ -z "$MERGED_ASSETS" ]; then
exit 0
fi
EXIT_CODE=0
WARNINGS=""
for file in $MERGED_ASSETS; do
filename=$(basename "$file")
# Check naming convention (lowercase with underscores)
if echo "$filename" | grep -qE '[A-Z[:space:]-]'; then
WARNINGS="$WARNINGS\nNAMING: $file -- must be lowercase with underscores"
EXIT_CODE=1
fi
# Check texture sizes (must be power of 2)
if [[ "$file" == *.png || "$file" == *.jpg ]]; then
# Requires ImageMagick
if command -v identify &> /dev/null; then
dims=$(identify -format "%w %h" "$file" 2>/dev/null)
if [ -n "$dims" ]; then
w=$(echo "$dims" | cut -d' ' -f1)
h=$(echo "$dims" | cut -d' ' -f2)
if (( (w & (w-1)) != 0 || (h & (h-1)) != 0 )); then
WARNINGS="$WARNINGS\nSIZE: $file -- dimensions ${w}x${h} not power-of-2"
fi
fi
fi
fi
# Check file size budgets
size=$(stat -f%z "$file" 2>/dev/null || stat -c%s "$file" 2>/dev/null)
if [ -n "$size" ]; then
# Textures: max 4MB
if [[ "$file" == assets/art/* ]] && [ "$size" -gt 4194304 ]; then
WARNINGS="$WARNINGS\nBUDGET: $file -- ${size} bytes exceeds 4MB texture budget"
EXIT_CODE=1
fi
# Audio: max 10MB for music, 512KB for SFX
if [[ "$file" == assets/audio/sfx* ]] && [ "$size" -gt 524288 ]; then
WARNINGS="$WARNINGS\nBUDGET: $file -- ${size} bytes exceeds 512KB SFX budget"
fi
fi
done
if [ -n "$WARNINGS" ]; then
echo "=== Asset Validation Report ==="
echo -e "$WARNINGS"
echo "================================"
echo "Run /asset-audit for a full report."
fi
exit $EXIT_CODE
```
## Agent Integration
When this hook reports issues:
1. For naming violations: fix manually or invoke `art-director` for guidance
2. For size violations: invoke `technical-artist` for optimization advice
3. For a full audit: run `/asset-audit` skill