0094 — Delete the conversation reconciler sweeps: the turn-settled stream is the sole path

Decision

Delete BOTH conversation "reconciler" backstop sweeps entirely — the topic sweep (conversationTopicClassificationWorkflow / classifyRecentConversationTopics, Schedule conversation-topics-reconciler) and the grade sweep (conversationGradeSweepWorkflow / gradeRecentConversations, Schedule conversation-grader-reconciler) — while keeping the always-on real-time inline path untouched.

"No reconcilers, no arms, no flags — always stamp, always grade, always topic." The ADR-0088 event stream is verified live in prod: conversationTopicStampWorkflow + conversationGraderWorkflow execute per settled turn on ALL channels (SMS/email via the inbound-processor Lambda, voice call-ended, dashboard/simulator). The stream carries durability (at-least-once SQS FIFO + DLQ alarm), so the 15-minute sweeps were pure redundancy — the reconcilerCaughtMissed retirement instrument existed to prove exactly this.

What was deleted

What was kept (100% intact)

Accepted trades (named, not hidden)

  1. Crash-before-publish drop is not retried. A settle edge lost before the awaited SQS publish (or swallowed after its one retry) gets no sweep re-cover. The thread's NEXT turn re-emits and the untagged rows / ungraded state are picked up then; a thread that never speaks again keeps its last state.
  2. No historical backfill lane. The wide-window sweep invocation (manual windowHours override) is gone. A one-off backfill, if ever needed, is a script over classifyAndStampConversation — not a standing reconciler.
  3. D4 sweep reconcile gone. Untied ≥24h rows that the inline backstamp's retry could not tie are found via the single_writer_regarding_tie_failed log marker, not an alert-driven sweep.

Ops follow-ups (not in this PR)