Intervention ledger
Every change, dated
What changed on this site, when, why, and what it was expected to do. Written before the outcome was known, and never edited afterwards: a correction gets a new entry.
Structured data on the EntityMap vocabulary page
/entitymap/vocab/v1/, the page that documents the custom EntityMap types and predicates, now carries the same JSON-LD as every other page (WebSite, publisher, navigation, TVSeries, its own WebPage and a BreadcrumbList) and a visible breadcrumb back to the EntityMap companion. The text of the page is unchanged.
Why. It was the only HTML page on the site with no structured data, found by an Ahrefs site audit on 1 November.
Expected. No change in traffic. A crawler that lands on the vocabulary page can now place it in the site graph.
EntityMap companion carries the spec's attribution
entitymap.html now meets section 6 of the EntityMap v1.0 spec: the publisher's name as visible text in every chunk's cite ("[page title] - published by Alex Moss"), a data-publisher attribute on every chunk, a schema.org JSON-LD block per entity, and relations rendered as links to their target's section. Every chunk in entitymap.json carries a retrieved timestamp, and the companion is listed in the sitemap at weekly, 0.9. A post-build check fails the deploy if any of it drifts. The entities, chunks and relations are unchanged.
Why. The spec's creator read the live files on 31 October and pointed out that the companion had none of the attribution the spec requires. The cite text is the attribution that survives when a pipeline strips the HTML before ingestion; everything else here lived only in the JSON. Alex lifted the 3 November freeze for this change on the same day, so the five sites stay comparable.
Expected. No change in traffic. If an assistant quotes a chunk from the HTML companion, the publisher's name travels with it; before this, only the JSON carried it.
The Claude Skill in the structured data, the EntityMap and MCP
The skill is now described wherever an agent might look for it: a DataDownload node on /skills/ listing the 37 characters, a subjectOf link from every character's Person node to the skill and to that character's file, a second EntityMap chunk per character sourced from its skill file, a <link rel="agent-skills"> in every page head, a comment in robots.txt, SKILL.md listed in llms.txt, and the skill's files offered as MCP resources (listed on the server card), each read over MCP carrying its own research marker.
Why. On 20 October the skill was reachable through the discovery files and the Link header but not from the entity graphs or the MCP server, which are the surfaces most of this site's agent traffic actually uses.
Expected. Some MCP resources/list and resources/read calls from the directory crawlers already polling /mcp, visible as mcp requests in AgentWatch. Little or no change from the JSON-LD and EntityMap additions before the cutoff, since crawlers revisit those slowly.
A free Claude Skill for the 37 characters
A downloadable Agent Skill, familyguy-reference, with one file per character: voice cast with dates, relationships, first appearance, credited appearances and key episodes, each linking back to the character page. Served at /.well-known/agent-skills/ with the zip listed in the Agent Skills Discovery index under its sha256 digest, entered in both catalogues and llms.txt, advertised in the Link header on every page, and explained on a new /skills/ page linked from every character page. Each character file carries a research marker, different in the zip from the copy on the web.
Why. The skill format puts the site's facts, and its links, inside an assistant's own context once a person installs it, which no other surface here can do. The discovery index had been published empty since launch.
Expected. Few fetches before the 3 November cutoff: some from crawlers that read Agent Skills indexes and the AI catalogue, visible in AgentWatch as the skills surface, and a handful of zip downloads from people. A repeated character trace id, if one appears at all, says whether it came from an installed skill or from the web copy.
WebMCP switched on in Chrome through the origin trial
Every page now carries a Chrome origin trial token for WebMCP, valid until 30 March 2027. In Chrome versions taking part in the trial, the site's eight tools register with the browser on page load, so an agent running in the browser can call them without leaving the page. Other browsers are unaffected.
Why. The WebMCP adapter has been on the site since launch but could only register in browsers with the feature switched on by hand. The trial makes it available to ordinary Chrome users, the only way an in-browser agent will find it.
Expected. Very few registrations before the 3 November cutoff, since in-browser agents that use WebMCP are rare. The adapter's beacon logs registrations and calls to AgentWatch, so a single one would be evidence.
The whole site as one Open Knowledge Format bundle
Every page is now also published as a typed Markdown concept inside one gzipped archive at /familyguy.okf.tar.gz, following the Open Knowledge Format v0.2 draft. Each concept is the page's Markdown twin with frontmatter added: a type such as TV Episode or Person, the canonical URL, the exact Wikipedia revision the text was written from, and a status of draft wherever the written prose has not yet been reviewed by a person. Every directory has an index, links between pages point at the concepts they describe, and a log is drawn from this ledger. The bundle is listed in the Agentic Resource Discovery catalogue, the RFC 9727 API catalogue, llms.txt, the Link header and the about page, and the discovery catalogue now also lists the MCP server card, which it had left out.
Why. OKF is the packaged form of a site's knowledge that the ARD catalogue is designed to point at, and this site already had everything it needs in its twins. It is built from those twins on every deploy, so it cannot drift from the pages.
Expected. Very little traffic. Both drafts are early, and few agents fetch a bundle today. AgentWatch counts requests for it as their own surface, so any fetch before the data cutoff on 3 November is evidence that something reads the catalogue entry.
News is switched on, with the first story
The news pipeline is enabled. The first story, on Kieran Culkin voicing the Devil, was written by the pipeline from three trade press headlines and edited down to what those headlines say, because the feeds carried no summaries. The homepage now lists the latest stories, and each story links to the ones published either side of it. Scheduled runs at 08:00 and 20:00 UTC begin publishing on their own once the repository credential the pipeline commits with is in place.
Why. The pipeline had been built and tested since 23 September but never switched on, so the site had a news section with nothing in it.
Expected. One or two stories a week at most, since most headlines in a quiet week fail the checks or are not news. Feed readers and news-focused crawlers should start requesting /news/feed.xml, visible in AgentWatch.
News backfilled from the previous 90 days
The news pipeline was run over the last 90 days of the trade press feeds, which still held three Family Guy stories not yet covered: the voice cast for the Stewie spinoff (22 July), annual Halloween and holiday specials for Hulu with Kieran Culkin cast as the Devil (25 July), and the Halloween special's trailer (26 September). Each draft passed the pipeline's checks but added claims the headlines do not make, so each was cut back to what the headlines say, with every outlet that reported the same news credited. The stories are dated by when they were written; the news page now orders stories by the date of the reporting they cover.
Why. The feeds hold about three months of history and carry no summaries, so this is all the past news the pipeline can honestly write. An empty archive told readers and crawlers nothing.
Expected. No measurable effect on its own. The three stories are part of the news surface that AgentWatch reports, and the next scheduled runs add new stories as they appear.
Listed in the official MCP Registry
The site's MCP server, https://familyguy.co.uk/mcp, is published to the official MCP Registry at registry.modelcontextprotocol.io as uk.co.familyguy/episodes. Ownership of the domain is proved by a public key served at /.well-known/mcp-registry-auth.
Why. The registry is the directory MCP clients and other directories read from. Until now an agent could only find the server through this site's own discovery files.
Expected. A small number of new MCP sessions from clients or directories that read the registry, visible in AgentWatch as the mcp surface. Any before the 3 November cutoff can be attributed to the listing, since the server was otherwise unannounced.
IndexNow submits again, and no description stops mid-phrase
IndexNow submission is now on by default in every production build, instead of depending on a dashboard setting that had never been made: nothing was submitted between 12 September and 6 October. The first build after this change submits every page. Separately, sixteen meta descriptions that were cut off mid-phrase now end on a complete sentence, or with an ellipsis where a single long sentence cannot be shortened cleanly.
Why. The setting lived outside the repository and its absence produced no error, so a month of changes went unannounced to Bing and the other IndexNow engines. The cut descriptions were repeated in llms.txt and the OKF bundle as well as in search results.
Expected. A rise in Bingbot requests within a few days of the first submission, visible in AgentWatch, and faster pickup of changed pages by Bing from then on. No measurable effect from the descriptions on their own.
Every written page checked against its sources
All 461 episode summaries and 37 character profiles were checked against the Wikipedia revisions they were written from, in a second, separate Claude review pass that the publisher delegated instead of reading every page himself. 299 were corrected: plot details the source does not support, who did what, garbled sentences, real people not yet written as the programme's version of them, and padding. The 16 facts entries were reviewed too, and the one on the 100th episode was wrong and has been rewritten. Every page now says it was checked in this way, and that no person has read it.
Why. The pages had been marked as awaiting review since September. A review that never happens leaves known errors in place, and the publisher chose a checked agent pass over waiting.
Expected. Fewer factual errors repeated by assistants that quote the site. The provenance line on each page changes wording, which may cause a small round of recrawling.
The build now checks what the crawler used to find
Five checks were added to the post-build step: every JSON-LD property must point at a type its declared range accepts, every indexable page must carry a meta description of at least 110 characters, every page must have at least two incoming internal links, no Wikipedia link may contain an unencoded question mark, and a build that was told to submit to IndexNow must produce a submission manifest. The second Ahrefs crawl's findings were fixed alongside: episode pages now express voices and characters as two valid properties instead of one invalid one, and the related facts links rotate so no entry is left with a single inlink.
Why. Everything a crawler found a week later was mechanically detectable at build time. A check that runs on every deploy is worth more than an audit that runs when someone remembers.
Expected. No visible change. Fewer defects reaching the site, and the next crawl should be quiet.
The news pipeline writes with Workers AI
Stories are written by a model bound to the Worker rather than by an external API, so the pipeline needs no model account and no API key. The model was chosen by running the site's own house style checks against real trade press stories: of the models this account can reach, one produced a publishable story for both test items and the rest wrote paragraphs under the word floor, timed out, or declined. A draft that fails the checks gets one chance to fix what it broke, and is dropped if it still fails.
Why. The pipeline was blocked on an account that could not be created. Running on the platform the site already sits on removes the dependency entirely.
Expected. Fewer stories than a larger model would produce, because the checks reject more of what this one writes. A quiet week is the correct outcome when nothing passes.
Fixes from the first Ahrefs crawl
Season pages had hung their episode list off hasPart, which takes a CreativeWork and not an ItemList: the list is now the page's main entity and the season is what the page is about. Writer and director credits on every episode page now link to those people's pages, which gave 89 crew pages a second incoming link. Four Wikipedia links whose article titles end in a question mark were being truncated to a 404 and are now encoded. Twenty-seven photo licence links pointed at a redirect. The EntityMap companion gained the social metadata and the sitemap entry it lacked, llms.txt stopped inheriting the markdown twins' noindex, and the shortest meta descriptions were widened with facts rather than filler.
Why. A reference site that publishes structured data should have structured data that validates, and a page that exists to be found should be reachable by more than one link.
Expected. Nothing dramatic. Better crawl paths to the crew pages, and one fewer reason for a parser to discard the season markup.
WebMCP: the tools offered inside the page
The eight lookup tools already served as a manifest, an MCP endpoint and api-catalog entries are now also registered with navigator.modelContext, so an agent running in the browser can call them without leaving the page. The search form carries the draft's declarative annotations as well, so both halves of the spec are exercised. Browsers without the API download none of the code.
Why. The registry was built to drive every surface from one definition, and this was the surface left undone. It is also the last step of the rollout order the other site is following, so having it live here makes the two comparable.
Expected. Close to nothing measurable in the window: the API is behind an origin trial and few agents can call it. Registrations and invocations are counted separately, so an honest zero is reportable.
News section, written by the site itself
A scheduled job runs twice a day, sweeps an allowlist of trade press feeds for Family Guy reporting, writes a short factual story from the headline and the publisher's own summary, checks it against the site's house style rules, and commits it. The commit triggers the build, so nothing reaches the site without passing the same checks as every other page. Most runs publish nothing, and every run is logged with what it considered and why it rejected it.
Why. Everything else here was written before launch and then frozen. This is the first surface that adds pages on its own, and whether a site that publishes without anyone at the keyboard is treated differently is one of the questions worth answering.
Expected. New URLs at an irregular cadence, a handful a month at most. Unknown whether a section that is honest about being machine-written is cited more, less or the same.
before launch
Per-page modified dates
Every URL had carried the same lastmod, the data refresh stamp. Each page now takes its date from the last commit that changed the file its facts come from, and the JSON-LD agrees with the sitemap.
Why. One date across 673 URLs tells a crawler nothing about what moved, and it had already gone stale.
Expected. Better recrawl targeting after launch. Nothing measurable before it.
before launch
EntityMap index published
An entity-first index of the series and its characters, 38 entities and 89 relations, with a Wikidata identifier on every character and an HTML companion generated from the same data.
Why. Retrieval systems increasingly want entities rather than pages.
Expected. Unknown. Adoption of the format is early, which is the point of publishing it now.
before launch
Tool registry, MCP endpoint and server card
Eight deterministic lookup tools defined once and served as a JSON manifest, as an MCP endpoint over Streamable HTTP, and as api-catalog entries. No model generates an answer; every result is a lookup over the same rows the pages render.
Why. Everything the site can do should be callable, not just readable.
Expected. Closes the audit's MCP gap. Whether anything calls it is one of the questions the talk exists to answer.
before launch
Wrote the content: 461 episode summaries and 37 character profiles
Story summaries and sourced production notes for every episode, written from cited Wikipedia revisions, plus cast from the IMDb datasets and guest voices from TVmaze. Machine-checked for house style and for any run of eight words shared with the source.
Why. Until this point the site had facts but nothing to read. It is also what makes a which-episode lookup possible at all.
Expected. The interesting question. A readiness audit run afterwards scored the same band as before, so the content moved nothing by itself.
before launch
Cross-checked every episode against two independent sources
Wikidata and the IMDb non-commercial datasets, compared field by field. A disagreement blocks the build until it is corrected with a documented override or accepted with a written reason.
Why. A reference site is worth nothing if it is wrong, and a claim of accuracy is worth nothing if it is not mechanical.
Expected. No ranking effect. It is the reason the content can be trusted.
before launch
Agent-readiness stack
Chunked sitemaps, llms.txt, RSS and JSON feeds, per-type schema endpoints, schemamap, RFC 9727 api-catalog, security.txt, tdmrep.json, Content-Signal in robots.txt, Link headers advertising all of it, and conditional requests through the Worker.
Why. The launch state is the frozen baseline. Everything here had to be in place before launch so that later changes are attributable.
Expected. No immediate effect while gated. This is the baseline the talk measures from.
before launch
Site built and gated
Astro build on Cloudflare Workers: episode database from a Wikipedia seed, markdown twin of every page, client-side search. Put behind HTTP Basic Auth so nothing was crawlable.
Why. The experiment needs a site that exists before it needs a site that is indexed.
Expected. No effect. Nothing could reach it.