{
  "skill_name": "angular-forms",
  "evals": [
    {
      "id": 1,
      "prompt": "How do I create a typed reactive form in Angular?",
      "expected_output": "Use strictly typed FormGroup<T>. Never use untyped FormGroup. Use FormBuilder with nonNullable to avoid null values.",
      "assertions": [
        { "type": "contains", "value": "FormGroup" },
        { "type": "contains", "value": "nonNullable" }
      ]
    },
    {
      "id": 2,
      "prompt": "How do I write a custom validator for an Angular form?",
      "expected_output": "Create standalone validator functions in a separate file. Do not put validation logic inside the component class.",
      "assertions": [
        { "type": "contains", "value": "standalone" },
        { "type": "contains", "value": "separate file" }
      ]
    },
    {
      "id": 3,
      "prompt": "Should I use template-driven or reactive forms in Angular?",
      "expected_output": "Use Reactive Forms for any non-trivial inputs. Template-driven forms are not recommended.",
      "assertions": [
        { "type": "contains", "value": "Reactive" },
        { "type": "contains", "value": "non-trivial" }
      ]
    },
    {
      "id": 4,
      "prompt": "How do I use nonNullable reactive forms?",
      "expected_output": "Use fb.nonNullable.group() or set nonNullable: true on individual controls. This ensures form values are always strings, not null.",
      "assertions": [
        { "type": "contains", "value": "nonNullable" },
        { "type": "contains", "value": "group" }
      ]
    },
    {
      "id": 5,
      "prompt": "How do I sync a form with a signal store in Angular?",
      "expected_output": "Use valueChanges with takeUntilDestroyed() to subscribe to form changes.",
      "assertions": [
        { "type": "contains", "value": "valueChanges" },
        { "type": "contains", "value": "takeUntilDestroyed" }
      ]
    },
    {
      "id": 6,
      "prompt": "What are the anti-patterns in Angular forms?",
      "expected_output": "No Template-Driven Forms for complex inputs. No untyped FormGroup. No validation logic in the component — extract to standalone functions.",
      "assertions": [
        { "type": "contains", "value": "Template-Driven" },
        { "type": "contains", "value": "standalone" }
      ]
    }
  ],
  "should_not_trigger": [
    "How do I build a controlled form in React with useState?",
    "How do I validate request bodies in NestJS?",
    "How do I use Zod for schema validation?",
    "How do I create a Django ModelForm?"
  ]
}
