[
 {
  "id": "T01",
  "cid": "ai_session_search_archive#0",
  "target": "ai_session_search_archive",
  "question": "我想在归档里用语义搜索找一条大概记得内容的会话。我手头有几周前导出的文件列表 txt，可以直接拿来跑吗？缓存里已经有向量的话会不会漏结果？",
  "excerpt": "Generate the file list from the current source scope at query time. Do not reuse an old `tmp/*files*.txt`: a semantic-search file list is also a result allowlist, so an omitted file cannot be returned even if its vectors exist in the cache.",
  "fact": "语义搜索的文件列表必须在查询时现生成，不能复用旧列表；该列表是结果白名单，遗漏文件即使已有向量也不会返回。",
  "rubric": {
   "must_include": [
    "不得复用旧的文件列表，需按当前范围在查询时重建",
    "文件列表是结果白名单，遗漏文件不会返回（即使缓存有向量）"
   ],
   "reference_answer": "不能复用旧列表；每次查询都要现生成当前范围的文件清单，因为它就是结果白名单，漏掉的文件即使缓存有向量也不会出现在结果里。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T02",
  "cid": "compressor#0",
  "target": "compressor",
  "question": "我用 Compressor 的命令行监控一个批次，把输出为 JSON 的参数放在命令最后就报错。这个参数应该放在命令的哪个位置才不会出错？",
  "excerpt": "On at least some Compressor versions, `-format json` must be placed immediately after `-monitor`. Placing it at the end can fail with `Invalid parameter: -format`.",
  "fact": "在部分版本中，-format json 必须紧跟在 -monitor 之后，放在命令末尾会报无效参数。",
  "rubric": {
   "must_include": [
    "明确说明 -format json 要紧跟在 -monitor 之后",
    "指出放在命令末尾会导致参数无效错误"
   ],
   "reference_answer": "把 -format json 紧跟在 -monitor 后面（不要放在命令末尾）。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T03",
  "cid": "deployment_github_actions_koyeb#0",
  "target": "deployment_github_actions_koyeb",
  "question": "用 GitHub Actions 部署到 Koyeb 时，它老是按语言检测走了 buildpack 而不是用我的 Dockerfile。要在那一步里填哪个入参、具体值是什么，才能强制按容器构建？",
  "excerpt": "## 核心原则\n\n1. **关闭 Koyeb Autodeploy**——部署时机由 GitHub Actions 控制\n2. **`needs` 门控**——所有测试通过后才触发部署\n3. **显式指定 `git-builder: \"docker\"`**——否则 Koyeb 会检测到 Python/Node 文件而回退到 buildpack",
  "fact": "在 Koyeb 的 Git 部署中必须把 git-builder 显式设为 docker，否则会回退到 buildpack。",
  "rubric": {
   "must_include": [
    "git-builder",
    "docker"
   ],
   "reference_answer": "把部署步骤的 git-builder 入参明确设置为 \"docker\"，即可强制走 Docker 构建而不是 buildpack。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T04",
  "cid": "mac_universal_clipboard#0",
  "target": "mac_universal_clipboard",
  "question": "我的 Mac 和 iPhone 之间复制粘贴经常不同步，重启也不行。我愿意用终端执行一条命令，你能给出包含要修改的具体偏好项位置，以及需要重启的所有相关后台进程名称的完整命令吗？",
  "excerpt": "defaults write ~/Library/Preferences/com.apple.coreservices.useractivityd.plist ClipboardSharingEnabled 1; \\\nkillall useractivityd 2>/dev/null; \\\nkillall sharingd 2>/dev/null; \\\nkillall pboard 2>/dev/null; \\",
  "fact": "将 ClipboardSharingEnabled 写为 1，并重启 useractivityd、sharingd、pboard 三个进程以重置通用剪贴板。",
  "rubric": {
   "must_include": [
    "将 ~/Library/Preferences/com.apple.coreservices.useractivityd.plist 的 ClipboardSharingEnabled 设为 1",
    "重启/killall 这三个进程：useractivityd、sharingd、pboard"
   ],
   "reference_answer": "在终端把 ~/Library/Preferences/com.apple.coreservices.useractivityd.plist 的 ClipboardSharingEnabled 写成 1，然后依次 killall useractivityd、sharingd、pboard 让它们由 launchd 重启即可。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T05",
  "cid": "openreview#1",
  "target": "openreview",
  "question": "我连续执行了几次查询后现在所有请求都报 403，账号没变，怎么立刻恢复？需要删哪个本地缓存再重试？",
  "excerpt": "4. **Login rate limit。** 每个时间窗口最多 3 次登录。CLI 已做 token 缓存，正常使用不会触发。如果 token 过期导致 403，删除 `tmp/openreview_token.json` 后重试一次即可。",
  "fact": "出现 403 时删除 tmp/openreview_token.json 再重试一次即可恢复。",
  "rubric": {
   "must_include": [
    "明确要删除 tmp/openreview_token.json",
    "说明删除后重试一次即可"
   ],
   "reference_answer": "删除 tmp/openreview_token.json 后重试一次即可。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T06",
  "cid": "workflow_bilibili_whisper_transcription#1",
  "target": "workflow_bilibili_whisper_transcription",
  "question": "我批量下载 B 站音频时总是被风控拦下，下载之间应该间隔多少秒才比较稳妥？",
  "excerpt": "**三阶段工作流：**\n\n1. **获取列表** → 使用 yt-dlp 提取视频ID（注意B站API限制，可能返回352错误）\n2. **单线程下载** → 逐个下载音频，每次间隔2-3秒，避免触发反爬\n3. **本地转录** → 默认运行 MLX Qwen ASR 1.7B；只有在兼容性或回归原因下才回退到 Whisper",
  "fact": "下载阶段必须单线程且每次下载间隔2-3秒以避免触发 B 站反爬。",
  "rubric": {
   "must_include": [
    "2-3秒"
   ],
   "reference_answer": "每次下载之间间隔 2-3 秒。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T07",
  "cid": "workflow_watchdog#0",
  "target": "workflow_watchdog",
  "question": "我在 Claude Code harness 里启动了一个要跑很久的代码生成任务，应该默认隔多久自动再醒来看一下它的进度？用哪个调度动作去设这个唤醒？",
  "excerpt": "派出任务后，设一个 reasonable 的巡检 wake-up，默认约 30 分钟（1800s）。Claude Code harness 用 `ScheduleWakeup`；其他 harness 用对应的定时机制（如 Process Launcher 的延时执行，见 `rules/skills/process_launcher.md`）。",
  "fact": "默认巡检唤醒约 30 分钟（1800s），在 Claude Code harness 用 ScheduleWakeup 设置。",
  "rubric": {
   "must_include": [
    "默认约 30 分钟（1800s）的巡检间隔",
    "使用 ScheduleWakeup 安排唤醒"
   ],
   "reference_answer": "默认约 30 分钟（1800s），用 ScheduleWakeup 安排唤醒。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T08",
  "cid": "workflow_parallel_subagents#1",
  "target": "workflow_parallel_subagents",
  "question": "我想在并行任务里把 subagent_type 直接写成 deepseek/deepseek-v4-pro 来用这个模型，可以吗？如果不行应该怎么配？",
  "excerpt": "`subagent_type` 是 OpenCode 原生 agent 名，不是模型名，也不是旧 `category`。OpenCode 会执行 `agent.get(subagent_type)`；找不到同名 agent 就报 `Unknown agent type`。\n\n内置 agent 与自定义 agent 的来源：\n\n- `general` / `explore` 是 OpenCode 源码内置 agent。\n- 其他命名 agent 来自 `~/.config/opencode/opencode.json`、项目 `opencode.json`，或 `.opencode/agent(s)/*.md`。\n- `provider/model` 只是底层模型入口。要能被 `task` 调用，必须包成 agent，例如 `writer_deepseek -> deepseek/deepseek-v4-pro`。",
  "fact": "subagent_type 必须是已注册的 agent 名而不是 provider/model；要用具体模型需先包装成 agent，否则会报 Unknown agent type。",
  "rubric": {
   "must_include": [
    "subagent_type 只能填已注册的 agent 名，不能填模型名",
    "否则会报 Unknown agent type",
    "要用指定模型需先在配置中将其包装成 agent 再调用"
   ],
   "reference_answer": "不可以，subagent_type 只能填已注册的 agent 名；模型名会报 Unknown agent type；要用该模型先把它在配置里包装成一个 agent（如 writer_deepseek→deepseek/deepseek-v4-pro）再调用。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T09",
  "cid": "codex_cli#1",
  "target": "codex_cli",
  "question": "我把 Codex 指向一个第三方兼容后端后总是报 web_search 工具不支持，想在配置里彻底关掉这个能力：具体应该写哪一行、用什么值，放在配置文件的哪个层级？布尔值能不能用？",
  "excerpt": "Disable it as a bare top-level key `web_search = \"disabled\"` in the base config or in the profile file the run loads (profile files layer over the base config). The value is a string unit variant: on 0.156.1 only `\"disabled\"` parses (`false`, `on`, `off`, and `enabled` are all rejected with `expected string only in 'web_search'`).",
  "fact": "要禁用默认的 web_search，需在配置顶层写 web_search = \"disabled\"（字符串），可放在基础配置或加载的 profile 中；布尔值无效。",
  "rubric": {
   "must_include": [
    "写成配置顶层的裸键 web_search = \"disabled\"",
    "值必须是字符串 \"disabled\"，布尔值 false 等会被拒绝"
   ],
   "reference_answer": "在基础配置（或该次加载的 profile）顶层写 web_search = \"disabled\"；只能用字符串 \"disabled\"，false/off 等会被拒绝。"
  },
  "baseline_correct_of_3": 0,
  "review_note": "dropped the base-vs-profile rubric item; question asks level and value"
 },
 {
  "id": "T10",
  "cid": "ai_session_profanity_rate#1",
  "target": "ai_session_profanity_rate",
  "question": "我既有用导出工具生成的 Markdown 归档，也还能直接读取本机的原始会话库。能不能在同一次统计里把这两种来源一起喂进去，这样更全？会不会有重复？",
  "excerpt": "Do not combine an archive with its corresponding native stores in one run; that counts the same messages twice.",
  "fact": "归档与对应的原生会话库不能在同一次运行中同时使用，否则同一批消息会被重复计数。",
  "rubric": {
   "must_include": [
    "不能把归档与对应的原生库在同一次运行中同时使用",
    "原因是会把相同消息重复计算（算两次）"
   ],
   "reference_answer": "不能；归档和对应的原生库不能在同一次运行里混用，否则会把相同消息算两次。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T11",
  "cid": "apple_photos#1",
  "target": "apple_photos",
  "question": "我这次需要清掉大约 120 对候选，能不能一次性发起删除？如果得分批的话，每批最多多少对，而且之前拿到的授权能否复用或对结果不确定的批次再试一次？",
  "excerpt": "- **Delete Batch Bound**: Limit each delete manifest to 50 pairs. Split larger evidence sets into independent plans and require fresh review and authorization for each; never reuse a token or retry an uncertain batch.",
  "fact": "每个删除批次上限为50对，必须拆分独立计划分别复核并授权；禁止复用令牌或重试不确定批次。",
  "rubric": {
   "must_include": [
    "每批最多 50 对，需拆分为独立批次",
    "每批都要重新审核与授权",
    "不得复用令牌，且不允许重试不确定批次"
   ],
   "reference_answer": "不行：每份删除批次最多 50 对，需拆成独立计划分别复核并逐一授权；不得复用之前的令牌，也不能重试结果不确定的批次。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T12",
  "cid": "asr#1",
  "target": "asr",
  "question": "我有一段约2小时10分钟的单个录音，能直接用这个本地转写工具处理吗？如果不行，会在什么阶段被拒绝？把音频切成多段能解决吗？",
  "excerpt": "A single file longer than 7200 seconds is rejected before a model loads. Splitting a file makes separate files; a speaker letter does not continue across slices. Several files that add up to a long day are not one file over the limit.",
  "fact": "单个音频超过7200秒会在模型加载前被拒；切分成多文件可分别处理。",
  "rubric": {
   "must_include": [
    "单个文件超过 7200 秒（2 小时）会被拒绝，所以 2 小时 10 分钟的单文件不能直接处理",
    "在模型加载之前就被拒绝"
   ],
   "reference_answer": "不能直接处理：单文件超过 7200 秒会在加载模型之前被拒绝；切成多个文件可以分别处理（但说话人编号不会跨文件延续）。"
  },
  "baseline_correct_of_3": 0,
  "review_note": "rubric trimmed to the two facts the excerpt states; splitting is allowed but not required for credit"
 },
 {
  "id": "T13",
  "cid": "ct_education#0",
  "target": "ct_education",
  "question": "我想让 ct-edu 的本地查看器播放一个我放在 /tmp 下的 MP4，serve 参数能直接填这个绝对路径吗？如果不行，我应该怎么指定视频文件？",
  "excerpt": "Either flag can be used alone; each accepts a relative path to an existing regular `.mp4` inside the completed workspace. Absolute paths, traversal, symlinks, missing files, and non-MP4 names fail startup with `E_VIDEO_FILE`.",
  "fact": "serve 的视频文件参数必须是工作区内的相对路径，使用绝对路径或符号链接会以 E_VIDEO_FILE 失败。",
  "rubric": {
   "must_include": [
    "视频文件必须是工作区内的相对路径",
    "绝对路径会启动失败并报 E_VIDEO_FILE"
   ],
   "reference_answer": "不能用 /tmp 的绝对路径；需把 MP4 放到该工作区内并用相对路径指定，否则会以 E_VIDEO_FILE 启动失败。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T14",
  "cid": "dataforseo#0",
  "target": "dataforseo",
  "question": "我用 dataforseo 的 CLI 查余额没问题，但一跑关键词相关的命令就返回 40104，切到 sandbox 也一样。这个怎么解决？",
  "excerpt": "DataForSEO may return `40104` when the account is authenticated but not verified. In that case, account/balance can still work, but keyword data endpoints, including sandbox, may be blocked until the user completes verification in the DataForSEO panel.",
  "fact": "40104 出现在账号已认证但未完成验证时；余额可查但关键词数据（含沙箱）被阻止，需在 DataForSEO 面板完成验证。",
  "rubric": {
   "must_include": [
    "说明 40104 的根因是账号未完成验证",
    "指出余额可用但关键词端点（含沙箱）被拦截",
    "给出在 DataForSEO 面板完成验证这一处置"
   ],
   "reference_answer": "这是未完成账号验证导致的 40104；余额接口仍可用，但关键词等（含沙箱）会被拦，去 DataForSEO 面板完成验证即可。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T15",
  "cid": "eink_diary#1",
  "target": "eink_diary",
  "question": "我现在是凌晨 1:30 想要“全天版本”的电子纸图，需要自己改时间窗吗？具体会取哪一段时间来生成？",
  "excerpt": "- **全天语义**：用户说“今天全天/全天版本”时优先用 `--full-day`，不要手算\n  `--minutes`。本地时间 00:00–02:00 之间，`--full-day` 自动解释为昨天完整一天\n  （`yesterday 00:00..today 00:00`）；其他时间解释为今天从 00:00 到当前时刻。",
  "fact": "全天模式应使用 --full-day；00:00–02:00 取昨天整日，其他时段取今天 00:00 至当前。",
  "rubric": {
   "must_include": [
    "不手算分钟/直接用 --full-day",
    "00:00–02:00 取昨天 00:00–今天 00:00",
    "其他时间取今天 00:00 到当前时刻"
   ],
   "reference_answer": "不用手动改分钟，直接用 --full-day：00:00–02:00 间会取昨天 00:00 到今天 00:00，其它时段取今天 00:00 到当前时刻。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T16",
  "cid": "skill_google_maps_routing#0",
  "target": "skill_google_maps_routing",
  "question": "我想用这个路由工具计算“现在出发”的驾驶时间。参数应该怎么填：是只能提供出发时间或到达时间其中一个吗？如果我传一个接近当前时刻的 ISO 时间戳，会不会被 API 拒绝？",
  "excerpt": "Exactly one of `--departure-time` or `--arrival-time` is required.\n\nUse `--departure-time now` for current traffic. The CLI avoids sending a fragile explicit near-current timestamp because Routes API may reject it as not sufficiently in the future.",
  "fact": "route 命令必须二选一提供出发或到达时间；要用当前路况应传 --departure-time now，避免用接近当前的显式时间戳以免被拒。",
  "rubric": {
   "must_include": [
    "--departure-time 与 --arrival-time 只能二选一",
    "“现在出发”用 --departure-time now",
    "不要传接近当前时刻的显式时间戳（Routes API 可能/会拒绝，说“会被拒绝”也算对）"
   ],
   "reference_answer": "只能提供出发或到达时间其中一个；要“现在出发”用 --departure-time now，别传临近当前的显式时间戳，否则可能被 Routes API 拒绝。"
  },
  "baseline_correct_of_3": 0,
  "review_note": " | rubric fixed after spot check: judge failed answers that said the near-now timestamp \"will\" (not \"may\") be rejected",
  "rubric_original": {
   "must_include": [
    "只能二选一提供 --departure-time 或 --arrival-time",
    "“现在出发”要用 --departure-time now",
    "不要用接近当前的显式时间戳，可能被 Routes API 拒绝"
   ],
   "reference_answer": "只能提供出发或到达时间其中一个；要“现在出发”用 --departure-time now，别传临近当前的显式时间戳，否则可能被 Routes API 拒绝。"
  }
 },
 {
  "id": "T17",
  "cid": "hybrid_ai_video#1",
  "target": "hybrid_ai_video",
  "question": "我调用视频生成的创建接口时网络超时了，任务是否已建成不确定。现在能不能直接再发一次同样的创建请求？",
  "excerpt": "State Serialization and Idempotency: Persist exclusive local attempt state and budget reservations before non-idempotent POST calls. Use a single ledger writer or serialized reservations. Ambiguous submissions must block automatic resubmission. Never issue a new POST to resume a known task.",
  "fact": "创建请求超时时不允许自动重发；应保存本次尝试与预算预留，且绝对不要用新的创建请求去续接已知任务。",
  "rubric": {
   "must_include": [
    "不能直接再发一次创建请求：结果不确定的提交必须阻止自动重提，不要用新的 POST 去续上任务"
   ],
   "reference_answer": "不能；结果不确定的提交要阻止自动重新提交，也不要用新的 POST 去恢复任务，应先核实（查询）任务状态。"
  },
  "baseline_correct_of_3": 0,
  "review_note": "rubric reduced to the core rule"
 },
 {
  "id": "T18",
  "cid": "ecg_plot#1",
  "target": "ecg_plot",
  "question": "我的这条心电数据有点长，后面一些采样点落在30秒以后。这个工具会自动把多出来的部分剪掉继续画，还是直接拒绝出图？",
  "excerpt": "- 全部样本落在 0 到 30 秒内。超出 6 条 5 秒窗口的点不会被裁掉，而是拒绝作图",
  "fact": "样本必须全部在0–30秒内，超出6×5秒窗口的点不会被裁剪而是直接拒绝作图。",
  "rubric": {
   "must_include": [
    "样本需要在0到30秒内",
    "不会裁掉超出部分",
    "会拒绝作图"
   ],
   "reference_answer": "不会裁剪；样本必须在0到30秒内，超出就直接拒绝作图。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T19",
  "cid": "koyeb#0",
  "target": "koyeb",
  "question": "我想用 Koyeb CLI 看某个服务的运行日志，只拉取并跟随最后 100 行。--tail 100 这种写法可以吗？如果不行，应该怎么实时跟随当前日志？",
  "excerpt": "# Tail current logs (--tail is a boolean, not a line count)\npython3 scripts/koyeb_env.py -- services logs example-service --app example-app --tail",
  "fact": "日志跟随参数 --tail 是布尔开关，不接受行数；实时查看需直接加 --tail。",
  "rubric": {
   "must_include": [
    "不能用 --tail 100（--tail 不接受数字）",
    "直接使用 --tail 作为布尔开关实时跟随日志"
   ],
   "reference_answer": "不可以；--tail 不是行数而是布尔开关，直接加 --tail 即可实时跟随当前日志。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T20",
  "cid": "narwal#1",
  "target": "narwal",
  "question": "我在客厅直接让我的 Narwal 开始全屋清扫，结果提示 NOT_READY，这是什么原因？怎么做它才会接受开始清扫？",
  "excerpt": "Whole house `narwal-local start`; selected rooms `narwal-local clean --rooms 3,5`. Both use `clean/start_clean`, which **only applies while the robot is docked**; otherwise the robot answers `NOT_READY` (exit 20).",
  "fact": "开始全屋或按房间清扫只在机器人停靠底座时才适用，否则设备返回 NOT_READY（退出码 20）。",
  "rubric": {
   "must_include": [
    "必须先让机器人停靠在底座上再发开始清扫（start/clean 只在停靠时有效）",
    "不在底座时设备回 NOT_READY"
   ],
   "reference_answer": "开始清扫只在机器人停靠在底座时有效，不在底座就回 NOT_READY（CLI 退出码 20）；先让它回座再发 start。"
  },
  "baseline_correct_of_3": 0,
  "review_note": " | rubric fixed after spot check: exit code 20 was required but the question does not ask for it",
  "rubric_original": {
   "must_include": [
    "必须在底座/停靠状态下发送开始清扫",
    "否则会返回 NOT_READY（退出码 20）"
   ],
   "reference_answer": "需要让机器人先停靠在底座，再下达 start/clean；未停靠会被设备以 NOT_READY 拒绝（退出码 20）。"
  }
 },
 {
  "id": "T21",
  "cid": "skill_open_router_data_scraper#0",
  "target": "skill_open_router_data_scraper",
  "question": "我调用 openrouter 的 model-activity 接口时，用模型的短标识总是拿到空数组。应该传哪种 ID 才能成功获取数据？",
  "excerpt": "| 短 slug 不被 model-activity 接受 | 返回空数组 | CLI 自动解析 canonical_slug（末尾 8 位日期）；手动传时需用 canonical_slug |",
  "fact": "model-activity 不接受短 slug，必须使用带末尾 8 位日期的 canonical_slug。",
  "rubric": {
   "must_include": [
    "需要使用 canonical_slug",
    "短 slug 会导致返回空数组"
   ],
   "reference_answer": "要用 canonical_slug（带末尾 8 位日期）；短 slug 会被 model-activity 拒绝并返回空数组。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T22",
  "cid": "skill_opencode_data#0",
  "target": "skill_opencode_data",
  "question": "我想按标题前缀选择一批会话去归档。默认会不会把这些会话下面的子会话也一起算进去？如果只想动被我选中的那些会话本身，要加什么参数？",
  "excerpt": "By default, CLI selectors expand descendants through the session `parent_id` chain. This keeps root sessions and subagent child sessions together. Use `--no-expand` only when the user explicitly wants the raw selector result.",
  "fact": "选择器默认会级联包含子会话；要禁止扩展需加 --no-expand。",
  "rubric": {
   "must_include": [
    "默认会包含子/后代会话",
    "使用 --no-expand 禁止扩展"
   ],
   "reference_answer": "默认会把子会话一起选中；要只保留原始匹配结果，请加 --no-expand。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T23",
  "cid": "video-scoring-audio#1",
  "target": "video-scoring-audio",
  "question": "我在测配乐峰值前先用 ffmpeg 把双声道转成单声道（-ac 1），结果报告说有削波，但原始混音并没有。是不是测法有问题？应该怎么测和做交叉验证？",
  "excerpt": "Do not let ffmpeg downmix with `-ac 1` before measuring peak. For correlated stereo (a mono mix written to both channels, the usual case for a voice-over) it sums the channels at about +3 dB: a mix with a true peak of -1.5 dBFS measured 1.19 and was reported as clipping. `ffmpeg -af ebur128=peak=true -f null -` is an independent cross-check of integrated loudness and true peak.",
  "fact": "测峰值前不要用 -ac 1 下混；相关立体声会被相加抬高约 +3 dB 误报削波，应在原声道上测并用 ebur128 交叉验证。",
  "rubric": {
   "must_include": [
    "说明不要在测峰值前用 -ac 1 下混",
    "提到相关立体声约 +3 dB 的误差来源会导致误报削波",
    "给出 ebur128 交叉验证命令或等效做法"
   ],
   "reference_answer": "不要先用 -ac 1 下混再测；相关立体声会被相加抬高约 +3 dB 导致误报削波；在原双声道上测峰值，并用 ffmpeg -af ebur128=peak=true -f null - 交叉验证。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T24",
  "cid": "speaker_notes#0",
  "target": "speaker_notes",
  "question": "我在整理一份可以直接口播的演讲稿。句子长度有没有硬性上限？普通句子大概应该控制在多少词比较合适？",
  "excerpt": "- **Easy to Say**: Each sentence must be easy to say in one breath. Keep ordinary sentences between 12-20 words. **Hard gate**: no ordinary spoken sentence may exceed 22 words.",
  "fact": "普通口播句子建议12–20词，且有硬性上限：不得超过22词。",
  "rubric": {
   "must_include": [
    "给出普通句子的建议范围为12–20词",
    "明确硬性上限为22词"
   ],
   "reference_answer": "普通句子建议控制在12–20词，并且有硬性上限：任何口播普通句子都不能超过22词。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T25",
  "cid": "skill_tavily#1",
  "target": "skill_tavily",
  "question": "我想把 Tavily 命令行 search 的完整结果直接打印在控制台，加个 --stdout 可以吗？如果加了会不会真正发起请求，退出码是多少？",
  "excerpt": "- Always read the output file selectively in code; do not expect full search or extract JSON on stdout. Passing `--stdout` to `search` or `extract` is an unrecognized-argument usage error (exit 2) and makes no network request.",
  "fact": "对 search/extract 使用 --stdout 会报用法错误并返回退出码 2，且不会发起网络请求。",
  "rubric": {
   "must_include": [
    "不能用 --stdout 打印完整结果",
    "退出码为 2",
    "不会发起网络请求"
   ],
   "reference_answer": "不可以；对 search/extract，加 --stdout 会报未识别参数并直接退出码 2，且不会发送任何网络请求。"
  },
  "baseline_correct_of_3": 0,
  "review_note": "question now names Tavily (the drafted one named no tool); skill_firecrawl states the same rule for its own CLI, so opening it can also yield a correct answer"
 },
 {
  "id": "T26",
  "cid": "zun_music#1",
  "target": "zun_music",
  "question": "在4/4的八小节里，我能在强拍上改动原旋律好几处吗？测试对这种改动的上限具体是多少，怎么才算合规？",
  "excerpt": "2. The skeleton check passes. At each strong beat (beats 1 and 3 in 4/4), the arrangement's pitch class equals the untouched source transcription's. Every deliberate departure is listed in `skeleton_allow`, capped at one per four bars; normally it is only the final cadence.",
  "fact": "强拍需与原曲骨架一致；每四小节最多一次偏离，且必须列在 skeleton_allow（通常只在终止）。",
  "rubric": {
   "must_include": [
    "每四小节最多一次在强拍偏离原曲",
    "这些偏离必须记录在 skeleton_allow",
    "通常只允许终止式那一处"
   ],
   "reference_answer": "不行；强拍的改动每四小节最多一次，而且要记录在 skeleton_allow，通常只放在最后的终止位置。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T27",
  "cid": "skill_image_generation#0",
  "target": "skill_image_generation",
  "question": "我用 Gemini 出图时加了 --quality high，怎么看起来没区别？这个参数在 Gemini 下到底会不会生效？",
  "excerpt": "`--quality low|medium|high|xhigh|max|auto` applies to GPT Image models. GPT Image 2.5 adds `xhigh`, `max`, and `auto`, and its quality scale is finer than GPT Image 2's: 2.5 `high` costs about a quarter of GPT Image 2 `high`, and 2.5 `max` matches the old `high`. Gemini accepts the flag but ignores it because quality tiers are provider-specific.",
  "fact": "Gemini 会接受 --quality 参数但忽略它；该参数只对 GPT Image 模型生效。",
  "rubric": {
   "must_include": [
    "明确说明 --quality 在 Gemini 下被忽略/不起作用",
    "指出该参数仅对 GPT Image 模型生效"
   ],
   "reference_answer": "在 Gemini 下 --quality 会被忽略，只有 GPT Image 系列才会应用质量设置。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T28",
  "cid": "skill_process_launcher#1",
  "target": "skill_process_launcher",
  "question": "我提交了两条同一时刻运行的定时任务，请求返回冲突错误。怎么做才能让它们同时保留？如果要用新的替换掉旧的，又该怎么处理？",
  "excerpt": "Nothing is created on 409. If the overlap is intentional, re-submit the same request with `\"confirm_conflict\": true`. To replace a conflicting job instead, cancel it first with `POST /scheduled/{id}/cancel`. `PATCH /scheduled/{job_id}` applies the same guard when moving `run_at` onto a conflicting time (same `confirm_conflict` escape hatch). The guard matches exact times only;",
  "fact": "相同执行时间会触发409冲突；想并存需带confirm_conflict=true，想替换则先取消原任务；冲突只匹配精确时间。",
  "rubric": {
   "must_include": [
    "要并存：用同样的请求重新提交并带 \"confirm_conflict\": true",
    "要替换：先用 POST /scheduled/{id}/cancel 取消冲突的旧任务再提交"
   ],
   "reference_answer": "409 时什么都没创建；要两条并存就带 confirm_conflict: true 重新提交；要替换就先 cancel 旧任务再提交新任务。"
  },
  "baseline_correct_of_3": 0,
  "review_note": "dropped the exact-time-only rubric item, which the question does not ask"
 },
 {
  "id": "T29",
  "cid": "skill_resend_email#1",
  "target": "skill_resend_email",
  "question": "我想按“最近两天”导出收到的邮件为 Markdown，可以把 --after/--before 直接设成 ISO 时间吗？如果不行，正确的按日期筛选流程是什么？",
  "excerpt": "`received list/export-all-md --after` and `--before` are Resend pagination cursors, not timestamp filters. Do not pass ISO timestamps to them; the API expects UUID cursor values and will return a validation error. For date-window analysis, export recent messages first and filter Markdown files by `created_at` locally.",
  "fact": "--after/--before 是分页游标（UUID），不能用时间戳；应先导出一页最近邮件，再按 Markdown 的 created_at 本地筛选日期。",
  "rubric": {
   "must_include": [
    "--after/--before 不是时间过滤器，不能传 ISO 时间",
    "它们需要 UUID 游标",
    "先导出最近邮件，再本地按 created_at 过滤"
   ],
   "reference_answer": "不可以；--after/--before 是分页游标（UUID），不能传 ISO 时间。先导出一页最近邮件，再在本地根据 Markdown 的 created_at 进行日期过滤。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 },
 {
  "id": "T30",
  "cid": "skill_typefully_twitter#1",
  "target": "skill_typefully_twitter",
  "question": "我想把一篇文章分发到 X，只发一条帖子但不限制在 280 字内。默认应该用哪种长度模式？如果用户明确要短推时，需要加什么参数来切到普通长度？",
  "excerpt": "For article distribution posts (e.g. from a content platform), default to Typefully long post. A \"single Twitter post\" means one Typefully post, not a 280-character normal X post. Do not impose the 280-character limit unless the user explicitly says \"普通推文\", \"280 字内\", \"short tweet\", or uses `--no-long-post`.",
  "fact": "文章分发默认用长文模式；“单条推文”指一条 Typefully 帖子而非 280 字短推，只有用户明确要短推时才用 --no-long-post。",
  "rubric": {
   "must_include": [
    "默认走长文模式/不要强加 280 字限制",
    "“单条推文”不是 280 字限制而是一条 Typefully 帖子",
    "要短推需加 --no-long-post"
   ],
   "reference_answer": "默认按长文模式处理；“单条推文”指一条 Typefully 帖子而非 280 字短推；只有用户明确要短推时才加 --no-long-post。"
  },
  "baseline_correct_of_3": 0,
  "review_note": ""
 }
]