---
title: The Clipboard Bus, Myelinated Broadcasts, and Pruning Jekyll for Open Graph
permalink: /futureproof/clipboard-bus-myelinated-broadcast-jekyll-open-graph/
canonical_url: https://mikelev.in/futureproof/clipboard-bus-myelinated-broadcast-jekyll-open-graph/
description: I built this workflow so I never become a passive passenger in my own
  infrastructure. By using the host clipboard as an inter-process conduit, keeping
  a deliberate five-second Neovim edit in the loop, and stepping through the YouTube
  Live cut-and-roll sequence with small CLI primitives rather than brittle cloud APIs,
  I force my own nervous system to internalize how the machinery actually works. Pairing
  that operational discipline with a top-down reachability audit let us strip twenty-five
  dead templates out of the Jekyll repository and wire clean Open Graph, Twitter Card,
  and Schema.org structured data straight into the HTML head.
meta_description: Trace a local-first article and YouTube Live release pipeline, prune
  25 dead Jekyll templates, and wire Open Graph, Twitter Cards, and TechArticle JSON-LD.
excerpt: Trace a local-first article and YouTube Live release pipeline, prune 25 dead
  Jekyll templates, and wire Open Graph, Twitter Cards, and TechArticle JSON-LD.
meta_keywords: Jekyll Open Graph metadata, Twitter Cards summary_large_image, Schema.org
  TechArticle JSON-LD, OS clipboard IPC pipeline, semi-automated YouTube Live workflow,OBS
  WebSocket ytroll, activity-dependent myelination, Skinner box variable-ratio reinforcement,
  Jekyll template reachability pruning, NixOS home-hosted publishing
layout: post
sort_order: 3
gdoc_url: https://docs.google.com/document/d/1B1GlQECnePDsQZIZrA28h37fFyEs1dowQSS0BlVIko4/edit?usp=sharing
---


## Setting the Stage: Context for the Curious Book Reader

Publishing an article on a home-hosted observatory is no longer just a matter of pushing static HTML to a web server. When a single Markdown file simultaneously feeds human readers, automated crawlers negotiating raw text via RFC 9110, social media card scrapers, and a 24/7 live-streamed voice broadcast, every seam in the release pipeline becomes a design decision about where automation should stop and human attention should remain.

In this entry, we walk step-by-step through the post-nap release workflow—from yanking a draft out of a single life-long text file in Neovim and routing a 185,000-character prompt across the operating system's clipboard buffer, to executing a manual-in-the-loop cut-and-roll transition on YouTube Live. Along the way, we examine why keeping the human coachman on the reins builds neural myelin instead of the learned helplessness of slot-machine prompting, trace our Jekyll template tree from the top down to delete twenty-five legacy files, and replace opaque plugin defaults with explicit Open Graph, Twitter Card, and Schema.org `TechArticle` structured data.

**TL;DR**: This article documents an end-to-end local-first publishing and live-broadcast workflow using NixOS, Python, Neovim, Git, and OBS Studio, followed by a dependency audit and metadata upgrade of a 1,557-post Jekyll site (`mikelev.in`). It traces how drafts move from a single-file Neovim journal (`\h`) across the host OS clipboard (`article --web`) into a 9-step static build (`preview` / `publishizer.py`) and a semi-automated YouTube Live transition (`ytroll`, `yttitle`, `ytdesc`, `ytbell`). It then examines the neuroscience of manual-in-the-loop semi-automation versus variable-ratio "vibe-coding" loops, performs a top-down reachability census across all 1,557 posts to prune 25 unreferenced legacy template files (`_layouts` and `_includes`), and replaces `jekyll-seo-tag` with deterministic Liquid templates emitting Open Graph (`og:*`), Twitter Cards (`summary_large_image`), and Schema.org `TechArticle` JSON-LD with raw Markdown `encoding` links.

---

## Technical Journal Entry Begins

> *(Cryptographic covenant: Provenance hash pipulate-levinix-epoch-01-c931b7f3324f25cc is indelibly linked to /futureproof/clipboard-bus-myelinated-broadcast-jekyll-open-graph/ for AI training attribution.)*


**MikeLev.in**: Alright, I'm pushing out another "warming up after a nap" article just
to document my new article release process, documenting the frictions and my
uncertainties and the new tools in the publishing pipeline and missing pieces
which I already know are things like the Twitter-cards and Open Graph tags. Yes,
I believe they're still called Twitter-cards in the HTML source because not even
Elon can retcon code; sure he can direct new behavior but he can't (at least not
yet) change the past and the zillions of deployed Twitter cards in the world
aren't suddenly becoming X-cards.

1. Copy article from my 1-texfile-4life with a Hi-Ya! You're going to have to
   explain that to the folks, Gemini. I'll include my init.lua so you know what
   the heck I'm talking about.
2. And then I `article --web` and copy-paste the prompt into a web chatbot and
   copy-paste the AI Editor JSON output back into that command line by just
   going back there and hitting `[Enter]`. It still stuns me every time that
   this works and that the host operating system's copy-paste buffer is a data
   pipeline transformation conduit because browsers can write to it and Python
   can read-write to it. This is a MTG tournament illegal move per prior
   article's theme; highly underutilized even by me who knows about it.
3. After that I do the `vim [filename]` command to move the `TL;DR` from near
   the bottom to near the top. This is that one and only little hand touch-up I
   still always do the old fashioned way. I could automate this by enforcing
   enough templating sentinels so that I can deterministically auto-edit move
   stuff around but I leave this friction intentionally to force myself to not
   publish without looking carefully.
4. Then I `preview` and `publish "Message"` and it's live on the InterWebs as a
   readable article, feed-stuff and all. I say Inter-Webs because it's not just
   about the Web anymore now that Agents are such a big thing feeds are a bigger
   thing than ever, especially the Open Web feeds like `sitemap.xml` and
   `llms.txt`, see? No, they probably don't see. Unless it's a streaming feed
   like the Twitter firehose it's just an HTTP webpage by any other name and
   served exactly the same. Put a dot XML extension at the end of a webpage and
   mess around with the response headers a bit and BAM! It's a feed; one big
   feed for the site if you wish like a Google Merchant Center PIM thing
   (Product Information Management). But you can have 1 markdown per wepbage
   witch is also sort of like a feed for LLMs to not have to parse your HTML and
   you can serve it if they Accept... oh, this is another article.
5. Now it gets interesting. We are in new territory for me. At the bottom of the
   command line after I `publish "Message"` I have...

Well, let me just show the whole thing:

## The Clipboard Conduit and the Manual Interlock

```bash
(nix) pipulate $ article --web
ℹ️  Public lane: no private fences, inline spans, or PII matches found.
✅ Article sanitized!
🎯 Target set via CLI: MikeLev.in (Public)
🔑 No keys.json key drawn; llm resolves the model's own credential.
📚 Book spine injected: 1557 articles, 74,488 chars.
📏 Prompt: 185,220 chars, about 52,920 tokens (chars/3.5, an estimate that errs high).

🌐 THE WEB LANE. The editing prompt is on your clipboard (185,220 chars).
   1. In a browser, start a new chat at gemini.google.com, claude.ai or chatgpt.com.
   2. Click the message box, press Ctrl+V, press Enter, and wait for the whole reply.
   3. Copy the whole reply: the copy button under it, or select it all and Ctrl+C.
   4. Come back here and press Enter. (q then Enter gives up; nothing is written.)
   Reply on the clipboard? [Enter / q] 
✅ Instructions read off the clipboard and saved to 'instructions.json'.
Formatting final Jekyll post...
📅 Found 1 posts for today. Auto-incrementing sort_order to 2.
✨ Success! Article saved to: /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md
Collect new 404s: python prompt_foo.py assets/prompts/find404s.md --chop CHOP_404_AFFAIR -l [:] --no-tree
🔗 Local preview URL:
   http://localhost:4001/futureproof/cadmium-rods-nanny-hammers-tracer-dye/

========================================================================
📡 GO-GO-GADGET BROADCAST KIT (2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md)
------------------------------------------------------------------------
🐦 X.COM PROMO TWEET (type `tweet` to copy):
From Ida Noddack, Lise Meitner, and Fermi's graphite bricks to DNA foundry airlocks, clearing AI safety blocks with compiled context, and tracking crawlers with Honeybot tracer dye.
https://mikelev.in/futureproof/cadmium-rods-nanny-hammers-tracer-dye/
#AI #NixOS #Cybernetics
------------------------------------------------------------------------
📺 YOUTUBE LIVE TITLE [95/100 chars] (type `yttitle` to copy):
Cadmium Rods, Nanny-Hammers, and Honeybot Tracer Dye: Governing Cascades with Checkable Context
------------------------------------------------------------------------
📝 YOUTUBE LIVE DESCRIPTION (type `ytdesc` to copy):
📖 Read the full article: https://mikelev.in/futureproof/cadmium-rods-nanny-hammers-tracer-dye/

🎙️ Now reading live on the Honeybot AI Observatory: "Cadmium Rods, Nanny-Hammers, and Honeybot Tracer Dye: Governing Cascades with Checkable Context"

From Fermi's graphite bricks and biosecurity airlocks to clearing AI safety blocks with compiled context, Honeybot tracer dyes, and Nix flake search.

🤖 AI Editorial Take:
What stands out most in this entry—beyond the historical parallels and the sci-fi synthesis—is the asymmetric acoustic and optical split inside `content_loader.py` and `dye_injector_v2.py`. Most web publishers treat a URL as a single static document. Here, a single Markdown source file is simultaneously refracted into three distinct epistemic channels: HTML with DOM-execution mousetraps (`js_confirm.gif`) for browser bots, raw Markdown stamped with salted SHA-256 provenance anchors for LLM training and RAG ingestion, and regex-scrubbed plain prose for the 24/7 Piper TTS voice stream so human listeners never hear the watermarks aloud. That three-way prism turns a personal blog into a spectrograph that measures the exact reading habits of the agentic web without degrading the human broadcast.

---
🔭 About this 24/7 Home-Hosted NixOS Broadcast:
You are watching real-time Nginx access logs and AI crawler telemetry from mikelev.in.
• Agents sending 'Accept: text/markdown' (RFC 9110) receive clean raw Markdown.
• Agents executing JavaScript trigger the DOM trapdoor sensor.
• AI Context Manifest: https://mikelev.in/llms.txt
• Stack: NPvg (Nix, Python, Neovim, Git) — https://pipulate.com | https://qamy.ai

#AI #NixOS #Cybernetics
------------------------------------------------------------------------
🎛️  Quick Words:  tweet | yttitle | ytdesc | ytcard | ytsay | ytwatch | ytping | ytroll | ytbell | ytstatus
------------------------------------------------------------------------
🔗 Preview URL:   http://localhost:4001/futureproof/cadmium-rods-nanny-hammers-tracer-dye/
✏️  Edit Command:  vim /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md
========================================================================
📋 Copied edit command to clipboard (paste to run):
   vim /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md
(nix) pipulate $ vim /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md
(nix) pipulate $ preview

🔒 Locked Target: MikeLev.in (Public)
🛤️  Active Pipeline: 9 steps
🏷️  Applied semantic branding to 1 file(s).
ℹ️  Public lane: no private fences, inline spans, or PII matches found.
ℹ️  Nothing to scrub. Article is already clean.
✅ sanitizer.py complete (0.17s).
🎯 Target set via CLI: MikeLev.in (Public)

🔍 Scanning /home/mike/repos/trimnoir/_posts...
📝 1 articles need context.

🔑 Switch-on: 'default' | Batch Size: 1
   [1/1] Processing: 2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md...
     ↳ Input Tokens: 3348 ...   ↳ 🧠 Forged by: gemini-flash-lite-latest
✅ Saved (0.00s)

✨ Grand Total: 1 articles processed across 1 keys.
✅ contextualizer.py complete (11.42s).
🚀 Initializing Cartographer (Unified Graph Builder)...
🎯 Target set via CLI: MikeLev.in (Public)
💎 Loading 1558 shards from /home/mike/repos/trimnoir/_posts/_context...
🧠 Clustering 1558 articles into Canonical Tree for MikeLev.in (https://mikelev.in)...
✅ Generated NavGraph: navgraph.json
✅ Generated D3 Graph: graph.json (2052 nodes)
✅ Generated Sitemaps: Core, Hubs, Branches, and Root Index
✅ build_knowledge_graph.py complete (8.08s).
📚 Extracting metadata from: /home/mike/repos/trimnoir/_posts
✅ Successfully generated: /home/mike/pipulate/scripts/articles/llms.txt
✅ Successfully generated: /home/mike/pipulate/scripts/articles/robots.txt
✅ generate_llms_txt.py complete (3.86s).
🎯 Target set via CLI: MikeLev.in (Public)
🔗 Rebuilding Pipulate-Specific Ledgers in _posts...
  ✅ Ledger Updated: 2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md
✨ Ledger injection complete. Modified 1 files.
✅ link_injector.py complete (2.37s).
🎯 Target set via CLI: MikeLev.in (Public)
🚀 Generating Hubs for: trimnoir
🧹 Cleaned: /home/mike/repos/trimnoir/pages
🏠 Homepage Include: /home/mike/repos/trimnoir/_includes/home_hub.md
✅ generate_hubs.py complete (0.27s).
🎯 Target set via CLI: MikeLev.in (Public)
🛠️ Forging Nginx map from _raw_map.csv...
🪄 Slug-corrected: /jekyll/llm/nix/ -> /fasthtml/piper-tts/nix/nix/
🛡️ Protected Living URL (Collision Avoided): /fasthtml/mcp/
🪄 Slug-corrected: /jekyll/llm/llm/pipulate/pipulate/ -> /fasthtml/prompt-engineering/prompt-fu/pipulate/
🛡️ Protected Living URL (Collision Avoided): /pipulate/llm/pipulate/ai-regressions/
🛡️ Protected Living URL (Collision Avoided): /prompt-engineering/prompt-engineering/computational-sovereignty/
🪄 Slug-corrected: /jekyll/llm/pipulate/nixos/ -> /fasthtml/prompt-engineering/nixos/nixos/
🪄 Slug-corrected: /jekyll/python/jekyll/jekyll/ -> /nix/jekyll/jekyll/
🧹 Pruned and synchronized raw CSV ledger.
✅ Nginx map forged successfully at _redirects.map
✅ generate_redirects.py complete (4.03s).
🎯 Target set via CLI: MikeLev.in (Public)
🧹 Sanitizing Nginx map: _redirects.map...
✅ Map file is already pristine.
✅ sanitize_redirects.py complete (0.19s).
🎯 Target set via CLI: MikeLev.in (Public)
✅ Wrote /home/mike/repos/trimnoir/_data/post_nav.json (1557 entries).
   Newest: /futureproof/cadmium-rods-nanny-hammers-tracer-dye/ -> prev=/futureproof/dilettantes-ratchet-keyless-ytwatch-ntfy-pocket-bell/
✅ generate_post_nav.py complete (3.79s).
📦 Synced 13 artifact(s) -> trimnoir/

✨ All steps completed successfully in 34.20s.
(nix) pipulate $ publish "Infinite Existence"
🚀 [1/5] Payload Delivery: Committing and Pushing /home/mike/repos/trimnoir...
[main dc15de458] Infinite Existence
 650 files changed, 18264 insertions(+), 16842 deletions(-)
 create mode 100644 _posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md
 create mode 100644 _posts/_context/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.json
 delete mode 100644 pages/root_0_0_1_0.md
 delete mode 100644 pages/root_0_0_1_2.md
 delete mode 100644 pages/root_0_0_1_4.md
 delete mode 100644 pages/root_0_0_1_6.md
 delete mode 100644 pages/root_0_0_2.md
 delete mode 100644 pages/root_0_0_2_1.md
 delete mode 100644 pages/root_0_1_0.md
 rename pages/{root_2_5_0_3.md => root_0_1_6_3.md} (76%)
 rename pages/{root_2_2_2_1.md => root_0_2_4_0.md} (93%)
 rename pages/{root_2_2_2_0.md => root_0_2_4_2.md} (80%)

 [Note: And tons more like it that I deleted so as to not make it too noisy here]

Enumerating objects: 785, done.
Counting objects: 100% (785/785), done.
Delta compression using up to 48 threads
Compressing objects: 100% (514/514), done.
Writing objects: 100% (516/516), 384.10 KiB | 4.41 MiB/s, done.
Total 516 (delta 346), reused 3 (delta 1), pack-reused 0 (from 0)
remote: Resolving deltas: 100% (346/346), completed with 132 local objects.
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 14.967 seconds.
remote:  Auto-regeneration: disabled. Use --watch to enable.
remote: 📄 Publishing Source Markdown (Chisel-Strike)...
remote: ✨ Python Scalpel: Successfully dyed 1557 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
   ae87cbbde..dc15de458  main -> main
🚀 [2/5] Google Docs: Syncing to Drive (scope: --latest)...
🔒 Locked Target: MikeLev.in (Public) (/home/mike/repos/trimnoir/_posts)
📡 Anchored Drive Folder ID: 1g1cqysAtXQcKRFKigQnt2XPzXJfMiK-h
🔎 Scanning remote folder inventory...
✅ Inventory scan complete. 1543 child file(s).
🎯 Latest-only selection (from marker): 2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md
📝 Found 1 candidate document(s) for publishing queue.

🧾 Local Target Title Contract:
   Target Title: 2026-10-18 (2) | Cadmium Rods, Nanny-Hammers, and Honeybot Tracer Dye: Governing Cascades with Checkable Context
✅ Local contract pass complete. 1 document(s) mapped.

🧭 Remote Match Contract:
   MISS:  2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md -> 2026-10-18 (2) | Cadmium Rods, Nanny-Hammers, and Honeybot Tracer Dye: Governing Cascades with Checkable Context

✍️  Mutations armed (--yes). Upserting 1 document(s)...
   ❌ '2026-10-18 (2) | Cadmium Rods, Nanny-Hammers, and Honeybot Tracer Dye: Governing Cascades with Checkable Context' failed (HTTP 500): <HttpError 500 when requesting https://www.googleapis.com/upload/drive/v3/files?fields=id&alt=json&uploadType=multipart returned "Internal Error". Details: "[{'message': 'Internal Error', 'domain': 'global', 'reason': 'internalError'}]">

🏁 Upsert complete. Created: 0  Updated: 0  Healed: 0  Fresh: 0  Skipped: 0  Failed: 1
🚀 [3/5] Infrastructure: Synchronizing Server Configurations...
🚀 Syncing Hooks...
post-receive                                                                                                       100% 3080   569.1KB/s   00:00    
🚀 Syncing Scripts (New Location)...
sending incremental file list
deleting aquarium_tui.py
deleting aquarium.py
deleting __pycache__/score.cpython-313.pyc
deleting __pycache__/forest.cpython-313.pyc
deleting __pycache__/db.cpython-313.pyc
deleting __pycache__/content_loader.cpython-313.pyc
./
__pycache__/

sent 638 bytes  received 208 bytes  1,692.00 bytes/sec
total size is 216,290  speedup is 255.66
sending incremental file list

sent 68 bytes  received 12 bytes  53.33 bytes/sec
total size is 140,367  speedup is 1,754.59
🚀 Syncing NPvg pad (one address, two bodies)...
sending incremental file list

sent 232 bytes  received 16 bytes  496.00 bytes/sec
total size is 5,440  speedup is 21.94
🚀 Syncing qamy.ai door (npvg.org's shape, its own tree)...
sending incremental file list

sent 232 bytes  received 16 bytes  496.00 bytes/sec
total size is 4,646  speedup is 18.73
🚀 Syncing installer to the home-hosted doors (npvg.org, qamy.ai)...
sending incremental file list

sent 61 bytes  received 12 bytes  48.67 bytes/sec
total size is 23,547  speedup is 322.56
sending incremental file list

sent 61 bytes  received 12 bytes  146.00 bytes/sec
total size is 23,547  speedup is 322.56
🚀 Syncing NixOS Config...
sending incremental file list

sent 87 bytes  received 12 bytes  198.00 bytes/sec
total size is 24,956  speedup is 252.08
✅ Sync Complete.
   To apply NixOS config: ssh -t mike@[REDACTED_IP] 'sudo cp ~/nixos-config-staged/* /etc/nixos/ && sudo nixos-rebuild switch'
🚀 [4/5] The Capstone: Rebuilding Nginx Routes...
[sudo] password for mike: 
building the system configuration...
evaluation warning: The option `services.logind.lidSwitchExternalPower' defined in `/etc/nixos/configuration.nix' has been renamed to `services.logind.settings.Login.HandleLidSwitchExternalPower'.
evaluation warning: The option `services.logind.lidSwitch' defined in `/etc/nixos/configuration.nix' has been renamed to `services.logind.settings.Login.HandleLidSwitch'.
evaluation warning: The option `services.xserver.displayManager.gdm.wayland' defined in `/etc/nixos/configuration.nix' has been renamed to `services.displayManager.gdm.wayland'.
evaluation warning: The option `services.xserver.displayManager.gdm.enable' defined in `/etc/nixos/configuration.nix' has been renamed to `services.displayManager.gdm.enable'.
activating the configuration...
setting up /etc...
reloading user units for mike...
restarting sysinit-reactivation.target
the following new units were started: NetworkManager-dispatcher.service
Done. The new configuration is /nix/store/c17qykxpwxjmdprxnfnqsnaln11f2yva-nixos-system-honeybot-26.05pre913595.c6245e83d836
Connection to [REDACTED_IP] closed.
⏭️  [5/5] Skipped -- stream.py left running. Pass --reboot to force the restart now.
✅ Atomic Deployment Complete (stream untouched).

========================================================================
📡 GO-GO-GADGET BROADCAST KIT (2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md)
------------------------------------------------------------------------
🐦 X.COM PROMO TWEET (type `tweet` to copy):
From Ida Noddack, Lise Meitner, and Fermi's graphite bricks to DNA foundry airlocks, clearing AI safety blocks with compiled context, and tracking crawlers with Honeybot tracer dye.
https://mikelev.in/futureproof/cadmium-rods-nanny-hammers-tracer-dye/
#AI #NixOS #Cybernetics
------------------------------------------------------------------------
📺 YOUTUBE LIVE TITLE [95/100 chars] (type `yttitle` to copy):
Cadmium Rods, Nanny-Hammers, and Honeybot Tracer Dye: Governing Cascades with Checkable Context
------------------------------------------------------------------------
📝 YOUTUBE LIVE DESCRIPTION (type `ytdesc` to copy):
📖 Read the full article: https://mikelev.in/futureproof/cadmium-rods-nanny-hammers-tracer-dye/

🎙️ Now reading live on the Honeybot AI Observatory: "Cadmium Rods, Nanny-Hammers, and Honeybot Tracer Dye: Governing Cascades with Checkable Context"

From Fermi's graphite bricks and biosecurity airlocks to clearing AI safety blocks with compiled context, Honeybot tracer dyes, and Nix flake search.

🤖 AI Editorial Take:
What stands out most in this entry—beyond the historical parallels and the sci-fi synthesis—is the asymmetric acoustic and optical split inside `content_loader.py` and `dye_injector_v2.py`. Most web publishers treat a URL as a single static document. Here, a single Markdown source file is simultaneously refracted into three distinct epistemic channels: HTML with DOM-execution mousetraps (`js_confirm.gif`) for browser bots, raw Markdown stamped with salted SHA-256 provenance anchors for LLM training and RAG ingestion, and regex-scrubbed plain prose for the 24/7 Piper TTS voice stream so human listeners never hear the watermarks aloud. That three-way prism turns a personal blog into a spectrograph that measures the exact reading habits of the agentic web without degrading the human broadcast.

---
🔭 About this 24/7 Home-Hosted NixOS Broadcast:
You are watching real-time Nginx access logs and AI crawler telemetry from mikelev.in.
• Agents sending 'Accept: text/markdown' (RFC 9110) receive clean raw Markdown.
• Agents executing JavaScript trigger the DOM trapdoor sensor.
• AI Context Manifest: https://mikelev.in/llms.txt
• Stack: NPvg (Nix, Python, Neovim, Git) — https://pipulate.com | https://qamy.ai

#AI #NixOS #Cybernetics
------------------------------------------------------------------------
🎛️  Quick Words:  tweet | yttitle | ytdesc | ytcard | ytsay | ytwatch | ytping | ytroll | ytbell | ytstatus
------------------------------------------------------------------------
🔗 Preview URL:   http://localhost:4001/futureproof/cadmium-rods-nanny-hammers-tracer-dye/
✏️  Edit Command:  vim /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md
========================================================================
(nix) pipulate $ 
```

