{
  "date": "2026-10-12",
  "source_commit": "c8698490811cf28b57409302562fd99fa8184b9a",
  "source_url": "https://github.com/playphoria-io/playphoria-skills/commit/c8698490811cf28b57409302562fd99fa8184b9a",
  "baseline_commit": "1c82bc7f3e4acc06793ab31a72d437b038d778e8",
  "scope": {
    "fixed": [
      "F01",
      "F02",
      "F03",
      "F04",
      "F05",
      "F06",
      "F07",
      "F08",
      "F09",
      "F10",
      "F11",
      "F12",
      "F13",
      "F14",
      "F15",
      "F17",
      "F20"
    ],
    "deferred": [
      "F16",
      "F18",
      "F19"
    ]
  },
  "node": [
    {
      "node": "18.20.8",
      "tests": 27,
      "passed": 27,
      "failed": 0
    },
    {
      "node": "26.11.1",
      "tests": 27,
      "passed": 27,
      "failed": 0
    }
  ],
  "python": {
    "version": "3.12.14",
    "numpy": "2.3.5",
    "tests": 1,
    "subcases": 12,
    "passed": true
  },
  "static": {
    "files": 58,
    "javascript": 18,
    "python": 4,
    "json": 8,
    "markdown_links": 0,
    "explicit_file_references": 90,
    "excluded": {
      "scripts/refstudy/fbx2clip.py": {
        "unchanged": true,
        "sha256": "4f34ecc01a517335be0d04b485309020364a1bc02e3360600bff6289dcc0a1a6"
      },
      "evals/evals.json": {
        "unchanged": true,
        "sha256": "85607a1e4037b069e06b34a7bb7b3afe6457e1b4d038ada948472522a3ee9831"
      },
      "evals/grade.mjs": {
        "unchanged": true,
        "sha256": "f06c713028523fe8f3967de35b7351df58226f77dab5a6f69506400935b3b967"
      }
    },
    "errors": []
  },
  "regression_cases": [
    "F01: default preset and explicit Fr speeds bake without precision mismatches",
    "F02: CLI height is numeric; invalid heights fail clearly",
    "F03: one point, coincident points and line supports return finite balance measurements",
    "F04: hub rejects incompatible entry, accepts matching entry and non-hub exit",
    "F05: signed translations and mixed quaternion signs do not close a loop",
    "F06: first pose, completion and a wholly skipped one-shot deliver hit exactly once",
    "F06: mapped clocks and restarted clips include frame-zero events",
    "F06: small clock corrections do not replay already delivered events",
    "F06: mapped pre-roll waits until zero to deliver the start event",
    "F06/F07: looping pre-roll never emits an event from an imaginary negative cycle",
    "F07: loop wrap and multiple cycles keep chronological event repetitions",
    "F07: stretched inner loops, segment boundaries and idle LOD keep all events",
    "F07: gait steps across multiple cycles stay in phase order",
    "F08: look updates all descendants, rotations and skin positions",
    "F09: mirror swaps full position channels, including a static paired hand",
    "F10: prop remains attached to the hand after ground IK",
    "F10: inferred parent attachment follows look-at in both position and rotation",
    "F10: two-hand grip preserves a shared rigid transform",
    "F10: mirrored grip follows the opposite reactive hand",
    "F10: a held prop follows the displayed hand during cross-fade and additive motion",
    "F10: explicit held-prop loops repeat position, orientation and held state across the seam",
    "F11: settle carries the actual end value into hold and subsequent keys",
    "F12: fractional frame indices and durations are rejected; published attack recipe is continuous",
    "F13: numeric zero overrides previous dial layers",
    "F14: fixed leap budgets are exact or rejected when minima cannot fit",
    "F15: bake refuses invalid root, quaternion and scale before serialization",
    "F20: existing root names survive conversion without collisions or self parenting"
  ],
  "examples": {
    "ambusher_swipe": {
      "build": true,
      "pack_contract": true,
      "fails": 0,
      "warnings": 0
    },
    "ambusher_swipe_robotic": {
      "build": true,
      "expected_fail": true,
      "fails": 3,
      "warnings": 8
    }
  },
  "roundtrip": {
    "clip": "ambusher_swipe",
    "frames": 81,
    "bones": 12,
    "bytes": 9716,
    "max_position_error_m": 2.975463864185457e-8,
    "max_quaternion_component_error": 0.000020037956237839438,
    "deterministic_pack": true
  },
  "independent_reviews": {
    "skill": "check3",
    "reviewers": 3,
    "verdicts": [
      "МОЖНО",
      "МОЖНО",
      "МОЖНО"
    ]
  },
  "integration": {
    "repack_required": true,
    "reason": "paired position channels and local grip tracks",
    "game_integration_tested": false
  },
  "limits": [
    "Минимальные риги и синтетические входы, без проверки персонажа в игре.",
    "Исходные демонстрации сохранены по baseline commit; контрольные варианты не являются записью исправленного runtime.",
    "Скорость походки должна соответствовать досягаемости конечностей; конечность значений и замыкание цикла не гарантируют физический контакт при любой скорости."
  ]
}
