2026-11-07: monitor audit summary row — every monitor run now pushes one summary with checked/unchanged/new/changed/removed counts, runStatus, charged and evidence newIds/changedIds/removedIds matching the event rows delivered; a second unchanged run bills $0 (0 new / 0 charged) and stays ok; dataset schema exposes the audit columns.
2026-11-07: leader-parity structured filters locations/workplaceTypes/employmentTypes/minSalary+salaryCurrency/hasSalaryOnly in jobs, detail and monitor modes — OR within a filter, AND across filters, applied before maxItems/billing; minSalary compares annualized salaryMax (year x1, month x12, hour x2080) and excludes null salary, hasSalaryOnly excludes null salary, Remote matches workplaceType or a remote location word, and monitor state is keyed per filter set so filtered runs bill $0 when unchanged.
2026-11-06: new postedSinceDays input filter — keep only jobs first published within the last N days (set 7 for "new this week", 30 for "new this month") in jobs, detail and monitor modes, without monitor state. Rows with no postedAt are excluded when the filter is set; the cutoff is inclusive.
0.9 (2026-11-03): refresh live fixtures and tolerate boards that omit the company internal job id (null instead of an int), plus harden id parsing for numeric-string ids.
0.7 (2026-11-03): monitor mode no longer reports every job as removed and re-added (and bills it again) on the second run. Greenhouse job ids are numbers and the saved state came back with string keys, so no id ever matched; state is now keyed by the id as a string.
0.6 (2026-11-02): a valid board with no open jobs (the battery's prisma input, which caused the failed runs) is confirmed as a successful run with an explicit empty status row; captured live airbnb and prisma fixtures and locked both in tests. README no longer claims empty boards fail a run.
0.5 (2026-11-02): empty boards (and quiet monitor days) no longer fail the run; refresh live fixtures.