# Dispute detection

A reusable skill the "Collect what's overdue, keep the relationship" recipe pulls in. Add it once and every agent on the team can use it.

Identify any invoice under dispute and remove it from the collections
ladder entirely.

## Method
1. Check the dispute field (`{{dispute_field}}`) in `{{ar_sheet}}`
   before placing an invoice on the ladder.
2. Treat any populated dispute flag as authoritative — do not weigh it
   against days overdue.
3. Pull a fresh read of the dispute field at placement time, not a
   cached value from the last run.
4. Route disputed invoices to a held list, separate from the ladder.
5. Log the invoice, the dispute reason if present, and the date held.
6. Re-check held invoices each run in case the flag has cleared.

## Rules
- Never place a disputed invoice on any rung, at any tone.
- A held invoice goes to the controller to resolve directly — the
  agent does not chase it or auto-clear it.
- Dispute field name and location (set on first run, then stored in
  memory).
- If the dispute flag is ambiguous or missing, hold the invoice rather
  than assume it is clean.

## Output
A held list: `{invoice_id, dispute_reason, date_held}`, excluded from
the ladder run.
