| Enrichment entry point | Route is authenticated and workspace-scoped; records are explicitly selected and capped at 50 | Request has no purpose, authorization reference, source-rights acknowledgement, or policy version | apps/api/src/radar/radar.controller.ts, apps/api/src/radar/dto/radar.dto.ts | G2, G5 |
| User action | Enrichment is on-demand and credits are charged/compensated | The POST itself is treated as sufficient authorization; no durable authorization/audit record was found | apps/api/src/radar/radar-enrichment.service.ts | G2, G5 |
| Contact safety | Contact paths distinguish personal, role, and general endpoints; general endpoints are not promoted to personal | No suppression/opt-out check blocks enrichment or later use | apps/api/src/radar/contact-path.ts | G5 |
| Provider provenance | Resolver returns provider, sources, confidence, verification, and attribution | sources are not persisted by enrichOneRecord; general-mailbox fallback stores neither provider nor source | apps/api/src/radar/ports/endpoint-verifier.port.ts, apps/api/src/radar/radar-enrichment.service.ts | G3, G6 |
| Field rights | Entity enrichment has field-level provenance and freshness concepts | Contact endpoints persist no licence status, may-display/may-export decision, retention, observed-at, or deletion handle | apps/api/src/radar/contact-path.ts, apps/api/src/radar/radar-enrichment.service.ts | G3, G6 |
| Deletion | Contact data is written into collection record fields and contact_path | No contact-specific deletion/expiry/propagation hook was identified in the audited path | apps/api/src/radar/radar-enrichment.service.ts | G6 |
| External sending | origin/staging contains a verified Nylas send-only path with hosted Gmail/Outlook connection, scoped send authorization, suppression checks, and campaign dispatch | Beta remains intentionally limited to send-only; keep allowlist, human authorization, monitoring, and public scope alignment | origin/staging Nylas provider and email architecture; verified staging E2E | G2, G5 |