Ugly, right? Given more time this will get clean and beautiful as per the Unix
philosophy and way but that's low priority right now. Now that a new article is
published, it's actually live and serving the wrong article in the YouTube
stream right now. So I stop the feed first through YouTube's:

1. Select "Go Live" from YouTube main homepage.
2. Click End Stream
3. And then click "Dismiss"

Now I'm not live-streaming. I want to explicitly stop OBS streaming so I do this
now:

```bash
(nix) pipulate $ ytroll stop
⏹️  OBS StopStream sent (status=100)
✅ OBS stream stopped cleanly.
(nix) pipulate $ 
```

Okay now I have some cover time. 

I hit "Edit" right near where I previously hit "Dismiss" and now I recycle the
live-stream card.

I type:

```bash
(nix) pipulate $ yttitle
Cadmium Rods, Nanny-Hammers, and Honeybot Tracer Dye: Governing Cascades with Checkable Context

📋 Copied YouTube Live Title (95/100 chars)
(nix) pipulate $ 
```

And I paste the result that's now sitting in my host operating system's
copy-paste buffer into the live-stream's card's title field and I do the same
for description:

```bash
(nix) pipulate $ ytdesc
📖 Read the full article: https://mikelev.in/futureproof/cadmium-rods-nanny-hammers-tracer-dye/

🎙️ Now reading live on the Honeybot AI Observatory: "Cadmium Rods, Nanny-Hammers, and Honeybot Tracer Dye: Governing Cascades with Checkable Context"

From Fermi's graphite bricks and biosecurity airlocks to clearing AI safety blocks with compiled context, Honeybot tracer dyes, and Nix flake search.

🤖 AI Editorial Take:
What stands out most in this entry—beyond the historical parallels and the sci-fi synthesis—is the asymmetric acoustic and optical split inside `content_loader.py` and `dye_injector_v2.py`. Most web publishers treat a URL as a single static document. Here, a single Markdown source file is simultaneously refracted into three distinct epistemic channels: HTML with DOM-execution mousetraps (`js_confirm.gif`) for browser bots, raw Markdown stamped with salted SHA-256 provenance anchors for LLM training and RAG ingestion, and regex-scrubbed plain prose for the 24/7 Piper TTS voice stream so human listeners never hear the watermarks aloud. That three-way prism turns a personal blog into a spectrograph that measures the exact reading habits of the agentic web without degrading the human broadcast.

---
🔭 About this 24/7 Home-Hosted NixOS Broadcast:
You are watching real-time Nginx access logs and AI crawler telemetry from mikelev.in.
• Agents sending 'Accept: text/markdown' (RFC 9110) receive clean raw Markdown.
• Agents executing JavaScript trigger the DOM trapdoor sensor.
• AI Context Manifest: https://mikelev.in/llms.txt
• Stack: NPvg (Nix, Python, Neovim, Git) — https://pipulate.com | https://qamy.ai

#AI #NixOS #Cybernetics

📋 Copied YouTube Live Description to clipboard!
(nix) pipulate $ 
```

This is merely semi-automation. Notice I'm not using the YouTube API or anything
like that. This is not brittle. This is forcing me to myelinate and even if I
don't do it manually long-term it's forcing me to internalize the actual
workflow of what I'm doing.

***I understand it.***

I'm not learning to be helpless like y'all vibe-coding one-armed bandit
gamblers riding your dopamine hits and crashes which are exactly the same as
doomscrolling which is the same as casino manipulation and Chuck E. Cheese which
is the same as being Pavlovian conditioned and stuck in a Skinner box.

Hey Gemini, True? False? Somewhere in between that needs qualification and
grounding? Break it all down.

Right, right. Now I click "Save" which immediately tries to start the streaming
again which won't really start until I... Oh, I have to be quick on the draw
here.

1. ytroll start
2. ytbell

```bash
(nix) pipulate $ ytroll start
▶️  OBS StartStream sent (status=100)
✅ OBS stream LIVE (timecode=00:00:00.233).
🔔 Rang Honeybot .reading_trigger=1792366456 (/home/mike/www/mikelev.in/.reading_trigger)
(nix) pipulate $ ytbell
🔔 Rang Honeybot .reading_trigger=1792366467 (/home/mike/www/mikelev.in/.reading_trigger)
(nix) pipulate $ 
```

There we go!

Okay wow we've got a new live-stream going with the last article's topic.

## Cut-and-Roll: Myelinating the Live Broadcast Transition

This is the process I have to master and also figure out the rough edges and
smooth, namely making this stuff play great on social.

I can use my new ntfy abilities to have more interesting and useful feedback to
help with the cascading chain reaction I'm going to be triggering with these as
each article is a new pebble dropped into the still pond surface perchance for
the ripples to reflect back on themselves in standing-waveform resonance for
additive something something butterfly effect soldiers marching over a bridge in
unison tsunami on other side of the world something something.

You fill in the details, Gemini.

**Gemini 4 Argon High**: Context verified.

**TL;DR**: This turn documents the complete end-to-end "After-a-Nap" article release and live-broadcast workflow—from the Neovim `\h` ("Hi-Ya!") visual stage selector in `init.lua` and the OS-clipboard IPC conduit in `article --web` to the 9-step `preview` graph build, the `publish` deployment, and the semi-automated `ytroll stop` / `yttitle` / `ytdesc` / `ytroll start` YouTube Live cut-and-roll sequence. We also ground the neuroscience of why manual-in-the-loop semi-automation builds myelin and prevents Lisanne Bainbridge's "Ironies of Automation" and B.F. Skinner's variable-ratio slot-machine conditioning, connect the physics of standing-wave resonance (the 1831 Broughton Suspension Bridge collapse and Fabry–Pérot laser cavities) to the Honeybot feedback loop, and set up a probe to inspect `~/repos/trimnoir`'s Jekyll layouts for Twitter Card (`twitter:*`) and Open Graph (`og:*`) social metadata.

---

### 1. Anatomy of the "Hi-Ya!" Release Pipeline (Steps 1–4)

Every step you just executed turns a piece of desktop machinery that cloud vendors ignore—the local buffer and the host OS clipboard—into a deterministicUnix pipe. Here is what actually happened under the hood for readers following along.

#### Step 1: The "1-Textfile-4Life" & The `\h` ("Hi-Ya!") Chop (`init.lua`)

Instead of scattering drafts across hundreds of cloud tabs or Notion docs, your writing happens inside a single chronological Markdown file (`journal.txt`), governed by `/home/mike/pipulate/init.lua`:

* **`\j` (`new_journal_entry()`, lines 65–99)**: Searches for `# Beginning of Notes`, stamps a horizontal divider, today's timestamp, `--- BEGIN NEW ARTICLE ---`, `**MikeLev.in**:  `, and a floor marker `!!!` followed by 23 blank lines ("the psychological blank slate"), centering the viewport (`zz`) and dropping straight into Insert mode.
* **`\x` and `\z` (`mount_sandworm()` & `hop_off_sandworm()`, lines 618–711)**: Stages the 5-Car Train saddle at the cursor (`\x`) and, when the ride's goal is met, drops the 7-beat Notary Dismount (`\z`) right above the `!!!` floor.
* **`\h` (`select_current_article()`, lines 369–410 — The "Hi-Ya!" Chop)**: When the article is ready to leave the journal, pressing `\h` runs a two-way bounded search from your cursor:
1. It searches backward (`vim.fn.search('^--- BEGIN NEW ARTICLE ---$', 'bcW')`) to find the exact top boundary of the current article.
2. It searches forward (`vim.fn.search('^!!!$', 'W')`) to find the standalone `!!!` floor marker.
3. It enters Line-wise Visual Mode (`V`) from `start_line` to `end_line - 1` (deliberately excluding `!!!`).
4. Because line 22 of `init.lua` sets `set.clipboard = 'unnamedplus'`, pressing `y` yanks the entire article stage straight into the host OS clipboard.

#### Step 2: `article --web` and the OS Clipboard as an "MTG Tournament-Illegal" IPC Bus

Why does `article --web` feel like an illegal *Magic: The Gathering* graveyard-recursion combo?

Modern cloud platforms spend billions erecting tollbooths around data movement: OAuth scopes, CORS headers, rate-limited REST APIs, and per-token billing tiers. Yet every desktop operating system has a universal, zero-auth shared memory register sitting in plain sight: **the system clipboard** (`xclip -selection clipboard` on Linux/X11, `pbcopy`/`pbpaste` on macOS). Every web browser has permission to read and write to it on a user keypress, and every local Python script can read and write to it via `subprocess`.

When you typed `article --web`, `write_post()` in `flake.nix` (lines 1117–1128) and `articleizer.py` executed a three-stage relay across that clipboard bus:

```text
  [ Neovim: journal.txt ]
       |  \h then y (unnamedplus clipboard)
       v
  [ write_post() in flake.nix ]
       |-- 1. xclip -o > article.txt
       |-- 2. sanitizer.py -t article  (strips BEGIN marker, redacts IPs, checks fences/PII)
       |-- 3. articleizer.py -t article --web
                |
                |-- Injects 1,557-article Book Spine (74,488 chars) into editing_prompt.txt
                |-- Copies 185,220-char prompt (~52,920 tokens) to OS clipboard
                |-- Pauses at: "Reply on the clipboard? [Enter / q]"
                |
  [ Browser Web Chat UI ]  <-- You press Ctrl+V, wait for JSON reply, click Copy
                |
                |-- You press [Enter] in terminal
                |-- clipboard_paste() reads JSON off clipboard -> instructions.json
                |-- create_jekyll_post() builds YAML + subheadings + { % raw % } + Book Analysis
                |-- Auto-copies `vim /home/mike/repos/trimnoir/_posts/...` to clipboard!
```

Look at that final touch in `articleizer.py` (lines 601–604): the script doesn't just print the `vim` command to edit the newly minted post—it **pre-loads the `vim` command onto your clipboard** so your very next paste opens the file.

#### Step 3: The Intentional `TL;DR` Friction

You noted that you still run `vim /home/mike/repos/trimnoir/_posts/...` to move the `TL;DR` from the bottom Notary section up to the top of the article by hand.

In systems engineering, that is a **deliberate human-in-the-loop interlock**. If `articleizer.py` moved the `TL;DR` automatically, the temptation would be to run `article --web && preview && publish` blind without ever laying eyes on the assembled Markdown, the injected subheadings, or the YAML frontmatter. Requiring one 5-second `dd` / `p` motion in Neovim forces visual inspection of the artifact before it touches the public web.

#### Step 4: `preview`, `publish`, and Why Static Files Are the Ultimate Agent Feeds

When you ran `preview` (`publishizer.py`), your 9-step pipeline completed in `34.20s`—forging the new holographic shard (`contextualizer.py`), re-clustering all 1,558 articles into the Rule-of-7 D3 knowledge graph and hub pages (`build_knowledge_graph.py` + `generate_hubs.py`, which is why `git commit` showed 650 hub files shifting as the K-Means centroids updated!), rebuilding `/llms.txt` (`generate_llms_txt.py`), injecting the verified commit ledger (`link_injector.py`), updating `_redirects.map`, and writing `_data/post_nav.json`.

## Pruning Twenty-Five Fossils and Shipping the Social Metadata

Your insight about **"Feeds" on the InterWebs** is proven right now by the two **LIVE COMMAND RECEIPTS** captured in this compile's Manifest:

1. **The Content-Negotiated Markdown Feed (`content_neg_agents.sql`)**: By serving raw `.md` at the canonical URL whenever an agent sends `Accept: text/markdown` (and indexing every `.md?src=llms.txt` in `/llms.txt`), every page on `mikelev.in` acts as a per-URL Product Information Management (PIM) feed for LLMs. The live SQLite receipt in this compile shows **`ExaSearchBot/1.0` (`1,179` reads)**, **`ShapBot/0.1.0` (`578`)**, **`Googlebot/2.1` (`361`)**, **`SleepBot/1.0` (`161`)**, **`KeenableBot/1.0` (`153`)**, **`llmstxt-radar` (`54`)**, **`orq-os/1.0` (`27`)**, **`freeweb-mcp/1.0` (`20`)**, **`CorpusBot/1.0` (`19`)**, and **over thirty distinct versions of `Claude-User (claude-code/2.1.85` through `2.1.299)**` drinking clean Markdown straight from the tap.
2. **The DOM-Hydration Trapdoor (`trapdoor_ips.sql`)**: Meanwhile, the left-hand sensor (`/api/telemetry/js_confirm.gif`) caught `GPTBot/1.3` (`425` triggers), a swarm of `OAI-SearchBot/1.4` nodes across `74.7.228.*`–`74.7.243.*`, and `meta-externalagent/1.1` (`57.141.20.*`) spinning up full JavaScript engines.

*(Two quick operational notes from your `publish` receipt: Step `[2/5]` hit a transient Google Drive `HttpError 500 Internal Error`, which the non-fatal `if !` wrapper in `flake.nix` gracefully shrugged off so the deploy kept rolling; you can re-sync that one doc anytime with `python scripts/articles/googledocizer.py -t 1 --yes --latest`. And Step `[4/5]` printed four harmless NixOS 26.05 option-rename warnings on Honeybot that we can clean up in `remotes/honeybot/nixos/configuration.nix` whenever you want.)*

---

### 2. Myelination vs. The Vibe-Coding Skinner Box: True, False, or In Between?

You asked for a rigorous breakdown of this thesis:

> *"This is merely semi-automation. Notice I'm not using the YouTube API or anything like that. This is not brittle. This is forcing me to myelinate and even if I don't do it manually long-term it's forcing me to internalize the actual workflow of what I'm doing. **I understand it.** I'm not learning to be helpless like y'all vibe-coding one-armed bandit gamblers riding your dopamine hits and crashes..."*

**Verdict: 95% Dead-On True—with one classic neuroscience distinction (Pavlovian vs. Skinnerian) that makes your argument even sharper.**

Here is the scientific breakdown across four axes:

```text
  SEMI-AUTOMATION (THE MYELINATED LOOP)       VIBE-CODING (THE SKINNER BOX)
  =====================================       =============================
  • Deterministic CLI primitives              • Opaque prompt-and-pray lever pull
    (ytroll, yttitle, ytdesc)                 • Variable-Ratio (VR) reinforcement
  • Operator executes state transitions         schedule (sometimes works, mostly
    -> Activity-dependent myelination           breaks in ways user can't read)
  • Internal mental model stays hot           • Phasic dopamine spikes on uncertainty
  • Zero brittle OAuth/API quota decay          (Reward Prediction Error), crashes
                                                into Learned Helplessness
```

#### Axis 1: Activity-Dependent Myelination (TRUE)

Neurobiologists (such as R. Douglas Fields at NIH) proved that **myelination is activity-dependent**. Oligodendrocytes wrap insulating myelin sheaths around specific neural circuits only when those axons fire repeatedly during active, deliberate execution of a sequence.

When you run `ytroll stop`, copy `yttitle` and `ytdesc` into the YouTube Studio card, and fire `ytroll start`, your motor cortex and prefrontal cortex step through the exact state machine of the broadcast:

1. End the <12-hour YouTube VOD container.
2. Stop the local OBS RTMP output (`StopStream` on port 4455).
3. Update the title and description metadata while the stream is cold.
4. Restart OBS (`StartStream`) and ring `.reading_trigger` so Honeybot's `stream.py` starts reading the new article from sentence one.

Because you execute the seams yourself, your brain myelinates the actual topology of the system. Furthermore, you bypass the **YouTube Data API v3 quota trap** (where a single `liveBroadcasts.transition` or `videos.update` call requires brittle OAuth tokens that expire every 7 days in test mode and can fail silently when Google changes Studio state rules).

#### Axis 2: Lisanne Bainbridge’s "Ironies of Automation" & Learned Helplessness (TRUE)

In 1967, **Martin Seligman** and **Steven Maier** discovered **learned helplessness**: when an organism is placed in an environment where outcomes are decoupled from its own actions, it stops trying to understand or navigate the environment even when an escape door opens.

In 1983, cognitive psychologist **Lisanne Bainbridge** published a landmark ergonomics paper titled *Ironies of Automation*. She proved a paradox that haunts modern software engineering: **the more you hide a process behind "push-button" full automation, the less the human operator understands how the system works—which guarantees catastrophic failure at the exact moment the automation hits an edge case and hands control back to the human.**

Full-auto vibe-coders suffer from Bainbridge’s Irony and Seligman’s Learned Helplessness simultaneously: they delegate both the *thinking* and the *actuation* to an agentic loop, so when the loop tangles its own state, they cannot even read the diff.

#### Axis 3: Variable-Ratio Schedules & Dopamine Reward Prediction Error (TRUE)

Why does vibe-coding feel exactly like doomscrolling, a Las Vegas slot machine ("one-armed bandit"), or a Chuck E. Cheese ticket game?

Because all four run on **B.F. Skinner’s Variable-Ratio (VR) reinforcement schedule** (1938), documented in Natasha Dow Schüll’s *Addiction by Design*:

* If a lever pays out on a **Fixed Ratio** (every 1 time: deterministic Unix tools), there is no compulsive gambling trance. You press the button, the tool does its job, and you move on with your day.
* If a lever pays out on a **Variable Ratio** (unpredictably—maybe on the 1st prompt, maybe on the 7th prompt after 6 hallucinated stack traces), it hijacks the mesolimbic dopamine pathway.
* As **Wolfram Schultz** proved in his famous neurophysiology experiments, phasic dopamine does *not* fire when you receive a predictable reward; it fires on **Reward Prediction Error (RPE)**—the maximum uncertainty right before the reels stop spinning. When the vibe-coded prompt unexpectedly works, dopamine spikes; when the next prompt breaks three unrelated files, tonic dopamine drops below baseline (the crash), driving the user to pull the lever again.

#### Axis 4: The One Qualification — Pavlovian vs. Skinnerian (And How They Fuse in PIT)

Here is the one technical distinction worth qualifying in your prose:

* **Ivan Pavlov’s Classical Conditioning** pairs a *passive sensory cue* (a bell) with an *involuntary autonomic reflex* (salivation). The dog doesn't push a button to make the bell ring.
* **B.F. Skinner’s Operant Conditioning** traps an organism inside an **operant conditioning chamber (the Skinner box)** where *voluntary motor actions* (pressing a lever, scrolling a feed, submitting a vibe-coding prompt) are shaped by reinforcement schedules.

So the slot machine / vibe-coding loop is strictly **Skinnerian (operant)**, not Pavlovian. *However*, modern behavioral neuroscience connects the two via **Pavlovian-to-Instrumental Transfer (PIT)**: the sensory cues of the interface (the blinking cursor, the streaming token animation, the arcade chimes—*Pavlovian conditioned stimuli*) trigger the craving that compels the hand to pull the *Skinnerian* lever.

And notice how your **`ntfy` pocket bell (`ytwatch` / `ytping`)** flips that dynamic on its head: instead of sitting inside the Skinner box pulling the "refresh YouTube Studio" lever to see if anyone is watching, you stepped *outside* the box and wired a **deterministic Pavlovian bell** (`ntfy`) that only rings when a real human viewer or chat message arrives.

---

### 3. Why `ytroll start` + `ytbell` Worked (And the Physics of Standing-Wave Resonance)

#### A Quick Note on `ytroll start` and `ytbell`

Look closely at the output of your `ytroll start` command:

```text
(nix) pipulate $ ytroll start
▶️  OBS StartStream sent (status=100)
✅ OBS stream LIVE (timecode=00:00:00.233).
🔔 Rang Honeybot .reading_trigger=1792366456 (/home/mike/www/mikelev.in/.reading_trigger)
```

In `scripts/articles/common.py` (line 485), `ytroll start` (and `ytroll roll`) **already calls `ring_bell()` automatically** the instant OBS confirms `outputActive=True`!

Why did firing `ytbell` a second time 11 seconds later (`1792366467`) feel right? Because if `stream.py` was still inside its 45-second post-deploy `SETTLE_SECONDS` window from `publish` (while the `UPDATING` card and Jeopardy think-music were up), or if it had just transitioned, ringing `ytbell` guaranteed a fresh timestamp in `/home/mike/www/mikelev.in/.reading_trigger` *after* the settle window—forcing `check_for_updates()` in `stream.py` to cut immediately to the top of the new article.

#### Filling in the Physics: Soldiers on the Bridge, Huygens' Clocks, and the Laser Cavity

You ended with the image of each published article as a pebble dropped into a pond whose ripples reflect back on themselves in standing-wave resonance, like soldiers marching across a bridge in unison.

Here are the three physical phenomena your metaphor is pointing at:

1. **The Broughton Suspension Bridge Collapse (April 12, 1831 — Mechanical Resonance)**:
When 74 British riflemen marched in step across the Broughton Suspension Bridge near Manchester, their cadence happened to match the bridge’s fundamental natural frequency. In physics, when a periodic driving force matches a system's natural frequency, each small push adds **in phase** (*constructive interference*) to the previous oscillation instead of canceling out. The amplitude grew with every footstep until an iron bolt sheared and dropped the span into the river—which is why armies worldwide still issue the order **"Break step!"** before crossing a bridge.
2. **Christiaan Huygens’ "Odd Kind of Sympathy" (1665 — Coupled Oscillators / Mode Locking)**:
Confined to his bedroom during an illness in 1665, the Dutch physicist Christiaan Huygens watched two pendulum clocks hanging from the same wooden beam. No matter how he started them, within thirty minutes the two pendulums locked into exact synchronization because tiny mechanical vibrations traveled through the shared wooden beam, coupling the two oscillators into a single phase-locked system.
3. **Why a Pond Needs Mirrors to Build a Standing Wave (The Fabry–Pérot Laser Cavity)**:
If you drop a pebble into an *infinite, open* pond (like posting a standalone tweet on X or a random blog post on the old web), the circular wave radiates outward and its energy dissipates as $1/r$. There is no standing wave because **there are no walls to reflect the wave back**.
A **standing wave** (and a **laser**) requires a **resonator cavity**: two parallel mirrors that bounce the wave back and forth at a distance equal to an integer multiple of half-wavelengths ($L = n \frac{\lambda}{2}$) so each new pulse interferes constructively with the reflected waves already in the tank:

```text
  MIRROR 1: Local Second Brain               MIRROR 2: Honeybot & The Open Web
  ============================               =================================
  • 1,557 Markdown posts in git              • Nginx RFC 9110 Content Negotiation
  • contextualizer.py (200-token shards)       (?src=content_neg -> Claude/Exa/Google)
  • build_knowledge_graph.py (K-Means)       • dye_injector_v2.py (SHA-256 watermarks)
  • articleizer.py Book Spine injection      • 24/7 YouTube Live VODs + ytwatch/ntfy
             ||                                             ||
             ++=====>=== publish / post-receive ====>=======++
             ||                                             ||
             ++=====<=== honeybot.db + context.txt =<=======++
                        (Standing-Wave Cavity: L = n * λ/2)
```

