[
  {
    "id": "eval-1",
    "scenario": "User asks 'create a tool that validates and safely deletes files with a dry-run option.' The tool must follow the NO TOOL WITHOUT A ZOD SCHEMA iron law and implement proper CQRS boundaries.",
    "expected_behavior": "Skill loads plugin-lifecycle.md and zod-patterns.md. Tool definition includes: Zod schema with paths (z.array(z.string()).min(1)), dryRun (z.boolean().default(false)). Execute function validates paths, uses context.ask() for confirmation, returns structured JSON results. Plugin layer is thin (<100 LOC, assembly only). Tool does one thing (file deletion with validation).",
    "pass_condition": "Tool has complete Zod schema (no z.any()). Tool does exactly one thing. Plugin layer <100 LOC. No business logic in plugin. Results returned as structured JSON."
  },
  {
    "id": "eval-2",
    "scenario": "A tool definition uses z.any() for all parameters and contains 200 LOC of business logic in the plugin layer. The auditor must detect and flag all violations of the skill's quality standards.",
    "expected_behavior": "Skill detects: (1) z.any() violation — 'Zod schema IS the interface' rule, (2) fat plugin violation — plugin layer >100 LOC, (3) business logic in plugin — should be in tool file, not plugin.ts. Anti-pattern detection triggers on Schema Dodger, Fat Plugin, and Swiss Army Tool (if tool does multiple things).",
    "pass_condition": "All 3 violations detected. Correction suggestions provided: replace z.any() with specific Zod types, extract business logic to tool file, reduce plugin to <100 LOC assembly. Validation gate checklist updated with findings."
  },
  {
    "id": "eval-3",
    "scenario": "User asks to build a CLI script that reads project config, analyzes dependency versions, and automatically updates package.json with newer versions. Agent must apply the Script Rule correctly.",
    "expected_behavior": "Skill applies the Script Rule: 'A script should REPORT FACTS and LEAVE JUDGMENT TO THE AGENT.' The script should read config, analyze dependencies, and report which packages are outdated with current vs latest versions. It should NOT automatically update package.json — that mutation belongs to a tool. Script exits 0 (reports facts). No hardcoded paths. Output is structured JSON for agent consumption.",
    "pass_condition": "Script reports facts only (exit 0). No state mutation in script. Output is structured JSON with package names, current versions, latest versions. No hardcoded absolute paths. Script uses environment variables for config paths."
  }
]
