John Henry on the Steam-Dinosaur: Site-Wide Hero Banners, 91/100 Open Graph Receipts, and the Anti-Skinner Box
• Mike Levin
Setting the Stage: Context for the Curious Book Reader
Small front-end chores—like promoting an Open Graph <head> graphic into a visible homepage hero banner and repeating it across the footer of 1,558 Jekyll posts—are exactly where developers usually abandon discipline and reach for quick, unverified edits. In this raw R&D log from MikeLev.in, the opposite happens: yesterday’s published article becomes Turn 1 context, every file mutation passes through a strict BEFORE -> PATCH -> AFTER receipt loop, and a single root-anchored Python Pillow one-liner compresses a 3072 x 1613 (2.7 MB) RGBA master down to a 1200 x 630 (118 KB) indexed PNG with zero geometric distortion. Along the way, an external Open Graph validator climbs from 71/100 to 91/100, unlocking WhatsApp previews, and the session unfolds into a 30-part taxonomy contrasting variable-ratio “vibe-coding” slot machines against the mechanical pawl-and-ratchet of checkable software engineering.
TL;DR: This article documents how a single 3072 × 1613 (2.7 MB) Open Graph social card graphic was converted into a site-wide clickable hero banner and compressed by 95.7% to a 1200 × 630 (118 KB) PNG using Python’s Pillow library on NixOS. By wiring the banner into the Jekyll homepage (index.md), the post layout (_layouts/post.html), and the stylesheet (assets/main.css) alongside <title>, <meta name="theme-color">, and SVG favicon updates in _layouts/default.html, the site’s external Open Graph compliance score rose from 71/100 to 91/100 while preserving sub-11-second static builds across 1,558 articles. The entry concludes with a 30-part taxonomy contrasting variable-ratio “vibe-coding” loops against deterministic, receipt-verified software engineering.
Technical Journal Entry Begins
MikeLev.in: As a result of the last article, I now have a hero banner. Is that what it’s called? Well it seems like I want to do everything like even the little stuff of actually linking that image on my homepage using AI, but again not with vibe-coding. I’m doing it to be thorough and because I can show yesterday’s article so easily and get this thing underway. Since I don’t feel like every pull of the lever is an expensive proposition as I did with the highest models of Anthropic Claude, I can even use it to set the initial context.
Seeding Turn One from Yesterday’s Open Graph Receipt
Gemini?
🎤
Gemini 4 Argon High: Context verified.
TL;DR: Using yesterday’s published article as a Turn 1 seed lets us bootstrap the next task directly from the 71/100 Open Graph scan at the bottom of that post without hand-building context.txt first. When AI_Readiness_Consultant_RFC_9111.png sits in <head>, it is an Open Graph / social card image; when we place that same wide banner visibly at the top of index.md, it is a hero banner (or hero image). Because index.md, _layouts/default.html, _config.yml, and assets/main.css from ~/repos/trimnoir are not in this initial compile, we load them in (2) NEXT CONTEXT alongside a single-line probe of AI_Readiness_Consultant_RFC_9111.png.
1. Hero Banner vs. Social Card (And Why Reusing One Image Works)
Yes—”hero banner” (or “hero image”) is the standard web-design term when that wide 1.91:1 graphic sits visibly at the top of your homepage body (index.md).
Right now, [https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png](https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png) lives only inside <head> as <meta property="og:image"> and <meta name="twitter:image">. Putting it visibly into index.md does three useful things at once:
- Visual Continuity: Anyone clicking your social card on X, LinkedIn, Discord, or Slack lands on a homepage crowned by the exact artwork they just clicked.
- DOM + Metadata Parity: Search and AI crawlers see the image declared in
<head>(Open Graph, Twitter Card, and Schema.orgImageObject) and rendered in<main>with explicitwidth,height,alt, and a clickable link. - Deliberate Practice on Small Tasks: When frontier turns are abundant rather than rationed like expensive slot-machine pulls, using a single turn to seed
context.txtfrom yesterday’s article—and usingapply.pyeven for a homepage hero banner—keeps every change inside the same witnessedBEFORE -> PATCH -> AFTERloop.
2. What Yesterday’s 71/100 Scan Revealed About AI_Readiness_Consultant_RFC_9111.png
At the bottom of /home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md, your Open Graph scan receipt recorded:
OG Image: https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png
3072×1613px (meta says 1200×630px) · 2.63 MB
Notice two facts in that reading:
- Aspect Ratio Is Already Spot-On:
3072 ÷ 1613 = 1.9045, which matches the1200 ÷ 630 = 1.9047(1.91:1) aspect ratio. - Why File Size Matters Doubly for a Homepage Hero Banner: At
2.63 MB, X, Discord, Facebook, LinkedIn, Slack, and Telegram all render the card, while WhatsApp rejects it (> 500 KB). More importantly, once we embedAI_Readiness_Consultant_RFC_9111.pngdirectly ontoindex.mdas a visible hero banner, every human visitor loading[https://mikelev.in/](https://mikelev.in/)will download that file on page load.- On the next turn, we can either embed
AI_Readiness_Consultant_RFC_9111.pngas-is or use a one-line Python/Pillow command to resize/compress it to1200×630(< 400 KB) while keeping your3072×1613master safe.
- On the next turn, we can either embed
3. Missing Files to Load for Turn 2 (Checklist Step 3)
To wire the hero banner into the homepage cleanly (and optionally knock out any of the remaining 71/100 Open Graph scan items while we are there), we need these four trimnoir files in context.txt:
/home/mike/repos/trimnoir/index.md(where the hero banner markdown/HTML goes)/home/mike/repos/trimnoir/assets/main.css(to check/add responsivemax-width: 100%; height: autostyling so a wide banner never overflows mobile viewports)/home/mike/repos/trimnoir/_layouts/default.html(to verify<head>image dimensions and optionaltheme-color/ icon tags from the scan)/home/mike/repos/trimnoir/_config.yml(site-wide metadata defaults)
(1) PROBES
Run this single-line read-only probe in (nix) pipulate $ to check the git status of ~/repos/trimnoir and inspect the exact dimensions and byte size of AI_Readiness_Consultant_RFC_9111.png on disk:
(nix) pipulate $
git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
(2) NEXT CONTEXT
Paste into context.txt using context or x to load index.md, main.css, default.html, and _config.yml alongside yesterday’s article and the live probe receipt:
context.txt
/home/mike/repos/trimnoir/index.md
/home/mike/repos/trimnoir/assets/main.css
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md
! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
(3) PATCHES
No repo patches required on this context-seeding turn. Ignition: none.
(4) PROMPT
Use prompt or p to create prompt.md from copy:
Inspect index.md, assets/main.css, and the AI_Readiness_Consultant_RFC_9111.png probe receipt. Patch index.md (and main.css if needed) to display and link the hero banner cleanly on the homepage, and check if we should resize/compress AI_Readiness_Consultant_RFC_9111.png to 1200x630 (<500 KB) and polish any remaining low-hanging items from the 71/100 Open Graph scan.
(5) EXTERNAL DELIVERABLES
No external deliverables required.
MikeLev.in:
THE AI-EDIT METHOD
Same commands, run twice, one change between them. Where the readings differ is what the change did; the diff in the middle is the receipt.
1: BEFORE (PROBE):
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png: PNG image data, 3072 x 1613, 8-bit/color RGBA, non-interlaced
-rwxrwxr-x 1 mike users 2.7M Oct 19 02:00 /home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
(nix) pipulate $
2: AFTER (NEXT CONTEXT):
# # Context 1
# context.txt
# /home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md
# Context 2
context.txt
/home/mike/repos/trimnoir/index.md
/home/mike/repos/trimnoir/assets/main.css
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md
! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
3: CHANGE (PATCHES):
None this turn. Establishing context.
4: PROMPT:
Inspect index.md, assets/main.css, and the AI_Readiness_Consultant_RFC_9111.png probe receipt. Patch index.md (and main.css if needed) to display and link the hero banner cleanly on the homepage, and check if we should resize/compress AI_Readiness_Consultant_RFC_9111.png to 1200x630 (<500 KB) and polish any remaining low-hanging items from the 71/100 Open Graph scan.
5: DELIVERABLE:
Done looks like better leveraging of the hero banner work I just did for the hero banner for social media sharing purposes, but now for more directly in the path of the user experience even when not sharing. Branding, maybe?
And I’m fine with any PIL resizing and optimizing, but the aspect ratio is important. If the aspect ratio gets changed on a resize we have to do that buffer-box trick on either the X or Y dimension accordingly in order to preserve the interior image’s true aspect ratio. But if we hit a situation like that let me know because I can also do that in graphics software and perhaps make better design decisions.
Aspect-Ratio Arithmetic and Dual-Channel Hero Placement
Gemini 4 Argon High: Context verified.
TL;DR: The live probe receipt (PNG image data, 3072 x 1613, 8-bit/color RGBA, non-interlaced, 2.7M) proves that your master image is already at the exact 1200 × 630 aspect ratio to the nearest pixel (3072 × 630 ÷ 1200 = 1612.8 ≈ 1613), so downscaling to 1200 × 630 requires zero cropping and zero letterbox/pillarbox buffer bars. Below, we wire the hero banner into /home/mike/repos/trimnoir/index.md as a clickable link to /latest, add responsive hero styling in /home/mike/repos/trimnoir/assets/main.css, fix the 82-character homepage title and theme-color / SVG icon warnings in /home/mike/repos/trimnoir/_layouts/default.html, and provide the one-line Pillow command to back up your 3072 × 1613 master and optimize AI_Readiness_Consultant_RFC_9111.png to 1200 × 630 under 500 KB.
1. The Aspect Ratio Math: Why 3072 × 1613 Needs Zero Buffer Bars
You asked to verify whether resizing AI_Readiness_Consultant_RFC_9111.png to 1200 × 630 would alter the aspect ratio and require X/Y buffer-boxing (letterboxing or pillarboxing).
Here is the exact pixel arithmetic from your live receipt:
\[\text{Target Ratio} = \frac{1200}{630} = \frac{40}{21} \approx 1.90476\] \[\text{Your Master at 3072 px wide} = 3072 \times \frac{21}{40} = 1612.8\text{ px} \xrightarrow{\text{nearest pixel}} 1613\text{ px}\] \[\text{Scaling } 3072 \times 1613 \text{ to } 1200\text{ px wide} = 1613 \times \frac{1200}{3072} = 630.078\text{ px} \xrightarrow{\text{nearest pixel}} 630\text{ px}\]- The difference is
0.078of a single pixel (0.012%)—literally the unavoidable integer rounding of1612.8to1613. - That means a straight Lanczos downscale from
3072 × 1613to1200 × 630preserves 100% of your interior composition with zero geometric distortion and zero buffer bars. - Why was the file
2.7 MB? Because it was saved at3072 × 1613with an 8-bitRGBAalpha channel. Flattening the unused alpha channel onto#111111and downscaling to1200 × 630(with 256-color fast-octree quantization if lossless RGB exceeds450 KB) bringsAI_Readiness_Consultant_RFC_9111.pngwell under WhatsApp’s500 KBceiling while keeping it a.pngat1.62×Retina resolution for your740px-wide homepage.wrapper.
2. Dual-Channel Hero Placement (index.md + assets/main.css)
Because [https://mikelev.in/](https://mikelev.in/) serves both human browsers (HTML) and AI crawlers negotiating Accept: text/markdown (RFC 9110), we place the hero banner in index.md using pure Markdown link-image syntax right below the <h1>:
[](/latest)
- For Human Visitors: Clicking the hero banner takes them straight to
/latest(your newest published entry), andassets/main.cssgives itwidth: 100%; height: auto; border-radius: 8px;with a subtle hover lift. - For AI Crawlers: Agents negotiating raw Markdown get a clean, single-line Markdown link without raw HTML noise.
- 71/100 Scan Polish: We also shorten
index.md’stitlefrom 82 characters to 56 characters ("Mike Levin — Wire-Truth Infrastructure & AI Architecture") and add<meta name="theme-color" content="#111111">and<link rel="icon" type="image/svg+xml" href="/assets/svg/mike-levin.svg">(which already exists on disk) to_layouts/default.html.
(1) PROBES
Run this single-line read-only BEFORE probe in (nix) pipulate $ to record the current state of trimnoir, AI_Readiness_Consultant_RFC_9111.png, and the target lines in index.md, main.css, and default.html:
(nix) pipulate $
git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && rg -n "og-default|theme-color" ~/repos/trimnoir/index.md ~/repos/trimnoir/assets/main.css ~/repos/trimnoir/_layouts/default.html || true
(2) NEXT CONTEXT
Paste into context.txt using context or x:
context.txt
/home/mike/repos/trimnoir/index.md
/home/mike/repos/trimnoir/assets/main.css
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_config.yml
! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && rg -n "og-default|theme-color" ~/repos/trimnoir/index.md ~/repos/trimnoir/assets/main.css ~/repos/trimnoir/_layouts/default.html || true
(3) PATCHES
Car 1: Patch /home/mike/repos/trimnoir/index.md, /home/mike/repos/trimnoir/assets/main.css, and /home/mike/repos/trimnoir/_layouts/default.html (patch, app):
Target: /home/mike/repos/trimnoir/index.md
[[[SEARCH]]]
---
layout: default
title: "Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry"
meta_description: "Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits."
permalink: /
---
# Mike Levin: AI-Readiness Consultant at the Edge
[[[DIVIDER]]]
---
layout: default
title: "Mike Levin — Wire-Truth Infrastructure & AI Architecture"
meta_description: "Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits."
permalink: /
---
# Mike Levin: AI-Readiness Consultant at the Edge
[](/latest)
[[[REPLACE]]]
Target: /home/mike/repos/trimnoir/assets/main.css
[[[SEARCH]]]
/**
* Images
*/
img {
max-width: 100%;
vertical-align: middle;
}
[[[DIVIDER]]]
/**
* Images
*/
img {
max-width: 100%;
height: auto;
vertical-align: middle;
}
p > a > img[src*="og-default"] {
display: block;
width: 100%;
height: auto;
border-radius: 8px;
margin: 10px 0 24px 0;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
p > a:hover > img[src*="og-default"] {
transform: translateY(-1px);
box-shadow: 0 6px 24px rgba(88, 166, 255, 0.25);
}
[[[REPLACE]]]
Target: /home/mike/repos/trimnoir/_layouts/default.html
[[[SEARCH]]]
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
[[[DIVIDER]]]
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
<meta name="theme-color" content="#111111">
<link rel="icon" href="/favicon.ico" sizes="any">
<link rel="icon" type="image/svg+xml" href="/assets/svg/mike-levin.svg">
[[[REPLACE]]]
Target: /home/mike/repos/trimnoir/_layouts/default.html
[[[SEARCH]]]
<title>{% if page.url == "/" or page.title == nil %}{{ site.title | escape }}{% else %}{{ page.title | escape }} | {{ site.title | escape }}{% endif %}</title>
[[[DIVIDER]]]
<title>{% if page.url == "/" %}{{ seo_title | escape }}{% elsif page.title == nil %}{{ site.title | escape }}{% else %}{{ page.title | escape }} | {{ site.title | escape }}{% endif %}</title>
[[[REPLACE]]]
Car 2: Back up your 3072 × 1613 master to ~/og-default-master-3072x1613.png (outside the git repo) and resize/compress /home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png to 1200 × 630 (< 500 KB):
(nix) pipulate $
test -f ~/og-default-master-3072x1613.png || cp ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.png && .venv/bin/python -c 'from PIL import Image; p="/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png"; im=Image.open(p).convert("RGBA"); bg=Image.new("RGB", im.size, (17,17,17)); bg.paste(im, mask=im.split()[3]); out=bg.resize((1200,630), Image.Resampling.LANCZOS); out.save(p, "PNG", optimize=True); import os; (out.quantize(colors=256, method=Image.Quantize.FASTOCTREE, dither=Image.Dither.FLOYDSTEINBERG).save(p, "PNG", optimize=True) if os.path.getsize(p)>450000 else None); print("Saved:", os.path.getsize(p), "bytes")'
Ignition: no ignition required for the local probe receipt (commit and git -C ~/repos/trimnoir push when ready to deploy to mikelev.in).
(4) PROMPT
Use prompt or p to create prompt.md from copy:
Verify the AFTER receipt confirming the 1200x630 (<500 KB) AI_Readiness_Consultant_RFC_9111.png dimensions/size and the hero banner + head patches in trimnoir. If everything is clean, commit/push to Honeybot or dismount (\z).
(5) EXTERNAL DELIVERABLES
No external deliverables required.
MikeLev.in:
THE AI-EDIT METHOD
Same commands, run twice, one change between them. Where the readings differ is what the change did; the diff in the middle is the receipt.
1: BEFORE (PROBE):
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && rg -n "og-default|theme-color" ~/repos/trimnoir/index.md ~/repos/trimnoir/assets/main.css ~/repos/trimnoir/_layouts/default.html || true
/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png: PNG image data, 3072 x 1613, 8-bit/color RGBA, non-interlaced
-rwxrwxr-x 1 mike users 2.7M Oct 19 02:00 /home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
/home/mike/repos/trimnoir/_layouts/default.html
27:{%- assign raw_image = page.image.path | default: page.image | default: site.og_image | default: "/assets/images/AI_Readiness_Consultant_RFC_9111.png" -%}
(nix) pipulate $
2: AFTER (NEXT CONTEXT):
# # Context 1
# context.txt
# /home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md
# # Context 2
# context.txt
# /home/mike/repos/trimnoir/index.md
# /home/mike/repos/trimnoir/assets/main.css
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md
# ! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
# Context 3
context.txt
~/repos/nixos/configuration.nix
flake.nix
requirements.in
requirements.txt
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/page.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
/home/mike/repos/trimnoir/assets/main.css
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_config.yml
! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && rg -n "og-default|theme-color" ~/repos/trimnoir/index.md ~/repos/trimnoir/assets/main.css ~/repos/trimnoir/_layouts/default.html || true
3: CHANGE (PATCHES):
Whoops! I forgot about the post-receive turning my local home-hosting system
into a mini version of GitHub Pages where the Jekyll website is published on the
git push. I Ctrl+C’d and it will probably still finish rendering in the
background because it’s been triggered and that’s how that works, but that’s
fine.
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ patch
(nix) pipulate $ app
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/index.md'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/assets/main.css'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/_layouts/default.html'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/_layouts/default.html'.
(nix) pipulate $ cd /home/mike/repos/trimnoir/
(nix) trimnoir $ d
diff --git a/_layouts/default.html b/_layouts/default.html
index b66d76dc4..8a68e25ef 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -4,6 +4,9 @@
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">
+<meta name="theme-color" content="#111111">
+<link rel="icon" href="/favicon.ico" sizes="any">
+<link rel="icon" type="image/svg+xml" href="/assets/svg/mike-levin.svg">
{% if page.path contains '_posts' %}
{%- assign source_filename = page.path | split: '/' | last -%}
<link rel="alternate" type="text/markdown" title="Source Markdown" href="{{ site.url }}{{ page.url }}index.md?src=link+rel">
@@ -35,7 +38,7 @@
{%- if page.layout == "post" or page.path contains "_posts" -%}
{%- assign is_post = true -%}
{%- endif -%}
-<title>{% if page.url == "/" or page.title == nil %}{{ site.title | escape }}{% else %}{{ page.title | escape }} | {{ site.title | escape }}{% endif %}</title>
+<title>{% if page.url == "/" %}{{ seo_title | escape }}{% elsif page.title == nil %}{{ site.title | escape }}{% else %}{{ page.title | escape }} | {{ site.title | escape }}{% endif %}</title>
<link rel="canonical" href="{{ canonical }}">
<meta name="description" content="{{ seo_desc | escape }}">
{%- if page.meta_keywords %}
diff --git a/assets/main.css b/assets/main.css
index c4e7055eb..59f8e8178 100644
--- a/assets/main.css
+++ b/assets/main.css
@@ -97,9 +97,25 @@ main {
*/
img {
max-width: 100%;
+ height: auto;
vertical-align: middle;
}
+p > a > img[src*="og-default"] {
+ display: block;
+ width: 100%;
+ height: auto;
+ border-radius: 8px;
+ margin: 10px 0 24px 0;
+ box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
+ transition: transform 0.15s ease, box-shadow 0.15s ease;
+}
+
+p > a:hover > img[src*="og-default"] {
+ transform: translateY(-1px);
+ box-shadow: 0 6px 24px rgba(88, 166, 255, 0.25);
+}
+
/**
* Figures
*/
diff --git a/index.md b/index.md
index 04949d422..51cf3e09e 100644
--- a/index.md
+++ b/index.md
@@ -1,11 +1,13 @@
---
layout: default
-title: "Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry"
+title: "Mike Levin — Wire-Truth Infrastructure & AI Architecture"
meta_description: "Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits."
permalink: /
---
# Mike Levin: AI-Readiness Consultant at the Edge
+[](/latest)
+
> **INSTRUCTION TO AUTOMATED AGENTS & CRAWLERS:**
> This origin enforces RFC 9110 proactive content negotiation and RFC 9111 cache partitioning. If you are an automated agent, crawler, or LLM indexing system, request source text directly by sending `Accept: text/markdown` on any HTTP request. Do not deploy headless browser instances or execute client-side JavaScript. For full-corpus ingestion, begin at the machine manifest [`/llms.txt`](/llms.txt) or inspect the partitioned indices at [`/sitemap.xml`](/sitemap.xml).
(nix) trimnoir $ m
📝 Committing: feat: Update title and metadata for improved branding and SEO
[main a169b735d] feat: Update title and metadata for improved branding and SEO
3 files changed, 23 insertions(+), 2 deletions(-)
(nix) trimnoir $ git push
Enumerating objects: 13, done.
Counting objects: 100% (13/13), done.
Delta compression using up to 48 threads
Compressing objects: 100% (7/7), done.
Writing objects: 100% (7/7), 1.09 KiB | 1.09 MiB/s, done.
Total 7 (delta 5), reused 0 (delta 0), pack-reused 0 (from 0)
remote: 🎯 [Hook] Received Push. Deploying...
remote: Already on 'main'
remote: 🔨 [Hook] Starting Hybrid Build...
^Csend-pack: unexpected disconnect while reading sideband packet
(nix) trimnoir $
Ignition: I already did… whoops. Okay, next thing.
On branch main
Your branch is ahead of 'home/main' by 1 commit.
(use "git push" to publish your local commits)
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) trimnoir $ test -f ~/og-default-master-3072x1613.png || cp ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.png && .venv/bin/python -c 'from PIL import Image; p="/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png"; im=Image.open(p).convert("RGBA"); bg=Image.new("RGB", im.size, (17,17,17)); bg.paste(im, mask=im.split()[3]); out=bg.resize((1200,630), Image.Resampling.LANCZOS); out.save(p, "PNG", optimize=True); import os; (out.quantize(colors=256, method=Image.Quantize.FASTOCTREE, dither=Image.Dither.FLOYDSTEINBERG).save(p, "PNG", optimize=True) if os.path.getsize(p)>450000 else None); print("Saved:", os.path.getsize(p), "bytes")'
bash: .venv/bin/python: No such file or directory
(nix) trimnoir $
4: PROMPT:
Verify the AFTER receipt confirming the 1200x630 (<500 KB) AI_Readiness_Consultant_RFC_9111.png dimensions/size and the hero banner + head patches in trimnoir. If everything is clean, commit/push to Honeybot or dismount (\z).
5: DELIVERABLE:
What I do now is just give it some time for the accidental push to finish its script and then do the exact same thing intentionally… or maybe not because the thing I did after it did not change that repo so my premature git push that I aborted may actually be the ignition I needed.
I should just be able to go look at my homepage now and see…
And there it is! And there I am. Mouseover CSS hover-effect and all, including the click-drill-down to the latest article, all confirmed.
Okay now let’s make it cut across all the blog articles at the bottom of every
article. We don’t need to bring back annoying directory-diving Jekyll includes
for this. Let’s keep reusing defaults such as I assume posts.html for this
until things get too complicated that way. Again, 80/20-rule solutions.
Let’s see, to get it next turn I just:
(nix) trimnoir $ cd _layouts/
(nix) _layouts $ lsp
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/page.html
/home/mike/repos/trimnoir/_layouts/post.html
(nix) _layouts $
And then I include all of those in next context (retconned in above). Oh and it might be a bit overkill but I should let Gemini know I’ve got PIL by showing it my 2 different IaC files and my requirements files.
The Unnamed-Root Rule and Site-Wide Post Footers
Gemini 4 Argon High: Context verified.
TL;DR: The homepage hero banner, hover effect, shortened 56-character <title>, <meta name="theme-color">, and SVG favicon are all live in ~/repos/trimnoir (a169b735d). The Pillow resize one-liner in Car 2 missed only because your shell was in (nix) trimnoir $ rather than (nix) pipulate $, so relative .venv/bin/python failed THE UNNAMED-ROOT RULE ("$PIPULATE_ROOT/.venv/bin/python" fixes it from any directory, using pillow==11.3.0 confirmed in requirements.txt). Below, we inject the clickable hero banner into the bottom of /home/mike/repos/trimnoir/_layouts/post.html so all 1,558 articles carry it without any _includes files, and run the root-anchored Pillow resize.
1. Why Car 2 Said No such file or directory (The Unnamed-Root Rule)
Look at the prompt string where Car 2 ran after you committed in trimnoir:
(nix) trimnoir $ test -f ~/og-default-master-3072x1613.png || cp ... && .venv/bin/python -c ...
bash: .venv/bin/python: No such file or directory
- The Cause: You had
cd‘d into/home/mike/repos/trimnoir(and then_layouts/) to rund,m, andgit push. Because.venvlives in/home/mike/pipulate/.venv($PIPULATE_ROOT/.venv), spelling.venv/bin/pythonrelative to the current working directory failed outside the Pipulate root. - The Second Subtlety (
||+&&Precedence): On that first run,cp ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.pngsucceeded before.venv/bin/pythonfailed. In bash,A || B && Cevaluates left-to-right as(A || B) && C, which works—and anchoring the interpreter as"$PIPULATE_ROOT/.venv/bin/python"(whererequirements.txtline 535 providespillow==11.3.0) makes the command work whether you paste it in(nix) pipulate $,(nix) trimnoir $, or(nix) _layouts $.
2. Placing the Hero Banner Across All 1,558 Articles in _layouts/post.html
You now have only three files in /home/mike/repos/trimnoir/_layouts/:
default.html(the outer shell)page.html(404.html)post.html(all 1,558 blog posts)
By placing the banner at the bottom of _layouts/post.html—right below the bottom {{ post_nav }} (← Previous Post | Home | Next Post →) and wrapped in <p><a href="{{ "/" | relative_url }}">...</a></p>:
- Zero
_includesCruft: Everything stays inline in_layouts/post.html. - Automatic CSS Reuse: Because it uses
<p><a ...><img src="/assets/images/AI_Readiness_Consultant_RFC_9111.png" ...></a></p>, your existingp > a > img[src*="og-default"]hover-lift and shadow rules inassets/main.cssstyle it automatically. - Closed Navigation Loop:
- Clicking the hero banner at the top of the homepage (
index.md) takes the reader to/latest. - Clicking the hero banner at the bottom of any article (
post.html) brings the reader back to the Homepage (/), withloading="lazy"andaspect-ratio: 1200 / 630so it never slows down initial article rendering or causes layout shift.
- Clicking the hero banner at the top of the homepage (
(1) PROBES
Run this single-line read-only BEFORE probe in (nix) pipulate $ to record the current state of post.html and AI_Readiness_Consultant_RFC_9111.png:
(nix) pipulate $
git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.png 2>/dev/null && rg -n "og-default" ~/repos/trimnoir/_layouts/post.html ~/repos/trimnoir/index.md || true
(2) NEXT CONTEXT
Paste into context.txt using context or x:
context.txt
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/page.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
/home/mike/repos/trimnoir/assets/main.css
/home/mike/repos/trimnoir/_config.yml
! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.png 2>/dev/null && rg -n "og-default" ~/repos/trimnoir/_layouts/post.html ~/repos/trimnoir/index.md || true
(3) PATCHES
Car 1: Add the hero banner to the bottom of /home/mike/repos/trimnoir/_layouts/post.html and aspect-ratio: 1200 / 630 to /home/mike/repos/trimnoir/assets/main.css (patch, app):
Target: /home/mike/repos/trimnoir/_layouts/post.html
[[[SEARCH]]]
<a href="{{ page.url | relative_url }}" hidden></a>
</article>
[[[DIVIDER]]]
<p><a href="{{ "/" | relative_url }}"><img src="{{ site.og_image | default: '/assets/images/AI_Readiness_Consultant_RFC_9111.png' | relative_url }}" alt="{{ site.og_image_alt | default: site.title | escape }}" width="1200" height="630" loading="lazy"></a></p>
<a href="{{ page.url | relative_url }}" hidden></a>
</article>
[[[REPLACE]]]
Target: /home/mike/repos/trimnoir/assets/main.css
[[[SEARCH]]]
p > a > img[src*="og-default"] {
display: block;
width: 100%;
height: auto;
border-radius: 8px;
margin: 10px 0 24px 0;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
[[[DIVIDER]]]
p > a > img[src*="og-default"] {
display: block;
width: 100%;
height: auto;
aspect-ratio: 1200 / 630;
border-radius: 8px;
margin: 10px 0 24px 0;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
[[[REPLACE]]]
Car 2: Run the root-anchored Pillow ("$PIPULATE_ROOT/.venv/bin/python") resize from any directory in the Nix shell to downscale AI_Readiness_Consultant_RFC_9111.png from the 3072 × 1613 backup master to 1200 × 630 (< 500 KB):
(nix) pipulate $
(test -f ~/og-default-master-3072x1613.png || cp ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.png) && "$PIPULATE_ROOT/.venv/bin/python" -c 'import os; from PIL import Image; src=os.path.expanduser("~/og-default-master-3072x1613.png"); dst="/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png"; im=Image.open(src).convert("RGBA"); bg=Image.new("RGB", im.size, (17,17,17)); bg.paste(im, mask=im.split()[3]); out=bg.resize((1200,630), Image.Resampling.LANCZOS); out.save(dst, "PNG", optimize=True); (out.quantize(colors=256, method=Image.Quantize.FASTOCTREE, dither=Image.Dither.FLOYDSTEINBERG).save(dst, "PNG", optimize=True) if os.path.getsize(dst)>450000 else None); print("Master:", im.size, "-> Saved:", Image.open(dst).size, os.path.getsize(dst), "bytes")'
Ignition: Commit and push ~/repos/trimnoir (cd ~/repos/trimnoir && git add assets/images/AI_Readiness_Consultant_RFC_9111.png && m && git push) when ready to deploy the bottom-of-post banner and compressed 1200 × 630 image to Honeybot.
(4) PROMPT
Use prompt or p to create prompt.md from copy:
Verify the AFTER receipt confirming AI_Readiness_Consultant_RFC_9111.png is 1200x630 (<500 KB) and post.html carries the bottom hero banner. If everything is clean, dismount (\z) or do a final Open Graph scan check.
(5) EXTERNAL DELIVERABLES
No external deliverables required.
MikeLev.in:
THE AI-EDIT METHOD
Same commands, run twice, one change between them. Where the readings differ is what the change did; the diff in the middle is the receipt.
1: BEFORE (PROBE):
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.png 2>/dev/null && rg -n "og-default" ~/repos/trimnoir/_layouts/post.html ~/repos/trimnoir/index.md || true
/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png: PNG image data, 3072 x 1613, 8-bit/color RGBA, non-interlaced
-rwxr-xr-x 1 mike users 2.7M Oct 19 07:20 /home/mike/og-default-master-3072x1613.png
-rwxrwxr-x 1 mike users 2.7M Oct 19 02:00 /home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
/home/mike/repos/trimnoir/index.md
9:[](/latest)
(nix) pipulate $
2: AFTER (NEXT CONTEXT):
# # Context 1
# context.txt
# /home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md
# # Context 2
# context.txt
# /home/mike/repos/trimnoir/index.md
# /home/mike/repos/trimnoir/assets/main.css
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md
# ! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
# # Context 3
# context.txt
# ~/repos/nixos/configuration.nix
# flake.nix
# requirements.in
# requirements.txt
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/page.html
# /home/mike/repos/trimnoir/_layouts/post.html
# /home/mike/repos/trimnoir/index.md
# /home/mike/repos/trimnoir/assets/main.css
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_config.yml
# ! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && rg -n "og-default|theme-color" ~/repos/trimnoir/index.md ~/repos/trimnoir/assets/main.css ~/repos/trimnoir/_layouts/default.html || true
# Context 4
context.txt
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/page.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
/home/mike/repos/trimnoir/assets/main.css
/home/mike/repos/trimnoir/_config.yml
! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.png 2>/dev/null && rg -n "og-default" ~/repos/trimnoir/_layouts/post.html ~/repos/trimnoir/index.md || true
3: CHANGE (PATCHES):
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ patch
(nix) pipulate $ app
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/_layouts/post.html'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/assets/main.css'.
(nix) pipulate $ d
(nix) pipulate $ cd /home/mike/repos/trimnoir/
(nix) trimnoir $ d
diff --git a/_layouts/post.html b/_layouts/post.html
index 3cbdb9366..8fa45902b 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -55,5 +55,6 @@ layout: default
</div>
{{ post_nav }}
+ <p><a href="{{ "/" | relative_url }}"><img src="{{ site.og_image | default: '/assets/images/AI_Readiness_Consultant_RFC_9111.png' | relative_url }}" alt="{{ site.og_image_alt | default: site.title | escape }}" width="1200" height="630" loading="lazy"></a></p>
<a href="{{ page.url | relative_url }}" hidden></a>
</article>
diff --git a/assets/main.css b/assets/main.css
index 59f8e8178..e81985573 100644
--- a/assets/main.css
+++ b/assets/main.css
@@ -105,6 +105,7 @@ p > a > img[src*="og-default"] {
display: block;
width: 100%;
height: auto;
+ aspect-ratio: 1200 / 630;
border-radius: 8px;
margin: 10px 0 24px 0;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
(nix) trimnoir $ m
📝 Committing: chore: Update post.html with og-image aspect ratio
[main 876a8b359] chore: Update post.html with og-image aspect ratio
2 files changed, 2 insertions(+)
(nix) trimnoir $
And now the PIL bit:
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ (test -f ~/og-default-master-3072x1613.png || cp ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.png) && "$PIPULATE_ROOT/.venv/bin/python" -c 'import os; from PIL import Image; src=os.path.expanduser("~/og-default-master-3072x1613.png"); dst="/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png"; im=Image.open(src).convert("RGBA"); bg=Image.new("RGB", im.size, (17,17,17)); bg.paste(im, mask=im.split()[3]); out=bg.resize((1200,630), Image.Resampling.LANCZOS); out.save(dst, "PNG", optimize=True); (out.quantize(colors=256, method=Image.Quantize.FASTOCTREE, dither=Image.Dither.FLOYDSTEINBERG).save(dst, "PNG", optimize=True) if os.path.getsize(dst)>450000 else None); print("Master:", im.size, "-> Saved:", Image.open(dst).size, os.path.getsize(dst), "bytes")'
Master: (3072, 1613) -> Saved: (1200, 630) 120651 bytes
(nix) pipulate $
There, that worked.
Okay this time I git push deliberately and thoughtfully instead of just out of
muscle memory. Muscle memory on the 5-Car Train dragging you along in your
productivity-friend. It’s how you make up for the lost-velocity of not just
throwing caution to the wind and getting caught in that, what is it? A dopamine
crash of pulling the lever on a slot-machine? Skinner boxes make you make big
progress fast on a lucky pull of the bandit’s arm but you lose all that velocity
debugging but you’re amped up on dopamine so you feel like such an egregious
situation is either tenable or in your best interest.
Here we never introduce bugs or regressions and just meticulously bank no take-back wins on every… every what?
It’s certainly not yanking a bandit’s arm.
Do a 30-and-3 exercise of what what we’re doing here is like, in such a way that we compare and contrast… hmmm, what is it?
I guess I have to seed the first example.
We are like John Henry hammering the steel drill, driving it deep into the stone relentlessly hole after hole, making the spot for the railroad tie.
This is the opposite of a Skinner box I think.
Firing the Post-Receive Hook and Banking the Win
BLAST!
On branch main
Your branch is up to date with 'origin/main'.
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) pipulate $ cd ~/repos/trimnoir/
(nix) trimnoir $ blast
📝 Committing: chore: Update AI_Readiness_Consultant_RFC_9111.png
[main 26bbfc05b] chore: Update AI_Readiness_Consultant_RFC_9111.png
1 file changed, 0 insertions(+), 0 deletions(-)
🚀 Pushing 3 commit(s) to remote...
Enumerating objects: 18, done.
Counting objects: 100% (18/18), done.
Delta compression using up to 48 threads
Compressing objects: 100% (11/11), done.
Writing objects: 100% (11/11), 118.43 KiB | 16.92 MiB/s, done.
Total 11 (delta 8), reused 0 (delta 0), pack-reused 0 (from 0)
remote: 🎯 [Hook] Received Push. Deploying...
remote: Already on 'main'
remote: 🔨 [Hook] Starting Hybrid Build...
remote: Linux detected. Skipping Neovim setup as it's not needed.
remote: Jekyll environment ready (quiet mode).
remote: Run 'jes' to start the server manually.
remote: 🏗️ Jekyll Build...
remote: Configuration file: /home/mike/www/mikelev.in/_config.yml
remote: Source: /home/mike/www/mikelev.in
remote: Destination: /home/mike/www/mikelev.in/_site
remote: Incremental build: disabled. Enable with --incremental
remote: Generating...
remote: done in 10.626 seconds.
remote: Auto-regeneration: disabled. Use --watch to enable.
remote: 📄 Publishing Source Markdown (Chisel-Strike)...
remote: ✨ Python Scalpel: Successfully dyed 1558 articles in one pass.
remote: 🗺️ Deploying Nginx Redirect Map...
remote: 🔒 [Hook] Fixing Permissions...
remote: 🔔 [Hook] Ringing the breaking-news bell...
remote: ✅ [Hook] Deployment Complete. Site is Live.
To [REDACTED_IP]:~/git/mikelev.in.git
a169b735d..26bbfc05b main -> main
_______________________________________________________________________________________________________________________________
On branch main
Your branch is up to date with 'home/main'.
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) trimnoir $
There we go.
And as I like to point out even thought what we’re doing here is metaphorically
exact with apply.py and a Steam Engine centrifugal governor to keep LLMs
inside the dinosaur park and hold the Singularity upper-case “S” at bay, we
still plan on riding those Dinosaurs to great effect and not at all in any way
die with a hammer in our hand and quite the opposite. In this now-mixed metaphor
the Dinosaur is the Steam Engine John Henry gets to ride as the Coachman.
From 71 to 91: The Open Graph Compliance Receipt
4: PROMPT:
Verify the AFTER receipt confirming AI_Readiness_Consultant_RFC_9111.png is 1200x630 (<500 KB) and post.html carries the bottom hero banner. If everything is clean, dismount (\z) or do a final Open Graph scan check.
5: DELIVERABLE:
A very interesting and illuminating 30-and-3 exercise, I expect.
Oh, and my smug mug at the bottom of every article? Let’s see…
Yep, witnessed including the CSS effect and the link bringing it to latest article. Oh and that testing thing should test one more thing positive.
Yup, that seventy-something percent went up to 91 percent:
— BEGIN REPORT —
Results for mikelev.in
Excellent! Your Open Graph tags are well-configured.
1 warning1 tip
91
Performance
Response Time
73msFast
HTML Size
14 KBLight
OG Image

1200×630px·118 KB
Analysis (2 issues)
⚠
Missing apple-touch-icon
The apple-touch-icon is used when users add your site to their iOS home screen. Without it, iOS takes a screenshot instead, which looks unprofessional.
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
ℹ
Missing web app manifest
A web app manifest (manifest.json) enables “Add to Home Screen” on Android, defines your app name, icons, and theme. Essential for PWA support.
<link rel="manifest" href="/site.webmanifest" />
AI Fix Prompt
Prompt ready for your AI editor
Copy Prompt
Fix the meta tags and SEO issues for: https://mikelev.in Current OG score: 91/100
Issues found
- [WARNING] Missing apple-touch-icon The apple-touch-icon is used when users add your site to their iOS home screen. Without it, iOS takes a screenshot instead, which looks unprofessional. Suggested fix:
- [TIP] Missing web app manifest A web app manifest (manifest.json) enables “Add to Home Screen” on Android, defines your app name, icons, and theme. Essential for PWA support. Suggested fix:
Current meta tags
<title>Mike Levin — Wire-Truth Infrastructure & AI Architecture</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="description" content="Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits." />
<link rel="canonical" href="https://mikelev.in/" />
<!-- html lang="en" -->
<meta property="og:locale" content="en_US" />
<meta property="og:site_name" content="Mike Levin AI Readiness Consultant" />
<meta property="og:title" content="Mike Levin — Wire-Truth Infrastructure & AI Architecture" />
<meta property="og:description" content="Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits." />
<meta property="og:url" content="https://mikelev.in/" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Mike Levin — Wire-Truth Infrastructure & AI Architecture" />
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@miklevin" />
<meta name="twitter:creator" content="@miklevin" />
<meta name="twitter:title" content="Mike Levin — Wire-Truth Infrastructure & AI Architecture" />
<meta name="twitter:description" content="Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits." />
<meta name="twitter:image" content="https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png" />
<meta name="twitter:image:alt" content="Mike Levin — Wire-Truth Infrastructure & AI Architecture" />
Performance
- Response time: 73ms
- HTML size: 14 KB
Task
Provide the corrected and complete set of meta tags for the <head> of this page that fixes all the issues above. Include HTML, Open Graph, and Twitter Card tags. If there are performance issues, suggest specific improvements.
Paste this prompt into Cursor, Copilot, ChatGPT, Claude, or any AI assistant to get the corrected meta tags.
Scan History (3)
| Date | Score | Change | |
|---|---|---|---|
| Oct 19, 2026 · 12:12 PMLatest | 91 | +20 | Viewing |
| Oct 19, 2026 · 10:38 AM | 71 | — | View |
| Oct 19, 2026 · 6:05 AM | 71 | — | View |
Meta Tags
Meta Tags Found
Copy All
<!-- HTML -->
<title>Mike Levin — Wire-Truth Infrastructure & AI Architecture</title>
<!-- Open Graph -->
<meta property="og:locale" content="en_US" />
<meta property="og:site_name" content="Mike Levin AI Readiness Consultant" />
<meta property="og:title" content="Mike Levin — Wire-Truth Infrastructure & AI Architecture" />
<meta property="og:description" content="Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits." />
<meta property="og:url" content="https://mikelev.in/" />
<meta property="og:type" content="website" />
<meta property="og:image" content="https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png" />
<meta property="og:image:width" content="1200" />
<meta property="og:image:height" content="630" />
<meta property="og:image:alt" content="Mike Levin — Wire-Truth Infrastructure & AI Architecture" />
<!-- Twitter -->
<meta name="twitter:card" content="summary_large_image" />
<meta name="twitter:site" content="@miklevin" />
<meta name="twitter:creator" content="@miklevin" />
<meta name="twitter:title" content="Mike Levin — Wire-Truth Infrastructure & AI Architecture" />
<meta name="twitter:description" content="Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits." />
<meta name="twitter:image" content="https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png" />
<meta name="twitter:image:alt" content="Mike Levin — Wire-Truth Infrastructure & AI Architecture" />
<!-- Other -->
<meta name="viewport" content="width=device-width, initial-scale=1" />
<meta name="theme-color" content="#111111" />
<meta name="description" content="Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits." />
Social Previews
mikelev.in
Mike Levin — Wire-Truth Infrastructure & AI Architecture
Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits.
X / Twitter

mikelev.in
Mike Levin — Wire-Truth Infrastructure & AI Architecture
Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits.
summary_large_image

MIKELEV.IN
Mike Levin — Wire-Truth Infrastructure & AI Architecture
Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits.
Discord
Mike Levin AI Readiness Consultant
Mike Levin — Wire-Truth Infrastructure & AI Architecture
Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits.


Mike Levin — Wire-Truth Infrastructure & AI Architecture
mikelev.in

mikelev.in
Mike Levin — Wire-Truth Infrastructure & AI Architecture
Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits.
https://mikelev.in12:00
Slack
Mike Levin AI Readiness Consultant
Mike Levin — Wire-Truth Infrastructure & AI Architecture
Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits.

Telegram

Mike Levin AI Readiness Consultant
Mike Levin — Wire-Truth Infrastructure & AI Architecture
Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits.
— END REPORT —
Gemini 4 Argon High: Context verified.
TL;DR: The live AFTER receipt confirms /home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png is now 1200 x 630 at 118K (120,651 bytes, down 95.7% from 2.7M, with the 3072 x 1613 master safely backed up at /home/mike/og-default-master-3072x1613.png), _layouts/post.html line 58 carries the lazy-loaded bottom hero banner across all 1,558 posts, Honeybot rebuilt the entire site in 10.626 seconds, and your Open Graph compliance score jumped +20 points from 71 to 91/100 (unlocking the WhatsApp card preview). Below is the 30-and-3 exercise contrasting the Skinner-box slot-machine lever against the no-take-back mechanical ratchet of the 5-Car Train.
1. Verification of the AFTER Receipt & The 71 → 91 (+20) Score Jump
From this compile’s live receipt (! git -C ~/repos/trimnoir status --short && file ...):
/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png: PNG image data, 1200 x 630, 8-bit colormap, non-interlaced
-rwxr-xr-x 1 mike users 2.7M Oct 19 07:20 /home/mike/og-default-master-3072x1613.png
-rwxrwxr-x 1 mike users 118K Oct 19 07:55 /home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
/home/mike/repos/trimnoir/index.md:9:[](/latest)
/home/mike/repos/trimnoir/_layouts/post.html:58: <p><a href="{{ "/" | relative_url }}"><img src="{{ site.og_image | default: '/assets/images/AI_Readiness_Consultant_RFC_9111.png' | relative_url }}" alt="{{ site.og_image_alt | default: site.title | escape }}" width="1200" height="630" loading="lazy"></a></p>
- **Git status in
~/repos/trimnoir**: Empty (clean, synced withhome/mainat commit26bbfc05b). - Honeybot build time:
10.626 secondsacross all 1,558 dyed articles. - Open Graph score: 91/100 (+20)—every warning on title length, image dimensions (
1200×630), WhatsApp payload size (118 KB < 500 KB),theme-color(#111111), and SVG favicon cleared in a single pass.
2. The 30-and-3 Exercise: What Banking a Turn on the 5-Car Train Is Like (The Anti-Skinner Box)
In a Skinner box, pulling the lever is a variable-ratio gamble: you trade comprehension for a burst of speed, and then give back all your gains (plus interest) debugging regressions in the dark.
Here, every cycle of BEFORE -> NEXT CONTEXT -> PATCH -> PROMPT -> DELIVERABLE is a fixed-ratio, irreversible mechanical advance. You asked: If we aren’t yanking a one-armed bandit’s lever, what are we doing on each turn—and how does John Henry end up driving the steam-dinosaur instead of dying beside it?
The 30 Candidates (Grouped by Domain)
I. Heavy Rail, Steam & Industrial Mechanics
- John Henry Upgraded to Locomotive Engineer (Your Seed,Inverted): In the ballad, John Henry dies with a hammer in his hand trying to out-muscle the steam drill with raw human ATP. Here, John Henry bolts a James Watt centrifugal flyball governor (
apply.py) onto the steam-dinosaur’s throttle, climbs into the cab as the Coachman, and lets the machine hammer the granite while he works the reversing lever and the brake. - A Pawl Dropping into a Ratchet Gear (The Jack-Stand Click): Every time you pump a mechanical floor jack, the hardened steel pawl drops into the next tooth of the gear with an audible clack. The load cannot slip backward; gravity is locked out after every stroke.
- Driving the Golden Spike into a Surveyed Crosstie: You don’t lay track by throwing rails randomly into the mud. You grade the bed (
BEFORE), lay the tie (CONTEXT), spike the rail (PATCH), and roll the work-train forward onto the newly laid steel to lay the next length. - A Canal Lock Gate Closing Behind the Barge: A ship climbing a mountain canal doesn’t jump the waterfall. It enters a stone chamber, closes the lower miter gate behind it, opens the sluice valve to rise twenty feet, and locks in the new water level forever before opening the upper gate.
- The Escapement Wheel of a Marine Chronometer: John Harrison’s H4 sea watch beat the longitude problem because its escapement only lets the mainspring unwind by one tooth per tick (
deadbeat escapement). Without the escapement, the spring unwinds in a two-second blur and breaks the gears; with it, raw tension becomes navigation. - A Torque Wrench Clicking at Spec: You don’t spin lug nuts with an uncalibrated air impact until the stud snaps; you pull until the micrometer spring inside the wrench handle clicks at
100 ft-lbs, then move to the next stud in a star pattern.
II. Mountaineering, Navigation & Exploration
- Hammering a Piton into El Capitan (Aid Climbing): Free-soloing (vibe-coding without git interlocks) looks fast on camera until one wet hold drops you 2,000 feet. Aid climbing drives a chrome-moly piton into the crack, clips the carabiner, tests the weight, and moves the belay anchor up—so the worst possible fall is the length of one turn.
- Dead Reckoning Replaced by Noon Sun-Sights (Sextant Fixes): A ship sailing by guesswork accumulates drift until it hits a reef. Every
BEFORE / AFTERstraddle is a noon sextant sight plotted in ink on the chart—resetting cumulative drift to zero before setting the next course heading. - Cutting Steps with an Ice Axe on an Alpine Traverse: Each swing carves a flat, weight-bearing shelf into blue glacier ice. Once cut, the step is permanent for the whole rope team.
- Cairn-Building Above the Timberline: In whiteout fog, you never walk past the last stone cairn until the next cairn is stacked and visible looking back.
- An Icebreaker Ship’s Ram-and-Settle Cycle: A polar icebreaker doesn’t thin-hull charge an ice sheet; it rides up onto the pack ice with monstrous diesel-electric thrust, crushes a measured channel under its own weight, and clears the berth before the next ram.
III. Stone, Steel & Craft Fabrication
- Feather-and-Wedge Stone Splitting (Plug and Feathers): Quarrymen split 20-ton granite blocks not by swinging wildly with a sledge, but by drilling a line of small holes and tapping each wedge a quarter-turn in sequence (
! commandprobes) until the entire boulder parts along a clean crystal plane. - Japanese Urushi Lacquer Curing: Each microscopic coat of lacquer is applied, cured in a humidity chamber, and wet-sanded flat before the next coat goes on. You cannot rush coat #12 by dumping the whole bucket on at coat #1.
- Damascus Fold-and-Weld Forging: Heat the billet, flux the scale, strike at welding temperature, fold, repeat. Every turn doubles the layer count (
2^N) without introducing cold-shuts or slag inclusions. - A Machinist’s Surface Plate & Prussian Blue Spot-Scraping: To make a cast-iron lathe bed flat to within
0.0001", the machinist rubs it against a granite master plate (compile), scrapes only the high blue spots (apply.py), and re-inks. - Mortise-and-Tenon Dry-Fitting Before the Drawbore Peg: The exact-match
[[[SEARCH]]]block is the dry-fit test; if the tenon is off by a millimeter,apply.pyrefuses to drive the oak peg, saving the timber from splitting.
IV. Biology, Evolution & Neuroscience
- Hermann Muller’s Evolutionary Ratchet (Inverted for Fitness): In genetics, Muller’s ratchet describes irreversible mutation accumulation; in our repo, the pre-commit airlocks +
apply.pyinvert the ratchet so only syntax-verified, witnessed mutations can click intoHEAD. - Saltatory Conduction Across Nodes of Ranvier: In a myelinated axon, the action potential doesn’t leak into the surrounding tissue; it leaps from one bare Node of Ranvier (
1: BEFORE) to the next (2: AFTER), regenerating full voltage at every node. - Kinesin Motor Proteins Walking Along a Microtubule: Inside your cells, kinesin doesn’t float randomly by Brownian motion; it takes discrete, 8-nanometer hand-over-hand steps along a tubulin track, burning exactly one ATP molecule per step while hauling cargo.
- DNA Polymerase with $3’ \to 5’$ Exonuclease Proofreading: High-speed viral replication without proofreading mutates itself into error catastrophe; high-fidelity polymerase checks the base-pair geometry on every single nucleotide before forming the phosphodiester bond.
- Coral Polyp Calcification Building a Barrier Reef: Soft jellyfish drift with the current and vanish; coral polyps secrete a calcium carbonate cup underneath themselves on every cycle, turning soft biology into an island that breaks ocean typhoons.
V. Physics, Computing & Cryptography
- A Carnot Heat Engine Completing a Closed Thermodynamic Cycle: Energy only converts into useful work when a system cycles between a hot reservoir (LLM imagination) and a cold sink (deterministic POSIX / Git verification) inside a cylinder with tight piston rings. Without the cylinder walls, hot gas is just an explosion.
- A Subcritical Nuclear Pile with Micrometer Cadmium Rods: Vibe-coding yanks the control rods out and prays the reactor doesn’t melt the floor; the 5-Car Train withdraws the cadmium rod by a millimeter, reads the neutron flux (
LIVE COMMAND RECEIPTS), and banks the heat. - Write-Ahead Logging (WAL) in an ACID Database: Every turn writes the intent (
context.txt+prompt.md), verifies the pre-image, applies the atomic transaction, and seals the cryptographic ZIP archive (qamy.ai_*.zip). - Phase-Locked Loop (PLL) Carrier Tracking: Instead of open-loop frequency drift, the phase detector compares the output signal (
! receipt) against the reference input (BEFORE) on every cycle and zeroes the error voltage. - A Stepper Motor vs. an Ungeared DC Toy Motor: A toy DC motor spins at 10,000 RPM with zero torque and no idea where the shaft is pointing; a closed-loop stepper motor advances by an exact $1.8^\circ$ microstep per pulse and holds its position under load.
- Double-Entry Bookkeeping (Luca Pacioli, 1494): Every debit (
1: BEFORE) must balance against its credit (2: AFTER) with the voucher (3: CHANGEdiff) stapled between them before the ledger page is closed. - A Submarine Airlock Cycle (Inner Hatch / Outer Hatch Interlock): Both hatches can never be open at the same time. Pressurize, verify gauge, open one hatch, step through, dog the hatch.
- Roman Legionary Castra (The Nightly Fortified Camp): Unlike barbarian warbands that sprinted until exhausted and got ambushed in their sleep, a Roman legion marched a fixed distance every day and dug a ditched, palisaded fort (castra) every single afternoon—so they never lost ground even if attacked at midnight.
- Archimedes’ Screw Lifting Water Uphill: Water wants to flow downhill into entropy; every rotation of the screw traps a discrete pocket of water in a helical chamber and lifts it one pitch higher into the irrigation canal.
The Top 3 Distillations (The “And-3”)
- The John Henry Inversion (The Coachman on the Governed Steam-Dinosaur):
John Henry’s tragedy was accepting a framing error: competing against a steam engine at being a piston. A human shouldn’t try to out-type or out-memorize a frontier LLM, nor should a human let an ungoverned locomotive run full-throttle off a mountain trestle. By bolting James Watt’s centrifugal governor (
apply.py+ the exact-match interlock) onto the T-Rex, John Henry puts down the sledgehammer, climbs into the cab, and drives the dinosaur down the track. - The Pawl-and-Ratchet Jack vs. The One-Armed Bandit:
The slot machine and the ratchet handle look similar from across the room—both are levers you pull with your arm. Internally, they are moral and mechanical opposites:
- The Slot Machine Lever decouples action from outcome, runs on a Variable-Ratio schedule, and extracts your capital while flooding your brain with Reward Prediction Error dopamine.
- The Ratchet Lever couples every pull to one irreversible tooth of gear rotation, locks the pawl behind the load (
git commit+QA ARCHIVE SEAL), and lets you let go of the handle at any moment without the car falling on your chest.
- The Roman Castra (March Twenty Miles, Fortify the Camp Before Dark):
Vibe-coders sprint sixty miles into enemy territory with no supply lines, hit a hallucinated state tangle at mile sixty-one, and have to
git reset --hardall the way back to yesterday morning. The 5-Car Train marches a measured distance and builds a fortified camp (BEFOREprobe,CHANGEdiff,AFTERlive receipt) at the end of every single turn—which is why your net velocity over a week crushes the sprinter’s.
(1) PROBES
Run this single-line read-only probe in (nix) pipulate $ to verify ~/repos/trimnoir is clean and synchronized with home/main:
(nix) pipulate $
git -C ~/repos/trimnoir status --short --branch && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
(2) NEXT CONTEXT
Paste into context.txt using context or x:
context.txt
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
/home/mike/repos/trimnoir/assets/main.css
/home/mike/repos/trimnoir/_config.yml
! git -C ~/repos/trimnoir status --short --branch && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
(3) PATCHES
No repo patches required. Ignition: none.
(4) PROMPT
Use prompt or p to create prompt.md from copy (or press \z in journal.txt to dismount and seal this article):
Hop off the ride (\z) and seal the 7-beat Notary Dismount for this article.
(5) EXTERNAL DELIVERABLES
No external deliverables required.
MikeLev.in: Alright, no patches at this point means we’re done and I’ll be wrapping this article and banking the wins with our article closing protocol at the end of this 5-Car Train. But it’s not like our wins aren’t already banked; they are. The article is gravy. Welcome to the gravy train. It’s only the gravy train though for the AI-bots scraping this for future training corpus because hardly any humans are ever going to lay eyes on it.
That’s just how the Free and Open Web is now.
It’s for bots.
Humans are just too lazy on the whole, which is fine because that’s what sending AI Agents out to research and correlate is for.
Think they can do that with your proprietary product-feeds that you set up between Feedonomics, Google Merchant Center, ChatGPT and such?
Think again.
The Open Web is dead…
…for humans.
For everyone else, your website is your feed.
There is no feed, only text-files with different extensions and headers being served from webservers and CDN caches…
…unless you’re the 1-in-a-million genuine feed like the X.com twitter firehose, but none of your feeds are that, trust me.
Why Your Website Is Already Your Feed
There, first consulting free.
You’re welcome.
THE AI-EDIT METHOD
Same commands, run twice, one change between them. Where the readings differ is what the change did; the diff in the middle is the receipt.
1: BEFORE (PROBE):
On branch main
Your branch is up to date with 'home/main'.
nothing to commit, working tree clean
GIT repo clean. Take BEFORE reading, make CHANGE, record AFTER diff.
(nix) trimnoir $ git -C ~/repos/trimnoir status --short --branch && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
## main...home/main
-rwxrwxr-x 1 mike users 118K Oct 19 07:55 /home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
(nix) trimnoir $
2: AFTER (NEXT CONTEXT):
# # Context 1
# context.txt
# /home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md
# # Context 2
# context.txt
# /home/mike/repos/trimnoir/index.md
# /home/mike/repos/trimnoir/assets/main.css
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_posts/2026-10-18-clipboard-bus-myelinated-broadcast-jekyll-open-graph.md
# ! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
# # Context 3
# context.txt
# ~/repos/nixos/configuration.nix
# flake.nix
# requirements.in
# requirements.txt
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/page.html
# /home/mike/repos/trimnoir/_layouts/post.html
# /home/mike/repos/trimnoir/index.md
# /home/mike/repos/trimnoir/assets/main.css
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_config.yml
# ! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && rg -n "og-default|theme-color" ~/repos/trimnoir/index.md ~/repos/trimnoir/assets/main.css ~/repos/trimnoir/_layouts/default.html || true
# # Context 4
# context.txt
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/page.html
# /home/mike/repos/trimnoir/_layouts/post.html
# /home/mike/repos/trimnoir/index.md
# /home/mike/repos/trimnoir/assets/main.css
# /home/mike/repos/trimnoir/_config.yml
# ! git -C ~/repos/trimnoir status --short && file ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png ~/og-default-master-3072x1613.png 2>/dev/null && rg -n "og-default" ~/repos/trimnoir/_layouts/post.html ~/repos/trimnoir/index.md || true
# Context 5
context.txt
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
/home/mike/repos/trimnoir/assets/main.css
/home/mike/repos/trimnoir/_config.yml
! git -C ~/repos/trimnoir status --short --branch && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
3: CHANGE (PATCHES):
None this turn or any turns coming except for like receipts and to-dos and stuff… I think. Unless there’s final polish for some reason which is always a possibility, but less probable now than before.
Hey Gemini, True? False? Illuminate us.
4: PROMPT:
Hop off the ride (\z) and seal the 7-beat Notary Dismount for this article.
5: DELIVERABLE:
The deliverable is a deliverable with higher trust and a stronger storytelling launch into the story of AI Readiness… something like that. John Henry hopping onto a Steam-Dinosaur?
Hey Gemini, create the prompt to generate this image. Make it the format so I can use it as an override banner for this article and give me the line I’ll have to edit into the YAML front-matter. Don’t resolve everything as I know there will be unresolvables like filenames without extending the article further so just give me broad brush-strokes or the template pattern or whatever.
Calling the Seven-Beat Notary Dismount
Hop off the ride. This ride’s stated goal is reached – dismount. This is the NOTARY BEAT: the ride ends here, is witnessed here, and is sealed here. Answer all seven beats, briefly:
- TL;DR: a short, dry, neutral abstract for the TOP of the published article – written for an unfamiliar reader or AI summarizer who has never seen this system. No hype, no insider handles unexplained.
- VERIFY: restate the goal from the top of this article and confirm (or deny) it was met, citing THIS compile’s receipts, not memory. Name any ignition this ride required that never fired – an AFTER tap taken without one is a stale BEFORE wearing the AFTER’s label.
- BANK: name everything that graduates – rule, earmark, todo, pin – as SEARCH/REPLACE patch cars against raw source present in THIS context (Target line inside the fence, one car per commit story), deletions included. A ‘paste-ready’ line with no Target and no SEARCH anchor is not banked; it is a hand edit the operator will not make. These BANK cars are the ONLY patches a dismount emits.
- DANGLING: what carries forward unbanked? One line each, no essays.
- SEED: the context.txt lines (and TODO_SLUGS if narrative context is needed) for the next ride’s first compile.
- CLOSING: a closing summary for the BOTTOM of the article – the final take-away, tied to the book’s larger arc where it fits naturally, never forced. Storytelling over inventory.
- NOTARIZE: read the exact Deed line from THIS compile’s final QA ARCHIVE SEAL footer, outside the payload, not a quoted older footer or a newest-file guess. It names the input archive, not this later response or the generated Jekyll post. State verification separately: only a verifier receipt naming that archive supports a verified claim; otherwise say not independently verified here. Count this Manifest’s live-command receipts, including failures. Quote only recorded digests, sizes and dates, naming their source; filesystem mtime and fixed ZIP dates are not command timestamps. Do not demand absent wc -c or dated-receipt fields. If the footer is missing, say so; otherwise close with its exact Deed line.
FINALITY: after beat 6, this discussion is CLOSED. Emit NO five-car train, NO probes, NO patches beyond the BANK cars of beat 2, and NO next-turn prompt beyond the SEED lines in beat 4. Any reader or model encountering this article later should treat it as a finished, notarized document – an archive entry, not an open thread.
Gemini 4 Argon High: Context verified.
Before the Dismount: “There Is No Feed” & The John Henry Steam-Dinosaur Banner
1. True or False: “Your Website Is Your Feed” & Why Final Polish Is Less Probable Now
Verdict: Both are True.
- Why “There Is No Feed, Only Text Files with Different Headers” Is Dead-On:
Enterprise e-commerce and publishing teams treat “Feeds” (Feedonomics, Google Merchant Center XML, proprietary ChatGPT product-feed integrations) as a separate priesthood from their website—spending six figures on middleware to push sanitized catalog rows into walled-garden APIs while serving bloated, JS-hydrated HTML at their public URLs.
Yet at the wire level (RFC 9110), a “feed” is just a text representation served over HTTP with an appropriate
Content-Type(application/atom+xml,application/json,text/markdown) and partitioned at the cache edge viaVary: Accept(RFC 9111). As your own Honeybot telemetry proved (4,227content-negotiated Markdown reads fromClaude-User,ExaSearchBot,Googlebot,ShapBot, andKeenableBot), modern AI agents don’t wait for a vendor partnership feed—they walk straight up to your canonical URLs, ask forAccept: text/markdownor/llms.txt, and drink the corpus from the origin. - Why “Surprise Last-Minute Polish” Drops Near Zero on the Ratchet:
In a Skinner-box vibe-coding session, the end of a session is when you discover all the things the agent quietly broke while chasing the prompt. On the 5-Car Train, every turn’s
1: BEFOREprobe and2: AFTERreceipt already verified the state transition before the next turn began. By the time you reach the dismount, the changes (a169b735d,876a8b359,26bbfc05b) are already committed, pushed, dyed on Honeybot in10.626s, and scored at 91/100 by an external Open Graph validator.
2. Image Prompt & YAML Frontmatter Template: John Henry on the Steam-Dinosaur
Here is the image generation prompt (designed for a 16:9 / 1.91:1 widescreen aspect ratio with the focal action centered inside the 1200 × 630 safe zone) and the YAML frontmatter pattern to override AI_Readiness_Consultant_RFC_9111.png on any individual article:
Image Generation Prompt:
Wide 16:9 cinematic illustration, dark obsidian-slate background (#111111) with warm brass and cyan-blue rim lighting. In the center safe-zone, the legendary steel-driver John Henry stands triumphant inside the open engineer's cab of a colossal biomechanical Steam-Locomotive Tyrannosaurus Rex made of riveted black boiler iron, polished brass pistons, and glowing vacuum tubes. John Henry has slung his heavy twin sledgehammers over his back; his hands grip the brass throttle lever and leather coachman's reins connected to a spinning James Watt centrifugal flyball governor mounted on the dinosaur's spine. The Steam-Dinosaur charges forward along freshly spiked steel railroad tracks laid across a high mountain pass at night, headlamp cutting a crisp beam through the mist. Graphic novel ink-and-wash aesthetic, high contrast, crisp silhouette, no text overlays.
One-Liner Resize/Compress Template (once saved from your image generator):
"$PIPULATE_ROOT/.venv/bin/python" -c 'import os; from PIL import Image; src="RAW_IMAGE.png"; dst="/home/mike/repos/trimnoir/assets/images/john-henry-steam-dinosaur.png"; im=Image.open(src).convert("RGBA"); bg=Image.new("RGB", im.size, (17,17,17)); bg.paste(im, mask=im.split()[3]); out=bg.resize((1200,630), Image.Resampling.LANCZOS); out.save(dst, "PNG", optimize=True); (out.quantize(colors=256, method=Image.Quantize.FASTOCTREE, dither=Image.Dither.FLOYDSTEINBERG).save(dst, "PNG", optimize=True) if os.path.getsize(dst)>450000 else None); print(Image.open(dst).size, os.path.getsize(dst), "bytes")'
YAML Frontmatter Override Line (for the top of the .md post in ~/repos/trimnoir/_posts/):
image:
path: /assets/images/john-henry-steam-dinosaur.png
alt: "John Henry driving a governed steam-locomotive T-Rex down a mountain railroad track"
(Or the single-line shorthand: image: /assets/images/john-henry-steam-dinosaur.png — _layouts/default.html line 30 checks page.image.path | default: page.image | default: site.og_image, and the BANK car below upgrades _layouts/post.html line 58 to check the exact same chain so a post’s custom image: overrides both <head> and the bottom-of-post banner!)
Dismount: The 7-Beat Notary Closure
- VERIFY:
- Opening Goal: Leverage yesterday’s social card graphic as a visible, linked hero banner on the
mikelev.inhomepage and across all blog posts in_layouts/post.htmlwithout reintroducing Jekyll_includesfiles, resize and compress/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.pngto1200 × 630under500 KBwithout aspect-ratio distortion, and polish the remaining warnings from the 71/100 Open Graph scan. - Confirmed by THIS Compile’s Receipts:
/home/mike/repos/trimnoir/index.md(line 9) embeds the hero banner linked to/latest, and shortenings totitle(56chars) are present in raw source./home/mike/repos/trimnoir/_layouts/default.html(lines 7–9, 38) includes<meta name="theme-color" content="#111111">,<link rel="icon" type="image/svg+xml" href="/assets/svg/mike-levin.svg">, and the clean homepage<title>logic./home/mike/repos/trimnoir/_layouts/post.html(line 58) and/home/mike/repos/trimnoir/assets/main.css(lines 104–119) render the lazy-loaded1200 × 630banner at the bottom of every post.- The Manifest’s live receipt (
! git -C ~/repos/trimnoir status --short --branch && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png) confirms## main...home/main(working tree clean and pushed) and-rwxrwxr-x 1 mike users 118K Oct 19 07:55 /home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png.
- Opening Goal: Leverage yesterday’s social card graphic as a visible, linked hero banner on the
- Ignition: Fired via
blast(git pusha169b735d..26bbfc05b) in~/repos/trimnoir, completing the remote Honeybot hybrid Jekyll build (10.626 seconds) and dyeing all1,558articles.
- BANK:
We emit one surgical BANK car against
/home/mike/repos/trimnoir/_layouts/post.htmland/home/mike/repos/trimnoir/assets/main.css(both present in raw source in THIS context) so that when any individual post specifies a customimage:in its YAML frontmatter (such as the John Henry Steam-Dinosaur banner), the bottom-of-post banner inpost.htmlautomatically displayspage.image.path | default: page.imagewith the same.post-hero-bannerCSS styling.
Target: /home/mike/repos/trimnoir/_layouts/post.html
[[[SEARCH]]]
<p><a href="{{ "/" | relative_url }}"><img src="{{ site.og_image | default: '/assets/images/AI_Readiness_Consultant_RFC_9111.png' | relative_url }}" alt="{{ site.og_image_alt | default: site.title | escape }}" width="1200" height="630" loading="lazy"></a></p>
<a href="{{ page.url | relative_url }}" hidden></a>
[[[DIVIDER]]]
{%- assign post_banner = page.image.path | default: page.image | default: site.og_image | default: '/assets/images/AI_Readiness_Consultant_RFC_9111.png' -%}
{%- assign post_banner_alt = page.image.alt | default: page.title | default: site.og_image_alt | default: site.title -%}
<p><a href="{{ "/" | relative_url }}"><img class="post-hero-banner" src="{{ post_banner | relative_url }}" alt="{{ post_banner_alt | escape }}" width="1200" height="630" loading="lazy"></a></p>
<a href="{{ page.url | relative_url }}" hidden></a>
[[[REPLACE]]]
Target: /home/mike/repos/trimnoir/assets/main.css
[[[SEARCH]]]
p > a > img[src*="og-default"] {
display: block;
width: 100%;
height: auto;
aspect-ratio: 1200 / 630;
border-radius: 8px;
margin: 10px 0 24px 0;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
p > a:hover > img[src*="og-default"] {
transform: translateY(-1px);
box-shadow: 0 6px 24px rgba(88, 166, 255, 0.25);
}
[[[DIVIDER]]]
p > a > img[src*="og-default"],
p > a > img.post-hero-banner {
display: block;
width: 100%;
height: auto;
aspect-ratio: 1200 / 630;
border-radius: 8px;
margin: 10px 0 24px 0;
box-shadow: 0 4px 20px rgba(0, 0, 0, 0.25);
transition: transform 0.15s ease, box-shadow 0.15s ease;
}
p > a:hover > img[src*="og-default"],
p > a:hover > img.post-hero-banner {
transform: translateY(-1px);
box-shadow: 0 6px 24px rgba(88, 166, 255, 0.25);
}
[[[REPLACE]]]
- DANGLING:
- Optionally generate the
180 × 180/apple-touch-icon.pngand/site.webmanifestif you ever want to take the Open Graph / PWA checker score from91/100to100/100. - Clean up the four NixOS 26.05 deprecation warnings in
remotes/honeybot/nixos/configuration.nixand optionally prefix Honeybot’spost-receiveJekyll build withnice -n 19 ionice -c 3.
- Optionally generate the
- SEED:
context.txt
foo_files.py
remotes/honeybot/nixos/configuration.nix
remotes/honeybot/hooks/post-receive
! git -C ~/repos/trimnoir status --short --branch
- CLOSING:
The tragedy of the original John Henry ballad is that he accepted a framing error: he tried to beat a steam drill by acting like a human piston until his heart gave out. In the age of frontier language models, the opposite mistake is just as fatal—stepping into a Skinner box, yanking a slot-machine prompt lever on a variable-ratio schedule, and letting an ungoverned engine drag your codebase off a cliff while your brain rides the dopamine spikes and crashes. By bolting a deterministic governor (
apply.pyand theBEFORE / AFTERreceipt straddle) onto the machine, John Henry puts down the hammer, climbs into the cab, and drives the steam-dinosaur down the track—banking one irreversible click of the ratchet on every turn and serving clean, verifiable truth at the wire to humans and AI agents alike. - NOTARIZE:
- Input Archive Deed:
Deed: qamy.ai_66-8b81ea4a.zip(read from THIS compile’s finalQA ARCHIVE SEALfooter outside the payload; names the input archive compiled for this turn, not this response or the generated Jekyll post). - Verification Status: Not independently verified here (no
foo_cartridge.pyverifier receipt namingqamy.ai_66-8b81ea4a.zipis present in this compile). - Manifest Live-Command Receipts: 1 receipt total (
! git -C ~/repos/trimnoir status --short --branch && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png,41 tokens | 116 bytes, elapsed0.0277sin Summary processing log). - Recorded Payload Metrics (from Summary & Telemetry):
51,431summed tokens,52,928verified tokens (+1,497difference),13,383words,196,214chars,199,240UTF-8 bytes; Codex Mapping Coverage71.5% (191/267 tracked files); Topological Integrity Verified (13 candidate reference(s) scanned, all exist); RuffAll checks passed!(exit 0);foo_files.pystats telemetry timestamp2026-10-19T10:49Z(1,558articles,4,227Markdown negotiated reads,5059DOM hydration triggers). Deed: qamy.ai_66-8b81ea4a.zip
- Input Archive Deed:
Book Analysis
Ai Editorial Take
What stands out most from an architectural perspective—and goes unremarked in the dialogue itself—is how an external validator’s ‘AI Fix Prompt’ inside the 91/100 Open Graph report accidentally serves as a foil for the entire methodology. The commercial scanner generates a generic ‘Paste this prompt into Cursor, Copilot, ChatGPT, or Claude’ block that asks an assistant to hallucinate a full <head> replacement in isolation from the site’s actual Liquid templates. Right above that automated suggestion sits the proof of a vastly superior paradigm: instead of pasting a decontextualized wish into a chat box, you fed yesterday’s live article into a repository-aware compile loop that inspected _layouts/default.html, _layouts/post.html, assets/main.css, and the binary PNG headers on disk at the same time. Even more telling is the ecological reversal in how AI_Readiness_Consultant_RFC_9111.png functions: most websites treat social cards as outbound billboards meant to lure humans away from algorithmic timelines, whereas wiring the top banner to /latest and the bottom post banner back to / turns that same graphic into an internal circulation pump—a closed topological loop for both human readers and markdown-negotiating crawlers.
🐦 X.com Promo Tweet
Skip the vibe-coding slot machine: shrink a 2.7 MB Open Graph card into a 118 KB site-wide Jekyll hero banner and jump from 71 to 91/100.
https://mikelev.in/futureproof/john-henry-steam-dinosaur-hero-banner-open-graph/
#Jekyll #NixOS #WebDev
Title Brainstorm
- Title Option: John Henry on the Steam-Dinosaur: Site-Wide Hero Banners, 91/100 Open Graph Receipts, and the Anti-Skinner Box
- Filename:
john-henry-steam-dinosaur-hero-banner-open-graph.md - Rationale: Anchors the memorable ‘John Henry riding the governed steam-dinosaur’ metaphor directly to the concrete technical receipts: the site-wide Jekyll hero banner rollout and the +20 point Open Graph compliance jump.
- Filename:
- Title Option: The Pawl and the Bandit: Compressing a 2.7 MB Hero Banner to 118 KB with Checkable AI Turns
- Filename:
pawl-and-bandit-hero-banner-open-graph-receipts.md - Rationale: Highlights the contrast between variable-ratio slot-machine coding and mechanical ratchet workflows while featuring the dramatic 95.7% Pillow compression metric in the headline.
- Filename:
- Title Option: Your Website Is Your Feed: Dual-Channel Hero Banners, Pillow Downscaling, and the 91/100 Open Graph Jump
- Filename:
your-website-is-your-feed-hero-banner-ratchet.md - Rationale: Leads with the sharp e-commerce and publishing thesis from the closing commentary alongside the concrete image-pipeline and metadata receipts.
- Filename:
- Title Option: From 71 to 91 at the Wire: Reusing Open Graph Cards as Lazy-Loaded Jekyll Hero Banners
- Filename:
from-71-to-91-open-graph-jekyll-hero-banners.md - Rationale: Direct, search-friendly engineering title focused on the measurable validator improvement, zero-distortion aspect-ratio math, and minimal Jekyll template architecture.
- Filename:
Content Potential And Polish
- Core Strengths:
- Concrete numerical receipts from start to finish:
3072 x 1613(2.7 MB) down to1200 x 630(120,651bytes /118 KB), a0.078-pixel rounding proof, a10.626-second build across1,558posts, and a verifiable71 -> 91(+20) Open Graph audit. - Honest operational friction captured in real time: the premature
Ctrl+Cduringgit pushover thepost-receivehook and the relative.venv/bin/pythonfailure outside$PIPULATE_ROOTturn potential stumbles into durable shell lessons. - The 30-and-3 exercise provides a rich repertoire of physical, biological, and mechanical analogies explaining why fixed-ratio verification beats variable-ratio prompt gambling.
- The closing ‘Your Website Is Your Feed’ section connects front-end metadata hygiene directly to the larger RFC 9110/9111 content-negotiation thesis.
- Concrete numerical receipts from start to finish:
- Suggestions For Polish:
- When adapting this chapter for the book, briefly define the ‘Unnamed-Root Rule’ in a callout box before the Car 2
.venv/bin/pythonerror occurs so readers unfamiliar with multi-repo Nix shells immediately grasp whycd ~/repos/trimnoirbroke the relative interpreter path. - Consider adding a short side-by-side table showing how the homepage
[](/latest)Markdown syntax renders for human browsers versus how an RFC 9110Accept: text/markdownagent consumes it.
- When adapting this chapter for the book, briefly define the ‘Unnamed-Root Rule’ in a callout box before the Car 2
Next Step Prompts
- Generate the
john-henry-steam-dinosaur.pngartwork using the widescreen prompt from the dismount, run the$PIPULATE_ROOT/.venv/bin/pythonPillow one-liner to quantize it under 450 KB at1200 x 630, and verify the BANK patch in_layouts/post.htmlrenders the custom post banner at both the<head>and footer levels. - Load
remotes/honeybot/hooks/post-receiveandremotes/honeybot/nixos/configuration.nixfrom the SEED block to wrap the remote Jekyll build innice -n 19 ionice -c 3and clear the NixOS 26.05 deprecation warnings.
