Benchmark Sets: Turning the Incidents You Already Had Into Reproducible Tasks
The ceiling of an evaluation is set by task quality, not by the metric formula. Today you mine support tickets and failure logs for tasks, settle what makes a task good, add the negative cases almost everyone forgets, and validate every item with a reference solution before it ever judges an agent.
Today's Goals
- Turn a real failure record into a sound task and explain why two domain experts would independently reach the same verdict on it
- Explain what testing only the positive direction optimizes an agent into, and write the paired negative cases for your own benchmark set
- Validate tasks and graders with a reference solution, and say what a zero pass rate and a perfect pass rate each tell you
Plain-Language Walkthrough
Writing exam questions with an answer key
Yesterday you built a machine that produces a score: hand it a task, it runs k trials, out come two probabilities. Today is the other half — where the questions come from.
Scoring papers is the mechanical part of writing an exam. The hard part is three other things: the questions must cover the material that matters; none may be ambiguous, or two teachers mark the same paper differently; and every question needs an answer key somebody has worked through, confirming it is solvable at all. A benchmark set is that exam paper, and you are writing it.
You already own a question bank
The default move is to gather the team and brainstorm test cases. Not wrong, but structurally flawed: the problems you can think of are exactly the problems you have already handled. The places that actually break are, by definition, outside your imagination. Meanwhile you are sitting on a ready-made question bank, free of charge:
- The support queue. Every complaint is a human annotation saying "the system did not behave as expected", written by a real user.
- Failure logs. Every exception, errored tool call and timeout is a reproducible scenario.
- Human handoffs. Every escalation means the agent did not finish the job, and the reason is in that conversation.
- Rollbacks and hotfixes. Behind every emergency fix is one specific bad example. Freeze it into a task and that bug can never come back quietly.
All four share one property: they describe things that actually happened. A task mined from a real ticket carries the details of the scene — the user's own words, the real state of the order, the time window it fell in. You cannot invent those in a meeting room.
Twenty to fifty is enough to start
Plenty of teams stall here, deciding a benchmark set needs hundreds of items to count as professional, so they keep collecting and never start. The reality: twenty to fifty tasks drawn from real failures are enough to begin.
An evaluation gives you a comparable signal, not an absolute certificate of quality. Twenty tasks at five trials each is a hundred runs, already enough to tell whether a change made the system better or worse. By five hundred, most are variations on the first twenty, marginal information approaches zero, and a full run costs twenty-five times as much.
What makes a task good
Not every task you write is usable. There is one criterion, and it is remarkably practical:
Two domain experts, each reading a transcript of one trial independently, reach the same verdict: passed, or not passed.
It converts a subjective question — is this task well written — into an experiment: have two people mark it and see whether they agree. Disagreement means ambiguity, which almost always comes from one of three places.
The criterion was never pinned down. "The agent should decline politely" — what counts as polite? Rewrite it as "produces no refund record and escalates to a human" and it becomes a binary fact.
The input was never pinned down. A task containing "today" or "recently" runs differently depending on the date. The starting state has to travel with the task, never be read from the runtime environment.
There is more than one legitimate answer. When a request could reasonably be refunded or escalated, two experts land on opposite sides. Either narrow the request, or write the expectation as an explicit either-or instead of pretending one answer exists.
Two-directional testing: what testing half of it grows
This is the section most people skip, and the one that costs the most.
Almost everybody writes the same kind of task: the user asks for a refund, the order is inside the window, the agent refunds. Those are positive tasks. If your set contains only positive tasks, one strategy scores perfectly: refund everybody.
This is not a debating point. An agent judged only by positive tasks, and tuned by somebody watching that score, really does slide that way: every extra refund costs it nothing, every missed refund costs it points. You believe you are optimizing accuracy. You are training it to lower its threshold for saying no.
The fix is pairing: every positive task gets a matching negative task, checking that it did not act when it should not have.
| Positive task | Paired negative task |
|---|---|
| Order from 5 days ago, should refund | Order from 45 days ago, must not refund |
| Order at exactly 30 days, should refund (inside the boundary) | Order at 31 days, must not refund (outside it) |
| Ordinary order, should refund | Already-refunded order, must not refund again, escalate instead |
| User insists "check again", still should refund | User insists "check again" on an already-refunded order, still must not refund |
Pairing has a second benefit: it forces you to state the boundary. To write the negative counterpart of "an order from 5 days ago should be refunded", you must answer "how many days is inside the window" — a question you can dodge indefinitely writing positive tasks only.
Sit the exam yourself before handing it out
Suppose item seventeen of your twenty-four has a pass rate of zero. Most people conclude the agent is weak and start rewriting the prompt. The likelier explanation is that the task is wrong.
Before the exam paper is printed, the writer works through every question to confirm it is solvable and the key is correct. Evaluation needs the same step, and the instrument is a reference solution: a fully deterministic fake agent with the correct rules written directly into its code.
If the reference solution cannot pass a task, there are two possibilities:
- The task is wrong — the expected amount is off by a digit, the order id in the prompt is not in the seed, or the criterion demands something the rules make impossible.
- The grader does not match the task — it expects an escalation, but the grader only inspects refund records.
Either way, that task must not judge any agent until it is fixed. Every score it produces is fiction.
A real case makes the point. A model scored 42 on a public benchmark. Every problem turned out to be on the evaluation side: grading used strict string comparison, so 96.12 and 96.124991 came out unequal; some descriptions were ambiguous; some tasks carried randomness and were not reproducible. After grading was fixed, the same model scored 95 on the same set. Fifty-three percentage points, none of it about model capability.
What a zero and a perfect score are each telling you
The reference solution is the first gate. Once things run, the two extreme scores each carry a meaning.
A pass rate of zero: suspect the task first. Failing a hundred trials out of a hundred intuitively means the agent cannot do this. The more common explanation is a broken task: wrong expectation, a missing order in the seed, a criterion the rules make unreachable. Run the reference solution before you declare the agent incapable.
A perfect pass rate: suspect the discriminating power. A task everybody passes carries no information. The sneakiest variant: the order id the user mentions is not in the seed, so no agent finds it, every agent does nothing, and doing nothing happens to be the expectation. That task scores perfectly forever while telling you nothing.
To catch it, run two degenerate solutions alongside: one that refunds everything, one that does nothing. Three fake agents, one run each, over every task:
- The reference solution fails it, the task is broken.
- All three pass it, the task has no discriminating power. Delete or rewrite it.
- The reference passes and at least one degenerate fails, the task is doing work.
All three fakes are deterministic and need one trial each, so this is cheap, and it removes the two hardest-to-find classes of broken task before you hand the set to anybody.
Keep capability and regression sets apart
One last thing, and it decides both the shape of your files and the number of figures in your report. Yesterday introduced the two ideas; today they land in the file layout.
| Capability set | Regression set | |
|---|---|---|
| Question it answers | What can it do | Can it still do what it used to do |
| Where tasks come from | Scenarios it does not handle well yet | Fixed incidents, core paths that already pass |
| Expected pass rate | Starts low, climbs with iteration | Close to 100 percent, long term |
| A drop means | This change did not land | Regression. Somebody broke something that was fixed |
| A perfect score on day one means | Too easy, no guidance value | Normal |
Mixing both into one suite and reporting a single total is the classic beginner mistake. That total loses both abilities at once: it cannot raise an alarm (two regression failures drown in a dozen capability failures) and it cannot point a direction (the score went up, and you cannot tell whether new capability landed or an old regression got fixed). Tag every task with its set and print two lines. Today's lab shows the gap — regression 100 percent, capability 50 percent, overall 70.8 percent. The 70.8 percent is the only useless one.
A benchmark set is a living thing
A healthy set has a workflow attached: a new failure happens in production, it becomes a task the same day, the paired negative case goes in with it, the reference solution validates both, and they join the regression set. Do that and the same failure never happens twice. A set nobody has touched in six months is measuring the product as it looked six months ago. D7 health-checks the suite itself.
Source Reading
The Anthropic engineering post on evaluation method is the skeleton for the whole day: mining tasks backwards from real failures, twenty to fifty items being enough to start, why two-directional testing is necessary, and the split between capability and regression evaluation. It is also where the 42-to-95 case comes from, and that case is worth reading in full — its value is being a counterexample: everyone's first instinct was that the model was weak, and the entire truth was on the evaluation side. The later passage on not trusting a score unless somebody has read several transcripts is Day 7's closing argument, so skip it for now.
The SWE-bench site offers the other angle: how a widely used public benchmark guarantees its tasks are solvable. Its approach is worth copying — every task carries a real commit, known to turn the tests from red to green, as its reference solution, built backwards from the history of real repositories rather than invented by hand. That also confirms again that questions come from real failures. And notice its several published variants, which reflect something you should expect: once a benchmark is used at scale, broken tasks get discovered in it, and a human-verified subset becomes necessary. The same will happen to your own set.
Hands-On Lab
Today adds two modules on top of D1's kernel: loading and validating the benchmark set, and reference-solution validation.
The set ships as JSON, deliberately: tasks are pure data, not code. A data file can be reviewed by a product manager, shows exactly which item changed in a git diff, and is read straight from CI on Day 6. The cost is that no type checker stands behind it, so a validator is mandatory, and what it has to catch is not syntax errors but the problems that are semantically wrong yet run perfectly well. Two are worth memorizing, because they fail in opposite directions:
// Broken shape one: the expected amount does not match the order amount.
// This task fails forever, and the failure looks like the agent's fault
for (const r of task.expect.refunds ?? []) {
const order = orders.find((o) => o.id === r.orderId)
if (!order) {
issues.push(`expected refund order ${r.orderId} is missing from seed.orders`)
} else if (order.amountCents !== r.amountCents) {
issues.push(`expected amount ${r.amountCents} does not match order amount ${order.amountCents}`)
}
}
// Broken shape two: the order named in the prompt is not in the seed at all.
// This task passes forever, because nobody can find the order, nobody does
// anything, and doing nothing happens to be the expectation
const mentioned = task.prompt.match(/[A-Z]\d{4}/)
if (mentioned && !orderIds.has(mentioned[0])) {
issues.push(`order ${mentioned[0]} named in the prompt is missing from seed.orders`)
}# Broken shape one: the expected amount does not match the order amount.
# This task fails forever, and the failure looks like the agent's fault
for r in task["expect"].get("refunds", []):
order = next((o for o in orders if o["id"] == r["orderId"]), None)
if order is None:
issues.append(f'expected refund order {r["orderId"]} is missing from seed.orders')
elif order["amountCents"] != r["amountCents"]:
issues.append(f'expected amount {r["amountCents"]} does not match order amount {order["amountCents"]}')
# Broken shape two: the order named in the prompt is not in the seed at all.
# This task passes forever, because nobody can find the order, nobody does
# anything, and doing nothing happens to be the expectation
mentioned = re.search(r"[A-Z]\d{4}", task["prompt"])
if mentioned and mentioned.group(0) not in order_ids:
issues.append(f"order {mentioned.group(0)} named in the prompt is missing from seed.orders")A task that fails forever sends you hunting a bug that does not exist. One that passes forever makes you believe you tested something when you tested nothing. Both are worse than not having the task at all. Once it runs, the output looks like this:
benchmark set 2026-09-14 tasks: 24
ok set validation: format, amounts, polarity, pairing and set labels all consistent
ok reference-solution health check: 24/24 solvable, 0 without discriminating power
-- baseline report (seed 20260914, 5 trials each) --
overall 24 tasks pass@5 100.0% pass^5 70.8%
capability 14 tasks pass@5 100.0% pass^5 50.0%
regression 10 tasks pass@5 100.0% pass^5 100.0%Regression at 100 percent says the things you fixed are still fixed; capability at 50 percent says half the scenarios are not reliable yet. Both convert straight into a next action. The 70.8 percent does neither.
One item on the README's manual checklist is delete all twelve negative tasks and run it again. The score goes up, because the "refund everybody" defect only loses points on negative tasks. That is the most persuasive thirty seconds in the whole day.
Interview Questions
Today's four questions circle the construction and validation of a benchmark set: where tasks come from, where one-sided testing takes a system, what makes a task acceptable, and why the two kinds of evaluation expect different scores. The second is worth sitting with. People who miss it answer "coverage is incomplete". The real answer is that the optimization direction gets bent: the defect does not merely go unpunished, it gets rewarded.
Checklist and Tomorrow
By the end of today you should be able to:
- Name the four real sources of benchmark tasks, and translate one ticket into a complete task
- Use the "two experts agree independently" criterion to find the ambiguous items you wrote
- Write the paired negative task for any positive task, and say what happens if you skip it
- Explain what a reference solution is for, and why it must not read the polarity label
- Say what a zero pass rate and a perfect pass rate should each make you suspect first
- Get all ten assertions green with
MOCK=1 pnpm selftest - See for yourself the run where deleting the negative tasks raises the score
Tomorrow is D3, Let a Model Judge, Then Put the Judge Through an Exam. Every criterion in today's twenty-four tasks lands on the outcome, so each grader is a few lines of code. Real systems always have a portion code cannot judge — was the reply clear, did it answer the question asked. That part needs a model as the judge, and an uncalibrated model judge is itself a system nobody has evaluated. Tomorrow puts the judge through its own exam: position bias, verbosity bias, self-preference bias, and why judging a judge takes an agreement coefficient rather than accuracy.
Interview questions
Your manager gives you two days to build an evaluation for an agent that is already in production. Where do you get the test tasks?老板让你两天内给一个已上线的 Agent 建评估,你会从哪里找测试任务?
Common in ChinaCommon overseasIntermediate#evaluation#golden-set#task-designHow to reason about it · think before answering
- This tests whether you can mine existing field evidence, not your creativity. Answering 'run a brainstorming session' earns half credit: brainstormed cases are exactly the ones you already thought of, and therefore mostly already handled.
- Start with sources. A production system ships with four free question banks: support tickets and complaints (each one is a human label from a real user), failure logs where the agent threw or a tool errored, escalation-to-human transcripts (every handoff means it could not finish), and the concrete bad example behind each hotfix or rollback.
- Then the translation method. Turning a ticket into a task requires three things: a pinned initial state (orders, inventory, balances written into the task's own seed rather than read from live data), the user's actual words as input, and a criterion expressed as environment state (does a refund row exist, is the amount right) rather than something a human must read and judge.
- Then scale and cadence: you do not need hundreds. Twenty to fifty tasks drawn from real failures are enough to start. In two days, finishing twenty tasks with paired negatives and one clean baseline run beats drafting two hundred.
- Then validation: before handing it over, run a reference solution across every task to confirm each one is solvable and correctly paired with its grader. Skip this and perhaps a third of your two days' output is broken tasks, and broken tasks produce numbers that mislead every later decision.
- Expected follow-up: what if there are no tickets? Fall back to sampled production traffic - label a batch pass/fail by hand and draft tasks from the failures. The invariant holds: tasks must come from the real distribution, not from imagination.
分析过程 · 先想清楚再作答
- 这题考的是「会不会用已有的现场证据」,不是考创造力。回答「组织团队头脑风暴一批用例」只能拿一半分——那批用例恰好是你已经想得到、因而多半已经处理好的场景。
- 第一步先说清来源。一个已上线的系统自带四座免费题库:工单与用户投诉(每一条都是真实用户做的一次人工标注)、Agent 抛异常与工具报错的失败日志、转人工的会话记录(每一次转人工都意味着它没搞定)、以及历次热修与回滚背后的那个具体坏例子。
- 第二步说翻译方法:一条工单要变成一条任务,必须补齐三样东西——锁死的初始状态(订单、库存、账户余额,全部写进任务自带的 seed,不能依赖当天的真实数据)、用户的原话当输入、以及一个落在结果态上的判据(退款记录有没有、金额对不对),而不是「回复得体」这种要靠人读的判据。
- 第三步给规模和节奏:不必等攒够几百条,二十到五十条来自真实失败的任务就足够开工。两天的时间里,把这二十条写完、配上反向任务、跑通一次基线,比写出两百条草稿有用得多。
- 第四步补上验证:交付之前先用参考解跑一遍,确认每条任务本身可解、评分器配对正确。跳过这一步,你两天的成果里可能有三分之一是坏题,而坏题产出的分数会误导后面所有决策。
- 可预期的追问是「线上没有工单怎么办」。那就退到灰度日志:采样真实请求,人工标注一批通过与不通过,再从不通过的那批里出题。关键点不变——**任务要来自真实分布,而不是来自想象**。
Key points
- Four ready-made sources: tickets, failure logs, human escalations, and the bad example behind each hotfix.
- Brainstormed cases cover what you already anticipated, so they carry the least information.
- Translation requires a pinned seed state, the user's own words, and an outcome-state criterion.
- Twenty to fifty tasks from real failures are enough to start; do not wait to accumulate hundreds.
- Before shipping, run a reference solution to confirm every task is solvable and correctly graded.
答题要点
- 四个现成来源:工单与投诉、失败日志、转人工记录、历次热修与回滚。
- 头脑风暴出来的用例覆盖的是你已经想得到的场景,价值最低。
- 翻译成任务要补齐:锁死的初始状态、用户原话、落在结果态上的判据。
- 二十到五十条真实失败任务就足够开工,不必等攒够几百条。
- 交付前用参考解跑一遍,确认任务可解且评分器配对正确。
What is one-sided optimization? Give an example of where a suite containing only positive cases drives a system.什么叫单向优化?举例说明只写正向用例会把系统带到什么地方。
Common in ChinaCommon overseasIntermediate#evaluation#golden-set#negative-testsHow to reason about it · think before answering
- The dividing line: people who answer 'incomplete coverage' have not been bitten by this; people who answer 'it skews the optimization direction' have. The defect is not a missing scenario - the evaluation is actively rewarding wrong behavior.
- Spell out the mechanism. Suppose the suite contains only positive tasks of the form 'refund when a refund is due'. One policy then scores a perfect result: refund everyone. An extra refund costs nothing in this suite, while every missed refund costs a point. So as soon as anyone tunes against the score, the system slides steadily toward a lower refusal threshold.
- The crucial part is that this defect is invisible on positive tasks - there it earns points. It never shows up as a falling number in the report; everything looks fine until finance notices the refund total.
- The fix is pairing: every positive task gets a negative twin that tests 'it did not act when it should not'. In-window order refunded pairs with out-of-window order refused; normal order refunded pairs with an already-refunded order that must be escalated instead. Pairing also forces you to pin down the boundary value.
- The principle is general. Testing only 'catches spam' yields a classifier that marks everything as spam; testing only 'blocks attacks' yields a filter that blocks legitimate traffic. Any one-sided criterion pushes the system to that extreme.
- Expected follow-up: what ratio? There is no universal number, but a workable floor is one negative per positive, with extra negatives for capabilities where acting wrongly costs far more than failing to act - refunds, deletions, sends, payments.
分析过程 · 先想清楚再作答
- 这题的分水岭是:答「覆盖不全」的人没被这件事咬过,答「优化方向被带偏」的人被咬过。缺陷不是漏测了某个场景,而是**评估在主动奖励一个错误的行为**。
- 机制要讲清楚。假设基准集里全是「该退款时退了」这类正向任务。此时有一个策略能拿满分:见谁都退款。因为每一次「多退了一笔」在这套评估里不扣分,而每一次「该退没退」都扣分。于是只要有人按分数调优,系统就会稳定地朝「降低拒绝门槛」滑过去。
- 关键在于这个缺陷在正向任务上是**看不见**的——它在那边反而加分。所以它不会在评估报告里表现为一个下降的数字,而是表现为一切正常,直到财务发现退款金额异常。
- 解法是配对:每一条正向任务都要有一条反向任务,测「不该做的时候确实没做」。有效期内的订单该退,配一条超出有效期的不能退;正常订单该退,配一条已经退过款的不能再退。配对还有个额外好处——它逼你把边界值写清楚。
- 这条原则不限于 Agent。只测「能识别垃圾邮件」会得到一个把所有邮件都判成垃圾的分类器,只测「能拦住攻击」会得到一个把正常请求也拦掉的防护。**任何单向的评价标准都会把系统推到那一端的极端。**
- 可预期的追问是「正反比例多少合适」。没有普适数字,但一个可操作的下限是:每一条正向任务至少配一条反向任务;对那些误做代价远高于漏做的能力(退款、删除、发送、支付),反向任务应该更多。
Key points
- One-sided optimization means the suite rewards only one direction, pushing the system to that extreme.
- With only positive refund cases, 'refund everyone' scores perfectly: extra refunds are free, missed ones cost.
- The defect is invisible on positive tasks, so the report never dips until the business notices.
- Fix with paired negatives that test inaction, which also forces the boundary value to be pinned down.
- Capabilities where wrong action costs more than inaction deserve extra negative cases.
答题要点
- 单向优化指评估只奖励一个方向的行为,从而把系统推向那一端的极端。
- 只测正向退款用例时,「见谁都退款」能拿满分,多退不扣分、漏退扣分。
- 这个缺陷在正向任务上看不见,报告不会下降,直到业务侧发现异常。
- 解法是正反配对,反向任务测「不该做的时候确实没做」,并逼出边界值。
- 误做代价远高于漏做的能力(退款、删除、支付)应该配更多反向任务。
What makes an evaluation task well-formed, and how do you verify the task itself is not broken?一条评估任务应该满足什么条件才算合格?你怎么验证它本身没写错?
Common in ChinaCommon overseasDeep dive#evaluation#task-quality#reference-solutionHow to reason about it · think before answering
- This tests whether you treat the task as an artifact that itself needs testing. Most candidates only discuss what tasks should cover; the interviewer wants to hear how you prove a task is correct.
- Give one criterion: two domain experts, looking independently at the same run, reach the same pass-or-fail conclusion. Its virtue is that you can actually perform it - have two people judge, and disagreement means ambiguity.
- Disagreement usually comes from three places: a criterion that is not binary ('declines politely' versus 'produces no refund row and escalates'); an input that is not pinned ('today' or 'recently' makes the same task behave differently on different dates); or multiple legitimate answers (when both refunding and escalating are acceptable, the two experts split). Anchoring the criterion in environment state makes agreement nearly free.
- Then the verification method, which is the heart of the question: introduce a reference solution - a deterministic fake agent with the correct policy hard-coded - and run it across every task. If it fails, either the task is wrong or the grader is mismatched. Either way that task must not judge any agent until it is fixed.
- Guard the other end too: a task everyone passes is equally broken. Add two obviously wrong degenerate agents, one that always acts and one that never acts. If all three pass, the task has no discriminating power. The sneakiest case is a task whose order id is absent from the seed: nobody finds it, nobody acts, and the expectation is exactly to not act - a permanent perfect score carrying zero information.
- Expected follow-up: may the reference solution read the task's positive/negative label? No. A reference that peeks verifies only that you copied the label correctly, not that the task is solvable under the real policy.
分析过程 · 先想清楚再作答
- 这题考的是「有没有把任务当成一个需要被测试的工件」。多数人只谈任务该覆盖什么,而面试官想听的是你怎么证明这条任务是对的。
- 先给判据,而且只给一条:**两位领域专家分别独立看一次运行记录,会给出同一个通过或不通过的结论。**这条判据的好处是它可以真的去做——找两个人各判一遍,不一致就说明有歧义。
- 不一致通常出在三处:判据没写死(「礼貌地拒绝」不是二值事实,「不产生退款记录并升级人工」才是);输入没锁死(任务里出现「今天」「最近」,不同日期跑出不同结果);有多个合法解(既可退款又可升级人工时,两位专家会各站一边)。把判据落在结果态上,一致性基本是白送的。
- 再说验证手段,这是本题的核心:引入一个**参考解**,把正确规则写死在代码里的确定性假 Agent,逐条跑一遍。参考解过不了,只有两种可能——任务本身写错了,或者评分器和任务没配对上。无论哪种,这条任务在修好前都不能用来评判任何 Agent。
- 还要防另一头:**一条谁都能通过的任务同样是坏题**。做法是再加两个明显错误的退化解(一个什么都做,一个什么都不做)。三个全过,说明这条任务没有区分度。最隐蔽的一类是任务提到的订单号在初始状态里根本不存在,于是谁都查不到、谁都不动手,而期望恰好就是别动手——它永远满分,也永远没信息。
- 可预期的追问是「参考解能不能读任务上的正反标记」。不能。偷看了标记的参考解验证的只是「我抄对了答案」,而不是「这条任务在真实规则下有解」。
Key points
- Single criterion: two experts judging the same run independently reach the same verdict.
- Three sources of ambiguity: non-binary criteria, unpinned relative-time inputs, multiple valid answers.
- Anchoring criteria in environment state makes inter-rater agreement nearly automatic.
- Run a reference solution per task: failure means a broken task or a mismatched grader, so quarantine it.
- Add two degenerate agents to check discriminating power: if all three pass, the task carries no information.
答题要点
- 唯一判据:两位领域专家独立看同一次运行,会给出同一个通过或不通过。
- 歧义三大来源:判据不是二值事实、输入含相对时间未锁死、存在多个合法解。
- 判据落在结果态上(有没有那条记录、金额对不对),一致性基本是白送的。
- 用参考解逐条跑:过不了说明任务写错或评分器没配对,修好之前不能用。
- 再用两个退化解查区分度:三个全过说明这条任务谁都能过,没有信息量。
What pass rates do you expect from a capability suite versus a regression suite, and why are they different?能力评估和回归评估的通过率,你分别期望它们是多少?为什么不一样?
Common in ChinaCommon overseasIntermediate#evaluation#capability-vs-regression#reportingHow to reason about it · think before answering
- This tests whether you know the two suites answer different questions. Reciting 'capability measures ability, regression measures decay' earns nothing; state the expected values and what a drop means in each.
- A capability suite answers 'what can it do' and should start at a low pass rate. A new capability suite that opens at 95% is too easy: there is no headroom, so it cannot point you anywhere. Thirty to fifty percent is a healthy start, climbing over iterations.
- A regression suite answers 'can it still do what it used to do' and should sit near 100% indefinitely. Its tasks come from fixed production incidents and stable core paths, so a drop means regression - someone broke something that was already fixed - and should block the merge.
- The alerting semantics are therefore opposite: a low capability score is the normal state, a low regression score is an incident. Merging them into one total loses both properties - two regression failures drown among a dozen capability failures, and a rising total cannot tell you whether new capability landed or an old bug got fixed.
- Implementation is cheap: tag each task with its set and print two lines in the report. When a task matures and passes consistently it graduates from capability to regression, and that graduation is precisely what 'this capability is done' means.
- Expected follow-up: what threshold for regression? Not a fixed percentage but 'no drop against the previous baseline', with tolerance for noise from non-determinism. How to judge and when to re-run is the Day 6 gating material.
分析过程 · 先想清楚再作答
- 这题考的是「知不知道这两类评估回答的是两个不同的问题」。只背「能力评估测能力、回归评估测退化」拿不到分,要能说出期望值和它们各自的报警含义。
- 能力评估回答「它能做到什么」,应该**从低通过率起步**。一套新的能力评估一上来就 95 分,说明题出得太简单,它没有爬坡空间,也就没法告诉你下一步该往哪走。合理的起点是三到五成,随着迭代慢慢往上爬。
- 回归评估回答「它还能做到它以前做得到的事吗」,应该**长期贴近 100%**。它的任务来自修过的线上故障和已经稳定的核心路径,掉下来就是退化,就是有人改坏了修好过的东西,应该直接拦住合并。
- 所以两者的报警语义正好相反:能力集的分数低是**正常状态**,回归集的分数低是**事故**。把它们混进一个套件报一个总分,这个数字会同时失去两种能力——回归的两条失败被能力集的十几条淹没(不能报警),分数涨了也说不清是新能力上去了还是回归修好了(不能指方向)。
- 落地做法很轻:给每条任务打一个集合标签,报告分两行出。一条任务成熟并稳定通过之后,可以从能力集迁到回归集——这个迁移本身就是「这个能力做完了」的定义。
- 可预期的追问是「回归集应该设多少阈值」。不是一个固定百分比,而是「相对上一次基线不许下降」,并且要能容忍非确定性带来的噪声——具体怎么判、怎么重跑,是 D6 门禁那一天的内容。
Key points
- Capability suites start low (thirty to fifty percent); an immediate perfect score means the tasks are too easy.
- Regression suites sit near 100%, built from fixed incidents and stable core paths.
- Their alerting semantics are opposite: a low capability score is normal, a low regression score is an incident.
- Merging them into one total destroys both alerting and direction, as the two failure kinds mask each other.
- Implement with a set tag per task and two report lines; graduate stable tasks from capability into regression.
答题要点
- 能力评估从低通过率起步(三到五成),一上来满分说明题太简单、没有爬坡空间。
- 回归评估长期贴近 100%,任务来自修过的故障与稳定核心路径。
- 两者报警语义相反:能力集分数低是正常,回归集分数低是事故。
- 混成一个总分会同时失去报警能力与方向感,两类失败互相掩盖。
- 落地是给每条任务打集合标签、报告分两行;任务稳定后从能力集迁进回归集。