How to Annotate — the Grading Playbook

A practical guide for grading Clara's conversations so each annotation feeds the golden set, the regression gate, and the future quality judge. Sources: the grading-system design docs (ADR-0128, fixture schema) + current industry guidance on golden datasets. Published 2026-08-22.

Why this matters right now: there is no real quality judge yet — today's "green" machine grades come from a placeholder (a repeat-reply detector) plus two narrow compliance checks. Your annotations are the ground truth the real judge will be built and calibrated against. Quality of note-writing today directly becomes judge accuracy later.

The rules

1Every thumbs-down carries a principle chip that names the failure typebuilt-in + industry

Free text alone can't be counted or turned into an eval case. Pick the chip that says what kind of mistake it was. If no chip fits, mint a new one with "+ new" — don't stretch an existing chip. The system is designed to merge near-duplicate chips later; it can't split a chip you overloaded.

2Pinpoint the exact message — if you can name the bad reply, click itbuilt-in

The message-level pinpoint is what makes a thumbs-down convertible into a regression test anchored to the specific bad turn. An un-pinpointed thumbs-down still counts, but someone has to re-find the bad message by hand later. (Known bug 2026-08-22: the pinpoint is currently being dropped on save — until fixed, name the message in the note.)

3Write the note as "what Clara should have done," anchored in a verbatim quotebuilt-in + industry

Two ingredients make a note maximally useful:

INGREDIENT 1 — QUOTE, DON'T PARAPHRASECopy the exact sentence Clara said, word for word. The fixture converter refuses a case unless the quoted span matches the transcript byte-for-byte.
INGREDIENT 2 — THE CORRECTIONOne crisp sentence: what the right reply or action was, in the same channel and tone Clara was using. You are the only source of this; nothing can derive it later.
GOOD"Clara said 'How about 1:00 PM or 2:00 PM on the 29th?' after the team reported an emergency — she should have treated the whole day as blocked and offered the next open day instead."
WEAK"She kept offering times that didn't work."
4Silently classify the failure: repair, hold, or blockbuilt-in
ClassMeaningWhat to say in the note
RepairOne bad span; the rest of the reply standsQuote the span + give the fixed wording
HoldNothing broken — a human should have taken this turnSay "should have deferred to a human" and why
BlockA backend fed Clara false ground truth; no rewording fixes itName the wrong data source — this is an engineering page, not a prompt fix

This distinction is the single most decision-relevant fact an annotation can carry: it separates "rewrite the sentence" from "the data was wrong."

5Grade good conversations too — thumbs-up is data, not a skipindustry

A golden set of only failures produces a judge that can't recognize "correct." The queue deliberately mixes in machine-green items; take them seriously instead of clicking through. A confident 👍 on a clean tour booking is as valuable as the 👎 on Kevin's.

6Don't only grade what the machine flagged — browse toobuilt-in

