diff --git a/SCRATCHPAD.md b/SCRATCHPAD.md
index a76869c83..951a4965f 100644
--- a/SCRATCHPAD.md
+++ b/SCRATCHPAD.md
@@ -2854,3 +2854,31 @@ Removed the Canvas page and Creative Studio from the website, replacing it with
the relay session.
- test:palmier script pointed at vitest (node --test broke after the
runner port).
+
+## Session 2026-08-01 — ISSUE 428 pressed (branch: claude/youtube-monetization-rules-pv8pos)
+
+- ISSUE 428 "NOTHING NEW WAS ADDED" — YouTube's 15 July 2025
+ "inauthentic content" rename, read under two lenses. `compare`,
+ second instance (406 was the first); no pattern extracted per
+ interaction-language rule 7. cream stock, classic layout, brick
+ accent, coverSeal NO NEW POLICIES · III·27.
+- Six facts, all externally sourced and dated, verified against the
+ platform's own help pages plus Social Media Today / PPC Land /
+ Search Engine Journal / Tubefilter before the issue was set. This is
+ why CompareSpread gained an optional `references` block (406
+ unaffected); CompareFeature + CSS render it under `pop-compare-refs`.
+- Unlike 406 this piece GIVES a verdict: THE LETTER and THE QUEUE
+ answer different questions (what you are owed vs what you meet), so
+ declining would have been a false symmetry rather than honesty.
+- Artifact edition `artifacts/428-nothing-new-was-added.html` — THE
+ REVIEW QUEUE, six-stratum descent (upload → classifier → three
+ buckets → second look → icon → the rule). Depth axis = the review
+ stack; carried context = the upload's character (three authored
+ composites) re-inking every stratum; floor resolves per carry.
+ Seed 428-0715 printed. Timer-robust clock (rAF-vs-setTimeout race),
+ reduced-motion collapse, print stacks all strata.
+- Gates: check-editorial clean (69 issues), check-adherence clean
+ (0 raw hex), `npm run build` green, 811/811 vitest.
+- NOT deployed. This is a feature branch; only a push to main
+ publishes. Artifact not published to the claude.ai surface either —
+ Isaac's call.
diff --git a/artifacts/428-nothing-new-was-added.html b/artifacts/428-nothing-new-was-added.html
new file mode 100644
index 000000000..5f8f2b4cd
--- /dev/null
+++ b/artifacts/428-nothing-new-was-added.html
@@ -0,0 +1,435 @@
+
+
+
+
+
+
+ KERNEL.CHAT · ISSUE 428 · MAR 2027
+ ★
+ SEED 428-0715 · PRINTED
+
+
+
+ THE BORE · 掘削 · THE POLICY DESK
+ Nothing new was added.
+ 何ひとつ新しくはない — 規則は動かず、審査の列だけが動いた
+ The spread argues the text. This page lowers a probe through the
+ machinery the text runs on: six strata from the file you uploaded to the sentence
+ that judges it. Pick what you are sending down first — the carry re-inks every
+ stratum beneath it. Every stratum is legible from the surface; the probe raises
+ emphasis, it never conjures a layer that was not already there.
+
+
+
+ The carry · 積荷 — what is being lowered
+
+ Original commentaryone voice, own cuts, own argument
+ Templated at scalesame narration, swapped slides, forty a day
+ Synthetic presenter, healtha persona advising on blood pressure
+
+ The three carries are authored composites, written from the
+ policy text — not case files, not anyone's channel.
+
+
+
+
+
+ ★ Lower the probe
+ One control, honestly geared: each press descends exactly one stratum.
+ At the floor it raises you back to the surface.
+
+
+
+ Session ledger · 台帳 — this window only; unrecorded; reload erases it
+
+ DEPTH REACHED 0 of 5
+ DESCENTS 0
+ CARRIES CHANGED 0
+ TIME IN THE BORE 00:00
+
+
+
+
+
+
+
The floor · 底 — stratum −5, the rule itself
+
Content must be original and authentic. On 15 July 2025 that
+ sentence was renamed, not rewritten.
+
+
No new policies were added · III·27
+
+
+
+
+
+ NOTHING NEW WAS ADDED · 何ひとつ新しくはない · KERNEL PRESS ★
+ Every stratum on this page is drawn in-house from published policy text — nothing is
+ generated, no request leaves this page, and no channel or upload is described. The three
+ carries are authored composites. The bore is deterministic from seed 428-0715 ,
+ printed at the masthead: at rest it always reads the same. The session ledger counts only
+ your own descents, carry changes, and the clock since this page loaded; it is held in
+ memory, sent nowhere, and erased on reload. Under reduced motion the probe stops moving
+ and every stratum stands at full ink. Print stacks all six strata, at every carry, with
+ the controls removed. Sources: the platform's monetization policy pages and the
+ additional-reviews notice of 10 March 2025, cited in full in the issue's policy file.
+
+
+
+
+
diff --git a/src/components/CompareFeature.css b/src/components/CompareFeature.css
index cf1e8c4f7..6b5cbd695 100644
--- a/src/components/CompareFeature.css
+++ b/src/components/CompareFeature.css
@@ -313,6 +313,96 @@
text-align: center;
}
+/* ── Works cited — back-of-book grammar, not footnotes ──── */
+.pop-compare-refs {
+ max-width: 640px;
+ margin: 56px auto 0;
+ padding: 28px 0 0;
+ border-top: 1px solid var(--pop-hairline);
+}
+
+.pop-compare-refs-head {
+ display: flex;
+ flex-direction: column;
+ gap: 6px;
+ margin-bottom: 20px;
+}
+
+.pop-compare-refs-note {
+ font-family: var(--font-serif);
+ font-style: italic;
+ font-size: 14px;
+ color: var(--pop-coffee);
+ margin: 4px 0 0;
+ max-width: 52ch;
+}
+
+.pop-compare-refs-list {
+ list-style: none;
+ margin: 0;
+ padding: 0;
+ display: flex;
+ flex-direction: column;
+ gap: 12px;
+}
+
+.pop-compare-refs-item {
+ display: grid;
+ grid-template-columns: 36px 1fr;
+ gap: 8px;
+ font-family: var(--font-serif);
+ font-size: 14px;
+ line-height: 1.5;
+ color: var(--pop-ink);
+}
+
+.pop-compare-refs-n {
+ font-family: var(--font-mono);
+ font-size: 10px;
+ letter-spacing: 0.08em;
+ color: var(--issue-accent);
+ font-weight: 700;
+ padding-top: 2px;
+}
+
+.pop-compare-refs-authors {
+ font-family: var(--font-mono);
+ font-size: 11px;
+ letter-spacing: 0.04em;
+ text-transform: uppercase;
+ color: var(--pop-coffee);
+}
+
+.pop-compare-refs-year {
+ font-family: var(--font-mono);
+ font-size: 11px;
+ color: var(--pop-coffee);
+}
+
+.pop-compare-refs-title {
+ font-style: italic;
+ color: var(--pop-ink);
+}
+
+.pop-compare-refs-journal {
+ font-family: var(--font-mono);
+ font-size: 11px;
+ letter-spacing: 0.04em;
+ color: var(--pop-coffee);
+}
+
+.pop-compare-refs-dot { color: var(--pop-ink); }
+
+/* Ink stock — flip the citation colors for dark paper. */
+.pop-compare.pop-stock-ink .pop-compare-refs { border-top-color: rgba(250, 249, 246, 0.18); }
+.pop-compare.pop-stock-ink .pop-compare-refs-note { color: var(--pop-sepia); }
+.pop-compare.pop-stock-ink .pop-compare-refs-item { color: var(--pop-ivory); }
+.pop-compare.pop-stock-ink .pop-compare-refs-authors,
+.pop-compare.pop-stock-ink .pop-compare-refs-year,
+.pop-compare.pop-stock-ink .pop-compare-refs-journal { color: var(--pop-sepia); }
+.pop-compare.pop-stock-ink .pop-compare-refs-title,
+.pop-compare.pop-stock-ink .pop-compare-refs-dot { color: var(--pop-ivory); }
+
/* ── Print — both lenses' readings stack per fact ───────── */
@media print {
.pop-compare-switch { display: none; }
diff --git a/src/components/CompareFeature.tsx b/src/components/CompareFeature.tsx
index 6c31e8b58..469499351 100644
--- a/src/components/CompareFeature.tsx
+++ b/src/components/CompareFeature.tsx
@@ -149,6 +149,32 @@ export function CompareFeature({ spread, issue }: CompareFeatureProps) {
)}
+ {/* ── Works cited (optional) ──────────────────────── */}
+ {spread.references && (
+
+
+ {spread.references.kicker}
+ {spread.references.note && (
+ {spread.references.note}
+ )}
+
+
+ {spread.references.items.map((ref, i) => (
+
+ {String(i + 1).padStart(2, '0')}
+
+ {ref.authors}
+ ({ref.year}).
+ {ref.title}
+ {ref.journal && . {ref.journal} }
+ .
+
+
+ ))}
+
+
+ )}
+
{/* ── Sign-off ────────────────────────────────────── */}
diff --git a/src/content/issues/428.ts b/src/content/issues/428.ts
new file mode 100644
index 000000000..e695fd45e
--- /dev/null
+++ b/src/content/issues/428.ts
@@ -0,0 +1,289 @@
+/* ──────────────────────────────────────────────────────────────
+ ISSUE 428 — MAR 2027
+ NOTHING NEW WAS ADDED
+ 何ひとつ新しくはない — 規則は動かず、審査の列だけが動いた
+
+ The second `compare` instance (406 was the first, and remains the
+ only other). Per docs/interaction-language.md rule 7, two
+ instances is the threshold at which a pattern MAY be extracted —
+ this issue deliberately does not extract one. CompareFeature is
+ reused as written; the only change to it is an optional
+ `references` block, which every prior compare (406) is unaffected
+ by because it is optional.
+
+ The material: YouTube's 15 July 2025 monetization update, which
+ renamed the "repetitious content" policy to "inauthentic content"
+ and named three categories that make a channel ineligible. The
+ platform's own framing, repeated in every clarification since:
+ no new policies were added to the Partner Program.
+
+ Why a switch and not an essay: the load-bearing sentence is
+ literally true and practically incomplete, and those are not
+ points on a spectrum. Read as THE LETTER, the July update moved
+ nothing — the eligibility bar is where it always was, generative
+ AI is explicitly not the question, reaction videos with original
+ commentary are untouched. Read as THE QUEUE, a policy lives where
+ it is enforced, and the update handed the review stack three new
+ handles, two of which ("generic", "off-putting") are affective
+ judgments made at a scale only a classifier can serve. Both
+ readings survive the same six facts. There is no blended reading
+ that is sixty per cent letter and forty per cent queue.
+
+ Unlike 406, this piece DOES give a verdict. 406 declined because
+ both of its readings had equal claim on the same day; here they
+ do not — they answer different questions (what you are owed
+ versus what you will meet), and saying so is the honest
+ resolution rather than a false symmetry.
+
+ Every fact is externally sourced and dated; the six citations are
+ filed in the spread's own references block, which is what the
+ `references` field was added to CompareSpread for. No fact is
+ invented for symmetry, and no reading is written as a strawman —
+ THE LETTER is argued as the platform would argue it.
+
+ Identity decisions:
+ • coverStock = 'cream' — the anchor stock, unused across the
+ 419–427 run. The plainest paper in the cabinet for the least
+ novel policy update: the material makes the argument before
+ the headline does.
+ • coverLayout = 'classic' — the switch lives inside the spread;
+ the cover has no apparatus to stage.
+ • coverSeal = NO NEW POLICIES · III·27 — the signature move.
+ The platform's own sentence, stamped as a rubber seal, in the
+ corner where a reader expects an embargo notice. The stamp
+ is the claim the whole issue is a reading of.
+ • accent = 'brick' — deeper, archival, record-of-record. Unused
+ in the 419–427 run, and the correct register for a piece
+ whose subject is a text rather than an event.
+ • spread.type = 'compare', spread.stock = 'cream'.
+
+ Artifact edition: artifacts/428-nothing-new-was-added.html —
+ THE REVIEW QUEUE, a six-stratum descent of one upload from the
+ file to the rule that judges it. The depth axis (artifact-
+ language §III) is the review stack itself, which the spread has
+ no room for: the spread argues the text, the artifact lowers a
+ probe through the machinery the text runs on. Carried context is
+ the upload's character, chosen at the surface, re-inking every
+ stratum below it. What the reduction gives up: the descent, the
+ gauge, and the three-way carry — the spread keeps the binary
+ because the binary is the argument.
+ ────────────────────────────────────────────────────────────── */
+
+import type { IssueRecord } from './index'
+
+export const ISSUE_428: IssueRecord = {
+ number: '428',
+ month: 'MAR',
+ year: '2027',
+ feature: 'NOTHING NEW WAS ADDED',
+ featureJp: '何ひとつ新しくはない',
+ price: '¥0 · BYOK',
+ tagline: 'MAGAZINE FOR CITY CODERS · 街のコーダーのために',
+
+ coverStock: 'cream',
+ coverLayout: 'classic',
+
+ coverSeal: {
+ label: 'NO NEW POLICIES',
+ date: 'III·27',
+ },
+
+ accent: 'brick',
+
+ headline: {
+ prefix: 'Nothing',
+ emphasis: 'New',
+ suffix: ' Was Added.',
+ swash: 'A platform renamed one policy and half the internet read a ban. The text moved nothing. The review queue moved anyway. Six facts, read both ways, on a switch.',
+ },
+
+ coverDeck:
+ 'A platform renamed one policy and half the internet read a ban. Six facts, read both ways.',
+
+ contents: [
+ { n: '001', en: 'A rename that renamed nothing', jp: '名を変えただけの改訂', tag: 'POLICY' },
+ { n: '002', en: 'The sentence nobody finished reading', jp: '誰も読み終えなかった一文', tag: 'FACT' },
+ { n: '003', en: 'The three that lose the money', jp: '収益を失う三分類', tag: 'FACT' },
+ { n: '004', en: 'The tool was never the question', jp: '道具は問題ではなかった', tag: 'FACT' },
+ { n: '005', en: 'Reactions were never the target', jp: 'リアクションは的ではない', tag: 'FACT' },
+ { n: '006', en: 'The second look, and the wait', jp: '再審査と、その待ち時間', tag: 'QUEUE' },
+ ],
+
+ spread: {
+ type: 'compare',
+ kicker: 'THE SWITCH · 二読',
+ title: 'Nothing New Was Added.',
+ titleJp: '何ひとつ新しくはない。',
+ deck: 'On 15 July 2025 a platform renamed one policy and published a sentence: no new policies were added to the Partner Program. It is true. It is also the least useful true sentence of that year. Read as THE LETTER, the rules stand exactly where they stood. Read as THE QUEUE, three new words entered the machinery that decides what your upload earns. Same six facts. Flip the switch.',
+ byline: 'BY THE EDITORS · KERNEL.CHAT',
+ stock: 'cream',
+
+ intro: [
+ {
+ heading: 'A clarification is not nothing',
+ headingJp: '明確化は、無ではない',
+ paragraphs: [
+ 'The update was small enough to be a footnote. A policy called "repetitious content" — in force since long before a model could render a face — became a policy called "inauthentic content", and three categories were spelled out underneath it: content that is generic, templated, or mass-produced; content that is off-putting or distressing; and synthetic personas presenting as authorities on health, finance, law, or politics. The platform said, in as many words, that nothing had been added to the Partner Program. Every clarification since has said it again.',
+ 'And the creator internet read a ban on AI. Not because anyone lied, but because a rule and its enforcement are two different objects, and only one of them was published. The text is a promise about what you are owed. The queue is a description of what you will meet. This piece holds both, on a switch, because there is no reading that is part-way between a promise and a description — the honest move is to give the reader all six facts under one lens, then all six under the other.',
+ ],
+ },
+ ],
+
+ lenses: [
+ {
+ id: 'letter',
+ label: 'THE LETTER',
+ labelJp: '条文',
+ stance:
+ 'Read the text as written and nothing moved: a rename of a guideline already in force, tool-agnostic by design, with the eligibility bar exactly where it has always been.',
+ },
+ {
+ id: 'queue',
+ label: 'THE QUEUE',
+ labelJp: '審査',
+ stance:
+ 'A policy lives where it is enforced. Three new words entered a review stack that runs at platform scale, and a new word is a new handle — whatever the changelog says.',
+ },
+ ],
+
+ defaultLens: 'letter',
+
+ facts: [
+ {
+ fact: 'On 15 July 2025 the "repetitious content" policy was renamed "inauthentic content".',
+ factJp:
+ '2025年7月15日、「繰り返しの多いコンテンツ」の規定が「本物ではないコンテンツ」に改称された。',
+ readingA:
+ 'A minor update to a longstanding guideline, in the platform\'s own words. Content of this kind has never been eligible for monetization; the rename makes the existing bar easier to describe to the people it applies to.',
+ readingB:
+ 'The old name described a measurable property — a thing repeats or it does not. The new one names a judgment. "Repetitious" is something you can count; "inauthentic" is something somebody has to decide about you.',
+ },
+ {
+ fact: 'The platform stated that no new policies were added to the Partner Program.',
+ factJp:
+ 'YouTubeは、パートナープログラムに新しい規則は一切追加していないと述べた。',
+ readingA:
+ 'Literally true and worth taking at face value. Nobody\'s eligibility changed on 15 July. A channel that was monetizable on the fourteenth was monetizable on the sixteenth, under the same standard, for the same reasons.',
+ readingB:
+ 'That sentence was published because a very large number of creators had already concluded otherwise. A clarification issued into a panic is evidence that the enforcement was being felt before the wording changed — which is the whole disagreement, stated by the platform, in the platform\'s own reassurance.',
+ },
+ {
+ fact: 'Three categories were named as ineligible: generic or repetitive content; off-putting or distressing content; and AI personas presenting as experts on sensitive topics such as health, finance, law, or politics.',
+ factJp:
+ '収益化の対象外となる三つの分類が名指しされた。定型的・反復的なもの、不快なもの、そして健康・金融・法律・政治といった重要な話題で専門家を装う合成人格である。',
+ readingA:
+ 'Each is a specific, describable failure, and the third is the one that matters most: a synthetic figure claiming medical or financial authority is a harm with a name, not an aesthetic complaint. None of the three is a rule about a tool.',
+ readingB:
+ 'Two of the three are affective judgments. "Generic" and "off-putting" are the kind of call a person makes in a second and a classifier makes a million times a day, and neither of them can show its work. A creator cannot appeal a vibe.',
+ },
+ {
+ fact: 'The policy is tool-agnostic: it applies the same way to generative AI, CGI, stock footage, and a camera.',
+ factJp:
+ '規定は道具を問わない。生成AIも、CGIも、ストック映像も、カメラも同じ扱いである。',
+ readingA:
+ 'AI was never the question, and the platform ships AI tools of its own. What is asked for is unique human contribution — voice, editing, structure, a point of view — and content that has it stays eligible no matter what rendered the frames.',
+ readingB:
+ 'Tool-agnostic is a claim about the rule, not about the distribution of what arrives. The content most likely to be generic at scale is the content that became cheapest to produce, so a neutral rule lands unevenly on purpose — and the creators it lands on are the ones who were told the tool is fine.',
+ },
+ {
+ fact: 'The reused-content policy did not change. Commentary, clips, compilations, and reaction videos are reviewed as they were before.',
+ factJp:
+ '再利用コンテンツの規定に変更はない。解説、切り抜き、まとめ、リアクションは従来どおり審査される。',
+ readingA:
+ 'The clearest correction of the July misreading. A reaction video carrying original commentary was monetizable before and is monetizable after; what was disqualified is a bare repost of someone else\'s work, which was already disqualified.',
+ readingB:
+ '"As before" is both the reassurance and the problem. Reused-content review was already the least predictable surface on the platform, and this update pointed a great deal of new attention at it while changing none of the machinery that made it unpredictable.',
+ },
+ {
+ fact: 'Since 10 March 2025, a video first assigned "Limited" or "No ad earnings" is routed for an additional review that may be completed by a human. Most decisions still land in minutes; some take up to 24 hours.',
+ factJp:
+ '2025年3月10日以降、当初「制限付き」または「収益化なし」と判定された動画は、人間が担当しうる追加審査へ自動的に回される。大半は数分で決まるが、最大で24時間かかる場合もある。',
+ readingA:
+ 'The platform spending real money to be more right. A person sees the full context of a video and can weigh cultural difference in a way the first-pass classifier cannot, and the stated purpose is to raise monetization potential, not lower it.',
+ readingB:
+ 'It is also the platform conceding, in a product change, that the automated pass is wrong often enough to need a second one. The relief is genuine and it arrives as a wait — and a video earns most of what it will ever earn in the hours that wait is running.',
+ },
+ ],
+
+ verdict:
+ 'Both readings are true and they are not symmetrical, because they answer different questions. THE LETTER is what the platform owes you and will defend. THE QUEUE is what your upload will actually meet on a Tuesday. Read the letter so you know what is being promised; build for the queue, because that is the thing that pays.',
+
+ outro: [
+ {
+ heading: 'Where a rule actually lives',
+ headingJp: '規則が実際に住む場所',
+ paragraphs: [
+ 'The practical instruction survives the disagreement intact, which is how you know it is the real one. Put something in the video that could only have come from you — a voice, a cut, an argument, a mistake — and it does not matter what rendered the frames. That was the rule in 2019 and it is the rule now. The July update did not invent it; it wrote it down in a way that finally scared people into reading it.',
+ 'What the update did change is the vocabulary the machinery has to work with. "Repetitious" was a property of a file. "Inauthentic" is a verdict about a person. Nothing in the changelog moved, and something in the room did — and a magazine that files an audit with every issue is not in a position to pretend those are the same thing.',
+ ],
+ },
+ ],
+
+ references: {
+ kicker: 'THE POLICY FILE · 出典',
+ note: 'Every fact above, with where it came from. Six claims, six citations, all read before the issue was set.',
+ items: [
+ {
+ authors: 'YouTube Help',
+ year: '2025',
+ title: 'YouTube channel monetization policies',
+ journal: 'support.google.com/youtube/answer/1311392',
+ },
+ {
+ authors: 'YouTube Help',
+ year: '2025',
+ title: 'Understanding additional reviews for ad monetization',
+ journal: 'support.google.com/youtube/answer/16271309',
+ },
+ {
+ authors: 'Social Media Today',
+ year: '2025',
+ title: 'YouTube Clarifies Changes to Monetization Rules Around Inauthentic Content',
+ journal: 'socialmediatoday.com, 8 July 2025',
+ },
+ {
+ authors: 'PPC Land',
+ year: '2025',
+ title: 'YouTube clarifies "inauthentic content" policy changes',
+ journal: 'ppc.land',
+ },
+ {
+ authors: 'Search Engine Journal',
+ year: '2025',
+ title: 'YouTube Targets Mass-Produced Content In Monetization Update',
+ journal: 'searchenginejournal.com',
+ },
+ {
+ authors: 'Tubefilter',
+ year: '2025',
+ title: 'YouTube thinks a more human touch will cut down on demonetization mistakes',
+ journal: 'tubefilter.com, 11 March 2025',
+ },
+ ],
+ },
+
+ pullQuote: {
+ text: '"Repetitious" was a property of a file. "Inauthentic" is a verdict about a person.',
+ attribution: 'THE SWITCH DESK · 428',
+ },
+
+ signoff: '街のコーダーたちへ — read the letter, then build for the queue.',
+ },
+
+ audit: {
+ drafted: 'magazine-editor session, III·27',
+ verified: 'six claims, six citations — all sourced before the issue was set',
+ adherence: 'CompareSpread, second instance · no pattern extracted (rule 7)',
+ readCut: 'six facts, twelve readings · no fact invented for symmetry',
+ pressed: 'III·27 · artifact edition 428-nothing-new-was-added',
+ },
+
+ credits: {
+ editorInChief: 'Isaac Hernandez',
+ creativeDirection: 'kernel.chat group',
+ artDirection: 'in-house',
+ copy: 'kernel.chat editorial',
+ japanese: 'kernel.chat editorial',
+ production: 'kernel.chat group',
+ },
+}
diff --git a/src/content/issues/PUBLISHING.md b/src/content/issues/PUBLISHING.md
index fb485bec5..f0d406bec 100644
--- a/src/content/issues/PUBLISHING.md
+++ b/src/content/issues/PUBLISHING.md
@@ -84,7 +84,7 @@ Pick the editorial tool that fits the content:
| `review` | Graded surveys — "we tested N things, here's the ranking" | Top-line verdict, numbered rubric, graded subject cards, optional standout award |
| `colloquy` | A single argument carried by **two co-equal voices** (no host) | Voices legend (two stances), numbered movements of attributed turns, optional terms dossier + pull quote. The two voices are positions, not people — a private conversation is mined, never transcribed (see 398). |
| `instrument` | A **calibrated control handed to the reader** — the interactive tool | Fixed prompt; N dial stops (roving radiogroup); the same prompt answered at each depth with a meter line. Interaction is React state; motion stays CSS-only; all panels stay in the DOM and print renders them stacked. Meter readings must be honestly labelled when representative, or genuinely measured (see 399, 405). |
-| `compare` | A **binary switch between two irreducible lenses** on one fact set — not depths, positions with no medium between them | Two-lens switch (ARIA `role="switch"`, not radiogroup); a shared fact list, each fact read differently under each lens; optional verdict, left undefined when the piece declines to resolve (see 406). |
+| `compare` | A **binary switch between two irreducible lenses** on one fact set — not depths, positions with no medium between them | Two-lens switch (ARIA `role="switch"`, not radiogroup); a shared fact list, each fact read differently under each lens; optional verdict, left undefined when the piece declines to resolve (see 406), or given when the two lenses answer different questions rather than the same one (see 428). Optional `references` block at the foot for a compare over externally sourced facts (added 428). |
| `sequence` | A **real ordered process in discrete, complete stages** — each stage's account depends on the one before it, not a spectrum or a binary | Numbered rail (ARIA `role="tablist"`/`tab`/`tabpanel`, standard Tabs keyboard behaviour, no forward-lock); a panel per stage with an optional artifact line; the final stage may attach the process's real terminal outcomes. All stages stay in the DOM and print renders them stacked, in order (see 408). |
| `galley` | A **text the reader marks up** — N independent strike/stet marks on the prose itself; the reader performs an editorial act, and any feeling it produces stays unclaimed | One `aria-pressed` toggle per passage (stable accessible name; visible mark swaps CUT → STET); struck text stays legible in the DOM (strikethrough, never removal); a live tally counts ONLY the reader's marks, with a mandatory `tallyNote` stating what is counted and that marks are unrecorded, session-only. Print hides the knives and keeps the marks (see 410). |
| `tutor` | A **manual that teaches the interaction grammar** — the reader operates a stakes-free version of each shape and becomes literate in all of them; a composite, not a fifth primitive | An array of `lessons`, one per shape (`dial`/`switch`/`sequence`/`galley`), each with a `teaches` line, `intro`, an operable practice control using that shape's real ARIA pattern, and a `consequence` line (always visible — rule 1). Teach by consequence, never by grade: no control is ever "wrong." Controls reimplemented inline, not imported (rule 7). Print shows every reading, hides every control (see 411). |
@@ -215,7 +215,7 @@ recent same-format issue (`371.ts` for essay-as-profile,
`405.ts` for instrument (interactive dial, measured meter) or
`416.ts` for instrument (a *register* dial rather than effort — a real local
model run three ways; adds the optional `dialLabel` field),
-`406.ts` for compare (interactive binary switch — first instance),
+`428.ts` for compare (interactive binary switch — second instance, sourced facts + references; `406.ts` is the first),
`408.ts` for sequence (interactive ordered stages — first instance),
`410.ts` for galley (interactive reader-markup — first instance),
`411.ts` for tutor (interactive manual teaching all four shapes — first instance),
@@ -503,7 +503,17 @@ branch — only main publishes.
---
-_Last updated: ISSUE 427 · FEB 2027 (THE MOAT IS REALITY — the
+_Last updated: ISSUE 428 · MAR 2027 (NOTHING NEW WAS ADDED — the
+second `compare` instance, and the first over externally sourced
+material: YouTube's 15 July 2025 "inauthentic content" rename, six
+cited facts read under THE LETTER and THE QUEUE. Adds an optional
+`references` block to CompareSpread (406 unaffected) and, unlike
+406, gives a verdict — the two lenses answer different questions, so
+declining would have been a false symmetry. Artifact edition
+`428-nothing-new-was-added.html` carries the depth axis the spread
+has no room for: a six-stratum descent of one upload through the
+review stack, with the upload's character as carried context. Prior:
+427 THE MOAT IS REALITY — the
second `interview` instance, and the first with a real named subject
(Alex Hormozi) rather than a composite. Nine exchanges trimmed, not
invented, from a reader-supplied transcript of a real broadcast
diff --git a/src/content/issues/index.ts b/src/content/issues/index.ts
index 27d88e293..938753583 100644
--- a/src/content/issues/index.ts
+++ b/src/content/issues/index.ts
@@ -80,6 +80,7 @@ import { ISSUE_424 } from './424'
import { ISSUE_425 } from './425'
import { ISSUE_426 } from './426'
import { ISSUE_427 } from './427'
+import { ISSUE_428 } from './428'
// Re-export accent types so issue files can import from a single place.
export type { IssueAccent, InkSeedName, InkSeed } from './accents'
@@ -163,6 +164,7 @@ export const ALL_ISSUES: IssueRecord[] = [
ISSUE_425,
ISSUE_426,
ISSUE_427,
+ ISSUE_428,
]
/** The latest published issue — drives the landing cover. */
diff --git a/src/content/issues/schema.ts b/src/content/issues/schema.ts
index b4e4246f5..efab5fdf2 100644
--- a/src/content/issues/schema.ts
+++ b/src/content/issues/schema.ts
@@ -609,6 +609,11 @@ export interface CompareSpread extends SpreadCommon {
verdict?: string
outro?: SpreadSection[]
pullQuote?: SpreadPullQuote
+ /** Optional works-cited block at the foot — reused from the essay
+ * toolkit. Added for ISSUE 428, whose six facts are all external
+ * and dated; optional, so 406 is unaffected. A compare over
+ * sourced material should print where the facts came from. */
+ references?: SpreadReferences
}
/** ─── sequence ──────────────────────────────────────────────────