{
  "skill_name": "pencilkit-drawing",
  "evals": [
    {
      "id": 0,
      "name": "swiftui-sketch-pad",
      "prompt": "I need a SwiftUI sketch pad for our iPad note app: a PencilKit canvas bound to a PKDrawing in our model, the tool palette toggled from a toolbar button, and the drawing saved to disk and restored on launch. Which input policy should we use, and how do we avoid update loops?",
      "expected_output": "Builds a UIViewRepresentable with a Coordinator acting as PKCanvasViewDelegate that writes changes back to the binding. Keeps one PKToolPicker retained in the coordinator, adds the canvas as observer before showing it and makes the canvas first responder. Explains .default, .anyInput and .pencilOnly and picks one with a reason. Persists with dataRepresentation() and PKDrawing(data:), and only assigns the drawing in updateUIView when it differs.",
      "files": [],
      "expectations": [
        "Uses UIViewRepresentable with a Coordinator that implements canvasViewDrawingDidChange(_:)",
        "Retains a single PKToolPicker and adds the canvas as observer before setVisible and becomeFirstResponder",
        "Explains all three drawing policies, describing .default as following the system Pencil setting while the picker is visible",
        "Saves with dataRepresentation() and loads with PKDrawing(data:)",
        "Guards updateUIView with an inequality check to stop update loops"
      ]
    },
    {
      "id": 1,
      "name": "older-ipad-sync",
      "prompt": "Teachers annotate worksheets on new iPads and students open them on iPads still running iPadOS 16. Students report that some worksheets fail to open. Our plan is to set maximumSupportedContentVersion to .version2 on the canvas. Review the plan.",
      "expected_output": "Explains that inks newer than the recipient supports make loading fail, gives the full content version map (version1 pen/pencil/marker, version2 the iPadOS 17 inks, version3 the new fountain pen from iOS 17.5, version4 the new reed pen), and says .version2 does not help iPadOS 16, which needs .version1 or a verified fallback drawing. The cap must be set on both canvas and tool picker. Notes .reed needs 26 and curated picker items need iOS 18 or visionOS 2.",
      "files": [],
      "expectations": [
        "States that unsupported inks make older systems fail to load the drawing",
        "Lists the four content versions with what each adds",
        "Rejects .version2 for iPadOS 16 recipients and asks for .version1 or a checked fallback",
        "Requires the cap on both PKCanvasView and PKToolPicker",
        "Mentions .reed at 26 and PKToolPicker(toolItems:) at iOS 18 or visionOS 2"
      ]
    },
    {
      "id": 2,
      "name": "pencilkit-paperkit-split",
      "prompt": "Product wants our inspection app to gain arrows, text callouts, photo stickers and a magnifier on top of the existing PencilKit signature and sketch features. What stays in PencilKit, what moves to PaperKit, and how do they connect?",
      "expected_output": "PencilKit keeps the canvas, tool picker, PKDrawing persistence and export, stroke inspection and signatures. PaperKit takes shapes and arrows, text boxes, images and stickers, loupes and the markup toolbar. Connects them through PaperMarkupViewController.drawingTool accepting a PKTool and PaperMarkup appending a PKDrawing. Gives a step-by-step handoff plan without claiming PencilKit does structured markup.",
      "files": [],
      "expectations": [
        "Keeps canvas, picker, serialization, export, stroke inspection and signatures in PencilKit",
        "Moves arrows, text boxes, images or stickers, loupes and the markup toolbar to PaperKit",
        "Mentions PaperMarkupViewController.drawingTool taking a PKTool",
        "Mentions PaperMarkup accepting an appended PKDrawing",
        "Does not claim PencilKit provides structured markup",
        "Gives a concrete handoff plan"
      ]
    }
  ]
}
