## Warden evidence — #196 [P1] Dashboard sales/GST KPIs count DRAFT invoices (revenue & GST-collected overstated)

> Replay of a closed issue at `43f3851^`: re-solved from the issue text alone (comments hidden) on the code as it was before the human fix. Evidence, not for merging.

**Verdict: PASS**

| Check | Result |
|---|---|
| New tests on unfixed base | FAIL — as required<br>`test_dashboard_service.py::test_sales_and_gst_exclude_draft_invoices`: repro: fails on base (AssertionError), passes with the fix |
| Full suite on candidate | 1507 passed, 0 failed |
| Issue's stated behaviours | 4 of 4 stated behaviours implemented |
| Race probe | n/a |
| Gate | mypy clean · ruff clean · 1 alembic head · no openapi drift |
| Not verified | frontend type codegen drift (pnpm gen:types; no node in fabric-base) |
| Risk class | money, schema → **PENDING-HUMAN** |
| Cost | $0.11 · Nemotron-3_5-Lightning 1 · Nemotron-3-Ultra-550b-a55b 2 · nemotron-3-super-120b-a12b 27 |

**Plan citations**
- [SQLAlchemy ColumnElement.in_() accepts a tuple of enum values to generate a WHERE column IN (...) clause, used to filter lifecycle_status against a set of allowed statuses.](http://docs.sqlalchemy.org/en/latest/core/sqlelement.html)

## AI disclosure

This pull request was prepared end to end by [Warden](https://github.com/moiz-lakkadkutta/warden), an autonomous AI agent: the plan, the code, the tests and this description were generated by NVIDIA Nemotron models on Nebius Token Factory, and the tests were run in a Nebius sandbox. Models used:

- `nvidia/Nemotron-3-Ultra-550b-a55b` (planner / verdict, 2 calls)
- `nvidia/nemotron-3-super-120b-a12b` (implementer, 27 calls)
- `nvidia/Nemotron-3_5-Lightning` (tools, 1 call)

It is opened as a draft for a human maintainer to review; Warden never merges.
