{
  "slug": "construct",
  "skill": "construct",
  "upstream": "rtmandreyev/construct@3e3556317ccab78d37007ed509e38fcf558e2325",
  "upstreamSha": "3e3556317ccab78d37007ed509e38fcf558e2325",
  "patches": {
    "count": 2,
    "sha256": "2498f80532eb0a2f30ff2cc7b3dd37b121c19afc43470ad8645a2fcf74f8a560"
  },
  "date": "2026-11-03",
  "engine": "Construct scripts/cli.py on Python 3 + Godot 4.7.2 (glTF import and physics)",
  "env": [
    "Node v22.23.4",
    "Python 3 standard library only (the skill installs nothing)",
    "Godot 4.7.2-stable headless: import, AnimationPlayer, RigidBody3D, HingeJoint3D",
    "xvfb + OpenGL 3 (gl_compatibility) for the screenshot"
  ],
  "trigger": "static",
  "passed": 33,
  "total": 33,
  "commands": [
    "(cd examples && env GODOT={godot} python3 tests/run_tests.py)",
    "(cd examples && env GODOT={godot} python3 tests/screenshot.py ../screenshot.png)"
  ],
  "checks": [
    {
      "criterion": "trigger",
      "name": "SKILL.md description says when to use it",
      "pass": true,
      "detail": "Turn a description into a hologram and a 3D model. Use this skill when you need a game prop or blockout built from data "
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Make a treasure chest prop with a lid that opens and export it as a glb for Godot\"",
      "pass": true,
      "detail": "rank 1/121, overlap 6"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Build a 3D blockout of a door with a working hinge and colliders for my game engine\"",
      "pass": true,
      "detail": "rank 1/121, overlap 4"
    },
    {
      "criterion": "trigger",
      "name": "triggers on: \"Describe a prop in metres with named parts and export a gltf model with joints\"",
      "pass": true,
      "detail": "rank 1/121, overlap 8"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Write dialogue for my visual novel\"",
      "pass": true,
      "detail": "rank 25/121, overlap 0"
    },
    {
      "criterion": "trigger",
      "name": "does not trigger on: \"Tune the jump buffer in my platformer\"",
      "pass": true,
      "detail": "rank 10/121, overlap 0"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: check",
      "pass": true,
      "detail": "no errors, nothing to repair: 0 errors, 0 warnings"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: check",
      "pass": true,
      "detail": "no warnings either"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: check --fit",
      "pass": true,
      "detail": "the solid fits (nothing pokes through or hides): 0 warnings"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: build writes the hologram page",
      "pass": true,
      "detail": "172 KB"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: build audit",
      "pass": true,
      "detail": "ok, no errors or warnings: size {'width': 0.7098, 'height': 0.637, 'depth': 0.428} m"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: export prop.glb (--colliders)",
      "pass": true,
      "detail": "wrote prop.glb: 11 parts, 1056 triangles, 660 edges; animations: open"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: export glued.glb (--pieces glued --colliders)",
      "pass": true,
      "detail": "wrote glued.glb: 11 parts, 2112 triangles, 1320 edges; animations: open"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: export --materials colours the parts by id",
      "pass": true,
      "detail": "chest-wood, iron, lantern-light, plinth-wood"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: Godot 4.7 imports both .glb files",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: every part arrives as a named node",
      "pass": true,
      "detail": "11/11"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: --colliders",
      "pass": true,
      "detail": "a collision shape per part (-convcolonly): 11 shapes"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: size in metres matches the scene (within 2%)",
      "pass": true,
      "detail": "0.710 x 0.637 x 0.428 m vs [0.7098, 0.637, 0.428], worst 0.0%"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: the open animation is there",
      "pass": true,
      "detail": "[\"open\"]"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: opening swings the latch up and over to the back",
      "pass": true,
      "detail": "latch z 0.21 -> -0.27 m, y 0.74 m"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: the lantern rides on the lid to the back",
      "pass": true,
      "detail": "lantern (y 0.51, z 0.00) -> (y 0.51, z -0.40)"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: --pieces glued",
      "pass": true,
      "detail": "one body for the chest, one for the lid: [\"lantern-chest-body\", \"lantern-chest-lid-open\"]"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: construct_joints.gd hangs the lid on a HingeJoint3D",
      "pass": true,
      "detail": "1 joint(s)"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: 60 physics frames on a floor",
      "pass": true,
      "detail": "the glued chest settles in place: largest move 0.4 cm"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: nothing sinks through the floor",
      "pass": true,
      "detail": "lowest point -0.003 m"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: Godot acceptance script finished",
      "pass": true,
      "detail": "DONE 0 failed"
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: no Godot errors on import or run",
      "pass": true
    },
    {
      "criterion": "runs",
      "name": "lantern chest: check, build, export, Godot acceptance: 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": "5 items"
    },
    {
      "criterion": "single",
      "name": "one job per skill (reviewed)",
      "pass": true,
      "detail": "One job: a prop described as data (parts in metres, joints, assembly order), checked until clean, then built as a hologram page or exported as a glTF prop with joints and colliders. Sculpting, texturing and rigged characters stay with the Blender skills."
    },
    {
      "criterion": "bilingual",
      "name": "English SKILL.md from upstream",
      "pass": true
    },
    {
      "criterion": "bilingual",
      "name": "Chinese guide written",
      "pass": true,
      "detail": "1888 chars"
    }
  ]
}
