Grading Desk QA — Aug 19, 2026

Full QA pass triggered by Fede's report that the grader "ends at Aug 13" and feels sloppy. Ten investigation agents across two sweeps: pipeline coverage, scorer liveness, list ordering, a live write-path contract test, and a five-angle UI audit. Status: Shipped — all four fix batches merged Aug 19.

TL;DR — nothing is missing, and the scorer is keeping up. Every real conversation of the last 9 days (86 of 86) is present in the grading data, zero were eaten by the new test-traffic filter, and all 3 conversations that settled after the new scorer went live were machine-graded within ~21–90 minutes. The "stuck at Aug 13" look is the UI: the desk silently inherits whatever property was last picked anywhere in the app, sorts by flag severity with no date option, hides clean conversations from the default tab by design, and shows ~8 rows before the fold. Separately, the audit found 8 genuinely broken UI behaviors (worst: the grading pane can't scroll — 90% of long content is invisible), 2 real scoring-pipeline gaps, and one thing that deserves a business-level look: Yale has had zero inbound conversations of any kind since Aug 13.

Why the grader looked frozen at Aug 13

What checked out healthy

CheckResult
Coverage: real conversations since Aug 10 present in grading data86 / 86 — zero missing; zero false positives from the Aug 19 test-traffic filter (147 excluded rows were all genuine bench/harness traffic)
Scorer liveness on post-deploy traffic3 / 3 graded, fastest ~21 min after settle (small sample — 15h of runway)
The "95 not rated yet"Mostly history — 77% predate any grading mechanism existing; not scorer lag
Verdict write path (live test on the bench property)Contract holds — 👎 with tag accepted; tag-less 👎 rejected (400); spoofed property/grader rejected (422); nonexistent item rejected (404); bench rows never surface in the real queue, graded or not

Broken (fix first)

#DefectEvidence
B1The grading pane cannot scroll: fixed 512px height with overflow:hidden. ~90% of a long checklist + "Clara's Summary" is simply invisible, with no scrollbar or cue. (Root cause of the previously filed scroll bug.)Reproduced; 3,000px of scroll intent moved nothing
B2Middle pane collapses to 92px wide at 1024×640 — unreadableMeasured via layout rect
B3A failing verdict labeled "Unsuccessful" renders in success-green, directly above a red ✕ for the same resultPixel-sampled colors
B4Reason-filter counts computed against the wrong scope — "Looked fine (40)" yields 0 results on the default tabLive repro
B5Keyboard J/K moves the selection but never scrolls the list — selection walks off-screen15 keypresses, list never moved
B639% of queue rows show "Not rated yet" and a green "graded" checkmark simultaneously (imported human verdicts on machine-ungraded conversations)59 of 152 rows
B7A burst of internal test traffic (Aug 16, 03:46 UTC — six rows created within 160ms, one titled "Federico") sits in the queue as if it were resident activityQueue data; same class as the fixed mailpit leak, different source
B8Score-section label clipped mid-word by the card edge ("…n 20/21 passed")Screenshot

Real pipeline gaps (not UI)

Yale silence — resolved

Yale has had zero conversations since Aug 13, 19:59 UTC. Resolved 2026-08-19 (Fede): Yale is not live yet — the silence is expected. No action. The finding stands only as the explanation for the frozen-looking grader when the desk is scoped to Yale.

Confusing / sloppy (the "death by papercuts" list)

AreaDefects
Finding thingsSearch matches display-name only (not email/phone), exact-substring, no typo tolerance, silently scoped to the open tab; search text survives switching item types and shows a misleading "no results"; no deep link into an item; no "Grade this" button from a conversation or prospect page; reload loses selection; tab + filters reset on every reload
Ordering & freshnessNo date sort anywhere; 3-month-old rows resurface unlabeled (side effect of the "show graded items regardless of age" fix); dates never show the year; "unrated" count mixes pre-scorer history with live work
Row quality25% of rows titled with a raw phone number ("Search by name" placeholder notwithstanding); one caller appears as 9 separate unlinked rows; visually identical duplicate rows; malformed name casing rendered as-is; vendors/internal people treated identically to residents
Pane behaviorRe-selecting a viewed item refetches with a full skeleton; old rows stay clickable under the "Loading…" state; "0 of 0" flashes on load; Escape/click-away can't deselect; switching sub-tab silently drops selection; hover tooltip covers the text it explains; no "more below" cue on clipped content
Copy & polish"Filter filter by reason…" placeholder; duplicated empty-state copy with two wordings; "Work Order Id"; header truncates a name that fits one column over; mismatched thumb icon sizes on the two surfaces meant to look identical; dead space in verdict pane; empty-queue J/K hint; empty-state alignment differs between panes

Fix plan — ALL FOUR BATCHES SHIPPED same day (Aug 19)

Status: every batch below merged to production on Aug 19 after multi-round review. The desk is now named Quality Desk. Residual open items: the internal-tester phone setting (awaiting Fede's go), the repeated-identical-nudge blind spot (carded), the renewal-conversations-never-grade question (carded), and whether the desk should default to All Properties (flagged in the findability PR).

Provenance & honest caveats

Two workflows, 10 agents, 2026-08-19. Write-path test performed live against the bench property only (two test verdicts left there, ids in session logs). The cross-examiner flagged two internal count inconsistencies (a Camellia-scoped count exceeding the all-properties count, and row positions ~25–70 earlier than pure bucket math predicts — likely an undocumented graded-rows-sink rule) — treat exact positions as approximate; the coverage and liveness conclusions are unaffected. Not checked: Fede's actual browser session state, client-side caching, whether severity-first ordering is recent or long-standing, and 19 of 22 in-window unrated rows.

PropFlow Docs