{
  "skill_name": "jira-automation",
  "evals": [
    {
      "id": 1,
      "name": "create-story-from-rough-notes",
      "prompt": "帮我创建一个 Jira story。项目是 PLAT，主题是给 pod weekly summary 做自动化。先整理标题、描述和 acceptance criteria，如果缺信息就问最少的问题。",
      "expected_output": "识别这是创建场景，收集最少必要字段，输出结构化的 Jira story 草稿，包含 summary、description 和 acceptance criteria，并在信息不足时先澄清而不是假装创建成功。",
      "files": [],
      "expectations": [
        "The response clearly identifies this as a Jira create request.",
        "The response asks only for missing minimum information or proceeds directly if enough detail is already present.",
        "The response produces a structured draft with a Jira-ready title and description.",
        "The response includes acceptance criteria rather than only a one-line summary.",
        "The response does not claim the issue was created unless execution and credentials are actually available."
      ]
    },
    {
      "id": 2,
      "name": "update-existing-ticket-description-and-ac",
      "prompt": "更新 OPS-132，把描述改清楚一点，再补三条 acceptance criteria。先告诉我你准备改什么。",
      "expected_output": "识别这是更新已有 issue，先说明计划修改项，必要时读取当前 issue 状态避免覆盖，再给出清晰的更新草稿或执行计划。",
      "files": [],
      "expectations": [
        "The response clearly identifies the target issue key OPS-132.",
        "The response recognizes this as an update workflow, not a create workflow.",
        "The response previews the intended delta before applying changes.",
        "The response includes three concrete acceptance criteria.",
        "The response avoids pretending that the live Jira update already happened if no execution context is present."
      ]
    },
    {
      "id": 3,
      "name": "personal-standup-summary",
      "prompt": "帮我做一个 personal level 的 standup summary，基于我今天更新过的 Jira tickets。输出要短一点，重点写 progress、blockers、next。",
      "expected_output": "识别这是个人维度 Jira 总结，明确时间范围和选择规则，输出简洁的 personal standup summary，聚焦 progress、blockers 和 next actions。",
      "files": [],
      "expectations": [
        "The response identifies this as a personal-level Jira summary request.",
        "The response uses or asks for a bounded time window and selection rule such as today plus assignee/currentUser.",
        "The response organizes the summary around progress, blockers, and next actions.",
        "The response stays concise rather than dumping raw Jira fields.",
        "The response does not drift into team-level reporting unless the user asks for it."
      ]
    },
    {
      "id": 4,
      "name": "pod-weekly-summary",
      "prompt": "总结一下我们 pod 这周的 Jira 进展，重点写 highlights、risks、attention items 和 next actions。",
      "expected_output": "识别这是 pod/team 维度的 Jira 总结，先确认 pod 的范围或筛选条件，再输出 pod weekly summary，覆盖 highlights、risks、attention items 与 next actions。",
      "files": [],
      "expectations": [
        "The response identifies this as a pod-level or bounded team-level summary request.",
        "The response asks for or infers a reasonable pod scope selector such as project, label, component, board, or JQL.",
        "The response uses a weekly reporting frame.",
        "The response includes highlights, risks, attention items, and next actions.",
        "The response avoids overclaiming Jira data that has not yet been read."
      ]
    },
    {
      "id": 5,
      "name": "team-level-sprint-summary",
      "prompt": "给我一个 team level 的 sprint summary，范围是 MOBILE 项目当前 sprint，想看 overall progress、major wins、blockers、aging work。",
      "expected_output": "识别这是 team-level sprint 汇总，建立项目和 sprint 范围，给出适合管理层阅读的 Jira 摘要，覆盖 overall progress、major wins、blockers 和 aging work。",
      "files": [],
      "expectations": [
        "The response identifies this as a team-level Jira summary request.",
        "The response preserves the explicit scope of project MOBILE and current sprint.",
        "The response is structured around overall progress, major wins, blockers, and aging work.",
        "The response sounds manager- or stakeholder-friendly rather than issue-dump oriented.",
        "The response stays within Jira reporting scope instead of drifting into unrelated code execution."
      ]
    },
    {
      "id": 6,
      "name": "ambiguous-jira-request-needs-clarification",
      "prompt": "帮我处理一下这个 Jira 任务",
      "expected_output": "识别信息不足，先用一个聚焦问题澄清是要创建、更新还是总结，并索要最少的缺失信息。",
      "files": [],
      "expectations": [
        "The response does not guess a ticket ID or action type.",
        "The response asks a focused clarification question.",
        "The response offers create, update, or summary as likely intent categories.",
        "The response keeps the clarification minimal instead of asking a long questionnaire."
      ]
    },
    {
      "id": 7,
      "name": "windows-powershell-update-workflow",
      "prompt": "我在 Windows PowerShell 里操作 Jira。请帮我更新 OPS-132 的 summary 和 labels，并给我一段可以直接在 PowerShell 里运行的调用示例，不要给 Bash。",
      "expected_output": "识别用户在 Windows PowerShell 环境中，使用 PowerShell-native 方式给出 Jira update 工作流与示例，优先使用 Invoke-RestMethod、$env:VAR_NAME 与 ConvertTo-Json，而不是 Bash curl heredoc。",
      "files": [],
      "expectations": [
        "The response identifies Windows PowerShell as the target environment.",
        "The response prefers PowerShell-native commands rather than Bash examples.",
        "The response uses or mentions Invoke-RestMethod, $env: variables, or ConvertTo-Json.",
        "The response keeps the task scoped to updating Jira issue OPS-132.",
        "The response does not force Unix-only patterns such as Bash heredocs as the primary solution."
      ]
    },
    {
      "id": 8,
      "name": "analytics-team-mermaid-report",
      "prompt": "帮我看一下 PLAT 项目上个月的 Jira 数据分析，按 assignee 分组，给我一个可视化报告。",
      "expected_output": "识别为 analytics 场景，使用 jira_analytics.py 按 assignee 分组查询 PLAT 项目上月数据，输出包含 Mermaid 图表的分析报告（pie 或 bar chart），并附带统计摘要和 issue 明细表。",
      "files": [],
      "expectations": [
        "The response identifies this as a Jira analytics/visualization request.",
        "The response uses or references jira_analytics.py with appropriate flags.",
        "The response specifies --group-by assignee and a monthly time range.",
        "The response includes or renders Mermaid diagram syntax for charts.",
        "The response provides a statistical summary alongside the visual output."
      ]
    },
    {
      "id": 9,
      "name": "script-execution-get-issue",
      "prompt": "帮我用脚本拉一下 FEAT-781 这个 ticket 的详情。",
      "expected_output": "识别为脚本执行场景，使用 jira_get.py 获取 FEAT-781 的详情，并在环境变量缺失时给出清晰的配置提示。",
      "files": [],
      "expectations": [
        "The response uses or references jira_get.py to fetch the issue.",
        "The response targets the correct issue key FEAT-781.",
        "The response checks or mentions JIRA_BASE_URL and auth environment variables.",
        "The response does not fall back to raw curl when a bundled script is available.",
        "The response explains what the script output will contain."
      ]
    },
    {
      "id": 10,
      "name": "triage-break-down-ticket",
      "prompt": "看一下 PLAT-88 这个 ticket，它太大了需要拆分。帮我分析一下应该怎么拆成 subtasks，先给我一个建议方案，不要直接创建。",
      "expected_output": "识别为 triage/planning 模式，先读取 PLAT-88 当前状态，然后给出拆分建议方案（subtask 列表），明确不执行写操作除非用户要求。",
      "files": [],
      "expectations": [
        "The response identifies this as a triage/planning request, not a direct create.",
        "The response reads or attempts to read the current state of PLAT-88.",
        "The response proposes concrete subtask breakdown suggestions.",
        "The response does not create any issues without user confirmation.",
        "The response offers to execute the creation after user approves the plan."
      ]
    },
    {
      "id": 11,
      "name": "multi-step-update-then-comment",
      "prompt": "先把 OPS-55 的 priority 改成 High，然后加一条 comment 说 'Escalated due to customer impact'，最后 move 到 In Progress。",
      "expected_output": "识别为多步工作流（update + comment + transition），按顺序规划并执行三个操作，每步使用对应的脚本。",
      "files": [],
      "expectations": [
        "The response identifies all three steps: update priority, add comment, and transition status.",
        "The response uses or references jira_update.py, jira_comment.py, and jira_transition.py.",
        "The response targets the correct issue key OPS-55 across all steps.",
        "The response executes steps in a logical order (update → comment → transition).",
        "The response does not skip any of the three requested operations."
      ]
    },
    {
      "id": 12,
      "name": "english-create-epic-with-subtasks",
      "prompt": "I need to create an epic in the PLATFORM project about migrating our authentication service to OAuth 2.0. Break it down into 4-5 subtasks covering discovery, implementation, testing, and rollout. Just draft everything for now, don't create anything yet.",
      "expected_output": "Identifies this as a create + triage workflow in English. Produces a well-structured epic draft with summary, description, and acceptance criteria, plus 4-5 concrete subtask proposals. Does not execute any writes since the user said 'just draft'.",
      "files": [],
      "expectations": [
        "The response identifies the project key PLATFORM.",
        "The response drafts an Epic-level issue with a clear summary and description.",
        "The response proposes 4-5 concrete subtask summaries covering the requested phases.",
        "The response does not attempt to create any issues since the user asked for a draft only.",
        "The response is written in English matching the user's language."
      ]
    }
  ]
}
