{
  "schema": "niua.example-session/v1",
  "outcome": {
    "verdict": "pass",
    "asset": "Street lantern",
    "file": "https://ohao.tech/landing/props/lantern.glb",
    "artifact_sha256": "66ba3c0e7baab0e9e3606cfe1c007d8c701b0e542b44bcc589b27b9642d8269f",
    "contract": "glb.prop@1",
    "receipt": {
      "id": "05ae6dfd-a4a2-444b-95c0-13d317741c66",
      "verify": "https://api.ohao.tech/api/v1/receipts/05ae6dfd-a4a2-444b-95c0-13d317741c66",
      "page": "https://ohao.tech/niua/receipts/05ae6dfd-a4a2-444b-95c0-13d317741c66"
    },
    "attempts": 3,
    "fixed_before_passing": [
      {
        "rule": "materials.glass_is_transmissive",
        "label": "glass transmission",
        "applied": "Glass transmission set to 1 (KHR_materials_transmission).",
        "attempt": 1
      },
      {
        "rule": "budget.triangles",
        "label": "triangle budget",
        "applied": "Decimated to 19,011 triangles.",
        "attempt": 1
      },
      {
        "rule": "collision.present",
        "label": "collision shape",
        "applied": "Added a 12-triangle box collider, UCX_d1_lantern.",
        "attempt": 2
      }
    ]
  },
  "about": "A real agent session, recorded on production on 2026-10-15: a street lantern passes glb.prop@1 with a signed receipt. Fixed before passing: glass transmission, triangle budget, collision shape. outcome is the result; attempts and calls are the full story, in order.",
  "session": "example-session-2026-10-15",
  "recorded_at": "2026-10-15T15:11:08.250871Z",
  "prop": "Street lantern (built in Blender for our game Somnabulate)",
  "contract": {
    "ref": "glb.prop@1",
    "sha256": "bbcd15c99186b1b626ce51f5351431a52a5f37bb7f8c4ec9ed9cc33b120cdd39"
  },
  "receipt": {
    "id": "05ae6dfd-a4a2-444b-95c0-13d317741c66",
    "verify": "https://api.ohao.tech/api/v1/receipts/05ae6dfd-a4a2-444b-95c0-13d317741c66",
    "page": "https://ohao.tech/niua/receipts/05ae6dfd-a4a2-444b-95c0-13d317741c66"
  },
  "steps": [
    "get_contract glb.prop@1",
    "upload the file, then check_artifact {key, contract}",
    "on fail: read failures[] (rule, path, expected, got, fix), repair the file in your tool",
    "upload and check_artifact again; repeat until verdict is pass",
    "keep receipt.receipt_id; anyone can verify it at GET /api/v1/receipts/{id}"
  ],
  "attempts": [
    {
      "attempt": 1,
      "verdict": "fail",
      "check_id": "e3689673-2ac1-462b-8ee2-459ed8bd59ee",
      "artifact_sha256": "f4c4f6fc44299e11e1aa5e15ae252c03769266d6d1bdabc68202ea3d19f3a793",
      "triangles": 24792,
      "problems": [
        {
          "rule": "materials.glass_is_transmissive",
          "path": "/materials/1",
          "subject": "glass",
          "expected": "KHR_materials_transmission.transmissionFactor > 0",
          "got": "baseColorFactor alpha 1.00, transmission 0.00",
          "fix": "Set the Principled BSDF Transmission Weight to 1.0 and export with glTF transmission enabled.",
          "plain": "The glass material is not marked transmissive (transmission 0), so engines draw it as an opaque surface.",
          "applied": "Glass transmission set to 1 (KHR_materials_transmission)."
        },
        {
          "rule": "budget.triangles",
          "path": "/nodes/0",
          "subject": "d1_lantern",
          "expected": "<= 20000 triangles per part",
          "got": "24792 triangles",
          "fix": "Decimate this part or remove hidden faces.",
          "plain": "The lantern has 24,792 triangles; the contract allows 20,000 per part.",
          "applied": "Decimated to 19,011 triangles."
        },
        {
          "rule": "collision.present",
          "path": "/nodes",
          "subject": "asset",
          "expected": "a collision mesh node in the scene (UCX_*, *-colonly, *-col, *_col, or extras.collision = true)",
          "got": "none",
          "fix": "Add a simple convex collision mesh named UCX_<part> (or <part>-colonly for Godot).",
          "plain": "There is no collision shape, so nothing can hit the lantern or rest on it.",
          "applied": "Not fixed yet: still failing on attempt 2."
        }
      ],
      "receipt_id": null
    },
    {
      "attempt": 2,
      "verdict": "fail",
      "check_id": "4d433643-8e1b-405e-89b8-0154e6f3d9d0",
      "artifact_sha256": "bdd521b3d061a7319e608a613cab9fcf551018cc83e25e7b0594860c9b0181ef",
      "triangles": 19011,
      "problems": [
        {
          "rule": "collision.present",
          "path": "/nodes",
          "subject": "asset",
          "expected": "a collision mesh node in the scene (UCX_*, *-colonly, *-col, *_col, or extras.collision = true)",
          "got": "none",
          "fix": "Add a simple convex collision mesh named UCX_<part> (or <part>-colonly for Godot).",
          "plain": "There is no collision shape, so nothing can hit the lantern or rest on it.",
          "applied": "Added a 12-triangle box collider, UCX_d1_lantern."
        }
      ],
      "receipt_id": null
    },
    {
      "attempt": 3,
      "verdict": "pass",
      "check_id": "8f10aab0-4cec-4d0d-aee2-08775eb7198b",
      "artifact_sha256": "66ba3c0e7baab0e9e3606cfe1c007d8c701b0e542b44bcc589b27b9642d8269f",
      "triangles": 19011,
      "problems": [],
      "receipt_id": "05ae6dfd-a4a2-444b-95c0-13d317741c66"
    }
  ],
  "calls": [
    {
      "id": "90352a9d-09df-42f3-97d9-f9395b7ec4a7",
      "tool": "get_contract",
      "client": "niua-example-agent/1.0",
      "status": "ok",
      "latency_ms": 1375,
      "charged_cents": 0,
      "created_at": "2026-10-15T15:11:08.250871Z",
      "check_id": null
    },
    {
      "id": "f73aae7a-6ad5-483a-974c-d1ce5ddade9a",
      "tool": "upload",
      "client": "niua-example-agent/1.0",
      "status": "ok",
      "latency_ms": 4675,
      "charged_cents": 0,
      "created_at": "2026-10-15T15:11:13.109400Z",
      "check_id": null
    },
    {
      "id": "5ce86db8-56f0-469b-8443-5330a76bcc0a",
      "tool": "check_artifact",
      "client": "niua-example-agent/1.0",
      "status": "ok",
      "latency_ms": 2747,
      "charged_cents": 0,
      "created_at": "2026-10-15T15:11:16.340407Z",
      "check_id": "e3689673-2ac1-462b-8ee2-459ed8bd59ee",
      "verdict": "fail",
      "failure_rules": [
        "materials.glass_is_transmissive",
        "budget.triangles",
        "collision.present"
      ]
    },
    {
      "id": "f4bdbaac-80e2-4954-828d-f3db47f14441",
      "tool": "upload",
      "client": "niua-example-agent/1.0",
      "status": "ok",
      "latency_ms": 4355,
      "charged_cents": 0,
      "created_at": "2026-10-15T15:11:20.878906Z",
      "check_id": null
    },
    {
      "id": "2dc5f977-2d5b-4011-bd72-6d9ea7bf16ce",
      "tool": "check_artifact",
      "client": "niua-example-agent/1.0",
      "status": "ok",
      "latency_ms": 2472,
      "charged_cents": 0,
      "created_at": "2026-10-15T15:11:23.678066Z",
      "check_id": "4d433643-8e1b-405e-89b8-0154e6f3d9d0",
      "verdict": "fail",
      "failure_rules": [
        "collision.present"
      ]
    },
    {
      "id": "1bfce607-5c07-4cdd-a78d-f78bd3d476a1",
      "tool": "upload",
      "client": "niua-example-agent/1.0",
      "status": "ok",
      "latency_ms": 3950,
      "charged_cents": 0,
      "created_at": "2026-10-15T15:11:27.963480Z",
      "check_id": null
    },
    {
      "id": "e1a05117-4b66-49bc-b9db-433f8e113fcb",
      "tool": "check_artifact",
      "client": "niua-example-agent/1.0",
      "status": "ok",
      "latency_ms": 2495,
      "charged_cents": 0,
      "created_at": "2026-10-15T15:11:30.793231Z",
      "check_id": "8f10aab0-4cec-4d0d-aee2-08775eb7198b",
      "verdict": "pass"
    }
  ]
}
