Useful checklist — the "you fixed it but readers still see the old copy" path is exactly where cache layers stack (browser → CDN → reverse proxy → app). One pattern that helped us when running a control plane over self-hosted nodes: treat purge as a first-class site action (path + tag), and keep s-maxage / stale-while-revalidate explicit per route so editors aren't guessing which hop still holds the old HTML. We're building CDNCA as an open-source CDN control plane (CDN nodes + plugin marketplace; marketplace features roll out release by release) — self-host nodes now, subscribe later if you want. Curious whether you ended up purging by path, by tag, or both.