ARTICLE DETAIL

资讯详情

深耕编程入门与网站建设的一线实战洞察。

Claude-Code-Game-Studios 资产合规自动校验:post-merge-asset-validation Hook 实战指南

Claude-Code-Game-Studios 资产合规自动校验:post-merge-asset-validation Hook 实战指南 Claude-Code-Game-Studios 资产合规自动校验post-merge-asset-validation Hook 实战指南【免费下载链接】Claude-Code-Game-StudiosTurn Claude Code into a full game dev studio — 49 AI agents, 72 workflow skills, and a complete coordination system mirroring real studio hierarchy.项目地址: https://gitcode.com/GitHub_Trending/cl/Claude-Code-Game-Studios导读在 Claude-Code-Game-StudiosCCGS这套将 Claude Code 编排为完整游戏开发工作室的体系中资产Assets是美术、音频与数据团队持续产出并汇入集成分支的核心交付物。post-merge-asset-validationHook 在每次合并到develop或main分支且涉及assets/变更后自动运行对命名规范、纹理尺寸与体积预算进行机器化把关防止不合规资产在集成分支上持续累积。读完本文你将掌握该 Hook 的触发机制、逐行实现原理、与/asset-audit技能及technical-artist等 Agent 的联动方式并能结合仓库中真实存在的validate-assets.sh实现把它直接落地到自己的游戏仓库中。一、Hook 定位为什么合并后的资产校验必不可少在 CCGS 中assets/是美术、音频、VFX、着色器与数据文件的汇聚点相关标准定义在 .claude/docs/technical-preferences.md 中如命名规范、纹理与音频的体积预算而 .claude/docs/hooks-reference.md 与 .claude/docs/hooks-reference/post-merge-asset-validation.md 构成了仓库的 Hook 规范中心。触发条件TriggerRuns after any merge to the develop or main branch that includes changes to assets/即任何向develop或main分支的合并操作只要合并内容包含assets/目录下的变更就会触发本 Hook。两个要点时机发生在合并之后post-merge此时分支内容已经合入Hook 的职责是校验而非拦截范围通过 Git 差异计算只检查本次合并实际带来的资产变更存量资产不在重复检查范围内。设计目的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 integration branches.翻译过来就是三件事命名规范校验资产文件名是否符合项目约定体积预算校验纹理、音频等文件是否超出各自的体积上限格式要求校验文件格式与引擎/管线要求是否一致。其核心价值在于防止不合规资产在集成分支上持续累积accumulating——问题发现得越早返工成本越低如果每次合并都带着命名违规或超预算的文件集成分支最终会变成一个随时可能爆雷的资产垃圾场。二、实现逐行拆解从 Git 差异到校验报告以下为 post-merge-asset-validation.md 提供的完整 Bash 实现我们逐段解析其工作原理。2.1 计算合并资产清单#!/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 figit diff --name-only HEAD{1} HEAD列出本次合并上一次 HEAD 与当前 HEAD 之间发生变更的所有文件路径grep -E ^assets/过滤出路径以assets/开头的文件空清单短路如果MERGED_ASSETS为空说明本次合并不涉及任何资产直接exit 0这也是 Hook 保持轻量的关键——无资产变更时零开销。2.2 命名规范检查小写下划线EXIT_CODE0 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_CODE1 fibasename提取纯文件名去掉目录避免路径中的目录名干扰判断正则[A-Z[:space:]-]匹配大写字母、空白字符或连字符任何一项命中即判定为违规违规时累积到WARNINGS并置EXIT_CODE1。这与仓库中的命名标准完全一致.claude/skills/asset-audit/SKILL.md 规定All files must be lowercase with underscores并给出了更细的模式美术资源[category]_[name]_[variant]_[size].[ext]音频资源[category]_[context]_[name]_[variant].[ext]例如enemy_grunt_idle.png、sfx_jump_land.ogg均为合规命名而Enemy_Grunt.png、enemy-grunt.png均会被判定违规。2.3 纹理尺寸检查2 的幂# 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仅对.png/.jpg执行尺寸检查依赖ImageMagick的identify命令读取宽高因此前置条件是运行环境已安装 ImageMagickcommand -v identify探测未安装则静默跳过(w (w-1)) ! 0是经典的 2 的幂位运算判断1000 0111 08 是 2 的幂而9 8 8 ≠ 09 不是 2 的幂宽或高任一非 2 的幂即记为SIZE违规。这与 .claude/skills/asset-audit/SKILL.md 中Textures: Power-of-two dimensions的标准相印证。2.4 体积预算检查分层预算# 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_CODE1 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跨平台文件大小读取stat -f%z适配 macOS/BSD失败后回退到stat -c%s适配 Linux/GNU——这是让 Hook 具备可移植性的关键技巧分层预算注意区分目录前缀assets/art/*美术/纹理上限4MB4194304字节超限记违规并置EXIT_CODE1assets/audio/sfx*音效上限512KB524288字节超限记违规但不置EXIT_CODE仅告警注释中注明音乐上限为 10MB但该分支在示例代码中未包含对应的音乐检查逻辑——从源码结构看这属于留给使用者的扩展点可自行补充assets/audio/music*分支。2.5 报告输出与退出码if [ -n $WARNINGS ]; then echo Asset Validation Report echo -e $WARNINGS echo echo Run /asset-audit for a full report. fi exit $EXIT_CODE有告警则输出带分隔线的Asset Validation Report并提示运行/asset-audit获取完整审计报告退出码语义EXIT_CODE初始为 0遇到命名违规或纹理超预算会置 1。在 post-merge 场景下退出码主要供 CI 或人工流水线判定本次合并是否需要跟进处理命名与纹理违规被定义为需要修复的级别而音效超限仅作提示。三、与仓库真实实现的对照前置校验 vs 合并校验值得强调的是.claude/docs/hooks-reference/post-merge-asset-validation.md 属于设计规范文档它描述了 post-merge 场景的推荐实现而仓库中实际部署的脚本是 .claude/hooks/validate-assets.sh二者形成了前置拦截 合并兜底的完整防线维度validate-assets.sh已部署post-merge-asset-validation规范触发时机PostToolUseWrite/Edit 后即时合并到 develop/main 后输入来源从tool_input.file_path解析单个文件git diff计算合并文件集命名检查相同小写 下划线违规为告警相同违规置EXIT_CODE1JSON 校验对assets/data/*.json做语法校验并阻断exit 1未覆盖留给 /asset-audit退出语义告警 exit 0阻断错误 exit 1违规 exit 1validate-assets.sh的几个亮点值得学习兼容性优先优先用jq解析 JSON 输入缺失时回退到grep/sed文本解析命名检查刻意用 POSIX 的grep -E而非 Perl 的grep -P以兼容 Windows Git Bash路径归一化sed s|\\|/|g将 Windows 反斜杠统一为正斜杠保证跨平台判断一致分级阻断命名问题是告警不阻断exit 0assets/data/*.json语法错误是阻断exit 1因为非法 JSON 会在运行时直接炸掉数据加载管线Python 探测链依次尝试python、python3、py找到可用的解释器执行json.tool校验。把两者对照起来看前置 Hook 负责写资产文件的那一刻就给出即时反馈post-merge 规范负责批量合并时做最终体检共同构筑了 CCGS 资产合规的自动防线。四、Agent 联动Hook 发现问题之后怎么办文档的Agent Integration一节明确了 Hook 与 CCGS Agent 体系的协作契约For naming violations: fix manually or invokeart-directorfor guidanceFor size violations: invoketechnical-artistfor optimization adviceFor a full audit: run/asset-auditskill命名违规人工修复或调用art-director美术总监 Agent获取命名规范的权威指导——在 CCGS Skill Testing Framework/agents/directors/art-director.md 中可看到其负责艺术风格与规范决策的职责边界体积违规调用technical-artist技术美术 Agent获取优化建议其职责域覆盖Shaders, VFX, rendering optimization, art pipeline tools, and visual performance测试规格见 CCGS Skill Testing Framework/agents/specialists/technical-artist.md其中专门设计了针对 GPU 预算、粒子数量、引擎版本兼容等场景的优化行为验证全面审计运行/asset-audit技能其完整定义在 .claude/skills/asset-audit/SKILL.md。/asset-audit技能与 Hook 的分工/asset-audit是只读诊断技能allowed-tools: Read, Glob, Grep它会读取设计文档与technical-preferences.md中的命名规范与预算标准递归扫描assets/art/**/*、assets/audio/**/*、assets/vfx/**/*、assets/shaders/**/*、assets/data/**/*逐文件执行命名、尺寸、格式检查并交叉查找孤儿资产有文件无引用与缺失资产有引用无文件输出包含汇总统计、违规清单、修复建议与COMPLIANT / WARNINGS / NON-COMPLIANT三级结论的标准报告模板。二者的差异在于Hook 是合并时的自动闸门/asset-audit是任意时刻的深度体检。Hook 覆盖面窄命名 尺寸 体积/asset-audit覆盖面全额外包含格式、元数据、孤儿/缺失资产、GDD 引用完整性后者与/content-audit有意重叠但侧重不同——前者管合规、后者管完备性。五、落地部署指南把 Hook 装进你的仓库5.1 安装到 Git Hooks将上述脚本保存为项目.git/hooks/post-merge或使用core.hooksPath指向团队共享的 hooks 目录并确保可执行。由于 post-merge Hook 在合并完成后运行它的作用模式是体检 报告不合规资产仍会合入但合并行为会被立刻标记提醒团队及时修复避免问题沉淀。5.2 前置依赖清单依赖用途缺失时的行为git计算合并差异无法运行前提grep/basename/cut/stat文本处理与文件元数据无法运行POSIX 标配ImageMagickidentify读取 PNG/JPG 宽高静默跳过纹理尺寸检查可选jq解析 PostToolUse JSON回退到 grep/sed 解析其中 ImageMagick 的缺失只影响 2.3 节的尺寸检查Hook 其余功能不受影响而stat的-f%z/-c%s双格式回退保证了 macOS 与 Linux 均可运行。5.3 按项目调整预算文档中的预算数值纹理 4MB、音效 512KB、音乐 10MB与命名模式assets/art/*、assets/audio/sfx*是示例性默认值。真实项目中应以 .claude/docs/technical-preferences.md 的 Performance Budgets 章节为唯一事实来源视平台与画质目标调整移动端纹理预算通常更严如 2MB 以内主机/PC 端可适当放宽音频采样率与时长限制则直接影响 SFX 预算的设定。修改 Hook 中的4194304、524288等常量即可完成适配。六、常见问题与边界说明为什么命名违规会置EXIT_CODE1而音效超限只告警从代码可推断命名与纹理尺寸是集成分支的硬性标准影响打包与渲染正确性而音效超限是软性预算设计者选择以提示为主、不阻断合并流程。音乐 10MB 上限为何在示例代码中看不到注释中声明了该预算但对应检查分支未写入示例——这是规范的刻意留白使用者可按assets/audio/sfx*的写法补充assets/audio/music*分支。和validate-assets.sh重复吗不重复。前者在编辑时逐文件即时校验含 JSON 阻断后者在合并时批量兜底两者共享同一套命名标准但触达时机与拦截力度不同。合并到其他分支如feature/*会触发吗不会。文档明确限定触发范围为develop与main两个集成分支——这正是防止不合规资产在集成分支上累积这一设计目标的直接体现。结语post-merge-asset-validation是 CCGS 资产管线中自动化合规守门人的设计蓝图它以 Git 合并事件为触发器用约 70 行 Bash 实现了命名规范、2 的幂纹理、分层体积预算三类校验并通过退出码与报告输出驱动人工/CI 跟进最终与art-director、technical-artist两个 Agent 以及/asset-audit技能组成发现问题 → 定位责任 → 深度审计的完整处置链路。对照仓库中已部署的 .claude/hooks/validate-assets.sh你既可以按规范文档从零实现自己的 post-merge 校验也可以直接复用真实脚本的思路为团队的游戏仓库加上一道自动化的资产质量闸门。【免费下载链接】Claude-Code-Game-StudiosTurn Claude Code into a full game dev studio — 49 AI agents, 72 workflow skills, and a complete coordination system mirroring real studio hierarchy.项目地址: https://gitcode.com/GitHub_Trending/cl/Claude-Code-Game-Studios创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表