Skip to content

WING-196 shared job-query integration matrix

WING-196 defines one transport-safe backend contract for every surface that displays jobs. Consumers must send JobQuery to POST /api/job-query; they must not recreate bucket, deduplication, filtering, sorting, or paging rules locally.

Capability Desktop YC build Flow Foundation evidence
Saved jobs Shared API Shared cloud-safe API Shared API SavedJobs bucket test
Recommended jobs Shared API Shared cloud-safe API Shared API RecommendedJobs bucket test
Saved internships Shared API Shared cloud-safe API Shared API SavedInternships bucket test
Recommended internships Shared API Shared cloud-safe API Shared API RecommendedInternships bucket test
Global deduplication Backend-owned Backend-owned Backend-owned saved duplicate wins test
Filters, facets, sorting, paging Backend-owned Backend-owned Backend-owned common query, validation, paging, and self-excluding facet tests
Safe result projection Redacted DTO Redacted DTO Redacted DTO sensitive-field exclusion test
Demo and fit freshness Explicit result fields Explicit result fields Explicit result fields projection test

The foundation is surface-neutral and has no filesystem path or desktop-only type in its public contract. LocalJobQuerySource is the desktop data adapter. The YC deployment must register a tenant-scoped cloud persistence adapter for IJobQuerySource; it must not activate LocalJobQuerySource in server composition. Flow and all UI consumers continue to use the same JobQuery and JobQueryResult shapes. Server activation remains blocked until that tenant-scoped adapter is composed and isolation-tested.

Facet counts are self-excluding: each facet ignores its own selected values while honoring the keyword, date, bucket, and all other facet filters. Results expose IsDemo, FitAnalyzed, and FitSkillSourceVersion so a consumer can label sample data and decide whether fit information is fresh. The transport DTO intentionally omits job descriptions, referrals, enrichments, ATS vault data, account identifiers, and tenant identifiers.

This matrix records backend reach, not completion of the consuming UI. A surface is complete only after its integration test proves that it issues the canonical query rather than filtering a local copy.