{
  "skill_name": "golang-logging",
  "evals": [
    {
      "id": 1,
      "prompt": "How should I add structured logging to my Go HTTP service?",
      "expected_output": "Use log/slog (Go 1.21+) or zap/zerolog for structured JSON logging. Log with key-value pairs: slog.Info(\"request\", \"method\", r.Method, \"path\", r.URL.Path). Avoid fmt.Println for application logs.",
      "assertions": [
        { "type": "contains", "value": "slog" },
        { "type": "contains", "value": "structured" }
      ]
    },
    {
      "id": 2,
      "prompt": "How do I pass a logger through my Go service layers?",
      "expected_output": "Inject the logger via constructor. Do not use a global logger variable. Each service receives *slog.Logger (or equivalent) as a constructor argument.",
      "assertions": [
        { "type": "contains", "value": "constructor" },
        { "type": "contains", "value": "inject" }
      ]
    },
    {
      "id": 3,
      "prompt": "What log level should I use for expected errors like 'user not found' vs unexpected panics?",
      "expected_output": "Expected/business errors: Warn level. Unexpected errors and system failures: Error level. Debug for developer tracing. Never log at Error for expected validation failures.",
      "assertions": [
        { "type": "contains", "value": "Warn" },
        { "type": "contains", "value": "Error" }
      ]
    }
  ],
  "should_not_trigger": [
    "Write a table-driven unit test in Go",
    "How do I set up Clean Architecture in Go?",
    "Configure golangci-lint linters"
  ]
}
