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.