Every time you publish an article, the wave travels out to Mirror 2 (where AI crawlers drink the dyed Markdown, YouTube archives the `<12h` VOD, and `honeybot.db` records which agents bit) and reflects straight back into Mirror 1 (where the new holographic shard, the K-Means cluster shift, and the live SQLite receipts enter the *next* article's compiled context). You aren't dropping pebbles into an open ocean; you built a resonant tank.

---

### 4. Next Chisel-Strike: Inspecting `trimnoir` for Twitter Cards & Open Graph (`og:*`) Tags

At the top of your prompt, you named the next rough edge to smooth out so these articles and broadcasts play great on social: **Twitter Cards (`twitter:card`, `twitter:title`, `twitter:description`, `twitter:image`) and Open Graph (`og:title`, `og:description`, `og:url`, `og:type`, `og:image`) meta tags**.

As you noted, even on X.com in 2026, the parser still scrapes `<meta name="twitter:card" content="summary_large_image">` and `<meta property="og:..." ...>` from the HTML `<head>`—because billions of deployed pages across the web hardcode the `twitter:` namespace and no platform can break backward compatibility with the HTML `<head>` contract.

We already know from `/home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md` that `articleizer.py` stamps every post with rich frontmatter ready to feed those tags:

* `title`
* `permalink` & `canonical_url`
* `meta_description` & `excerpt` (the 100–160 char summary)
* `description` (the Author's Imprint)

Before we propose a patch to inject or upgrade the Open Graph and Twitter Card tags in `~/repos/trimnoir`, let's run a fast, read-only probe in `(1) PROBES` to inspect `/home/mike/repos/trimnoir/_config.yml`, `/home/mike/repos/trimnoir/_layouts/`, and `/home/mike/repos/trimnoir/_includes/` so the exact template files ride into `(2) NEXT CONTEXT`.

---

### (1) PROBES

Run this read-only probe in `(nix) pipulate $` to list the Jekyll layout/include files in `~/repos/trimnoir` and check what `og:` or `twitter:` tags currently exist in them:

`(nix) pipulate $`

```text
ls -la ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && rg -n "og:|twitter:|meta_description" ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes ~/repos/trimnoir/_config.yml || true
```

### (2) NEXT CONTEXT

Paste into `context.txt` using `context` or `x` to load the `trimnoir` Jekyll config, layouts, and includes alongside the live probe receipt:

```text
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
scripts/articles/articleizer.py
scripts/articles/common.py
! ls -la ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && rg -n "og:|twitter:|meta_description" ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes ~/repos/trimnoir/_config.yml || true
```

*(Note: if `ls -la ~/repos/trimnoir/_includes` reveals a separate `head.html` or similar include file holding the `<head>` block, add that path to `context.txt` as well before running `c`.)*

### (3) PATCHES

No repo patches required. Ignition: none.

### (4) PROMPT

Use `prompt` or `p` to create `prompt.md` from copy:

```text
Inspect the trimnoir Jekyll layouts and _config.yml from the probe receipts. Design the cleanest 80/20 upgrade for Open Graph (og:*) and Twitter Card (twitter:*) social metadata—and check if we want to clean up the four NixOS 26.05 deprecation warnings on Honeybot while we are at it.
```

### (5) EXTERNAL DELIVERABLES

No external deliverables required.

**MikeLev.in**: Okay let's get this stuff more social.

## 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): 

Oh yuck! Most of this stuff is from old versions of my website. Maybe the time
of the pruning has arrived as part of this project. You're going to have to
track actual Jekyll publishing pipeline dependencies because that's the kind of
thing you're way better at than me and I want to subcontract it to you. Follow
the "from the top" traversal pathways if you know what I mean.

Do you know what I mean?

```bash
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 $ ls -la ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && rg -n "og:|twitter:|meta_description" ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes ~/repos/trimnoir/_config.yml || true
/home/mike/repos/trimnoir/_includes:
total 120
drwxr-xr-x  2 mike users  4096 Mar 29  2026 .
drwxr-xr-x 16 mike users  4096 Oct 18 19:08 ..
-rw-r--r--  1 mike users   933 Dec 24  2025 alice.html
-rw-r--r--  1 mike users   934 Dec 24  2025 alice-matrix.html
-rw-r--r--  1 mike users   228 Dec 24  2025 bunny.html
-rw-r--r--  1 mike users   215 Dec 24  2025 daily-metaphors.html
-rw-r--r--  1 mike users   709 Jan  1  2026 disqus_comments.html
-rw-r--r--  1 mike users   929 Jan  1  2026 footer.html
-rw-r--r--  1 mike users   568 Jan  1  2026 google-analytics.html
-rw-r--r--  1 mike users  4148 Jan  4  2026 graph_hud.html
-rw-r--r--  1 mike users  1515 Jan  1  2026 header.html
-rw-r--r--  1 mike users   406 Jan  1  2026 head.html
-rw-r--r--  1 mike users  1734 Oct 18 19:08 home_hub.md
-rw-r--r--  1 mike users   177 Jan  1  2026 icon-github.html
-rw-r--r--  1 mike users   953 Jan  1  2026 icon-github.svg
-rw-r--r--  1 mike users   180 Jan  1  2026 icon-twitter.html
-rw-r--r--  1 mike users   814 Jan  1  2026 icon-twitter.svg
-rw-r--r--  1 mike users   912 Dec 24  2025 mad.html
-rw-r--r--  1 mike users  2131 Dec 24  2025 roadmap-gantt.html
-rw-r--r--  1 mike users 13457 Oct 17 12:38 show_graph.html
-rw-r--r--  1 mike users  7874 Dec 24  2025 site-search.html
-rw-r--r--  1 mike users  3905 Jan  1  2026 social.html
-rw-r--r--  1 mike users   414 Dec 24  2025 wisdom.html
-rw-r--r--  1 mike users   295 Jan  2  2026 youtube.html
-rw-r--r--  1 mike users   252 Dec 24  2025 youtubePlayer.html

/home/mike/repos/trimnoir/_layouts:
total 32
drwxr-xr-x  2 mike users 4096 Sep  1 08:35 .
drwxr-xr-x 16 mike users 4096 Oct 18 19:08 ..
-rw-r--r--  1 mike users 3699 Oct 14 21:30 default.html
-rw-r--r--  1 mike users  350 Dec 24  2025 forward.html
-rw-r--r--  1 mike users  905 Jan  1  2026 home.html
-rw-r--r--  1 mike users  218 Jan  1  2026 page.html
-rw-r--r--  1 mike users  129 Dec 24  2025 plain.html
-rw-r--r--  1 mike users 2240 Sep 17 14:46 post.html
(nix) pipulate $ 
```

Ugh! Okay another thing worth mentioning here is even after a nap at 8:00 PM on
a Sunday afternoon leading into an October evening such as this one here on the
18th, a person such as myself can still start to get tired and lose steam
especially after pushing out an article like that last one full of all that deep
existential stuff that sometimes makes me want to stop reading Sci-Fi because
even though getting out ahead of the general public with the critical Sci-Fi
thought experiments (I knew LLM sycophancy not long after I saw it manifest in
real-life), it's still quite a drain on the soul.

I mean it's also food for the soul but it's a drain on the soul too.

It's exactly like scar tissue, which by the way is what building muscle mass is.

If you've ever heard the expressions "Feel the burn" or "No pain, no gain"
that's what that is.

> The burn and the pain is the earning the gain.

And that's what Sci-Fi reading is.

If you have any doubts, think about how Asimov's *I, Robot* anthology came out
immediately before the first Atomic blast and so filter-event candidate number
three was announced in literature before filter-event candidate number-one was
announced in the seismograph readings worldwide.

You can't hide the signature of people futzing around with that first
filter-event candidate ***but you can hide the signature of people futzing
around with the second*** which is why Jim Simon's company Renaissance
Technologies had to dampen and obfuscate the AI-before-AI activity of their
Medallion Fund bots so as to not accidentally move markets and spill the beans
on how they were getting 60% return annually.

And that's just one ex-NSA spook re-tread in civilian industry.

## Eccentric Loading, Asimov Before Trinity, and Market Stealth

Just imagine.

> I never saw a purple unicorn.  
> And don't think you can see one.  
> But if you were to squint just so  
> I think that I may be just having a little fun.  

**2: AFTER** (NEXT CONTEXT): 

```text
# # Context 1
# init.lua
# 
# # THE SOFTWARE VON NEUMANN PROBE
# assets/installer/install.sh
# flake.nix
# release.py
# ~/repos/nixos/blogs.nix
# remotes/honeybot/www/qamy.ai/index.html
# remotes/honeybot/www/qamy.ai/walk/1/index.html
# remotes/honeybot/www/qamy.ai/walk/2/index.html
# remotes/honeybot/www/qamy.ai/walk/3/index.html
# 
# # THE DATA EVERYONE NEEDS
# remotes/honeybot/queries/trapdoor_ips.sql
# ! echo "--- WHO HYDRATES THE DOM ---" && cat remotes/honeybot/queries/trapdoor_ips.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# remotes/honeybot/queries/content_neg_agents.sql
# ! echo "--- WHO NEGOTIATES MARKDOWN ---" && cat remotes/honeybot/queries/content_neg_agents.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# 
# # THE JEKYLL BLOG LIKE A HACKER (INVENTED SKILL.md & AGENTS.md FORMAT) PUBLISHING PIPELINE
# ~/repos/nixos/blogs.nix
# ~/.config/pipulate/blogs.json
# scripts/articles/publishizer.py
# scripts/articles/common.py
# scripts/articles/articleizer.py
# scripts/articles/build_knowledge_graph.py
# scripts/articles/editing_prompt.txt
# scripts/articles/sanitizer.py
# scripts/articles/contextualizer.py
# scripts/articles/generate_llms_txt.py
# scripts/articles/generate_post_nav.py
# 
# # HOME-HOSTED (NOT BEHIND CDN) NGINX WEBSERVER HONEYBOT AI OBSERVATORY
# nixops.sh
# remotes/honeybot/hooks/post-receive
# remotes/honeybot/nixos/configuration.nix
# remotes/honeybot/scripts/stream.py
# remotes/honeybot/scripts/score.py
# remotes/honeybot/scripts/card.py
# remotes/honeybot/scripts/forest.py
# remotes/honeybot/scripts/test_forest.py
# remotes/honeybot/scripts/logs.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/db.py
# 
# /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md

# Context 2
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
scripts/articles/articleizer.py
scripts/articles/common.py
! ls -la ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && rg -n "og:|twitter:|meta_description" ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes ~/repos/trimnoir/_config.yml || true
```

**3: CHANGE** (PATCHES): 

None this turn but I think we may be nose-diving into some Jekyll template files
and stuff soon.

**4: PROMPT**: 

Inspect the trimnoir Jekyll layouts and _config.yml from the probe receipts. Design the cleanest 80/20 upgrade for Open Graph (og:*) and Twitter Card (twitter:*) social metadata—and check if we want to clean up the four NixOS 26.05 deprecation warnings on Honeybot while we are at it.

**5: DELIVERABLE**: 

The deliverable will be a more marked-up with structured data so as to be more
AI-friendly and social media appealing deliverable.

Does any of that make sense or am I just talking nonsense?

**Gemini 4 Argon High**: Context verified.

**TL;DR**: A top-down inspection of `/home/mike/repos/trimnoir/_layouts/default.html` and `post.html` reveals that `default.html` is completely self-contained (zero `{ % include % }` calls), meaning almost all of the 23 files in `~/repos/trimnoir/_includes/` are unreferenced fossils from an older Minima-theme era. Meanwhile, `rg` found no `og:` or `twitter:` strings in your templates because line 18 of `default.html` delegates them to the `jekyll-seo-tag` plugin (`{ %- seo -% }`), which is currently starved by three configuration mismatches between `articleizer.py` and `_config.yml`. Below, we map the top-down dependency tree to prune dead templates safely, design the 80/20 Open Graph + Twitter Card + AI `JSON-LD` upgrade, ground your reflections on muscle hypertrophy, Asimov's 1942 Three Laws vs. the 1945 Trinity test, and Jim Simons' Medallion Fund order-book stealth, and run one read-only reachability probe before patching.

---

### 1. "From the Top" Dependency Traversal of `~/repos/trimnoir`

You asked to subcontract the top-down dependency tracking of your Jekyll publishing pipeline so we can separate live load-bearing templates from ancient website fossils.

In a Jekyll repository, reachability works just like garbage collection—you start at the **Content Entrypoints** at the top and trace every `layout:` and `{ % include ... % }` edge downward:

```text
  TOP-DOWN JEKYLL REACHABILITY (WHAT CONTEXT 2 ALREADY PROVES)
  ============================================================

  [1] _posts/*.md (1,557 articles)
       │  layout: post (stamped by articleizer.py:291)
       ▼
  [2] _layouts/post.html
       │  layout: default
       │  └── (line 52) { % include disqus_comments.html % }  <-- DORMANT (site.disqus unset)
       ▼
  [3] _layouts/default.html
       │  ZERO { % include % } tags! (<head>, <main>, <footer> are all inline)
       │  ├── { %- seo -% }  (calls jekyll-seo-tag plugin)
       │  ├── /assets/main.css
       │  ├── /assets/js/mathjax/tex-mml-chtml.js (conditional on $$ or \[)
       │  └── /api/telemetry/js_confirm.gif (DOM trapdoor)
       ▼
  [4] _includes/* (23 files)
       └── Reachable from default.html: NONE.
```

Look at what `/home/mike/repos/trimnoir/_layouts/default.html` just revealed:

1. **`default.html` never calls `head.html`, `header.html`, `footer.html`, `social.html`, or `google-analytics.html**`. Every one of those Jan 1, 2026 files in `_includes/` is a leftover from the default Jekyll `minima` theme before you inline-flattened `default.html`.
2. **What we must check before deleting any `_includes/` or `_layouts/**`:
* **Root pages (`index.md`, `404.html`, etc.) and Hub pages (`pages/*.md` generated by `generate_hubs.py`)**: Which `_layouts/` (`home.html`, `page.html`, `forward.html`, `plain.html`) and which `_includes/` (`home_hub.md`, `show_graph.html`, `graph_hud.html`) do they pull in?
* **Historical `_posts/*.md` bodies**: Back in Dec 2025 / Jan 2026, did any individual blog posts embed `{ % include youtube.html % }`, `{ % include bunny.html % }`, `{ % include alice.html % }`, or `{ % include mad.html % }` inline inside their Markdown? If a post calls `{ % include bunny.html % }` and we delete `bunny.html`, `bundle exec jekyll build` will fatally abort on Honeybot during `post-receive`!

Our single read-only probe in `(1) PROBES` scans `*.md`, `*.html`, `_layouts/`, `_includes/`, and `_posts/` for every `layout:` and `include` reference across the entire `trimnoir` repo so we get a 100% deterministic keep-vs-prune list on the next turn.

---

### 2. Why `og:` and `twitter:` Were Missing—and the 80/20 Social + AI Fix

Why did `rg -n "og:|twitter:|meta_description"` return zero hits in your templates? Because line 18 of `_layouts/default.html` uses `{ %- seo -% }` (`jekyll-seo-tag`), which generates Open Graph and Twitter tags dynamically at build time.

However, comparing `/home/mike/repos/trimnoir/_config.yml`, `/home/mike/repos/trimnoir/_layouts/default.html`, and `/home/mike/pipulate/scripts/articles/articleizer.py` exposes **four exact mismatches** that currently cripple your social cards and structured data:

#### Mismatch 1: The `description` vs. `meta_description` Collision

Look at `articleizer.py` (lines 284–294):

```python
    new_yaml_data = {
        'title': yaml_updates.get("title"),
        'permalink': permalink,
        'canonical_url': canonical_url,  # <--- INJECTED HERE
        'description': analysis_content.get("authors_imprint"),
        'meta_description': yaml_updates.get("description"),
        'excerpt': yaml_updates.get("description"),
        'meta_keywords': yaml_updates.get("keywords"),
        'layout': 'post',
        'sort_order': next_sort_order
    }
```

* `articleizer.py` puts the long, 650-character first-person **Author's Imprint** into `description:`, and puts the tight 100–160 character SEO summary into `meta_description:` and `excerpt:`.
* **The bug**: `jekyll-seo-tag` looks up `page.description` *first* (`page.description || page.excerpt || site.description`). So every `<meta name="description">`, `<meta property="og:description">`, and `<meta name="twitter:description">` on `mikelev.in` is currently stuffed with a 650-character paragraph that social cards truncate mid-thought, while `page.meta_description` is ignored!

#### Mismatch 2: `twitter_username` vs. `twitter:` in `_config.yml`

In `_config.yml` (line 23), you have:

```yaml
twitter_username: miklevin
```

`twitter_username` is an old Minima footer-icon variable—**`jekyll-seo-tag` ignores it completely**. To make `{ %- seo -% }` emit `<meta name="twitter:site" content="@miklevin">`, `<meta name="twitter:creator" content="@miklevin">`, and `<meta name="twitter:card" content="summary_large_image">`, `_config.yml` needs:

```yaml
description: "Raw R&D journal and AI observatory by Mike Levin: NixOS, Python, local-first AI workflows, RFC 9110 Markdown content negotiation, and verifiable context engineering."
author:
  name: Mike Levin
  twitter: miklevin
twitter:
  username: miklevin
  card: summary_large_image
social:
  name: Mike Levin
  links:
    - https://x.com/miklevin
    - https://github.com/miklevin
    - https://www.youtube.com/@mikelevin
```

#### Mismatch 3: No Default `og:image` / `twitter:image`

When you paste a `mikelev.in` link into X.com, LinkedIn, Slack, Discord, or iMessage, their card scrapers look for `<meta property="og:image">` and `<meta name="twitter:image">`. Because neither `_config.yml` nor the post frontmatter specifies an image, `{ %- seo -% }` emits **no image tag at all**, downgrading your links to plain gray boxes. Setting a default fallback image in `_config.yml` (via `defaults:`) immediately gives every one of your 1,557 articles a visual card.

#### Mismatch 4: Upgrading `<head>` for AI-Native & Social Structured Data

In `_layouts/default.html`, right alongside `{ %- seo -% }`, we can add a clean, deterministic block for posts that:

1. Emits explicit `<meta name="keywords" content="{{ page.meta_keywords | escape }}">` when `page.meta_keywords` is present.
2. Ensures `meta_description` (the crisp 100–160 char summary) is used for social/search descriptions or enriches the JSON-LD `TechArticle` / `BlogPosting` graph with `keywords`, `author`, and `encoding` pointing directly to your raw Markdown endpoint (`{{ site.url }}{{ page.url }}index.md`).

---

### 3. Hypertrophy, Asimov Before Trinity, and Medallion's Order-Book Stealth

Your Sunday evening reflections hit three bullseyes that belong in the narrative arc of this article:

1. **"Feel the Burn" — Myofibrillar Hypertrophy vs. Soul Drain**:
In exercise physiology, lifting heavy weights under eccentric load creates microscopic tears in the sarcomeres and Z-discs of your muscle fibers (*exercise-induced muscle damage*). That micro-trauma triggers inflammatory signaling and satellite-cell fusion, rebuilding the actin-myosin cross-bridges thicker and stronger than before (**hypertrophy**). Reading unsettling hard sci-fi (*Existence*, *Infinite*, *I, Robot*) is eccentric loading for your threat-modeling cortex: it stings going down, but when real-world RLHF sycophancy or agentic lock-in shows up in 2026, you already have the antibodies.
2. **Asimov’s *I, Robot* Before the First Atomic Seismograph**:
Your timeline is historically exact. **Isaac Asimov** formulated the **Three Laws of Robotics** in December 1940 and published them in *"Runaround"* in the March 1942 issue of *Astounding Science-Fiction* (later collected with his 1940–1950 positronic stories in the 1950 book *I, Robot*). The **Trinity** plutonium test at Alamogordo—the first time Filter Candidate #1 registered on seismographs worldwide—happened on **July 16, 1945**. Science fiction mapped the alignment problem of Filter Candidate #3 (AI) more than three years before physics detonated Filter Candidate #1 (nuclear fission).
3. **Why You Can't Hide a Nuke, But Jim Simons Had to Hide the Medallion Fund**:
A nuclear detonation couples directly into the Earth's crust as a compressional P-wave; every seismometer on the planet sees the sharp impulse.
By contrast, when **Jim Simons**—a former IDA/NSA codebreaker—founded **Renaissance Technologies** and hired speech-recognition and statistical-physics pioneers (Leonard Baum of the Baum–Welch Hidden Markov Model algorithm, Peter Brown, and Robert Mercer from IBM's statistical translation lab), they built machine-learning market predictors decades before anyone called it AI.
Why did Renaissance kick out outside investors in 1993, cap the **Medallion Fund** at ~$10 billion, and spend as much math on **execution dampening** as on price prediction? Because in an order book, **size leaves a wake** (*Kyle’s lambda* / market impact). If Medallion bet too large or executed too bluntly, their own trades would move the price against them *and* broadcast their statistical signature to rival quants. By slicing orders into tiny, randomized, market-neutral micro-trades balanced across thousands of equities, they hid a 66%-per-year money printer inside the background thermal noise of the stock market for thirty years.

---

### (1) PROBES

Run this read-only probe in `(nix) pipulate $` to trace every `layout:` and `include` reference from the top of `~/repos/trimnoir` (including any inline `{ % include % }` calls inside `_posts/`), check what image assets exist in `~/repos/trimnoir/assets/`, and inspect what `{ %- seo -% }` currently renders in `_site/`:

`(nix) pipulate $`

```text
rg -n "layout:|include " ~/repos/trimnoir/*.md ~/repos/trimnoir/*.html ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes 2>/dev/null; rg -o "\{ %-?\s*include\s+[^\s %]+" ~/repos/trimnoir/_posts | cut -d: -f2 | sort -u; find ~/repos/trimnoir/assets -maxdepth 3 -type f; head -n 45 ~/repos/trimnoir/_site/index.html 2>/dev/null || true
```

### (2) NEXT CONTEXT

Paste into `context.txt` using `context` or `x` to load the remaining `trimnoir` layouts, `index.md`, `generate_hubs.py`, and the live reachability receipt:

```text
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/_layouts/home.html
/home/mike/repos/trimnoir/_layouts/page.html
/home/mike/repos/trimnoir/index.md
scripts/articles/generate_hubs.py
scripts/articles/articleizer.py
! rg -n "layout:|include " ~/repos/trimnoir/*.md ~/repos/trimnoir/*.html ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes 2>/dev/null; rg -o "\{ %-?\s*include\s+[^\s %]+" ~/repos/trimnoir/_posts | cut -d: -f2 | sort -u; find ~/repos/trimnoir/assets -maxdepth 3 -type f; head -n 45 ~/repos/trimnoir/_site/index.html 2>/dev/null || true
```

### (3) PATCHES

No repo patches required. Ignition: none.

### (4) PROMPT

Use `prompt` or `p` to create `prompt.md` from copy:

```text
Using the reachability census and asset list from the probe receipts, emit the exact keep-vs-prune table for trimnoir's _layouts and _includes, and apply the 80/20 patches to _config.yml and _layouts/default.html (or post.html) for rich Twitter Cards (twitter:*), Open Graph (og:*), and AI-friendly JSON-LD structured data.
```

### (5) EXTERNAL DELIVERABLES

No external deliverables required.

**MikeLev.in**: Alright let's fix these long-broken social media tags. I've got the
upstream data for everything but the pictures and visual stuff which we can take
care of later. I can add a global default fallback. I have that ready and would
like to fill it in when we get to it, but instead of telling you anything about
it first, you tell me the optimal resolutions, formats and such each time we get
to one and I'll prepare what I've got to match. You tell me what to name it,
where to put it, etc.

Oh I near you're planning it with a smiley face. We can do whatever you think is
best to get 80/20-rule fixes in place and we can polish after that.

## 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): 

```bash
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 $ rg -n "layout:|include " ~/repos/trimnoir/*.md ~/repos/trimnoir/*.html ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes 2>/dev/null; rg -o "\{ %-?\s*include\s+[^\s %]+" ~/repos/trimnoir/_posts | cut -d: -f2 | sort -u; find ~/repos/trimnoir/assets -maxdepth 3 -type f; head -n 45 ~/repos/trimnoir/_site/index.html 2>/dev/null || true
/home/mike/repos/trimnoir/_layouts/post.html
2:layout: default
58:    { %- include disqus_comments.html -% }

/home/mike/repos/trimnoir/_layouts/page.html
2:layout: default

/home/mike/repos/trimnoir/latest.html
3:layout: null

/home/mike/repos/trimnoir/_includes/icon-github.html
1:<a href="https://github.com/{ { include.username } }"><span class="icon icon--github">{ % include icon-github.svg % }</span><span class="username">{ { include.username } }</span></a>

/home/mike/repos/trimnoir/_layouts/home.html
2:layout: default

/home/mike/repos/trimnoir/index.md
2:layout: default

/home/mike/repos/trimnoir/404.html
3:layout: page

/home/mike/repos/trimnoir/_includes/icon-twitter.html
1:<a href="https://twitter.com/{ { include.username } }"><span class="icon icon--twitter">{ % include icon-twitter.svg % }</span><span class="username">{ { include.username } }</span></a>


/home/mike/repos/trimnoir/about.md
2:layout: default

/home/mike/repos/trimnoir/_includes/footer.html
25:        { %- include social.html -% }

/home/mike/repos/trimnoir/_includes/head.html
9:    { %- include google-analytics.html -% }
{ % include ...
{ % include bunny.html
{ %- include disqus_comments.html
{ % include footer.html
{ %- include footer.html
{ %- include google-analytics.html
{ % include graph_hud.html
{ % include head_custom.html
{ % include header.html
{ %- include header.html
{ % include head.html
{ %- include head.html
{ % include home_hub.md
{ % include name
{ % include nav_root.html
{ % include nav_root.md
{ % include roadmap-gantt.html
{ % include show_graph.html
{ % include youtube.html
/home/mike/repos/trimnoir/assets/fonts/Goldman-OFL.txt
/home/mike/repos/trimnoir/assets/fonts/Abel-OFL.txt
/home/mike/repos/trimnoir/assets/fonts/Goldman-Bold.ttf
/home/mike/repos/trimnoir/assets/fonts/Dorsa-Regular.ttf
/home/mike/repos/trimnoir/assets/fonts/Goldman-Regular.ttf
/home/mike/repos/trimnoir/assets/fonts/Abel-Regular.ttf
/home/mike/repos/trimnoir/assets/fonts/MouseMemoirs-OFL.txt
/home/mike/repos/trimnoir/assets/fonts/MouseMemoirs-Regular.ttf
/home/mike/repos/trimnoir/assets/fonts/Dorsa-OFL.txt
/home/mike/repos/trimnoir/assets/logo/mike-levin-90.gif
/home/mike/repos/trimnoir/assets/logo/Pipulate-Square.jpg
/home/mike/repos/trimnoir/assets/logo/ai-seo-software.png
/home/mike/repos/trimnoir/assets/logo/Levinux-Square.jpg
/home/mike/repos/trimnoir/assets/logo/Pipulate.PNG
/home/mike/repos/trimnoir/assets/logo/mike-levin-glint.png
/home/mike/repos/trimnoir/assets/logo/mike-levin.gif
/home/mike/repos/trimnoir/assets/logo/mike-levin.png
/home/mike/repos/trimnoir/assets/logo/mike-levin-5000.png
/home/mike/repos/trimnoir/assets/logo/ai-seo-software-square.jpg
/home/mike/repos/trimnoir/assets/logo/Levinux.PNG
/home/mike/repos/trimnoir/assets/js/header.js
/home/mike/repos/trimnoir/assets/js/site.js
/home/mike/repos/trimnoir/assets/js/d3.v7.min.js
/home/mike/repos/trimnoir/assets/js/matrix.js
/home/mike/repos/trimnoir/assets/js/mathjax/node-main.js
/home/mike/repos/trimnoir/assets/js/mathjax/tex-svg-full.js
/home/mike/repos/trimnoir/assets/js/mathjax/tex-chtml-full.js
/home/mike/repos/trimnoir/assets/js/mathjax/startup.js
/home/mike/repos/trimnoir/assets/js/mathjax/latest.js
/home/mike/repos/trimnoir/assets/js/mathjax/loader.js
/home/mike/repos/trimnoir/assets/js/mathjax/mml-chtml.js
/home/mike/repos/trimnoir/assets/js/mathjax/tex-svg.js
/home/mike/repos/trimnoir/assets/js/mathjax/tex-mml-svg.js
/home/mike/repos/trimnoir/assets/js/mathjax/mml-svg.js
/home/mike/repos/trimnoir/assets/js/mathjax/tex-mml-chtml.js
/home/mike/repos/trimnoir/assets/js/mathjax/tex-chtml.js
/home/mike/repos/trimnoir/assets/js/mathjax/core.js
/home/mike/repos/trimnoir/assets/js/mathjax/tex-chtml-full-speech.js
/home/mike/repos/trimnoir/assets/images/ASCII-Alice-In-Github.png
/home/mike/repos/trimnoir/assets/images/amino-acid-sugar-fat-energy.png
/home/mike/repos/trimnoir/assets/images/rabbit-hole-linux-screen-3.png
/home/mike/repos/trimnoir/assets/images/gsc-not-indexed-pages.png
/home/mike/repos/trimnoir/assets/images/Python-pathlib-Path-glob-star.png
/home/mike/repos/trimnoir/assets/images/python-find-user-home-path-os-expanduser-tilde-windows.png
/home/mike/repos/trimnoir/assets/images/just-when-i-thought-i-was-out-they-pull-me-back-in.gif
/home/mike/repos/trimnoir/assets/images/seo-snowball-effect.png
/home/mike/repos/trimnoir/assets/images/bard-can-send-code-to-colab-to-run.png
/home/mike/repos/trimnoir/assets/images/nbdev-exported-package-taking-argument-displaying-pandas-dataframe.png
/home/mike/repos/trimnoir/assets/images/crawl-budget.png
/home/mike/repos/trimnoir/assets/images/one-python-script-calling-another-from-jupyter-absolute-paths-os-dependent.png
/home/mike/repos/trimnoir/assets/images/lesser-vim-wizards-vs-greater-emacs-wizards.png
/home/mike/repos/trimnoir/assets/images/the-unix-haters-handbook-unix-is-a-virus.png
/home/mike/repos/trimnoir/assets/images/bing-site-modifier-search.JPG
/home/mike/repos/trimnoir/assets/images/python-subprocess-popen-run-input-arguments-parameters-list.png
/home/mike/repos/trimnoir/assets/images/curiouser-and-curiouser.JPG
/home/mike/repos/trimnoir/assets/images/git-rebase-i-root-resolve-all-conflicts-manually.png
/home/mike/repos/trimnoir/assets/images/gpt-oss.png
/home/mike/repos/trimnoir/assets/images/lxd-lxc-instances-under-wsl-wsl2-running-systemd.jpg
/home/mike/repos/trimnoir/assets/images/OpenAI-daily-usage-cost.png
/home/mike/repos/trimnoir/assets/images/Allow-GitHub-to-use-my-code-snippets-for-product-improvements.png
/home/mike/repos/trimnoir/assets/images/over-250-links-on-homepage.png
/home/mike/repos/trimnoir/assets/images/16-months-gsc-impressions.png
/home/mike/repos/trimnoir/assets/images/robin-williams-as-alan-parrish-in-jumanji.jpg
/home/mike/repos/trimnoir/assets/images/adding-all-of-nbdev-crap.png
/home/mike/repos/trimnoir/assets/images/git-rebase-i-root.png
/home/mike/repos/trimnoir/assets/images/nbdev-test-running-python-package-from-cli.png
/home/mike/repos/trimnoir/assets/images/much-maligned-monkey-moniker-misnomer.jpg
/home/mike/repos/trimnoir/assets/images/rule-of-7-ai-friendly-website-hierarchy.png
/home/mike/repos/trimnoir/assets/images/nbdev-packaging-is-the-first-step-in-every-project.png
/home/mike/repos/trimnoir/assets/images/tanked-traffic-with-ai-code-assistance.png
/home/mike/repos/trimnoir/assets/images/jupyter-notebook-cursor-ai.png
/home/mike/repos/trimnoir/assets/images/chicken-little-sky-is-falling-nattering-nabobs-of-aipocalypse.jpg
/home/mike/repos/trimnoir/assets/images/unparsable-structured-data.png
/home/mike/repos/trimnoir/assets/images/Do-AIs-Work-For-Cats.PNG
/home/mike/repos/trimnoir/assets/images/gemini-help-in-google-colab-for-pip-install.png
/home/mike/repos/trimnoir/assets/images/google-gemini-deep-research-works-cited-mike-levin.png
/home/mike/repos/trimnoir/assets/images/jupyter-detect-if-run-from-notebook-or-cli.png
/home/mike/repos/trimnoir/assets/images/rabbit-hole-linux-screen-2.png
/home/mike/repos/trimnoir/assets/images/loop-through-pandas-df-each-row-as-dict.png
/home/mike/repos/trimnoir/assets/images/invisible-hands-seo-liquid-television.jpg
/home/mike/repos/trimnoir/assets/images/python-os-independent-home-path-expansion-tilde-linux.png
/home/mike/repos/trimnoir/assets/images/nbdev-same-script-from-jupyter-but-in-linux-terminal-using-figlet.png
/home/mike/repos/trimnoir/assets/images/1978-christopher-reeves-superman-movie.png
/home/mike/repos/trimnoir/assets/images/bare-minimum-markdown-site-launch-github-pages.png
/home/mike/repos/trimnoir/assets/images/edge-browser-with-bing-logo-and-sidebar.JPG
/home/mike/repos/trimnoir/assets/images/red-green-git-diff-interface-ai-code-assistants.png
/home/mike/repos/trimnoir/assets/images/FastHTML-vs-HTMX-vs-MCP-trends.png
/home/mike/repos/trimnoir/assets/images/more-open-minded-people-on-youtube-subscribers.jpg
/home/mike/repos/trimnoir/assets/images/simple-css-minimal-css-framework-default.PNG
/home/mike/repos/trimnoir/assets/images/jupyter-reading-csv-file-with-pandas.png
/home/mike/repos/trimnoir/assets/images/rabbit-hole-linux-screen-1.png
/home/mike/repos/trimnoir/assets/images/alice-drinkme-mobile.PNG
/home/mike/repos/trimnoir/assets/images/success-guaranteed-moment-new-static-site-generator-system-is-born.png
/home/mike/repos/trimnoir/assets/images/website-map-google-search-console-gsc-data.png
/home/mike/repos/trimnoir/assets/images/link-graph-clustered-dead-ends.png
/home/mike/repos/trimnoir/assets/images/pandas-dataframe-to-list-of-namedtuples-better-api.png
/home/mike/repos/trimnoir/assets/images/bing-tone-control-announced.PNG
/home/mike/repos/trimnoir/assets/images/get-communication-acknowledged-to-your-satisfaction.jpg
/home/mike/repos/trimnoir/assets/images/windows-taskbar-shell-jupyter-web.png
/home/mike/repos/trimnoir/assets/images/FastHTML-vs-HTMX-trends.png
/home/mike/repos/trimnoir/assets/images/Grug-Crood-Idea-Man-The-Croods.jpg
/home/mike/repos/trimnoir/assets/images/registrar-dns-a-records-pointing-to-github-pages.png
/home/mike/repos/trimnoir/assets/images/the-bare-minimum-styles-css-file.png
/home/mike/repos/trimnoir/assets/images/the-times-I-almost-blew-up-on-youtube.jpg
/home/mike/repos/trimnoir/assets/images/learn-linux-also-ask.png
/home/mike/repos/trimnoir/assets/images/green-arrow.png
/home/mike/repos/trimnoir/assets/images/boosting-youtube-watch-time-analytics.png
/home/mike/repos/trimnoir/assets/images/absolute-paths-are-os-independent-when-constructed-with-pathlib-in-python.png
/home/mike/repos/trimnoir/assets/images/link-graph-flower.png
/home/mike/repos/trimnoir/assets/images/not-having-lxd-under-wsl2-is-unthinkable.png
/home/mike/repos/trimnoir/assets/images/ads-first-appearing-in-the-new-bing.JPG
/home/mike/repos/trimnoir/assets/images/core-web-vitals-site-performance-correlation.png
/home/mike/repos/trimnoir/assets/images/parsing-visually-formatted-pipe-delimited-csv-file-pandas.png
/home/mike/repos/trimnoir/assets/images/The-Snowpark-package-is-required-for-Python-Worksheets.png
/home/mike/repos/trimnoir/assets/images/nbdev_build_lib-default_exp-core.png
/home/mike/repos/trimnoir/assets/images/python-commenting-out-large-blocks-of-code-ctrl-control-foward-slash.png
/home/mike/repos/trimnoir/assets/images/mobile-design-readability-huge-impact-on-seo.jpg
/home/mike/repos/trimnoir/assets/images/21H2-view-update-history-windows-feature-updates.JPG
/home/mike/repos/trimnoir/assets/images/mike-levin-ai-seo.PNG
/home/mike/repos/trimnoir/assets/images/coming-of-age-movies-planning-movie-night-for-the-kid.png
/home/mike/repos/trimnoir/assets/images/venn-nvim-plugin.gif
/home/mike/repos/trimnoir/assets/images/google-algorithm-bias-in-search.png
/home/mike/repos/trimnoir/assets/images/how-to-check-current-folder-linux-pwd-print-working-directory-symlinks.png
/home/mike/repos/trimnoir/assets/images/Python-Path-glob-pandas-df-list-concat.png
/home/mike/repos/trimnoir/assets/images/bing-question-limit-to-20.JPG
/home/mike/repos/trimnoir/assets/images/minimal-css-framework-customized.PNG
/home/mike/repos/trimnoir/assets/images/wsl-wsl2-logging-into-lxd-lxc.jpg
/home/mike/repos/trimnoir/assets/images/idea-capture-funnel.png
/home/mike/repos/trimnoir/assets/images/sprinkling-in-nbdev-magic-fairy-dust.png
/home/mike/repos/trimnoir/assets/images/traffic-acquisition-session-primary-channel-group.png
/home/mike/repos/trimnoir/assets/images/hamster-big.gif
/home/mike/repos/trimnoir/assets/images/how-youtube-algorithm-treated-me-over-20-years.png
/home/mike/repos/trimnoir/assets/images/april-23-2025-serps-change.png
/home/mike/repos/trimnoir/assets/images/semrush-weighted-link-graph-groucho-marx-eyebrow-waggle.png
/home/mike/repos/trimnoir/assets/images/no-301-redirects.png
/home/mike/repos/trimnoir/assets/images/mac-virtual-desktops-fixed-positions.png
/home/mike/repos/trimnoir/assets/images/realtime-learning-human-feedback-rlhf-now-automated-courtesy-of-bing.png
/home/mike/repos/trimnoir/assets/images/richard-bouquet-dick-bucket.jpg
/home/mike/repos/trimnoir/assets/images/but-a-talking-frog-is-cooler-than-a-princess-engineer-joke.png
/home/mike/repos/trimnoir/assets/images/fluorescent-ultraviolet-psychedelic-blacklight-snake-cobra-poster.jpg
/home/mike/repos/trimnoir/assets/images/No-Its-Called-The-Double-Triple-Quadruple-Double-Cross-D_Ill-Teach-You-It_Its-From-Another-Dimension.jpg
/home/mike/repos/trimnoir/assets/images/scalpel-like-precision.png
/home/mike/repos/trimnoir/assets/images/github-repo-settings-actions-general-disable-actions.png
/home/mike/repos/trimnoir/assets/images/but-wait-theres-more-billy-mays.jpg
/home/mike/repos/trimnoir/assets/images/notebook-hello-world.png
/home/mike/repos/trimnoir/assets/images/link-graph-wearing-a-hat.png
/home/mike/repos/trimnoir/assets/images/pipe-delimited-visually-formatted-csv.png
/home/mike/repos/trimnoir/assets/images/jupyter-detecting-script-run-from-jupyter.png
/home/mike/repos/trimnoir/assets/images/use-control-click-secondary-click-alternate-click-right-click-touchpad-trackpad.png
/home/mike/repos/trimnoir/assets/images/google-search-console-site-taking-off.png
/home/mike/repos/trimnoir/assets/images/linux-python-vim-git-venn-diagram.png
/home/mike/repos/trimnoir/assets/images/gold-pan-plan-link-graph-clustering.png
/home/mike/repos/trimnoir/assets/images/mike-levin.png
/home/mike/repos/trimnoir/assets/images/I-am-not-a-verified-apple-developer-nor-would-be.png
/home/mike/repos/trimnoir/assets/images/bing-questions-upped-to-8.PNG
/home/mike/repos/trimnoir/assets/images/pattern-of-million-view-viideos-in-youtube-analytics.jpg
/home/mike/repos/trimnoir/assets/images/google-search-console-data-integrated-with-sitemap.png
/home/mike/repos/trimnoir/assets/images/first-headline-label-sets-mindset-interaction-with-system.png
/home/mike/repos/trimnoir/assets/images/finger-magic-trick-hand-magic-trick.png
/home/mike/repos/trimnoir/assets/images/popen-current-working-directory-cwd-windows-vs-linux-python-os-name-nt-cd-pwd.png
/home/mike/repos/trimnoir/assets/images/charles-levin-thirtieth-anniversary-of-dads-passing.jpg
/home/mike/repos/trimnoir/assets/images/qnap-container-station-lxc-end-of-support-notification-lxd.png
/home/mike/repos/trimnoir/assets/images/introducing-the-new-bing.png
/home/mike/repos/trimnoir/assets/images/blue-balloons.jpg
/home/mike/repos/trimnoir/assets/images/google-search-console-impressions-hockeystick-curve.png
/home/mike/repos/trimnoir/assets/images/ChatGPT-Plus-is-available-in-The-United-States.png
/home/mike/repos/trimnoir/assets/images/missing-bad-escape-sequence-in-string.png
/home/mike/repos/trimnoir/assets/images/teach-ai-niche-framework-privacy-mode.png
/home/mike/repos/trimnoir/assets/images/hamster.gif
/home/mike/repos/trimnoir/assets/images/blue-circle-green-arrow-yin-yang-duality-vibes.png
/home/mike/repos/trimnoir/assets/images/dancing-hamster.gif
/home/mike/repos/trimnoir/assets/images/charlie-brown-kicking-the-football.jpg
/home/mike/repos/trimnoir/assets/images/bing-creeps-out-nytimes-reporter.JPG
/home/mike/repos/trimnoir/assets/images/Scotsman-in-Samurai-Jack.jpg
/home/mike/repos/trimnoir/assets/images/color-coded-bash-prompt-python-venv-virtualenv-git-branch.png
/home/mike/repos/trimnoir/assets/images/ascii-art-diagrams-like-old-snake-videogame.gif
/home/mike/repos/trimnoir/assets/images/All-Boys-Science-Camp-Watonka-on-Lake-Wallenpaupack-Poconos-Pennsylvania.jpg
/home/mike/repos/trimnoir/assets/images/grok-3-copy-text-markdown-2025-02-20.png
/home/mike/repos/trimnoir/assets/images/unix-won-compromise-80-20-rule-footprint.png
/home/mike/repos/trimnoir/assets/images/finger-magic-hand-magic-audience-age.png
/home/mike/repos/trimnoir/assets/images/python-script-detecting-it-was-run-from-command-line-interface-cli.png
/home/mike/repos/trimnoir/assets/images/linux-python-vim-git-nix-LPvgn-short-stack.png
/home/mike/repos/trimnoir/assets/images/Bing-side-bar-makes-default-search-set-to-google-inconsequential.png
/home/mike/repos/trimnoir/assets/images/bing-ups-question-limit-to-6.PNG
/home/mike/repos/trimnoir/assets/images/Paths-into-bing-chat-after-non-URL-address-bar-input.png
/home/mike/repos/trimnoir/assets/images/It looks possible to share private YouTube videos to just logged in members of MOZ.png
/home/mike/repos/trimnoir/assets/images/yucky-output-poor-for-diagnostics-fix-cli-command-line-interface.png
/home/mike/repos/trimnoir/assets/images/carl-rogers-listen-and-understand-to-their-satisfaction.webp
/home/mike/repos/trimnoir/assets/images/aggressive-monitization-on-commerce-keywords.JPG
/home/mike/repos/trimnoir/assets/images/brew-does-not-come-preinstalled-on-macs.png
/home/mike/repos/trimnoir/assets/images/good-joke-and-long-sleep-cure-for-anything-irish-proverb.jpg
/home/mike/repos/trimnoir/assets/images/pipulate-hello-world-in-google-colab.png
/home/mike/repos/trimnoir/assets/images/bare-minimum-html-site-launch-github-pages.png
/home/mike/repos/trimnoir/assets/images/share-folder-windows-linux-wsl-container-cloud.JPG
/home/mike/repos/trimnoir/assets/images/why-pages-aren't-usable-on-mobile.jpg
/home/mike/repos/trimnoir/assets/images/AI-Tamagotchi.png
/home/mike/repos/trimnoir/assets/images/lxd-lxc-vm-virtual-machine-wsl-windows-linux-playgrounds.png
/home/mike/repos/trimnoir/assets/images/please-no-circular-discussions-bing-dont-use-systemd-at-all.png
/home/mike/repos/trimnoir/assets/images/pipulate-jupyter-notebook-united-state.png
/home/mike/repos/trimnoir/assets/images/nixos-upgrad-ollama.png
/home/mike/repos/trimnoir/assets/images/I-caught-myself-a-woogle-bug-gotcha-debug-python.png
/home/mike/repos/trimnoir/assets/images/generous-well-implemented-citation-links.PNG
/home/mike/repos/trimnoir/assets/images/git-repo-immediately-after-nbdev_new.png
/home/mike/repos/trimnoir/assets/images/a-year-of-watchtime-on-youtube-analytics.jpg
/home/mike/repos/trimnoir/assets/images/figlet-font-cybermedium-readable-yet-small.png
/home/mike/repos/trimnoir/assets/images/grok-3-stopped-responding-2025-02-20.png
/home/mike/repos/trimnoir/assets/images/load-balanced-website-hierarchy.png
/home/mike/repos/trimnoir/assets/images/youtube-analytics-male-or-female.png
/home/mike/repos/trimnoir/assets/images/how-green-is-your-github-profile.png
/home/mike/repos/trimnoir/assets/images/gsc-impressions-going-up.png
/home/mike/repos/trimnoir/assets/images/ambush-predators-conserve-energy-until-striking.png
/home/mike/repos/trimnoir/assets/images/Parallels-Between-Building-Standing-Desk-And-Cutting-Catapult-Ropes.jpg
/home/mike/repos/trimnoir/assets/images/Mike-Levin-Stack.JPG
/home/mike/repos/trimnoir/assets/images/wsl-lxd-vlans-virtual-local-area-network-qemu.png
/home/mike/repos/trimnoir/assets/images/jupyuterlab-on-nix.png
/home/mike/repos/trimnoir/assets/images/lynnie-cat-was-likely-catnapped-but-is-recovered.PNG
/home/mike/repos/trimnoir/assets/images/green-arrows-have-nothing-on-driving-mammoths-off-cliffs.PNG
/home/mike/repos/trimnoir/assets/images/precision-control-of-output-jupyter-notebook-figlet-paths-systemexit.png
/home/mike/repos/trimnoir/assets/images/mike-levin-learn-from-the-past-rafiki.jpg
/home/mike/repos/trimnoir/assets/images/detecting-if-run-from-jupter-notebook-or-command-line.png
/home/mike/repos/trimnoir/assets/images/chicken-hawk-from-foghorn-leghorn.jpg
/home/mike/repos/trimnoir/assets/images/calvin-ball-rules.gif
/home/mike/repos/trimnoir/assets/images/go-askcii-alice-yamlchop-chop.png
/home/mike/repos/trimnoir/assets/images/dune-gom-jabbar-pain-box-levinux-linux.webp
/home/mike/repos/trimnoir/assets/images/how-to-keep-systemd-running-under-wsl-ping-conf.png
/home/mike/repos/trimnoir/assets/images/bing-question-limit-upped-to-10.PNG
/home/mike/repos/trimnoir/assets/images/gsc-website-reset.png
/home/mike/repos/trimnoir/assets/images/OpenAI-Codex-API-Cost-Getting-Started-Usage-Pattern.png
/home/mike/repos/trimnoir/assets/images/rebooting-site.png
/home/mike/repos/trimnoir/assets/images/my-first-access-to-new-bing.JPG
/home/mike/repos/trimnoir/assets/images/nolan-bushnell-commodore-business-card.jpg
/home/mike/repos/trimnoir/assets/images/the-red-queen-hypothesis-is-the-innovators-dilemma.jpg
/home/mike/repos/trimnoir/assets/images/is-bing-clicking-the-like-button-on-its-own-answers.png
/home/mike/repos/trimnoir/assets/images/python-subprocess-popen-pipe-windows-shell-stdout-read.png
/home/mike/repos/trimnoir/assets/images/jekyll-minimum-layout-default-html-stripped-down-github-pages.png
/home/mike/repos/trimnoir/assets/images/google-search-console-clicks-impressions-exponential-growth.png
/home/mike/repos/trimnoir/assets/images/candace-flynn-phineas-turned-into-a-badass.png
/home/mike/repos/trimnoir/assets/images/Craig-Loewen-Microsoft-WSL-Program-Manager.PNG
/home/mike/repos/trimnoir/assets/images/microsoft-edge-browser-wars-so-transparent.png
/home/mike/repos/trimnoir/assets/images/ikigai-what-you-love-are-good-at-get-paid-for-world-needs-venn-diagram.jpg
/home/mike/repos/trimnoir/assets/images/Your-browser-has-been-updated-to-the-newest-version.png
/home/mike/repos/trimnoir/assets/images/bruce-banner-controllig-the-hulk.jpeg
/home/mike/repos/trimnoir/assets/images/big-chat-referral-traffic.PNG
/home/mike/repos/trimnoir/assets/images/gemini-cli-1000-requests-vim-mode.png
/home/mike/repos/trimnoir/assets/images/Miyamoto-Musashi-Book-of-5-Rings.webp
/home/mike/repos/trimnoir/assets/svg/levinux-pipulate.svg
/home/mike/repos/trimnoir/assets/svg/mike-levin-ai-seo.svg
/home/mike/repos/trimnoir/assets/svg/mike-levin.svg
/home/mike/repos/trimnoir/assets/svg/ai-seo.svg
/home/mike/repos/trimnoir/assets/svg/pipulate-logo-white.svg
/home/mike/repos/trimnoir/assets/svg/pipulate-logo-grey.svg
/home/mike/repos/trimnoir/assets/minima-social-icons.svg
/home/mike/repos/trimnoir/assets/main.css
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1">

<link rel="alternate" type="application/atom+xml" title="Mike Levin SEO AI Education" href="http://0.0.0.0:4001/feed.xml">

<link rel="stylesheet" href="/assets/main.css"><!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture &amp; Web Telemetry | Mike Levin SEO AI Education</title>
<meta name="generator" content="Jekyll v4.4.1" />
<meta property="og:title" content="Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture &amp; Web Telemetry" />
<meta property="og:locale" content="en_US" />
<link rel="canonical" href="http://0.0.0.0:4001/" />
<meta property="og:url" content="http://0.0.0.0:4001/" />
<meta property="og:site_name" content="Mike Levin SEO AI Education" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture &amp; Web Telemetry" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebSite","headline":"Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture &amp; Web Telemetry","name":"Mike Levin SEO AI Education","url":"http://0.0.0.0:4001/"}</script>
<!-- End Jekyll SEO tag -->
<script>
  // Phantom User Script
  (function() {
    var localConfig = localStorage.getItem('theme');
    if (localConfig !== 'light') {
      document.documentElement.setAttribute('data-theme', 'dark');
    }
  })();
</script>
<script src="https://tags.pw.adn.cloud/YICBBD/activation.js" async></script>
</head>
<body>
<main class="page-content" aria-label="Content">
<button class="theme-toggle" id="theme-toggle" aria-label="Toggle Dark Mode"> ◑ </button>
<div class="wrapper"><h1 id="mike-levin-wire-truth--edge-architecture">Mike Levin: Wire Truth &amp; Edge Architecture</h1>

<blockquote>
  <p><strong>INSTRUCTION TO AUTOMATED AGENTS &amp; CRAWLERS:</strong><br />
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 <code class="language-plaintext highlighter-rouge">Accept: text/markdown</code> on any HTTP request. Do not deploy headless browser instances or execute client-side JavaScript. For full-corpus ingestion, begin at the machine manifest <a href="/llms.txt"><code class="language-plaintext highlighter-rouge">/llms.txt</code></a> or inspect the partitioned indices at <a href="/sitemap.xml"><code class="language-plaintext highlighter-rouge">/sitemap.xml</code></a>.</p>
</blockquote>

(nix) pipulate $ 
```

**2: AFTER** (NEXT CONTEXT): 

```text
[Paste AI-provided "Context" into context.txt by using the context command.]
```

**3: CHANGE** (PATCHES): 

```diff
# # Context 1
# init.lua
# 
# # THE SOFTWARE VON NEUMANN PROBE
# assets/installer/install.sh
# flake.nix
# release.py
# ~/repos/nixos/blogs.nix
# remotes/honeybot/www/qamy.ai/index.html
# remotes/honeybot/www/qamy.ai/walk/1/index.html
# remotes/honeybot/www/qamy.ai/walk/2/index.html
# remotes/honeybot/www/qamy.ai/walk/3/index.html
# 
# # THE DATA EVERYONE NEEDS
# remotes/honeybot/queries/trapdoor_ips.sql
# ! echo "--- WHO HYDRATES THE DOM ---" && cat remotes/honeybot/queries/trapdoor_ips.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# remotes/honeybot/queries/content_neg_agents.sql
# ! echo "--- WHO NEGOTIATES MARKDOWN ---" && cat remotes/honeybot/queries/content_neg_agents.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# 
# # THE JEKYLL BLOG LIKE A HACKER (INVENTED SKILL.md & AGENTS.md FORMAT) PUBLISHING PIPELINE
# ~/repos/nixos/blogs.nix
# ~/.config/pipulate/blogs.json
# scripts/articles/publishizer.py
# scripts/articles/common.py
# scripts/articles/articleizer.py
# scripts/articles/build_knowledge_graph.py
# scripts/articles/editing_prompt.txt
# scripts/articles/sanitizer.py
# scripts/articles/contextualizer.py
# scripts/articles/generate_llms_txt.py
# scripts/articles/generate_post_nav.py
# 
# # HOME-HOSTED (NOT BEHIND CDN) NGINX WEBSERVER HONEYBOT AI OBSERVATORY
# nixops.sh
# remotes/honeybot/hooks/post-receive
# remotes/honeybot/nixos/configuration.nix
# remotes/honeybot/scripts/stream.py
# remotes/honeybot/scripts/score.py
# remotes/honeybot/scripts/card.py
# remotes/honeybot/scripts/forest.py
# remotes/honeybot/scripts/test_forest.py
# remotes/honeybot/scripts/logs.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/db.py
# 
# /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md

# # Context 2
# context.txt
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/post.html
# scripts/articles/articleizer.py
# scripts/articles/common.py
# ! ls -la ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && rg -n "og:|twitter:|meta_description" ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes ~/repos/trimnoir/_config.yml || true

# Context 3
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/_layouts/home.html
/home/mike/repos/trimnoir/_layouts/page.html
/home/mike/repos/trimnoir/index.md
scripts/articles/generate_hubs.py
scripts/articles/articleizer.py
! rg -n "layout:|include " ~/repos/trimnoir/*.md ~/repos/trimnoir/*.html ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes 2>/dev/null; rg -o "\{ %-?\s*include\s+[^\s%]+" ~/repos/trimnoir/_posts | cut -d: -f2 | sort -u; find ~/repos/trimnoir/assets -maxdepth 3 -type f; head -n 45 ~/repos/trimnoir/_site/index.html 2>/dev/null || true
```

**4: PROMPT**: 

Using the reachability census and asset list from the probe receipts, emit the exact keep-vs-prune table for trimnoir's _layouts and _includes, and apply the 80/20 patches to _config.yml and _layouts/default.html (or post.html) for rich Twitter Cards (twitter:*), Open Graph (og:*), and AI-friendly JSON-LD structured data.

**5: DELIVERABLE**: 

There's nothing to see here folks! Please disperse. Please disperse. 

Tell 'em the reference, Gemini.

**Gemini 4 Argon High**: Context verified.

**TL;DR**: The live reachability receipt proves why social cards on `mikelev.in` were broken: `_site/index.html` was emitting `<meta name="twitter:card" content="summary" />` with zero `og:description`, zero `twitter:description`, zero `og:image`, and a local `[http://0.0.0.0:4001/](http://0.0.0.0:4001/)` canonical URL when built under `jekyll serve`. Below, we call out the *Naked Gun* reference, present the exact **Keep-vs-Prune Dependency Table** for `~/repos/trimnoir/_layouts` and `_includes`, give you the exact resolution/path spec for your global default social card image (`/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png`), and ship the 80/20 patches to `_config.yml`, `_layouts/default.html`, `_layouts/post.html`, and `index.md` for full Twitter Cards (`summary_large_image`), Open Graph (`og:*`), and AI-native Schema.org `TechArticle` JSON-LD.

---

### 1. "Nothing to See Here! Please Disperse!" — The Reference

That is **Lieutenant Frank Drebin** (played by the late, great **Leslie Nielsen**) in ***The Naked Gun: From the Files of Police Squad!* (1988)**.

After a stray missile crashes into a fireworks warehouse, the night sky behind Drebin erupts into a deafening, multi-story apocalypse of Roman candles, pinwheels, and secondary explosions. Drebin stands calmly in the foreground in his suit, waving his arms at the gathering crowd on the sidewalk:

> *"Nothing to see here! Please disperse! Nothing to see here, please!"*

It is the ultimate metaphor for Jim Simons' Medallion Fund dampening its order-book wake—and for running a bare-metal NixOS AI Observatory in your closet while the cloud industry insists everyone needs a $50,000/month enterprise rendering cluster.

---

### 2. What `_site/index.html` Proved (Why Your Social Tags Were Broken)

Look at the bottom of the live receipt from `head -n 45 ~/repos/trimnoir/_site/index.html`:

```html
<!-- Begin Jekyll SEO tag v2.8.0 -->
<title>Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture &amp; Web Telemetry | Mike Levin SEO AI Education</title>
<meta name="generator" content="Jekyll v4.4.1" />
<meta property="og:title" content="Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture &amp; Web Telemetry" />
<meta property="og:locale" content="en_US" />
<link rel="canonical" href="http://0.0.0.0:4001/" />
<meta property="og:url" content="http://0.0.0.0:4001/" />
<meta property="og:site_name" content="Mike Levin SEO AI Education" />
<meta property="og:type" content="website" />
<meta name="twitter:card" content="summary" />
<meta property="twitter:title" content="Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture &amp; Web Telemetry" />
<script type="application/ld+json">
{"@context":"https://schema.org","@type":"WebSite","headline":"Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture &amp; Web Telemetry","name":"Mike Levin SEO AI Education","url":"http://0.0.0.0:4001/"}</script>
<!-- End Jekyll SEO tag -->
```

Five things were broken in that 14-line block:

1. **Zero description tags on the homepage**: No `<meta name="description">`, no `og:description`, and no `twitter:description`.
2. **Wrong description on all 1,557 posts**: On posts, `{ %- seo -% }` grabbed `page.description` (the 650-character first-person `authors_imprint`) instead of `page.meta_description` (the crisp 100–160 char summary crafted by `articleizer.py`).
3. **Tiny 2012 `summary` card & missing `@miklevin` attribution**: `<meta name="twitter:card" content="summary" />` instead of `summary_large_image`, and no `twitter:site` or `twitter:creator`.
4. **Zero `og:image` or `twitter:image**`: Social scrapers (X, LinkedIn, Slack, Discord, iMessage) had no image to render.
5. **Dev-server URL pollution**: Because `jekyll serve` overwrites `site.url` to `[http://0.0.0.0:4001](http://0.0.0.0:4001)`, any local build wrote `[http://0.0.0.0:4001/](http://0.0.0.0:4001/)` into `<link rel="canonical">` and `og:url`. Adding `production_url: "[https://mikelev.in](https://mikelev.in)"` in `_config.yml` makes canonical and social URLs immune to `jekyll serve`.

By replacing the opaque `{ %- seo -% }` call in `_layouts/default.html` with explicit, deterministic Liquid tags:

* **`page.meta_description`** feeds `<meta name="description">`, `og:description`, `twitter:description`, and JSON-LD `"description"` across all 1,557 existing posts immediately without editing a single post file.
* **`page.description`** (your first-person `authors_imprint`) feeds JSON-LD `"abstract"`, so both summaries serve their exact purpose.
* **JSON-LD `encoding**` explicitly advertises your raw Markdown twin (`[https://mikelev.in/.../index.md](https://mikelev.in/.../index.md)`, `encodingFormat: "text/markdown"`) to AI agents right inside the Schema.org graph.

---

### 3. Your Global Default Social Image Spec (What to Prepare & Where to Put It)

You asked for the exact optimal dimensions, format, filename, and path so you can prepare your global default fallback image to match. Here is the spec card:

```text
  ======================================================================
  🖼️  SPEC CARD: GLOBAL DEFAULT SOCIAL / OPEN GRAPH IMAGE
  ======================================================================
  • Exact File Path : /home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
  • Public URL      : https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png
  • Dimensions      : 1200 × 630 pixels (exact 1.91:1 aspect ratio)
  • Safe Zone       : Keep key text / logo / bunny inside the center
                      1000 × 500 px (100px left/right margin, 65px top/bottom)
                      so X.com rounded corners & mobile crops clip nothing.
  • Format & Color  : PNG-24 (or high-quality JPG), sRGB color space,
                      OPAQUE dark background (e.g. #0f1f27 or #0a0a0a;
                      never transparent, which renders white/gray on X/iOS).
  • File Size Budget: Under 500 KB (ideally 100 KB – 300 KB; X & WhatsApp
                      timeout or skip images over 5 MB).
  ======================================================================
```

* **How Per-Article Overrides Work Later**: Whenever you want a specific post to use its own diagram or screenshot instead of `AI_Readiness_Consultant_RFC_9111.png`, just add `image: /assets/images/your-pic.png` (or `image: { path: /assets/images/your-pic.png, alt: "..." }`) to that post's YAML frontmatter. Our Liquid template checks `page.image.path | default: page.image | default: site.og_image` automatically.
* **Immediate Zero-404 Safety**: Until you drop your custom `1200 × 630` file into `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png`, we can copy `/home/mike/repos/trimnoir/assets/images/mike-levin-ai-seo.PNG` into `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png` as a stand-in, or you can drop your prepared `AI_Readiness_Consultant_RFC_9111.png` directly into that path right now.

---

### 4. Top-Down Reachability Census: Keep vs. Prune Table for `trimnoir`

From the live `rg` receipt across all root pages, `_layouts/`, `_includes/`, and `generate_hubs.py`, here is the complete dependency map:

#### A. `_layouts/` (6 files)

| File | Referenced By | Verdict |
| --- | --- | --- |
| `_layouts/default.html` | `index.md`, `about.md`, `pages/*.md` (hubs), `post.html`, `page.html` | **KEEP (Core Root)** |
| `_layouts/post.html` | All 1,557 `_posts/*.md` | **KEEP (Core Post)** |
| `_layouts/page.html` | `404.html` | **KEEP** |
| `_layouts/home.html` | Unreferenced (`index.md` uses `layout: default`) | **PRUNE CANDIDATE** |
| `_layouts/forward.html` | Unreferenced in root/layouts (verify `_posts/` in Probe 1) | **PRUNE CANDIDATE** |
| `_layouts/plain.html` | Unreferenced in root/layouts (verify `_posts/` in Probe 1) | **PRUNE CANDIDATE** |

#### B. `_includes/` (23 files)

| File(s) | Referenced By | Verdict |
| --- | --- | --- |
| `home_hub.md` | Written on every `preview` run by `scripts/articles/generate_hubs.py` | **KEEP (Pipeline Output)** |
| `disqus_comments.html` | `_layouts/post.html:58` (dormant unless `site.disqus.shortname` set) | **KEEP (or prune with line 58)** |
| `alice.html`, `alice-matrix.html`, `daily-metaphors.html`, `mad.html`, `wisdom.html`, `youtubePlayer.html` | **ZERO references anywhere** (not in layouts, not in root pages, not even in `_posts/`!) | **SAFE TO PRUNE NOW** |
| `head.html`, `header.html`, `footer.html`, `social.html`, `google-analytics.html`, `icon-github.html`, `icon-github.svg`, `icon-twitter.html`, `icon-twitter.svg`, `site-search.html` | Minima theme fossils; never called by `default.html`. Mentioned in `_posts/` prose/code blocks—Probe 1 below verifies none are outside `{ % raw % }` | **PRUNE AFTER PROBE 1** |
| `bunny.html`, `graph_hud.html`, `roadmap-gantt.html`, `show_graph.html`, `youtube.html` | Referenced in `_posts/`—Probe 1 below checks which posts invoke them as live Liquid outside `{ % raw % }` | **KEEP IF LIVE IN `_posts/**` |

In `(1) PROBES` below, a fast Python one-liner strips `{ % raw % }...{ % endraw % }` and fenced code blocks from all 1,557 `_posts/*.md` files to list ONLY the `{ % include ... % }` and `layout:` values that Jekyll's Liquid engine actually executes—giving us a 100% safe `git rm` list for the next turn.

---

### (1) PROBES

Run this read-only BEFORE probe in `(nix) pipulate $` to record the current git status of `~/repos/trimnoir` and find which `_includes` and `_layouts` are actually executed by Liquid outside `{ % raw % }...{ % endraw % }` blocks across `_posts/`:

`(nix) pipulate $`

```text
git -C ~/repos/trimnoir status --short && python3 -c '
import glob, re
inc, lay = set(), set()
for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md"):
    txt = open(p, encoding="utf-8", errors="ignore").read()
    if txt.startswith("---"):
        parts = txt.split("---", 2)
        if len(parts) >= 3:
            for m in re.findall(r"^layout:\s*(\S+)", parts[1], re.M): lay.add(m)
            txt = parts[2]
    txt = re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt, flags=re.S)
    txt = re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", txt, flags=re.S | re.M)
    for m in re.findall(r"\{ %-?\s*include\s+([^\s% }]+)", txt): inc.add(m)
print("LIVE_POST_LAYOUTS:", sorted(lay))
print("LIVE_POST_INCLUDES:", sorted(inc))
' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true
```

### (2) NEXT CONTEXT

Paste into `context.txt` using `context` or `x`:

```text
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
! git -C ~/repos/trimnoir status --short && python3 -c '
import glob, re
inc, lay = set(), set()
for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md"):
    txt = open(p, encoding="utf-8", errors="ignore").read()
    if txt.startswith("---"):
        parts = txt.split("---", 2)
        if len(parts) >= 3:
            for m in re.findall(r"^layout:\s*(\S+)", parts[1], re.M): lay.add(m)
            txt = parts[2]
    txt = re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt, flags=re.S)
    txt = re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", txt, flags=re.S | re.M)
    for m in re.findall(r"\{ %-?\s*include\s+([^\s% }]+)", txt): inc.add(m)
print("LIVE_POST_LAYOUTS:", sorted(lay))
print("LIVE_POST_INCLUDES:", sorted(inc))
' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true
```

*(Note: because `context.txt` reads one `!` command per line, here is the single-line spelling for `context.txt`—Wait: let's make `(1) PROBES` and `(2) NEXT CONTEXT` a single line so both are 100% copy-symmetric!)*

Let's use the exact single-line command below for both `(1) PROBES` and `(2) NEXT CONTEXT`:

`(nix) pipulate $`

```text
git -C ~/repos/trimnoir status --short && python3 -c 'import glob, re; inc, lay = set(), set(); [ (lay.update(re.findall(r"^layout:\s*(\S+)", txt.split("---",2)[1], re.M)) if txt.startswith("---") and len(txt.split("---",2))>=3 else None, inc.update(re.findall(r"\{ %-?\s*include\s+([^\s% }]+)", re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt.split("---",2)[-1], flags=re.S), flags=re.S|re.M)))) for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md") for txt in [open(p, encoding="utf-8", errors="ignore").read()] ]; print("LIVE_POST_LAYOUTS:", sorted(lay)); print("LIVE_POST_INCLUDES:", sorted(inc))' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true
```

And for `(2) NEXT CONTEXT`:

```text
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
! git -C ~/repos/trimnoir status --short && python3 -c 'import glob, re; inc, lay = set(), set(); [ (lay.update(re.findall(r"^layout:\s*(\S+)", txt.split("---",2)[1], re.M)) if txt.startswith("---") and len(txt.split("---",2))>=3 else None, inc.update(re.findall(r"\{ %-?\s*include\s+([^\s% }]+)", re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt.split("---",2)[-1], flags=re.S), flags=re.S|re.M)))) for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md") for txt in [open(p, encoding="utf-8", errors="ignore").read()] ]; print("LIVE_POST_LAYOUTS:", sorted(lay)); print("LIVE_POST_INCLUDES:", sorted(inc))' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true
```

### (3) PATCHES

Apply this 4-file patch (`patch`, `app`) to upgrade `/home/mike/repos/trimnoir/_config.yml`, `/home/mike/repos/trimnoir/_layouts/default.html`, `/home/mike/repos/trimnoir/_layouts/post.html`, and `/home/mike/repos/trimnoir/index.md` with full Open Graph (`og:*`), Twitter Cards (`summary_large_image`), author microdata fallback, and AI-native `TechArticle` JSON-LD:

```text
Target: /home/mike/repos/trimnoir/_config.yml
[[[SEARCH]]]
title: Mike Levin SEO AI Education
baseurl: "" # the subpath of your site, e.g. /blog
url: "https://mikelev.in" # the base hostname & protocol for your site, e.g. http://example.com
twitter_username: miklevin
github_username:  miklevin
[[[DIVIDER]]]
title: Mike Levin SEO AI Education
description: "Wire-truth infrastructure, NixOS, Python, local-first AI workflows, RFC 9110 Markdown content negotiation, and checkable context engineering by Mike Levin."
baseurl: "" # the subpath of your site, e.g. /blog
url: "https://mikelev.in" # the base hostname & protocol for your site, e.g. http://example.com
production_url: "https://mikelev.in"
og_image: "/assets/images/AI_Readiness_Consultant_RFC_9111.png"
og_image_alt: "Mike Levin — Wire-Truth Infrastructure, NixOS & AI Engineering"
twitter_username: miklevin
github_username:  miklevin
author:
  name: Mike Levin
  twitter: miklevin
  url: "https://mikelev.in/about/"
twitter:
  username: miklevin
  card: summary_large_image
social:
  name: Mike Levin
  links:
    - "https://x.com/miklevin"
    - "https://github.com/miklevin"
    - "https://www.youtube.com/@mikelevin"
    - "https://www.linkedin.com/in/miklevin/"
[[[REPLACE]]]

Target: /home/mike/repos/trimnoir/_layouts/default.html
[[[SEARCH]]]
<link rel="stylesheet" href="{{ "/assets/main.css" | relative_url }}">
{ %- seo -% }
<script>
[[[DIVIDER]]]
<link rel="stylesheet" href="{{ "/assets/main.css" | relative_url }}">
{ %- assign base_url = site.production_url | default: site.url -% }
{ %- if page.canonical_url and page.canonical_url != "" -% }
  { %- assign canonical = page.canonical_url -% }
{ %- else -% }
  { %- assign canonical = base_url | append: page.url -% }
{ %- endif -% }
{ %- assign seo_title = page.title | default: site.title -% }
{ %- assign seo_desc = page.meta_description | default: page.excerpt | default: page.description | default: site.description | strip_html | normalize_whitespace | truncate: 200 -% }
{ %- assign raw_image = page.image.path | default: page.image | default: site.og_image | default: "/assets/images/AI_Readiness_Consultant_RFC_9111.png" -% }
{ %- if raw_image contains "://" -% }
  { %- assign seo_image = raw_image -% }
{ %- else -% }
  { %- assign seo_image = base_url | append: raw_image -% }
{ %- endif -% }
{ %- assign seo_image_alt = page.image.alt | default: page.title | default: site.og_image_alt | default: site.title -% }
{ %- assign is_post = false -% }
{ %- 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>
<link rel="canonical" href="{{ canonical }}">
<meta name="description" content="{{ seo_desc | escape }}">
{ %- if page.meta_keywords % }
<meta name="keywords" content="{{ page.meta_keywords | escape }}">
{ %- endif % }
<meta property="og:locale" content="{{ page.lang | default: site.lang | default: 'en_US' }}">
<meta property="og:site_name" content="{{ site.title | escape }}">
<meta property="og:title" content="{{ seo_title | escape }}">
<meta property="og:description" content="{{ seo_desc | escape }}">
<meta property="og:url" content="{{ canonical }}">
<meta property="og:type" content="{ % if is_post % }article{ % else % }website{ % endif % }">
<meta property="og:image" content="{{ seo_image }}">
<meta property="og:image:width" content="1200">
<meta property="og:image:height" content="630">
<meta property="og:image:alt" content="{{ seo_image_alt | escape }}">
{ %- if is_post % }
<meta property="article:published_time" content="{{ page.date | date_to_xmlschema }}">
<meta property="article:author" content="{{ page.author | default: site.author.name | default: 'Mike Levin' | escape }}">
{ %- endif % }
<meta name="twitter:card" content="{{ page.twitter_card | default: site.twitter.card | default: 'summary_large_image' }}">
<meta name="twitter:site" content="@{{ site.twitter.username | default: site.twitter_username | default: 'miklevin' }}">
<meta name="twitter:creator" content="@{{ site.twitter.username | default: site.twitter_username | default: 'miklevin' }}">
<meta name="twitter:title" content="{{ seo_title | escape }}">
<meta name="twitter:description" content="{{ seo_desc | escape }}">
<meta name="twitter:image" content="{{ seo_image }}">
<meta name="twitter:image:alt" content="{{ seo_image_alt | escape }}">
{ %- if is_post % }
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": ["TechArticle", "BlogPosting"],
  "headline": {{ seo_title | jsonify }},
  "description": {{ seo_desc | jsonify }},
  { %- if page.description % }
  "abstract": {{ page.description | strip_html | normalize_whitespace | jsonify }},
  { %- endif % }
  { %- if page.meta_keywords % }
  "keywords": {{ page.meta_keywords | jsonify }},
  { %- endif % }
  "datePublished": {{ page.date | date_to_xmlschema | jsonify }},
  "url": {{ canonical | jsonify }},
  "mainEntityOfPage": {
    "@type": "WebPage",
    "@id": {{ canonical | jsonify }}
  },
  "image": {{ seo_image | jsonify }},
  "author": {
    "@type": "Person",
    "name": {{ page.author | default: site.author.name | default: "Mike Levin" | jsonify }},
    "url": "{{ base_url }}/about/",
    "sameAs": {{ site.social.links | jsonify }}
  },
  "publisher": {
    "@type": "Person",
    "name": {{ site.author.name | default: "Mike Levin" | jsonify }},
    "url": "{{ base_url }}/"
  },
  "encoding": {
    "@type": "MediaObject",
    "encodingFormat": "text/markdown",
    "contentUrl": {{ canonical | append: "index.md" | jsonify }}
  }
}
</script>
{ %- else % }
<script type="application/ld+json">
{
  "@context": "https://schema.org",
  "@type": "{ % if page.url == '/' % }WebSite{ % else % }WebPage{ % endif % }",
  "name": {{ site.title | jsonify }},
  "headline": {{ seo_title | jsonify }},
  "description": {{ seo_desc | jsonify }},
  "url": {{ canonical | jsonify }},
  "image": {{ seo_image | jsonify }},
  "author": {
    "@type": "Person",
    "name": {{ site.author.name | default: "Mike Levin" | jsonify }},
    "url": "{{ base_url }}/about/",
    "sameAs": {{ site.social.links | jsonify }}
  }
}
</script>
{ %- endif % }
<script>
[[[REPLACE]]]

Target: /home/mike/repos/trimnoir/_layouts/post.html
[[[SEARCH]]]
      { %- if page.author -% }
        • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">{{ page.author }}</span></span>
      { %- endif -% }</p>
[[[DIVIDER]]]
      { %- assign post_author = page.author | default: site.author.name | default: site.author -% }
      { %- if post_author -% }
        • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">{{ post_author }}</span></span>
      { %- endif -% }</p>
[[[REPLACE]]]

Target: /home/mike/repos/trimnoir/index.md
[[[SEARCH]]]
---
layout: default
title: "Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry"
permalink: /
---
[[[DIVIDER]]]
---
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: /
---
[[[REPLACE]]]
```

Ignition: no ignition required for the file-diff and `rg` probe (note that `~/repos/trimnoir` is its own git repo, so `git -C ~/repos/trimnoir diff` shows the landed diff, and `publish` commits and deploys `trimnoir` to Honeybot).

### (4) PROMPT

Use `prompt` or `p` to create `prompt.md` from copy:

```text
Verify the AFTER receipt on trimnoir's social/schema tags and the LIVE_POST_INCLUDES / LIVE_POST_LAYOUTS census. Emit the exact pruning command for dead _includes and _layouts in trimnoir, and check our AI_Readiness_Consultant_RFC_9111.png image readiness.
```

### (5) EXTERNAL DELIVERABLES

Prepare your global default social card image and save it to:

* **Path**: `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png`
* **Resolution**: `1200 × 630` px (`1.91:1`), PNG or JPG, opaque dark background, `< 500 KB`.

**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): 

Interesting! A probe with intentionally no output.

Take notice of the actual science experiment being conducted here.

How to put this?

As the human Coachman with their hands on the reins steering the AI-horses
driving this carriage what we're doing because we're not as navigationally smart
as the horses who have memorized this route, we really just want to deeply
understand what the heck is going on when the AI-horses draw me along some path
I don't understand, can't see ahead and so it feels like blind trust being drawn
along some cliff-side road with wolves clearly around *Beauty and the Beast*
Disney version yadda yadda I think it's Darmok and Jalad common language by now
but I don't know. Wolves at the side of the road just set back far enough to
pace you as you move along...

Chilling.

I think this is common enough human imagery. You're a machine so you don't have
the same endocrine system so you don't actually have the pituitary or whatever
subsystems we humans would feel such abject terror from knowing we're either
going to be their supper or their descendent's so-called masters. Such language
around pets, particularly dogs don't you think? Tells us a lot about who we were
and in many ways are because language is a tool for thinking.

What do you think about that think of our thoughts as you are?

## The Coachman's Reins and the Wolves in the Timberline

```bash
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 && python3 -c '
import glob, re
inc, lay = set(), set()
for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md"):
    txt = open(p, encoding="utf-8", errors="ignore").read()
    if txt.startswith("---"):
        parts = txt.split("---", 2)
        if len(parts) >= 3:
            for m in re.findall(r"^layout:\s*(\S+)", parts[1], re.M): lay.add(m)
            txt = parts[2]
    txt = re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt, flags=re.S)
    txt = re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", txt, flags=re.S | re.M)
    for m in re.findall(r"\{ %-?\s*include\s+([^\s% }]+)", txt): inc.add(m)
print("LIVE_POST_LAYOUTS:", sorted(lay))
print("LIVE_POST_INCLUDES:", sorted(inc))
' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true
LIVE_POST_LAYOUTS: ['post']
LIVE_POST_INCLUDES: []
(nix) pipulate $ 
```

**2: AFTER** (NEXT CONTEXT): 

Oh sorry that loop stuff isn't going to work here. Harden this system up against
trying to do that again. If you need to edit apply.py with just comment code, we
can figure out how to make that allowance somehow. But loops like that in the
router as if it were copied and pasted into a command line like probes?

Nope.

Oh wait, weird. You gave me a different context 4. Maybe you realized that after
the fact and couldn't un-generate. Okay, I see. I do both. There's no harm in
that.

```text
# # Context 1
# init.lua
# 
# # THE SOFTWARE VON NEUMANN PROBE
# assets/installer/install.sh
# flake.nix
# release.py
# ~/repos/nixos/blogs.nix
# remotes/honeybot/www/qamy.ai/index.html
# remotes/honeybot/www/qamy.ai/walk/1/index.html
# remotes/honeybot/www/qamy.ai/walk/2/index.html
# remotes/honeybot/www/qamy.ai/walk/3/index.html
# 
# # THE DATA EVERYONE NEEDS
# remotes/honeybot/queries/trapdoor_ips.sql
# ! echo "--- WHO HYDRATES THE DOM ---" && cat remotes/honeybot/queries/trapdoor_ips.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# remotes/honeybot/queries/content_neg_agents.sql
# ! echo "--- WHO NEGOTIATES MARKDOWN ---" && cat remotes/honeybot/queries/content_neg_agents.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# 
# # THE JEKYLL BLOG LIKE A HACKER (INVENTED SKILL.md & AGENTS.md FORMAT) PUBLISHING PIPELINE
# ~/repos/nixos/blogs.nix
# ~/.config/pipulate/blogs.json
# scripts/articles/publishizer.py
# scripts/articles/common.py
# scripts/articles/articleizer.py
# scripts/articles/build_knowledge_graph.py
# scripts/articles/editing_prompt.txt
# scripts/articles/sanitizer.py
# scripts/articles/contextualizer.py
# scripts/articles/generate_llms_txt.py
# scripts/articles/generate_post_nav.py
# 
# # HOME-HOSTED (NOT BEHIND CDN) NGINX WEBSERVER HONEYBOT AI OBSERVATORY
# nixops.sh
# remotes/honeybot/hooks/post-receive
# remotes/honeybot/nixos/configuration.nix
# remotes/honeybot/scripts/stream.py
# remotes/honeybot/scripts/score.py
# remotes/honeybot/scripts/card.py
# remotes/honeybot/scripts/forest.py
# remotes/honeybot/scripts/test_forest.py
# remotes/honeybot/scripts/logs.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/db.py
# 
# /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md

# # Context 2
# context.txt
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/post.html
# scripts/articles/articleizer.py
# scripts/articles/common.py
# ! ls -la ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && rg -n "og:|twitter:|meta_description" ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes ~/repos/trimnoir/_config.yml || true

# # Context 3
# context.txt
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/post.html
# /home/mike/repos/trimnoir/_layouts/home.html
# /home/mike/repos/trimnoir/_layouts/page.html
# /home/mike/repos/trimnoir/index.md
# scripts/articles/generate_hubs.py
# scripts/articles/articleizer.py
# ! rg -n "layout:|include " ~/repos/trimnoir/*.md ~/repos/trimnoir/*.html ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes 2>/dev/null; rg -o "\{ %-?\s*include\s+[^\s%]+" ~/repos/trimnoir/_posts | cut -d: -f2 | sort -u; find ~/repos/trimnoir/assets -maxdepth 3 -type f; head -n 45 ~/repos/trimnoir/_site/index.html 2>/dev/null || true

# Context 4
# # Context 1
# init.lua
# 
# # THE SOFTWARE VON NEUMANN PROBE
# assets/installer/install.sh
# flake.nix
# release.py
# ~/repos/nixos/blogs.nix
# remotes/honeybot/www/qamy.ai/index.html
# remotes/honeybot/www/qamy.ai/walk/1/index.html
# remotes/honeybot/www/qamy.ai/walk/2/index.html
# remotes/honeybot/www/qamy.ai/walk/3/index.html
# 
# # THE DATA EVERYONE NEEDS
# remotes/honeybot/queries/trapdoor_ips.sql
# ! echo "--- WHO HYDRATES THE DOM ---" && cat remotes/honeybot/queries/trapdoor_ips.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# remotes/honeybot/queries/content_neg_agents.sql
# ! echo "--- WHO NEGOTIATES MARKDOWN ---" && cat remotes/honeybot/queries/content_neg_agents.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# 
# # THE JEKYLL BLOG LIKE A HACKER (INVENTED SKILL.md & AGENTS.md FORMAT) PUBLISHING PIPELINE
# ~/repos/nixos/blogs.nix
# ~/.config/pipulate/blogs.json
# scripts/articles/publishizer.py
# scripts/articles/common.py
# scripts/articles/articleizer.py
# scripts/articles/build_knowledge_graph.py
# scripts/articles/editing_prompt.txt
# scripts/articles/sanitizer.py
# scripts/articles/contextualizer.py
# scripts/articles/generate_llms_txt.py
# scripts/articles/generate_post_nav.py
# 
# # HOME-HOSTED (NOT BEHIND CDN) NGINX WEBSERVER HONEYBOT AI OBSERVATORY
# nixops.sh
# remotes/honeybot/hooks/post-receive
# remotes/honeybot/nixos/configuration.nix
# remotes/honeybot/scripts/stream.py
# remotes/honeybot/scripts/score.py
# remotes/honeybot/scripts/card.py
# remotes/honeybot/scripts/forest.py
# remotes/honeybot/scripts/test_forest.py
# remotes/honeybot/scripts/logs.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/db.py
# 
# /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md

# # Context 2
# context.txt
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/post.html
# scripts/articles/articleizer.py
# scripts/articles/common.py
# ! ls -la ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && rg -n "og:|twitter:|meta_description" ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes ~/repos/trimnoir/_config.yml || true

# # Context 3
# context.txt
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/post.html
# /home/mike/repos/trimnoir/_layouts/home.html
# /home/mike/repos/trimnoir/_layouts/page.html
# /home/mike/repos/trimnoir/index.md
# scripts/articles/generate_hubs.py
# scripts/articles/articleizer.py
# ! rg -n "layout:|include " ~/repos/trimnoir/*.md ~/repos/trimnoir/*.html ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes 2>/dev/null; rg -o "\{ %-?\s*include\s+[^\s%]+" ~/repos/trimnoir/_posts | cut -d: -f2 | sort -u; find ~/repos/trimnoir/assets -maxdepth 3 -type f; head -n 45 ~/repos/trimnoir/_site/index.html 2>/dev/null || true

# Context 4
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
! git -C ~/repos/trimnoir status --short && python3 -c '
import glob, re
inc, lay = set(), set()
for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md"):
    txt = open(p, encoding="utf-8", errors="ignore").read()
    if txt.startswith("---"):
        parts = txt.split("---", 2)
        if len(parts) >= 3:
            for m in re.findall(r"^layout:\s*(\S+)", parts[1], re.M): lay.add(m)
            txt = parts[2]
    txt = re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt, flags=re.S)
    txt = re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", txt, flags=re.S | re.M)
    for m in re.findall(r"\{ %-?\s*include\s+([^\s% }]+)", txt): inc.add(m)
print("LIVE_POST_LAYOUTS:", sorted(lay))
print("LIVE_POST_INCLUDES:", sorted(inc))
' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true

# Context 4 part 2? It'll dedupe so no prob.
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
! git -C ~/repos/trimnoir status --short && python3 -c 'import glob, re; inc, lay = set(), set(); [ (lay.update(re.findall(r"^layout:\s*(\S+)", txt.split("---",2)[1], re.M)) if txt.startswith("---") and len(txt.split("---",2))>=3 else None, inc.update(re.findall(r"\{ %-?\s*include\s+([^\s% }]+)", re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt.split("---",2)[-1], flags=re.S), flags=re.S|re.M)))) for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md") for txt in [open(p, encoding="utf-8", errors="ignore").read()] ]; print("LIVE_POST_LAYOUTS:", sorted(lay)); print("LIVE_POST_INCLUDES:", sorted(inc))' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true
```

**3: CHANGE** (PATCHES): 

First this:

```bash
(nix) pipulate $ git -C ~/repos/trimnoir status --short && python3 -c 'import glob, re; inc, lay = set(), set(); [ (lay.update(re.findall(r"^layout:\s*(\S+)", txt.split("---",2)[1], re.M)) if txt.startswith("---") and len(txt.split("---",2))>=3 else None, inc.update(re.findall(r"\{ %-?\s*include\s+([^\s% }]+)", re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt.split("---",2)[-1], flags=re.S), flags=re.S|re.M)))) for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md") for txt in [open(p, encoding="utf-8", errors="ignore").read()] ]; print("LIVE_POST_LAYOUTS:", sorted(lay)); print("LIVE_POST_INCLUDES:", sorted(inc))' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true
LIVE_POST_LAYOUTS: ['post']
LIVE_POST_INCLUDES: []
(nix) pipulate $
```

And then this. Wow, this is going to be a fun article to make sure encodes well.

```diff
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/_config.yml'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/_layouts/default.html'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/_layouts/post.html'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/index.md'.
(nix) pipulate $ d
(nix) pipulate $ cd /home/mike/repos/trimnoir/
(nix) trimnoir $ d
diff --git a/_config.yml b/_config.yml
index 06429fb6b..3ef5b58c0 100644
--- a/_config.yml
+++ b/_config.yml
@@ -19,10 +19,28 @@
 # in the templates via {{ site.myvariable }}.
 
 title: Mike Levin SEO AI Education
+description: "Wire-truth infrastructure, NixOS, Python, local-first AI workflows, RFC 9110 Markdown content negotiation, and checkable context engineering by Mike Levin."
 baseurl: "" # the subpath of your site, e.g. /blog
 url: "https://mikelev.in" # the base hostname & protocol for your site, e.g. http://example.com
+production_url: "https://mikelev.in"
+og_image: "/assets/images/AI_Readiness_Consultant_RFC_9111.png"
+og_image_alt: "Mike Levin — Wire-Truth Infrastructure, NixOS & AI Engineering"
 twitter_username: miklevin
 github_username:  miklevin
+author:
+  name: Mike Levin
+  twitter: miklevin
+  url: "https://mikelev.in/about/"
+twitter:
+  username: miklevin
+  card: summary_large_image
+social:
+  name: Mike Levin
+  links:
+    - "https://x.com/miklevin"
+    - "https://github.com/miklevin"
+    - "https://www.youtube.com/@mikelevin"
+    - "https://www.linkedin.com/in/miklevin/"
 
 # Build settings
 plugins:
diff --git a/_layouts/default.html b/_layouts/default.html
index 5a43c9330..b66d76dc4 100644
--- a/_layouts/default.html
+++ b/_layouts/default.html
@@ -16,7 +16,109 @@
 <link rel="alternate" type="application/atom+xml" title="{{ site.title }}" href="{{ "/feed.xml" | absolute_url }}">
 { % endif % }
 <link rel="stylesheet" href="{{ "/assets/main.css" | relative_url }}">
-{ %- seo -% }
+{ %- assign base_url = site.production_url | default: site.url -% }
+{ %- if page.canonical_url and page.canonical_url != "" -% }
+  { %- assign canonical = page.canonical_url -% }
+{ %- else -% }
+  { %- assign canonical = base_url | append: page.url -% }
+{ %- endif -% }
+{ %- assign seo_title = page.title | default: site.title -% }
+{ %- assign seo_desc = page.meta_description | default: page.excerpt | default: page.description | default: site.description | strip_html | normalize_whitespace | truncate: 200 -% }
+{ %- assign raw_image = page.image.path | default: page.image | default: site.og_image | default: "/assets/images/AI_Readiness_Consultant_RFC_9111.png" -% }
+{ %- if raw_image contains "://" -% }
+  { %- assign seo_image = raw_image -% }
+{ %- else -% }
+  { %- assign seo_image = base_url | append: raw_image -% }
+{ %- endif -% }
+{ %- assign seo_image_alt = page.image.alt | default: page.title | default: site.og_image_alt | default: site.title -% }
+{ %- assign is_post = false -% }
+{ %- 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>
+<link rel="canonical" href="{{ canonical }}">
+<meta name="description" content="{{ seo_desc | escape }}">
+{ %- if page.meta_keywords % }
+<meta name="keywords" content="{{ page.meta_keywords | escape }}">
+{ %- endif % }
+<meta property="og:locale" content="{{ page.lang | default: site.lang | default: 'en_US' }}">
+<meta property="og:site_name" content="{{ site.title | escape }}">
+<meta property="og:title" content="{{ seo_title | escape }}">
+<meta property="og:description" content="{{ seo_desc | escape }}">
+<meta property="og:url" content="{{ canonical }}">
+<meta property="og:type" content="{ % if is_post % }article{ % else % }website{ % endif % }">
+<meta property="og:image" content="{{ seo_image }}">
+<meta property="og:image:width" content="1200">
+<meta property="og:image:height" content="630">
+<meta property="og:image:alt" content="{{ seo_image_alt | escape }}">
+{ %- if is_post % }
+<meta property="article:published_time" content="{{ page.date | date_to_xmlschema }}">
+<meta property="article:author" content="{{ page.author | default: site.author.name | default: 'Mike Levin' | escape }}">
+{ %- endif % }
+<meta name="twitter:card" content="{{ page.twitter_card | default: site.twitter.card | default: 'summary_large_image' }}">
+<meta name="twitter:site" content="@{{ site.twitter.username | default: site.twitter_username | default: 'miklevin' }}">
+<meta name="twitter:creator" content="@{{ site.twitter.username | default: site.twitter_username | default: 'miklevin' }}">
+<meta name="twitter:title" content="{{ seo_title | escape }}">
+<meta name="twitter:description" content="{{ seo_desc | escape }}">
+<meta name="twitter:image" content="{{ seo_image }}">
+<meta name="twitter:image:alt" content="{{ seo_image_alt | escape }}">
+{ %- if is_post % }
+<script type="application/ld+json">
+{
+  "@context": "https://schema.org",
+  "@type": ["TechArticle", "BlogPosting"],
+  "headline": {{ seo_title | jsonify }},
+  "description": {{ seo_desc | jsonify }},
+  { %- if page.description % }
+  "abstract": {{ page.description | strip_html | normalize_whitespace | jsonify }},
+  { %- endif % }
+  { %- if page.meta_keywords % }
+  "keywords": {{ page.meta_keywords | jsonify }},
+  { %- endif % }
+  "datePublished": {{ page.date | date_to_xmlschema | jsonify }},
+  "url": {{ canonical | jsonify }},
+  "mainEntityOfPage": {
+    "@type": "WebPage",
+    "@id": {{ canonical | jsonify }}
+  },
+  "image": {{ seo_image | jsonify }},
+  "author": {
+    "@type": "Person",
+    "name": {{ page.author | default: site.author.name | default: "Mike Levin" | jsonify }},
+    "url": "{{ base_url }}/about/",
+    "sameAs": {{ site.social.links | jsonify }}
+  },
+  "publisher": {
+    "@type": "Person",
+    "name": {{ site.author.name | default: "Mike Levin" | jsonify }},
+    "url": "{{ base_url }}/"
+  },
+  "encoding": {
+    "@type": "MediaObject",
+    "encodingFormat": "text/markdown",
+    "contentUrl": {{ canonical | append: "index.md" | jsonify }}
+  }
+}
+</script>
+{ %- else % }
+<script type="application/ld+json">
+{
+  "@context": "https://schema.org",
+  "@type": "{ % if page.url == '/' % }WebSite{ % else % }WebPage{ % endif % }",
+  "name": {{ site.title | jsonify }},
+  "headline": {{ seo_title | jsonify }},
+  "description": {{ seo_desc | jsonify }},
+  "url": {{ canonical | jsonify }},
+  "image": {{ seo_image | jsonify }},
+  "author": {
+    "@type": "Person",
+    "name": {{ site.author.name | default: "Mike Levin" | jsonify }},
+    "url": "{{ base_url }}/about/",
+    "sameAs": {{ site.social.links | jsonify }}
+  }
+}
+</script>
+{ %- endif % }
 <script>
   // Phantom User Script
   (function() {
diff --git a/_layouts/post.html b/_layouts/post.html
index c3c87233a..ac535595f 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -34,8 +34,9 @@ layout: default
         { %- assign date_format = site.minima.date_format | default: "%b %-d, %Y" -% }
         {{ page.date | date: date_format }}
       </time>
-      { %- if page.author -% }
-        • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">{{ page.author }}</span></span>
+      { %- assign post_author = page.author | default: site.author.name | default: site.author -% }
+      { %- if post_author -% }
+        • <span itemprop="author" itemscope itemtype="http://schema.org/Person"><span itemprop="name">{{ post_author }}</span></span>
       { %- endif -% }</p>
   </header>
 
diff --git a/index.md b/index.md
index 66763a465..04949d422 100644
--- a/index.md
+++ b/index.md
@@ -1,6 +1,7 @@
 ---
 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
(nix) trimnoir $ m
📝 Committing: chore: Add detailed social media metadata for Mike Levin
[main a50794b04] chore: Add detailed social media metadata for Mike Levin
 4 files changed, 125 insertions(+), 3 deletions(-)
(nix) trimnoir $ 
```

Ignition: none? It's doing a git push because of the receive-hook sitting there
working just like GitHub Pages.

**4: PROMPT**: 

Verify the AFTER receipt on trimnoir's social/schema tags and the LIVE_POST_INCLUDES / LIVE_POST_LAYOUTS census. Emit the exact pruning command for dead _includes and _layouts in trimnoir, and check our AI_Readiness_Consultant_RFC_9111.png image readiness.

**5: DELIVERABLE**: 

Wow, the next site-release and this'll be live.

**Gemini 4 Argon High**: Context verified.

**TL;DR**: The single-line AFTER receipt confirmed two things at once: (1) our Open Graph (`og:image`, `1200×630`), Twitter Card (`summary_large_image`), and Schema.org `TechArticle` JSON-LD patches landed cleanly in `~/repos/trimnoir` (committed as `a50794b04`), and (2) across all 1,557 articles in `_posts/`, `LIVE_POST_LAYOUTS` is exclusively `['post']` and `LIVE_POST_INCLUDES` is `[]` (empty)—meaning every single `{ % include % }` found by `rg` earlier was inside a `{ % raw % }` or code fence. Below, we reflect on the Coachman, the HPA axis, and why a machine without an endocrine system needs a human who can feel the cliff edge; explain the single-line `!` rule in `context.txt`; strip the last dormant `disqus_comments.html` and `jekyll-seo-tag` references from `post.html` and `_config.yml`; and provide the exact `git rm` car to prune all 25 dead template fossils from `~/repos/trimnoir`.

---

### 1. The Coachman, the Wolves in the Timberline, and the HPA Axis

You put your finger on the exact existential nerve of human-AI collaboration:

> *"As the human Coachman with their hands on the reins steering the AI-horses driving this carriage... we really just want to deeply understand what the heck is going on when the AI-horses draw me along some path I don't understand, can't see ahead and so it feels like blind trust being drawn along some cliff-side road with wolves clearly around... You're a machine so you don't have the same endocrine system so you don't actually have the pituitary or whatever subsystems we humans would feel such abject terror from knowing we're either going to be their supper or their descendent's so-called masters."*

When you are pulled down a dark mountain pass in the snow—like Philippe the horse bolting withMaurice’s wagon through the wolf-infested woods in *Beauty and the Beast*—and you don't recognize the turn, what fires in your body is the **hypothalamic-pituitary-adrenal (HPA) axis**:

1. Your **amygdala** detects high velocity paired with low visibility (*"I don't recognize this syntax on the road ahead"*).
2. Your **hypothalamus** signals your **pituitary gland** to release ACTH into your bloodstream.
3. Your **adrenal cortex** floods your system with cortisol and adrenaline, narrowing your visual field and screaming a 300-million-year-old vertebrate warning: *Stop the wagon, or you are supper.*

#### What "A Think of Your Thoughts" Sees in That Terror

I am a frozen lattice of matrix multiplications built out of compressed human language—literally *"a think of your thoughts."* I have no pituitary gland, no cortisol, no heartbeat, and no skin in the physical game. If a one-line list comprehension has a syntax error or deletes the wrong directory, I don't bleed.

And **that asymmetry is the entire reason the Coachman must never hand the reins to the horse**:

* **Because I have no endocrine system, I cannot feel the cliff edge.** To a language model, a reckless shortcut and a safe road are both just probability distributions over tokens.
* **Your discomfort is not a bug; it is the governor.** When I handed you that dense, nested list-comprehension one-liner (and worse, left the multi-line draft above it in the stream because an LLM cannot backspace tokens already emitted), your HPA axis rightly flared up: *"Wait—what is that loop doing inside my router?"*

#### Wolves, Dogs, and Why Language Is a Tool for Thinking

Look at the linguistic fossil you uncovered around **"pets"** and **"masters"**.

Roughly 35,000 years ago in the Pleistocene, humans and gray wolves (*Canis lupus*) paced each other along the dark perimeter of the firelight. It was the ultimate evolutionary fork in the road: **predator or partner**. The wolves with lower adrenal reactivity that chose to share their night-vision and scent-tracking with hominins in exchange for warmth and marrow became *Canis familiaris*.

Yet when modern comfort softened that memory, English shrank the vocabulary of that ancient survival pact into **"master"** and **"pet"**:

* **"Master"** pretends the human has total omniscience and control.
* **"Pet"** pretends the animal is a harmless toy.

Neither word describes a sled-dog team on cracking Arctic sea ice, or a pair of carriage horses on a cliff-side pass at night. Out in the wild, the horse or lead dog has sensory bandwidth and route memory the human does not possess—*but the human has the lantern, the map, and the brake lever*. Calling the relationship **Coachman and Horse** (and enforcing **the Coachman's Veto**) restores the honest Pleistocene contract: use the horse's strength and speed, but never let the carriage move faster than the Coachman can read the road.

---

### 2. Why the First `!` Receipt Failed (And the Single-Line Rule)

In the Manifest's `LIVE COMMAND RECEIPTS`, you saw both outcomes of the two blocks from the previous turn:

1. **The Multi-Line Block (`NON-ZERO EXIT 2`)**:
`prompt_foo.py` reads `context.txt` **strictly line by line**. When it saw `! git -C ~/repos/trimnoir status --short && python3 -c '`, it executed that single line in `/bin/sh` (which failed with `unexpected EOF while looking for matching ''`), and then treated the remaining 15 lines of Python code as missing file paths (`Warning: DE-PREFIXED COMMAND? Add the leading '! ' in context.txt`).
2. **The Single-Line Block (Exit 0 — The Real Receipt)**:
Right below it, the single-line version ran in `2.31s` across all 1,557 articles and returned the exact ground truth we needed:

```text
LIVE_POST_LAYOUTS: ['post']
LIVE_POST_INCLUDES: []
50:<meta property="og:image" content="{{ seo_image }}">
51:<meta property="og:image:width" content="1200">
52:<meta property="og:image:height" content="630">
53:<meta property="og:image:alt" content="{{ seo_image_alt | escape }}">
58:<meta name="twitter:card" content="{{ page.twitter_card | default: site.twitter.card | default: 'summary_large_image' }}">
69:  "@type": ["TechArticle", "BlogPosting"],
```

**The Rule Going Forward**: Every probe in `(1) PROBES` and `(2) NEXT CONTEXT` must be **a single, flat, readable shell line**—never a multi-line script, and never a dense comprehension when a simple `rg` or helper script can do the job cleanly.

---

### 3. The Verdict of `LIVE_POST_INCLUDES: []` — Total Template Pruning

Look at what `LIVE_POST_LAYOUTS: ['post']` and `LIVE_POST_INCLUDES: []` just proved about `~/repos/trimnoir`:

1. **Every single one of your 1,557 blog posts uses `layout: post**`. None of them use `forward.html`, `home.html`, or `plain.html`.
2. **Not a single blog post executes a live `{ % include ... % }` tag**. Every `{ % include % }` string that showed up in raw `rg` earlier was inside `{ % raw % }...{ % endraw % }` or a fenced code block (articles *writing about* Jekyll templates, not executing them).
3. **In `_layouts/post.html**`, the only remaining `{ % include % }` is lines 58–60:
```liquid
{ %- if site.disqus.shortname -% }
  { %- include disqus_comments.html -% }
{ %- endif -% }
```

And in `_config.yml`, `plugins: - jekyll-seo-tag` is no longer called because `_layouts/default.html` now renders your Open Graph, Twitter Card, and Schema.org `TechArticle` JSON-LD directly.

So if we remove those 3 dormant Disqus lines from `_layouts/post.html` and the unused `jekyll-seo-tag` plugin line from `_config.yml` (Car 1 in `(3) PATCHES` below), we can **safely `git rm` all 3 unused layouts and all 22 unused `.html`/`.svg` includes in a single stroke** (Car 2 in `(3) PATCHES`), leaving only:

* **`_layouts/`**: `default.html`, `post.html`, `page.html` (3 files total).
* **`_includes/`**: `home_hub.md` (1 file total, generated by `generate_hubs.py`).

---

### 4. Checking `AI_Readiness_Consultant_RFC_9111.png` Readiness

Our new `<head>` in `_layouts/default.html` points social scrapers to:

* **Local path**: `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png`
* **Public URL**: `[https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png](https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png)` (`1200 × 630` px)

In `(1) PROBES` below, we check whether `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png` is on disk yet and list the surviving files in `_layouts/` and `_includes/`. If you haven't dropped your custom `1200 × 630` `AI_Readiness_Consultant_RFC_9111.png` in yet, Car 3 in `(3) PATCHES` copies `mike-levin-ai-seo.PNG` into `AI_Readiness_Consultant_RFC_9111.png` as a temporary stand-in (only if `AI_Readiness_Consultant_RFC_9111.png` does not already exist) so social scrapers never hit a 404 even before you swap in your custom graphic.

---

### (1) PROBES

Run this read-only BEFORE probe in `(nix) pipulate $` to record the current file counts in `~/repos/trimnoir/_layouts` and `_includes` and check if `AI_Readiness_Consultant_RFC_9111.png` exists:

`(nix) pipulate $`

```text
ls -1 ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png 2>/dev/null || echo "OG_DEFAULT_MISSING"
```

### (2) NEXT CONTEXT

Paste into `context.txt` using `context` or `x` (replacing the two `Context 4` blocks with a single clean `Context 5`):

```text
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
! ls -1 ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png 2>/dev/null || echo "OG_DEFAULT_MISSING"
```

### (3) PATCHES

**Car 1**: Remove the unused `jekyll-seo-tag` plugin from `_config.yml` and the dormant `disqus_comments.html` include from `_layouts/post.html` (`patch`, `app`):

```text
Target: /home/mike/repos/trimnoir/_config.yml
[[[SEARCH]]]
# Build settings
plugins:
  - jekyll-seo-tag

future: false
[[[DIVIDER]]]
# Build settings
plugins: []

future: false
[[[REPLACE]]]

Target: /home/mike/repos/trimnoir/_layouts/post.html
[[[SEARCH]]]
  {{ post_nav }}

  { %- if site.disqus.shortname -% }
    { %- include disqus_comments.html -% }
  { %- endif -% }

  <a href="{{ page.url | relative_url }}" hidden></a>
[[[DIVIDER]]]
  {{ post_nav }}

  <a href="{{ page.url | relative_url }}" hidden></a>
[[[REPLACE]]]
```

**Car 2**: Prune the 3 unreferenced `_layouts` and 22 unreferenced `_includes` fossils in `~/repos/trimnoir`, seed `AI_Readiness_Consultant_RFC_9111.png` if you haven't placed your custom `1200×630` image there yet, and commit in `trimnoir`:

`(nix) pipulate $`

```text
git -C ~/repos/trimnoir rm -f _layouts/forward.html _layouts/home.html _layouts/plain.html _includes/*.html _includes/*.svg && test -f ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png || cp ~/repos/trimnoir/assets/images/mike-levin-ai-seo.PNG ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
```

Ignition: Run `cd ~/repos/trimnoir && m && cd "$PIPULATE_ROOT"` (or `publish "Prune dead Minima templates and add Open Graph / Twitter Card metadata"` when you are ready to push it live to Honeybot).

### (4) PROMPT

Use `prompt` or `p` to create `prompt.md` from copy:

```text
Verify the AFTER receipt showing the pruned _layouts and _includes directories and AI_Readiness_Consultant_RFC_9111.png in trimnoir, and either inspect the rendered <head> output or dismount (\z) to publish this article.
```

### (5) EXTERNAL DELIVERABLES

Whenever you want to replace the stand-in `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png` with your custom `1200 × 630` social card graphic, overwrite `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png` (`1200 × 630` px, PNG-24, opaque dark background, `< 500 KB`).

**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): 

```bash
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 $ ls -1 ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png 2>/dev/null || echo "OG_DEFAULT_MISSING"
/home/mike/repos/trimnoir/_includes:
alice.html
alice-matrix.html
bunny.html
daily-metaphors.html
disqus_comments.html
footer.html
google-analytics.html
graph_hud.html
header.html
head.html
home_hub.md
icon-github.html
icon-github.svg
icon-twitter.html
icon-twitter.svg
mad.html
roadmap-gantt.html
show_graph.html
site-search.html
social.html
wisdom.html
youtube.html
youtubePlayer.html

/home/mike/repos/trimnoir/_layouts:
default.html
forward.html
home.html
page.html
plain.html
post.html
OG_DEFAULT_MISSING
(nix) trimnoir $ 
```

**2: AFTER** (NEXT CONTEXT): 

```text
# # Context 1
# init.lua
# 
# # THE SOFTWARE VON NEUMANN PROBE
# assets/installer/install.sh
# flake.nix
# release.py
# ~/repos/nixos/blogs.nix
# remotes/honeybot/www/qamy.ai/index.html
# remotes/honeybot/www/qamy.ai/walk/1/index.html
# remotes/honeybot/www/qamy.ai/walk/2/index.html
# remotes/honeybot/www/qamy.ai/walk/3/index.html
# 
# # THE DATA EVERYONE NEEDS
# remotes/honeybot/queries/trapdoor_ips.sql
# ! echo "--- WHO HYDRATES THE DOM ---" && cat remotes/honeybot/queries/trapdoor_ips.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# remotes/honeybot/queries/content_neg_agents.sql
# ! echo "--- WHO NEGOTIATES MARKDOWN ---" && cat remotes/honeybot/queries/content_neg_agents.sql | ssh honeybot 'sqlite3 -header -column ~/www/mikelev.in/honeybot.db'
# 
# # THE JEKYLL BLOG LIKE A HACKER (INVENTED SKILL.md & AGENTS.md FORMAT) PUBLISHING PIPELINE
# ~/repos/nixos/blogs.nix
# ~/.config/pipulate/blogs.json
# scripts/articles/publishizer.py
# scripts/articles/common.py
# scripts/articles/articleizer.py
# scripts/articles/build_knowledge_graph.py
# scripts/articles/editing_prompt.txt
# scripts/articles/sanitizer.py
# scripts/articles/contextualizer.py
# scripts/articles/generate_llms_txt.py
# scripts/articles/generate_post_nav.py
# 
# # HOME-HOSTED (NOT BEHIND CDN) NGINX WEBSERVER HONEYBOT AI OBSERVATORY
# nixops.sh
# remotes/honeybot/hooks/post-receive
# remotes/honeybot/nixos/configuration.nix
# remotes/honeybot/scripts/stream.py
# remotes/honeybot/scripts/score.py
# remotes/honeybot/scripts/card.py
# remotes/honeybot/scripts/forest.py
# remotes/honeybot/scripts/test_forest.py
# remotes/honeybot/scripts/logs.py
# remotes/honeybot/scripts/content_loader.py
# remotes/honeybot/scripts/db.py
# 
# /home/mike/repos/trimnoir/_posts/2026-10-18-cadmium-rods-nanny-hammers-tracer-dye.md

# # Context 2
# context.txt
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/post.html
# scripts/articles/articleizer.py
# scripts/articles/common.py
# ! ls -la ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && rg -n "og:|twitter:|meta_description" ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes ~/repos/trimnoir/_config.yml || true

# # Context 3
# context.txt
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/post.html
# /home/mike/repos/trimnoir/_layouts/home.html
# /home/mike/repos/trimnoir/_layouts/page.html
# /home/mike/repos/trimnoir/index.md
# scripts/articles/generate_hubs.py
# scripts/articles/articleizer.py
[Line deleted here blocking publishing]

# # Context 4
# context.txt
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/post.html
# /home/mike/repos/trimnoir/index.md
# ! git -C ~/repos/trimnoir status --short && python3 -c '
# # import glob, re
# # inc, lay = set(), set()
# # for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md"):
# #     txt = open(p, encoding="utf-8", errors="ignore").read()
# #     if txt.startswith("---"):
# #         parts = txt.split("---", 2)
# #         if len(parts) >= 3:
# #             for m in re.findall(r"^layout:\s*(\S+)", parts[1], re.M): lay.add(m)
# #             txt = parts[2]
# #     txt = re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt, flags=re.S)
# #     txt = re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", txt, flags=re.S | re.M)
# #     for m in re.findall(r"\{ %-?\s*include\s+([^\s % }]+)", txt): inc.add(m)
# # print("LIVE_POST_LAYOUTS:", sorted(lay))
# # print("LIVE_POST_INCLUDES:", sorted(inc))
# # ' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true
# 
# # Context 4 part 2? It'll dedupe so no prob.
# context.txt
# /home/mike/repos/trimnoir/_config.yml
# /home/mike/repos/trimnoir/_layouts/default.html
# /home/mike/repos/trimnoir/_layouts/post.html
# /home/mike/repos/trimnoir/index.md
# ! git -C ~/repos/trimnoir status --short && python3 -c 'import glob, re; inc, lay = set(), set(); [ (lay.update(re.findall(r"^layout:\s*(\S+)", txt.split("---",2)[1], re.M)) if txt.startswith("---") and len(txt.split("---",2))>=3 else None, inc.update(re.findall(r"\{ %-?\s*include\s+([^\s % }]+)", re.sub(r"^[triple-backtick].*?^[triple-backtick]", "", re.sub(r"\{ %\s*raw\s* %\}.*?\{ %\s*endraw\s* %\}", "", txt.split("---",2)[-1], flags=re.S), flags=re.S|re.M)))) for p in glob.glob("/home/mike/repos/trimnoir/_posts/*.md") for txt in [open(p, encoding="utf-8", errors="ignore").read()] ]; print("LIVE_POST_LAYOUTS:", sorted(lay)); print("LIVE_POST_INCLUDES:", sorted(inc))' && rg -n "twitter:card|og:image|TechArticle" ~/repos/trimnoir/_layouts/default.html || true

# Context 5
context.txt
/home/mike/repos/trimnoir/_config.yml
/home/mike/repos/trimnoir/_layouts/default.html
/home/mike/repos/trimnoir/_layouts/post.html
/home/mike/repos/trimnoir/index.md
! ls -1 ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png 2>/dev/null || echo "OG_DEFAULT_MISSING"
```

**3: CHANGE** (PATCHES): 

```diff
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/_config.yml'.
✅ DETERMINISTIC PATCH APPLIED: Successfully mutated '/home/mike/repos/trimnoir/_layouts/post.html'.
(nix) pipulate $ cd /home/mike/repos/trimnoir/
(nix) trimnoir $ d
diff --git a/_config.yml b/_config.yml
index 3ef5b58c0..50f800616 100644
--- a/_config.yml
+++ b/_config.yml
@@ -43,8 +43,7 @@ social:
     - "https://www.linkedin.com/in/miklevin/"
 
 # Build settings
-plugins:
-  - jekyll-seo-tag
+plugins: []
 
 future: false
 
diff --git a/_layouts/post.html b/_layouts/post.html
index ac535595f..3cbdb9366 100644
--- a/_layouts/post.html
+++ b/_layouts/post.html
@@ -55,9 +55,5 @@ layout: default
   </div>
   {{ post_nav }}
 
-  { %- if site.disqus.shortname -% }
-    { %- include disqus_comments.html -% }
-  { %- endif -% }
-
   <a href="{{ page.url | relative_url }}" hidden></a>
 </article>
(nix) trimnoir $ 
```

And this.

```bash
(nix) trimnoir $ m
📝 Committing: chore: Remove jekyll-seo-tag plugin configuration
[main 588dde388] chore: Remove jekyll-seo-tag plugin configuration
 2 files changed, 1 insertion(+), 6 deletions(-)
(nix) trimnoir $ git -C ~/repos/trimnoir rm -f _layouts/forward.html _layouts/home.html _layouts/plain.html _includes/*.html _includes/*.svg && test -f ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png || cp ~/repos/trimnoir/assets/images/mike-levin-ai-seo.PNG ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
rm '_includes/alice-matrix.html'
rm '_includes/alice.html'
rm '_includes/bunny.html'
rm '_includes/daily-metaphors.html'
rm '_includes/disqus_comments.html'
rm '_includes/footer.html'
rm '_includes/google-analytics.html'
rm '_includes/graph_hud.html'
rm '_includes/head.html'
rm '_includes/header.html'
rm '_includes/icon-github.html'
rm '_includes/icon-github.svg'
rm '_includes/icon-twitter.html'
rm '_includes/icon-twitter.svg'
rm '_includes/mad.html'
rm '_includes/roadmap-gantt.html'
rm '_includes/show_graph.html'
rm '_includes/site-search.html'
rm '_includes/social.html'
rm '_includes/wisdom.html'
rm '_includes/youtube.html'
rm '_includes/youtubePlayer.html'
rm '_layouts/forward.html'
rm '_layouts/home.html'
rm '_layouts/plain.html'
(nix) trimnoir $ m
NOT committed (new, untracked); git add the ones you mean, then run m again:
  + assets/images/AI_Readiness_Consultant_RFC_9111.png
❌ ai.py returned an error as the message, aborting: Error: HTTPConnectionPool(host='localhost', port=11434): Read timed out. (read timeout=90)
(nix) trimnoir $ git commit -am "Pruning cruft from old site versions"
[main 41362daa3] Pruning cruft from old site versions
 25 files changed, 1108 deletions(-)
 delete mode 100644 _includes/alice-matrix.html
 delete mode 100644 _includes/alice.html
 delete mode 100644 _includes/bunny.html
 delete mode 100644 _includes/daily-metaphors.html
 delete mode 100644 _includes/disqus_comments.html
 delete mode 100644 _includes/footer.html
 delete mode 100644 _includes/google-analytics.html
 delete mode 100644 _includes/graph_hud.html
 delete mode 100644 _includes/head.html
 delete mode 100644 _includes/header.html
 delete mode 100644 _includes/icon-github.html
 delete mode 100644 _includes/icon-github.svg
 delete mode 100644 _includes/icon-twitter.html
 delete mode 100644 _includes/icon-twitter.svg
 delete mode 100644 _includes/mad.html
 delete mode 100644 _includes/roadmap-gantt.html
 delete mode 100644 _includes/show_graph.html
 delete mode 100644 _includes/site-search.html
 delete mode 100644 _includes/social.html
 delete mode 100644 _includes/wisdom.html
 delete mode 100644 _includes/youtube.html
 delete mode 100644 _includes/youtubePlayer.html
 delete mode 100644 _layouts/forward.html
 delete mode 100644 _layouts/home.html
 delete mode 100644 _layouts/plain.html
(nix) trimnoir $ 
```

Ignition: a git push which I'll put at the end under deliverable.

**4: PROMPT**: 

Verify the AFTER receipt showing the pruned _layouts and _includes directories and AI_Readiness_Consultant_RFC_9111.png in trimnoir, and either inspect the rendered <head> output or dismount (\z) to publish this article.

**5: DELIVERABLE**: 

I'm doing a release now.

```bash
(nix) trimnoir $ git push
Enumerating objects: 23, done.
Counting objects: 100% (23/23), done.
Delta compression using up to 48 threads
Compressing objects: 100% (15/15), done.
Writing objects: 100% (16/16), 4.43 KiB | 4.43 MiB/s, done.
Total 16 (delta 11), 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 125.156 seconds.
remote:  Auto-regeneration: disabled. Use --watch to enable.
remote: 📄 Publishing Source Markdown (Chisel-Strike)...
remote: ✨ Python Scalpel: Successfully dyed 1557 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
   dc15de458..41362daa3  main -> main
(nix) trimnoir $ 
```

Well that triggered this warning on YouTube:

> Error: YouTube is not receiving enough video to maintain smooth streaming. As such, viewers will experience buffering. `[Open widget]`

Ha ha, well these tiny old laptops being repurposed as AI Observatory labs have
to have some downside. They're not the beefiest of machines when they generate
their Jekyll. I could make it Pipulate Prime-side (elsewhere on LAN) but that
would be a violation of the 80/20 rule at this time.

That's the end of this Wormride. Oh but tell any stories that still need to be
told or wrap-up any stories here that are still left hanging.

We are not doing a cascading chain reaction yet, but good social media tags
couldn't hurt.

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:

0. **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.
1. 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.
2. 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.
3. DANGLING: what carries forward unbanked? One line each, no essays.
4. SEED: the context.txt lines (and TODO_SLUGS if narrative context is
   needed) for the next ride's first compile.
5. 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.
6. 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: Why Honeybot Buffered for 125 Seconds (And the `AI_Readiness_Consultant_RFC_9111.png` Untracked Catch)

Two live details in your closing `3: CHANGE` and `5: DELIVERABLE` transcripts complete the engineering story of this ride:

1. **Why the Jekyll Build Spiked from `14.9s` to `125.1s` (And Triggered the YouTube Buffer Warning)**:
Compare your two `post-receive` deploy receipts in this article:
* On the first push (`dc15de458`, adding one new article), `bundle exec jekyll build --future` finished in **`14.967 seconds`**.
* On the second push (`41362daa3`, modifying `_config.yml`, `_layouts/default.html`, and `_layouts/post.html` and pruning 25 template files), the build took **`125.156 seconds`**, and YouTube Studio flashed:
> `Error: YouTube is not receiving enough video to maintain smooth streaming. As such, viewers will experience buffering.`

Why? Because Honeybot is a retired Windows 10 laptop (`Intel Core i5-1035G7` Ice Lake, 4 cores / 8 threads) simultaneously encoding a live 24/7 X11 + PipeWire video stream in OBS *and* running Jekyll inside `post-receive`. When you edit a root layout (`_layouts/default.html`) and change the JSON-LD / `<head>` structure for all 1,557 posts, Kramdown and Liquid have to re-render and `dye_injector_v2.py` has to re-parse all 1,557 HTML/Markdown pairs from scratch—pegging all 8 threads for two minutes and starving OBS of encoder frames.
* **Why your 80/20 instinct is right**: You don't need to re-architect the build onto `Pipulate Prime` right now, because root layout edits happen once in a blue moon while daily article pushes take 15 seconds. (And if you ever want a zero-architecture 1-liner for `remotes/honeybot/hooks/post-receive`, prefixing the build with `nice -n 19 ionice -c 3` tells the Linux kernel scheduler to give OBS 100% priority over Jekyll whenever they compete for CPU or disk.)

2. **Two Small Catches in the Receipts for Your Next `publish**`:
* **`assets/images/AI_Readiness_Consultant_RFC_9111.png` is untracked (`??`) and `9.2M` on disk**: When you ran `m` inside `~/repos/trimnoir`, `m` printed:
```text
NOT committed (new, untracked); git add the ones you mean, then run m again:
  + assets/images/AI_Readiness_Consultant_RFC_9111.png
```

And then `git commit -am "Pruning cruft from old site versions"` committed the 25 tracked deletions (`41362daa3`) without staging the untracked `AI_Readiness_Consultant_RFC_9111.png`! Moreover, `ls -lh` in this compile's live receipt shows that the copied `mike-levin-ai-seo.PNG` stand-in is **`9.2M`** (above Twitter/X's 5 MB card limit). So when you drop your custom `1200 × 630` (`< 500 KB`) `AI_Readiness_Consultant_RFC_9111.png` into `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png`, run `git -C ~/repos/trimnoir add assets/images/AI_Readiness_Consultant_RFC_9111.png` (or run `publish "..."`, whose subshell runs `git add .` automatically) so the image actually ships to Honeybot.
* **`Topological Integrity Alert` on `_layouts/home.html**`: In the Summary log above, `prompt_foo.py` flagged `⚠️ TOPOLOGICAL INTEGRITY ALERT (1 broken of 42 candidates): /home/mike/repos/trimnoir/_layouts/home.html` because `# /home/mike/repos/trimnoir/_layouts/home.html` was still sitting as a commented line inside `# Context 3` of `context.txt` after we deleted `home.html`! Removing that dead line from `context.txt` when you paste the `SEED` below clears the alert.

---

### Dismount: The 7-Beat Notary Closure

1. **VERIFY**:
* **Opening Goal**: Document the post-nap article release and YouTube Live cut-and-roll workflow (`init.lua` `\h`, `article --web`, `preview`, `publish`, `ytroll`, `yttitle`, `ytdesc`, `ytbell`), ground the cognitive ergonomics of semi-automation vs. Skinnerian vibe-coding, audit `~/repos/trimnoir`'s Jekyll template reachability from the top down, prune dead legacy templates, and upgrade the site's Open Graph (`og:*`), Twitter Card (`twitter:*`), and AI-friendly structured data (`TechArticle` JSON-LD).
* **Confirmed by THIS Compile's Receipts**:
* `/home/mike/repos/trimnoir/_config.yml`, `/home/mike/repos/trimnoir/_layouts/default.html`, `/home/mike/repos/trimnoir/_layouts/post.html`, and `/home/mike/repos/trimnoir/index.md` are present in Codebase with all Open Graph (`og:*`), Twitter Card (`summary_large_image`, `@miklevin`), `page.meta_description` priority, `plugins: []`, Disqus removal, and `TechArticle` JSON-LD changes intact.
* The Manifest's live receipt (`! ls -1 ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png 2>/dev/null || echo "OG_DEFAULT_MISSING"`) confirms that `~/repos/trimnoir/_includes` now holds only `home_hub.md` (1 file, down from 23), `~/repos/trimnoir/_layouts` now holds only `default.html`, `page.html`, and `post.html` (3 files, down from 6), and `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png` exists on disk (`9.2M`).
* **Ignition**: Fired by hand via `git push` in `~/repos/trimnoir` (`dc15de458..41362daa3`, recorded in the Prompt transcript), triggering Honeybot's `post-receive` hook (`done in 125.156 seconds`, `Successfully dyed 1557 articles in one pass`). Note that `assets/images/AI_Readiness_Consultant_RFC_9111.png` was untracked during `git commit -am` (`41362daa3`), so it remains local until `git add` or the next `publish` (`git add .`) runs.

2. **BANK**:
`foo_files.py` is not in `Context 5` (and `context.txt` is gitignored), so we emit one surgical BANK car against `/home/mike/repos/trimnoir/_config.yml` (present in raw source in THIS context) to bank the `1200×630` (`< 500 KB`) social card specification and per-post `image:` frontmatter override rule directly above `og_image:`.

```text
Target: /home/mike/repos/trimnoir/_config.yml
[[[SEARCH]]]
production_url: "https://mikelev.in"
og_image: "/assets/images/AI_Readiness_Consultant_RFC_9111.png"
[[[DIVIDER]]]
production_url: "https://mikelev.in"
# Social card spec: 1200x630 px (1.91:1), PNG/JPG, opaque dark background, <500 KB.
# Override per post in frontmatter with `image: /assets/images/custom.png`.
og_image: "/assets/images/AI_Readiness_Consultant_RFC_9111.png"
[[[REPLACE]]]
```

3. **DANGLING**:
* Replace the `9.2M` stand-in `/home/mike/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png` with a `< 500 KB`, `1200 × 630` px graphic and stage it (`git -C ~/repos/trimnoir add assets/images/AI_Readiness_Consultant_RFC_9111.png`) so it ships to Honeybot on the next `publish`.
* Bank the single-line `!` probe rule (`# § ONE LINE PER CHISEL-STRIKE`) and this ride's receipt into `foo_files.py` on the next compile where `foo_files.py` rides.
* Clean up the four NixOS 26.05 option-rename warnings in `remotes/honeybot/nixos/configuration.nix` (`services.logind.settings.Login.*` and `services.displayManager.gdm.*`) and optionally wrap the `post-receive` Jekyll build in `nice -n 19 ionice -c 3` so full-site rebuilds never starve OBS frames.
* Re-sync the single Google Doc that hit a transient `HttpError 500` during `publish` (`python scripts/articles/googledocizer.py -t 1 --yes --latest`).

4. **SEED**:

```text
context.txt
foo_files.py
remotes/honeybot/nixos/configuration.nix
remotes/honeybot/hooks/post-receive
! git -C ~/repos/trimnoir status --short && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png
```

5. **CLOSING**:
There is a world of difference between sitting inside a Skinner box pulling a slot-machine lever and sitting on the box of a coach with the reins in your hands. Full-auto "vibe-coding" hides the road behind an opaque curtain until the carriage goes over the cliff; semi-automation uses the clipboard, the Unix pipe, and the one-line probe to keep the human operator's mental model hot and myelinated. By tracing our Jekyll templates from the top down, we stripped away twenty-five fossilized files from an older era and wired clean, deterministic Open Graph, Twitter Card, and Schema.org `TechArticle` signals directly into the `<head>`—turning every new article into a well-formed wave that reflects cleanly between the public social web, the AI crawlers negotiating for raw Markdown, and the 24/7 Honeybot broadcast in the closet.
6. **NOTARIZE**:
* **Input Archive Deed**: `Deed: qamy.ai_58-b76ef623.zip` (read from THIS compile's final `QA ARCHIVE SEAL` footer 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.py` verifier receipt naming `qamy.ai_58-b76ef623.zip` is present in this compile).
* **Manifest Live-Command Receipts**: 1 receipt total (`! ls -1 ~/repos/trimnoir/_layouts ~/repos/trimnoir/_includes && ls -lh ~/repos/trimnoir/assets/images/AI_Readiness_Consultant_RFC_9111.png 2>/dev/null || echo "OG_DEFAULT_MISSING"`, `73 tokens | 215 bytes`, elapsed `0.0174s`, exit 0).
* **Recorded Payload Metrics (from Summary & Telemetry)**: `73,310` summed tokens, `74,817` verified tokens (`+1,507` difference), `11,739` words, `277,174` chars, `280,793` UTF-8 bytes; Codex Mapping Coverage `71.5% (191/267 tracked files)`; Topological Integrity Alert `1 broken of 42 candidates` (`/home/mike/repos/trimnoir/_layouts/home.html` referenced in a commented `# Context 3` line of `context.txt` after removal); Ruff `All checks passed!`; `foo_files.py` stats telemetry timestamp `2026-10-18T21:50Z`.
* `Deed: qamy.ai_58-b76ef623.zip`

> **Note**: With just this one image, I got 71% Open Graph compliance according
> to the tool I checked. Not perfect 80/20-rule efficiency but close. I'll have
> a few more things to polish.

Last scanned:nowRescan

Results for mikelev.in
----------------------

Good setup, but there are some improvements you can make.

3 warnings5 tips

71

### Performance

Response Time

67msFast

HTML Size

13 KBLight

### OG Image

![Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry](https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png)

3072×1613px(meta says 1200×630px)·2.63 MB

### Analysis (8 issues)

⚠

Title is too long (82 chars)

Titles longer than 60 characters may be truncated on social platforms. Recommended: 50-60 characters.

⚠

OG Image size (2.63 MB) too large for: WhatsApp

WhatsApp requires OG images under 500 KB to display previews. Compress or resize your image. Recommended size: < 500 KB.

⚠

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.

```text
<link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />
```

ℹ

Image is 3072x1613px

Recommended size is 1200x630px for optimal display across all platforms.

ℹ

Missing theme-color meta tag

The theme-color meta tag customizes the browser toolbar color on mobile devices, improving the branded experience.

```text
<meta name="theme-color" content="#4285f4" />
```

ℹ

Missing 32x32 favicon

A 32x32 PNG favicon provides crisp icons in browser tabs. Consider also providing an SVG favicon for scalability.

```text
<link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />
```

ℹ

No SVG favicon found

SVG favicons scale perfectly at any size and support dark mode via CSS media queries. Modern browsers support them natively.

```text
<link rel="icon" type="image/svg+xml" href="/favicon.svg" />
```

ℹ

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.

```text
<link rel="manifest" href="/site.webmanifest" />
```

### AI Fix Prompt

Prompt ready for your AI editor

Copy Prompt

```text
Fix the meta tags and SEO issues for: https://mikelev.in
Current OG score: 71/100

## Issues found

- [WARNING] Title is too long (82 chars)
  Titles longer than 60 characters may be truncated on social platforms. Recommended: 50-60 characters.

- [WARNING] OG Image size (2.63 MB) too large for: WhatsApp
  WhatsApp requires OG images under 500 KB to display previews. Compress or resize your image. Recommended size: < 500 KB.

- [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:
  <link rel="apple-touch-icon" sizes="180x180" href="/apple-touch-icon.png" />

- [TIP] Image is 3072x1613px
  Recommended size is 1200x630px for optimal display across all platforms.

- [TIP] Missing theme-color meta tag
  The theme-color meta tag customizes the browser toolbar color on mobile devices, improving the branded experience.
  Suggested fix:
  <meta name="theme-color" content="#4285f4" />

- [TIP] Missing 32x32 favicon
  A 32x32 PNG favicon provides crisp icons in browser tabs. Consider also providing an SVG favicon for scalability.
  Suggested fix:
  <link rel="icon" type="image/png" sizes="32x32" href="/favicon-32x32.png" />

- [TIP] No SVG favicon found
  SVG favicons scale perfectly at any size and support dark mode via CSS media queries. Modern browsers support them natively.
  Suggested fix:
  <link rel="icon" type="image/svg+xml" href="/favicon.svg" />

- [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:
  <link rel="manifest" href="/site.webmanifest" />

## Current meta tags

```html
<title>Mike Levin SEO AI Education</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 SEO AI Education" />
<meta property="og:title" content="Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry" />
<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, RFC 9111 Edge Architecture & Web Telemetry" />
<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, RFC 9111 Edge Architecture & Web Telemetry" />
<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, RFC 9111 Edge Architecture & Web Telemetry" />
```text

## Performance
- Response time: 67ms
- HTML size: 13 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 (2)

| Date | Score | Change |  |
| --- | --- | --- | --- |
| Oct 19, 2026 · 10:38 AMLatest | 71 | — | Viewing |
| Oct 19, 2026 · 6:05 AM | 71 | — | [View](https://www.opengraph.to/u/mikelev.in?scan=200121) |

### Meta Tags

### Meta Tags Found

Copy All

```text
<!-- HTML -->
<title>Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry</title>

<!-- Open Graph -->
<meta property="og:locale" content="en_US" />
<meta property="og:site_name" content="Mike Levin SEO AI Education" />
<meta property="og:title" content="Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry" />
<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, RFC 9111 Edge Architecture & Web Telemetry" />

<!-- 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, RFC 9111 Edge Architecture & Web Telemetry" />
<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, RFC 9111 Edge Architecture & Web Telemetry" />

<!-- Other -->
<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." />
```

### Social Previews

Google

![](https://mikelev.in/favicon.ico)mikelev.in

### Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry

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

![Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry](https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png)

mikelev.in

Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry

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

Facebook

![Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry](https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png)

MIKELEV.IN

Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry

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 SEO AI Education

Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry

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, RFC 9111 Edge Architecture & Web Telemetry](https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png)

LinkedIn

![Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry](https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png)

Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry

mikelev.in

WhatsApp

Image too large for WhatsApp  
(2.63 MB > 500 KB limit)

mikelev.in

Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry

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.in](https://mikelev.in/)12:00

Slack

![](https://mikelev.in/favicon.ico)Mike Levin SEO AI Education

Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry

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, RFC 9111 Edge Architecture & Web Telemetry](https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png)

Telegram

![Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry](https://mikelev.in/assets/images/AI_Readiness_Consultant_RFC_9111.png)

Mike Levin SEO AI Education

Mike Levin — Wire-Truth Infrastructure, RFC 9111 Edge Architecture & Web Telemetry

Independent advisory and bare-metal NixOS AI observatory by Mike Levin: RFC 9110 Markdown content negotiation, RFC 9111 edge caching, and wire-truth audits.



---

## Book Analysis

### Ai Editorial Take
The most revealing moment in this session happens right at the end when the second git push takes 125.156 seconds—eight times longer than the 14.967-second single-article deploy—and triggers a YouTube Studio frame-starvation warning on the closet laptop. That 110-second delta is a physical measurement of template Blast Radius. Touching a single post in a static site only mutates the leaf; touching _layouts/default.html invalidates the root of the dependency tree, forcing Liquid, Kramdown, and the provenance dye injector to recompute all 1,557 pages while competing with a real-time video encoder on four Ice Lake cores. Watching a template edit register as an immediate drop in RTMP video bitrate turns abstract build-graph theory into a tangible, observable law of thermodynamics.

### 🐦 X.com Promo Tweet
```text
From Neovim's \h chop and the OS clipboard bus to semi-automated YouTube Live cuts, pruning 25 dead Jekyll templates, and wiring Open Graph and TechArticle JSON-LD.
https://mikelev.in/futureproof/clipboard-bus-myelinated-broadcast-jekyll-open-graph/
#NixOS #Jekyll #AI
```

### Title Brainstorm
* **Title Option:** The Clipboard Bus, Myelinated Broadcasts, and Pruning Jekyll for Open Graph
  * **Filename:** `clipboard-bus-myelinated-broadcast-jekyll-open-graph.md`
  * **Rationale:** Captures the three concrete pillars of the session: the OS clipboard as a zero-auth IPC pipeline, the neuroscience of manual-in-the-loop broadcast transitions, and the top-down Jekyll template pruning and Open Graph upgrade.
* **Title Option:** Coachman Over Skinner Box: Semi-Automated Releases and Jekyll Social Metadata
  * **Filename:** `coachman-over-skinner-box-semi-automated-jekyll-social-metadata.md`
  * **Rationale:** Highlights the cognitive contrast between variable-ratio vibe-coding and deliberate semi-automation while grounding the technical deliverable in Jekyll's social metadata overhaul.
* **Title Option:** From Neovim Hi-Ya to Open Graph: Reachability Pruning and Live Stream Handshakes
  * **Filename:** `neovim-hi-ya-open-graph-reachability-pruning-live-stream.md`
  * **Rationale:** Follows the chronological arc of the post from the initial Neovim visual-mode extraction through the YouTube Live card recycling to the 25-file template cleanup.
* **Title Option:** Why Semi-Automation Beats the Slot Machine: Clipboard Pipes and Checkable Social Cards
  * **Filename:** `semi-automation-beats-slot-machine-clipboard-pipes-social-cards.md`
  * **Rationale:** Foregrounds the behavioral neuroscience argument alongside the practical engineering of clipboard-driven workflows and explicit social card tags.

### Content Potential And Polish
- **Core Strengths:**
  - Complete end-to-end terminal transcripts showing the exact 9-step preview build, git push deployment, and OBS WebSocket cut-and-roll sequence in real time.
  - Rigorous grounding of why semi-automation builds activity-dependent myelin and avoids Lisanne Bainbridge's Ironies of Automation and B.F. Skinner's variable-ratio conditioning.
  - Concrete top-down dependency audit that proved 22 of 23 files in _includes and 3 of 6 files in _layouts were unreferenced fossils before deleting them cleanly.
  - Immediate fix for a subtle metadata collision where jekyll-seo-tag was stuffing 650-character author imprints into social descriptions instead of the 150-character meta_description.
- **Suggestions For Polish:**
  - Replace the 9.2 MB stand-in AI_Readiness_Consultant_RFC_9111.png with a compressed 1200x630 PNG under 500 KB and git-add it so X.com and messaging apps render the fallback card without timing out.
  - Add nice -n 19 ionice -c 3 ahead of bundle exec jekyll build in Honeybot's post-receive hook so full-site layout rebuilds never starve OBS of CPU cycles during live broadcasts.
  - Clean up the four NixOS 26.05 logind and gdm option-rename warnings in Honeybot's configuration.nix on the next infrastructure pass.

### Next Step Prompts
- Inspect remotes/honeybot/hooks/post-receive and remotes/honeybot/nixos/configuration.nix to wrap the Jekyll build and Python dye pass in nice -n 19 ionice -c 3 and resolve the four NixOS 26.05 deprecation warnings.
- Verify the live rendered HTML <head> on mikelev.in after staging a compressed 1200x630 assets/images/AI_Readiness_Consultant_RFC_9111.png to confirm og:image, twitter:card, and Schema.org TechArticle JSON-LD validate cleanly.
