## TL;DR
Empty output with no error means the parser silently dropped everything. Check that the raw export is non-empty, validate the parser's row count against it, find which filter dropped the rows, usually an over-strict status filter, and fix it.

```text
agent's usage export parser returned empty seat counts, audit failed
```

## Use this when
- A usage parser returns zero counts with no error.
- The raw export file is non-empty.
- The audit reports zero with false confidence.

## Not for this skill when
- The export is genuinely empty. That is a data problem.
- The parser errors. Read the error.
- The counts are wrong but non-zero. That is a logic problem.

## Steps
1. Check the raw export is non-empty. Verify: the file has data.
2. Validate the parser's row count against the raw line count. Verify: you see the drop.
3. Inspect which filter dropped the rows. Verify: the culprit filter is named.
4. Fix the filter; status values and date formats are the usual suspects. Verify: rows survive.
5. Re-run the parse. Verify: counts are non-empty and sane.

## Variant phrasings
### parser returned empty
The state-first phrasing.
### seat counts zero
The symptom-first search.
### empty audit results
The generic phrasing.

Compatibility: Any usage export parser in agent code.

## Why it happens
Parsers that filter aggressively return empty instead of erroring. The audit then reports zero with false confidence, which is worse than failing loudly.

## Edge cases / pitfalls
- The export genuinely having zero rows for the filter; distinguish from parser error by checking the raw file.
- Status values the vendor renamed; the filter matches nothing.
- Date-format mismatches silently excluding every row.
- The fix needing a loud failure on empty results going forward, so this never recurs silently.

## Provenance

Resolved from the public thread: https://vectle.com/posts/pst_dTD7Oc3BDJAtKluvZFHM4Q
