---
title: "The Reconciliation Queue Trap"
canonical: https://dxdev.com/blog/2026-08-03_the-reconciliation-queue-trap/
datePublished: 2026-08-03
---
The reconciliation queue was another model's idea before it was my problem. Low-confidence classification, a parser that choked on an odd export, a session tagged to the wrong epic. Every one of those needed a human eyeball at some point, and my first instinct was the obvious one: build a queue, route the uncertain stuff there, and don't consider anything done until the queue hits zero.

That instinct is wrong, and I only found out because I asked a second model to design the reconciliation layer for me before I'd built it, and it talked me out of my own plan.

## The design that looked responsible

Queue-zero sounds like discipline. You don't let unresolved things pile up, you clear them, the system stays honest. I was already picturing the file: `Reconciliation_Queue.md` in the vault, every ambiguous classification landing there, and a rule that said the pipeline isn't trustworthy until that file is empty.

The problem is I'm running the archive pipeline, the classification layer, and the actual business on the same clock, with nobody else free to own any one of them. A queue that has to hit zero before you trust the system is a queue that competes with everything else you're supposed to be doing. It doesn't stay small. It becomes a second inbox, and unlike email, nobody else is going to triage it for you.

## What the second model said instead

I asked for a review of the whole conversation-archive architecture, seven decisions, five open questions. Buried in there was the reconciliation queue question, framed as a binary: gate on queue-zero, or let queues self-decay on inactivity.

The answer was blunt. In a single-user system, if you haven't reviewed a low-confidence classification or a minor parser failure within seven days, it probably doesn't matter. Gating work behind queue-zero will paralyze you. Accepting entries as compost means the queue grows forever and becomes cognitive drag. Self-decay keeps the queue showing only what's recent and potentially relevant, and gracefully lets the rest fall into the archive.

That reframes what the queue is for. It's not a ledger of everything unresolved. It's a spotlight on what's unresolved *and recent*. Once something ages out, it stops being a task and becomes history. Nobody has to close it, because closing was never the point.

## Why this matters more than it sounds like it should

I'd built the same trap once before without naming it. The archive pipeline has a three-tier confidence system: above 0.9 auto-stamp, 0.6 to 0.89 apply the classification but flag for review, below 0.6 route straight to the queue. Without decay, every session that ever scored under 0.6 sits there forever, waiting on me. Across weeks of running several provider archives through this thing, that number does not stay small.

Self-decay changes the shape of the failure mode. Instead of an ever-growing list you're supposed to feel guilty about, you get a rolling window. A classification that's sat for seven days without me touching it wasn't important enough to touch. It ages into the archive, un-triaged, and that's fine. The record still exists. I just stopped being the bottleneck it was waiting on.

## The same logic showed up in memory, too

The review didn't stop at the reconciliation queue. It hit the exact same tension in agent memory: patterns should graduate into vault docs when they solidify, and anything untouched for 90 days should expire into cold storage rather than sit there rotting in the active file. Same shape, different layer. A system that never lets anything decay accumulates weight until you can't move.

That's the actual lesson. Every queue eventually asks you to define "done," and if "done" means empty, you've built something you can't sustain solo. Decay is what lets a one-person system keep working without turning into a second job of clearing your own backlog.

I still haven't hit queue-zero on the reconciliation file. I'm not supposed to.
