# Changelog of Workday Jobs Scraper (`redomic/workday-jobs`) Actor

- **URL**: https://apify.com/redomic/workday-jobs/changelog.md
- **Full Actor documentation**: https://apify.com/redomic/workday-jobs.md

## Changelog

### 2026-11-15

- Per-site outcomes and the run summary are stored in the run's key-value store as `STATUS` and `SUMMARY` instead of dataset rows.
- `company` shows the career site company name; the Workday legal entity is stored separately as `legalEntity` when available.
- `location` is the primary location and `locations` keeps the full list; `workplaceType` is inferred as Remote when a location indicates it.
- Monitor mode no longer emits a spurious `change` when a job ages from a dated posting to "Posted 30+ Days Ago" (postedAt becomes null): the previous run's `postedAt` is preserved in state/fingerprint.

### 2026-11-14

- When Workday itself is down (its maintenance page answers every call, as on wd1 and wd5 today), the run says so
  in the status row at once instead of retrying three times into "server error".

### 0.1 - 2026-11-08

- First build: search and monitor public Workday (myworkdayjobs.com) career sites via CXS JSON endpoints.
- Supports startUrls/companies, searchText, location matching, postedWithinDays, detail enrichment, and stateful monitor mode.
- Flat output with stable requisition IDs, verbatim source/apply URLs, location lists, and parsed salary fields.
- README output sample replaced with a real row parsed from captured fixtures; detail-enriched fields noted separately.
- Improved field consistency: adds `displayCompany`/`companySource`, prefers hiring org when detail is fetched, merges legacy `companies` into `startUrls` docs, emits `locationCount` and expands multi-location placeholders, adds `hasSalary`, clarifies verbatim requisition suffixes, and refines heuristic role labels.
- Fix startup crash in packaged/runtime builds where shared `core/ats` is not present (`ModuleNotFoundError: No module named 'ats'`) by using in-actor fallbacks for text/signal helpers.
- Add `postedAfter` recency filtering (ISO date or windows like `24h`/`7d`/`30d`) with early-stop pagination on newest-first pages; keeps `postedWithinDays` as a compatibility alias.
- Fix startup crash (`ModuleNotFoundError: No module named 'ats'`) in standalone/container builds by falling back to vendored `src/ats_*` helpers on any `ImportError` when the shared `ats` package is unavailable.
- 0.1 (2026-11-09): container startup crash (`ModuleNotFoundError: No module named 'ats'`, run 7Aah2N2wT8Ewv7Kac); parser now imports the vendored `src/ats_*` helpers only and never attempts the shared `ats` package, so the nvidia search input parses real rows.
- 0.1 (2026-11-09): pin that failure end to end: a regression test imports `src.main` (the module in the traceback) with the shared `ats` package blocked, runs the exact canary input (nvidia search, maxItems 5) against the captured board response, and asserts 5 real rows plus an `ok` status row.
- 0.1 (2026-11-09): the parser can no longer die at import if the vendored `src/ats_*` helper files are omitted by a packaging step: role/seniority/text imports fall back to inline defaults so the same nvidia search input still returns real rows instead of a startup traceback.
- 0.1 (2026-11-09): missing text helper no longer disables the working signals helper: role/seniority and HTML-to-text now fall back independently, so the nvidia search input keeps real role/seniority labels when only `src/ats_text.py` is omitted.
- 0.1 (2026-11-15): transient 5xx responses from Workday CXS endpoints are retried with backoff (up to 5 attempts) instead of failing the site after 3, fixing intermittent "gave up after 3 attempts (server error)" runs (e.g. nvidia search). Added fixture/test for the failing canary/battery input.
