mirror of
https://github.com/MadsLorentzen/ai-job-search.git
synced 2026-09-17 00:26:26 +00:00
* fix(scrape): persist each posting's publication date in seen_jobs.json (#390) Step 2's contract guarantees a `date` on every portal CLI's search output and CI enforces it in test_scrape_contract.py; Step 3 uses that date to scope a run to the last 14 days. Step 4's storage schema then dropped it, so a posting's age was unrecoverable the moment the run ended - `first_seen` records when the scraper saw an entry, not when the employer posted it. /rank reads the stored entry rather than the run, so it had no age signal to weigh. A freehire-search posting dated 2024-05-13 was scraped 27 months later and ranked Strong Fit at position 1 of 133. The scoring note observed the listing "may be long stale" in prose nothing reads, and an /apply run drafted a tailored CV and cover letter against it. The schema gains `posted_date` (null when the portal returned no date, never inferred or backfilled), documented alongside `deadline` with the same never-backfill rule. Three new cases, each verified to fail on the unfixed spec. Closes #390 * fix(scrape): correct the 14-day scoping cross-reference, restore EOF newline Review follow-up on #391. The 14-day scoping is Step 1b's list item 3, not Step 3 - Step 3 is Quick Fit Assessment and never touches dates. The "3." list item had been promoted to a step number. Corrected in the new SKILL.md paragraph (both occurrences), the CHANGELOG entry, and the test class docstring; a wrong pointer in a file agents execute as instructions actively misleads. Also restores the trailing newline on tests/test_scrape_contract.py (the nit left for a future touch in #344) and adds the (#390) ref to the CHANGELOG entry to match its siblings.
This commit is contained in:
@@ -11,6 +11,23 @@ prefer updating to a tagged release over pulling raw `master` (see
|
||||
files a release touched; `python3 tools/check_upstream_updates.py` lists them with
|
||||
per-file diff commands.
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
### Fixed
|
||||
|
||||
- **`/scrape` now persists each posting's publication date** (#390) - Step 2's contract guarantees a
|
||||
`date` on every portal CLI's search output (CI enforces it in `test_scrape_contract.py`) and
|
||||
Step 1b uses that date to scope a run to the last 14 days, but Step 4's `seen_jobs.json` schema
|
||||
stored no posting date at all: `first_seen` is when the scraper saw an entry, not when the
|
||||
employer posted it. The freshness window was therefore unauditable the moment a run ended, and
|
||||
`/rank` - which reads the stored entry, not the run - had no age signal to weigh. A
|
||||
`freehire-search` posting dated 2024-05-13 was scraped 27 months later and ranked Strong Fit at
|
||||
position 1 of 133; the scoring note recorded that the listing "may be long stale" in prose
|
||||
nothing reads, and an `/apply` run drafted a tailored CV and cover letter against it. The schema
|
||||
gains `posted_date` (`null` when the portal returned no date, never inferred or backfilled).
|
||||
Pinned by three new cases in `test_scrape_contract.py`, each verified to fail on the unfixed
|
||||
spec. Reported and diagnosed from a real run by @sandunwijerathne.
|
||||
|
||||
## [1.7.0] - 2026-08-29
|
||||
|
||||
### Fixed
|
||||
|
||||
Reference in New Issue
Block a user