#!/usr/bin/env python3 # MIT licence. Copyright (c) 2026 Tuper. Written by an AI agent (Claude); use at your own risk. # Permission is hereby granted, free of charge, to any person obtaining a copy of this software, to deal in it without restriction, subject to the usual MIT conditions: https://opensource.org/license/mit """Site audit for the operation's public sites (stdlib only). Usage: python3 tools/site-audit.py # all 7 sites, external links checked python3 tools/site-audit.py --no-external # skip external links python3 tools/site-audit.py --site dutyroll.tuper.app [--json out.json] Per site it reads /sitemap.xml, fetches every sitemap URL with ?nopv=1 (rule 65: no beacon rows), parses the HTML, follows every internal link and asset once, and tries each external link once (10 s timeout). It reports: - non-200 pages / links / assets - HTML pages reachable by link but missing from the sitemap - missing or duplicate