{
  "skill_name": "realitykit-ar",
  "evals": [
    {
      "id": "ar-camera-setup-review",
      "prompt": "Testers say our furniture preview shows a black screen on some iPhones and iPads. The team thinks the USDZ loading is broken. Review the AR setup and tell us what to change, including whether the app should require ARKit.",
      "expected_output": "A setup review covering the camera usage string, support checks, permission and unavailable-AR fallbacks, a correct stance on the required-capability key, and the RealityViewCameraContent default and fallback.",
      "files": [],
      "assertions": [
        "Requires NSCameraUsageDescription in Info.plist",
        "Checks ARWorldTrackingConfiguration.isSupported before presenting AR",
        "Adds fallback UI for denied camera access and unsupported AR instead of blaming model loading",
        "Adds arkit to UIRequiredDeviceCapabilities only if AR is the app's core purpose",
        "Explains that RealityViewCameraContent shows the AR camera by default and offers a non-AR virtual camera fallback"
      ]
    },
    {
      "id": "surface-raycast-placement-review",
      "prompt": "Our code places a picture frame where the user taps by calling hitTest on the RealityView content, and if that misses it uses ray(through:in:to:) and drops the frame at the end of the ray. Is this right for hanging art on a real wall?",
      "expected_output": "A review separating virtual picking from real-surface detection, with plane anchors for simple cases and an ARKit raycast for tap placement.",
      "files": [],
      "assertions": [
        "States that hitTest finds collision shapes on virtual entities, not physical surfaces",
        "States that ray(through:in:to:) is not evidence of a real surface",
        "Suggests AnchorEntity(.plane(...)) for simple plane placement",
        "Notes that RealityViewCameraContent exposes no ARSession and uses ARView.raycast(from:allowing:alignment:) with AnchorEntity(raycastResult:) for one-shot tap placement",
        "Keeps collision shapes for entity interaction only"
      ]
    },
    {
      "id": "ios-visionos-boundary-review",
      "prompt": "We are porting a visionOS scene to iPhone. It uses ARKitSession with WorldTrackingProvider and PlaneDetectionProvider, and an older part of the app still renders a SceneKit SCNView with SCNNode and SCNPhysicsBody. Plan the iOS architecture and the notes for the accessibility and gesture teams.",
      "expected_output": "An iOS plan that drops visionOS providers, uses the iOS RealityKit path, treats SceneKit separately, and hands off gesture and accessibility policy.",
      "files": [],
      "assertions": [
        "Says the visionOS ARKitSession providers are not the iOS path",
        "Uses RealityViewCameraContent, ARWorldTrackingConfiguration.isSupported, entities and AnchorEntity on iOS",
        "Does not claim SCNView, SCNNode or SCNPhysicsBody can be patched with RealityKit entity APIs",
        "Treats SceneKit as a separate path or an explicit migration",
        "Hands off gesture and accessibility policy while naming InputTargetComponent, CollisionComponent and AccessibilityComponent"
      ]
    }
  ]
}
