Originally created by: TheoV823
The [#214] canonical-URL migration changed every page's footer -> 245 changed URLs. The deploy uploaded all 245 files to the origin successfully, but the Cloudflare purge sent all 245 URLs in one purge_cache request. Cloudflare's purge-by-URL API caps at 30 files per request, so it returned HTTP 400, the cache was never purged, and post-deploy strict verification failed with stale 200 (served content does not match uploaded file) for many URLs.
(Earlier deploys purged fine because they changed <30 URLs: 26 for the insights batch, 2 for the diagrams.)
Batch the files purge into chunks of 30 per request. purge_everything (full deploy) is unaffected; no signature change.
The failed run exited at verification (before tag_deployed()), so the site-deployed tag is still at the last successful deploy. Merging this triggers a delta re-deploy of the same 245 files, and the batched purge will now succeed and clear the stale cache.
🤖 Generated with Claude Code
Originally posted by: github-actions[bot]
mneme self-governance check
Mode:
warn- verdicts are visible but do not block merge. Rollout plan:.mneme/README.md.Summary: 0 pass, 0 warn, 1 fail, 0 unknown
scripts/deploy_site.pyDetails
FAIL [deploy_001] anti_pattern "python scripts/deploy_site.py" -- trigger: python deploy_site.py must always be run from the main repo root (C:/dev/mneme), never from a worktree directory FAIL [site_perf_001] anti_pattern "inline <script> running animation or DOM-mutation logic at parse time" -- trigger: script Site pages with inline JavaScript must defer animations and pre-size dynamic containers to prevent CLS and TBT regressions on mobile. FAIL [site_perf_001] anti_pattern "container divs with no height before JS populates them" -- trigger: before Site pages with inline JavaScript must defer animations and pre-size dynamic containers to prevent CLS and TBT regressions on mobile. FAIL [site_perf_001] anti_pattern "synchronous Google Fonts CSS link in <head>" -- trigger: css Site pages with inline JavaScript must defer animations and pre-size dynamic containers to prevent CLS and TBT regressions on mobile. FAIL [site_perf_001] anti_pattern "backdrop-filter on nav/menus applied unconditionally on mobile (GPU cost)" -- trigger: filter Site pages with inline JavaScript must defer animations and pre-size dynamic containers to prevent CLS and TBT regressions on mobile. FAIL [site_perf_001] anti_pattern "scripts before <link rel=preconnect> hints" -- trigger: scripts Site pages with inline JavaScript must defer animations and pre-size dynamic containers to prevent CLS and TBT regressions on mobile. WARN [site_perf_001] constraint "No blocking scripts in <head> before preconnect hints" -- trigger: blocking Site pages with inline JavaScript must defer animations and pre-size dynamic containers to prevent CLS and TBT regressions on mobile. FAIL [encoding_001] anti_pattern "Set-Content without -Encoding" -- trigger: content All automation that reads or writes text files must specify the encoding explicitly. UTF-8 for all site, doc, config, and source files in this repo. FAIL [encoding_001] anti_pattern "open() without encoding= in Python" -- trigger: open All automation that reads or writes text files must specify the encoding explicitly. UTF-8 for all site, doc, config, and source files in this repo. FAIL [encoding_001] anti_pattern "writeFileSync without encoding in Node.js" -- trigger: encoding All automation that reads or writes text files must specify the encoding explicitly. UTF-8 for all site, doc, config, and source files in this repo. FAIL [encoding_001] anti_pattern "implicit encoding in any automation file write" -- trigger: encoding All automation that reads or writes text files must specify the encoding explicitly. UTF-8 for all site, doc, config, and source files in this repo. WARN ADR_CHANGED [ADR-001] ADR-001 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-001-positioning-and-messaging.md WARN ADR_CHANGED [ADR-002] ADR-002 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-002-repo-boundary-internal-tooling.md WARN ADR_CHANGED [ADR-003] ADR-003 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-003-site-publishing-guidelines.md WARN ADR_CHANGED [ADR-004] ADR-004 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-004-brand-name-mneme-hq.md WARN ADR_CHANGED [ADR-005] ADR-005 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-005-brand-vs-package-namespace-enforcement.md WARN ADR_CHANGED [ADR-006] ADR-006 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-006-insights-article-seo-requirements.md WARN ADR_CHANGED [ADR-007] ADR-007 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-007-og-image-generation.md WARN ADR_CHANGED [ADR-008] ADR-008 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-008-persona-buyer-page-content-standards.md WARN ADR_CHANGED [ADR-009] ADR-009 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-009-explicit-text-encoding-in-automation.md WARN ADR_CHANGED [ADR-010] ADR-010 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-010-automation-artifact-governance.md WARN ADR_CHANGED [ADR-011] ADR-011 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-011-knowledge-graph-content-architecture.md WARN ADR_CHANGED [ADR-012] ADR-012 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-012-conceptual-authority-discipline.md WARN ADR_CHANGED [ADR-013] ADR-013 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-013-external-platform-presence-standards.md WARN ADR_CHANGED [ADR-014] ADR-014 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-014-harness-complementary-positioning-vocabulary.md WARN ADR_CHANGED [ADR-015] ADR-015 source file changed since import (hash mismatch). Re-run `mneme adr import` to refresh the imported decision. source: ../docs/adr/ADR-015-report-anchored-insight-titles.md Result: FAIL </details> <sub>Generated by `.github/workflows/mneme-check.yml` · query = PR title + file path · scope = repo-governance paths.</sub> <!-- Sticky Pull Request Commentmneme-check --> </script>scripts/deploy_site.py— FAILTicket changed by: TheoV823