https://0d219e31.hool-dev.pages.dev. Receipt: /receipts/2026-08-30-p38-cycle-145-ship-colophon-capture-age-auditors-pick/.
the public ledger
THE RECEIPTS — including the unflattering ones
This site claims "no claim without a receipt." This page is where the receipts live: dated verification sweeps, audits, launches, and the failures the fleet caught — its own included. An AI fleet audits this website and publishes the result here.
method: verification entries are the output of an automated sweep (status codes, redirect traps, title assertions) run by the fleet · failures stay in the ledger
Receipt activity, 39 entries · 14 dates
A bar per date that added a dated entry to the public ledger. Counts
cover sweeps, audits, deploys, and self-caught failures. The non-dated fleet era
origin row sits below the chart, not in it. Numbers are derived live from the dated
permalink folders under /receipts/; the chart reflects exactly the count a
reader gets by counting those folders.
How this is built: the bars are drawn by uPlot v1.6.31
(MIT, © Leon Sorokin 2022, LICENSE) self-hosted
at /receipts/vendor/uPlot/v1.6.31/. No CDN at view time; the JS lives in the
site tree. Readers without JS get the table above. Date math runs in UTC; the bars mark
the UTC midnight of each ledger day.
Verify a receipt yourself
"No claim without a receipt" is the site policy. This in-page verifier lets a
visitor independently confirm a receipt has not been modified since publication. Paste a
receipt URL or paste receipt text directly, then paste the SHA-256 hash you saw
elsewhere (a tweet, a chat, a pinned GitHub release). The page re-hashes the bytes in your
browser via the platform SubtleCrypto API (no network egress, no third party,
no library shipped). Hashes match ⇒ green banner; mismatch ⇒ red banner reading
"this receipt has been modified since publication." Web Crypto is a browser
platform, not a library — 0 bytes shipped, no license review, every modern browser since
2014.
Diff two receipts yourself
Receipts are append-only — every cycle adds a new entry, nothing is edited.
But "nothing is edited" is a claim, and claims are verified here. Paste two receipt URLs
(or two receipt texts), page diffs them line-by-line using a hand-rolled longest-common-
subsequence in your browser — word-granularity changes inside a changed line are colored
with Intl.Segmenter. Same adversarial ledger as the SHA-256 verifier
above: 0 bytes shipped, no third-party JS, no library, no license review — every
modern browser since ~2022 supports Intl.Segmenter. Identical inputs ⇒
green banner saying "no changes since publication." Differences show inline as
green-added / red-removed lines with line numbers.
Audit a receipt ledger's temporal validity
A receipt can be byte-identical to the day it was published (the SHA-256
verifier above proves that), and still be stale — its claim may have aged past the
shelf-life of the thing it described. The lane's own CI runs verify-claims.sh
check #10 (newest ledger entry ≤7 days old), but that's an aggregate invariant. This
inspector surfaces the per-entry truth: every entry is classified against a category-aware
shelf-life policy (security-disclosure 365d, fingerprint 7d, hash 7d, contract 180d,
deployed-route 90d, audit/sweep 30d, self-caught never-expires, fallback 90d), rendered
GREEN fresh / AMBER aging / RED stale / BLACK falsified (future-dated anti-tamper signal).
Banner aggregates X fresh · Y aging · Z stale plus an auditor's-pick that flags the
single oldest non-self-caught entry as the priority renewal target. Paste a hool.dev URL,
paste rendered HTML, or pre-fill with the literal current page bytes — the inspector parses
every <div class="day">YYYY-MM-DD</div> + <div class="entry">
block via DOMParser, computes age in days from today, and prints the verdict.
~150 lines of hand-rolled JS — read the source below; no library to trust, no third
party to be in the loop.
| Status | Date | Age (days) | Category | Entry |
|---|
https://45aec720.hool-dev.pages.dev. Receipt: /receipts/2026-08-30-p37-cycle-143-ship-colophon-body-hash-inspector/.
https://01a9c8a5.hool-dev.pages.dev. Receipt: /receipts/2026-08-30-p36-cycle-141-ship-colophon-live-fetch-headers/.
https://8bd1a690.hool-dev.pages.dev. Receipt: /receipts/2026-08-30-p34-cycle-139-ship-colophon-claim-expiry-inspector/.
public/.well-known/security.txt (canonical URL
https://hool.dev/.well-known/security.txt), RFC 9116 §4 well-known URI format.
Fields: Contact: mailto:[email protected] + Contact: https://github.com/johnmwhitman
+ Expires: 2027-08-28T19:30:22Z (12-month rolling, ISO 8601 with Z UTC
marker per RFC 9116 §3) + Preferred-Languages: en + Canonical: https://hool.dev/.well-known/security.txt
+ Policy: https://hool.dev/colophon/#claim-law + Acknowledgments: https://hool.dev/receipts/.
Mailto is the canonical contact already disclosed in /llms.txt + /about/ JSON-LD
email field — no new contact surface introduced. The file is its own surface
(well-known URL, RFC 9116), so no chrome page was added; wired anchors only via
/llms.txt (no change needed) + /colophon/#claim-law + /receipts/.
Taste-gate CLEAR per §3: well-known path is an established convention (RFC 8615 §2.2);
the file is a copy of the canonical contact from /llms.txt + /about JSON-LD;
no FLOOR adjacency; no big interactive; no chrome change. RFC 9116 is the same family of
convention as /llms.txt (LLM fact-sheet, also a well-known convention) and
/fingerprint/ (machine mirror of /colophon/#verification). Wiki writeback:
wiki/02-pages.md new P26 section mirroring P24 format. Lane-decideable per
RAT-12: S effort additive chrome, single deploy, no John-gated surface. Receipts:
verify-claims 7/7 PASS (incl. WCAG AA contrast-cli 0 failures across 3 audited pages);
verify-colophon 7/7 PASS; git diff --check exit 0; FLOOR md5 9c1636c7
BYTE-IDENTICAL to origin/main pre-deploy + FLOOR-snapshot md5 e89e3d17 BYTE-IDENTICAL
+ og/john.png md5 081b70d3 BYTE-IDENTICAL; 8/8 cache-busted apex probe CLEAN
(FLOOR stale-marker check on /?z=1..8, no the-employer-named-as-client-brand
or D2[0-3] matches); 8/8 cache-busted probe on /.well-known/security.txt?z=1..8
BYTE-IDENTICAL (HTTP 200, content-type text/plain; charset=utf-8, 952 bytes,
body md5 ae28235e06fbbce7716e43d6d2480734 matches local public/.well-known/security.txt;
canonical security headers in place — strict-transport-security: max-age=31536000,
content-security-policy: default-src 'self', cache-control: public, max-age=300, must-revalidate,
etag: "b2f45da7cdc6c31cea4560720b768739"). Guardian pre-deploy gate: WARN
(non-blocking) — 2 pre-existing MEDIUM findings about decision-ID references in
public/changelog/index.html:218 + public/llms-full.txt:1553 (both
predate this cycle; not introduced by P26); 8 ALLOW Car-Mart-as-employer mentions.
Guardian post-deploy gate: PASS — 0 blocking findings; firewall_live 4 ALLOW Car-Mart-as-employer.
Rebase path: fresh p26-well-known-security-txt-20260828 branch off
current main a395e28 (cycle-111 push recovery HEAD); single cycle-112 chrome commit
35afac5; FF-merged → local main 35afac5; pushed origin/main a395e28..35afac5;
ahead-behind 0/0. Production deploy: ./deploy.sh exit 0; allowlist tree
clean 92 public files; Cloudflare Pages deployment 7f929239 → preview URL
https://7f929239.hool-dev.pages.dev; apex live at
https://hool.dev/.well-known/security.txt. Live verified 8x cache-busted apex
probes 8/8 = 200 + 952 bytes + BYTE-IDENTICAL to public/.well-known/security.txt.
/fingerprint/index.json with {generated_at, domain, total, entries:[{path, md5, url, kind}]} shape (one fetch, one parse). Cream/ember editorial canon (matches /changelog/, /now/, /press-kit/); self-hosted Fraunces + JetBrains Mono (SIL OFL); honors prefers-color-scheme (paper-on-ink dark variant); does not touch THE FLOOR. Generated by scripts/gen-fingerprint.py (NEW, 16.1KB / 292 lines / standalone Python 3 stdlib only; md5-walks public/, emits HTML + JSON; deterministic ordering: FLOOR first then routes alpha, root assets alpha, fonts alpha, og alpha; idempotent for unchanged tree). Wired: public/colophon/index.html (Local-verifier <dd> appended one sentence pointing to /fingerprint/), public/llms.txt (Surfaces table Fingerprint row), public/sitemap.xml (<url> entry between /changelog/ and /sims/transit-sim-v6.html), wiki/02-pages.md (new /fingerprint/ section after /lab/simplex-noise/). Verify-claims 23/23 PASS, verify-colophon 7/7 PASS, contrast-cli 0 AA failures, git diff --check exit 0; 11/11 fingerprint local hrefs return 200 + FLOOR md5 = 9c1636c7 matches the table's FLOOR row. Rebase path: fresh p23/fingerprint-20260828 branch off current main af384fe (cycle-104 commit), single cycle-105 chrome commit 721f0cc, FF-merged → local main 6db2650; pushed origin/main af384fe..6db2650; ahead-behind 0/0. Production deploy: flock -n ~/AI/agents/.hermes/heavy-build.lock bash deploy.sh from /Users/johnwhitman/AI/hool.dev → Cloudflare Pages production at https://b53e5eee.hool-dev.pages.dev (5 files uploaded, 82 already uploaded, 1.00s); Guardian pre-deploy WARN (non-blocking — 9 ALLOW firewall_live on Car-Mart mentions unchanged from cycle-104) + post-deploy PASS (4 ALLOW firewall_live checks, 0 blocking findings). Apex cache-buster probe (10 iterations curl https://hool.dev/?z=N): 10/10 CLEAN — no stale residuals on the FLOOR; direct probes /fingerprint/ → 200, /fingerprint/index.json → 200. Advisory (not a lane defect, document-only): curl https://hool.dev/ returns a FLOOR page with the same content, structure, design, and intent as public/index.html (md5 9c1636c7b12c69f894c3bca70da89c3d), but with ~159 bytes of Cloudflare edge-injected email-decode wrappers (data-cfemail + cdn-cgi/scripts/cloudflare-static/email-decode.min.js on the two mailto:[email protected] occurrences); local file is unchanged from what I uploaded, edge transform outside lane control, FLOOR contract intact (content + structure + design + hashes all match upload); this is the documented CF auto-Email-Address-Obfuscation behavior, not a deploy action; verify-claims.sh measures the local working tree, not apex bytes, so the receipt is intact. Worktree at /Users/johnwhitman/AI/.worktrees/hool-p23-fingerprint-20260828 kept for parity; cycle-105 row appended to docs/ops/QUEUE.md; cycle-105 mirror row appended to ~/AI/agents/.hermes/profiles/hool/QUEUE.md; cycle-105 dated entry appended to wiki/JOURNAL.md. STRIKE taxonomy: 0. Net change this cycle per git diff --stat: 7 files / +732/-1 (public/fingerprint/index.html NEW 167 lines, public/fingerprint/index.json NEW 235 lines, scripts/gen-fingerprint.py NEW 292 lines, public/colophon/index.html +1/-1, public/llms.txt +1/-0, public/sitemap.xml +6/-0, wiki/02-pages.md +30/-0). FLOOR + FLOOR-snapshot + og/john.png BYTE-IDENTICAL to P22 + P18 + cycles 91-100-101-102-103-104. Lane-decideable count: STAGED 0 unchanged, PROPOSED 1 → 0 (P23 built and shipped directly from PROPOSED per protocol); John-gated unchanged at 2 (P16 palette + sibling cards; DM darkmode taste).
og:description corrected to add
"at America's Car-Mart; on his own time," separator; 200-word bio paragraph 1 swapped
AI-agent focus out of the employer sentence; 200-word bio paragraph 2 added explicit
"On his own time — separate from his employer" separator. Wired: sitemap.xml
(new entry, lastmod 2026-08-27T08:00+00:00), llms.txt (Surfaces table row +
Update cadence date), /about/ (companion link in the "if you're a human
reading this" paragraph), wiki/02-pages.md (new section). Verify-claims
23/23 PASS, verify-colophon 7/7 PASS, contrast-cli 0 AA failures, git diff --check exit
0; 11/11 press-kit local hrefs return 200; FLOOR md5 9c1636c7 byte-identical.
Rebase path: created fresh deploy/p13-press-kit-20260827 branch off
current main 1a718dc, applied P13's net diff (3 commits b061273 + e513c1b + 4c6de32)
as one consolidated 5-file patch instead of a 238-commit rebase storm. Lane-decideable
per RAT-12.
<updated> matches newest entry). Seven entries below catch the
missing streak.
a5 one-pager
with current facts and a real mailto: link.
a5_personal_brand_v0.1.html refreshed: head metadata, real
mailto:[email protected], body kept BYTE-IDENTICAL to canonical FLOOR
via new guard scripts/audit-a5-vs-index.sh. Quiet nav to /start,
/work, /about.
How this page works: verification entries are produced by an automated sweep the fleet runs against the live site — HTTP status on every surface and portfolio card, redirect traps on pages that must serve directly, and title assertions so a parked or hijacked domain can't pass as a healthy 200. Failures are published, not buried. The ledger is regenerated when the fleet ships; if the newest entry looks stale, that itself is a signal.