<!-- source-hash: 487eacc5608879f64c680c5b15f48203 -->
Defines the wire-shape contract for HubSpot ticket data surfaced in chat card components, supporting three display variants (FULL, ANON, SELF) with field-level redaction handled server-side before delivery to the client.

## Key Components

### `HubspotTicketItem` Interface

The single export — a typed shape consumed by `hubspot-ticket-card.tsx` across all three rendering variants:

| Field | Type | Notes |
|---|---|---|
| `id` | `string` | Maps to `external_id` on `hubspot_tickets` table |
| `title` | `string` | Ticket subject/title |
| `preview` | `string?` | Sanitized body snippet via mapper's `buildPreview` |
| `status` | `string \| null` | Canonical: `NEW \| IN_PROGRESS \| WAITING \| CLOSED` — drives badge color |
| `statusLabel` | `string \| null` | Human-readable pipeline stage label; falls back to `status` |
| `priority` | `string \| null` | `LOW \| MEDIUM \| HIGH \| URGENT` |
| `customerCompany` | `string \| null` | **FULL variant only** — redacted to `null` for ANON |
| `customerEmail` | `string \| null` | Submitter address; visible for proxy-auth surfaces |
| `dateUpdated` | `string \| number \| null` | ISO timestamp or epoch |
| `url` | `string \| null` | **FULL variant only** — HubSpot UI deep link |

## Variant Redaction Model

```text
Variant │ customerCompany │ url
────────┼─────────────────┼──────
FULL    │ ✅ visible       │ ✅ visible
ANON    │ ❌ null          │ ❌ null
SELF    │ ✅ visible       │ ❌ null
```

Redaction happens in the **indexer**, not the client — the shape is identical across variants.

## Usage Example

```typescript
import type { HubspotTicketItem } from './hubspot-ticket';

const ticket: HubspotTicketItem = {
  id: '12345',
  title: 'VPN access not working',
  preview: 'Unable to connect since the latest Windows update...',
  status: 'IN_PROGRESS',
  statusLabel: 'Code review',
  priority: 'HIGH',
  customerEmail: 'user@example.com',
  dateUpdated: '2024-03-15T10:30:00Z',
  // FULL variant — url and customerCompany populated by indexer
  url: 'https://app.hubspot.com/contacts/123/ticket/12345',
  customerCompany: 'Acme Corp',
};
```