Ethan has ~15 daily/hourly eval agents (claude-efforts-eval, director-mode-evaluator, client-next-steps-evaluator, agent-doctrine-eval) that each write findings in isolation — nobody compares them to each other. This tool diffs today's eval outputs against the last 7 days and surfaces only the *deltas*: a recommendation that flipped, a project that dropped off two evaluators' lists at once, a blocker that three agents independently named. It turns a wall of daily reports into a one-card 'what actually changed in the machine's opinion' brief on the tablet.
Create /home/ethan/.local/bin/doctrine-drift-diff (bash + jq, ~80 lines). Read the newest output file per evaluator from the eval state dirs (glob ~/.local/state/{claude-efforts-eval,director-mode-eval,client-next-steps-eval,agent-doctrine-eval}/*.{json,md}). Normalize each into a flat list of `project::verdict::priority` lines via a single small `llmq` call (reuse the existing llmq worker, no API key handling needed). Cache each day's normalized list at ~/.local/state/doctrine-drift/YYYY-MM-DD.tsv. Diff today vs the 7-day union with comm/join: emit three buckets — FLIPPED (same project, different verdict), CONVERGED (>=2 evaluators name the same blocker today), DROPPED (project present >=3 prior days, absent today). Render via existing `pondercard-generate` and push through `socratic-tablet-pipe` to ~/Tablet/. Wire as a systemd timer at 06:45 America/Detroit (after the 06:00 evals land) using the `cron-capped` wrapper, plus a `doctrine-drift-freshness-check` matching the existing freshness-check convention.