{
  "skill_name": "ios-swiftui",
  "evals": [
    {
      "id": 1,
      "prompt": "When should I use @State vs @StateObject vs @ObservedObject?",
      "expected_output": "@State for local simple data. @StateObject for VMs (initialized once). @ObservedObject for passed-in VMs. Views should be small structs.",
      "assertions": [
        { "type": "contains", "value": "@State for local simple data" },
        { "type": "contains", "value": "@StateObject for VMs" },
        { "type": "contains", "value": "Small, composable structs" }
      ]
    },
    {
      "id": 2,
      "prompt": "My SwiftUI view is doing complex calculations in the body property. Is this okay?",
      "expected_output": "No. body property must be computationally cheap. Move logic to ViewModel or computed vars. Keep body for UI composition only.",
      "assertions": [
        { "type": "contains", "value": "body property computationally cheap" },
        { "type": "contains", "value": "No Logic in Body" },
        { "type": "contains", "value": "Main Actor" }
      ]
    },
    {
      "id": 3,
      "prompt": "Does the order of SwiftUI modifiers matter? (e.g. .padding().background())",
      "expected_output": "Order matters. Apply layout modifiers before visual ones. SwiftUI modifiers wrap the view in new layers sequentially.",
      "assertions": [
        { "type": "contains", "value": "Modifiers: Order matters" },
        { "type": "contains", "value": "layout modifiers before visual ones" }
      ]
    }
  ],
  "should_not_trigger": [
    "How do I use Core Data?",
    "How do I implement SSL pinning?",
    "How do I set up Fastlane?",
    "How do I register for push notifications?"
  ]
}
