{
  "slug": "glb-godot-acceptance",
  "skill": "glb-godot-acceptance",
  "upstream": "GameSkill original (onsite/<slug>/original)",
  "sourceHash": "415991b73cf765306f1c4d306813c60326b62db411be0d19fcbbeed083074498",
  "date": "2026-11-03",
  "engine": "Godot 4.7.2 (glTF import, physics) + Blender 5.2.3 LTS (background)",
  "env": [
    "Node v22.11.0",
    "Python 3 standard library only (the skill installs nothing)",
    "Godot 4.7.2-stable headless: --import, PackedScene, CollisionShape3D, AnimationPlayer, RigidBody3D",
    "Blender 5.2.3 LTS (linux x64), background mode, no add-ons, to rebuild the example",
    "xvfb + OpenGL 3 (gl_compatibility) for the screenshot"
  ],
  "trigger": "static",
  "passed": 36,
  "total": 36,
  "commands": [
    "(cd ../original && env GODOT={godot} BLENDER={blender} python3 test/run_tests.py)",
    "(cd . && env GODOT={godot} python3 ../original/test/screenshot.py screenshot.png)"
  ],
  "checks": [
    {
      "criterion": "trigger",
      "name": "SKILL.md description says when to use it",
      "pass": true,
      "detail": "Decide whether a 3D model is actually done by importing it into Godot 4 the way a game does and checking it - Godot impo"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Check if my exported glb model is really ready for Godot: size in metres, colliders and no import errors\"",
      "pass": true,
      "detail": "rank 1/122, overlap 10"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"My Blender model comes into Godot 100 times too big and floating above the ground, verify the glb before I use it\"",
      "pass": true,
      "detail": "rank 1/122, overlap 7"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Accept this AI generated 3D model for my game: import it in Godot, check triangles, collision and the animation clip\"",
      "pass": true,
      "detail": "rank 1/122, overlap 7"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Write the dialogue tree for my visual novel\"",
      "pass": true,
      "detail": "rank 30/122, overlap 0"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Tune the coyote time of my platformer jump\"",
      "pass": true,
      "detail": "rank 18/122, overlap 0"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: shipped moss-mailbox.glb is accepted",
      "pass": true,
      "detail": "exit 0, 0 failed"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "Godot imports it without errors: no errors"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "the GLB loads as a scene: 12 nodes"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "triangles within the budget: 164 triangles, budget 3000"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "size in metres matches what the game expects: 0.465 x 1.395 x 0.331 m vs 0.46,1.4,0.33, worst 1.1% (tolerance 5%)"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "origin sits at the base (lowest point at y = 0): lowest point y = 0.000 m"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "origin is under the object, not off to one side: centre offset x 0.013 m, z 0.004 m"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "every surface has a material: 0 surface(s) without one"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "the file brings its own colliders: 2 collision shape(s)"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "the clips the game calls are there: have [\"open\"]"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "it rests on a floor without sinking or tipping: after 120 frames: lowest point -0.007 m, tilt 0.0 deg, speed 0.000 m/s"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: mailbox",
      "pass": true,
      "detail": "no Godot errors while it runs: no errors"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: Blender rebuilds the mailbox from make_mailbox.py",
      "pass": true,
      "detail": "WROTE /tmp/glb-accept-test-bre20xmn/good.glb (ok, 164 triangles in visible meshes, 2 collider proxies)"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: the rebuilt mailbox is accepted too",
      "pass": true,
      "detail": "0 failed"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: rebuilt size is 1.395 m tall, Y up",
      "pass": true,
      "detail": "[0.465, 1.395, 0.331]"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: broken copy",
      "pass": true,
      "detail": "accept.py exits 1: exit 1"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: broken copy fails exactly tris, size, ground, colliders, clips, physics",
      "pass": true,
      "detail": "['clips', 'colliders', 'ground', 'physics', 'size', 'tris']"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: every failure comes with a fix hint",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: a 100x size is named as centimetres",
      "pass": true,
      "detail": "ratio 99.06"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: the clip check names what is there and what is missing",
      "pass": true,
      "detail": "have [\"NlaTrack\", \"NlaTrack2\"], missing [\"open\"]"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: a rejected model still runs without Godot errors",
      "pass": true,
      "detail": "no errors"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: --collider auto builds hulls and only warns",
      "pass": true,
      "detail": "none; built 7 convex hull(s) because --collider auto"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: a missing file exits 2 (could not run)",
      "pass": true,
      "detail": "exit 2"
    },
    {
      "criterion": "runs",
      "name": "moss mailbox accepted, rebuilt from Blender and accepted, broken copy rejected on the right checks: exits 0 with no script errors",
      "pass": true,
      "detail": "exit 0"
    },
    {
      "criterion": "output",
      "name": "screenshot screenshot.png rendered",
      "pass": true
    },
    {
      "criterion": "output",
      "name": "self-check list has at least 3 items",
      "pass": true,
      "detail": "6 items"
    },
    {
      "criterion": "single",
      "name": "one job per skill (reviewed)",
      "pass": true,
      "detail": "One job: decide whether one GLB is ready for a Godot game (import errors, budget, size, origin, materials, colliders, clips, a drop test, runtime errors) and say how to fix each failure. Making or rigging the model stays with the Blender and art skills; placing it in a level stays with the engine skills."
    },
    {
      "criterion": "bilingual",
      "name": "English SKILL.md",
      "pass": true
    },
    {
      "criterion": "bilingual",
      "name": "Chinese SKILL.zh.md shipped next to SKILL.md",
      "pass": true,
      "detail": "1811 chars"
    },
    {
      "criterion": "bilingual",
      "name": "Chinese guide written",
      "pass": true,
      "detail": "1480 chars"
    }
  ]
}
