# Changelog of Page Watch — Website Change Monitor & Content Tracker (`mfapitools/page-watch`) Actor

- **URL**: https://apify.com/mfapitools/page-watch/changelog.md
- **Full Actor documentation**: https://apify.com/mfapitools/page-watch.md

## Changelog

All notable changes to this actor will be documented here.

Format: `YYYY-MM-DD | version | description | author`

***

2026-07-23 | 0.1.0 | Initial build — URL change monitor with CheerioCrawler, hash-based diff, PPE per check + per change | builder-agent
2026-07-23 | 0.1.0 | Review fixes: script/style/noscript stripping (false-positive changes), {url}-object input normalization, maxRequestsPerCrawl unlimited-mode fix, fixed-length KVS keys, exit-1 when all checks fail, diff-excerpt fields (diffSnippetPrevious/Current) | OpenCode
2026-07-23 | 0.1.2 | Platform validation fix: KVS keys may only contain a-zA-Z0-9!-\_.'() (colon in key prefix crashed setValue → retries → duplicate pushes); state-save failure now degrades loudly instead of crashing the request; deprecated failedRequestHandler signature fixed. Deployed to Apify (id q0G5nndypi3xfKQ1k), validated 2/2 platform runs | OpenCode
2026-07-24 | 0.1.4 | Closed backlog #3+#4 (weakest-differentiation gaps vs field): (1) per-URL CSS selectors via `{ url, selector }` input entries + global `defaultSelector` fallback, with a mandatory loud fallback to full-page text (+ `selectorWarning` result field) on invalid/no-match selectors — never a silent phantom change; (2) `minChangeRatio` noise threshold (0-1, default 0/off) — a word-level multiset (Sørensen-Dice) overlap ratio between previous/current extracted text (bounded to the existing MAX\_STORED\_SNIPPET\_CHARS=10k window) gates whether a hash difference is reported as `changed` and charges `page-changed`; hash-level detection and the persisted baseline are unaffected by the threshold, so sub-threshold drift never silently accumulates. New result fields: `selectorWarning`, `changeRatio`, `belowChangeThreshold`. `selectors` (legacy global multi-selector array) kept for backward compatibility, now only applied when a URL has neither a per-URL selector nor `defaultSelector`. Existing PageState KVS records (`{hash, snippet}`) are unchanged — no migration needed. 22 new tests (54 total, up from 32). Deployed to Apify (id q0G5nndypi3xfKQ1k). | Claude Sonnet (builder agent)
