* fix: hide API-archived customers and suppliers from lists and pickers
The v1 API soft-archives customers and suppliers (archived_at, plus
is_active=false on suppliers) and its own list routes hide those rows
behind ?include_archived=true. No other surface filtered archived_at, so
an archived counterparty stayed a normal row in the dashboard rosters,
the internal /api/customers and /api/suppliers list routes, the MCP list
tools and every customer/supplier picker.
Apply the same canonical `archived_at IS NULL` filter on every non-v1
list and picker path:
- /api/customers GET, /api/suppliers GET (feeds the customers page and
the supplier-invoice form)
- suppliers dashboard page (reads suppliers via browser Supabase)
- InvoiceEditor and NewRecurringScheduleDialog customer pickers; an
invoice or schedule being edited keeps its current customer visible
(archiving does not refuse on drafts, so a draft can point at one)
- deadlines page and CalendarWorkspace customer pickers
- InvoicePreviewCard sample customer
- gnubok_list_customers and gnubok_list_suppliers: hidden by default,
optional include_archived boolean mirroring the v1 flag; rows now
carry archived_at so an agent can tell them apart when opted in
Detail routes and by-id lookups are untouched: an archived row still
opens. The delete-vs-archive semantics are unchanged.
The tools/list payload guard moves 60.7K to 60.8K: main had ~6 tokens
of headroom, so even the bare boolean contract crossed.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
* test(schema): raise the unresolvable-expression ceiling by 2 for the archived-customer picker filters
The two .or('archived_at.is.null,id.eq.<uuid>') filters keep an edited
draft's archived customer selectable. The uuid is a runtime value, so the
scanner cannot resolve the expression; both columns exist and the filter is
covered by the archived-counterparty tests.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
---------
Co-authored-by: Jakob Wennberg <311770904+jakobwennberg-oss@users.noreply.github.com>
Co-authored-by: Claude Fable 5 <noreply@anthropic.com>