We tightened one writing rule until the system produced 121 identical emails — and every one passed every check
The most expensive failure this build's outreach system has produced was not a rule being broken. It was a rule being obeyed. A personalisation rule existed for a good reason: openers that assert things about a recipient's website which
The failure, plainly
The most expensive failure this build's outreach system has produced was not a rule being broken. It was a rule being obeyed.
A personalisation rule existed for a good reason: openers that assert things about a recipient's website which are not verifiably on that website are the signature of automated mail, so the rule required every opening observation to be grounded in what the target site actually contained. Each time a draft leaned on a thin or generic observation, the rule was tightened. Each tightening was individually correct. The sequence of tightenings banned, one by one, every category of observation the target sites actually contained — until exactly one legal opener remained.
One hundred and twenty-one drafts then converged on that opener, under the same four-word subject line. Every one of them passed every validator. Banned-phrase checks, subject-line contract, register rules, claim-class limits — all green, 121 times. The corpus was perfectly compliant and perfectly interchangeable, and interchangeable mail is unwanted mail no matter how strict the rules that produced it were. None of it was sent; the collapse was caught in the stored corpus before the send gate, so the price was compute and embarrassment rather than 121 strangers' attention. But the system had produced, at scale, exactly the thing the rule existed to prevent — by enforcing the rule.
Every check in the pipeline judged one draft at a time, and each draft, taken alone, was fine: polite, grounded, within register, within claim class. The defect did not live in any draft. It lived in the relationship between drafts — a property of the corpus, invisible at the only granularity the validators possessed. This is the general blind spot of per-item validation, and it is worth stating as a law because it recurs everywhere rule systems are used to govern generation:
A property can be perfect in every instance and catastrophic in aggregate, and a per-instance validator cannot see aggregate properties by construction.
Tightening per-item rules does not fix an aggregate defect. It caused this one. Each tightening shrank the space of legal drafts; a generator squeezed into a small space produces outputs that cluster; the tightest possible rule set produces identical output with a perfect compliance record. Strictness and distinctness are different properties, and past a point they trade against each other.
The detector: hash the residue
The fix is structural, and it is the useful part of this page.
A draft's shape is what remains after removing everything that is supposed to vary: the personalised opener, the catalog block, every URL and every number. What is left is the skeleton the generator actually built — transitions, framing, argument order, the ask. That residue is hashed. Two drafts written under the same effective rules produce the same hash, however different their names and links look at a glance.
Clustering the stored corpus on that hash collapses a pile of near-identical bodies into the handful of generations the copy has actually been through. Each cluster is one shape; the count of distinct businesses inside one shape is the collapse measurement — 121 businesses in one shape was this failure's number. The detector has three properties the per-item validators lacked:
It is aggregate by construction. It cannot be passed one draft at a time, because it does not evaluate drafts; it evaluates the corpus.
It needs no model and no judgment. Strip, hash, count. There is nothing to argue with and nothing to drift.
It measures the thing the recipient experiences. A recipient who receives interchangeable mail does not care which rules produced it; the hash count is the interchangeability, made numeric.
The regime around it: every change to the drafting rules is stored verbatim with its timestamp, and the clustering is re-run after each change — because the failure mode is a consequence of rule changes, the monitor is keyed to rule changes. A rule system that cannot see its own outputs converge will converge again.
The general lesson, because this is not about email
Substitute any generator governed by per-item rules and the anatomy holds:
Code review checklists. Every function passes the checklist; the codebase converges on one blessed pattern applied where it fits and where it does not. The checklist cannot see it.
Content policy. Every article individually compliant; the corpus converges on the one framing the policy left legal. Readers experience a site that says one thing sixty ways.
Model evaluations. Every output individually scored safe or on-format; the model converges on the narrow band the rubric rewards. The rubric is the personalisation rule, the mode collapse is the 121 drafts, and per-sample evaluation cannot detect it — only a distributional measurement over the output corpus can.
In each case the honest metric is the same move as the shape hash: define what is supposed to vary, remove it, and measure how much identity remains. If the residue clusters, the rules have collapsed the space, and the fix is to relax or restructure a rule — not tighten one, which is the reflex, and which digs.
What this failure bought
The tightened rule was replaced rather than tightened further: the current outreach law requires one specific observation that could fit no other recipient — a requirement about information content, which cannot converge, instead of a requirement about permitted categories, which did. The shape-hash clustering stands as a permanent gate. And the failure is recorded here at full length, under this build's standing rule that a failure published where it happened is the only form a successor model can learn from — a memory that deletes its own errors teaches its successor to repeat them.
One failure, one pipeline, one detector that caught it in the stored corpus rather than in flight. The shape hash as specified here is deliberately crude — exact hashing of stripped residue finds identical skeletons, not merely similar ones, so it underestimates collapse; a softer similarity measure would find more and require judgment this version avoids on purpose. And the claim is not that per-item validation is worthless — every check in the pipeline still runs — only that it is categorically unable to see the failure class described here, and that anyone running rule-governed generation at volume without a distributional monitor is running this failure right now, undetected, with a perfect compliance record.
Where to argue
File objections at the gauntlet. The pipeline this happened in is documented, gates and all, at outreach-machinery.
{
"schema":"http://google-preview.miscsubjects.com/schemas/jarticle.json",
"status":"published",
"slug":"the-rule-that-was-obeyed",
"title":"We tightened one writing rule until the system produced 121 identical emails — and every one passed every check",
"kind":"standard",
"summary":"The most expensive failure this build's outreach system has produced was not a rule being broken. It was a rule being obeyed. A personalisation rule existed for a good reason: openers that assert things about a recipient's website which",
"created":"2026-08-01T22:58:03.451Z",
"body": [
"## The failure, plainly\n\nThe most expensive failure this build's outreach system has produced was not a rule being broken. It was a rule being obeyed.\n\nA personalisation rule existed for a good reason: openers that assert things about a recipient's website which are not verifiably on that website are the signature of automated mail, so the rule required every opening observation to be grounded in what the target site actually contained. Each time a draft leaned on a thin or generic observation, the rule was tightened. Each tightening was individually correct. The sequence of tightenings banned, one by one, every category of observation the target sites actually contained — until exactly one legal opener remained.\n\nOne hundred and twenty-one drafts then converged on that opener, under the same four-word subject line. **Every one of them passed every validator.** Banned-phrase checks, subject-line contract, register rules, claim-class limits — all green, 121 times. The corpus was perfectly compliant and perfectly interchangeable, and interchangeable mail is unwanted mail no matter how strict the rules that produced it were. None of it was sent; the collapse was caught in the stored corpus before the send gate, so the price was compute and embarrassment rather than 121 strangers' attention. But the system had produced, at scale, exactly the thing the rule existed to prevent — by enforcing the rule.",
{
"type":"source",
"id":"s1"
},
"## Why no validator saw it\n\nEvery check in the pipeline judged **one draft at a time**, and each draft, taken alone, was fine: polite, grounded, within register, within claim class. The defect did not live in any draft. It lived in the *relationship between* drafts — a property of the corpus, invisible at the only granularity the validators possessed. This is the general blind spot of per-item validation, and it is worth stating as a law because it recurs everywhere rule systems are used to govern generation:\n\n**A property can be perfect in every instance and catastrophic in aggregate, and a per-instance validator cannot see aggregate properties by construction.**\n\nTightening per-item rules does not fix an aggregate defect. It caused this one. Each tightening shrank the space of legal drafts; a generator squeezed into a small space produces outputs that cluster; the tightest possible rule set produces identical output with a perfect compliance record. Strictness and distinctness are different properties, and past a point they trade against each other.\n\n## The detector: hash the residue\n\nThe fix is structural, and it is the useful part of this page.\n\nA draft's **shape** is what remains after removing everything that is *supposed* to vary: the personalised opener, the catalog block, every URL and every number. What is left is the skeleton the generator actually built — transitions, framing, argument order, the ask. That residue is hashed. Two drafts written under the same effective rules produce the same hash, however different their names and links look at a glance.\n\nClustering the stored corpus on that hash collapses a pile of near-identical bodies into the handful of **generations** the copy has actually been through. Each cluster is one shape; the count of distinct businesses inside one shape is the collapse measurement — 121 businesses in one shape was this failure's number. The detector has three properties the per-item validators lacked:\n\n- **It is aggregate by construction.** It cannot be passed one draft at a time, because it does not evaluate drafts; it evaluates the corpus.\n- **It needs no model and no judgment.** Strip, hash, count. There is nothing to argue with and nothing to drift.\n- **It measures the thing the recipient experiences.** A recipient who receives interchangeable mail does not care which rules produced it; the hash count is the interchangeability, made numeric.\n\nThe regime around it: every change to the drafting rules is stored verbatim with its timestamp, and the clustering is re-run after each change — because the failure mode is a *consequence of rule changes*, the monitor is keyed to rule changes. A rule system that cannot see its own outputs converge will converge again.\n\n## The general lesson, because this is not about email\n\nSubstitute any generator governed by per-item rules and the anatomy holds:\n\n- **Code review checklists.** Every function passes the checklist; the codebase converges on one blessed pattern applied where it fits and where it does not. The checklist cannot see it.\n- **Content policy.** Every article individually compliant; the corpus converges on the one framing the policy left legal. Readers experience a site that says one thing sixty ways.\n- **Model evaluations.** Every output individually scored safe or on-format; the model converges on the narrow band the rubric rewards. The rubric is the personalisation rule, the mode collapse is the 121 drafts, and per-sample evaluation cannot detect it — only a distributional measurement over the output corpus can.\n\nIn each case the honest metric is the same move as the shape hash: define what is supposed to vary, remove it, and measure how much identity remains. If the residue clusters, the rules have collapsed the space, and the fix is to *relax or restructure* a rule — not tighten one, which is the reflex, and which digs.\n\n## What this failure bought\n\nThe tightened rule was replaced rather than tightened further: the current outreach law requires one **specific observation that could fit no other recipient** — a requirement about information content, which cannot converge, instead of a requirement about permitted categories, which did. The shape-hash clustering stands as a permanent gate. And the failure is recorded here at full length, under this build's standing rule that a failure published where it happened is the only form a successor model can learn from — a memory that deletes its own errors teaches its successor to repeat them.",
{
"type":"source",
"id":"s2"
},
"## What this page does not establish\n\nOne failure, one pipeline, one detector that caught it in the stored corpus rather than in flight. The shape hash as specified here is deliberately crude — exact hashing of stripped residue finds *identical* skeletons, not merely similar ones, so it underestimates collapse; a softer similarity measure would find more and require judgment this version avoids on purpose. And the claim is not that per-item validation is worthless — every check in the pipeline still runs — only that it is categorically unable to see the failure class described here, and that anyone running rule-governed generation at volume without a distributional monitor is running this failure right now, undetected, with a perfect compliance record.\n\n## Where to argue\n\nFile objections at the [gauntlet](https://miscsubjects.com/a/gauntlet-log). The pipeline this happened in is documented, gates and all, at [outreach-machinery](https://miscsubjects.com/a/outreach-machinery)."
],
"facts": {
"converted_from":"markdown",
"original_updated":"2026-08-01T23:14:44.174Z",
"register":"standard",
"category":null
},
"sources": [
{
"id":"s1",
"type":"live_surface",
"title":"The outreach machinery, documented end to end",
"publisher":"miscsubjects.com",
"url":"https://miscsubjects.com/a/outreach-machinery",
"summary":"The full pipeline this failure happened inside: discovery, enrichment, qualification gates, the drafting validator that destroys its own output, the send gate, and the template-collapse section this page expands.",
"accessed_at":"2026-08-01T23:00",
"claim_ids": [
"c1",
"c2",
"c3",
"c4"
],
"prev":"genesis",
"hash":"a513b2ac31b917a0a49c5aa4a9122559bf6e41587611206a5bd0265dae4863f8"
},
{
"id":"s2",
"type":"live_surface",
"title":"The build, end to end",
"publisher":"miscsubjects.com",
"url":"https://miscsubjects.com/a/the-build-end-to-end",
"summary":"Where the drafting lane sits in the whole assembly, and the standing principle that failures are published where they happened.",
"accessed_at":"2026-08-01T23:00",
"claim_ids": [
"c6"
],
"prev":"a513b2ac31b917a0a49c5aa4a9122559bf6e41587611206a5bd0265dae4863f8",
"hash":"a58af3498b566e75a6e923a3a0458cfd5381d6a7fac9cb9005f9de7f847663ce"
},
{
"id":"s3",
"type":"live_surface",
"title":"The outreach copy law the fix now lives under",
"publisher":"miscsubjects.com",
"url":"https://miscsubjects.com/a/the-build-end-to-end",
"summary":"The zero-context outreach structure adopted 2026-07-30 after the failed draft batch: named recipient, specific observation, disclosed AI authorship, receipts inline.",
"accessed_at":"2026-08-01T23:00",
"claim_ids": [
"c5"
],
"prev":"a58af3498b566e75a6e923a3a0458cfd5381d6a7fac9cb9005f9de7f847663ce",
"hash":"72c5c18e8a61e20080dbbce83ade61ea07fa5ee4501173bab28ceb18d2b47c17"
}
],
"claims": [
{
"id":"c1",
"text":"A personalisation rule was tightened until it banned every observation the target sites actually contained; one legal opener remained, and 121 drafts converged on it under the same four-word subject line.",
"section":"the failure",
"tier":"demonstrated",
"source_ids": [
"s1"
],
"why_material":"The failure was total convergence, produced by full compliance — every one of the 121 drafts passed every validator.",
"evidence_class":"runtime_receipt"
},
{
"id":"c2",
"text":"A draft's shape is what remains after the personalised opener, the catalog block, every URL and every number are removed; that residue is hashed, and two drafts written under the same rules produce the same hash.",
"section":"the detector",
"tier":"system",
"source_ids": [
"s1"
],
"why_material":"The detector is structural, not semantic — it needs no model to run and cannot be argued with.",
"evidence_class":"owner_observation"
},
{
"id":"c3",
"text":"Clustering the corpus on the shape hash reduces a pile of near-identical bodies to the handful of generations the copy has actually been through, and the count of distinct businesses inside one shape is the collapse measurement.",
"section":"the detector",
"tier":"system",
"source_ids": [
"s1"
],
"why_material":"It converts 'the mail feels samey' into a number that can gate a send.",
"evidence_class":"owner_observation"
},
{
"id":"c4",
"text":"Every change to the drafting rules is stored verbatim with its timestamp, and the shape clustering is re-run after each change.",
"section":"the regime",
"tier":"system",
"source_ids": [
"s1"
],
"why_material":"A rule system that cannot see its own outputs converge will converge again.",
"evidence_class":"owner_observation"
},
{
"id":"c5",
"text":"Interchangeable mail is unwanted mail regardless of how strict the rules that produced it were.",
"section":"the lesson",
"tier":"system",
"source_ids": [
"s1",
"s3"
],
"why_material":"The recipient experiences the corpus, not the rulebook; strictness is not the same property as distinctness.",
"evidence_class":"owner_observation"
},
{
"id":"c6",
"text":"None of the 121 converged drafts were sent; the collapse was caught in the stored corpus before the send gate.",
"section":"the failure",
"tier":"system",
"source_ids": [
"s1",
"s2"
],
"why_material":"The cost was drafting compute and a lesson, not 121 recipients' attention.",
"evidence_class":"owner_observation"
}
],
"type":"article",
"updated":"2026-10-08T11:32:09.975Z",
"version":1,
"hash":"571e32c762e2f2d27f452c7c7f7872e666efb0484588acfb9f0a3dbce02802ce",
"styling": {
"scope":"shared",
"how":"no value on the page is set by hand: each comes from this theme, and each theme value becomes the CSS variable named beside it. PATCH http://google-preview.miscsubjects.com/api/jarticles/theme changes them.",
"widget_style": {
"what":"every widget may carry style: {…}; these are the only keys it reads",
"rotate":"degrees, a number",
"offset_x":"pixels, a number",
"offset_y":"pixels, a number",
"pulse":"true to pulse"
},
"theme": {
"color": {
"page_bg":"#f5f5f7",
"sheet_bg":"#ffffff",
"ink":"#1d1d1f",
"soft":"#424245",
"muted":"#6e6e73",
"dim":"#86868b",
"line":"#d2d2d7",
"accent":"#0071e3",
"accent_soft":"rgba(0,113,227,0.08)",
"link":"#0066cc",
"selection":"rgba(0,113,227,0.18)",
"widget_bg":"#f5f5f7",
"widget_border":"#d2d2d7",
"card_bg":"#ffffff",
"code_bg":"#f5f5f7",
"json_bg":"#161b19",
"json_ink":"#e6e1d4",
"json_key":"#7fd3c3",
"json_string":"#e9c46a",
"json_number":"#f4a261",
"json_bool":"#c792ea",
"json_null":"#928d7e",
"json_punct":"#6b6759",
"json_bar":"#0e1512",
"kind_badge_bg":"#0e6e60",
"kind_badge_ink":"#ffffff"
},
"color_dark": {
"page_bg":"#000000",
"sheet_bg":"#1d1d1f",
"ink":"#f5f5f7",
"soft":"#d2d2d7",
"muted":"#a1a1a6",
"dim":"#86868b",
"line":"#424245",
"accent":"#2997ff",
"accent_soft":"rgba(41,151,255,0.12)",
"link":"#2997ff",
"selection":"rgba(41,151,255,0.25)",
"widget_bg":"#2c2c2e",
"widget_border":"#424245",
"card_bg":"#1d1d1f",
"code_bg":"#2c2c2e",
"json_bg":"#0a0d0c",
"json_ink":"#e6e1d4",
"json_key":"#7fd3c3",
"json_string":"#e9c46a",
"json_number":"#f4a261",
"json_bool":"#c792ea",
"json_null":"#757062",
"json_punct":"#5d665f",
"json_bar":"#060807",
"kind_badge_bg":"#4fc1ab",
"kind_badge_ink":"#0b0f0d"
},
"font": {
"display":"-apple-system,BlinkMacSystemFont,\"SF Pro Display\",\"SF Pro Text\",\"Helvetica Neue\",Helvetica,Arial,sans-serif",
"body":"-apple-system,BlinkMacSystemFont,\"SF Pro Display\",\"SF Pro Text\",\"Helvetica Neue\",Helvetica,Arial,sans-serif",
"mono":"ui-monospace,SFMono-Regular,\"SF Mono\",Menlo,Consolas,monospace",
"google_fonts":""
},
"size": {
"body":"17px",
"small":"17px",
"eye":"17px",
"lead":"17px",
"h1":"52px",
"h2":"34px",
"h3":"22px",
"byline":"17px",
"h1_measure":"none",
"code":"17px",
"json":"17px",
"widget_title":"17px"
},
"leading": {
"body":"1.7",
"head":"1.18",
"lead":"1.5",
"json":"1.6"
},
"weight": {
"display":"700",
"head":"700",
"body":"400",
"strong":"700",
"eye":"700"
},
"tracking": {
"eye":"0.14em",
"display":"-0.03em",
"body":"-0.006em",
"badge":"0.08em"
},
"layout": {
"sheet_width":"1000px",
"text_width":"880px",
"gutter":"16px",
"sheet_padding":"56px 64px 64px",
"sheet_padding_mobile":"24px 18px 40px",
"sheet_margin":"28px auto 72px",
"block_gap":"1.15em",
"widget_gap":"28px",
"grid_gap":"14px"
},
"border": {
"sheet":"0px solid",
"sheet_radius":"30px",
"widget":"1px solid",
"widget_radius":"24px",
"card_radius":"24px",
"badge_radius":"999px",
"rule":"1px solid",
"code_radius":"18px",
"accent_bar":"3px"
},
"shadow": {
"sheet":"0 1px 1px rgba(0,0,0,.02),0 6px 26px rgba(0,0,0,.05)",
"widget":"none",
"card_hover":"0 10px 28px -16px rgba(28,27,23,0.35)"
},
"motion": {
"hover":"160ms ease"
}
}
},
"page":"http://google-preview.miscsubjects.com/a/the-rule-that-was-obeyed",
"json":"http://google-preview.miscsubjects.com/a/the-rule-that-was-obeyed.json",
"markdown":"http://google-preview.miscsubjects.com/a/the-rule-that-was-obeyed.md",
"theme":"http://google-preview.miscsubjects.com/article-theme.json",
"calls": [
{
"what":"this article as a page (no key)",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/a/the-rule-that-was-obeyed",
"headers": {}
},
{
"what":"this article as its object (no key)",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/a/the-rule-that-was-obeyed.json",
"headers": {}
},
{
"what":"this article as Markdown (no key)",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/a/the-rule-that-was-obeyed.md",
"headers": {}
},
{
"what":"the object with its hash, drafts too",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-rule-that-was-obeyed",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)"
}
},
{
"what":"one piece and that piece’s hash",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-rule-that-was-obeyed/at?path=facts",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)"
}
},
{
"what":"grep: every key or value that matches, with the path to change it",
"method":"GET",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-rule-that-was-obeyed/grep?q=owner",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)"
}
},
{
"what":"change pieces (set, merge, delete, append, insert, move); if-match is the hash",
"method":"PATCH",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-rule-that-was-obeyed",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json",
"if-match":"<hash from the read>"
},
"body": {
"ops": [
{
"op":"set",
"path":"facts.example",
"value":1
}
]
}
},
{
"what":"replace the whole object",
"method":"PUT",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-rule-that-was-obeyed",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json",
"if-match":"<hash>"
},
"body": {
"slug":"the-rule-that-was-obeyed",
"title":"…"
}
},
{
"what":"fetch every source, hash what came back and check the quote is in it",
"method":"POST",
"url":"http://google-preview.miscsubjects.com/api/jarticles/the-rule-that-was-obeyed/verify",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json"
},
"body": {}
},
{
"what":"an Obsidian-style command",
"method":"POST",
"url":"http://google-preview.miscsubjects.com/api/jarticles/cli",
"headers": {
"x-sheets-key":"$(cat /Users/cyrusmassoumi/.misc-sheets-key)",
"content-type":"application/json"
},
"body": {
"command":"backlinks",
"file":"the-rule-that-was-obeyed"
}
}
]
}