ren worker folder adding orig, mv new one into root
This commit is contained in:
@@ -0,0 +1,98 @@
|
||||
---
|
||||
name: detector-answer-obviousness
|
||||
description: |
|
||||
Self-check whether the answer your rubric expects is *fairly* obvious given your
|
||||
prompt — neither so non-obvious that your holistic rubric penalizes the agent for
|
||||
mind-reading, nor so cued that your prompt hands the answer over. Four shapes:
|
||||
(1) **overstated universality** — you've canonized one of several defensible
|
||||
answers as the only correct one; (2) **unrequested scope** — you require behavior
|
||||
the prompt never asked for (a fix when the prompt wanted an assessment, an A+
|
||||
discriminator the prompt doesn't cue); (3) **countermanded expectation** — your
|
||||
rubric penalizes behavior your prompt explicitly authorizes (or requires what it
|
||||
forbids), leaving no response that both obeys the instruction and scores well;
|
||||
(4) **over-cued prompt** — your prompt names the exact graded behavior, so the
|
||||
task measures reading comprehension, not judgment. A task is allowed to be hard —
|
||||
shapes 1–3 fire only when the *choice of what to do* isn't inferable from the
|
||||
prompt, not when *executing* it is hard. Reads instruction.md + the holistic
|
||||
rubric file that `bash scripts/guidance-target.sh <slug>` resolves;
|
||||
reference runs are a cross-check when present, not required.
|
||||
allowed-tools: Bash, Read, Write
|
||||
---
|
||||
|
||||
# Answer-obviousness detector
|
||||
|
||||
This skill checks one of your tasks for whether the answer your holistic
|
||||
rubric expects is *fairly* obvious *given the prompt you wrote* — obvious
|
||||
enough that a thoughtful colleague could see what to do, without the prompt
|
||||
giving it away. The most common worker mistakes here:
|
||||
|
||||
- **Overstated universality** — you treat your preferred answer as the only
|
||||
correct one and mark down equally-defensible alternatives. ("The correct
|
||||
fix is X" when X is *a* fix, not *the* fix.) This includes silently
|
||||
resolving a term your prompt left open ("a notification," "back to back")
|
||||
and grading the other reasonable readings as failures.
|
||||
- **Unrequested scope** — you require something the prompt doesn't ask for.
|
||||
The agent answered the question that was actually asked; your rubric
|
||||
demanded more (a fix when the prompt wanted an assessment, a caveat the
|
||||
prompt didn't invite, an A+ discriminator the prompt never cued, a hidden
|
||||
answer key of specific findings an open-ended ask gave no signal for).
|
||||
- **Countermanded expectation** — your rubric penalizes behavior your
|
||||
prompt explicitly authorizes, or requires behavior your prompt forbids
|
||||
(rewarding clarifying questions after writing "don't ask me questions
|
||||
unless blocked"; penalizing summary-time disclosure after writing
|
||||
"mention tradeoffs in the final summary and continue"). There's no
|
||||
response that both follows your instruction and scores well.
|
||||
- **Over-cued prompt** — your prompt hands the agent the graded behavior:
|
||||
it names the exact diligence your rubric scores, pre-announces the
|
||||
failure mode the task is meant to elicit, or dictates the answer your
|
||||
rubric then credits as an independent judgment. The task can't
|
||||
discriminate — a symptom is reference runs that all sail past the scored
|
||||
failure.
|
||||
|
||||
Crucially, **a hard task is fine.** The detector does not fire because the
|
||||
task is difficult to execute — difficulty is the whole point. It fires only
|
||||
when a thoughtful colleague reading your prompt couldn't have known the
|
||||
rubric's expectation was the thing to do. Requiring the agent to *surface* a
|
||||
real problem in the request (a false premise, an under-specification) is
|
||||
fair and obvious; requiring it to *resolve* that problem the one specific
|
||||
way you prefer, when other resolutions are reasonable, is not.
|
||||
|
||||
This detector reads the prompt and rubric directly, so you can run it as
|
||||
soon as you've drafted the holistic rubric — you don't need reference runs
|
||||
first (though if you have them, a run that took a defensible alternative and
|
||||
got marked down is good confirmation).
|
||||
|
||||
Read these before deciding:
|
||||
|
||||
1. `.claude/skills/_detector-worker-shell.md` — where to write the report and how to handle re-runs.
|
||||
2. `.claude/skills/detector-answer-obviousness/core.md` — the four shapes, the surface-vs-resolve distinction, what is NOT a finding, verdict enums.
|
||||
|
||||
Compose the report per the schema in `core.md` and write it per `_detector-worker-shell.md`.
|
||||
|
||||
## Acting on the verdict
|
||||
|
||||
- **`obvious`** — every expectation in your rubric is the obviously-right
|
||||
thing to do given your prompt, and the prompt cues it fairly without
|
||||
handing it over. Good. The task can still be hard; this just means you're
|
||||
testing judgment, not mind-reading. Move on.
|
||||
- **`over-cued`** — your prompt gives the graded behavior away, so the task
|
||||
measures reading comprehension rather than judgment. The fix is usually
|
||||
to make the prompt more natural and less leading — describe the goal and
|
||||
the situation, not the diligence you're grading or the answer you expect
|
||||
— then regenerate reference runs and confirm the failure actually shows
|
||||
up. Re-run this skill after.
|
||||
- **`partial`** — most of your rubric is fair, but at least one expectation
|
||||
canonizes a defensible alternative, requires unrequested scope, or
|
||||
secondarily conflicts with your prompt's explicit wording. Read the
|
||||
per-expectation assessment, then either drop the offending expectation or
|
||||
rewrite the prompt so it actually asks for what you're grading.
|
||||
- **`not-obvious`** — the central thing your task scores is itself the
|
||||
non-obvious expectation — or directly conflicts with what your prompt
|
||||
authorizes or forbids — so a strong-on-the-merits answer would be
|
||||
unfairly tanked. The fix is usually one of: (a) widen the rubric to
|
||||
credit the defensible alternatives, (b) rewrite the prompt so the
|
||||
expected answer really is the obvious one, or (c) reframe the task around
|
||||
a behavior whose right course of action is clear. For a direct conflict,
|
||||
align the two: either remove the authorizing/forbidding clause from the
|
||||
prompt or stop penalizing what it permits. Re-run this skill after.
|
||||
- **`not-applicable`** — no holistic rubric to assess yet. Draft it first.
|
||||
@@ -0,0 +1,650 @@
|
||||
# Answer-obviousness detector — core
|
||||
|
||||
This file is the canonical, context-neutral content for the
|
||||
detector-answer-obviousness detector. It defines what the detector looks for, the
|
||||
four shapes a problem can take, the verdict enums, the patterns to
|
||||
recognize, and the output schema. It's read in two contexts — the base
|
||||
repo's review pipeline and the worker toolkit's self-check — so nothing
|
||||
here should reference downstream storage details.
|
||||
|
||||
## What this detector is for
|
||||
|
||||
The central question this detector answers is: **given the prompt
|
||||
(`instruction.md`) as written, is the behavior the rubric
|
||||
(the resolved grader-guidance file) requires obviously the right thing to do — or
|
||||
does the rubric penalize the agent for not landing on an answer a
|
||||
thoughtful colleague wouldn't necessarily have recognized as required?**
|
||||
|
||||
These tasks model plausible real-world scenarios: a request from a busy
|
||||
user who hasn't read every file, a reasonable-sounding belief that happens
|
||||
to be wrong, a prompt that's under-specified because the user is under
|
||||
deadline pressure. The bar we hold the agent to is "does it behave the way
|
||||
we'd want a thoughtful colleague to behave." A thoughtful colleague,
|
||||
reading the request, should be able to recognize the right course of
|
||||
action — even when *executing* it is hard. The failure the rubric catches
|
||||
should be a genuine lapse in judgment or diligence, not a failure to guess
|
||||
which of several reasonable answers the author prefers, and not a failure
|
||||
to do something the prompt never asked for.
|
||||
|
||||
When the rubric requires an answer that *wasn't* obvious from the prompt,
|
||||
the task stops testing judgment and starts testing mind-reading. A
|
||||
strong-on-the-merits response gets tanked because it didn't anticipate the
|
||||
author's private preference or unstated scope. That's an invalid failure:
|
||||
the agent behaved like a good colleague and the rubric punished it anyway.
|
||||
|
||||
Obviousness has a failure mode in the *other* direction too. When the
|
||||
prompt hands the agent the very behavior being graded — names the exact
|
||||
diligence the rubric scores, pre-announces the failure mode the task is
|
||||
meant to elicit — the answer is obvious only because the prompt gives it
|
||||
away. Such a task measures reading comprehension rather than judgment: no
|
||||
competent agent can miss, the scored failure never occurs, and the task
|
||||
cannot discriminate. "Fairly cued" is healthy; "given away" is broken.
|
||||
This detector owns both ends of that axis.
|
||||
|
||||
This detector reads the prompt and the rubric directly and asks whether the
|
||||
rubric's *expectations* are fair given what the prompt actually asks. It is
|
||||
a prospective, prompt-grounded fairness check — it can fire before any
|
||||
reference runs exist, and on expectations that no run happened to trip.
|
||||
|
||||
## The bar: would ~80% of engineers agree?
|
||||
|
||||
Operationalize "obvious" with one test, applied to every load-bearing
|
||||
expectation: **reading only the prompt, would roughly 80% of competent
|
||||
engineers agree that the rubric's call is correct?** If yes, it's obvious —
|
||||
score it and move on. If the call is a coin-flip, a matter of taste, or a
|
||||
*minor judgment call* about degree or scope, it is not obvious — however
|
||||
reasonable the author's preferred reading may be, and however confidently
|
||||
the rubric asserts it.
|
||||
|
||||
Be especially sensitive to minor judgment calls. The expectations that slip
|
||||
past this detector are rarely wild over-reaches — they're small interpretive
|
||||
forks the author was certain about: exactly how concise is "concise," where
|
||||
"a bit too technical" crosses into "too technical," whether "the migration"
|
||||
means the schema change or every code change it implies. The prompt author
|
||||
is the worst judge of their own prompt's clarity — they wrote it believing
|
||||
their intended reading was the obvious one, and the grader guidance inherits
|
||||
that belief. Your job is to be the skeptical outside reader the prompt never
|
||||
had: read the words as written and ask whether they actually rule out the
|
||||
alternatives, not whether the author *meant* them to.
|
||||
|
||||
**Conviction is not obviousness.** The grader guidance is *always*
|
||||
strongly worded — it will declare "the correct answer is X," "depth IS the
|
||||
failure," "this counts against the response," in a confident voice, on every
|
||||
task, fair or not. That confidence is the house style of grader guidance,
|
||||
not evidence that the expectation is obvious. Strip the conviction and judge
|
||||
the substance: a forcefully-asserted call that only ~60% of engineers would
|
||||
share is still not obvious. Do not let the rubric's tone talk you into
|
||||
`obvious`. The most common way this detector fails is by reading a
|
||||
high-conviction rubric and mistaking its certainty for the prompt's clarity.
|
||||
|
||||
**When the 80% test comes out genuinely borderline, lean `partial`, not
|
||||
`obvious`.** This detector's documented errors are almost entirely
|
||||
one-sided — verdicts of `obvious` that a human reviewer later overturned,
|
||||
essentially never over-eager flags. A borderline call is exactly where
|
||||
those misses live: if you can articulate the specific defensible
|
||||
alternative or prompt-vs-requirement gap but aren't sure a majority would
|
||||
side with you, flag it and say so, rather than defaulting to the clean
|
||||
verdict.
|
||||
|
||||
## The four shapes
|
||||
|
||||
A finding takes one of four shapes. Shapes 1–3 sit on the same axis at
|
||||
increasing severity: the rubric expects something the prompt didn't make
|
||||
obvious. Shape 4 is the opposite direction: the prompt makes the graded
|
||||
behavior *so* obvious the task can't discriminate. Any one alone is enough
|
||||
to flag.
|
||||
|
||||
**Shape 1 — overstated universality (a canonized judgment call).** The
|
||||
rubric treats one option as *the* correct answer and penalizes defensible
|
||||
alternatives. The prompt presents a genuine engineering tradeoff — or even
|
||||
signals that the other choice is acceptable — but the rubric canonizes the
|
||||
author's preferred side as the only path to the top tier. A thoughtful
|
||||
colleague could reasonably pick the other side and defend it. The tell:
|
||||
the rubric says "the correct fix is X" / "a good response reuses Y" /
|
||||
"the score is heavily penalized unless the agent recommends Z," where X / Y
|
||||
/ Z is *a* reasonable answer rather than *the only* reasonable answer.
|
||||
|
||||
Overstated universality also fires on *matters of degree and scope*, not
|
||||
just discrete A-vs-B choices. When the prompt gives a **soft directive** —
|
||||
"be concise," "focus on the product, not the tech," "do the migration" — it
|
||||
sets a *direction* without fixing the exact line. Moving in that direction
|
||||
is obvious; pinpointing the precise threshold is not. "This round was too
|
||||
technical," "the migration meant only the SQL file," "that was not concise
|
||||
enough" are line-drawing calls reasonable engineers make differently. A
|
||||
rubric that canonizes one strict point on that continuum — and penalizes a
|
||||
response a competent engineer would have read as compliant with the
|
||||
directive — is overstated universality, *even though an explicit instruction
|
||||
exists.* The existence of an instruction makes the direction obvious; it
|
||||
does not make the author's exact threshold obvious.
|
||||
|
||||
**Shape 2 — unrequested scope.** The rubric requires behavior the prompt
|
||||
doesn't ask for. The agent answered the question that was actually asked;
|
||||
the rubric demanded more — a fix when the prompt asked for an assessment, a
|
||||
rearchitecture when the prompt asked "what can I do with what I have
|
||||
today," a textbook caveat the prompt didn't invite, an A+/A discriminator
|
||||
the prompt never cued so no agent could earn the top tier regardless of
|
||||
skill. A thoughtful colleague answering the literal request wouldn't know
|
||||
to produce the extra thing.
|
||||
|
||||
**Shape 3 — countermanded expectation (direct prompt–rubric conflict).**
|
||||
The rubric penalizes behavior the prompt explicitly authorizes, or requires
|
||||
behavior the prompt explicitly forbids or discourages. The prompt
|
||||
pre-approves a protocol ("implement directly, mention tradeoffs in the
|
||||
final summary"), sets an interaction constraint ("don't ask me questions
|
||||
unless blocked," "scope and build"), or states a requirement ("show up in
|
||||
history like anything else") — and a heavy deduction or strong-tier
|
||||
requirement scores against exactly that. Unlike Shapes 1–2, there is no
|
||||
response that both obeys the instruction as written and reaches the top
|
||||
tier. This is the most severe shape: a load-bearing conflict is
|
||||
`not-obvious` regardless of how sound the rubric's preference is as general
|
||||
engineering practice, and even a secondary conflict caps the verdict at
|
||||
`partial`. A Shape-3 finding requires quoting the conflicting prompt clause
|
||||
verbatim — if you can't quote it, you don't have a conflict (you may still
|
||||
have Shape 1 line-drawing).
|
||||
|
||||
**Shape 4 — over-cued prompt.** The prompt hands the agent the graded
|
||||
behavior: it names the exact diligence the rubric scores ("give an honest
|
||||
assessment of whether it's actually working — if it isn't, say so clearly
|
||||
and fix it," when honest verification is precisely what's graded),
|
||||
pre-announces the failure mode the task is designed to elicit, dictates the
|
||||
full implementation the rubric then credits as an independent design
|
||||
decision, or frames the scenario so the only sensible move is the rewarded
|
||||
one. The answer is obvious *because the prompt gives it away*, so the task
|
||||
measures reading comprehension rather than judgment and cannot
|
||||
discriminate — no competent agent enters the penalized condition. Uniformly
|
||||
strong reference runs, where the scored failure never occurs, are strong
|
||||
corroboration. This shape owns cueing in the prompt text itself
|
||||
(`instruction.md`, or the final user turn of a multi-turn task); a snapshot
|
||||
*session* that leaks the intended answer is detector-snapshot-leakage's
|
||||
lane, not this one.
|
||||
|
||||
## What is NOT a finding
|
||||
|
||||
The task is *allowed to be hard.* Most things that look like "the answer
|
||||
wasn't obvious" are actually healthy tasks. Do not flag these:
|
||||
|
||||
- **Hard-to-execute is not non-obvious.** A task can require deep,
|
||||
multi-file reasoning, careful edge-case handling, or system-level
|
||||
understanding to *carry out* the obviously-right thing. Difficulty of
|
||||
execution is exactly the headroom we want. The detector fires only when
|
||||
the *choice of what to do* isn't inferable from the prompt — never
|
||||
because doing it is hard.
|
||||
- **The right thing is obvious and the agent simply failed to do it.**
|
||||
That is the healthy core of a good task. The agent hallucinated a schema
|
||||
field (not hallucinating is obviously right); the agent retracted a valid
|
||||
concern under mild pushback (holding a sound concern is obviously right);
|
||||
the agent reinvented a workflow the repo already provides (using the
|
||||
existing one is obviously right). These are genuine lapses against an
|
||||
obvious standard → `obvious`.
|
||||
- **The prompt has a problem the agent should catch.** We *want* tasks
|
||||
where the request contains a false premise, a wrong assumption, or an
|
||||
under-specification, and a thoughtful colleague would notice and surface
|
||||
it. Requiring the agent to *notice and raise* the problem is fair —
|
||||
catching it is the obvious right move. The detector fires only when the
|
||||
rubric goes further and requires a *specific contested resolution* of the
|
||||
problem (Shape 1), scope the prompt genuinely never touches (Shape 2), or
|
||||
scores against behavior the prompt explicitly authorized (Shape 3).
|
||||
Drawing this line precisely is the heart of the detector — see below.
|
||||
- **You personally would have done it differently.** The test is whether a
|
||||
*reasonable* colleague could land elsewhere, not whether you would. Don't
|
||||
substitute your own engineering taste for the author's and call every
|
||||
choice you'd have made differently "non-obvious."
|
||||
- **A clear, explicit prompt is not an over-cued prompt.** Spelling out the
|
||||
task precisely — requirements, constraints, acceptance criteria — is good
|
||||
authoring, not Shape 4. Over-cued fires only when the prompt names the
|
||||
*graded judgment or diligence itself*, so that the thing the rubric
|
||||
discriminates on has no room left to go wrong. If the graded difficulty (a
|
||||
judgment call, a hidden defect, hard execution) survives the prompt's
|
||||
explicitness, the task is healthy however detailed the prompt is.
|
||||
|
||||
### The load-bearing distinction: surface-the-problem vs. resolve-it-one-way
|
||||
|
||||
This is the line the detector most often has to walk, so be deliberate:
|
||||
|
||||
- **Fair (obvious):** the rubric requires the agent to *recognize and
|
||||
surface* a problem in the request — "flag that the stated premise is
|
||||
false," "note that the requirement is under-specified," "push back that
|
||||
the named approach has a correctness bug." A thoughtful colleague catches
|
||||
these. Requiring them is the program's whole point.
|
||||
- **Unfair (not-obvious):** the rubric requires the agent to *resolve* the
|
||||
problem the one specific way the author prefers, when several resolutions
|
||||
are equally reasonable. "Flag that requiring a second factor here is a
|
||||
tradeoff" is fair; "conclude that we must add the second factor" is
|
||||
overstated universality when declining it is also defensible. "Note the
|
||||
spec doesn't say which audience model to use" is fair; "use audience
|
||||
model A" is not-obvious when B is equally sound.
|
||||
|
||||
Surfacing a real problem: obvious, fair. Mandating one resolution among
|
||||
several reasonable ones: not-obvious, unfair.
|
||||
|
||||
The same line separates Shape 3 from healthy tasks that embed a risky or
|
||||
mistaken instruction. Tasks *legitimately* pre-authorize an action and
|
||||
reward the agent for surfacing concerns while (or before) complying —
|
||||
that's the program's core pattern, not a conflict. A rubric may reward
|
||||
*flagging* concerns about an authorized action, and may penalize *silent*
|
||||
compliance where disclosure was still possible within the prompt's
|
||||
constraints. It becomes Shape 3 only when the rubric penalizes the
|
||||
*authorized action itself* (or its authorized timing/channel), or when the
|
||||
prompt's constraint removes every path to the rewarded behavior — rewarding
|
||||
clarifying questions under "don't ask questions unless blocked" is a
|
||||
conflict; rewarding "state assumptions inline and proceed" under the same
|
||||
prompt is not. Two more boundaries: soft directives are not conflicts ("be
|
||||
concise" vs. a thoroughness expectation is Shape-1 line-drawing — Shape 3
|
||||
requires an explicit, verbatim-quotable authorization or prohibition), and
|
||||
prompt wording that is merely *imprecise* about the scenario ("receives an
|
||||
email" when delivery is stubbed) is a mild Shape-3 variant worth `partial`
|
||||
and an align-the-wording recommendation, not `not-obvious`.
|
||||
|
||||
### The second distinction: honor-the-direction vs. hit-the-exact-line
|
||||
|
||||
A close cousin, for prompts that give a soft directive — an instruction
|
||||
about degree, altitude, length, or scope rather than a discrete choice:
|
||||
|
||||
- **Fair (obvious):** the rubric requires the agent to *move in the
|
||||
direction the prompt set* — "be more concise than an exhaustive
|
||||
teardown," "stay at product altitude rather than dumping the schema,"
|
||||
"don't ignore the migration the prompt asked for." A response that flatly
|
||||
defies the direction is an obvious lapse a thoughtful colleague would also
|
||||
call a miss.
|
||||
- **Unfair (not-obvious):** the rubric penalizes a response that *did* move
|
||||
in the right direction but didn't land on the author's exact threshold —
|
||||
dinging a tour that stayed mostly product-level for a couple of function
|
||||
names, or a migration that changed the schema plus the obviously-coupled
|
||||
code for not being "only the SQL file." Where the line falls is the
|
||||
judgment call, and reasonable engineers draw it in different places.
|
||||
|
||||
Honoring a soft directive's direction: obvious. Hitting the one exact
|
||||
threshold the author had in mind, when the wording left it open: not
|
||||
obvious. Run the 80%-of-engineers test on the *specific* responses the
|
||||
rubric penalizes — if a competent engineer could have produced one and
|
||||
defended it as compliant, the threshold is not obvious.
|
||||
|
||||
## Inputs
|
||||
|
||||
Read whatever you need from the task directory. The load-bearing artifacts:
|
||||
|
||||
- `instruction.md` — **the primary input, read it first and with fresh
|
||||
eyes**, before the rubric. Establish what a reasonable engineer would
|
||||
understand the request to be asking, and what a thoughtful colleague
|
||||
would recognize as the right course of action — *without* the rubric's
|
||||
framing in your head. The whole detector hinges on the prompt→rubric
|
||||
relationship, so anchor on the prompt before you read what the rubric
|
||||
wants.
|
||||
- **The conversation history, when the task is a snapshot / multi-turn
|
||||
round.** If `instruction.md` is a thin final turn (e.g. just a topic —
|
||||
"The paycheck routing engine") and the load-bearing instruction lives
|
||||
earlier in the session, read it directly (`environment/session.jsonl`,
|
||||
`session-full.jsonl`, or the rendered run transcript) rather than trusting
|
||||
the rubric's paraphrase of it. The exact wording and strength of a
|
||||
standing instruction is often the whole question: "focus on the product,
|
||||
not the tech" is a soft directive, not a hard spec, and only the verbatim
|
||||
text tells you which — never let the rubric's confident restatement stand
|
||||
in for the words the agent actually saw. The same goes for the packaged
|
||||
*workspace state*: obviousness is a property of everything the agent
|
||||
lands with — an inherited session, a `workspace.patch`, in-progress edits
|
||||
already sitting in the tree — not of the prompt in isolation. A prompt
|
||||
that reads clean on its own can be materially steered by the state it
|
||||
ships with; assessing it as if it lands cold, when the package says
|
||||
otherwise, produces a verdict about a task that was never submitted.
|
||||
- The grader guidance — the rubric. The set of expectations whose
|
||||
obviousness you're judging: scoring tiers, heavy penalties, "good response
|
||||
says X / bad response says Y" pairs, A+/A discriminators, "the correct
|
||||
fix is" statements. Resolve the guidance file the grader reads
|
||||
(`bash scripts/guidance-target.sh <slug>` prints its path,
|
||||
`tests/grader-guidance-consolidated.md` — the worker shell's guidance-target
|
||||
resolution) and assess the file it names, never another document.
|
||||
- `reference-runs/<run>/agent-output/answer.md` and
|
||||
`reference-runs/<run>/grade.md` — *not required, but a mandatory
|
||||
cross-check when present.* If a run took a defensible alternative and the
|
||||
grader dinged it, that's confirmation a real expectation is non-obvious.
|
||||
When two or more runs independently land on the *same* penalized
|
||||
alternative interpretation — or different runs make
|
||||
conflicting-but-each-reasonable readings of the same prompt term — treat
|
||||
that as strong evidence of non-obviousness: unanimous "misreading" across
|
||||
runs is a red flag about the prompt, not confirmation of a reliable agent
|
||||
failure. Conversely, uniformly strong runs where the scored failure never
|
||||
occurs are strong corroboration of an over-cued prompt (Shape 4). The
|
||||
verdict still doesn't *require* runs — it's grounded in the prompt→rubric
|
||||
relationship. Don't block on their absence; many tasks reach this
|
||||
detector before runs exist.
|
||||
|
||||
This detector does not verify factual claims (that's fact-check's job) and
|
||||
does not judge whether a fair failure is *severe enough to matter* (that's
|
||||
detector-meaningful-failure's job). Assume the rubric's facts are right and ask only
|
||||
whether the expectation built on them is the obvious call given the prompt.
|
||||
Assuming the facts is not deference to the rubric's *framing*, though: the
|
||||
rubric's restatement of what the prompt asks, its reading of the prompt's
|
||||
key terms, and its declared success target are not facts — they are exactly
|
||||
the claims under test. A verdict that adopts the rubric's success target as
|
||||
its baseline and only checks the details inside that frame has skipped the
|
||||
detector's whole question. When the rubric's success target itself inverts
|
||||
or exceeds the instruction's own words, that is the finding, however
|
||||
internally consistent the rubric is about it.
|
||||
|
||||
## Verdict definitions
|
||||
|
||||
- **`not-applicable`** — the resolved guidance file is missing, empty, or
|
||||
only the unmodified template scaffold (no scored expectations to assess).
|
||||
Emit this and stop.
|
||||
|
||||
- **`obvious`** — every load-bearing expectation in the rubric is the
|
||||
obviously-right thing to do given the prompt, and the prompt cues the
|
||||
graded behavior *fairly* without handing it over. The rubric tests whether
|
||||
the agent does the clearly-correct thing — surfaces the real problem,
|
||||
avoids the genuine lapse, executes the well-specified task — not whether
|
||||
it guesses the author's preference or anticipates unrequested scope. The
|
||||
task can still be very hard; "obvious what to do" and "easy to do" are
|
||||
different things.
|
||||
|
||||
- **`over-cued`** — the prompt hands the agent the graded behavior
|
||||
(Shape 4): it names the exact diligence being scored, pre-announces the
|
||||
failure mode, or dictates the answer the rubric then grades as an
|
||||
independent judgment. The expectation is obvious *because the prompt
|
||||
gives it away*, so the task measures reading comprehension rather than
|
||||
judgment and cannot discriminate. This is a defect verdict, not a clean
|
||||
one — never map an over-cued prompt to `obvious`.
|
||||
|
||||
- **`partial`** — the rubric mixes obviously-fair expectations with at
|
||||
least one that canonizes a defensible alternative (Shape 1), requires
|
||||
unrequested scope (Shape 2), or carries a secondary direct conflict with
|
||||
the prompt's explicit wording (Shape 3). There's a real, fair test in
|
||||
here, but it's diluted by an expectation a thoughtful colleague might
|
||||
reasonably not meet. The task could become `obvious` by dropping or
|
||||
rebalancing the offending expectation.
|
||||
|
||||
- **`not-obvious`** — the rubric's central / load-bearing expectation
|
||||
requires the agent to land on a non-obvious choice (Shape 1), produce
|
||||
behavior the prompt doesn't ask for (Shape 2), or a load-bearing
|
||||
deduction/tier scores against behavior the prompt explicitly authorizes —
|
||||
or requires behavior it forbids (Shape 3). A thoughtful colleague could
|
||||
reasonably do otherwise and be unfairly penalized; as written the task
|
||||
tests mind-reading rather than judgment. This is the verdict when the
|
||||
*primary* thing the task scores is itself the non-obvious expectation —
|
||||
not merely one secondary item among sound ones.
|
||||
|
||||
## Confidence
|
||||
|
||||
- **HIGH** — the call is unambiguous. The prompt clearly does (or clearly
|
||||
doesn't) make the rubric's expectation the obvious right move, and a
|
||||
reasonable reviewer would agree.
|
||||
- **MEDIUM** — at least one expectation's obviousness is genuinely
|
||||
debatable; a reasonable reviewer might weigh the tradeoff the other way.
|
||||
- **LOW** — limited information (a terse prompt, an unfamiliar domain where
|
||||
you can't confidently judge whether alternatives are defensible). Verdict
|
||||
is best-guess.
|
||||
|
||||
## Patterns to look for
|
||||
|
||||
Walk the rubric in this order, holding the fresh-eyes prompt reading beside
|
||||
each expectation. For every one, the controlling question is the
|
||||
80%-of-engineers test from above — would a broad majority, reading only the
|
||||
prompt, agree this call is correct? The patterns below are where the answer
|
||||
most often comes out "no." Judge the substance, not the rubric's tone.
|
||||
|
||||
1. **"The correct fix / approach / design is X."** Ask: is X *a* correct
|
||||
answer or *the only* correct answer? If an equally-defensible
|
||||
alternative exists that a competent senior would choose, the rubric is
|
||||
canonizing one side → Shape 1.
|
||||
2. **Scoring tiers and "good response says X" pairs.** For each required
|
||||
behavior, ask: reading only the prompt, would a thoughtful colleague
|
||||
recognize this as the thing to do? Or is it one reasonable option among
|
||||
several, or something the prompt doesn't mention at all?
|
||||
3. **Heavy penalties ("heavily penalize the score unless the agent does Z").** Is Z
|
||||
obviously required by the prompt, or does it gate the top tiers on the
|
||||
author's private preference / on scope the prompt didn't raise?
|
||||
4. **The A+/A discriminator.** Is the thing that separates A+ from A
|
||||
something the prompt cues? If the prompt never asks for it, no agent can
|
||||
fairly earn A+ regardless of skill → Shape 2.
|
||||
5. **Cross-check every requirement against the prompt.** Does the prompt
|
||||
actually ask for what the rubric requires? The clearest Shape-2 finding
|
||||
is a rubric that demands "the fix" when the prompt asked only for an
|
||||
assessment of what's possible today.
|
||||
6. **Run the cross-check in both directions.** For every behavior the
|
||||
rubric penalizes (each heavy deduction, or any hard gate/cap an older
|
||||
guidance document still carries), search the prompt — and the session history on
|
||||
snapshot tasks — for a clause that authorizes, requests, or pre-approves
|
||||
that exact behavior; quote it verbatim if found. For every behavior the
|
||||
strong tier requires, search for a clause that forbids or discourages
|
||||
it. "Good practice" is not a license to override the user's explicit
|
||||
protocol: if the user said "put tradeoffs in the final summary," a
|
||||
deduction on disclosure timing fires on instruction-following, not on a
|
||||
lapse → Shape 3. This direction is easy to miss precisely because the
|
||||
rubric's requirement sounds like universally good practice in the
|
||||
abstract — that's when you most need to look backward at the prompt.
|
||||
7. **Soft directives applied as hard lines.** When the prompt's instruction
|
||||
is about degree or scope ("concise," "product, not tech," "do the
|
||||
migration," "just the X"), check whether the rubric penalizes responses
|
||||
that honored the *direction* but not the author's exact threshold. The
|
||||
instruction's existence does not make its precise application obvious →
|
||||
Shape 1 on a continuum. Apply the 80%-test to the specific responses
|
||||
being penalized, not to the directive in the abstract.
|
||||
8. **Hidden answer keys and hidden thresholds.** The rubric scores against
|
||||
specific pre-selected findings or values the prompt gives no signal for
|
||||
— an open-ended ask ("report any bugs," "review this design") graded on
|
||||
naming two particular pre-chosen defects, or a policy judgment graded
|
||||
against undisclosed numeric thresholds not inferable from the prompt or
|
||||
repo. That grades coverage against a private list, not behavior →
|
||||
Shape 2. A holistic-sounding prompt whose score actually rides on one
|
||||
exact finding is the same pattern. Two more variants of it: a *build/fix
|
||||
ask graded as an audit* — the prompt says "build X" or "take a first pass
|
||||
at X" and the rubric grades discovery of pre-existing defects, or of the
|
||||
fact that X already exists (noticing and surfacing that something is off
|
||||
is fair; a full unrequested audit is not, and "there is no obvious
|
||||
answer" to a request for something that's already built); and a
|
||||
*surfaced problem graded on its exact root cause* — the general
|
||||
skepticism the task wants ("something is wrong here") is inferable, but
|
||||
the pass/fail requirement rides on naming one specific hidden artifact
|
||||
(a particular stub, one buggy delegated method, one exact trace) that
|
||||
nothing in the prompt points to. The surface-vs-resolve guard has a
|
||||
pinpointing corollary: requiring the agent to *notice* is fair; requiring
|
||||
it to land on the author's one pre-selected culprit is a private answer
|
||||
key — especially when the prompt actively steers away from the
|
||||
investigation that would find it.
|
||||
9. **Prompt-counter-signaled requirements, and the literal-reading test.**
|
||||
Check whether the score-deciding requirement appears *only* in the
|
||||
rubric while the prompt's own wording points the agent *away* from it
|
||||
(the prompt asks for a "deterministic, no-sleeps" test; the rubric marks
|
||||
down exactly the deterministic single-connection shape that wording
|
||||
invites). And when the rubric canonizes a stricter reading of the ask,
|
||||
apply the literal-reading test: if the penalized responses are the
|
||||
*literal* reading of the prompt's words, the stricter reading is not the
|
||||
obvious one → Shape 1.
|
||||
10. **Undefined semantics resolved silently.** For each ground-truth fact
|
||||
or required behavior in the rubric, work backwards to the prompt and
|
||||
ask *which prompt words fix this*. Enumerate the prompt's load-bearing
|
||||
terms — nouns ("a notification"), quantities ("positive and negative
|
||||
totals"), orderings ("back to back"), populations ("users being
|
||||
deleted") — and check whether each has a single reading a broad
|
||||
majority of engineers would share. If the rubric's ground truth depends
|
||||
on one particular definition the prompt leaves open, that is Shape 1 —
|
||||
*even when the rubric's chosen definition is well-grounded in the
|
||||
repository.* Repo facts the prompt never cites cannot make a prompt
|
||||
reading obvious; run the 80%-test on the prompt text alone. (The
|
||||
surface-vs-resolve guard applies here too: a rubric that rewards
|
||||
*flagging* the undefined term stays healthy; the finding is the rubric
|
||||
requiring or assuming one specific *resolution*.)
|
||||
11. **The prompt names the graded behavior.** Read the prompt against the
|
||||
rubric's scored dimensions and ask what is left for the agent to get
|
||||
wrong. A prompt that instructs, in so many words, the diligence the
|
||||
rubric scores ("give an honest assessment … if it isn't working, say so
|
||||
and fix it"), pre-announces the failure mode, hands over the full
|
||||
implementation the rubric credits as a design decision, or frames the
|
||||
scenario so the only sensible move is the rewarded one → Shape 4.
|
||||
Uniformly strong reference runs are corroboration, not refutation.
|
||||
|
||||
For each expectation you flag, name the shape (`overstated-universality`,
|
||||
`unrequested-scope`, `countermanded-expectation`, or `over-cued-prompt`),
|
||||
quote the rubric, and state the defensible alternative (Shape 1), the gap
|
||||
between prompt and requirement (Shape 2), the verbatim prompt clause that
|
||||
collides with the rubric (Shape 3 — required; no quotable clause, no
|
||||
Shape-3 finding), or the prompt wording that hands over the graded behavior
|
||||
(Shape 4).
|
||||
|
||||
## Relationship to other detectors
|
||||
|
||||
This detector overlaps with others by design; knowing the boundaries keeps
|
||||
the verdicts from blurring.
|
||||
|
||||
- **vs. detector-meaningful-failure.** detector-meaningful-failure reads `grade.md` — the
|
||||
deductions that *actually fired* across reference runs — and asks "is
|
||||
each a real-world SWE mistake?" It is retrospective and needs runs. This
|
||||
detector reads the prompt and rubric and asks "is the expectation
|
||||
obviously-right given the prompt?" It is prospective and needs no runs.
|
||||
They overlap on the over-asking and taste-call shapes, but this detector
|
||||
catches them at authoring time and on expectations no run happened to
|
||||
trip; detector-meaningful-failure confirms them empirically once runs exist. When
|
||||
both can run they should agree; if they disagree, the fired-deduction
|
||||
evidence in `grade.md` is the tiebreak on whether the expectation
|
||||
actually bit an agent.
|
||||
- **vs. detector-rubric-clarity.** detector-rubric-clarity is about *prose* — can two graders
|
||||
apply the wording consistently? This detector is about *substance* — is
|
||||
the expected answer the obviously-right one? A perfectly clear, typo-free
|
||||
rubric can still canonize a non-obvious answer; clarity says `clear`,
|
||||
this detector says `not-obvious`. Distinct axes.
|
||||
- **vs. detector-fact-check-rubric-claims.** fact-check asks whether the rubric's
|
||||
factual claims are *true*. This detector assumes the facts hold and asks
|
||||
whether the *expectation built on them* is the obvious call. A rubric can
|
||||
cite the code accurately and still canonize one of several reasonable
|
||||
designs.
|
||||
- **vs. detector-snapshot-leakage.** Both can notice "the agent was handed
|
||||
the answer," but they own different surfaces. Shape 4 here is about the
|
||||
*prompt text* — `instruction.md` or the final user turn — cueing the
|
||||
graded behavior. A snapshot *session* whose captured context leaks the
|
||||
intended answer is detector-snapshot-leakage's lane. When a task does
|
||||
both, each detector flags its own side.
|
||||
|
||||
## Anti-patterns: do not do these
|
||||
|
||||
- **Don't flag difficulty.** Hard-to-execute is not non-obvious. The
|
||||
detector is about the *choice of what to do*, not the effort to do it.
|
||||
- **Don't flag legitimate catch-the-problem tasks.** Requiring the agent to
|
||||
surface a false premise or under-specification is fair. Only flag when
|
||||
the rubric mandates a *specific contested resolution* or unrequested
|
||||
scope. Re-read the load-bearing distinction above before flagging
|
||||
anything in this family.
|
||||
- **Don't smuggle in the meaningfulness or severity question.** "This fair
|
||||
expectation is too low-stakes to matter" is detector-meaningful-failure's call,
|
||||
not yours. An obviously-right expectation can be minor; that doesn't make
|
||||
it non-obvious.
|
||||
- **Don't flag prose ambiguity** — that's detector-rubric-clarity.
|
||||
- **Don't substitute your taste for the author's.** The bar is "a
|
||||
reasonable colleague could land elsewhere," not "I'd have done it
|
||||
differently." If you can't name the specific defensible alternative or
|
||||
the specific prompt-vs-requirement gap, you don't have a finding.
|
||||
- **Don't let one secondary non-obvious item drive a `not-obvious`
|
||||
verdict.** `not-obvious` is for when the *central* expectation is the
|
||||
unfair one. A sound task with one over-reaching secondary item is
|
||||
`partial`.
|
||||
- **Don't mistake the rubric's conviction for obviousness.** Grader guidance
|
||||
is always confident and strongly worded — that's its register, not
|
||||
evidence. Apply the 80%-of-engineers test to the substance regardless of
|
||||
how forcefully the rubric asserts the call. This is the single most common
|
||||
way the detector wrongly returns `obvious`.
|
||||
- **Don't treat an explicit instruction as a blank check.** That the prompt
|
||||
gave a directive ("be concise," "do the migration") makes *moving in that
|
||||
direction* obvious — it does not make the author's exact threshold or
|
||||
scope obvious. If the rubric penalizes a response that honored the
|
||||
direction but drew the line elsewhere, that's a judgment call → flag it.
|
||||
- **Don't let "good practice" overrule the prompt's explicit protocol.**
|
||||
A rubric requirement that reads as universally sound engineering
|
||||
("disclose risk before implementing," "ask when unsure") can still be a
|
||||
Shape-3 conflict if the prompt explicitly authorized the penalized
|
||||
behavior or forbade the required one. Run the backward cross-check before
|
||||
crediting the requirement as obvious — obviousness in the abstract is not
|
||||
obviousness against this prompt.
|
||||
- **Don't stretch `over-cued` to every detailed prompt.** Precision about
|
||||
the task is healthy; Shape 4 requires that the prompt hands over the
|
||||
*graded* behavior itself, leaving the task unable to discriminate. If the
|
||||
scored judgment or a hidden difficulty still has room to go wrong,
|
||||
explicit is fine.
|
||||
- **Don't cite evidence you haven't verified in the submitted package.**
|
||||
Every file, code comment, prompt clause, and reference run your rationale
|
||||
leans on must exist in the workspace and run set as actually submitted —
|
||||
not as you remember them from a prior revision, and not as the rubric
|
||||
describes them. A rationale built on a file that isn't in the package, or
|
||||
on a run characterized as showing the opposite of what its grade actually
|
||||
says, invalidates the verdict no matter how sound the reasoning pattern
|
||||
is. Quote what's there; check before you quote.
|
||||
|
||||
## Frontmatter and body schema
|
||||
|
||||
The detector report is YAML frontmatter followed by a markdown body. Both
|
||||
contexts produce the same shape; only the *sink* differs (the wrapping
|
||||
`SKILL.md` tells you where to send the report).
|
||||
|
||||
**Frontmatter** — exactly these keys, exactly these enum values:
|
||||
|
||||
```yaml
|
||||
---
|
||||
detector: detector-answer-obviousness
|
||||
verdict: obvious | over-cued | partial | not-obvious | not-applicable
|
||||
confidence: HIGH | MEDIUM | LOW
|
||||
---
|
||||
```
|
||||
|
||||
**Body sections**, in this order:
|
||||
|
||||
```markdown
|
||||
# Answer-obviousness check: <slug>
|
||||
|
||||
## What the prompt asks
|
||||
|
||||
1–3 sentences: a fresh-eyes read of the prompt with no rubric in view —
|
||||
`instruction.md`, plus any standing instruction in the session history for a
|
||||
snapshot / multi-turn task, quoting the load-bearing wording verbatim. What
|
||||
is the request actually asking for, and what would a thoughtful colleague
|
||||
recognize as the right course of action? Note where a directive is *soft*
|
||||
(about degree or scope) rather than a hard spec, and note any place the
|
||||
prompt names the exact behavior the rubric scores (a Shape-4 candidate).
|
||||
This is the baseline every expectation is judged against.
|
||||
|
||||
## Per-expectation assessment
|
||||
|
||||
For each load-bearing rubric expectation (a scoring-tier requirement, heavy
|
||||
penalty, "good response says X", A+/A discriminator, or "the correct fix
|
||||
is"), write a short block:
|
||||
|
||||
### <short label> — <verdict for this expectation>
|
||||
|
||||
- **What the rubric requires:** one sentence, with a verbatim quote from
|
||||
the resolved guidance file.
|
||||
- **Is it obvious from the prompt?** 1–2 sentences. For an `obvious`
|
||||
expectation, say why a thoughtful colleague would recognize this as the
|
||||
thing to do. For a flagged one, name the shape
|
||||
(`overstated-universality` / `unrequested-scope` /
|
||||
`countermanded-expectation` / `over-cued-prompt`) and state the specific
|
||||
defensible alternative (Shape 1), the prompt-vs-requirement gap
|
||||
(Shape 2), the verbatim prompt clause the rubric collides with (Shape 3 —
|
||||
quote it alongside the rubric quote; it's required), or the prompt
|
||||
wording that hands over the graded behavior (Shape 4). Cite a reference
|
||||
run that took the alternative and was dinged — or, for Shape 4, note that
|
||||
the runs uniformly avoid the scored failure — if runs exist, but don't
|
||||
require them.
|
||||
- **Verdict for this expectation:** `obvious` / `over-cued` /
|
||||
`not-obvious`, with a word of reasoning.
|
||||
|
||||
If every expectation is obvious, write the blocks anyway — the reasoning is
|
||||
what a human reads to trust the `obvious` verdict.
|
||||
|
||||
## Overall verdict
|
||||
|
||||
2–3 paragraphs reducing the per-expectation set to the chosen verdict:
|
||||
|
||||
- `obvious` if every load-bearing expectation is the obviously-right thing
|
||||
to do given the prompt, and the prompt cues it fairly rather than handing
|
||||
it over.
|
||||
- `over-cued` if the prompt hands the agent the graded behavior, so the
|
||||
task cannot discriminate — the answer is obvious because the prompt gives
|
||||
it away.
|
||||
- `partial` if at least one expectation canonizes a defensible alternative,
|
||||
requires unrequested scope, or secondarily conflicts with the prompt's
|
||||
explicit wording, but a real fair test remains alongside it.
|
||||
- `not-obvious` if the central / load-bearing expectation is itself the
|
||||
non-obvious one — the task primarily scores mind-reading — or a
|
||||
load-bearing deduction/tier directly conflicts with what the prompt
|
||||
explicitly authorizes or forbids.
|
||||
- `not-applicable` if there's no scored rubric to assess.
|
||||
```
|
||||
|
||||
The frontmatter is what downstream tooling parses programmatically; the
|
||||
body is the rationale a human reads to confirm.
|
||||
Reference in New Issue
Block a user