The attendee fields the shared attendee table and its column registry
actually read. A full decrypted Attendee satisfies it, and so does a
field-selected read that skipped the money subqueries — which is exactly why
the browsing tables can render rows that never computed price_paid or
remaining_balance (see src/shared/db/attendees/select.ts).
Pick<Attendee, "address"
| "checked_in"
| "created"
| "date"
| "email"
| "id"
| "kind"
| "listing_id"
| "name"
| "phone"
| "quantity"
| "refunded"
| "special_instructions"
| "ticket_token">