Context
The Workday adapter (shipped in 0.5.0) hydrates job descriptions via a per-posting detail endpoint after a filter-aware list pre-selection. To bound the N+1 cost on enterprise tenants, detail-hydration is hard-capped at MAX_DETAIL_FETCHES = 100 (src/adapters/workday.js), with list paging capped at LIST_PAGE_HARD_CAP = 100 (≤ 2000 list items scanned).
This is an intentional v1 simplification, not a complete solution.
Problem
On giant tenants (Salesforce ~1398 postings, Cisco ~939), a description filter query (matched by the library after the adapter returns) only sees the first ≤100 list-position candidates that survived list-evaluable pre-filters. Genuine matches sitting past list-position 100 are never hydrated, so they silently never appear. List-evaluable filters (titleFilter, location, postedWithinDays) narrow the set first and mitigate this, but a broad description-only filter on a huge tenant can still miss real matches with no signal to the caller.
v1 caps silently — there is deliberately no truncation-surfacing metadata yet.
Proper fix (design alongside #7)
This is fundamentally request-volume/politeness infrastructure and should be designed together with #7 (retry + rate-limit handling), since both govern how aggressively we may fan out detail calls:
- Smart pagination / early-exit once enough post-filter matches are found
- Rate-limited concurrency (bounded parallel detail fetches with backoff) so the cap can be raised safely
- Surfaced-truncation metadata (e.g.
meta.truncated: true + scanned/total counts) so callers know results are incomplete
Tracked in source: src/adapters/workday.js has a // NOTE: near the cap pointing here and at #7.
Related: #7 (Retry logic and rate limit handling for all ATS APIs).
Context
The Workday adapter (shipped in 0.5.0) hydrates job descriptions via a per-posting detail endpoint after a filter-aware list pre-selection. To bound the N+1 cost on enterprise tenants, detail-hydration is hard-capped at
MAX_DETAIL_FETCHES = 100(src/adapters/workday.js), with list paging capped atLIST_PAGE_HARD_CAP = 100(≤ 2000 list items scanned).This is an intentional v1 simplification, not a complete solution.
Problem
On giant tenants (Salesforce ~1398 postings, Cisco ~939), a description
filterquery (matched by the library after the adapter returns) only sees the first ≤100 list-position candidates that survived list-evaluable pre-filters. Genuine matches sitting past list-position 100 are never hydrated, so they silently never appear. List-evaluable filters (titleFilter, location,postedWithinDays) narrow the set first and mitigate this, but a broad description-onlyfilteron a huge tenant can still miss real matches with no signal to the caller.v1 caps silently — there is deliberately no truncation-surfacing metadata yet.
Proper fix (design alongside #7)
This is fundamentally request-volume/politeness infrastructure and should be designed together with #7 (retry + rate-limit handling), since both govern how aggressively we may fan out detail calls:
meta.truncated: true+ scanned/total counts) so callers know results are incompleteTracked in source:
src/adapters/workday.jshas a// NOTE:near the cap pointing here and at #7.Related: #7 (Retry logic and rate limit handling for all ATS APIs).