If you only grade the ranked inbox, you only ever check cases the machine already suspected. Spend part of each session in browse mode picking conversations nobody flagged — that's the only way to find the machine's blind spots (like Kevin's, which every check passed).

7Label inference as inference inside the notebuilt-in

If you're inferring what a backend record probably said rather than having read it, write "unconfirmed — I believe the calendar was blocked all day" rather than stating it as fact. Fixtures distinguish verified from reconstructed detail; your notes should too.

8Grade what happened, not what a pending fix would producebuilt-in + industry

The golden set must stay independent of prompt iteration — grading with a fix in mind contaminates the regression suite meant to prove that fix. Verdicts here are append-only and never recomputed by design: grade the transcript in front of you.

9One expert annotator is fine — but revisit old verdicts occasionallyindustry

The system freezes what the machine said at the moment you disagreed, so human-vs-machine agreement can be tracked over time. That only catches drift if you occasionally re-read old grades against new evidence instead of treating day-one judgment as permanent.

10PII: tenant identity gets faked in fixtures, always by explicit human checkbuilt-in

Nothing flows from an annotation into a committed fixture without a per-row "I checked this for PII" sign-off. Property names, addresses, and unit numbers are business facts and stay; tenant and prospect names, phones, and emails get synthetic stand-ins.

Common mistakes

Grounded in: ADR-0128 (grading playground + principle ladder, incl. amendments), the fixture schema and converter requirements in the quality-gate proof of concept, the grading handoff docs, and outside sources: Hamel Husain's evals FAQ, Anthropic's "Demystifying evals for AI agents," Galileo's judge-calibration guide, and Langfuse's golden-dataset writeup.

The UI, redesigned to these rules — before & after

Same scenario both sides: a rescheduling conversation where Clara offered times on a day the team had called out, then offered a Sunday when the office is closed. Red badges mark today's defects; green badges mark the proposed changes. Names are synthetic.

Before — today

Jordan Miller

Leasing · Voice + SMS · Camellia
Machine grade: 🟢 green — "ok" 1
You graded this yesterday — but nothing here shows it. The rail opens blank every time. 2
Your verdict
👍 Good
👎 Bad
Principles (pick at least one)
never invent a fact missed escalation wrong tone + new
Note (optional)
The property team said they had an emergency… it offered a slot later today and the calendar was blocked the whole day. Then it also offered Sunday which is closed
Right-clicked message pinpoint: recorded in the draft… then silently dropped on save. 3
Record verdict
After — proposed

Jordan Miller

Leasing · Voice + SMS · Camellia
✓ You graded this before — 👎 · never invent a fact · Aug 22. Recording again adds a new judgment; nothing is overwritten. A
Your verdict
👍 Good
👎 Bad
What kind of failure? B
Fix the wording
Should have gone to a human
Bad data fed to Clara
Principles (pick at least one)
never invent a fact missed escalation + new
What Clara said C
"How about 1:00 PM or 2:00 PM on the 29th?"
⌖ Quoted from the pinned message — saved with the verdict D
What she should have done C
Treat the team's emergency as blocking the whole day and offer the next open day instead.
Parts of this are inference, not verified E
Record verdict
Revealed after recording: machine said 🟢 green — you said 👎. Disagreement logged. F
This session: 6 graded4 flagged · 2 browsed👍 2 · 👎 4 G

What changed, and why

1
Machine grade shown while you grade → moved to after (F)

Seeing "green" before you judge biases you toward agreeing. Grade blind; reveal the machine's opinion after — the disagreement is exactly the data the judge-calibration series needs.

2
Blank on reopen → prior-verdict summary (A)

Saves were always landing; the rail just never read them back. Show your last verdict, chips, and date, with the append-only reminder.

3
Dropped pinpoint → visible, saved anchor (D)

The right-click pinpoint currently vanishes on save. After: the pinned message is shown on the rail and stored as the message-level record that makes the annotation convertible into a regression test.

B
Failure-type selector

One tap separates "rewrite the sentence" from "should have escalated" from "a backend fed Clara wrong data." The third option can auto-flag engineering.

C
Note split into quote + correction

The two things downstream tooling actually consumes: Clara's exact words (byte-exact, required by the fixture converter) and the one-sentence correction only you can write.

D
"Quote this message" button

Auto-copies the pinned message verbatim, making paraphrase impossible rather than discouraged.

E
Inference toggle

"I believe the calendar was blocked" is different evidence than "the calendar was blocked." One tap keeps that honest without typing the convention every time.

G
Session mix meter

Flagged vs. browsed, 👍 vs. 👎. Not a gate — visibility, so a lopsided golden set is caught during the session, not after.

Also fixed but not visible in the mock: the duplicated queue row (the same person listed twice); the right-click action opening a full-height mobile-style drawer on desktop (becomes a compact popover near the message); and the queue's “Needs a look”/“Everything” split collapsing into one list, newest first (owner call, 2026-08-22). Rollout order: bugs 1–3 first, then C+D+B, then A/E/F/G. The blind-grading change (F) alters what the grader sees mid-annotation and ships only on explicit approval.

PropFlow Docs