Skip to content

Session Handoff [log-review]: Periodic 404 Log Review, Monthly From 2026-11-15 #474

Closed

Description

@ptr727

Next steps, in priority order

  1. Run the first monthly 404 pass on or after 2026-11-15. OPERATIONS.md "Logs and Debugging" now carries the whole procedure. Run it from the repository rather than rebuilding it by hand.
    • Use the window block in "Reading a 404 list without being fooled by it" with start='2026-10-15T21:03', where this pass ended. It runs checks/log-review.jq over the joined window.
    • Cross-check the 403s with "A 403 is CrowdSec's until shown otherwise", and check any crawler 403 or 404 by forward-confirmed DNS.
    • Run "Checking that search engines can index both sites". viljoen.family/robots.txt and /sitemap.xml should now answer 200, and a 404 on either is a regression. So is a 404 on /tag/review, /viljoen-family or /20180811_172609507_ios after 2026-10-15 23:04 UTC.
    • When a new scanner shape crowds the list, add it to checks/log-review.jq in the same change that records the pass.
    • Done for a pass means a comment on this issue with the date range, the count left after filtering, and each finding's disposition.
  2. After that pass, close this lane out if it found nothing new. Otherwise write the next link with the next monthly date.

External blockers

  • Production log reads and CrowdSec reads need the maintainer's go-ahead. Ask once per session in a dialog before the first SSH or archive read. A past session's approval does not carry over.
  • Search Console is the maintainer's. Google did not fetch the blog's sitemap.xml between 2026-10-10 and 2026-10-15, while Bing did. Whether the sitemap is submitted in Google Search Console, and the new family sitemap too, is visible only there.
  • The cleartext redirect is temporary (302/307) on both sites. That is host-side, filed as ptr727/HomeAutomation-Config#1077. The HomeAutomation-Config session acknowledged it and left it in that backlog.
  • The home-network CrowdSec allowlist is still ptr727/HomeAutomation-Config#893. Until it lands, keep production probes to a handful per pass.

Internal dependencies

  • None. Each pass stands alone.

State

The parked decision queue

Zero issues carry decision. This round asked five questions as it went, all answered: the production-read go-ahead, the slashless fix, the process-in-git shape, the host-side issue, and the merges and release.

What the last round did

  • The catch-up pass covered 2026-10-10 22:39 UTC through 2026-10-15 21:03 UTC and is recorded in a comment on this issue. The 2026-10-11 daily pass had been missed.
  • #471 redirects slashless slugs.map/terms.map keys through a second map lookup (@mapped_slash, contract now 955 URLs). It also adds the family robots.txt and sitemap.xml.
  • #472 commits checks/log-review.jq. It also documents the window join, the CrowdSec cross-check, forward-confirmed crawler DNS, and the indexability checklist in OPERATIONS.md.
  • #473 promoted both. Released as 1.0.244 and deployed to production and the local production mirror.
  • Filed ptr727/HomeAutomation-Config#1077 for the permanent redirect and told that session.

What not to repeat

  • Filtering by a broad extension or root word without checking what the sites serve. The first filter dropped /en/, /index.json, /site.js, /apple-touch-icon.png and legacy .zip uploads. Run every built file and contract URL through the filter as a synthetic 404 after changing it. None may be dropped.
  • set -e inside a { } group on the left of a pipe. Bash ignores it there, so a failed find or zcat still yields a partial window. Run producers as plain commands inside a ( set -euo pipefail ... ) subshell, as OPERATIONS.md now does.
  • Reading an empty 403 as anything but CrowdSec before matching it. 389 of 395 blocked clients matched CrowdSec's alerts or decisions. The rest received only 403s.
  • Trusting a crawler user agent. All six crawler-UA 403s came from cloud VMs. Confirm by reverse DNS, then forward.
  • Everything in Session Handoff [log-review]: Periodic 404 Log Review, Daily Through 2026-10-11 Then Monthly #461's and Session Handoff [log-review]: Periodic 404 Log Review, Daily Through 2026-10-11 Then Monthly #455's "What not to repeat" still applies.

New learnings

  • A routerless https 404 on a served host can be the edge losing its routes while the Pangolin API restarts. On 2026-10-15 at 09:14 UTC the API answered 502 for about 18 seconds. Host-side and transient.
  • The repeatable log-review steps are now in OPERATIONS.md "Logs and Debugging" and checks/log-review.jq, per the maintainer's direction that repeatable process belongs in git rather than in notes.

