fix(jobindex-search): map ASAP deadlines to null per the /scrape contract

apply_deadline_asap was emitted as the string "ASAP" on ~half of live
results - undocumented, contradicting the CLI's own README, and breaking
every consumer that does date arithmetic on the field (rank's sweep,
outcome's deadline check, notion-sync's typed date column). ASAP means
"no stated deadline", which the schema already defines null to mean.
The flag wins over any date field that happens to be present. Review
finding F12 (2026-08-19), decision approved by Mads.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Mads Lorentzen
2026-08-19 20:29:40 +02:00
co-authored by Claude Opus 5
parent 2edf8c41f1
commit b067928da7
4 changed files with 28 additions and 2 deletions
+7
View File
@@ -82,6 +82,13 @@ per-file diff commands.
### Fixed
- **`jobindex-search` maps ASAP postings' deadline to `null`** - the portal's
`apply_deadline_asap` flag was emitted as the literal string `"ASAP"` on roughly half
of live results, contradicting the CLI's own README ("date string; null if not
listed") and the `/scrape` schema, and breaking every consumer that does date
arithmetic (`/rank`'s urgency and expiry sweep, `/outcome`'s deadline check,
`/notion-sync`'s typed date column). ASAP means "no stated deadline", which the
contract already represents as `null`. Pinned in `tests/search-page.test.ts`.
- **`/gmail-sync` no longer restricts its search to the Inbox** - the query used
`in:inbox` to "skip sent/drafts", but that operator also excludes every archived
message, and self-defeatingly the mail matched by the very job-search label Step 3.1