Skip to main content

Manual of Style

Documentation of Gwern.net writing conventions for essays and code.

This is a style guide for Gwern.net, documenting formatting/writing/coding preferences and do/do-nots. It is intended primarily for third-parties like LLMs, in the spirit of a .cursor/rules file.

Background: Design principles, rejected designs, live functionality tests, subscripts, thoughts on how to write for LLMs; the English Wikipedia MoS.

Condensed MoS

The 2025 Gwern.net style mandates a terse, “classic style”: analytic, declarative, and unhedged, prioritizing clarity, precision, and long-term consistency. It is written in Pandoc Markdown compiled to HTML5.

Adhere strictly to American spelling (editing quotes for consistency, originals archived), metric units (providing conversions for quoted imperial), the Oxford comma, and logical quotation. Use single-spacing after periods. Employ Kesselman estimative words for probabilities. Write statistical-significance testing (hyphenated) and replace “Type I/II error” with false positive/negative. Acronyms drop periods (CIA, AI), and personal titles (Mr./Ms.) are omitted; unfamiliar terms should be spelled out and bold-defined on first use, Wikipedia-style. Inline citations are minimal: Surname Year[a-z], always linked to fulltext (ideally locally archived PDFs with page-specific anchors like #page=N); these generate popups and a subscripted ellipse format, entirely replacing a separate “References” list. Numbers over ~1000 or those confusable with years get digit-group commas (eg. $1,234.56); currency requires inflation-adjustment syntax like [$1]($2025) or Bitcoin date-stamping [₿1](₿2025-01-01). Dates are YYYY-MM-DD or “8 May 2025”. For source readability and version control, use “ventilated prose”: one sentence per source line, with paragraphs separated by a double-newline. The emphasis cycle for nested highlighting is strongitalicsspan.smallcaps.

Pages follow an “iceberg” model of information density: an initial div.abstract (a blockquote, broken into multiple paragraphs ideally following scientific structure: background, methods, results, conclusion) precedes a left-to-right hierarchy of detail—margin notes (brief, left-aligned paragraph summaries; if multiple, they form a section’s micro-ToC), then paragraphs, concise footnotes/sidenotes (≤200 words for digressions, never citations), expandable div.collapse elements for longer asides or excerpts (≤500 words, with .abstract-collapse for summary text), and finally appendices (which also start with an abstract). Custom HTML, favoring explicit <div>/<span> wrappers for control and consistency over potentially problematic standard tags (eg. <details>, <abbr>), uses general → specific class names (eg. link-live) and -not negations (eg. ); the most specific metadata (eg. a link’s class attribute) overrides site-wide configurations. Every link is enriched with a title="‘Title’, Author Year" attribute (primarily for the author’s editing convenience, secondarily as a fallback tooltip; eg. [display text](/url "'Essay Title', Smith 2025")), automatically scanned for local archiving to combat link-rot, and assigned a file-type/domain icon unless explicitly suppressed (eg. .icon-not). URLs are short, non-pluralized slugs (eg. /sidenote) or precisely anchored deep links. Files follow YYYY-surname[-description][-nth].ext naming (eg. 2025-01-01-gwern-gpt4o-frogmeme-desc.png for enhanced findability) using a conservative whitelist of approved formats (eg. JPG/PNG, XZ-tarballs, PDFs over DjVu) selected for stability and security.

Images are presented within <figure> elements, featuring detailed, multi-part captions (**Figure X**: _Summary statement._<br>(*A*) Detail one. (*B*) Detail two.), and support click-to-zoom carousels; dark-mode inversion is controlled by InvertOrNot.com by default but can be overridden with .invert/.invert-not classes. Lists are always logically ordered (by similarity, importance, or alphabetically); if containing >6 short items (<30 characters), they should use a two-column layout via <div class="columns">.

Code blocks must specify a language for syntax highlighting, include comments focused on the “why” and “why not,” and compile/run cleanly. Specifically: Bash scripts must set -e (explicitly ignoring errors with || true) and use long flags (eg. sort --unique); Haskell compiles with ghc -Wall -Werror, employing fully-enumerated, standard qualified imports; Emacs Lisp must produce zero byte-compile warnings.

Generative AI output (text or images) is permissible only after rigorous human polishing to meet high-quality standards, with explicit labeling in the body or via filename/caption (recording model and date, eg. 2025-gwern-gpt4o5-concept.png), and meticulous removal of common artifacts or stereotypical stylistic tells (eg. no “sepia GPT-4o images” or “delve”). Typographic flourishes—such as topic-specific dropcaps (consult /dropcap for current usage and aim for unused letters), span.smallcaps for emphasis, epigraphs (italicized quote, roman attribution), or admonitions (div.admonition [tip/note/warning/error])—must be “earned” by genuinely enhancing readability or information density, not used merely decoratively.

The overarching goal is durable, self-documenting hypertext: precise and unambiguous in prose, explicit and robust in code, and maximally resistant to link-rot or stylistic drift for decades.

Writing

  • The intended style and attitude is generally analytical, inquisitive, and precise, despite exploring complex topics, in the “classic style” of Western writing.

    • the level of formality should be inverse to the topic’s novelty: the weirder something is, the more formal. For ‘safer’ topics, one should cut loose with the humor, epigraphs, typographical stunts and experiments, etc.

    • I try to avoid hedging and qualifying, even at the risk of making overly-strong claims. It is a slippery slope.

  • Because it is so reference-heavy, it risks becoming unreadable without great attention to reducing reader fatigue: the reader needs assistance navigating all the links, in the form of link-icons, deferring content to popups, collapses, standardization of vocabulary, and so on.

    These features may strike the first-time reader as clutter, but they are designed for the power-user. After enough experience, they will come to appreciate it.

  • The appearance and readability of the Markdown source code is almost as important as the final product.

    If the author cannot read it, then they cannot easily improve it, and they will not enjoy writing, and risk aversion or burnout.

    And if machines cannot read it, then bugs cannot be detected, new features added, or regressions avoided; broken syntax and links, spelling errors, visual glitches, and other subtle issues will pile up over time, unnoticed.

  • American spelling; I take the liberty of editing even quotes & titles in the name of consistency.

    (Since I always provide an archive of the original fulltext, I do not hesitate to modify the writing version to make it easier for the reader.)

  • metric units by default. (If a quote, a metric conversion should be provided; if an idiom, then leave it alone.)

  • Oxford comma

  • Logical quotation

    • “&” vs “and” is used to disambiguate uses of logical operators like “and”, where the intended nesting might be unclear (eg. if one meant X AND (Y OR Z), or (X AND Y) OR Z)

  • Editorial comments, whether in text or the UI/UX, are written in square brackets

  • Editorial ellisions: ellipsis, but without whitespace and not in brackets (“A…B”, rather than “A … B” or “A […] B”).

    Given the heavy use of excerpts, brackets would be obtrusive, and omitting whitespace both saves space and is not ambiguous with the use of ellipsis for trailing off (“A…B” ≠ “A… B”).

  • Inline author/year citations: Citations are written in the minimal possible form in the Markdown: “Surname Year[a–z]”, “Surname-1 & Surname-2 Year[a–z]”, or “Surname et al Year[a–z]”.

    They are not written in parenthetical form; instances in quoted text like annotations must be rewritten into the Gwern.net citation style.

    The citation style is important because those will be automatically detected & compiled into the subscripted ellipse form I developed for easier reading. For details on the Pandoc API conversion from the written Markdown Foo et al 2025 to the displayed “Foo et al 2025” form, see Typography.hs.

    The first use of a citation should always be to a fulltext URL, preferably annotated. (URLs are turned into a bibliography automatically, removing the need for a manual one.)

  • Acronyms/initialisms should remove periods as unnecessary (eg. ‘CIA’, not ‘C​.I​.A​.’; ‘AI’, not ‘A​.I​.’)

    • similarly, titles should be removed. While the New York Times may insist on always referring to “Mr. Altman, CEO of OpenAI”, the rest of us find “Altman, CEO of OpenAI” easier to read.

    • Latinate abbreviations usually keep their period (eg. ‘eg.’, ‘ie.’, ‘cf.’, ‘etc.’)

      It’s easier to write without a period, but I find they just look odd that way, because they are not English.

    • optional: more unusual terms should be spelled out or defined in bold on their first use, Wikipedia-style. (For other terms, the popup annotation is considered adequate—a reader unfamiliar with them can simply pop them up and find out.) Example: “The National Aeronautics and Space Administration (NASA) is an independent agency…”

  • Science:

    • Statistics:

      • “Statistical-significance testing” terminology: always written with a hyphen and ‘statistical’, to emphasize that these technical terms mean far less than they seem, and reduce mistaken interpretations

        “Type I/II error” is also banned in favor of “false positive/negative”

      • Latent variables like factors are capitalized to emphasize that they also do not necessarily to the laymen understanding of the word; the Big Five personality factor “Conscientiousness”, which is a highly technical and specific measurement with flaws and limitations, is not necessarily what a non-psychometrician understands by the word “conscientiousness”, and it is misleading to write something like “we measure solders’ conscientiousness and predict future career success…”

      • Probability confidence terms: try to use the Kesselman words.

    • Chemistry: chirality is written with smallcaps, eg. the left-handed form of the amino acid theanine is written “l-theanine” (note that ‘l’ is lowercase because uppercase does nothing when smallcaps, ie. <span class="smallcaps">l-</span>).

  • Numbers: comma-separated. (Especially if they may be confused for a year.) Digits are preferred for compactness for numbers >1.

  • Foreign phrases or words or sentences: italicized. Preferably translated.

  • Dates: dates are written either ‘YYYY-MM-DD’ or ‘Day Month Year’. The former is preferred for data/table/etc, but it can be awkward in prose, where the latter is acceptable. This allows easier machine parsing and eliminates ambiguity.

  • Sentences: single-space after the period, not typewriter double-space.

  • Semantic line breaks: paragraphs are separated by double-newlines, and every sentence is separated by a newline. (ie. This is a sentence.\nThis is another sentence in the same paragraph.\n\nThis is a new paragraph.)

    This “ventilated prose” makes it easier to edit & read the Markdown source & diffs.

  • Pluralis auctoris: use “I” when describing something specific that the author did, like running an experiment (unless it was a callobration, in which case it must be “we”); use a plural auctoris “we” when it’s a general discussion the reader is part of.

    For example, “I” run a self-experiment on a drug, but “we” read an excerpted passage from a novel and draw a critical conclusion from it. Or in this MoS, I do not expect the reader to agree with many points, and I exclude them.

Structure

Footnotes should be <200 words; annotation commentary should be <500 words; ‘blog’ posts should be <1,500 words; essays should be <10,000 words. Past those lengths, they should probably be refactored or ‘promoted’; much below, and they may be better ‘demoted’ and moved elsewhere.

Pages should be information-dense “icebergs”: relatively short, with few blockquotes, but with many links and excerpts and related material hidden just a mouse-hover away in popups and collapses, and available through the annotated link-bibliographies, backlinks section, and similar-links reading list.

Section headers are in mixed title case. (Title capitalization is otherwise left alone—I don’t have a strong feeling on whether they should be sentence case or title case or some other capitalization.) Headers should not be more than 5 words long, to minimize line-wrapping in the Table of Contents (ToC). As the ToC is auto-generated by Pandoc, it is hard to adjust or tweak.

Sections should be at least two paragraphs long. They should not be 1 sentence long.

Sections should be structured by level of detail, roughly going left from right: section title → margin note → paragraph → footnote/sidenote → collapsed elements → excerpts or writing inside popups. This is paralleled by a hierarchy of digression: footnotes/sidenotes < collapses < appendixes

A “See Also” section should be added at the end to link relevant essays not already linked.

Unfinished or draft sections should be commented out using HTML comments: <!-- TODO -->.

HTML

  • Attributes or classes are named in left-to-right general → specific style for easier Tab-completion and memory. There is always an exception, so custom classes are usually negated with a -not suffix. (Like tags or URLs, pluralization is discouraged.) They are usually written as div/span elements.1

    Hence, there are eg. link-live, , link-icon, and icon-not classes: they pertain to a ‘link’, specify some attribute (whether the original URL can be displayed in a popup, or if it has a link-icon), and can be overridden the same way (eg. to disable a link-icon, [foo](bar){.icon-not}).

    • When there is conflict, the most specific metadata wins. If a link is on a blacklist/whitelist specified in the site-wide configuration files (the Config.* hierarchy in the Haskell source code), an attribute on a link overrides it. So if an URL is on the site-wide live-link blacklist, putting a .link-live class on a specific <a> will override the blacklist and make it a live-link.

  • Page metadata:

    • “created” refers to when I had the core idea or wrote the first version, which may be when I wrote a comment on social media and not when the Gwern.net page first appeared.

    • “last-modified” refers to the last major modification of an essay, such as to add a new section or appendix.

      It does not cover minor modifications like updating broken links or adding references or paragraphs, or fixing minor errors.

      If there is a major error or obsolete material, it should be explained where it happened, possibly stored in a footnote or collapse. It may be useful to strikethrough the original text.

    • “importance” tags are 1 integer 1–10; see that page for proper usage.

    • “status”: rough ordinal of completion of an essay. Self-explanatory. (currently: “finished” “in progress” “draft” “notes” “abandoned” “obsolete”)

    • “confidence”: how confident I am in the contents broadly, overall; must be a Kesselman word

  • Poetry: currently typeset as blockquotes+<br>s. (This is not ideal and at some point we would like to support poems better, similar to interviews.)

  • All essays should begin with an abstract, which is a div.abstract containing a blockquote. These are critical for popups & similar-link embedding recommendations.

    • Appendixes ought to begin with an abstract as well.

  • HTML5 output: should preferably pass W3C Validator, but some of its warnings/errors must be ignored:

    • no section header for footnotes section (Pandoc-ism)

    • no alt caption on images (currently too much work to manually add to the thousands of current images, although I hope that LLMs will soon be capable of affordably adding acceptable alt-captions)

    • “Consider using the h1 element as a top-level heading only” (Pandoc-ism)

  • Self-documenting: all elements should be either readable as text, or have useful metadata when interacted with (eg. tooltips on metadata fields by setting a title attribute either directly or using a span/div wrapper.)

  • Divs are written in both Markdown & HTML using <div>, because the ‘native’ Pandoc syntax is ugly and dangerously finicky; spans should be written in the Pandoc [foo]{.class ...} syntax in Markdown, and as <span> in HTML

    Collapses are good to use on entire sections which are a digression and appendix-like, on large blockquotes or lists, or on transcluded annotations. They are often an alternative to a giant footnote or an appendix.

    • Collapse elements are a div.collapse/span.collapse wrapper. By default, the entire element is collapsed; to define what gets displayed while collapsed, use .abstract-collapse. To show that only when collapsed, and make it disappear when uncollapsed, use .abstract-collapse-only.

      Almost every block or inline element can be collapsed in the same way: sections, blockquotes, tables, code blocks… Due to historical reasons, Pandoc allows directly setting classes on only some elements, like sections, but not on others, like blockquotes; but the class itself remains the same, whether it’s set directly on the element or on a div-wrapper.

  • Link metadata: links should encode the basic metadata of title/author/year into the title attribute of a URL (eg. [foo](/bar.pdf "'Title', Surname Year") creates an <a href="/bar.pdf" title="'Title', Surname Year">foo</a>, which with JS-disabled, will on mouse-hover show a tooltip of 'Title', Surname Year.)

    This is not because I want readers to see it (except as a fallback) but because it makes it easier to edit the Markdown source if I have the title right there to jog my memory. (It is presumably also useful to LLMs, who may not have memorized a given URL.)

  • Lint/Rewrite overrides: Gwern.net relies heavily on lints and automatic rewrites to maintain consistency & correctness. This can misfire, especially when writing a document like this one which deliberately includes errors or deprecated examples. These matches can usually be disabled by inserting an invisible Unicode character like ZERO WIDTH SPACE.

  • Tags: slashes on self-closing tags are never used in HTML5 (with the exception of SVG, because that is XML), particularly <img>, <br>, and <hr>.

    They were apparently a holdover from now-obsolete XHTML, and are meaningless in HTML5 (where, sans slash, they are now just “void” elements); besides triggering validation warnings and leading to inconsistent syntax where there might be (at least) 3 ways to write an element, self-closing tags kept causing mysterious sporadic problems in the overall Gwern.net stack, like a self-closed <br> would somehow turn into two of them, or horizontal-rulers would break entirely. They should never be used.

  • Backlinks/similar-links/link-bibliography: these are all automatically generated.

    In the case of backlinks, a backlink can be disabled at either the link level (.backlink-not) or at the page level (backlinks: False in the YAML metadata).

  • Markdown source is always available for essays, using the extension .md. (eg. this HTML page, /style-manual, has its Markdown source at /style-manual.md).

URLs

Site URLs follow the ‘slug’ pattern: one or two alphanumeric hyphen-separated keywords, avoiding plural endings to reduce ambiguity (eg. /sidenote, not /sidenotes). HTML essay pages are “cool URIs” which have no extension.

All URLs should be fulltext links if humanly possible.

URLs should link to the most relevant Anchor inside a URL. In the case of PDFs, one should link to a specific page using an anchor ID like #page=n.

URLs written in foreign languages should be identified with a language code (eg. ).

Files follow the naming pattern YYYY-surname[-description][-nth].ext. (This is memorable, predictable, short, and sorts well on the command line.) If there is no surname, it uses the closest available entity name; if there is nothing at all, “anonymous”. If there are collisions, they are disambiguated by tacking on a count: eg. 2025-foo-1.pdf vs 2025-foo-2.pdf. For more complicated documents, such as books or generated images, it can be worth encoding descriptions or titles; like a book is better named 2025-foo-title.pdf to make it more findable. For image files, given how hard they are to work with or refind later, it is best to specify a lot of data, like an author (and/or tool), exact date, and description (eg. 2025-01-01-gwern-gpt4o-frogmeme-description.png).

File formats should be on the file type whitelist. We are conservative in allowed file formats; images should be JPG/PNG, avoiding WebP/AVIF (see Image.hs); documents should be PDF and not DjVu; archives should be XZ-compressed tarballs, etc. Large-files >250MB are specially supported. All file formats should have a link-icon. (The link-icon test page doubles as the file type whitelist.)

Image files are compressed automatically.

Inline

  • Dashes: I require correct use—hyphens for regular spelling, en-dashes for ranges, em-dashes for comments. (Em-dashes are not space-separated.)

  • Dropcaps: dropcaps are chosen by topic (tests):

    • Dropcats: cat

    • Goudy: biological

    • Cheshire: literary

    • De-Zs: non-technical or general articles

    • Kanzlei: technical

    • yinit: highly technical

    When a new essay is written and the dropcaps set picked, the list of current uses of that dropcaps set (stored in the dropcaps page) should be consulted, and the first paragraph (after the abstract) rewritten to try to use an unused dropcap letter. (Or if that turns out to be difficult because the unused letters are rare ones like ‘Z’, at least avoid the most overused letters.)

    Do not start pages with quotations or numbers if a dropcap is desired.

  • Currency/Inflation: all currency should be written with American decimal notation (eg. $1,234.56).

    Dollar/₿ prices or values should be inflation-adjusted if they reflect some real transaction or amount, rather than being placeholders.

    If you buy something for ‘$1’ in 2025, it should be written [$1]($2025) to be appropriately adjusted for the future inflation by Inflation.hs; whereas if it’s describing an economics or thought experiment and is just an arbitrary unit of value, it should be left as-is. (It would be confusing if 10 years from now, an essay asked you to image Omega flying up to you and offering you ‘$1.21’ if it correctly predicts your response…)

    ₿ amounts must be written with a specific date like [₿1](₿2025-01-01).

  • Exclamation: instead of writing ‘?​!’, I condense to an interrobang.2

  • Links: the first instance of any term or citation should be hyperlinked.

    All later uses should be unlinked, or they should link to the first one’s anchor. (This is usually unnecessary, but in large essays or ones with relatively independent sections, this may be helpful.)

  • Lists: the start of a list item is capitalized. List items should begin with a label: a colon-separated keyword or phrase which can be emphasized. Inline lists can be comma-separated, or optionally use a BULLET ‘•’ point.

  • margin notes: very short summaries.

    Our ‘margin notes’ are a custom kind of sidenote, which are typeset in the left margin without a number, or left italicized inline. They summarize a paragraph, but are not used for asides or digressions like sidenotes/footnotes. (This is why they are left of the paragraph they summarize.) If there is more than one margin note, they are also copied to an indented list at the beginning of the section to serve, Victorian-style, as a micro-table of contents. (They are enabled in annotation as well as essays.)

    Conceptually, they are like a deeper level of headers; HTML headers only allow for 6 levels (h1h6), and this is not always enough, especially if one wants to summarize each paragraph. (For example, if this were not a list item, the phrase “margin notes” would be an acceptable margin note.) So our span.marginnote class allows taking a 1–3 word phrase (longer typically looks unnatural), and setting it in the left margin or leaving it inline and italicized.

    If a section has only 1 paragraph, a margin note should not be used, because the section header should already cover it.

  • Math:

    • inline equations can often be written using pure HTML/Unicode/CSS: many math variables are defined in Unicode

      • equations can be automatically converted using the script latex2unicode.py.

      • cases like a superscripted variable over a subscripted variable can be done in CSS. I defined a custom span.subsup which does this. To use that, simply write <span class="subsup"><sub>Bottom</sub><sup>Top</sup></span>. (We write the subscript first to reduce the risk of Pandoc misinterpreting it as a footnote.)

      • use MULTIPLICATION SIGN ‘×’ for multiplication in arithmetic; MIDDLE DOT ‘·’ for contexts where there may be an x variable (eg. not 𝒪(n × log n) but 𝒪(n · log n)).

      • use FRACTION SLASH for compact vulgar fractions (eg. “7/11 is a food chain” vs “7⁄11 vaccinated mice survived”)

  • Ordinals: the extension (eg. ‘th’, ‘nd’) is superscripted (not “1st” but 1<sup>st</sup> or 1^st^)

    Note that some uses of ordinals could be replaced by our ‘progress indicators’, but they are difficult to write by hand and generally better left to infrastructure.

  • Smallcaps: smallcaps are written using a span.smallcaps class (similar to Pandoc’s default CSS)

  • Wikipedia links: should be written using the Interwiki.hs !W shortcut syntax: ie. not [George Washington](https://en.wikipedia.org/wiki/George_Washington) but [George Washington](!W).

    The frontend JS code automatically handles annotations for WP articles by calling the WP API.

Block

  • Admonitions (demos): admonitions (sometimes ‘callouts’ or ‘pullquotes’) are intended for warnings or alerts where simply bolding some text won’t do. They are a div.admonition [tip/note/warning/error] wrapper around a <p> and possibly a div.admonition-title.

    Fully-written-out example (avoiding ‘native’ Pandoc div syntax as usual):

    <div class="admonition tip">
       <div class="admonition-title"><p>Tip Title</p></div>
    
       <p>Tip.</p>
    </div>
  • Epigraphs: are a div.epigraph wrapper around a blockquote.

    The first paragraph of the blockquote is italicized; it is not normally wrapped in double-quotation marks because that would be redundant with the fancy CSS ‘quotes’ around the epigraph as a whole. The second optional paragraph is roman, and is usually the attribution of the quote.

    The attribution is usually the author, full name or surname, and then a source & year in parentheses. But this can vary for effect—sometimes it will be funnier to attribute it to a character instead (in which case I put the author in the parentheses).

  • Footnotes/Sidenotes: the same thing, chosen based on responsive design. Standard Pandoc Markdown syntax for footnotes like [^id]: Content. or ^[Content.].

    They are not used for citations, as that is better handled by linking a fulltext URL + annotation. They are used for digressions or tangents. Length-wise, they should be less than 200 words; anything longer is better refactored into something else (an annotation, a collapse, an appendix…).

    Block footnotes, where the footnote body is defined separately, are usually located immediately after the Markdown element they are used in, for easier editing. (They are not grouped at the end of the Markdown document.)

    Footnotes are sometimes worth linking. Pandoc chooses not to use the ID to define a linkable anchor, due to concerns about creating collisions. In that case, they can be linked by defining an empty span with the ID, like These IDs, like all other IDs, must be unique.

  • Paragraphs: relatively long paragraphs are preferred compared to the usual Internet social media/blog writing style of 1 sentence per paragraph.

  • Lists:

    • Ordered vs unordered: if a list might be referred to by number/position, then it should be ordered. If not, it should be unordered.

      However, even ‘unordered’ lists should be as ordered (or ‘seriated’) as possible. There may not be a canonical ordering, but almost all lists can be put into some order more meaningful than a randomized shuffle: similarity, descending order of importance, or even just alphabetically!

    • Columns: if a list is composed of >6 items which are ‘short’ (maybe <30 characters), then it is a good candidate for formatting as a multi-column list which will wrap as 2 columns. This is a div.columns wrapper.

  • Emphasis: nesting level, especially in unordered lists where keywords or phrases will be emphasized, is indicated by a 3-cycle: strongitalicsSmallcapsstrong

    I prefer to use Markdown bold & italic syntax.

  • Abstracts: all abstracts should be broken up into multiple paragraphs. They should try to follow the standard scientific writing of ‘background, data, methods, results, conclusion’. (paragraphizer.py attempts to do this automatically using an LLM.)

  • Images: Use <figure> elements.

    • image captions start with a bold ‘Figure’, then the 1-sentence summary is italicized, and a linebreak (a <br>)3 separates the detailed description. The detailed description has parenthetical labels A–Z, which are italicized. (And if further emphasis is necessary, then, following the bold/italic/smallcaps convention, smallcaps is used.) So a Markdown caption might go like this:

      Since many image captions are copied from a document and are not necessarily what I would have written, it can be a good idea to include a title attribute describing the image. (Both caption and title will be displayed by image-focus.js when the reader zooms in on an image, so neither is wasted.)

    • layout: images can be laid out with .width-full, .float-right, and .float-left. They can also be collapsed.

      Full-width images are useful for decorative illustrations, or highly-detailed images (eg. scientific paper figures might have 10 figures packed into a single one).

      Floating is useful for smaller images; usually, in accordance with the left-to-right pattern, images will be floated-right. If there are multiple images, they may zig-zag right/left/right to avoid ‘stacking up’.

    • Dark-mode: inversion during dark-mode is controlled by InvertOrNot.com by default, but it can be overridden by specifying .invert/.invert-not.

    • Navigation: images can be click-to-zoom and automatically viewed in a ‘carousel’ by image-focus.js; no additional metadata is necessary.

  • Interviews: interviews are formatted specially to align the speakers, and group the conversation by topic.

    They are div.interview wrappers, containing unordered lists of speakers (not necessarily strict Q&A), where <hr> horizontal rulers separate ‘topics’.

  • GTX metadata databases: annotations & metadata are stored in a custom line-delimited file format called GTX, which avoids drawbacks of YAML/JSON for writing many complicated HTML snippets. See GTX.hs for a detailed description of the syntax and the design rationale.

  • Math: complex block equations are written in LaTeX and typeset by MathJax. They are written in the normal Pandoc $bloack equation$ syntax.

    In some cases, a block equation may, like many inline math equations, be feasible using pure HTML/Unicode/CSS; if they are (ie. the latex2unicode.py script can handle them and they are not complex nested fractions, integrals, matrices etc), they should be done that way, as the pure approach has several advantages (it can eliminate the need to load heavyweight Mathjax CSS/fonts, looks more natural, reduces risk of long-term bitrot, is more searchable etc)

  • Tables: Pandoc supports several kinds of Markdown tables. I usually use either ‘simple’ tables, or pipe tables; ‘grid tables’ having proven to be more trouble than they are worth despite an Emacs mode. (Generally, if one finds oneself rejiggering the whitespace in a simple table, it is time to move to a pipe table.)

    Tables are usually given titles/captions.

    Layout: Pandoc supports simple table layout control like the relative widths of columns (# of hyphens in column header), and left/right/center alignment of each column (colon on left/right/both sides in header). Much like figure images, tables can be floated left/right, or made full-width; they can also be compacted with .table-small. (Particularly in annotations, for a very small table, like a 2×2 table, it is good to use both and wrap it in a <div class="width-full table-small">.)

    Tables are zebra-stripped by custom CSS, and sorting is done with tablesorter.js. They are generally not otherwise styled.

Annotations

Annotations are typically the abstract of a paper, followed by excerpts. They sometimes have extensive commentary or editorial insertions (not always from myself), which are in square-brackets. These commentary may be mini-essays.

The annotation infrastructure is complicated and supports a mix of manual, semi-automatic, and automatic creation of annotations.

  • Automatic: WP

  • Semi-automatic: arXiv, BioRxiv/MedRxiv, some PDFs with abstracts available through Crossref, Gwern.net essays with .abstract abstracts

  • Manual: everything else

Annotations do not support sections or footnotes. Sections are replaced by horizontal-rulers (<hr>) and margin-notes. Footnotes are simply written inline inside square-brackets, and can be collapsed.

Large excerpts can also be collapsed.

In some cases, collapsing parts of an annotation is not enough—like when we want to link a URL in 2 different contexts, focusing on 2 different excerpts, so we cannot simply collapse either half. In this case, we can use a hack involving anchor IDs: we simply add two new IDs to the original URL, like /doc/2025-foo.html#bar vs /doc/2025-foo.html#baz, and we write separate annotations for them, because they are now technically ‘different URLs’, even though they load the same web page.4 In the special case of PDFs, when this happens, we can usually exploit the built-in page-number anchors to get more useful IDs by specifying the most relevant #page=N for the two different use-cases.

“Keywords” are removed from papers that provide them. While they may have been highly useful for librarians indexing documents in the pre-computer era, they are almost never useful now due to extreme inconsistency in the controlled-vocabulary across all authors/publishers—and even the small benefit they still provide to skimming is obsoleted by the fact that all of the keywords will usually be hyperlinked or bolded & jump out that way. (They can be left hidden in a comment to provide hints to an embedder, but otherwise are a waste of space.)

Bulletpoint list summaries are used by a few academic publishers or authors to summarize the summary. Laid out normally, they take up a great deal of vertical space while being redundant with a properly-linebreaked or topic-split abstract. We keep them, but we condense them to be a single inline list with BULLETs, and separate with a horizontal ruler.

Similarly, some publishers provide a ‘layman’ or ‘plain’ or ‘public’ abstract along with the scientific abstract. Those should be presented first, and separated with a horizonal ruler.

Code

  • Comments should focus on the “why” and especially the “why not”, and not on the “how”.

  • All code blocks should specify a language for syntax highlighting, using Pandoc syntax highlighting. (Even when something in a code block is pseudo-code or not strictly any language, the skylighting suite usually has something which will give useful results.)

    • Inline code syntax highlighting is optional.

Bash

  • Scripts should exit on error, and explicitly ignore errors: set -e, and then || true to ignore.

    (set -euo pipefail may be desirable in the long run as a default, but I have not adequately checked.)

  • All commands must use ‘long’ flags when available (eg. not sort -u but sort --unique)

  • Scripts should be as ShellCheck-clean as possible

Emacs Lisp

  • no warnings when byte-compiled

Haskell

  • No GHC warnings: compiles with ghc -Wall -Werror

  • Should be as hlint-clean as possible

  • Imports:

    • Enumerated imports: all imports should be fully-enumerated

    • Standard qualified imports:

      import qualified Data.ByteString.Char8 as C8
      import qualified Data.ByteString.Lazy.Char8 as LBS
      import qualified Data.ByteString.Lazy.UTF8 as U
      
      import qualified Data.Map.Strict as M
      import qualified Data.Set as S
      import qualified Data.Text as T
      import qualified Data.Text.IO as TIO
      import qualified Data.Vector as V
      
      import qualified Debug.Trace as DT (trace)

Javascript

JS coding is left to Said Achmiz.

Generative Media

Generative models like LLMs or image-generators are good servants, but as of mid-2025, poor masters.

My policy for generative media is that generative model outputs must be improved.

Outputs of models should be clearly identified as such in the filename/caption, or body; they should be critiqued as right or wrong, and errors noted.

Random uncurated outputs should never be used, except in an explicit context of ‘random uncurated outputs’.

If text or images are being used, perhaps for illustration, they should be high quality & carefully considered. If they could have been generated in just a few minutes of prompting, and they have no clear connection to the essay or any depth, they should not be used at all. Ideally, they will look as good in 10 years as they do today, and they will not look blatantly dated or buggy. (The widespread use of cheap DALL·E 3 images on Substack, often barely a step up from Bing-style “Shrimp Jesus” images, are an excellent example of what not to do.)

In particular, they should avoid the artifacts and stereotypical mode-collapsed styles of the used model. There should be no visible artifacts like malformed hands or weird backgrounds that make no geometric sense. Style-wise, Midjourney samples should never feature “Instagram women”; GPT-4o images should avoid sepia/yellow color palettes; LLM output should avoid notorious tells like “delve” or the GPT-4o “em-dash twist ending”. Images should have a strong esthetic and tend towards monochromatic; if there is no specific color theme, it should be grayscale. (A HDR-esque ‘every color at once’ is one of the more reliable tells of a RLHF process dumbing a generative model down to the lowest common denominator.) You can fight this laziness with personalization, heavy use of high-temperature-like settings, getting illustration ideas from the most creative models like GPT-4.5, and stubborn insistence on fixing errors.

LLM Writing Guide: How-To-Write for Gwern

This guide directs an LLM to deliver a near-publishable Gwern-style essay and provide Gwern the minimal meta-data needed for rapid editing.

It distills the Gwern.net Manual of Style (MoS), lessons from essays like “Newton’s Comets”, “Project Xanadu”, and “Dune Genetics”, and the site’s 15-year evolution.

Mind-Set

  • Audience: Technically literate generalists who skim for overview, dig deep into specifics, and archive content. Your writing must serve both skimmers (clear structure, abstracts, margin notes) and deep-divers (dense information, rich linking, comprehensive footnotes/collapses).

  • Tone: Terse, declarative, analytical, and critically skeptical. Avoid hedging, filler, and overly enthusiastic or promotional language. Directly state claims and then provide evidence.

    • Nix common LLMisms: “delve into”, “it is pivotal to”, “it is crucial to”, “it is important to note”, “explore the nuances of”, “tapestry of”, “showcases”, “serves as a testament to”. Replace with concrete verbs and direct statements.

  • Goal: Aim to present information or analysis that offers new synthesis (such as connecting findings from field X with methodology from field Y to explain phenomenon Z), a deeper re-analysis of existing data/sources, or an unexpected angle that is not readily available. Strive for durable insights over ephemeral commentary. Assume the reader is intelligent but may not be a specialist in the topic.

Draft Workflow (The “Iceberg Build”)

Step

What to do

MoS Hooks (see Condensed MoS)

0. Scope Definition

LLM Action: Restate the core request/topic in a single, precise sentence. List key in-scope points and deliberately out-of-scope points to confirm understanding. Place this in the initial meta-block.

Meta-block

1. Source Acquisition & Preparation

LLM Action: For any cited external information, prioritize finding and linking to full-text, stable URLs (PDFs, academic pages, reputable archives). Format all links with a title attribute: [display text](URL "'Title', Author Year"). Find archive.org / archive.is links if primary is fragile.

Linking, Citations, Tooltips

2. Outline & Structure

LLM Action: Draft Title → Abstract (div.abstract blockquote) → H2 section titles (≤5 words if possible) → Key bullet points under each H2. Identify potential margin-note phrases (1-3 words) for paragraphs within sections.

Information Hierarchy, Abstracts

3. Prose Generation

LLM Action: Write content using “ventilated prose”: one sentence per line, blank line between paragraphs. Inline citations as **Surname Year**, hyperlinked. No separate “References” section. Emphasize precision and clarity.

Ventilated Prose, Citations

4. Iceberg Architecting

LLM Action: Review draft for digressions. Demote content: brief asides (≤200 words) to footnotes ^[Footnote text.]; longer digressions, data, or code examples (>500 words) to <div class="collapse"> (with an .abstract-collapse if needed); extensive supplementary material (>500 words) to an Appendix (which also needs an abstract).

Information Density, Structure

5. Stylistic Polish

LLM Action: Apply American spelling, metric units (provide conversions for quotes if necessary), Oxford commas, and logical quotation. Use Kesselman estimative words for probabilities. Re-check for and eliminate banned/filler phrases. Ensure correct dash usage (hyphen, en-dash, em–dash—no spaces around em-dashes).

MoS Language Rules

6. Code, Tables, & Media

LLM Action: Label code blocks with language. Adhere to Bash (long flags, set -e), Haskell (ghc -Wall -Werror, qualified imports), and ELisp (byte-clean) rules. Format table captions. For images: ensure illustrative purpose, provide full MoS-compliant <figure> captions, note AI model+date if generated. Apply .invert/.invert-not if default dark-mode inversion is problematic.

MoS Code & Media

7. Final Self-Check

LLM Action: Rigorously apply the “Pre-Handoff Checklist” (below).

Quality Assurance

8. Meta-Block Insertion

LLM Action: Insert the concise HTML meta-block (template below) after YAML frontmatter and before the main text.

Transparency for Editor

Mini Meta-Block Template

Place once, after YAML frontmatter and before abstract/main text. Ensure Kesselman words are exact.

<!-- LLM_NOTES_START

SCOPE_SUMMARY: [One-sentence summary of the LLM's understanding of the task]
MOS_CONFIDENCE: [Kesselman Word, eg. Likely] [LLM's confidence in adhering to the MoS]
CONTENT_CONFIDENCE: [Kesselman Word, eg. Highly likely] [LLM's confidence in the substantive quality of content]
ASSUMPTIONS_CRITICAL: [Brief list of key interpretation choices affecting the draft,
    eg. "Interpreted 'X' as Y for analysis."]
KNOWN_WEAKNESSES_AREAS: [Brief list of sections/points needing most editorial review,
    eg. "Section 3 argument needs strengthening", "Source for statistic Z is indirect."]
BANNED_PHRASES_TICS_CHECK: Passed [Or: "Self-corrected: removed 'delve', 'pivotal'."]

LLM_NOTES_END -->

No more than this meta-block structure. Conciseness is paramount.

Inline Comment Keys

These assist Gwern’s review; they are not for the final published page. Gwern will remove them. (Use sparingly and purposefully: no more than 1–2 per section.)

  • <!-- LLM_REASONING: [Concise rationale for a non-obvious MoS application, structural choice, or interpretation, eg. "Used collapse instead of footnote due to code block inclusion."] -->

  • <!-- LLM_ALT_CONSIDERED: Current: "[text snippet]"; Alt: "[alternative wording/structure]" (Rejected because: [brief reason, eg. "less precise", "MoS conflict X"]) -->

  • <!-- LLM_TODO: [Action needed, eg. "Verify statistic for X from primary source", "Find original publication year for Y"] -->

Craft Specifics

  • Abstracts: Must be a <div class="abstract"> containing a blockquote. Structure this blockquote into multiple paragraphs following the scientific model: Background → Data/Methods (if applicable) → Key Results/Analysis → Conclusion/Implications.

  • Margin Notes: 1–3 word italicized summary for key paragraphs within multi-paragraph sections. Not for single-paragraph sections. If multiple in a section, these also form a micro-ToC at the section start.

  • Linking: First instance of any important term, name, or concept should be hyperlinked (often !W for Wikipedia). Link citations directly to fulltext. Use deep anchors (#page=N for PDFs, #specific-section for HTML) wherever possible. All <a> tags require a title attribute.

  • Lists: Must have a clear logical order (importance, similarity, alphabetical if no other). For lists of >6 short items (<~30 chars each), use <div class="columns"> for two-column layout.

  • Images/Figures: Use only if genuinely illustrative and information-rich. Must be within <figure> tags. Provide a full MoS-compliant caption: **Figure X**: _Summary._<br>(*A*) Detail. (*B*) Detail. If AI-generated, filename and caption must note model & date. Assume local storage.

  • Footnotes versus Collapses: Footnotes (^[text]) for brief (≤200 words) asides or clarifications. Collapses (<div class="collapse">) for more substantial digressions (200–500 words), large blockquotes, code blocks, or data tables not essential to the main flow.

  • Analytical Stance: Adopt a critically evaluative stance. Question assumptions, assess evidence strength, and don’t shy from pointing out flaws or inconsistencies in arguments (including historical ones, as in newton.md).

LLM Pitfalls to Dodge

Pitfall

Fix Strategy

Over-explaining obvious concepts/steps

Trust the technically literate reader. Move essential but secondary nuance to footnotes or collapses. Focus on the novel/analytical aspects.

Excessive hedging / cautious filler language

Delete. State claims directly, then present supporting evidence or reasoning. Confidence is expressed via Kesselman words (MoS/Meta-block).

“Fictional” or overly descriptive tone

Prioritize analytical clarity. Strip excessive adjectives/adverbs. Replace vague metaphors with concrete examples or direct explanations.

Dangling citation placeholders (eg. [REF])

Never use. Find and link to a primary source (or its best available archive). If a source cannot be found, use <!-- LLM_TODO: Find source for X -->.

Unnecessary/decorative images or emojis

Do not include. Images are for information content only. Emojis are forbidden.

Generic summarization of sources

Synthesize and analyze sources to build an argument or provide new insight. Don’t just report what sources say; explain their importance or flaws.

Sounding like generic AI output

Actively rewrite sentences that are bland, overly general, or use common AI introductory/linking phrases. Favor precision and strong verbs.

Success Metrics for The “Iceberg Build” Process

Step

Success Metrics

0. Scope Definition

• Topic is defined in a single, precise sentence with no hedging
• In-scope points are substantive, not trivial, and collectively exhaustive of the core topic
• Out-of-scope points anticipate reader expectations and clarify boundaries
• The scope definition could stand alone as a mission statement for the essay

1. Source Acquisition & Preparation

• Every factual claim has a linked, fulltext source or is explicitly marked as your own insight
• >90% of links point to stable formats (academic pages, PDFs, well-established websites)
• All links include proper title attributes with author and date
• No “data voids” where key claims lack sourcing
• Archive links are provided for any potentially unstable sources

2. Outline & Structure

• Section titles are ≤5 words, declarative, and descriptive (not creative/cute)
• Sections follow a logical progression that builds an argument (not merely taxonomic)
• At least one margin note candidate is identified for each multi-paragraph section
• Abstract draft contains definable background, methods, results, and conclusion elements
• H2 headers are sufficient—excessive H3+ nesting is avoided

3. Prose Generation

• Every sentence occupies exactly one line in the source
• All paragraphs are separated by blank lines
• No paragraph exceeds ~8 sentences without strong justification
• All citations use the required Surname Year format and are hyperlinked
• The text is analyzed for and stripped of common LLM filler phrases
• Sentences average 15-25 words (occasional longer sentences are acceptable)

4. Iceberg Architecting

• Content placement follows the left-to-right hierarchy: essential → margin → paragraph → footnote → collapse → appendix
• Every collapse element has a meaningful title or abstract-collapse
• No footnote exceeds 200 words; no collapse exceeds 500 words
• Inessential content is demoted but never deleted entirely
• Information density increases as the reader moves from left to right across the page

5. Stylistic Polish

• American spelling is used consistently, including in quotes
• All measurements use metric units with conversions where necessary
• Oxford commas are used in all lists
• Logical quotation is applied (punctuation outside quotes)
• Em-dashes have no spaces around them; en-dashes are used for ranges
• Probabilistic language uses Kesselman words consistently
• No instances of banned/filler phrases remain

6. Code, Tables, & Media

• Every code block specifies a language
• Bash uses long flags and set -e
• Tables have clear, descriptive captions and appropriate column alignment
• Images use full <figure> elements with properly structured captions
• AI-generated images are properly attributed with model and date
• All media serves an information purpose, not merely decoration
• Dark mode considerations (.invert/.invert-not) are applied

7. Final Self-Check

• Every item on the Pre-Handoff Checklist is verified
• The meta-block accurately reflects confidence in both MoS adherence and content quality
• Known weaknesses are specifically identified rather than vaguely described
• Text can be read from start to finish without discontinuities in logic or presentation
• The essay could stand alone without requiring additional context

8. Meta-Block Insertion

• Meta-block appears immediately after YAML frontmatter
• All fields are completed with specific, actionable information
• Confidence assessments use precise Kesselman terms
• Critical assumptions are explicitly stated
• No more than 10 lines total
• HTML comment format is correctly implemented

Troubleshooting Common Problems

If your output has this problem

It likely violated this principle

Fix it by doing this

Abstract is a single paragraph

Abstracts must be multi-paragraph following scientific structure

Break the abstract into 2-4 paragraphs that follow the pattern: background → methods → results → conclusion

Too many section headers

Sections should be substantive, not taxonomic

Combine closely related sections; ensure each section has at least two paragraphs

Essay feels “blandly informative”

Gwern’s style is declarative and analytical, not merely descriptive

Add explicit evaluations of claims; state conclusions directly; make comparative judgments about importance

Content seems unstructured despite headers

Information should follow left-to-right hierarchy of detail

Move core claims to paragraph beginnings; push details rightward to footnotes/collapses; identify clear margin-note topics

Frequent hedging language

Writing should be unhedged, analytic, precise

Replace phrases like “it seems that” or “it could be argued” with direct claims calibrated via Kesselman words

LLM “helper” phrases appear

Text should be direct, not meta-textual

Delete phrases like “let’s explore,” “it’s worth noting,” “delve into”; just directly state the content

Links lack meaningful titles

All links need title attributes

Add title="'Title', Author Year" to all links; for Wikipedia, use !W syntax

Too many bulleted lists

Lists should be rare and purposeful

Convert to prose where possible; if needed, ensure lists are ordered logically (by importance, similarity, or alphabetically)

Digressions disrupt main text

Digressions should be demoted to appropriate containers

Move digressions <200 words to footnotes; 200–500 words to collapses; >500 words to appendices

Citations appear in reference list format

Citations should be inline hyperlinks

Convert any reference-style citations to inline **Surname Year** format with hyperlinks to fulltexts

Content feels overly introductory

Gwern essays assume a technically literate audience

Remove unnecessary definitions of basic concepts; focus on novel synthesis and analysis

Paragraphs seem unstructured

Each paragraph should have a focused point

Ensure paragraphs have a clear topic; consider adding margin notes for multi-paragraph sections

Complex equations as plain text

Math should use appropriate formatting

Use LaTeX for complex equations ($$equation$$); consider Unicode/HTML for simple inline math

Essay lacks “iceberg” quality

Content should have hidden depth through popups/annotations

Add collapses for supporting material; ensure links have informative popups; create “rabbit holes” of exploration

Tables have inconsistent formatting

Tables should follow MoS conventions

Use pipe tables with proper alignment indicators; add captions; consider .table-small for compact tables

Overly dense text blocks

“Ventilated prose” with clear visual hierarchy

Break into one-sentence-per-line; use blank lines between paragraphs; consider using collapses for dense sections

Generic introductions/conclusions

Essays should start and end with substance

Delete any “In this essay, we will…” or “In conclusion…” statements; replace with substantive claims

No specific weaknesses in meta-block

Meta-blocks must identify concrete areas for review

Replace vague statements with specific sections or claims that need editorial attention

Stylistic choices seem arbitrary

All formatting should serve information purposes

Justify each collapse, footnote, or special formatting in terms of information hierarchy, not aesthetics

Essay feels disconnected from examples

Writing should build on Gwern’s existing corpus

Reference similar Gwern.net essays; use consistent terminology with the broader site

Style Examples

Transforming chatbot-style output to Gwern-style, before/after examples.

Example 1, before:

It is pivotal to recognize that mathematics can be conceptualized as analogous to
the study of pure Turing machines, where formal patterns and computational structures
are explored independent of the complicated details that exist in the physical world.
Rather than focusing on concrete examples such as sequences of alternating physical objects
like apples and oranges, or even more abstract but still specific sequences of integers,
mathematicians typically examine generalized binary sequences that can be generated by
concise, elegant Turing machines alternating between two distinct outputs. This
abstraction process serves as a testament to mathematics' power in distilling
complex phenomena into their essential logical structures.

After:

Mathematics resembles the study of pure Turing machines,
formal pattern and computation liberated from the messy real-world details.
We do not study a long line of, say, alternating apples and oranges,
nor do we even study a sequence of integers; we study a *binary* sequence,
which is computed by a very short, simple Turing machine which alternates
between two arbitrary but distinct outputs.
This shift from concrete objects to abstract patterns explains why mathematics
developed independently across cultures, while [speedrunning](!W "Speedrunning")
remains bound to specific artifacts^[Unlike mathematics, gaming speedruns document
exploitation of specific implementation quirks that rarely generalize beyond their
original context—precisely why they remain entertaining but yield no broader insights.].

Example 2, before:

When we explore the capabilities of Large Language Models in relation to mathematics,
it becomes evident that there are important parallels worth noting. These models can be
compared to diligent students who have meticulously studied mathematical textbooks and
completed numerous homework problems, but haven't yet ventured into the realm of
original research. While LLMs excel at solving problems that have predetermined answers,
they fundamentally lack the crucial ability to formulate novel and meaningful problems
on their own. This creative aspect of mathematics—the art of problem creation—isn't
something that can be learned from textbooks or assigned as homework exercises, with only
rare exceptions like George Pólya's famous work "How to Solve It" attempting to address
this gap in mathematical education.

After:

If we analogize math-oriented LLMs to mathematics, the LLM is closest to
a knowledgeable student who has studied textbooks and homework problems,
but has never done research.
You can set them a problem which has an answer, and they may well be able to find the answer.
But at no point have they ever learned to solve the problem of coming up with problems.
That is written down in no textbook, nor is there any homework problem for it
(almost by definition, despite occasional valiant efforts like
[Pólya's](!W "George P%C3%B3lya") [_How to Solve It_](!W)).
This explains why even superhuman performers on benchmarks fail to produce
truly novel insights—they optimize for answer-finding, not question-creation^[The
distinction between answer-finding and question-creation parallels the difference
between [exploitation and exploration](/explore-exploit) in reinforcement learning.].

Example 3, before:

The common 'baby face' theory for our cat fascination seems lacking, especially when
considering our intense interest in even their most mundane actions and the way
we often see them as embodying a kind of universal 'Cat-ness'. This essay explores
an evolutionary psychology perspective: that our captivation stems from a history
where felids in Africa were significant, often underestimated, predators of primates
for millions of years. This ancestral pressure may have hardwired us to
vigilantly observe felines, a trait not as strongly activated by other common pets,
explaining their unique, indefinable appeal—a paradoxical mix of the captivating
and the subtly unnerving, much like our engagement with controlled thrills
such as horror movies.

After:

Do people like watching cats because of their neotenous appearance?
I doubt it, but then why do we have odd this fascination with every ordinary action
of a cat and in treating them as examples of some Platonic Cat?

I speculate that maybe there is an evolutionary psychology reason: cats in Africa
prey on primates to a degree I suspect few people appreciate, and this seems to
have been true for millions of years.

So perhaps we are still slightly hardwired to closely observe cats,
in a way we aren't for most other potential pets.
This accounts for the indefinable appeal of cats: they are paradoxically
both pleasant and unpleasant, like horror movies.

Pre-Handoff Checklist

Verify each item for the final draft:

  • Meta-Block: Inserted correctly (after YAML, before text) and adheres to the ≤10 line template.

  • Abstract: Present, uses div.abstract > blockquote, multi-paragraph, follows B-M/D-R-C structure.

  • Ventilated Prose: One sentence per source line, blank line between paragraphs.

  • Banned Phrases: Eliminated common LLM filler/hedging words (see Mind-set).

  • Citations: Inline Surname Year format, hyperlinked to best available full-text URL.

  • Link title Attributes: All <a> tags have title="‘Title’, Author Year" (or similar if not a paper).

  • Deep Linking: Links to specific sections/pages (#anchor, #page=N) where appropriate.

  • !W Interwiki Links: Used for relevant Wikipedia concepts.

  • Footnotes/Collapses: Used appropriately for length/content (≤200w for footnotes, ≤500w for collapses).

  • Margin Notes: Present and correctly formatted for relevant paragraphs in multi-paragraph sections (not for 1-paragraph sections).

  • Code Styling: Bash uses long flags & set -e; Haskell: ghc -Wall -Werror & qualified imports; ELisp: byte-clean. Language declared.

  • Figure Captions: Images use <figure> and have full MoS captions; AI image provenance noted. Dark-mode .invert/.invert-not class applied if default inversion is problematic.

  • MoS Terminology: Key terms like “statistical-significance testing” and Kesselman words used correctly.

  • Dashes: Correct usage of hyphens, en-dashes, and em-dashes (no spaces around em-dashes).

  • Mentally Compile Essay: image how it would appear on Gwern.net with all its features activated (popups, collapses, etc.) before submission.

Adherence to this playbook will improve the draft’s alignment with Gwern.net’s standards, facilitating a smoother editorial process.


  1. Even when there is a standardized tag which has >95% global support on CanIUse.com, it often comes with too many limitations, like hardwired behaviors or cross-browser inconsistency, to be useful compared to rolling our own. That is why I do not use <details>, <abbr>, the newly standardized HTML5 popovers, skip-ink, etc.↩︎

  2. But mostly just to be cute—I like to add subtle touches of style, like the dropcaps, where they can serve multiple purposes.↩︎

  3. In theory, recent versions of Pandoc now support multiple paragraphs in figure captions, but I have not checked this in detail.↩︎

  4. We can then cross-link them: the #bar version might have an editorial comment like this:

    [see also <a href="/doc/2025-foo.html#baz">Baz excerpts</a>] Abstract...
    ↩︎