Activity

  1. added
    handoffA link in the session handoff chain, one open issue per track
    on Oct 15, 2026
  2. ptr727 commented on Oct 23, 2026

    @ptr727
    OwnerAuthor

    404 pass, 2026-10-15 21:03 UTC to 2026-10-23 15:42 UTC

    Run early, on the maintainer's call, rather than waiting for the 2026-11-15 monthly date, so the window also covers release 1.0.244's first week in production.

    Window: 116,005 edge lines after the join and dedupe, 17 archived days plus the live log. checks/log-review.jq left 711 lines.

    Findings and dispositions:

    • /news-sitemap.xml on the blog host, 11 404s, from GPTBot at three addresses (one of them daily), Applebot, and three residential iPhone clients. Round 1 dropped it as noise without a Wayback check. The Wayback Machine holds 200 captures of it from 2022-09 through 2024-02, so the old platform served it. Disposition: fixed in #489, a @news_sitemap redirect to /sitemap.xml, contract now 956 URLs.
    • Two routerless https 404 clusters on served hostnames, 2026-10-17 00:49 to 00:51 UTC (6 lines beside 37 502s) and 2026-10-21 09:30 UTC (3 lines beside 4 502s). The three addresses in the second cluster all serve normally (two media files and a post). Disposition: none. The maintainer confirmed the edge restarts nightly and during daytime host-side pushes, and OPERATIONS.md "The log is three tiers" now says to leave such a window alone unless it does not look like an update blip.
    • /en/ on the blog host, 4 requests from 4 clients with no reverse name and exactly 30 other requests each, every one carrying a pieter.viljoen.name/en/ referer. That domain is a registrar-level redirector forwarding its path to the blog, so the blog receives whatever is probed there. No Wayback capture of /en/ on any blog host. Disposition: none, a scripted crawler.
    • /2012/06/looks-can-be-deceiving once, no referer. blogger.map carries the .html form. No Wayback capture of the extensionless form. Disposition: none.
    • /sitemap_index.xml (4), /sitemaps.xml (2), /sitemap.txt (1), /osd.xml (1), /rss.xml (3), /rss (1), /index.rdf (1): sitemap and feed-name guesses, the last three from the same feedparser client as earlier rounds. No Wayback capture of any. Disposition: none.
    • Day archives, month feeds (/2008/04/feed/, /2012/08/feed/ from Google FeedFetcher), viljoen.family/feed/ pollers, /viljoen-family/comments/feed, /favicon.png from an okhttp app, /archive/ from an AI agent, truncated and quote-mangled links: as cleared in earlier rounds.
    • Everything else was scanner shape: careers-page probes, cloud credential paths, __vite_rsc_findSourceMapURL, Joomla and Jira paths, and random 20-character slugs.

    403 cross-check: 512 blocked clients, 495 matched CrowdSec alerts or decisions. The 17-client residue was 8 clients that only ever received 403s, and 9 scanners (cache.php, admin.php, .env, WP-Safe-Scanner) whose community decision expired before the read. Nothing for this repository.

    Crawlers: 37 crawler-UA clients received a 403 or 404. 15 forward-confirm as Googlebot, Google, Bingbot, or Applebot, and those received no 403 at all. Their 404s were old WordPress asset URLs, /ads.txt, sitemap guesses, and the two month feeds. The rest were Google Cloud VMs claiming Googlebot, every 403 among them.

    Indexability: all six probes pass on both sites. viljoen.family/robots.txt and /sitemap.xml answer 200, and a Googlebot-UA client fetched the blog's sitemap.xml once (200), where the previous window saw no Google fetch.

    Regression URLs from 1.0.244: /tag/review, /viljoen-family, and /20180811_172609507_ios all answered 301 after 2026-10-15 23:04 UTC, none 404.

    Filter change: none. No new scanner shape crowded the list enough to earn a rule.

    The extracts were deleted from the scratchpad after this comment was written.

  3. ptr727 commented on Oct 23, 2026

    @ptr727
    OwnerAuthor

    Continued in #491, round 7 on track log-review.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    handoffA link in the session handoff chain, one open issue per track

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions