# Review checklist for a fail-closed monitor

From https://ibrahimsalman.vercel.app/guides/job-board-monitoring

- [ ] Before parsing, check the page loaded: the HTTP status is fine, the listing selectors exist and the extracted fields pass validation.
- [ ] When a load check fails, mark the cycle degraded, log the reason, send no alert and retry later with jitter.
- [ ] Keep the load check separate from the “anything new?” check; an empty result can be valid.
- [ ] Open SQLite in WAL mode and set busy_timeout on every connection.
- [ ] Write each new listing and its pending alert row in one transaction; mark the alert sent only after the mail server accepts it.
- [ ] Deduplicate on a normalised canonical URL, not the raw URL.
- [ ] Record a baseline on the first run and send nothing; keep baseline state in the database, not in memory.
- [ ] Test the parsers against malformed HTML, fields split across DOM nodes, hidden modals and text that only looks like a listing.
- [ ] Respect robots.txt, the site's terms and Retry-After on 429s; no CAPTCHA, login or access-control bypass.
