ASK KNOX
beta
LESSON 718

The Grader: LLM-as-Judge Against a Written Rubric

Three checks are gradable. One is a switch. Confusing the two is how a grader quietly stops enforcing the rule that matters most.

5 min read·The Autonomous Content Operation

The rubric that never gets tired

Every draft that reaches the vault queue passed through a human's judgment at some point in the strategy track -- is this hook strong, does this stay on-axis, does the CTA actually go anywhere. That judgment doesn't disappear when an agent fleet takes over production. It gets written down as a rubric, and an LLM-as-judge grader applies it to every draft, every time, without getting tired on the fortieth carousel of the week or getting talked into "just this once" by a genuinely impressive off-axis spike.

That's the promise of an automated grader. The risk is that a rubric written in plain language and applied by a model doesn't automatically behave the way the plain language implies. Four checks that read as a flat list on paper don't all carry the same weight in practice, and the lesson that matters most here is which one doesn't.

Four checks, three of them gradable

The grader runs a draft through four checks, each pulled directly from the strategy track's doctrine:

Hook at frame 1 (or slide 1). A reel's first frame and a carousel's first slide both have to stop a cold scroller with zero context. This check evaluates the hook text on its own terms -- specific, immediate, readable in under a second -- independent of everything else in the draft.

Triple-hook compliance for carousels. The re-serve mechanic gives a carousel three independent chances to convert a cold scroller, one on each of its first three sessions with a given user. That only works if slides 1, 2, AND 3 each independently pass a standalone-hook predicate. A carousel where slide 2 reads as "part 2 of yesterday's post" wastes one of its three shots on a continuation instead of a fresh hook -- and that failure has to sink the whole check, not just cost a partial point, because the mechanic doesn't partially work.

On-axis check. This is the recipe-guy guardrail as code. The strategist tags a draft's quadrant, and if that quadrant was flagged off-axis -- reach that's real but disconnected from the account's core expert positioning -- this check fails.

CTA-routes-to-offer. A caption line, a pinned comment, or a bio link that actually maps to an existing offer. Reach without a route back to the funnel dead-ends regardless of how good the content is.

Three of these four checks behave like an actual rubric. A weak hook doesn't automatically doom a draft the way a missing CTA might get caught and fixed in one revision pass. They're gradable, in the ordinary sense: better or worse, pass or fail, feed into a band decision that weighs them together.

The one check that isn't a vote

The on-axis check does not behave like the other three, and building the grader as if it did is the single most consequential mistake available here.

Picture a draft that nails everything else: a sharp, specific hook; if it's a carousel, three slides that each independently earn a re-serve; a CTA that routes cleanly to the existing offer. Every gradable signal says this is strong content. But the strategist flagged the quadrant off-axis -- the topic is real, on-brand-adjacent, genuinely interesting, and has nothing to do with the expert positioning the account is built around.

If the on-axis check gets averaged in with the other three the way a natural rubric implementation might default to, that draft can still auto-queue. Three strong checks and one failure looks, numerically, like a pass. That is exactly backwards. The on-axis check exists specifically to catch the situation where everything else about a draft is working -- because that's precisely the situation where an off-axis spike is most tempting to chase, and precisely the situation the strategy track's doctrine warns against hardest.

The fix is architectural, not a weighting tweak: on-axis failure has to be checked first, and on failure the grader returns KILL immediately, without letting the other three results vote on anything. It's a hard override, structurally distinct from the other checks rather than a fourth item averaged into the same score.

Score bands and what each one means downstream

The grader resolves every draft to one of three bands. AUTO_QUEUE means all three gradable checks pass and the on-axis check didn't override anything -- the draft moves straight into the vault's queued status with no human review required at this step. REVISE means the on-axis check passed but at least one gradable check failed -- the draft routes back to the generation lane with the specific check failures attached as feedback, so the next pass can address exactly what was wrong instead of guessing. KILL means the on-axis check failed, full stop -- the draft never reaches the queue, and no revision loop applies, because the problem isn't fixable content quality, it's that the topic doesn't belong in this account's rotation at all.

Calibration: the rubric drifts even when the code doesn't

A written rubric interpreted by a model is not a fixed function the way a numeric threshold is. The model's read on what counts as "generic filler" in a hook, or what counts as a "continuation" slide instead of a standalone hook, can drift over weeks even without a single line of code changing -- edge cases accumulate, borderline calls trend one direction, and nobody notices until the gap between what the grader approves and what a human would approve has widened into a real problem.

The fix is a standing practice, not a one-time build: log every human GO/no-GO decision against the grader's band for the same draft, and periodically compare them. A grader that's started auto-queueing content a human reviewer would send back for revision is showing rubric drift, and the fix is recalibrating the grader's interpretation of the written rubric -- tightening the language, adding examples of the edge case it's missing -- not adjusting an unrelated pipeline component because the drift happened to surface downstream.

Build it: implement gradeDraft

You're implementing the grader itself: four individual check functions, and the gradeDraft function that runs them and resolves a band -- with the on-axis check wired as the hard override this lesson just walked through, not a fifth vote in an average.