Register · the changelog
The accession register
A herbarium keeps a register: a ledger of every specimen as it entered the collection, and of every annotation slip pinned to a sheet afterwards — a name re-read off the plate, a locality corrected, an identification withdrawn. This is that book for this site. It is backfilled from the whole commit history and kept up from here.
Straight to the latest accession — the register runs newest first, so that is the top of it. The list below is every accession in the same order.
It records four kinds of change: a sheet mounted, a sheet re-determined — reworked enough that what it shows is different — a label corrected, and work on the cabinet, meaning the site itself. Typo passes and small tidying are left out. Anything that changes what a sheet claims is in.
The full working — every quotation, whose it is, where it came from, and the day somebody read the primary and confirmed the wording — is in ATTRIBUTIONS.md; the reasoning behind every settled and open question is in DECISIONS.md. Both are in the repository, which is the source of truth for this site. If something on a sheet is wrong, it belongs in this register. Say so, and it will be.
Our sibling site Star Stuff risks a wrong fact. This site risks a wrong attribution — a definition trimmed to fit a masthead, an object quietly generalized, a paraphrase left wearing somebody’s name. Nearly every page here carries somebody else’s words, and the citation is the only evidence a reader has.
So the errors are entries like any other. A byline that put Helen Edgar’s name on prose she did not write. A journal citation handed to us with the wrong issue and the wrong pages. A caption that said Miranda had never seen anybody but her father and Caliban, when the play has her half-remembering four or five women. Each one is named below with what it said, what it says now, and how it was caught. The working has always been in the repository. This page is the account of it that a reader can actually reach.
- Mounted
- Re-determined
- Label corrected
- Cabinet
2026 · 23 September · latest
Sheet No. 15, and four words that had been put into an Elder’s mouth Link to this section
Helen Edgar’s essay on foraging between ways of knowing, mounted with three gaps left open on its own face — and two attributions corrected before it went up, one of them the worst kind this cabinet can ship.
A botanist’s word for the walk, and a writer’s word for the same walk. Robin Wall Kimmerer coins metaphoray on page 46 of Braiding Sweetgrass, a few paragraphs after asking whether science and traditional knowledge might be purple and yellow to one another. The sheet takes the word and reads the gap between what a herbarium label can hold and what the plant actually was.
The masthead is goldenrod and asters, which is the essay’s own image and Kimmerer’s. The plume is a mass on a stratified grid rather than a chain of puffs, and the asters were drawn wrong first: a violet disc the size of its own rays, so the rays vanished inside it and five flowers read as dark dots. Redrawn as petals rotated about a centre, which is how this house draws a flower. Looked at rendered rather than trusted from the markup, which is the only way that fault surfaces.
for the benefit of all who come after
The draft had four words in his mouth that are not in the paper. Bartlett, Marshall and Marshall report Two-Eyed Seeing as using both eyes for the benefit of all
. The phrase who come after appears nowhere in either copy Ryan put in the tray — checked rather than remembered. It is plausible, it is adjacent, it carries a seven-generations sense, and it is an addition to a living Elder’s articulation of his own people’s concept. On a sheet whose argument is that Indigenous knowledge is not raw material for somebody else’s story, that was the worst available place for it. The reported wording is now quoted whole.
And Etuaptmumk is not in that paper at all. Zero occurrences. The draft named the Mi’kmaw word and cited the article for it, which sends a reader somewhere the word is not. The term is Marshall’s and travels with him, but nothing carrying it has been read here, so the sheet names it and cites nothing. An open gap is honest; a citation that does not contain what it is cited for is not.
Two copies, and the difference is format rather than text. The published first page as the journal serves it, and the authors’ twelve-page e-offprint, which is the only one carrying the body and so the copy actually read. Same DOI, same pagination, abstracts identical character for character — compared rather than assumed, because two editions is exactly where a difference hides.
Her definition is narrower than the use this sheet makes of it. A metaphoray is the writer’s walk and what it gathers is metaphors. The draft had it as carrying meaning between registers of knowing — a good reading, and hers only by inheritance. The sheet mounts her sentence whole and then says in its own voice that the extension is the sheet’s. This is the tightened-source failure running backwards, broadened rather than trimmed, with the attribution left attached.
A posthumanism claim was carrying her name and now carries none. That the human was never a bounded observer outside the systems it studies is real argument and it is not in Braiding Sweetgrass. The citation came off rather than being re-pointed at a book nobody here has opened. A stimming claim cited to Neuroqueer Heresies came off on the same reasoning; Walker is still cited where the neuroqueer argument is demonstrably his.
A sentence claiming the masthead phrase comes from Walker’s subtitle was written and then rewritten before it shipped. That is precisely what the ledger refuses to say — Helen wrote the phrase in the founding brainstorm, post-normal has its own lineage in Funtowicz and Ravetz, and the settled position claims nothing about how it reached us. A new sheet restating an old finding is where a settled nuance quietly gets lost, and it nearly did.
Caught by Ryan within the hour, on the published page. What this sheet does not settle ended with a paragraph reading No social card, no number, no stamp. Those are accession and they happen at publication, not here.
— on a sheet with a social card, the number 15, and a stamp two inches below it. The posthumanism paragraph promised a source before this is accessioned
, which had stopped being true at the moment of accession. Both are gone, and the section now describes what is open rather than what publication would later do about it.
The cause is worth more than the fix. Five edits were applied when the draft block came off. Two ran through a loop that asserts each pattern matches exactly once and stops if it does not; three were bare string replacements written inline, with no assertion. The kicker matched, the Etuaptmumk sentence matched, and the accession paragraph did not — its whitespace differed from the guess — so it silently did nothing and published a false statement. A replacement that matches nothing and says nothing is indistinguishable from one that worked.
It cleared every gate, and no gate here could have caught it. The full sweep over thirty pages passed: the markup was valid, the contrast fine, nothing overlapped or scrolled. A sheet asserting it has no stamp while rendering one is not a shape a checker can recognise, which puts it beside the deadname rule and the bookmarklet — an editorial claim somebody has to read. The check that would have caught it is reading the published page, which is what happened.
The provenance line gains its first correction on its mounting day, which is the eighth sheet of fifteen to be corrected that fast and the reason --mended was drawn.
The sheet ships saying what it does not settle, which is the point of that section rather than an apology for using it: Etuaptmumk wants a source of its own, the posthumanism sentence wants one or wants rewriting as ours, and the stimming claim wants checking against the literature it probably belongs to. Helen signed it off in that state. The alternative was to invent plausible citations, which is the one thing this cabinet exists to refuse.
The citation style is still the draft’s own — parenthetical (Author, Year) rather than naming each source in a sentence. The same question is open on Time Present, Time Past, and the two want answering together rather than one at a time.
2026 · 14 September
A way back to the front, and the four marks that were not it Link to this section
The breadcrumb had been a route home on every page since the drawers shipped, and it was not the route anybody reached for. The tray has one now, drawn as a glasshouse.
A trail and a control are different things, and both stay. .qe-crumbs says where you are; it sits inside the masthead, below the tray, and on a sheet it is the third thing down. A reader in the middle of nine thousand words wants the other one. Ryan kept looking in the top bar and finding nothing there, which is the whole of the case.
It carries a word, and the unlabelled licence next door does not reach it. The fox and the hedgehog are allowed to be a picture alone because nothing is withheld — that page is in every footer, in the drawers menu and in the finding aid. The home page is the destination a reader is most likely to want and least likely to hunt for, so hiding it behind a drawing would have been the original complaint arriving again wearing a mark.
At 320px the tray is three lines now rather than two, and that was measured rather than discovered later: 133px of tray against 91px, no target under 44×44, no two hit areas touching, and scrollWidth equal to the viewport at 320, 375, 414, 768 and 1280. Both overlay panels hang off the tray rather than off their own summaries, so neither moved — which is the fault the drawers control found the hard way, and the reason that rule exists.
Four marks were drawn, rasterised at 16, 20 and 27px, and then magnified off a canvas rather than redrawn large. A vector redrawn large is a lie about what a reader gets — the lesson favicon.svg paid for twice and the pocket lens a third time. What the pixels said was that a pitched roof is the only silhouette that reads as home at 16px, and that everything else needed the word to carry the entire meaning.
The site’s own mark was tried first and lost. Home as the logo is the oldest convention on the web, and the pressed leaf does not survive the trip: it has a paper ground and a 64px canvas on the icon, and at 20px in moss beside the lens it is a dark blob with less character than the instrument next to it. Its midrib in paper is a white gash that splits the leaf into two lobes and reads as a pea pod. And --qe-rust goes pale pink in the drawer, so the pin that makes the favicon legible becomes a pale bulb at the base.
A chest of drawers was refused without drawing it. The cabinet itself is a drawer in the menu two controls along. One picture, two destinations.
So was a mended cup, and that one is a house rule rather than a matter of taste. Kintsugi is already spent here: --qe-marigold marks a re-determination in this register and the join in a restored attribution, and a seam requires an actual repair. A gold-mended mark in the tray would have asserted a correction that never happened, an arm’s length from the real mends on every provenance line on the site.
The wabi-sabi that survived is the ridge, set off centre. The apex sits at x 11.2 against a body centred on 12, so the two slopes differ and the bays run 4.8, 5.4 and 4.6. It is visible at 20px, it is the same wonk axis already running on this site’s type and on the rail’s ticks, and it claims nothing — which is the only licence ornament gets here.
Two versions were drawn wrong first. A full glazing grid with a transom and one missing pane goes muddy by 20px, and the missing pane does not read as a void at all: it reads as a dark window, and sitting off centre it drags the whole mark sideways. Then a shoot drawn up through the open door — the botanical cue this mark otherwise lacks — read as a small person standing in the doorway at the size it ships at. That is the lilac panicle’s lesson in a fourth costume: do not put one small mark where the eye is expecting a figure.
2026 · 14 September
The cabinet can be installed, and the pin Android would have cropped off the mark Link to this section
A web app manifest, which the site had never had — and a 512px icon that had been generated on every run since the first week and referenced by nothing at all.
site.webmanifest, and why it says minimal-ui rather than standaloneInstalled, this site would have had a generic browser icon and its page title. A manifest is the declarative half of the thing the acronym covers — it runs nothing, caches nothing and makes nothing work offline; it says what the mark is, where the window opens, and what colour the chrome around it should be. The other half is a service worker, and there is still none here.
display is minimal-ui on purpose, and that is the one field in it that is an argument rather than a fact. standalone hides the address bar, and this is a site whose whole practice is that /on-being-ill is a real address a reader can copy, share and check us against. An installed copy that hides the bar the address sits in would be the cabinet quietly withdrawing the thing the ledger exists to make possible. minimal-ui is still installable in Chromium and keeps the address in view.
start_url is a bare /, against the spec’s own example. That example appends a tracking parameter so installed launches can be counted separately; there is nothing here that could read it, /privacy says so, and it would mint a second address for the home page on a site whose redirects exist to ensure every page has exactly one.
short_name is the site’s name and not a nickname. A home screen may truncate Queering Earth, and being truncated by somebody’s launcher is not the same as us keeping a second, shorter name for the site — which is the drift this register refuses everywhere else.
Android applies its own mask and guarantees only the central 80% of the square. The mark is a pressed leaf pinned with the wordmark’s rust dot, and at the scale every other icon here is drawn at, the drawing reaches 0.484 of the square from its centre against a safe radius of 0.400 — measured out of the finished PNG, not calculated. The pin is the part that goes. A leaf with no pin is a leaf; the pin is what says specimen, and it would have been cropped off on every Android home screen with nothing anywhere looking wrong.
So the maskable one is a separate render at its own scale rather than a purpose on an existing icon: an icon declared any maskable
is used at both jobs, and padded enough to survive the mask it is a small leaf adrift in a field of vellum everywhere the mask is not applied. The ground was already full-bleed paper with no transparency, which is the other half of a maskable icon done right, so only the scale had to move.
0.33 was the arithmetic and 0.32 is what shipped. The first re-render measured back at 0.400 of the square exactly — on the line, with no margin for a platform that rounds its mask the other way.
images/icon-512.png had been written on every run since the day the mark was drawn — 7 September, before this register existed to record it — and was referenced by nothing — not a page, not _headers, not the sitemap. Somebody laid this groundwork in the first week and stopped.
manifestThere is no symptom. A manifest served as the wrong type, or naming an icon that is not there, is simply ignored: no console error, nothing wrong on the page, and an install affordance that never appears. So _headers types it explicitly — the .avif lesson, where production sends nosniff and a type the local server guesses is one the live site cannot recover from — and tools/serve.mjs learned it too, so local and live agree.
Two gates had allowlists that would not have seen it. check-cache.mjs and check-metadata.mjs each decide whether a link is a fetch by matching its rel against a list, and neither list held manifest. The one asset every page on the site fetches would have gone through the undeclared-asset check unseen, and a manifest pointed one day at somebody else’s CDN would have gone through the third-party check unseen. An allowlist is only as good as its newest entry, which is the argument for adding one in the same edit rather than the next.
Check 11 is the new guard, and it checks the copies rather than the judgements: the two colours against the --qe-paper in the stylesheet’s :root block, the name and the description against the home page’s own, every icon against the file on disk and against the size it claims to be, and every page for the link. It also guards the one number the pixels cannot give back — Node has no image decoder, so the maskable scale is measured where the drawing happens and the gate only keeps the constant from being tidied back up. Made to fail in five shapes before being believed, each reverted after: a page that does not link it, a colour that is not the paper, a sizes that lies beside an icon that is not there, the maskable scale raised, and a description typed rather than copied.
2026 · 14 September
Sheet No. 14, and a privacy page that was false by two Link to this section
A wall, recast from our sibling site’s reading of the same life — and a correction to /privacy that had nothing to do with it and was found on the way past.
A wall rather than a reading, because the specimen is a person. Nine slips in nine hands across forty-seven years — Lenora Ross in 1974, Parton herself five times between 1984 and 2021, Cottom three — and they do not agree. The second wall on the plate, after No. 8.
The hinge is that weed is not a rank. Taxonomy has no such category, because a weed is not a kind of plant but a verdict about a place, passed in a hand that is never the plant’s own. Set beside Cottom’s distinction between visibility and legibility — being a thing that is supposed to exist — it gives the sheet its whole argument: a weed is perfectly visible and entirely illegible.
Cottom’s critique sits inside the sheet rather than after it. Her reading — that the drag was survivable because the ground under it was unmarked whiteness — is the sharpest thing written about Parton, and a determination slip that leaves out the awkward reading is not a kinder slip, only a less true one. The sheet does not resolve it and says so.
Our sibling site read the same life through physics and this one reads it through taxonomy. Star Stuff’s No One Had to Qualify turns on a star that cannot aim its light; this turns on a plant that cannot appeal its name. The quotations were traced to their primaries for that zine and are not re-walked here — Ryan’s call, recorded in the ledger, along with what this sheet adds that the zine does not.
Three click-to-load recordings, one per instance of the argument. No new capability: the facade, the drawn poster and the one named origin were all already here.
The Glass and the Beethoven shipped with Sheet No. 12 and were never added to the list. The page went on naming three, which made a binding statement of practice false about its own subject for as long as that stood. It names all eight now, and says on its own face that two of them sat there unlisted, because quietly correcting a document like that one is the thing this cabinet refuses.
Nothing gated the count, and that was structural rather than an oversight. check-metadata.mjs checks that every third-party origin our scripts can reach is named on that page — and one origin covers any number of videos, so a missing recording was invisible to it by construction. The list is kept by hand, which is the kind of list this register keeps warning about. It is gated now, by the check below, written the same day on Ryan’s call.
The rendering gates were ported from our sibling site and the port numbers came with them, comments and all. 9412 is the contrast gate in both repositories; 9413 is overlap here and check-sheets there; 9414 is width here and two gates there. Two checkouts on one laptop could not run their rendering gates at the same time, and the symptom read as a broken gate rather than a busy port — which is also the shape of the five-day orphan this file already records.
The refusal was right about the danger and wrong about the remedy. cdp.mjs refused to run if anything answered on its port, which protected against measuring in a stranger’s browser by declining to measure at all — and fired on a neighbour doing nothing wrong. The number a gate asks for is now a preference: a busy port is stepped over in hundreds, 9412 to 9512 to 9612, on ladders that are disjoint so the three gates never chase each other onto one another’s ports.
And the guarantee got stronger rather than weaker. Once the endpoint answers, the listening process is walked up its parent chain to the child we spawned — Chrome’s helper holds the socket, so the listening pid is routinely not the one we started, which is what makes this an ownership proof instead of a guess. The old refusal never proved anything; it only declined to be in the room.
A busy port now says which kind of busy it is, because that is the judgement a person gets wrong under pressure: a headless Chrome whose parent is still running is somebody else’s sweep in progress and must be left alone, and one whose parent is gone is an orphan and safe to kill. That distinction was got wrong in this very session — a Chrome was killed on a heuristic that could not tell the two apart, and the parent was checked afterwards rather than before.
Star Stuff is not edited from this repository, so the whole fix is on our side. Proved in six shapes and every decoy cleaned up after: a quiet ordinary run on the preferred port; a live holder, correctly named as live with the advice to leave it; an orphaned holder, correctly named with the pid to kill; a full parallel sweep with all three preferred ports blocked, which is the exact case that refused this morning and now passes in 305s; the ladder exhausted, which still refuses and exits 1, because a gate that cannot own its browser must not measure in anybody else’s; and the precedent this follows — .claude/launch.json stopped hardcoding 8766 for the same reason, a second session being unable to preview the site at all.
Measured minutes after this sheet was published, when the branch had been deleted from both ends: draft-known-and-felt-and-seen--queering-earth.netlify.app answered 200, still serving the pre-publication draft with its review layer attached, and a full copy of the site beside it. Netlify keeps the last branch deploy at its subdomain after the branch is gone.
The same wrong sentence was in three places — this site’s own build notes, start-draft and publish-draft — written once and copied twice, and never checked in any of them. That is the drift this register exists to catch, in the files that describe how the register is kept.
The noindex is what makes it survivable, and it is doing more work than we knew. The orphaned deploy inherited X-Robots-Tag: noindex from the drafts base, so it cannot be crawled. The live risk is a reader rather than a crawler: anybody holding the old review link keeps reading a superseded draft and may annotate a version that no longer exists. Removing the deploy is now a step in publish-draft, and it is a dashboard action — nothing in this repository can do it and no gate can see it, which puts it in the same small class as the bookmarklet: a check a person has to run.
Check 7c. Section 7b asserts that every third-party origin our scripts can reach is named, which is the check that matters for what a browser may talk to and is structurally blind to how many recordings there are — one origin covers any number of videos. So it counts the data-embed-id facades on every page, reads the list under #the-embed, and compares them per page. It also reads the number the page says out loud in its own prose, because a list that grew while the sentence above it did not is the same failure one layer up.
Made to fail in five shapes before being believed, each reverted after: the historical bug put back — the two Sheet No. 12 recordings unlisted with the count sentence agreeing with the short list, which is exactly how it shipped; a count word wrong on its own; the list naming a recording no longer on the page; a new facade added to a sheet that had none, which is the case that will actually arrive next; and the two ways the check could be quietly defeated — rewording the sentence it reads, and renaming the section’s id. Both of those fail loudly rather than going silent, because a gate that stops applying when somebody edits around it is worse than no gate.
check-markup.mjs stops reporting PASS over a page it never readA named target that could not be found printed SKIP not found and the run went on to report PASS, 0 problem(s) and exit 0. It happened here: a page was checked from a branch it did not exist on, and the gate certified it — 0 tags, 0 ids, 0 elements balanced, and a clean bill of health.
This is the empty-pass fault the rendering gates already guard, arriving in the one gate that had no guard for it. The wording is taken from theirs, because the reasoning is identical: a page that measures nothing reports zero problems, which is indistinguishable from a clean page in every other line of the output. Unread targets are reported in their own block, never mixed into the problem count — an unmeasured page is a broken run, not a bad page — and under --check the run fails.
Proved in four shapes: the missing file alone; a missing file beside a real one, where the real page must still be measured and the run must still fail; without --check, where it reports and does not gate, which is this tool’s stated contract; and a real page, which still passes.
It said eight of the ten readings and one so far for essays, against fourteen sheets with four essays on them. Counted off the plate, which is the authority: eight readings, four essays, two walls.
2026 · 13 September
A link that went nowhere, and the gate that now says so Link to this section
Written into this register earlier today and caught only because somebody went looking. Nine gates had passed it.
The block had the words and no id, so the link named nothing. A fragment that matches no element is not an error — the browser simply does not move, the console says nothing, and the reader who clicked concludes this site is broken in a way they cannot report.
The block was given an address rather than the link being aimed at the section around it. The sentence here is about that block: pointing it one level up would have left a working link and a slightly less true record, which is the trade this register exists to refuse.
The cross-page half is the half that matters, and it is why this could not be a per-page check. Ids here are authored topical anchors precisely so a reworded heading keeps its address; seven anchors point at the plate alone, and nothing verified that one of them landed. So the gate builds its map of ids from every page in the cabinet even when the run is scoped to a single one.
It reads anchor elements and never the string href=. A code span documenting a link writes the tag with only its brackets escaped, so the href survives verbatim and a text search would match this site writing about its own links — the same fault the review-layer guard already records, arriving a third time. Proved by injecting one beside three real faults: the three were reported by name, the documentation was not, and the count of links resolved moved by four rather than five.
The contents list, the rail and the entry index never appear in it: they build their links at runtime from ids they have just read, so they cannot be wrong. What the gate sees is what a person typed. 864 of those resolve today, and the number prints on every run, because a check that measured nothing looks exactly like a clean one.
2026 · 13 September
The header that says what a page may reach, and the hash that has to be generated Link to this section
Ryan asked how strict the Content-Security-Policy was, and whether tightening it would break the new editor. It had been one directive for months on a reason nobody had measured.
_headers had carried frame-ancestors ‘none’ and nothing else since the header shipped, with a comment saying a script-src would kill the snippet every page runs before first paint. That was a plausible reason nobody had checked. Counted instead: one executable inline script on the site, byte-identical on all twenty-nine pages, so a single hash covers every page. The twenty-eight JSON-LD blocks need none — a data block is never executed, and hashing them would have buried the one hash that matters among twenty-eight that do nothing.
What is locked now: scripts to this origin and that one hash, no eval, no inline handlers, no plugins, no base tag, no form submission anywhere, and frames only from the one embed the privacy policy already names. style-src keeps ‘unsafe-inline’ and that is not laziness — 1,299 inline style attributes carry each sheet’s own foxing seed, stamp rotation and card colours, and a CSP hash does not cover a style attribute, only a <style> element. The alternative was not a stricter policy; it was deleting the per-page palette.
tools/make-csp.mjs, because the hash cannot be kept by handThe snippet it hashes lists the nine typefaces the picker offers, so narrowing the picker changes the hash in the same commit — and a stale hash does not warn. The browser simply refuses the snippet on every page, and every reader who asked for the cabinet or for plain view is shown the other thing before the stylesheet catches up: the exact failure the before-first-paint rule exists to prevent, arriving silently and visible only to somebody who had a preference stored and was looking for it. So the policy is written between markers by a tool, check-cache.mjs fails when the header and the pages disagree, and the generator runs last of the five, after everything that can rewrite a page.
Proved in a browser before it shipped, both ways. The policy went into a copy of the home page as a meta tag with a preference stored: the snippet ran and the cabinet came up. The same copy with one character changed in the hash refused it — and Chrome’s own message named the hash the generator had computed, which is the browser confirming the arithmetic rather than us confirming it. The gate was made to fail and then to pass the same way.
The site asked the reader’s device for nothing and said so nowhere. It says so now: thirty-five capabilities denied outright — camera, microphone, geolocation, payment, USB, serial, Bluetooth, MIDI, the motion sensors, the credential and attribution APIs. None of it costs a reader anything, because this site calls no gated feature of its own, which was checked rather than assumed.
A deny-everything list would have broken the one control a reader actually presses. An iframe’s allow attribute can only narrow what the page already has — it cannot grant what the header denies — so a blanket denial would have left whoever pressed the Eliot facade with a player that would not start and a fullscreen button that did nothing. Five features are delegated to that one origin, never to everything, and only fullscreen also keeps this site itself.
clipboard-write is not named here, and looking it up is what saved it. Both injected layers copy out through the clipboard, so it seemed the thing most in need of protecting — and it is not a directive in the registry at all. Writing it would have been the sitemap relation a second time: a token that reads as standard, is not, and rides along on every response saying nothing.
What is left unnamed is the other half of the care. Screen-reader announcements, and a reader’s own translation and speech tools, are not capabilities to take away from somebody trying to get at our words. Denying them would have looked more thorough and been less careful.
Proved behind a throwaway proxy putting the real header in front of the real site, because a permissions policy cannot be set by a meta tag the way the content policy was tested: camera, microphone, geolocation, payment and USB all refused for our own pages; all five player features allowed for that one origin and refused for an unrelated one; and the facade pressed, the player built, and Eliot read.
It loaded the editor from queering.earth written out, which worked everywhere because nothing constrained it. Under script-src ‘self’ that breaks on exactly the host it was built for — a draft, where a contributor reads a sheet that has not been mounted. It asks for location.origin now, so it fetches the editor from whatever site the reader is on.
A bookmarklet’s own javascript: run is the browser acting on your gesture from outside the page, so the page’s policy does not reach it; the script it injects does, which is the whole of the fix. Confirmed on production the same day, pressed from a real bookmarks bar under the live header. That exemption belongs to the browser rather than to this site, so nothing here can gate it: a browser that stopped honouring it would break the editor silently and every gate would still pass. It is the one check on this list a person has to do, and it wants doing again after any change to script-src.
The same policy refused the try-it-now press on the colophon, and that was measured rather than guessed. The bookmark hung there as a link you could drag or press where it hung, and a hash does not apply to a javascript: navigation without ‘unsafe-hashes’. Re-opening that site-wide to buy back one convenience on one page is a bad trade on a site with no user input to protect, so the words changed instead: the page says drag it, and says why. A contributor who reads that sentence learns something true about the site rather than being told a rule.
2026 · 13 September
A way to change words without editing HTML, and a policy that had been miscounting itself Link to this section
Ryan asked whether Decap, Sveltia or TinaCMS would work here. None of them can, and the reason turned out to be measurable.
All three are git-backed editors over collections of files with named fields. A sheet here carries eighty to a hundred and twenty hand-drawn SVG elements, eight to thirteen authored section ids, forty to seventy inline style attributes seeding its own foxing and stamp rotation, and JSON-LD whose about.author is a judgement about who made the thing being read. There are no fields to put in a schema. That is the standing reason — the layout is the argument — stated as a measurement rather than a conviction.
The deferral now rests on one leg. Its third reason was struck yesterday; its second said Netlify Identity’s git-gateway was being sunset, and Netlify reversed that on 19 February 2026. The remaining reason is the one that was always carrying it.
edit.js: click a paragraph, change the words, copy out a patchNothing on any page loads it — a bookmarklet injects it, so a reader’s visit fetches nothing extra and no page markup changed to allow it. It cannot save, which is the design: saving from a browser needs a token in the page, and that is the account problem the CMS question was trying to avoid.
What it refuses to edit is the important part. Quotations, captions and citations are not editable, and the page says why where you try. This site’s characteristic failure is a tightened source rather than an invented one, and a tool that let anybody reword a mounted quotation in two clicks would be a machine for producing exactly that. The accession stamp and the provenance line are refused for the same reason in another key: a record you can edit in a browser is not a record.
The patch is decoded text and the first version claimed it was the file’s bytes. innerHTML decodes entities, so a before-string matched nothing for any paragraph holding an apostrophe. Re-encoding cannot rescue it either: the sources are mixed — 1,300 raw em dashes beside 1,512 — — and no encoding reproduces a file that is not consistent with itself. So it says what it is, and tells whoever applies it to match on decoded text and stop if nothing matches exactly. Proved both ways before it was believed.
A bookmark is only useful if somebody can install it, so it hangs at the foot of the colophon where how this site is made
already lives. A javascript: link runs on a click as well as surviving a drag, so it is try-it-now and keep-it-later in one control, and the hint beside it says both.
It loads from queering.earth whatever page it is pressed on, which means it works on a draft host as well as the published site — a contributor can edit a sheet that has not been mounted yet. Verified by pressing it on a page served from somewhere else entirely and watching the editor start.
The section says what the editor refuses to touch and why, because that is the part worth publishing: a quotation, its caption and its citation are not editable, and neither is the accession stamp or the provenance line.
two valuesand described seven
Found while adding the editor’s key to it. The sentence had been right when it was written and wrong since the five reading settings arrived beside the two view controls; the list below it had grown and the count above it had not, and the paragraph after it still said neither.
A policy that miscounts what it describes is a policy that is wrong about you, which is the reason this is a correction and not a tidy-up.
The new key is named there with the thing that matters about it: it exists only if somebody deliberately starts the editor, it holds only the words changed on one page, and the only way out of the browser is the reader’s own clipboard.
2026 · 13 September
Sheet No. 13, and the first sheet written by Helen Edgar Link to this section
A zine arrived, and what it argued turned out to be about this cabinet. It is mounted as an essay; the zine setting was built, measured and dropped on the way.
Helen Edgar on lost things and the cabinets we keep for one another. Emily brings a broken object into the shop and it is looked at rather than mended; a herbarium sheet makes one flattened plant stand for every other, which is how a normal
mind gets defined; and Ole Worm kept a unicorn horn that stayed wonderful after he proved it was a whale.
The argument the sheet exists for is the third move. What gets called a special interest in clinical language is, from the inside, a small cabinet of curiosities kept and tended by the person who fills it. Three artists are held against that — Beuys keeping a name the textbooks dropped, Dion leaving the species blank, Klee gathering a herbarium for ten years and never using it — and only then is Dinah Murray’s monotropism named, after the experience rather than before it.
The drawing is a pressed specimen held down by three paper straps, which is the title stated as a fact rather than as a metaphor: strapping is one of the three standard herbarium mountings and it is the reversible one, so a strapped sheet can be lifted and re-determined.
Wingendorp’s frontispiece — the room itself, a polar bear on the shelf and three walls of lettered categories — and the woodcut on printed page 283 of the narwhal skull with the tusk still in it, which is the figure by which Worm showed the horn was a whale’s tooth. The leaf was found by full-text searching the scan for Unicornu rather than by guessing, and the printed folio confirmed it.
Public domain, digitised by the Biodiversity Heritage Library from the Smithsonian Libraries copy, and the rights were read at the item rather than taken from the blog post that led us to it. The narwhal is cited to the Internet Archive leaf and not to a BHL page id, because BHL sits behind a bot wall and the id could not be verified: a guessed citation is worse here than an inconsistent one.
Helen’s note after publication: he comes out of nowhere. He did — the sheet named him in the second sentence of a paragraph about cabinets in general and went straight into the unicorn horn, so a reader met the anecdote before the man. Three sentences now say who he was: a Danish physician and antiquary who taught Greek, Latin, physics and medicine at Copenhagen, was physician to Christian IV, and read runestones for years. The engraving above him is identified as his own room.
One detail was checked rather than copied. Burkhardt’s Verzeichnis eponymischer Pflanzennamen, the authority consulted when this sheet’s plates were sourced, makes him physician to Christian V. It was Christian IV: Worm died in 1654 and Christian V acceded in 1670. The slip is noted in the library copy so nobody takes that detail from there later.
Emily’s verse arrived with no attribution and both circulating versions are wrong. Postgate’s own site prints it as six lines, hyphenating cat-puss and capitalising only the first word of each line; the reference works run two of those lines together and capitalise throughout. It is spoken narration and not one of the folk songs, which matters because those are Sandra Kerr and John Faulkner’s work.
The type-specimen reading was cited to Flannery and is not in Flannery. Her paper contains no instance of ideal, standard, normal or deviation. The botany is hers; the argument about how a normal mind gets defined is Helen’s, and the sheet keeps them apart.
Flannery was cited n.d.
and is 2013, and monotropism was used without crediting Dinah Murray. Both fixed. The paper was already in the house library and the search missed it because it had not been indexed yet, which is the case the house rules warn about.
2026 · 13 September
Two ways the instruments here mislead the next person, written down rather than remembered Link to this section
Neither is a fault in the site. Both cost a session time today, and both would have cost the next one the same.
grep reports nothing on make-records.mjs, and silence is not an answerThat tool fences its code-span placeholders with literal NUL bytes, so file calls it binary data and grep prints nothing rather than saying why. A search for a string that is plainly in the file exits quietly with no output, which looks exactly like a file that does not contain it. Three searches and one wrong theory about corruption before file was run on it.
The fence is right and is not the thing to change. A placeholder needs a delimiter no source text can contain, and this is a repository whose prose is about its own markup — every printable candidate is one an entry may legitimately write inside a code span, and the day it does, a placeholder is restored into the middle of somebody’s sentence. The cure is knowing: grep -a, and run file when a search comes back empty on a file you can read. It bites an edit script too — the apparent spaces around the placeholder index are NULs, so a pattern typed from what the terminal renders will never match, which is how the first attempt to teach that tool strikethrough failed on an anchor that looked correct character for character.
The three Chrome gates here bind 9412, 9413 and 9414. So do Star Stuff’s, because these were ported from there and the numbers came with them, and the two repositories sit side by side. A session working in each at once is two suites contending for three ports: today a sweep hung for twenty minutes, and a later one had check-width.mjs refuse in 0.2s while a neighbouring check-overlap.mjs held 9414.
The refusal is cdp.mjs working exactly as it was written to, after a gate spent five days measuring in an orphaned browser it did not launch. That guard cannot tell an orphan from a live neighbour, and should not: driving either is the same mistake. Renumbering would end the collision and end the protection with it, in the one direction it has already paid off — so it was weighed and refused. The collision is loud and costs a wait; the alternative is quiet.
Checking the port first was the obvious advice and it is wrong, which was found by writing it down and then trying it in the same hour. The ports were free, the sweep started, contrast and overlap ran their 55 and 42 seconds, and width refused anyway — the neighbour had taken 9414 in the seconds before it spawned. The window is every moment until each gate binds, and nothing outside the tool can close it. What works is re-running the one refused gate: the refusal costs 0.2s, the other eight have already reported, and width came through on the twelfth attempt. Wait rather than kill — a neighbouring gate is somebody’s real run.
2026 · 13 September
A retraction had been reading as a typo, on the page whose job is to show what was retracted Link to this section
Found by reading the page rather than by any check, which is the only instrument there is for a fault made of valid markup and wrong words.
What is settled retracts reason 3 of the CMS deferral in place, so the record shows what was believed as well as what replaced it. The retraction was written in Markdown strikethrough and make-records.mjs did not know the syntax, so the tilde fences went onto the page as text. It knew emphasis, code spans and links; strikethrough had simply never come up.
It fails silently in exactly one direction, which is why it lasted. An unknown tag makes the Markdown generator throw, deliberately, because a dropped element is a copy that says less than the page. An unknown inline syntax has no such guard: the characters survive, nothing is lost and nothing is converted, and the result looks like plain text that forgot to become HTML. The converter throws on an unclosed run now, the shape its emphasis parser already had.
A single tilde is not strikethrough, and this corpus proves it five times — ~100, ~60px, ~896px, ~108px, ~120, all of them approximately in ordinary prose. The run has to be exactly two, and the round-trip proof had to learn the same fence or it would have demanded text the converter was right not to produce.
It is del and not a class. A line-through drawn on a span is invisible to a screen reader, so the one mark on these pages that says this is no longer true would be missing for the readers least able to infer it. The element carries the meaning and the colour only shows it: --qe-coral on the rule, --qe-moss on the letters, the colour on the strike and never on the word — the idiom the restored attribution on Miranda already uses, reused rather than restated.
The struck sentence drops out of the finding aid, and that is correct. The index skips del subtrees, because plain text has no vocabulary for this is the reading we got wrong and a snippet would hand a searcher a retracted claim as a current one. Checked rather than assumed: the page still indexes that passage once, through the 12 September entry that quotes it as history and says why it was struck. The retraction is findable; the retracted claim is not.
2026 · 13 September
A listing said five sheets had been corrected while the sheets said they were clean, and the sheets were right Link to this section
Moving one provenance line made the disagreement visible. Measuring it turned the expected answer around: twelve of the thirteen lines were exactly right, and the tool was the one making a claim it had not checked.
Corrected four times sincefor four corrections made the day the sheet went up
What has arrived counts a page’s corrections out of this register and prints the total under the word since. A sheet is routinely corrected while it is being mounted — a citation checked against the primary, a story everybody tells found to be wrong — and those entries are filed to the sheet like any other. So The Swell and the Dwell read Corrected four times since
for four corrections dated the day it arrived, and five sheets read as corrected while their own provenance lines said Not yet corrected
. Nothing was miscounted. The listing was asserting a chronology it had never checked, which is this house’s own recurring fault wearing a number: a claim that looks like a measurement and is not one.
The line now splits the two — Corrected twice on mounting and once since
— in the vocabulary The Die Uncast already uses on its own provenance line.
The obvious key is the accession that mounted the page. Measured, several pages have more than one: this register files three Mounted accessions to the ledger on the day it arrived and two to My Gloomy Sunflowers, because Mounted is this register’s word for anything added to a page rather than for a page coming into being. The arrival day is a thing, because it is a measurement of the repository and the listing already had it.
It is also the only rule a generator is entitled to. Within one day the order of accessions here is editorial and nothing can verify it, so a tool that placed one same-day entry after another would be claiming a fact it does not have. A provenance line may draw the finer distinction, because it is authored and knows which accession mounted its sheet — The Die Uncast separates four corrections on mounting from three more when the plates changed, all seven on 8 September. The listing says the coarser true thing and the sheet says the finer one, and neither contradicts the other now.
Thirteen provenance lines were read against this register and twelve were exactly right. The Army of the Upright was the one: it said re-determined once, and the register holds two. The missing one is 9 September, when a line of Woolf’s turned out to be Woolf guessing at what Coleridge meant and the quotation was re-cut to start where the guess does. The line names it now.
The expected answer was the other one. Five sheets say Not yet corrected
over register entries filed to them, and the first reading was that all five had drifted and wanted mending. They had not: an accession history reports what has happened to a sheet since it was accessioned, and five other lines go further and say on mounting
or before it shipped
in their own words because they chose to. Forcing a gold seam onto four clean sheets would have been decoration asserting a fact, in the component built to make real mends findable. Measured before mended.
2026 · 13 September
Three words under the tagline, read three different ways, and none of them the one we wrote Link to this section
Readers told us what the masthead said to them. It was not what it said to us, and it was not the same thing twice.
Since 7 September the masthead carried a second line under the tagline reading after Nick Walker, linked to his book. It is gone. Three words cannot carry the paragraph that credit needs, so three readers finished the sentence themselves, three different ways — as a death notice, as an endorsement, and as a declaration that this site is built on one person’s theory. The third is the one that decided it. A cabinet that reads the world through many lenses had appeared to run on one, in the first four words anybody meets.
Nothing about the attribution changed, only where it is made. The paragraph under Queering is a verb has carried the whole of it since the same day — the subtitle quoted, the hyphen named, he published it first, and no claim about the route the phrase took to reach us. Nobody has ever misread that. It is the place a credit of this shape belongs, because it needs a sentence, and the masthead had room for a label.
The rule worth keeping: a credit that needs a sentence must not be set as a label. That is this register’s own paraphrase failure arriving from the other end. A form too small for the claim will shorten the claim, and the shortened claim is not a quieter version of the true one — it is a different one. After is still the right word where there is room for it, and it still stands in the caption under the moth.
The Five Unmistakable Marks argues that coinages get separated from their coiners, and shows its working on our own tagline. It said So the masthead says after Nick Walker
, which stopped being true the moment the line came off. A sheet that cites the site it is mounted on has to move when the site does, and this is the first one here that did.
The section keeps the whole argument and gains the episode: what the three words were, what three readers each took them to mean, and why the credit went back to the place with room for it. The sheet’s first mend, three days after it was mounted.
.qe-tagline-credit came out of the stylesheet in the same commitThe rule had one user and the user is gone. A rule with no element is not the fault this house watches for — that one is a class with no rule, which renders black and no gate here catches it — but it is the same drift from the other side: a stylesheet describing a component the site no longer has, with a comment above it explaining why the component is not optional
. The comment was true when it was written and had to go with the rule.
The ledger and what is settled both carried the old state as a resolved question. Both now carry the re-determination beneath it rather than instead of it, because the 7 September call was half right and stays half right: crediting him was the right one of the three options, and the masthead was the wrong place to do it.
2026 · 12 September
A draft can now be read at a real address and marked up without an account Link to this section
Ryan asked for a lightweight way to show Helen a sheet before it is mounted, and then supplied the constraint that decided it: nothing requiring GitHub or editing HTML works for her. One sentence, and a settled decision stopped being true.
What is settled deferred a CMS partly on the grounds that the zero-cost path already works: Helen edits files in the GitHub web editor, opens a pull request, and Netlify posts a deploy preview URL on it.
It had been false for as long as it had been written. The sentence came from Star Stuff, which really does run 192 pages that way, and was carried across as a fact about this collaboration without ever being checked against the person in it.
Reason 3 is struck on the record rather than quietly rewritten; reasons 1 and 2 stand, and the deferral survives on two legs instead of three. The open question beside it is half-answered — the friction is the tooling, in both directions. Reviewing is solved below. Authoring is still open, and is the half the CMS trigger is really waiting on.
drafts/review.js lets a reviewer write on themOnly half the problem was ever hard. Reading a draft never needed an account — a Netlify branch deploy is a permanent URL. Giving feedback did, because a pull-request comment thread was the whole of the answer.
Drafts now sit at the root of a long-lived drafts branch, so a draft is byte-identical to the page that will ship and promotion is a merge. A drafts/ folder on main was measured and refused: it works mechanically, because every generator and gate here reads the root non-recursively, but it would put unreviewed attributions on queering.earth itself — unlisted, public, unauthenticated — and a page one directory down needs ../queering.css, so it renders something other than what ships. The gates that fail on that branch are the accession checklist reported by name: the missing 301!, the missing card, the missing <loc>.
The review layer is three lines in one head block, and publishing means deleting them. Armed, every block grows a visible focusable Note control; notes live in localStorage and leave only through Copy my notes, which builds plain text carrying the section, a deep link to its authored anchor, the quoted line and the reviewer’s own words. No endpoint, no account, no third party — this site makes no third-party request and a review tool is not the place to start one.
It writes words, which every other script here is forbidden to do, and that carve-out is stated rather than taken. These are instrument labels on a page that will never be published, and deleting the include line removes every one of them; authored templates instead would mean a block of markup pasted into every draft, which is the friction this exists to spare.
check-metadata.mjs check 10, and four faults found by measuring what no gate measuresThe guard keys on sitemap.xml, because that is this site’s own manifest of published addresses: a draft is not in it, so the branch stays green, and the moment a page is accessioned the gate demands the block be gone. It fails on the noindex half too — a page the manifest advertises and the markup hides is two statements that cannot both be true. Made to fail in both shapes on a real published page before being believed, and reverted.
Its first version was defeated by this register. The check grepped for the bare string drafts/review.js, and the sweep failed on this page and on what is settled — the two pages that had just been given an entry describing the feature. A gate that matches a string matches the documentation of that string, which on a site that documents its own build is not an edge case. It requires an unescaped script tag now. Check 7 in the same file already knew this, exempting a link because a link the reader chooses is not a request the page made; that distinction is called the whole difference between a usable gate and a useless one
in its own comment. Same lesson, second gate.
Nothing gates runtime furniture, so it was measured by hand, and the first two measurements found real faults. --qe-paper-deep was the obvious ground and is wrong: moss and rust measure 6.90:1 and 6.21:1 on it in daylight, reproducing to two decimals the numbers that withdrew the recessed panel once already. Everything sits on --qe-card instead — ink 15.26:1 and 13.39:1, moss 8.35:1 and 7.53:1, rust 7.52:1 and 7.57:1 across the two grounds. And the 44px floor missed every Note button, because a selector for a button inside the review element does not match a button that is one; they were 40.3px until they were measured. All 54 controls clear 44×44 at 375px, none overlap, nothing scrolls sideways.
Two smaller things, each paid for by watching it go wrong. A definition list is one target, like a quotation — the specimen block fragmented into twelve note buttons first, which is the cropping fault from the other direction. And a note whose paragraph is rewritten under it is marked, never dropped: it re-attaches by position, says so on its face, and still exports. Silently losing a reviewer’s note is the worse failure.
promotion is a mergewas wrong the day it was written
The entry above asked for one curl against the first real branch deploy, and it was worth asking. The .netlify.app rule in _redirects does not reach a branch host, as expected. But Netlify sends no X-Robots-Tag on a branch deploy at all — Deploy Previews get one, branch deploys do not. The draft page itself was covered by its own three-line block; the full copy of all 27 published pages that a branch deploy also carries had nothing but rel=canonical holding it. Real mitigation, and exactly what this site already judged insufficient one layer up, where the apex .netlify.app host is 301’d rather than left to canonicals.
_headers on the drafts branch now carries X-Robots-Tag: noindex on /*, and that line must never reach the published site — if it does, every page here drops out of every index.
It is safe only because of a correction to the day’s own design. Promotion takes the file and never merges the branch. Promotion is a merge
was written into what is settled and into the house rules before the branch had more than one thing on it, and it was wrong on its own terms: a branch holding three drafts cannot be merged to publish one of them. Cherry-picking the single file is what the workflow required anyway, so the header costs nothing that was not already being spent. The two halves are one decision, and weakening either breaks the other.
start-draft puts a page on the branch and prints the URL to send Helen. save-draft commits, pushes and hands the URL back. publish-draft takes the file onto main — never the branch — and walks the accession checklist this file already states: mount it, card it, log it, file it, stamp it, route it, crumb it, group it, rail it.
tools/draft.mjs holds the one thing all three need to agree about, which is which file is the draft. Written out three times it would be three answers the day one was edited, in the one place where being wrong means publishing the wrong page. A draft is identified by its marker rather than by a name kept somewhere, so a page stops being a draft at exactly the moment it is published, with no state file to fall out of step.
It matched the bare filename first, which is the third time in one day. Check 10 shipped that way and fired on this page and on what is settled; this tool did the same an hour later and reported both of them as drafts in progress. On a site that documents its own build, anything matching a filename matches the prose about that filename — and the discriminator is always the same, because prose escapes the tag or wraps the name in a code span.
2026 · 12 September
A gate that had been measuring in somebody else’s browser for five days, and a runner that makes a one-page edit cost a minute Link to this section
Ryan asked why moving one block inside one page took twenty minutes to check. Timing the answer turned up a second thing nobody was looking for.
Each Chrome gate spawned Chrome and then polled /json/version until something answered. On 7 September an orphaned headless Chrome from a neighbouring project’s probe script took port 9414 and never let go. Every check-width.mjs run from that day to this one bound nothing, attached to that five-day-old browser, measured all 27 pages in Chrome 152.0.7977.77 while .84 was installed, killed its own portless process on the way out, and reported PASS with no sign whatsoever. Five such orphans were up, one per interrupted probe, holding about 400MB, with 303 temp profiles behind them.
This is the house’s own recurring fault in a new place — a run that measures a fraction of what it claims looks exactly like a clean one. It was found by timing the gates, not by any check, and no check here could have found it: every gate reports on the site, and nothing reports on the instruments.
cdp.mjs now owns the spawn, which reverses that file’s own stated position that the duplication “carries no footgun”. The port must be free before the spawn, and the process we started must still be alive when the endpoint answers — the old poll swallowed every failure and fell out of its loop silently, so a Chrome that died on launch produced a sweep of nothing rather than an error. The temp profile is removed on the way out, which no copy did. Made to fail in three shapes before being believed: a decoy on the port refuses and exits 1, a browser that cannot start reports Nothing was measured
, and the port free again passes.
tools/check.mjs: twenty minutes becomes twenty-four secondsMeasured before anything was written. The four generators are 4.8s and the six offline gates 5.6s together; check-overlap is 40s, check-contrast 53s, and check-width is 4:22 — three quarters of the whole bill, because it renders 27 pages × 10 typefaces × 4 widths × 2 papers.
Three things made twenty minutes out of six, and none of them needed new capability. The three Chrome gates run at once, which they were always built for — they take one port each and cdp.mjs has said why since it was written. The sweep is scoped to the pages that moved, through the positional arguments all three already accepted. And nothing is run twice to read an exit code a pipeline discarded. Full sweep: 4:47. A one-page change: 24s, generators and all nine gates included.
The scope is taken from git, and only after the generators have run. That order is the reason this is a tool and not an alias: make-records and make-whats-new write into pages nobody touched, so asking git first scopes to the edit and misses the pages the edit caused. Untracked files count, because a new page is the case most in need of measuring and a plain diff cannot see one.
Which assets break scoping is declared, never inferred — the two-list shape check-cache.mjs already uses, because nothing in a file’s bytes says whether it can move a page it is not named in. The stylesheet, the script, the fonts and the gates themselves force a full sweep; queering-search.js adds the finding aid and nothing else. Everything else is page-local by declaration, --all is always available and always right, and a new shared asset needs a line in one of the two lists.
2026 · 12 September
Sheet No. 12, and a rule relaxed on the record rather than quietly Link to this section
An essay that began as a note in the inbox about a piece of music, and turned into an argument about who is allowed to love the way the canon does.
Limerence, read as monotropic attention rather than as a disorder. Four objects are held against that vocabulary — Glass’s Mad Rush, the first movement of Beethoven’s Op. 47, Mustapha Mond’s hydraulics of feeling in Brave New World, and Florentino Ariza’s fifty-three years — and then Elizabeth Barrett Browning’s Sonnet 43, which does something in its fifth line the standard reading treats as the modest beat.
The argument the sheet exists for is the asymmetry. Attention that pools on one person, will not redirect, survives years without reciprocation and refuses the cure is a masterpiece when a novelist does it and a symptom when an Autistic person does it. The canon is the evidence, and this sheet puts it on the record: either the sonata is a symptom too, or the longing is not one.
The drawing is a Myosotis — a water forget-me-not, which grows at the margin of standing water. Its flower-head is a scorpioid cyme and the coil is computed rather than drawn, sampled off a spiral whose radius grows as it unwinds, with tight buds at the curled tip and open flowers along the uncoiled part. Drawn by hand it came out a snail. The plant was chosen because the coil unwinds, which is the shape of the sheet’s own argument, and because its common name is the thing the whole essay is about.
Both embedded recordings are the owners’ own deliveries and were verified as such before they were mounted, not assumed from the channel name: Mad Rush is Sony Classical’s delivery of the 1989 Solo Piano recording with Glass himself at the piano, and the Op. 47 first movement is Warner Classics’ delivery of Renaud Capuçon and Frank Braley. The first draft of this sheet carried a listener’s upload of the Glass; the official one exists and was found by looking, which is the outcome the policy is for.
The Immortal Beloved scene has no such copy and is linked rather than embedded. No official clip or licensed excerpt of the film could be found. The policy asks for a copy the rightsholder is paid for; this is not one, and the relaxation is Ryan’s call, recorded here and stated on the sheet’s own face in what it does not settle. A link is a request the reader makes; an embed is one the page makes for them. That distinction is the whole of what the relaxation rests on, and it is why the film gets a link and not a facade.
no page numbersnow carry four
The sheet shipped its Love in the Time of Cholera passages with the wording verified and the pagination missing, because the only copy to hand was an unauthorised scan with none. Ryan looked them up: 58, 58, 198, and 345 — the last being the final page of the novel. The citations now name both copies, because neither is enough alone. Knopf 1988 is where Edith Grossman’s translation was first published; the Vintage International edition is where these numbers live.
The page map was tested before it was believed, and that test is the transferable part. A reader showing Page 58 of 346
may be reporting the publisher’s print page map or may be inventing pages from the reader’s own font size and window width. The two are indistinguishable on screen. Ryan changed the text size and the numbers held, which settles it as the book’s pagination rather than the device’s. A number that moved with a font setting would have been worse than no number at all: exact-looking, authoritative, and unreproducible by any other reader. Ask an ebook page number to prove itself before citing it.
Reading the pages also confirmed two transcriptions against the printed line rather than against the scan — Grossman’s American immunized, and to enjoy his martyrdom
closing the linden-blossom passage.
The sheet shipped its first draft citing Dorothy Tennov at one remove, through Helen Edgar’s essay, and said Tennov described the crystallisation that idealises the limerent object
. She does describe it. The term is Stendhal’s, from De l’Amour in 1822 — the branch left in a salt mine and lifted out months later encrusted into something shimmering — and Tennov attributes it to him in plain words on her page 30. It had reached us through a summary that named only her.
Caught because Ryan put a scan of Love and Limerence in the library and the book was opened. That is the second near-miss on this one sheet, after memory-foaming, and the two share a cause exactly: a term met in a secondary source and carried forward without opening the primary. The sheet now says on its own face that opening the book corrected it, because a correction a reader cannot see is a correction that only exists for us.
Reading the book also paid for itself three more times. Tennov’s own list of the state’s components includes intensification through adversity
and the finding that an externally imposed obstacle, such as Romeo and Juliet met in the resistance of family and society
will serve — which is Huxley’s barrier, measured rather than asserted, and it is now mounted beside him. Her criteria also include the inability to react limerently to more than one person at a time
, so single-channel attention was written into the definition in 1979, a quarter of a century before monotropism had a name. And she says herself that a relationship with no limerence in it may be a far more important one in your life
— the woman who named the state, pointing at the dwell.
The draft reached for memory-foaming as though it meant fond or magnified memory. It does not. Attlee Hall’s term is for the Autistic habit of taking the shape of whatever you meet — conceding, bending and making yourself agreeable to the point of self-alienation. Caught before it shipped, by reading the source rather than the phrase.
It is recorded here because the near-miss is the exact failure this cabinet is organised against: somebody else’s coinage, loosened one notch to fit the sentence we wanted, with the attribution still attached. Used correctly it improved the sheet — the danger of the lake is not only that a person cannot leave it but that they dissolve in it, which is Hall’s point and not ours.
2026 · 12 September
The lilacs went back to the foot of the home page, and needed a heading once they were in an outline Link to this section
A coda stops being a coda the moment anything is appended beneath it. Nobody moved this one; three sections arrived under it, one at a time, each of them correct.
main, where it was mountedEliot’s four lines, the Syringa vulgaris drawn from Ryan’s yard and the click-to-load recording were mounted above the footer and last on the page, at 16:17 on 9 September. They were the last thing on it for two and a half hours. The cabinet’s own pages came out of the footer and onto the home page at 18:54 that evening, the thirteen aims followed at 19:47, and the two lists became the founding papers and the cabinet itself on 11 September. Every one of those edits appended, which is the ordinary thing to do, and the sum of them left a coda in the middle of the page reading as a digression between the plate and the furniture.
It now sits after both lists, which is the foot of main again — and last for a structural reason rather than a chronological accident, since nothing on the home page follows the drawers.
The section had no h2 and had never needed one: a passage at the end of a page, after the argument has finished, announces its own genre by position. Moved into an outline it has to be named in that outline, so it is Coda: the lilacs — the word says what the section is, which is the job the position used to do.
The address is #lilacs and not a slug of the heading. Ids here are topical and authored precisely so a reworded heading does not take every shared link with it; Coda is a word we might argue about, and the lilacs are not. The rail picks the section up with nothing else added, because it derives from the page’s own headings — and the home page has no contents list to keep in step, its plate being the index it already has.
2026 · 11 September
Two of the five link relations this site sent were not relations at all Link to this section
Noticed in passing while the feeds were being split, and it turned out to be twice the size of the note that prompted it.
registered relation types onlyand two of the five were not
_headers sends an RFC 8288 Link header so an agent that never reads our HTML still finds the index, the feeds and the licence. Its own comment claimed registered relations only, and that sentence had been false for as long as it had been written. Checked against the IANA registry on 11 September — all 236 entries, fetched rather than remembered — and neither sitemap nor agent-skills appears in it.
RFC 8288 admits an extension relation only as a full URI, never as a bare token, so these were not lax choices but invalid ones, riding on every response the site has served since the header shipped. sitemap is exactly the kind of token that reads as standard and is not.
Dropping sitemap costs nothing: robots.txt carries Sitemap:, which is the canonical mechanism every crawler already reads.
The note that prompted the check named only sitemap. The sweep found two, which is the argument for sweeping rather than fixing what you remember. agent-skills is not a registered relation, and — unlike security.txt’s path — not a registered well-known URI either, so the usual a well-known path is self-discovering
argument is weaker here. That was weighed rather than assumed, and it went anyway, on Ryan’s call.
Nothing standard consumes it. An agent implementing the convention reads /.well-known/agent-skills/index.json by path and would never look for that rel, because that rel is not a standard either. An invalid relation that nothing consumes is decoration asserting a fact — a gold join on a sheet nobody corrected, in the one header whose whole job is telling machines what to trust about this site.
The skill itself is unchanged and still sits at that path, still named in this register and in the prose of /llms.txt. What went is a pointer no client ever asked for. Nothing gates this yet, and whether it should is open.
2026 · 11 September
A gate that counts closing tags, and the eight attributions it found wearing their emphasis inside out Link to this section
The unclosed accession found this morning was left as an open question: whether a check for it was worth the noise. Ryan settled it the same hour. It was not noisy, and it did not find one fault.
check-markup.mjs’s header had said for its whole life that unclosed tags were out of scope by design
and that guessing at intent would make the gate noisy
. Both halves were wrong, and the header now says so. The cost of the first was the accession this register lost from the feed for a day. The second was tested rather than argued: every non-void element on every page was counted before a line was written, and the whole repo balanced but for two — that section, and an unclosed strong on Two Cohabitating Modes that had been bolding the rest of a list item since the sheet was mounted.
So it checks every element rather than a declared list of containers: a list would be a second thing to keep in step and the measurement says it would buy nothing. It is stricter than HTML, which lets p, li, dd and td close implicitly. That is deliberate — three generators here parse this markup with regexes, so balance is a requirement of the repository and not a matter of taste.
A stack, not a counter. Counting opens against closes returns zero for <div><section></div></section>, which is mis-nested and breaks those generators identically; a stack also names the element and the line where a counter can only say a total is off by one. That distinction paid for itself on the first run.
The new check’s first run reported 16 problems across the ledger and the decisions — both generated pages, both numerically balanced, and invisible to the counting sweep done an hour earlier. **Robert Earl Hardy, *A Deeper Blue*** was reaching the page as <strong>Robert Earl Hardy, <em>A Deeper Blue</strong></em>: the bold regex is non-greedy, so it took the first two of the three closing asterisks and left the third for the italic pass, which closed the pair inside out.
Eight passages were built that way, in the two pages a reader goes to in order to check us. The converter’s old comment was right that emphasis nests here and wrong that two ordered passes can read it: **A *b* C** happens to work, and **A, *b*** cannot, because the closing run is ambiguous to a regex and is not ambiguous to a stack.
Replaced with a delimiter resolver using CommonMark’s flanking rule cut down to the one case these files have — a run may close only if the character before it is not a space, and open only if the character after it is not. That is what tells *A **B***, italic holding bold, from **A, *B***, bold holding italic, and both shapes appear here, so neither could be assumed. Seven lines changed and nothing else, checked by diff, with the generator’s own word-for-word round-trip proof passing unchanged.
In what is unresolved, the item about whether runts
survives into later printings of Fifty New Poems for Children was missing its closing strong. Its two siblings set the question in bold and the explanation in ordinary text; this one ran bold to the end. Visible on the page since the sheet was mounted, and caught by a tag counter rather than by anybody reading it.
The house rule is that a guard nobody has watched fail is a guard nobody should trust. Three faults were reintroduced and each reverted after: the original missing </section>, reported against the </main> a browser would close it at; the unclosed strong, reported against its </li>; and a deliberate mis-nesting that balances numerically, which is the case a counter structurally cannot see. Each exits 1; the clean tree exits 0.
22,709 elements balanced across 27 pages, and the count prints on every run — the same reasoning as the contrast gate’s element counts, because a gate that checked nothing looks exactly like a gate that passed.
2026 · 11 September
A page that says what arrived, two feeds instead of one, and a date that could not be taken from this register Link to this section
Ryan asked for the pair our sibling site has kept from the start: a What’s New page and a feed. Half of it turned out to exist already and to be unreachable, and the other half turned out to be two things rather than one.
Every index this site had was in the order somebody chose. The plate runs by accession number, the two lists on the front of the cabinet run by what a page is for, and tools/pages.mjs holds that order for the drawers menu, /llms.txt and the finding aid’s manifest alike. This register is the one chronological view and its unit is the accession — an event — across some forty thousand words. Nothing answered what is here, and when did it turn up
, which is the question a reader who was here last week actually has.
The listing is generated by tools/make-whats-new.mjs and written between markers into an authored page, the way the ledger and the decisions are. Star Stuff generates the whole of its equivalent from a template inside the tool and has recorded what that cost: a site-wide pass added a skip link to every page, the next build rebuilt that one from the template, and the skip link was gone with the tool reporting a clean build. A generated page does not conflict, it reverts. Edit inside the markers here and the next run takes it back; edit outside them and it survives.
Nothing on it is typed. The summaries are each page’s own meta description — the sentence /llms.txt already publishes, so there is no third copy and no repetition of the gloss a collection page is forbidden to repeat. The kind and the number come from the plate, which check-card-order.mjs already names as the authority for both. The correction counts are read from this register’s own data-sheet filing rather than counted by hand.
/feed.xml has shipped since the agent-readiness pass. It was in every page’s head as rel=alternate and on every response as a Link header — so a client that had already been handed the URL could find it, and a person could not. There was no visible link to it anywhere on the site. A feed with no human twin is a feed for machines only, which is not what a feed is for. The new page is that twin, and carries the first pressable route to either feed.
The feed carried this register’s accessions — new sheets, corrections and housekeeping notes in one stream. On Ryan’s call it is now split. /feed.xml is the pages as they arrive, the same list as the new page and out of the same pass, so the two cannot be made to say different things. /register.xml is this register, under the name the site already uses for this page.
The pages took the old name rather than the other way round, and that is the part worth writing down: anyone already subscribed stays subscribed to a working feed and simply begins receiving pages, which is the list most people mean when they say feed
. Every page advertises both, the Link header carries both, and check-metadata.mjs now fails on a page that names one and not the other.
Found while counting the new feed’s items against the page: 58 accessions on the page, 57 in the feed. The Bewick accession of 10 September was missing its closing section and the two divs inside it, so every accession below it was nested one level deeper than it should have been and the file ended one tag short.
Nothing looked wrong. A browser closes the tags itself, so the page rendered correctly and has all along; check-markup.mjs passed it, because that gate reads parser-rewriting markup, duplicate ids and the single landmark, and does not balance sections. What it cost was invisible in exactly the way this register is organised against: the feed’s regex runs from an opening tag to the first close it finds, so the unclosed accession swallowed the next one whole and the accession about every poem arriving in the Markdown mirror as prose had never been in the feed at all.
Closed, and the balance checked both ways: the page now has 58 accessions, the regex finds 58, and the section depth returns to zero at the end of the file. A gate that balances sections is not written, and whether it should be is left for the decision log — this is one fault, found by a count that only existed because the feed was being rebuilt.
The obvious source for an arrival date was this page, and it does not work. Mounted
here means anything added to a page, not a page coming into being: the colophon carries five such entries, Two Cohabitating Modes six, the front of the cabinet ten — and the privacy page carries none at all, because nothing was ever mounted on it. Taking the earliest would have dated several pages by accident and one not at all.
So the date is the commit that first added the file, which is a measurement of the repository rather than a second hand-kept copy of anything. And it is gated against what we wrote down. Eleven sheets carry an accession stamp with a date in it and twelve pages carry a provenance line with another; the generator compares all three for every page and refuses to run on a disagreement, because the day a stamp and a commit stop agreeing this site is about to say two different things about one day. All twelve agree today — checked before a line of the tool was written, not after.
Two things were found by running it rather than by reading it. A page being written has no commit that added it, so an uncommitted page is dated today, loudly, and corrects itself on the next run — self-healing rather than an override table, which would have had to be right forever. And the first version of that fallback used UTC and dated this page 12 September while it was still the 11th at the desk, a day ahead of the accession you are reading.
2026 · 11 September
Two van Goghs, two recordings, and a privacy page that had a number in it Link to this section
Ryan asked for the Almond Blossom on the sheet, for any other public-domain paintings that fit, and for click-to-load recordings of the songs with some lyrics quoted under the new policy. Three of those four were straightforward.
Almond Blossom (Van Gogh Museum, February 1890) sits with letter 857, and Still Life: Vase with Fifteen Sunflowers (National Gallery, August 1888) sits with Gadsby’s line, which had been arguing about that painting without showing it. Both are public domain, both came from Wikimedia Commons at 1280px, and the figcaptions say so — what is out of copyright is the painting, and what we serve is somebody else’s photograph of it at a size we chose.
Almond Blossom is the sheet’s second wide plate holder for a reason unlike the other five: the existing wide plates are all line work losing hatching to a short ladder, and this is a landscape painting of a canopy, where the spread is the subject.
Townes playing Waitin’ Around to Die
to a weeping Uncle Seymour Washington in Heartworn Highways gives Sheet No. 11 the Townes tether it did not have — every other artist on it had one. Polly
sits under the Incesticide liner note, because that passage only works if you know what the song is. Both ids were checked against YouTube’s oEmbed endpoint before they were mounted, and the first id a search returned for Polly
did not resolve at all.
Two sentences there became false the moment the sheet gained a recording: that one thing could reach a third party, and that the Eliot recording was the only place another company could learn anything about you. Corrected in the same change, which is the rule.
The fix is not a new number. That sentence has now gone stale twice — once when the first recording was mounted and once today — so the count came out of it altogether. The page names the three recordings and then says the thing that actually matters and does not change: Google is one party however many recordings there are. Adding two did not add a company; it added two more places where a reader can choose to reach the one already there.
The request included lyrics. For Waitin’ Around to Die
the answer is the ordinary rule — we quote what we have read, and no licensed text was in front of the session; the performance is embedded instead.
For Polly
the same applied, and a second reason is stated on the sheet itself. Every word of that song is spoken by the man who committed the crime, which is what Cobain built it to do. Setting those words in a ruled box under a herbarium label would give a rapist’s speech the mounting this cabinet gives to Woolf and to Plath. The recording is linked whole instead. Whether the wording belongs on the page is Ryan’s call, and it is recorded here as a decision rather than left as a gap.
2026 · 11 September
Sheet No. 11, and four biographies that would not say what they were supposed to Link to this section
Ryan’s, opening the research: They help me process the immense ache of this world. They are my gloomy sunflowers.
The sheet was proposed, researched over one day against five primary sources, and mounted the same day — and the research overturned most of what the proposal had asserted on the strength of secondary sources.
Sheet No. 11, an essay, signed — the second on the plate after No. 2. Townes Van Zandt, Vincent van Gogh, Sylvia Plath and Kurt Cobain, read against the myth that made them.
The argument is Hannah Gadsby’s and Shoshana Kessock’s before it is ours, and both are credited on the sheet by name. What this sheet adds is the evidence: five primaries read at source in one day, and in three separate archives the same shape turned up — the work read as a symptom, and the record saying it was the thing that was going well.
It does not claim the four share a diagnosis, because they do not. A contemporaneous clinical file for one, a hedged retrospective paper for another, a psychiatrist arguing the opposite in print for the third, and a passing self-description for the fourth. What they share is having been treated as a diagnosis and read afterwards as one.
It carries a content note and crisis resources, and follows safe-messaging practice: no methods, no locations, and the deaths are not presented as the end of the argument.
The proposal for this sheet repeated the account every tertiary source carries: 1962 or 1963, three months of insulin shock, a diagnosis of manic depression, an Air Force rejection. Hardy’s documented biography disagrees on every count. Admitted to the Titus Harris Clinic at UTMB Galveston on 14 March 1964, one week after his twentieth birthday. Official diagnosis: Schizophrenic reaction, Schizo-affective type (Depression).
Insulin coma therapy and electroshock, nearly forty treatments between early April and early June. And it was the Army, not the Air Force.
The famous sentence is a recollection of a recollection. Hardy’s main text has Fran Petters recalling a letter calling Townes an acute schizophrenic
; his endnote records the same woman, in a 1998 magazine piece, recalling an acute manic-depressive who has made minimal adjustments to life.
One witness, two wordings, two illnesses, thirty years apart. Hardy printed both and footnoted the discrepancy. The internet took the more quotable one.
Nothing on this site had published the wrong version — the correction was made before the sheet was written rather than after. It is logged here because the near miss is the point: five tertiary sources agreeing with each other were one source.
Plath’s two electric currents
passage is quoted on this sheet from The Unabridged Journals, ed. Kukil, 20 June 1958, p. 395 — with which ever as two words, and a spaced en dash, because that is how Kukil sets it and Kukil’s edition exists to preserve Plath’s own spelling and spacing.
Our sister site has been closing it up for years, and citing it to a biography page rather than to the journal and its date. Settled across three copies the same day, including archive.org’s search-inside of the print edition, which returns exactly one result for the phrase. The reasoning is in the decision log, along with the methodological half: an edition that quietly normalises is more dangerous than one that obviously mangles, because the mangled copy announces itself.
2026 · 11 September
One typeface was too wide for the masthead, and the gate had been rendering one of ten states Link to this section
Ryan, on the two options put to him after the centring fix: option 1, and teach the gate the nine faces.
The first is four lines of CSS. The second is the one that mattered — the gate had been reporting PASS on twenty-five pages while rendering the default typeface and nothing else.
With Sporting picked in the reading settings the home page measured 361px of document at a 320px viewport, 388 at 375, 427 at 414 and 770 at 768 — and, found only by the new sweep, 756px on a Letter sheet and 739 on A4. Horizontal body scroll reached through a setting this site offers, failing the 320px reflow WCAG 1.4.10 names and the panel’s own rule that every setting must be additive. It is the only one of nine that does not fit: Sporting’s display cut is far wider than the others at the same size.
The obvious target was clear the 20px gutter
, and it is not the bar — because the default face does not clear it either. At 320px Fraunces leaves 12.1px, since the masthead has always been allowed to encroach there. So the real bar is no tighter than the house’s own tightest. Measured at 320: 8.4vw leaves 5.4px, tighter than the default; 8vw leaves 13.2px, which is not; 7.6vw leaves 20.9px and clears the whole gutter at the cost of a visibly smaller title. Checked from above too — 8.8vw still scrolls by 2px and 8.6vw fits by 2px, a margin too thin to survive another browser’s rounding.
clamp(1.9rem, 8vw, 5rem), for that face alone. A metric fact about the typeface, not a preference, with the same standing as sets_body in the font manifest — which exists for exactly this kind of thing: Victorianna ships Thin alone, four faces have no italic, and now one is too wide for the masthead at phone sizes. Nothing changes at 1280 and the other eight are untouched.
The gate shipped this morning and was already blind in the way this house had written down three days earlier: a page that checks the fraction of itself that happens to be visible reports zero failures and looks exactly like a clean one. It rendered the default typeface on every page while nine others sat unmeasured.
The face list is read from tools/font-files.json and never typed into the tool. That table is where make-fonts.mjs writes the faces and where check-metadata.mjs already reads picker_id to prove the markup’s options match it. A hand-kept copy would be a third list — and narrowing the nine is an anticipated operation, which would leave the gate sweeping a face nobody can pick while missing one they can.
The extra passes are cheap because they ask a cheaper question. The default face gets the full walk — every text node, every client rect — which is what names a culprit and what proves the page was measured at all. The other nine ask only whether the document is wider than its box, and escalate to the full walk only when it is. A gate ten times slower is a gate people stop running, which is its own failure mode. 1,500 measurements in 4m11s.
document.fonts.ready after every switch, because a face is fetched when a rule using it first meets rendered text — measure before that and you have measured the fallback. And the faces go to paper, which earned its keep on the first run by finding the two printed conditions the by-hand check had missed: a reader’s typeface is an html class and the print sheet does not reset it, so what they picked is what they print.
The failure advice branches, because two faults wear the same number and take opposite cures. An unbreakable string wants a break opportunity and must not be fixed by shrinking the type; a display line too wide in one face has no string to break, and there the size is the fix. Printing the first advice under a typeface finding is how somebody ends up putting overflow-wrap on a masthead — which happened here, earlier the same day.
Made to fail before being believed: withdrawing the Sporting size reports five failing passes on the home page, names the typeface in each, points at <h1.qe-wordmark> and the word Earth, and exits 1.
2026 · 11 September
The masthead had been 34px right of centre since the day it was drawn Link to this section
Ryan, with a screenshot: The wider fonts available in the font selector don’t center the title.
They do not — and neither does the default one. Nine typefaces made visible a fault that had been shipping with one.
text-align: center distributes leftover space along a line. When the line is wider than its box the leftover is negative, there is nothing to distribute, and the line is laid from the start edge with the whole overflow running off the end. Measured at 1280: main is honestly centred at 368…912, the masthead’s content box is 416…864 — 448px — and the wordmark’s ink is 515.9px. It began at 416, ended at 931.9, and sat 34px right of the page’s centre line.
The typeface is how it was seen, not what caused it. The offset is 34px with the default face, 28.4 with Victorianna, 68.8 with Coxinelle and 162.4 with Sporting Grotesque: the wider the face a reader picks, the further right the wordmark leans. Below about 1024px it looks right, because there the wordmark fits its box and the leftover is positive — and every width this house routinely measures at is in that range.
width: max-content with left: 50% and a negative translate: the box becomes as wide as the letters, and is centred on the container’s centre line whether it fits or not. The one centring idiom whose arithmetic does not change sign. Verified at 0.0px offset for all nine faces at 375, 768, 1280 and 1920, in plain view, in the cabinet, and on both papers.
translate rather than transform, deliberately. Plain view switches transform off component by component — the lean, the wobble, the drift — because each of those is a decoration. A centring correction is not one, and the independent property means a future transform: none written for the wonk cannot silently push the masthead back off centre.
A break at the dot was tried and refused. Letting Queering. / Earth wrap sounds like the natural answer; measured, it wraps the default face onto two lines at 1280 as well as at 320, because the wordmark exceeds its box at every desktop width. The cure for one face would have restyled the masthead for all nine. The max-content box forecloses wrapping altogether, which is also a guard: after a stylesheet rule broke Queering.Ear / th earlier the same day, a wordmark that cannot wrap by construction is worth having.
Centring cured two more faults on its own, because a symmetric overflow is half as deep each side: Coxinelle and Insolente were both scrolling the page at 320px and now fit. Sporting Grotesque still is not, at 320, 375 and 768 — recorded as open in the decision log, with three measured ways out and the note that check-width.mjs sweeps one typeface and cannot see any of them.
2026 · 11 September
A word one syllable from the right one, and it belonged to Bowlby Link to this section
Ryan, reading the sheet mounted the day before: The word ‘Monotropy’ on Two Cohabitating Modes is associated with Bowlby’s attachment theory, which we do not endorse. Let’s avoid using monotropy.
Monotropism was coined by Dinah Murray with her neighbour Jeanette Buirski and set out in Murray, Lesser and Lawson (2005); it describes attention, and it is Sheet No. 8’s subject. Monotropy is John Bowlby’s, from attachment theory: an infant’s innate drive to attach to one primary figure, usually the mother, whose bond is ranked above every other, with father, siblings and grandparents below her. That hierarchy is what this house does not endorse, and the maternal-deprivation arguments were built on it.
One letter of difference does real damage here. Writing monotropy for a theory of attention hands a reader a framework about mothers, ranked caregivers and innate deficiency — on the one page whose argument is that two modes are equal and neither is a grade. It imports the exact thing the sheet is written against.
The body was right and the label was wrong, which is this site’s characteristic failure turning up in its own house. The section’s prose said monotropism and polytropism correctly and cited the 2005 paper; the heading above it, the id under that heading, two comments inside the masthead drawing, the stylesheet’s own note and two of the cabinet’s records all said monotropy. Sheet No. 8 has it right thirteen times over and never got it wrong, because it was written with the paper open.
#monotropy is now #monotropism, and a published address was changed to do it. The sheet was a day old and the only things pointing at it were derived — the finding aid’s manifest and the sheet’s own contents list. An authored id is meant to be permanent and the reason to break one has to beat tidiness; carrying a repudiated term in a URL does. Recorded in the decision log as a standing rule: monotropism and polytropism, never monotropy or polytropy.
2026 · 11 September
The masthead read Queering.Ear / th, and the measurement that certified it was of the wrong thing Link to this section
Ryan, with a screenshot, on the fix mounted directly below: The title now wraps.
It did. The rule that stopped three pages scrolling sideways had been put on body, it cleared every page, it passed all nine gates — and it broke the wordmark in half on the front of the cabinet.
overflow-wrap: anywhere does two things: it permits a break inside a word, and it shrinks the element’s intrinsic min-content. The second is what recovers the sha256 column on paper — and it is also what lets a display word break where it had been sitting wider than its own box without anybody minding. Sitting wider than your own box is not the same fault as scrolling the document, and the masthead does the first on purpose: main is capped at 34rem, the wordmark is bigger than that, and it overflows symmetrically into gutters that exist to receive it.
Every measurement taken was of the wrong quantity. A twenty-five page sweep of scrollWidth at four widths and both papers, before and after, reported no change anywhere but the three faulting pages — because none of the damage moved a document width. The wordmark broke inside the measure. The reading panel’s Typeface label broke mid-word inside a fixed-width row, on all twenty-five pages. Every table on the site re-laid out its columns. All of it invisible to the one number being watched, and the new gate said PASS to every bit of it.
The check that finds it is a line-box diff: for every text node on every page, count Range.getClientRects().length with the rule and without, and report every element whose count moved. Four lines different from the sweep that saw nothing, and it found 324 changed elements on the first run. It is not a gate and should not be — a changed line count is usually the point of a typographic edit, so it cannot be pass or fail. It is a diff to read by hand whenever a rule touches wrapping, and that is written beside the rule now.
Narrowing it took three attempts, and the two rejected ones are the useful record. code, a clears this register and the decision log but leaves the ledger at 402px, because that page carries a bare <https://doi.org/…> in running prose as a plain text node with no element around it — which is the entire reason .qe-record p and li are named. Then a turned out to reach a.card, and the Register card’s kind chip split across two lines at 1280px. A structural selector was tried and does not help: a card lives inside an li, so :is(p, li, …) a catches it too. A selector list that looks careful while catching the same element is worse than an exception that says what it is protecting, so the card is excluded by name. .qe-editions td was tried and is not in the rule at all — a code element’s own anywhere already shrinks what the column sizing reads, so the paper fix needs nothing else.
And the technique was already in this stylesheet. .qe-references p a has carried overflow-wrap: anywhere since the references block shipped: this house had reached for exactly this the first time a bare URL would not fit, and scoped it to the one component somebody was looking at. That is the precedent rather than a casualty — the general rule is that rule generalised, and the scoped copy has been folded into it.
2026 · 11 September
Three pages had been scrolling sideways since the day each was mounted, and a ninth gate to say so Link to this section
Found by hand on this page, at a 375px viewport: a 414px document, pushed out by one code span holding performance.getEntriesByType('resource'). Eight gates passed the page. Looking for the rest of it found two more.
This register measured 414px at 375 and at 320. The ledger measured 812px at 320 and 943 at 768; the decision log 425. The page body must never scroll horizontally
is a rule this house states outright, and it had been broken on three pages for as long as each of them has been up.
The strings are the ones a ledger is made of — DOIs, archive.org identifiers, sha256 masters, file paths into the knowledge system, a deploy hook URL. None has a space or a hyphen in it, so a line box cannot end anywhere inside one. That is why this will happen again, and it is the argument for a gate rather than an edit: ATTRIBUTIONS.md grows one of these every time a source is credited and DECISIONS.md every time something is settled, and make-records.mjs pours both onto a page. The hazard is attached to the routine, so the guard is too.
Fixed in the stylesheet and not in the prose, on Ryan’s instruction: the register is a dated record, and rewording an entry to make a layout fit would falsify it.
The house pattern for wide content is a scroll box, and it is for blocks. It is already spent where it belongs — .qe-record pre scrolls because a wrapped command line is one somebody pastes wrong, and a comparison table scrolls because it is an object with columns. Neither answers an identifier set inside a sentence: an inline element has no scroll box, and giving a code span one would put a scrollbar in the middle of a line. So the inline form wraps and the block form scrolls, which is the same decision twice — show the whole string, by whatever means the medium has.
break-word looks equivalent and is not, and the difference is only visible on paper. In flowing prose the two are indistinguishable and both clear all three pages on screen. Inside a comparison table they part company, because only anywhere shrinks intrinsic min-content — under break-word the sha256 column stays as wide as the hash. On screen the table’s own scroller hides that. On paper it does not: the print sheet switches that scroller off on purpose, and the ledger was printing 802px of content onto a 717px A4 sheet with both master hashes running off the edge of the provenance table — in the file whose entire job is recording provenance. Measured, not read off the specification.
Found by the new gate on its first honest run, and by nothing and nobody before it. .qe-vined pulls itself out by exactly its own padding so the cards keep the full measure — correct on screen, where main carries a gutter to absorb it. In print main is max-width: none; padding: 0, so there is nothing left to absorb anything: 775px of home page on a 739px Letter sheet, 752 on a 717px A4, hanging off both edges. The print block had already overridden the padding and left the margin alone, which is the whole fault — one half of a pair reset.
The corner sprigs came in flush in the same edit, and that is the same fix rather than a second one: with the frame no longer bleeding, a sprig hung 0.9rem outside it hangs 13px off the paper. The stylesheet already had this answer for narrow screens, with its reason written down — under 30rem the corners come in flush because a sprig hung outside gets its flowers clipped by the viewport. A sheet edge is a viewport edge that cannot be scrolled.
No eye was going to catch it. The cards themselves stayed inside the sheet, so only the rule and the sprigs were being trimmed, and a frame cut flush with the paper looks deliberate.
tools/check-width.mjs: no page scrolls sideways, at 320, 375, 768 and 1280, and nothing runs past a Letter or A4 sheet. Native, not ported, and it clears the bar check-cache.mjs set — the failure had already reached production. This house runs eight gates rather than eleven because a check that cannot fail is a check nobody reads; this one had three live faults waiting for it.
No existing gate could see it, and check-overlap.mjs is the near miss worth naming. It is the only other tool here that knows where anything is, and it asks a different question: is this text on top of that text. Text past the right margin is on top of nothing — there is nothing out there. Its clip walk does not catch it either, because the document is not a clipping container: it grows. And its screen pass is 1280px, where none of the three faults exists.
Folding it into that gate was considered and refused. Widening the overlap sweep to 320 and 375 would surface a flood of narrow-width collisions nobody has ever triaged, which is a separate project; and a gate named for text landing on text should not also be the one that measures margins. 320 is not arbitrary either — WCAG 1.4.10 asks that content reflow to 320 CSS px without two-dimensional scrolling, which is 1280 at 400% zoom.
It has no --check flag, deliberately. Two gates here shipped as a report that printed its findings and exited 0, and the contrast gate stayed advice for as long as CLAUDE.md forgot the flag. A gate whose default is to pass has not shipped.
Made to fail before being believed, per the house rule, and both halves separately: withdrawing the wrap rule reports nine failing passes across the three pages, withdrawing the print margin reports two on the home page, and the restored stylesheet reports PASS across twenty-five pages and six passes each. Its first draft named the wrong words and was corrected — it reported the run ending furthest right, which for an unbreakable string is the innocent tail after it, so it pointed at , not out of a reading of the source.
rather than at the code span before it. It reports the widest overflowing run now. A gate that names the wrong words is a gate somebody edits the wrong words to satisfy.
2026 · 11 September
A fair-use position, written down before the sheet that needs it Link to this section
Ryan, on being told a proposed sheet could not quote two of its four subjects: This is a copyright maximalist approach that absolutely destroys fair use. My open source, copyleft soul weeps. It’s also a huge accessibility problem.
He was right on both counts, and the rule he was objecting to was never this house’s rule — it was asserted in a research note by a drafting assistant and reported as ours.
The quoting policy, in the cabinet beside the ledger: what this site takes from work still in copyright, how much, on what reasoning, and what to do if you hold the rights and disagree. It is a binding statement like the privacy page, so a change to it gets an entry here — including a change that narrows what we claim.
The first ten sheets never raised the question. Dickinson, Rossetti, Woolf, Shakespeare, Sappho: all public domain, so the house has had a quoting practice since the first sheet and never needed a quoting position. The next sheet is four artists who are all in copyright, and a policy written while building the page that tests it is worth more than one written in the abstract.
Two arguments carry it, and neither is legal. The first is that a refusal to quote does not produce silence, it produces paraphrase — and a paraphrase with the attribution still attached is the tightened source the ledger exists to prevent. The finding aid already refuses to crop a quotation for that reason; declining to quote at all is the same defect with the volume turned up. The second is access: go and listen to the recording
is an audio-only requirement, and it excludes Deaf and hard-of-hearing readers from the argument entirely. The quoted line is the accessible version.
What the page does not do is repeat the folklore. There is no permitted number of words or lines or bars anywhere in the statute or the case law, and saying so is half the point of publishing it.
The cabinet drawer said six pages in three places and now says seven. The heading’s id did not move: #the-six is an authored topical anchor and not a slug of its own wording, and outliving a reworded heading is the entire reason ids here are authored. Renaming it to match the new count would break exactly what the rule protects.
The footer row gains Quoting, which is a nav label and not the page’s name — allowed for a link, refused for a group heading, and the distinction is already in CLAUDE.md. The row now wraps to fourteen targets and was re-measured after, because nothing in the build measures a hit area.
2026 · 11 September
Three drawers, a breadcrumb on every sheet, and a panel that moved when a control was added Link to this section
Ryan’s: I like breadcrumbs and collection pages.
The two lists at the foot of the home page were already collections in everything but address, and the plate was a third. He named the menu, and chose Drawers over Collections and Cases with the collision against the Cabinet control stated in advance.
The plate, the founding papers and the cabinet itself are the three groups tools/pages.mjs has always held, given addresses. Each group’s collection page is now the first entry in its own group, so /llms.txt, the finding aid’s manifest and the reader’s index stay one list.
The glosses were the whole design problem. Nine pages are described in one sentence each in .qe-furniture on the home page, and this file’s loudest rule is that two copies of the same words drift. So a collection page carries a different sentence with a different job — what the page is for and where it sits against its neighbours, not what is in it — and says on its own face that the gloss lives on the front of the cabinet. The plate takes the same treatment from the other side: it shows the ten cards in their reduced form, the one the sibling navs already use, and carries no card notes at all.
What earns each page its place is the part that exists nowhere else. The plate defines what a sheet is, what a reading, an essay and a wall each mean — settled in the decision log in September and never stated anywhere a reader meets them — and what the accession number does not say. The founding papers carry the signed-and-unsigned rule. The cabinet page says what the build actually checks about its own six pages.
None of them is a specimen, so none carries a plate number, an accession stamp or a provenance line, and none is carded. And none carries a sibling nav: the drawers menu lists the other two drawers at the top of every page on the site with the current one marked, so a second list of the same three on the page itself is the two-competing-lists fault this file already refuses on the home page.
.qe-home was a lone link home on twelve pages, and seven more carried the group name beside it as plain text — Queering Earth · The founding papers
, with the second half leading nowhere. The collection pages turned that dead text into an address, so the two shapes became one .qe-crumbs nav on nineteen pages.
It stops at the drawer and never names the page it is on, because the h1 is the next thing in the masthead and a third crumb would be the title printed twice, a line apart. The JSON-LD block carries all three items, since a machine’s copy has no heading under it. The separator is drawn in CSS and is not a character in the markup: it must not join the accessible name, reach the Markdown, or be something a reader can select into a quotation.
It sits inside the landmark, which the nav rule otherwise forbids, for the reason the contents list does: that rule stops one sheet’s navigation being indexed as another sheet’s content, and a trail naming this page’s own position cannot do that. It lives in .qe-masthead, which the search index already skips, so it reaches the .md — where an agent wants to know where a page sits — and not the finding aid, where it would be nineteen identical results. Targets measured after: 45px tall, 107px and 67px wide, 18px apart, at 375px and at 1280px.
The menu is a native disclosure and writes no words, like the reading settings beside it. Three links and three lines of hint, all authored in the markup; queering.js gained nothing but a loop, and lost a copy — the Escape and click-away handlers the reading panel had to itself now run over both, which is also what makes opening one close the other.
Every other drawer’s name appears in five places and is the same word in all five: the group heading in tools/pages.mjs, the section heading on the home page, /llms.txt, the finding aid’s manifest, and the collection page’s own heading. This one had three — The readings, What grows here, and The plate. The first two had disagreed since the finding aid shipped and nobody had noticed, because nothing put them side by side; giving the set a page put all three in one sentence. A set acquires its second name long before anybody chooses one.
Reconciled to The plate, and the evidence is that this site had already chosen it in prose. Four entries on this page say the plate of sheets; the aims say Kept on the plate, one sheet at a time
; check-card-order.mjs prints the plate is the authority for a sheet’s number and kind
; the markup carries .qe-plate-grid and eighteen sibling navs headed Elsewhere on the plate. Every one of those uses the name as a noun in a sentence. What grows here never does — it appears four times on this page, always italicised, always as the title of a section, which is a different job. And The readings was the one that was plainly wrong, for a set holding eight readings, an essay and a wall: the kind chip on a card is Reading, Essay or Wall, so naming the set after one of the three collides with the vocabulary inside it.
/#what-grows-here did not move, and this is the first time that rule has been cashed in. Ids here are authored topical anchors and never slugs of their own headings, precisely so a reworded heading does not take every shared link with it. The heading changed and all seven anchors pointing at it still resolve — three on this page, one on the aims, one on the drawer, one in the finding aid’s manifest, and the section’s own mark. Tidying the id to match would break exactly what the rule protects.
The older entries on this page were not rewritten. They are dated records of what the page said when they were written, and editing them to use a name that did not exist yet would falsify the register in the file whose job is to record that kind of failure. What is lost is What grows here as a visible heading, and it was a good one — botanical, a question rather than a label, older than almost everything around it. That is the price of one name, and the alternative was three, one of them false.
Ryan’s, after the drawers shipped. They sit directly after Queering Earth on all twenty-three rows, which is the level they are: the home page, then the drawers, then the pages they collect.
The labels are not shortened, and that is this file’s own licence running out. A row of links is allowed a short label — Colophon, Register, Decisions — because those name pages. The founding papers and The cabinet itself name sets, in the same words in tools/pages.mjs, on the home page, in /llms.txt, in the drawers menu and on each collection page’s own heading. A short label for one of those is the second name for a set this register keeps recording as drift.
The row wraps now, and a single line was never the invariant. The stylesheet’s note recorded eight links at 575px on one line and had gone stale twice over — the row has been ten links and two lines since the founding papers shipped. What actually has to hold is that no two padded targets on adjacent wrapped lines can touch, which is what line-height: 2.9 is for. Measured at thirteen: two lines at 1280 and 768, four at 375, six at 320; no overlaps at any of them, every target past 44px in both directions, and scrollWidth equal to the viewport at all four. The note says so now, and says to remeasure when a link is added.
Eight sheets, so far, mounted and numbered on the plate below
was true when it was written and stopped being true on No. 9, directly above a plate showing ten cards numbered 1 to 10. Replaced rather than corrected, because a count kept by hand is a count that goes stale, and this register already holds two other findings of exactly that shape on Star Stuff’s own pages. The sentence now says the sheets are numbered in the order they were accessioned and leaves the counting to the plate.
The reading panel had been right: 0 on its own summary since it shipped, which quietly made its position a function of how many controls sit to its right. Measured at 1280px it cleared the measure by 31px. Adding one control moved the control 81px left, took the panel with it, and landed 50px of it on the lede on eight pages. check-overlap.mjs reported it; nothing else would have, and no amount of care about the new control would have predicted it. Both panels now hang off the tray, whose right edge is the gutter at every width, and a seventh control cannot move either.
The tray’s own note said a new control is a measurement, and it was right about the row and silent about the overlay. Measured at 320, 375, 768 and 1280px after: every hit area 44×44 or better, no two overlapping, scrollWidth equal to the viewport at all four, and both panels inside the gutters at 320. The cost is paid explicitly — the 44px box .qe-controls > *::after grows only works because each child is positioned, so for these two it moves onto the summary and the tray’s rule is switched off for them rather than left to misfire against the tray.
Two overlay panels in one tray can both be open with JavaScript off, because a disclosure toggles natively and the close-the-other convenience was script. They now share a name, which is HTML’s exclusive accordion: opening one closes the other with no script at all. Verified by setting open directly, with no click and therefore no listener involved.
That fix made the two rendering gates disagree, and both were taught. reveal.mjs dissolves the group before opening, or one panel would be measured shut — the eight-percent-of-itself failure its own header is about, arriving through a fix for something else — and puts it back afterwards. check-overlap.mjs then knows that two members of one exclusive accordion can never be on screen together and refuses to call them a collision; the exemption is declared by the markup rather than listed in the tool, which is the bar the invisible-text list already set. Proved both ways: the drawers panel’s hints in a 2.15:1 colour report three failures under the contrast gate and none once restored, so the panel is genuinely being measured.
2026 · 11 September
A masthead for the two modes, and the width a masthead is actually reviewed at Link to this section
Ryan’s, after the blown-up tray mark was refused twice: Instead of a blown-up icon, let’s do something else for the header illustration.
Four options were put up and he took the one that draws the argument instead of the animals.
.qe-tropisms is two plants on one ground line: a single unbranched stem carrying one five-petalled flower, and a low stem branching three times into a broad flat head of twenty-nine florets. Monotropism against polytropism — and Monotropa uniflora means one turn, one flower, which is Sheet No. 8’s whole subject, so this site already reads monotropism through a plant. It also cannot restage the predation problem the tray mark had, because plants do not eat each other.
The invariant is equal flower area and it is computed, not eyeballed. The drawing’s claim is different distribution, equal mass; two areas that were merely near would rank the two modes by accident, which is a gold join on an uncorrected sheet in the most prominent place on the sheet. The rosette is a five-lobed polar rose whose area is exact — πR²(a² + b²/2) = 826.24 — and the floret radius is solved back out of it: 29 × π × 3.011² = 826.24, residual 1.1e−13.
Only one CSS rule is new, and that is deliberate: every flower and leaf class already exists under .qe-botanical, so nothing here can render unstyled. The exception is .ground-line, which is scoped per drawing — the lilac bush and the crooked tree each own one — so this drawing owns a third. .floret was left alone: it belongs to the lilac bush outright.
Four passes were judged against a 544px review sheet, on the reasoning that 34rem is the measure and 34rem is 544px. A block inside main does not get 544px. It gets 448. The drawing was therefore tuned 21% larger than it renders, and on the real page the rosette came out 26px and read as an asterisk while the head read as a cup. Rescaled for 448 it is 41px and reads as a flower.
The number was already written down. The decision log records it against .qe-wide: measured on screen, the provocation is 448px — the content box every other block gets
. It was measured once, for a different question, and not applied here. A measurement in the log is only worth what the next session remembers to reach for, which is the same shape as the afternoon’s other findings and arrived one day later.
A hanging bell reads as a bud at the 21px it shipped at, and lobing its rim to say mouth is invisible at that size; the flower turned to face the reader instead, because what reads at sixty pixels a plant is silhouette and count. Florets on an arc are a ring, and a ring reads as a wreath — this repository’s own words about the lilac panicle, reproduced exactly. They sit on a golden-angle spiral over the head’s area now, the same walk the drift rail’s lean uses. And thirteen florets in a head this broad filled a tenth of it and read as beads on a wire: with the area fixed, a wider head needs more and smaller florets rather than the same ones spread further.
Three dead classes, caught by hand because the gate for them is not ported. The stems carried .stem-main, .stem-branch and .stem-twig beside .stem, with no rule anywhere — the stroke hierarchy was inline all along, as Sheet No. 1 does it. They did not render black only because every one of those elements also carried .stem. check-classes is still the next port from Star Stuff and this is the second drawing to want it; until it lands the check is a dozen lines, and it is worth running on any new drawing.
2026 · 10 September
Two Bewick cuts from 1792, and a masthead refused twice Link to this section
Ryan asked for two things: the fox-and-hedgehog mark blown up as header art for the new sheet, and whether there is public-domain art suitable to it. The answer to the second turned out to be much better than the first, and the first was drawn twice and refused.
A General History of Quadrupeds (Newcastle upon Tyne, 1792) has the hedgehog on page 448 and the Cur Fox on page 280 — two wood engravings, one book, which is the same shape as the sheet’s two poems from two books. Mounted as .qe-plate-wide figures from the Smithsonian Libraries scan, re-encoded by tools/make-plates.py. Bewick’s 1792 paper is within a few values of --qe-paper, so the plates read as though they were always on this sheet.
The text was the find. Bewick’s hedgehog article opens DESTITUTE of every other means of defence, is provided by Nature with a spinous armour
, and four sentences later: The more it is harrassed, the closer it rolls itself.
That is exposure anxiety and masking, written down in 1792 by somebody watching an animal in a hedge, and it is the sheet’s own argument about King’s His coat does all the work for him
arriving from a third direction. And the Cur Fox article is the Halliwell rhyme in prose — It lurks about the out-houses of the farmer, and carries off all the poultry within its reach
— ninety-four years before that printing, with neither text quoting the other.
Three things the captions have to say. The article’s heading is the subject of its first sentence, so both quotations begin mid-grammar and the captions say where the subject is rather than supplying one in brackets. The long s is transcribed as s — a letterform, not a letter — while harrassed
is the printing’s spelling and stays, on the same footing as King’s runts
. And Bewick’s three varieties of Foxes in this island
are not three species: all are Vulpes vulpes, and mounting The Cur Fox without saying so would lend a retired taxonomy our authority rather than his.
The Greyhound Fox cut on page 279 was looked at and passed over, because it shows a fox with a kill. A predation scene is the one thing the drawings on this page must not say — the same reason the tray mark’s two animals face the same way.
favicon.svg’s rule running the other wayDrawn twice, rendered at 368, 544 and 900px in both grounds, refused twice. Pass one gave the mark colour fills and features — rust pelt, marigold dome, an eye, an inner ear, a white bib, blocked feet — and read as children’s-book clip-art, fighting the house register of ink line on vellum and sitting four inches above two wood engravings whose hatching makes a flat rust mass look like a sticker. Pass two stripped it to one ink colour and no features; the cabinet inversion came out right, and at 900px the construction showed: the neck a facet, the two ears horns with a notch, the nose a ball, the legs and feet six rectangles, and thirty spines that are a coat at 40px turning into a cog.
The rule is the favicon rule inverted. That one says a mark is judged at 16px because two earlier marks looked good large and died small. The converse is less obvious and cost two passes here: a mark drawn to survive 20px carries 20px tolerances, and enlarging it enlarges them. A masthead is a different drawing, not the same drawing bigger.
And the position has a weight. Every other masthead here is thin moss stems, small lichen leaves, a small moth — sparse line. Two filled quadrupeds are the wrong weight for that slot however well drawn, which is why another iteration on the same approach was not the answer. The sheet carries no drawn masthead; the Bewick plates carry the animals, which is what a mounted specimen is for. Whether an outline masthead — single closed contours, thin ink stroke, animals as line rather than as mass — would sit in the register is left open in the decision log. The tray mark is unchanged.
2026 · 10 September
Every poem on the site was arriving in the Markdown mirror as prose Link to this section
Reported against Sheet No. 3, where Rossetti’s first stanza had been reading Promise me no promises, So will I not promise you: Keep we both our liberties,
in promises-like-pie-crust.md since the Markdown mirror shipped. Ten pages were affected, and llms-full.txt carried all of them. Two Cohabitating Modes was accessioned the same day and landed inside the fault — its hedgehog poem and its fox rhyme, fifty-three lines, were flat in two-cohabitating-modes.md from the hour it was mounted. The fix reached it on the merge, which is the argument for fixing the converter rather than the ten files.
tools/make-markdown.mjs listed span in its inline table as a wrapper, which is right for nearly every span here and wrong for the one that is not. <span class="l"> does not wrap words inside a sentence — it is a line, and queering.css has said since the Rossetti sheet that a poem’s line breaks are the object being mounted and that reflowed into prose it is a different poem. Rossetti, Dickinson twice, Eliot, Douglas, Carroll, Shakespeare, Völuspá, Tam Lin, Yeats, Edith King’s hedgehog and the Halliwell fox rhyme on the sheet mounted this same day, the Stimpunks Manifesto and Ryan’s own reply verse were all being handed to an agent as paragraphs.
The sheets that set their lines on one source line were worse than reflowed. .qe-lines puts every span on a single line of markup, so there was no inter-line whitespace to become a space and the converter emitted againThe five unmistakable marks
. Not a different poem: not words.
The fix is keyed on .l and not on a list of containers, and the stylesheet had already paid for that lesson. The obvious shape is a break for .l inside .qe-poem or .qe-verse — which is exactly what queering.css tried and abandoned, scoping the display rule first to .qe-specimen, then copying it to .qe-correction, and then watching Sheet No. 8 put verse in a .qe-slip that inherited neither. A container list here would have rebuilt that wall in the Markdown, and would have missed Sheet No. 7 on the first pass, whose Douglas sits in a plain .qe-specimen. A .l is a line of verse wherever it appears, in both files, for one reason.
It is not a break after every span, which would put line breaks through the middle of ordinary prose — the same error facing the other way. The ten files that changed are exactly the ten with a .l in them.
Markdown spells a hard break two ways. The tidier at the foot of the converter strips trailing whitespace from every line, so the two-space spelling would have been emitted and then silently removed — a fix that reports success and changes nothing, which is worse than no fix at all. A backslash also survives the > prefixes that .qe-poem needs and .qe-verse does not.
It is written on the open of the next line rather than the close of this one, so a stanza never ends on a dangling backslash. CommonMark reads a backslash at the end of a paragraph as a literal backslash, so the close-tag spelling would have hung a stray mark under every stanza on the site.
.l-in re-indents in the source, two spaces, reproducing the 1896 compositor’s alternating indent on Rossetti and on Tam Lin. A strict renderer may collapse it; the text an agent reads carries it.
search-index.json was already right and did not change. make-search-index.mjs keeps a blockquote and a div.qe-verse as whole records, so the finding aid had never flattened a poem. Only the Markdown had — which is the drift the generator exists to prevent, arriving through the one door nobody had checked.
2026 · 10 September
A third founding paper, on the fox and the hedgehog, and an unlabelled door in the top bar Link to this section
Ryan’s, and he supplied most of the sourcing: Edith King’s hedgehog poem, Liv’s Life as a hedgehog, the Vanhuysse review, the two Sagans, and the Stimpunks research page. He asked for a complement to Star Stuff’s Who Is Holding the Candle, for the hedgehog poem in full, for a suitable fox poem to be found, and for a fox-and-hedgehog mark in the top bar as whimsy and as an easter egg. Four things surfaced in the sourcing before a word of the sheet was written, and none of them were ours.
The sheet is filed under The founding papers with the mission and the manifesto, because it is about why this cabinet exists alongside a sibling rather than about how either is made. It runs the descent of the proverb — Archilochus to Erasmus to Berlin to Gould — and then puts two poems under it.
The find is that the two poems end identically, and neither of them was chosen for that. King’s hedgehog likes a quiet wood Where he can feed his family / On proper hedgehog food
. The anonymous fox comes home to young ones both nine and ten
, who tell him he may go again if he brings such nice meat. One goes nowhere and eats the right thing; one goes everywhere and takes what there is; both are somebody’s father coming back with dinner. Read from there, Berlin’s typology is a ranking of twelve great men with Tolstoy above them for managing both modes — and the poems rank nobody, because each animal is described in the terms of its own life instead of measured against the other.
The neurodivergent reading is the reason the sheet is ours and not a book review. Hedgehogs already carry punk, Disabled and spiky-profile associations in our own house, down to a mascot; the curl is exposure anxiety, masking and minority stress drawn from outside. And King’s His coat does all the work for him
turns out to be the whole problem stated in one line: the defence that costs nothing to deploy is also the reason nobody believes you need anything, which is exactly what Liv describes at the support counter.
It is signed and the others are not. /mission and /manifesto carry no author in their JSON-LD because they are the collaboration speaking; this one carries Ryan, because the claim about what hedgehogs mean is his and the sheet says so. about.author stays absent, so the gate’s conflation check has nothing to catch.
The brief asked for a suitable Fox poem
, and the obvious move was a companion piece from King’s own anthology. There is none. Fifty New Poems for Children (Oxford: Basil Blackwell, 1922) was read end to end — its contents list and its author index — and the word fox does not occur in it. King has eleven poems in that book and they are a rabbit, a bat, a mole, a duck, a swallow, a beetle and the rest; no fox.
What was chosen instead is better than a companion piece would have been. Rhyme CXXXIII in James Orchard Halliwell’s The Nursery Rhymes of England is anonymous, traditional, sung as The Fox or Daddy Fox, and it is nine stanzas of a fox going through a town and coming back with the goose. Its refrain is the town and its last stanza is the den, which is what made the pairing with King work at all: the fox’s whole poem is method — he listens at the stile, estimates the mile, flatters the drake while pricing it, is too cunning
for the trap — and it all resolves into feeding the young ones.
Cited to the fifth edition (London and New York: Frederick Warne and Co., 1886), pages 84–86, from the Project Gutenberg transcription of that edition, checked line by line against two independent scans of it. The refrain indent is the 1886 compositor’s and is reproduced with .l-in; the spaces he set before every exclamation mark are closed up, which is the decision Sheet No. 3 already took for Rossetti’s colons. The rhyme is also in Halliwell’s 1843 edition, so it was in the collection forty years before this printing.
Thirteen of its thirty-seven lines wrap at the measure, and that is left alone on the source’s authority. The .l content box is 406px and the longest line wants 498; fitting it would mean setting the stanza at 17.7px, under the house floor and visibly smaller than King’s poem on the same page — a hierarchy claim nothing supports. Halliwell’s own 1886 measure broke six of these lines, including She opened the casement, and popped out / her head;
, which is our worst case as well. Read off the scan rather than inferred. The wrapping reproduces the source’s condition, and .qe-poem .l’s hanging indent is the device that keeps a wrap from reading as a line the poet wrote. The figcaption says so, and the numbers are in the decision log.
runts and digs, and we went to the letterforms to be sure
King’s second stanza has a snout that smells But also runts and digs
. Runts is not a verb; rooting is what a pig’s snout does, and roots is the word the stanza is plainly built on. Every web transcription of the poem carries runts
too — which is exactly the condition under which a whole tradition of copies can be a single witness, so the transcriptions prove nothing.
So the page scan was magnified rather than the scan’s text layer trusted, an OCR text layer being the one witness guaranteed to make this particular error. At 300 dpi the u
is open-topped and unmistakable against the closed o
of also
two words earlier. The 1922 first edition prints runts, so the sheet prints runts, with the argument for roots made outside the quotation marks where a reader can weigh it. Correcting it silently would leave King saying a word she did not print, and correcting it loudly inside the quotation would be worse.
The same pass found that the circulating transcriptions additionally put full stops at four line-ends where the 1922 setting has commas. The commas are hers, and the sheet has them.
The descent of the proverb is quoted from Pieter Vanhuysse’s essay review in Education Review. The journal’s own record credits that review to Stephen Jay Gould — the author of one of the two books it reviews, and four years dead when it ran. Its citation_author meta tag says Gould Stephen Jay
, so every citation manager pointed at that page produces a citation crediting a review to its subject. The PDF names Pieter Vanhuysse of the University of Haifa on its first page, in its running head and at his university address on its last; its abstract says I argue that Barzun and Gould contribute valuable insights
. The record also files it as volume 13 where the PDF’s running head says volume 9, number 1. We cite the PDF. Nothing of ours was wrong, which is the only reason this is a note rather than a correction — but it is the same collapse check-metadata.mjs refuses in our own JSON-LD, arriving from a peer-reviewed journal.
Second, inside the quotation: Vanhuysse calls Archilochus fifth-century
and he is seventh. His own fragments date him — the solar eclipse of 6 April 648 BC, and the wealth of Gyges. The quotation keeps fifth-century
, because the words inside the marks are not ours to tidy and a silently corrected source is one a reader believes we found that way. The correction sits outside them. It is also a useful demonstration of the sheet’s own subject: which century is checkable and which thinkers are hedgehogs is not.
.qe-modes-mark is two filled silhouettes in the controls tray, 2.6rem wide and 20.1px tall, which puts it within a pixel and a half of the loupe beside it. The first draft had them nose to nose, and that draft was wrong for a reason that has nothing to do with drawing: a fox facing a hedgehog is a predator facing prey, which is the one thing a mark for a page about two modes cohabiting must not say. Both face the same way now, which makes them a plate of two specimens — this site’s own idiom, and no narrative at all.
Three further findings, each from rendering it at 16 to 180px and looking, which is what favicon.svg paid for twice already. Eight long spines are a stegosaurus, and on a head instead of a body they are a rising sun; a coat is a mass of short spines, so there are sixteen, each placed on the dome’s own normal and raked back — computed rather than hand-placed, the correction the lilac panicle on the plate already took. A tail with a concave underside is a scythe, and two drafts got that identically wrong; the brush is a band of near-constant width, nearly as thick as the body, drawn before the body so the body overlaps its root. And it is filled, not stroked — the loupe is stroked because an instrument is thin parts, and two stroked animals went muddy below about 24px exactly as the loupe’s own note predicts.
It does not animate, and the loupe is the reason. The rail sprig and the moth draw themselves on because they are botanical art; this is in the instrument tray, where nothing moves, and a mark that grew beside a still loupe would read as a fault.
What is hidden is the door and never the room. The mark is the only unlabelled control in the tray, which is the whimsy Ryan asked for — but the page behind it is in the footer row of all twenty pages, in .qe-furniture on the home page with a gloss, in sitemap.xml, in tools/pages.mjs, in /llms.txt and in the finding aid; and the link’s accessible name is real text in the DOM at all times, so a screen reader announces Two cohabitating modes
exactly as it announces Search
. That is what separates this from the hover-gated section mark CLAUDE.md refuses: nothing is withheld from anybody.
Checking two-cohabitating-modes.md turned up a fault older than this sheet. make-markdown.mjs treats span as an inline wrapper — correct nearly everywhere, and wrong for .qe-poem .l and .qe-verse .l, the one element here whose whole job is to be a line. So every stanza on the site arrives in its .md as one reflowed paragraph: Promise me no promises, So will I not promise you: Keep we both our liberties…
It contradicts the rule the component was built on — a poem is a specimen whose line breaks are the object; reflowed into prose it is a different poem — and the reason the generator exists, which is that the Markdown an agent fetches must not disagree with the page. Affected: Rossetti on Sheet No. 3, Dickinson and Ryan’s reply verse on Sheet No. 6, Sappho on Sheet No. 7, and now 53 lines here, which is what made it visible. search-index.json is already right, because make-search-index.mjs keeps a blockquote and a div.qe-verse as whole records — only the Markdown is wrong.
Not fixed here, on purpose. The fix is two trailing spaces after each .l inside a verse container, and it edits a shared generator and rewrites eight .md files plus llms-full.txt. That is its own accession with its own diff to read, not a rider on a new sheet. Recorded as open in the decision log, with the trap noted: the break belongs to .l inside a verse container and never to span generally, or every span on the site puts a line break through the middle of prose.
Measured before the mark was added rather than after: at 375px the four existing controls filled the tray exactly — search link at x 20, the Reading disclosure ending at x 355, inside a 20px gutter, with nothing to spare. The row is justify-content: flex-end, so a fifth item overflows off the LEFT edge and takes the document’s scrollWidth with it — the horizontal body scroll the layout rule forbids outright.
flex-wrap: wrap is the whole fix. On a narrow screen the tray becomes two right-aligned rows; at any width that fits, it is a no-op. The alternative was to drop the mark below some breakpoint, which would have withheld a feature from phones — and the mark is the only route to the page that a reader discovers by looking, so hiding it on the devices most people read on is where it would matter most.
2026 · 10 September
One sentence of Max Alexander pasted up as a broadside, and the rule that a component mixes type roles and never families Link to this section
Ryan asked for bold, playful typography under The type plays, and the words do not move, and asked the two questions that turned out to be the accession: should it mix typefaces, and what would that do to the typeface picker and to plain view.
.qe-broadside sets This is a protest of the notion that there is any correct way to live
— Max Alexander, A Playful Manifesto — broken across six lines, each with its own size, weight, indent, lean and colour. A broadside is a single sheet carrying one statement in whatever type was in the case, which is a zine wall three centuries early, so it is the furniture the paste-up already has: the card, the rule, two tape strips at the top corners. No new visual language, one new component.
The setting is ours and the words are Alexander’s, and one sentence lifted out of seven is exactly where a tightening happens unnoticed. So it is a blockquote with its cite, captioned to the source and to the sheet that quotes the opening whole, and every fragment sits on one source line with real spaces between the spans. The spaces do no visual work — the fragments are blocks — and they are the only reason the sentence copies out, indexes and reaches index.md as a sentence. A newline between two of them would be kept by make-search-index.mjs and file a prose sentence as verse.
It does not animate, and the heading above it is the reason. A section called the words do not move cannot introduce a specimen whose words move.
Colour is ink, moss and rust and nothing else, those being the three text tokens that clear 7:1 in both grounds. The decorative pair is on the tape, which sits above the card’s top edge with nothing composited against it — the slip’s own rule. Corners take --qe-corner-b, because the specimen above takes -a and the plate cards below take -c.
The box hugs the text, and that is a gate decision rather than a cosmetic one. A full-width block rotated two degrees swings its far end seventeen pixels at this measure while the words sit still at the left: the ink leans by nothing and the rectangle leans by everything, and the rectangle is what check-overlap.mjs measures. Fitted with width: fit-content, the box and the ink are the same object and a collision is reportable.
And the tilt is --tilt, not --rot. A custom property inherits, so a --rot on the figure would have landed on every fragment that did not set its own and leaned the whole sentence by the card’s angle, silently. Two rotations are two facts and they get two names.
The answer to should we mix the fonts is yes, and the mix is between --qe-display and --qe-body. The typeface picker works by reassigning those two properties on html, so a font-family: 'Victorianna' written into a component is a face none of the nine options can reach — nine controls, and one block on the home page ignoring every one of them. Worse under the five display-only faces, where the reader has been handed Newsreader as the reading face deliberately and a named third family would put a fourth face on the sheet.
What the reader actually sees, in all three cases: the default gives Fraunces shouting against Newsreader carrying; one of the five display-only faces gives their pick against Newsreader; one of the four that set both gives one face at six sizes. The last of those is the point rather than a shortfall — a reader who asked for one typeface gets one typeface, and the setting degrades into their choice instead of overriding it. What survives in every case is the play that was never a family: size, weight, colour, indent, lean, and the SOFT and WONK axes where the picked face has them.
One word is exempt, and the licence is the drift rail’s rather than a new one. .w-form sets correct in the reader’s own system face for the reason .qe-drift-word--flat does on Sheet No. 4: the notion being protested is an institutional one, and the institution’s typeface is whatever the form was printed in. Semantic, not decorative — it would look fun is not this licence, and a second decorative hardcoded family would retire the first one’s reasoning.
The second half of the question. Gone in plain view: the tilt, the tape, the shadow, the six per-line leans, the variation axes — and, by itself, the system-face joke, because in plain view every face is that face. The drift rail already records that as the correct outcome rather than a loss.
Kept: the line breaks, the six sizes, the indents and the three colours. Those are the setting rather than the decoration, and plain view removes decoration and has never removed information. .qe-cutup drew the same line when it kept its --sz sizes and its boxes and dropped only the rotations and the wonk.
2026 · 10 September
Sheet No. 10, on a disability invented because nobody had it, and the readers who do Link to this section
Ryan’s, from his own reading of Sami Schalk on Octavia E. Butler. Schalk calls hyperempathy a nonrealist disability that is both mental and physical in origin and manifestation
; Ryan’s note said only Except, it’s quite real for many Autistic people, including myself,
and asked for a sheet. Four faults surfaced in the sourcing before a word of it was written, and three of them were ours.
Bodyminds Reimagined chapter 3 is the best thing written about hyperempathy. It clears four totalizing
readings out of the way, refuses the gift narrative that Lauren Olamina herself refuses in the text, and names the pull behind that narrative exactly — a liberal compensatory desire to recast disability as ‘specialness’
. The sheet endorses nearly all of it, and says so in its own words rather than leaving the endorsement implied.
The argument is with one clause and what rests on it. Schalk’s protective mechanism is that hyperempathy is not a disability we recognize in our current reality
, so a reader cannot overlay a stereotype they already hold. That protection is bought with unfamiliarity, which means it is only available to a reader who does not have the thing. For an Autistic reader it inverts: we do overlay, we cannot help it, and what we overlay is a life rather than a preconception. A claim whose truth depends on who is holding it is this site’s own method turned on a book we admire.
Schalk names autism in the same paragraph, by way of Stuart Murray, as the recognised disability whose cultural familiarity gets it flattened. The two claims sit one sentence apart: autism is the familiar thing that gets stereotyped, hyperempathy the unfamiliar thing that cannot be.
And the fairest account of how it happened is the most damning thing on the sheet, and it is not about Schalk. Bodyminds Reimagined is 2018. The study that put Autistic hyper-empathy on the record says, in 2024, that there has been limited theoretical and empirical work looking at this as a specific phenomenon worthy of study in its own right.
Autistic people had been saying it for decades; the journals had not written it down. A scrupulous scholar reading the literature as it stood could conclude in good faith that there was no real-world equivalent, because the equivalent was community knowledge and community knowledge was not yet citable. That gap is the epistemic injustice the chapter is otherwise so good on, arriving from behind and taking the premise.
The masthead is a single cut sprig emitted twice: the left copy in solid ink, the right copy in outline only, identical in geometry and displaced. The solid copy is the event and the hollow copy is the sensation, so reading order is causation — the thing happens on the left and is felt again on the right, in a body it did not happen to. Butler’s own gloss is on the sheet: I get a lot of grief that doesn’t belong to me, and that isn’t real. But it hurts.
Translated and never mirrored, which is the one thing that could not slip. A mirrored pair either side of a meridian is the Rorschach read the moth already paid for three times, and it would have said reflection — wrong twice over, because mirror-touch is not a reflection but a recurrence in another body. The displacement is also deliberately not axis-aligned, so the second copy cannot read as a shadow. Nothing here casts anything.
The hollow copy is .rib: fill: none on a --qe-moss stroke, which is exactly the ghost this drawing needed and is already reached by the print sheet and by the forced-colours block. No new art class, so no new gap in either. Both copies take --qe-moss and neither needs a cabinet rule.
Two things the generator had to be told. A left-pointing leaf must not wear .sprout-leaf, whose transform-origin is the fill-box left edge — a leaf pointing left would unfurl from its tip instead of from where it joins the stem, so the three left leaves are plain .sprout. And both offsets are baked into every coordinate, because a CSS transform animation overrides an SVG transform attribute on the same element and would collapse all twelve sprouts onto the origin. Leaves sit on the stem’s own normal at five parameters, each rotated toward the tip so none is square to the stem; square leaves read as a fishbone. Bounding box asserted rather than eyeballed: x 84.0 to 475.8, y 32.0 to 227.0 inside 560 × 260.
The two stems ink on together and that is a limitation, not a choice. .stem has no per-element delay hook and inventing one would mean a new class. The echo is carried by the leaves instead: the solid sprig’s five unfurl, then the hollow sprig’s five.
The brief cited Hyperempathy syndrome is a delusional disorder, after all… it hurts like hell
as Parable of the Sower, p. 330. It is Parable of the Talents, p. 9.
A tooling fault and nobody’s transcription. The Kindle file for Sower carries a publisher’s preview of Talents after the novel ends and marks the join nowhere. Highlights run past it; the last line of Sower is decided to call this place Acorn
, and everything after that is the second book — Jarret, Asha Vere, the funeral verses. A Readwise export is titled for the file, so highlights from two books arrive under one heading.
The visible tell is a page counter that stops. The reader shows Page 330 of 330
at 85% of the file, because the print-page map covers Sower only and then repeats its own last page. So p. 330
was not a page number at all, and re-titling alone would have left a citation wrong in a harder way to catch — right book, plausible number, no relation to the text. The real page came off the standalone Talents, whose own counter reads 9 of 394 under a running head that says so.
The general shape is the part worth keeping: an appended preview is a second work inside one file, and every tool in the chain takes the file as the unit — page map, export title, highlight location. A citation is only as good as the assumption that one file is one book, and that assumption is quietly false at the end of most ebooks sold today.
Everything convenient said 2023: the DOI slug aut.2023.0001, and the repository deposit record for the accepted manuscript. The issue is 2024. Kimber, Verrier and Connolly, Autism in Adulthood 6, no. 3 (2024), pp. 321–330, Mary Ann Liebert, Inc. Corroborated in Crossref and in the NLM’s PubMed record before it was written down, and then read off the article.
Second instance of a pattern, so it is now a rule rather than a note. The first was Experiences of autistic joy, where 2025 was the online-first date and the issue was 2026. Online-first year is not issue year, and a DOI slug is not a date. A paper newly cited here takes its volume, issue, pages and year from a bibliographic database — never from the PDF, the DOI, or a repository deposit.
Cite Mary Ann Liebert and not SAGE. Crossref returns SAGE because SAGE acquired the journal after publication; the article’s own first page says Liebert. Name the imprint on the artefact, which is the reasoning that already makes a sheet name the printing it read.
The accepted manuscript corroborates the substance and may not supply a word of the wording. It is the authors’ British-spelled pre-copy-edit text, and the differences are not all orthographic: the Conclusion is a different sentence, but to better bridge the gap
against but also better bridge the gap
. Anybody assuming the two states differed only in -ise and -ize would have quoted it wrong while feeling careful.
And the version of record disagrees with itself on the headline figure, which is the detail most likely to be tidied by a later hand: Seventy-eight percent
in the Results at p. 325, seventy eight percent
where the Discussion restates it at p. 326. The sheet quotes the Results occurrence, and any sheet quoting both must reproduce both forms.
The participants are quoted with no identifiers at all — no pseudonym, number or demographic tag. The ledger elsewhere credits study participants by the names their paper gives them; here there are none, so the sheet’s caption says the anonymity is the paper’s and not our omission. Those two look identical on the page and needed telling apart.
Found while checking prior art, and it is on stimpunks.org rather than here, so it is recorded in the decision log for a session in that repository and left alone from this one.
The Canary and Very Grand Emotions glossary pages both present I wish I could find other people who have it, and live among them. A biological conscience is better than no conscience at all
and Maybe it’s like my sharing: One more weirdness…
as a single blockquote under a single citation. They are about ninety pages apart and in the wrong order.
The splice changes the meaning. In context Lauren is comparing her emerging Earthseed conviction to her hyperempathy — the one more weirdness… that I’m stuck with
is the religion, and hyperempathy is what she measures it against. Joined to the biological-conscience line it reads as though the weirdness she is stuck with is the conscience itself. Every word is Butler’s, every sentence is exact, and the quotation says something Butler did not: this house’s characteristic failure, living on our own site. This sheet quotes the two separately or not at all.
What this sheet will not tidy carries five items, and two of them are load-bearing rather than decorative. Butler’s hyperempathy is a drug injury and Autistic neurology is not — Lauren has it because her mother abused Paracetco before she was born, and there is a well-supplied market for readings that would let that parallel drift into an aetiology. The sheet says on the page that the parallel is to what the condition does and how it is treated, never to where it came from.
And Lauren says it is not a power, which cuts against this sheet as hard as against the critics Schalk corrects. If defending Autistic hyper-empathy turns it into a superpower, the defence has performed Schalk’s liberal compensatory desire to recast disability as ‘specialness’
in the act of citing her against it. So the strongest line the sheet mounts is not the biological conscience but the question four pages into the sequel — So why do I miss it now?
— where Butler, in a dream that has finally switched the thing off, argues against her own harshest description of it. You cannot subtract it and still have Lauren. That is the claim Autistic people make when they decline to be cured, and nobody had to bring it to the text.
2026 · 10 September
Sheet No. 9, on a definition recited for a beast nobody has seen, and on the coiner an empty word leaves behind Link to this section
Helen’s idea, from John C. Brady’s two-part reading of Logique du sens in Epoché — she asked for a sheet on names, labels, and how things get coined, and said the Deleuze–Carroll link may be a stretch
. It is not: Deleuze makes the identification himself, on p. 31 of the French. Ryan proposed it as a complement to Sheet No. 2, which asks whether a label fits; this one asks where the label came from.
The Logic of Sense is not sold as an ebook and Ryan does not have it, so the first plan was to build on Brady and correct the sheet later against Deleuze. That plan was wrong and the reason is worth keeping. Build-now-verify-later is fine when the later edit is an upgrade to a citation that was honest when it shipped; it is not fine when the later edit could change what the sheet claims, and a section resting on Deleuze’s theory of sense sourced entirely to somebody’s summary of it is the second kind.
The original was reachable the whole time. Logique du sens (Minuit, 1969) is openly readable at the Internet Archive; the two scans of Mark Lester’s English are restricted to print-disabled patrons. So the sheet quotes the French primary and every English rendering on it is ours, labelled a gloss rather than a translation — the same treatment the wyrd half-line gets on Sheet No. 4. Quoting Lester’s English through Brady would have put a translator’s authored choices in Deleuze’s mouth at a page number nobody here could open.
Four quotations were read off the page images and not off a text layer, because this scan’s optical transcription drops accents and breaks words across lines. Pages 31, 60, 64 and 65, each confirmed by its running head. The page numbers are the French ones and will not match an English copy, which the sheet says out loud.
What the primary added that a summary could not: Deleuze grants that Snark is a portmanteau of shark and snake and then says it is one secondairement ou accessoirement
only — the packing is not what the word does. A paraphrase reading “Deleuze calls the Snark a portmanteau word” would have been true and would have lost the argument, which is this site’s characteristic failure in one clause.
The masthead is the herbarium furniture with the plant absent: five gummed paper bands across the sheet, squared off at their inner ends, and one narrow channel running down through all five where a stem would have been strapped. Nothing may ever be added in the middle, which is the note left in the markup.
Three passes put the straps along a rising diagonal and all three failed, for a reason worth writing down. Each strap sat perpendicular to a cubic Bézier, so the five gaps lay exactly on one curve — correct as geometry, and on the page it read as ten scattered tick marks. Five dashes 15 units wide and 100 units apart will not join into a line however precisely they are aligned. Horizontal straps stacked at five heights put every gap at nearly the same x, about 34 units wide, so the vacancy is one column the eye takes in at a glance. The first draft before that had rounded inner ends and looked like a tray of pills; square inner ends are what make a channel a channel.
Built from .stem, .rib and .sprout and nothing else, so it adds no gap in the print sheet and none in forced colours. --len on all ten bands is the real getTotalLength() read off the live DOM, and the bounding box is asserted rather than eyeballed: x 40.2 to 509.7, y 29.1 to 231.1 inside 560 × 260. No .sprout carries a transform attribute, because a CSS transform animation would override it and collapse every strap onto the origin.
All eight earlier sheets carry --mended, because all eight have been corrected — Sheet No. 8 was predicted to arrive clean and did not. CLAUDE.md has been saying for a while that the unmended state had still never shipped and was therefore the one to check by hand rather than copy off a neighbour. It has now shipped: solid hairline, moss ink, reading Mounted 10 September 2026. Not yet corrected.
Checked in both grounds.
The stamp reads Sheet No. 9 and its mix-blend-mode resolves to multiply on paper and normal in the cabinet, which is the token doing the job it was made for — multiply darkens towards the ground, and in the drawer the ground is the dark thing.
Ryan asked whether any public-domain art would fit and pointed at Plate 6. Two others fit far better, and both change what the sheet can argue rather than illustrating what it already said.
The Ocean-Chart is Deleuze’s case vide, drawn ninety-three years early. A heavy rule enclosing nothing, with every term of reference a chart can carry — latitude, longitude, meridian, equator, both poles, zenith, nadir, a Scale of Miles that is five dots — arranged around the outside of the blank. It sits in the section on the empty square, facing Deleuze’s une place sans occupant
, and it comes with Carroll’s crew being grateful for it in the same Fit as the five marks: he’s bought us the best— / A perfect and absolute blank!
The Barrister’s Dream is the only depiction of the Snark in the book, and there is no animal in it. A wig on top of drapery, a hand holding a brief, papers lettered Trespass, Libel and Contempt. Nine illustrations for a poem about hunting a creature, and the creature appears once, in someone else’s dream, dressed as a lawyer. It closes the section on the definition delivered before the thing.
Two dates in each caption, because the scan and the engraving are different objects — Holiday cut these for the 1876 first edition and the paper photographed is a Macmillan printing of 1931. And the stored originals are downsampled, which departs from this file’s own rule that the JPEG is the archival copy: the Commons masters are 4.9 and 8.3 MB against 116–341 KB for every other plate here, and an img fallback is the one image path no srcset protects. They are stored at 2,176 px, twice the 1,088 px top rung, so the largest variant is a clean 2:1 downsample. The masters stay at Commons with their dimensions and hashes in the ledger.
A claim on Sheet No. 8 stopped being true and was corrected in the same commit. It said every mounted image on this site is a public-domain botanical print or painting. Two wood engravings and, before them, a manuscript leaf say otherwise; it now says every mounted image is public domain and names the kinds.
Ryan asked for the 1898 article to be found. It was: The Academy No. 1343, 29 January 1898, vol. 53, pp. 128–129, openly readable at the Internet Archive, signed by Holiday twelve days after Carroll died. Reading it did not confirm what the sheet had been carrying as an unverified report. It corrected it.
Every secondary account says Carroll rejected Holiday’s Boojum as inadmissible
, which reads as distaste. Holiday wrote that Carroll called it a delightful monster, but that it was inadmissible
. He liked the drawing and refused it anyway, to keep the creature unimaginable — All his descriptions of the Boojum were quite unimaginable, and he wanted the creature to remain so.
That is not distaste, it is an author protecting a vacancy on purpose, and it is the sheet’s whole subject. A tightened source, found in the wild, in the version of the story everyone repeats.
The scan’s text layer would have reproduced the same error by another route. Its OCR of this page renders Mr. Dodgson
as Mr. ey
and loses delightful monster
entirely, so an automated read of the primary would have reported the short version as verified. The page image is the source and the text layer is a finding aid — the rule the Deleuze quotations already ran on, now paid for a second time and by a different mechanism.
Holiday also supplies the fact that reorders the sheet: the last line came first. Carroll was walking alone one evening when For the Snark was a Boojum, you see,
arrived in his head, and the poem was written up to them
. So the hunt was built backwards to reach a word that meant nothing — which is what the closing section now says, against the section on a series running short.
Robert Garrison read the whole poem for LibriVox — 29 minutes 24 seconds — and released it into the public domain. It is in the sheet’s label block as a link.
A player was considered and declined on capability grounds, not taste. It would need a second encoding, because Ogg Vorbis alone is unreliable in Safari and nothing here transcodes audio; a MIME type taught to serve.mjs, which has no audio entry and would send application/octet-stream under nosniff — the .avif trap for the third time; a rule in _headers; a line in check-cache.mjs; and 18 MB in a repository smaller than that. /privacy exempts a href because a link the reader chooses to follow is not a request the page made, so the link costs nothing and adds no capability at all.
He is credited as the performer rather than as a licence. Somebody read a poem aloud for half an hour; filing that under a public-domain recording
on a sheet about coinages losing their coiners would have been the sheet doing the thing it condemns, one section below the place it condemns it.
Project Gutenberg’s transcription of the 1876 preface reads leave it unsettled which you will first
, which appears to want a word. Whether the gap is Carroll’s or the transcriber’s is not established here, so the quotation starts after it and the sheet says why at the foot. Silently inserting the word that makes a sentence read better is the tightening this cabinet is organised against, and it is no less so when the source is out of copyright and the fix looks obvious.
Lévi-Strauss is still quoted at one remove — his floating signifier reached us inside Deleuze’s book, and his 1950 introduction to the work of Marcel Mauss has not been read here. The sheet says so.
Asasumasu’s post was going to be described rather than quoted, and Ryan asked for it to be read. That was right, and reading it changed the sheet rather than decorating it: she explains the coinage as an act of widening — the words in use had no room for more ways of having a brain — and then defends the word’s emptiness as the specification, not another damn tool of exclusion
. Her sentences make the sheet’s own argument better than our paraphrase of them did, which is the case for reading a source rather than summarising it, put more plainly than the Deleuze entry above manages.
Two facts only a reading could produce, both now on the sheet and in the ledger. The post is signed Neurodivergent K of Radical Neurodivergence Speaking, not Kassiane Asasumasu, and the identification of the two is Helen’s glossary’s rather than ours. And Tumblr publishes no absolute date for it — only Posted 11 years ago
, read on 10 September 2026 — so it is cited undated with the timestamp and the reading date recorded, rather than with the 2015 our arithmetic would give. Her wording is kept exactly, ampersand, lowercase and profanity included.
A sheet arguing that coinages get separated from their coiners has to show its own working, so one section is about this site: Post-normal possibilities is Helen’s phrase from the founding brainstorm, one hyphen from the end of Nick Walker’s subtitle, with a third lineage in post-normal science nobody here has read in the primary. The masthead says after Nick Walker — not his phrase, which would take the coinage off Helen, and not silence, which is how it shipped at first.
Nothing about the credit changed. What changed is that the reasoning is now on a sheet a reader will actually meet, instead of only in the ledger where it was logged on 7 September.
2026 · 10 September
A crooked tree for the sheet that says queering is adaptation, and the stump of the straight one beside it Link to this section
At Ryan’s note, after the monologue Tom Waits speaks in Wristcutters: A Love Story. It went into To queer is to adapt rather than the typography section, because that section already says queering something is to make it strange or odd
and the monologue answers it: the crooked one is the tree still standing, growing strong and growing strange
.
The stump is the argument. Waits’ story is not about a bent tree; it is about what happened to the straight one that spent its life narrating the bent one’s deficiency. So the plate is two trees: on the left, all that is left of the straight one — a flat cut and two growth rings, and no leaf on it. On the right the crooked one, whole and in leaf, its lowest branch reaching back over the space where its neighbour used to be.
The first two drafts were not crooked. They swung the bezier handles wide and left the trunk’s endpoints where they started, which reads as a wavy sapling — a tree that has second thoughts and corrects them. The endpoints zigzag now, thirty units of lateral lurch a segment, and never come back to the vertical. A trunk that corrects itself is a straight tree with extra steps, which is the note left in the markup for whoever redraws it.
Built entirely from classes this stylesheet already has — .stem, .rib, .leaf, .sprout — so it adds no new gap in the print sheet and none in forced colours. That was the reason for the constraint rather than a happy result of it: a new art class needs a new print rule reaching it by name, and a fill the print sheet cannot reach is how Star Stuff printed forty-four blank pages. Only .trunk and .ground-line are new, and both are scoped to this drawing, like the lilac bush’s.
--len on every stem is the length measured off getTotalLength(). The trunk was declared at 255 and is 270, and a declared length shorter than the real one makes the dash pattern repeat — the branch draws itself on with gaps in it. Checked in all four states the site owes: the trunk inks in --qe-ink on paper and inverts to the pale cabinet ink on the dark ground, and both plain view and reduced motion report stroke-dashoffset: 0 with the leaves at full opacity, which is the finished drawing and never a missing one.
The caption quotes four words — growing strong and growing strange
— and the easy caption would have read Tom Waits
and left a reader to assume he wrote what he said. That is this site’s characteristic failure in miniature: an attribution true about the speaking, silent about the writing, and left to be read as a claim about both.
What is established: the monologue is spoken by Tom Waits as Kneller in Wristcutters: A Love Story (2006), written and directed by Goran Dukić, adapted from Etgar Keret’s Kneller’s Happy Campers. What is not established is who wrote it. It is widely repeated that Waits improvised the speech and that claim was not found in any primary source — not an interview with Waits, not with Dukić, not the published screenplay. It may equally be Dukić’s writing, or descend from Keret.
So it is logged Open in ATTRIBUTIONS.md rather than Verified, the caption says spoken by and claims nothing about authorship, and the caption says on its face that the question is unsettled. A drawing would not have needed the answer at all; quoting four words is what put the site on the hook for it.
2026 · 10 September
Nine typefaces a reader can set the sheet in, six of them drawing letters that exist because the grammar refused the person Link to this section
Ryan asked what fonts queer design — after Robin Mientjes by way of Paul Soulellis: an attitude in the face of conformity, an attitude in the sea of passivity, an attitude to say yes when others say no.
Twenty candidates went onto two specimen sheets; nine were kept. Six are from Bye Bye Binary, a collective drawing glyphs for inclusive and non-binary French. The rest are from Velvetyne and the Braille Institute.
Thirty-two faces are declared and a reader who picks none downloads three. That is the whole reason nine options cost nothing: an @font-face is a declaration, and the file behind it is fetched only when a rule using that family first meets rendered text. So the picker needed no lazy-loading machinery — the mechanism was already in the cascade. Pick BBB Baskervvol and exactly its three cuts arrive; pick nothing and the sheet is what it always was.
Four of the nine set both faces and five set only the display, and it is not a preference. Victorianna ships a Thin cut alone and is unreadable at reading size — that was visible on the specimen before anybody chose it. Redaction Inclusive, Insolente, Trickster and Sporting Grotesque have no italic at all, and this site is built out of citations: setting one of them as the reading face would put a faux slant on every <cite> on every sheet. So those five change the headings and leave Newsreader to read, and the four with a real italic — BBB Baskervvol, Adelphe, Coxinelle, Atkinson Hyperlegible — do both.
Three of them had been shown in the wrong weight. The first specimen set Adelphe in Floréal Bold, Coxinel·le in Black and Sporting Grotesque in Bold, because those filenames sorted first in their repositories. Two full text families were presented as heavy display faces. Regular, Italic and Bold here, which is the difference between offering a typeface and offering whatever came out of a directory listing first.
The faces, the class rules and the manifest are generated from one table by tools/make-fonts.mjs, so the stylesheet cannot declare a family the picker does not offer or the reverse. And because the option list lives in the markup on eighteen pages while the faces live in one table, check-metadata.mjs now compares the two — an option with no face behind it offers a reader a typeface that will not load, and a face with no option is weight nobody can reach. Both are silent, and narrowing the nine is exactly when they would happen. Proved by offering a face that does not exist and watching it be named.
Six of the nine are under CUTE — Conditions d’Utilisation Typographiques Engageantes. It permits use, copying, redistribution, modification and commercial use, and states outright that it is not technically compatible with any FLOSS license to date
, taking a position radically and deliberately inconsistent
with them. It is explicit that it governs fonts and not the documents they set — its own example is that a book typeset in a CUTE font is not governed by CUTE — so nothing on this site is relicensed by using them.
Three of its conditions bind us. Credit the designers and link the original publication source — the first specimen named the collective in plain text with no link, which is half of it. Share complete files rather than lone extracted faces. And do not delete the post-binary characters or the OpenType features that activate them, which forbids subsetting: the six CUTE faces ship whole while the two house faces are cut to the latin subset. Its donation is a condition and not a suggestion; Stimpunks met it at the for an association
tier.
Reading a licence properly is what found the faults at home. Sourcing these candidates meant reading nine licences, and that turned up two of our own: the house faces had been redistributed for a day with no licence file beside them, and the colophon credited both of them to a search engine rather than to Undercase Type, Phaedra Charles and Flavia Zimbardi, and Production Type. Every credit on this site is now fetched from upstream metadata rather than typed, which is the same standard the quotations are held to — and the reason it was worth reading the licence rather than assuming a font is a font.
2026 · 10 September
The device decides, and the reader may say otherwise: three reading settings, and a motion rule that had to be turned inside out to allow the second answer Link to this section
Prompted by Ryan asking whether the site supported forced colours and whether the accessibility settings buried in system menus could be surfaced on the page. The answer to the first was no — not one @media (forced-colors: active) anywhere — and it was outside the audit’s stated scope rather than missed by it, which is the one time a scope caveat has actually earned its keep here. The answer to the second was an argument, and the argument was lost: respect the system setting
only reaches the readers who know the system setting exists. Default to the device; allow configuration in the moment.
Self-hosting the two faces on 9 September stopped the site disclosing every reader’s address to Google, and introduced a licensing fault in the same move. Both are under the SIL Open Font Licence, which requires the licence text to accompany the fonts wherever they are redistributed — and a public repository serving woff2 over HTTP is redistribution. For a day they had none. fonts/Fraunces-OFL.txt and fonts/Newsreader-OFL.txt are there now, each family’s own file with its own copyright line, because a generic copy of the licence carrying somebody else’s copyright would be a gesture at compliance rather than compliance.
And the colophon credited both faces to a search engine. It linked Fraunces
and Newsreader
to their Google Fonts pages and named nobody. On a site whose one stated correctness requirement is that credit reaches the person it belongs to, that is the fault it exists to catch, committed against the people whose letters every word here is set in. Fraunces is by Undercase Type, Phaedra Charles and Flavia Zimbardi. Newsreader is by Production Type. Both are now on the colophon, in ATTRIBUTIONS.md, and in a fonts/README.md so the provenance is legible to anyone who opens the folder.
The names are read out of upstream metadata, not out of anybody’s memory. tools/make-fonts.mjs fetches each family’s OFL.txt and its METADATA.pb and refuses to write a licence file it cannot recognise as an OFL, or a credit with no designer in it. So the attribution cannot drift from the files actually being served, which is the same standard every quotation on every sheet is held to. check-metadata.mjs fails if a family’s licence file goes missing or its designer is unrecorded — proved by moving one out of the way.
The occasion was Ryan asking what a font picker might hold: faces that queer the design, after Robin Mientjes by way of Paul Soulellis — an attitude in the face of conformity
. Sourcing candidates for that meant reading licences, which is what turned this up. The candidates are set out on two sheets, at /specimen and /specimen/more, in this site’s palette at its own sizes on its own paper, weighted heavily towards Bye Bye Binary, a collective drawing glyphs for inclusive and non-binary French — letterforms that exist because the grammar refused the person. It is a scratch page: noindex, absent from the sitemap, and to be deleted once the choice is made, because a specimen kept after the decision becomes a second, stale account of what the type is. Twenty candidates across the two, each fetched with its licence — several of the Bye Bye Binary families publish theirs as a PDF, shipped as-is because a transcription of a licence is not the licence, and two state their terms only in a README and are marked as such rather than assumed into the OFL. Two families named in that conversation turned out not to exist under the names given — amiamie and lucioles were recalled wrongly and are on neither sheet, which is the ordinary way an attribution from memory fails here.
It went out not working. Ryan pressed Reading on the live site and nothing happened. Inside .qe-controls — the flex row the controls sit in — a real click over the summary arrives with event.target set to the DETAILS rather than the SUMMARY, so the disclosure never toggles. Positioning the summary lifts it into the hit test and the click lands. One rule, and it is commented, because a rule that looks redundant is exactly what a working fix for this looks like.
What is established is narrower than an explanation, and the comment says so. A pristine <details> in <body> opens on a real click; the same one inside this flex row does not; nor does one with no content at all, so it is not the content slot; making the DETAILS static does not help, so it is not the positioned parent. Positioning the SUMMARY fixes it every time. The mechanism is not proved and is not asserted.
The interesting part is why the verification passed. Every check run before shipping used summary.click(), which dispatches a click directly at the element and skips hit testing entirely — the one thing that was broken. The screenshot that showed the panel open had been taken after setting open = true from the console. Both are green lights on a control no reader can operate. Two earlier clicks in the same session landed on the wrong button because the pane’s screenshot frame is 800px wide while the page is 593, and both were read as evidence rather than as a mis-aimed click.
The rule that comes out of it: a control is not verified until a real pointer has operated it. A synthetic .click() proves the handler runs; it proves nothing about whether anybody can reach the handler. The keyboard path could not be verified here at all — a pristine details at body level does not respond to a synthesised Enter either, so the harness was the limit rather than the site. It was written down as unverified rather than as passing, and Ryan confirmed it on the live site the same day: Tab reaches the control and Enter opens it. Recorded here because I could not check this
is only honest for as long as it stays true.
The case against putting these on the page is a good one, and it is wrong here. A site reimplementing a setting the operating system already has only helps the readers who find the widget, and it shifts the work of configuring accessibility onto the person who needs it. That argument is why plain view was defensible and a settings menu was not: plain view turns off this sheet’s wonk and rotation and display faces, which no system setting could know about.
What it misses is that most people have never opened that menu. Implementing prefers-reduced-motion perfectly still only catches the readers who have already been to System Settings and found the switch. And a preference set once, months ago, cannot know that today is a migraine day — access needs move during a day, which is not a subtlety for a site made by two Disabled people. So the media query is the default and the panel is the override, in that order.
The stored value is three-state, and that is the whole design. Absent does not mean off; it means follow the device. Only an explicit on or off writes a class, so with nothing stored the stylesheet’s own media query decides and the answer without JavaScript is the same answer as with it. Follow my device again removes all three keys and hands the reader back to their own machine, rather than freezing today’s answer as though it were permanent.
Reduce motion is deliberately not plain view. Ryan’s point, and he is right: you might want the motion gone and want to keep the display faces, the wonk and the leaning slips. They were one control because motion was one of the things decoration happened to include, not because they are one preference.
It is a native <details>, and it must stay one. A hand-built menu needs focus trapping, a roving tabindex, aria-expanded kept in sync and an Escape handler, and getting any of that wrong would make the accessibility panel the least accessible thing on the sheet. The browser ships all of it. Escape and click-away are the only additions and both are conveniences over something already working. Every word in it is authored in the markup; the script sets checked states and classes and writes nothing.
The first option is not a no-op, and that is the whole reason it is worth showing. html is set to font-size: 100%, which inherits whatever size the reader’s browser is already set to, and every one of the 129 type sizes on this sheet is in rem — not one in px. So are the spacing scale and the measure. Raising the root therefore moves the line height, the gaps and the 66-character measure together, rather than swelling the words inside a box that stays where it was.
Larger only, and that is a house rule rather than a shortcut. The style guide puts body text at 18–20px and this sheet sits at 1.19rem, which is 19px on a default browser. A smaller option would take it under that floor, so the panel does not offer one. A reader who wants less turns their own browser down and the sheet follows — which is precisely what the first option names.
It is a <select> because two steps is not a checkbox, and native for the same reason the panel is a native <details>. It also makes something visible that was implicit: for the three checkboxes, follow your device
is the absence of a stored value and a reader has no way to see it. Here it is an option they can choose by name.
The gate caught this key one setting after it was written, which is the point of it. The storage check found settings by their html.qe-*-on and -off classes, and text size stores larger and largest — so the pattern would have let qe-textsize go undocumented on /privacy while reporting green. Widened to any state, it failed immediately and by name. A check written for the cases that existed is a check with a blind spot for the next one.
Verified the way the last one should have been: a real click opened the panel, the control was confirmed to be the top hit target at the point a reader would press — the check that would have caught last night’s bug — and a real keypress moved it through both steps, 16px to 18 to 20, with the class, the storage and the reset button following. A real click on Follow my device again put all four back.
Every animation on this site lived inside @media (prefers-reduced-motion: no-preference), and the rule beside it read: the reduced state is the finished drawing, never a missing one. Never put an
That structure is correct and it cannot express the second answer — a reader who asked for motion on a device that asks to reduce it. There is no way to add a class to a media query.opacity: 0 outside that query.
So the gating inverted. Motion is now off in :root: --qe-draw and its siblings are none, --qe-sprout-start is 1, and exactly two things switch them on — the media query, and html.qe-motion-on. The timings are written once in --qe-anim-* and the two blocks only map them, because a duplicated cubic-bezier is a drift waiting to happen and a duplicated mapping is three lines that either work or obviously do not.
The rule that replaced the old one is stronger, and it says why rather than what. Not never put an
but the default must be the finished drawing — so a reader with no CSS variables, no JavaScript, or a device asking for less motion gets a complete drawing because that is what opacity: 0 outside that query:root says, not because a query happened to wrap the rules. One place needed a hand: an un-animated stem would have stayed invisible behind its own stroke-dashoffset, so the static state puts it back to zero. Verified in the browser in both directions, and the reduced state reports animation: none with stroke-dashoffset: 0px.
There is no toggle for forced colours and there cannot be. It reports an operating-system state — Windows Contrast Themes and its kin substituting the reader’s own palette for everything we declared — and a page can only respond to it. That is the point of the feature: the reader’s choice outranks the site’s. It sits beside More contrast in the panel as the thing the panel deliberately does not contain.
Most of this sheet survived the substitution already, on decisions taken for other reasons: every control is a real <button> with a real border, and the register’s four kinds carry words as well as an accent, so a palette that flattens their colours does not flatten their meaning. The rule that put the colour on the rule and never on the glyph paid a debt it was not taken out for. What needed repair was the card hover, which was a background change and nothing else and therefore vanished outright; the edges that leaned on a box-shadow; and focus, which now tracks Highlight rather than our rust. The botanical art is allowed to be forced — colour is not information in a drawing of a leaf, and the spec reserves opting out for the case where the colour is the information.
Three new keys meant /privacy was one edit away from being wrong about its own site, which is the failure this register exists for. So the policy names them, and a gate now enforces that it always will: every qe-* key the site reads or writes must appear on that page. It finds them two ways, because one is not enough — literal getItem calls, and the html.qe-*-on classes in the stylesheet, since the reading settings build their keys from a table and appear as no string literal anywhere. Proved by adding an undocumented setting and watching it be named in the failure. It is the sibling of the third-party-origin check mounted yesterday: not forbidden, named.
2026 · 9 September
The manifesto, adapted under its own licence — and a tightened quotation found on our own foundation’s page while sourcing it Link to this section
The founding papers had one page in them. The second is the argument the aims rest on, adapted from the Neuroqueer Learning Spaces Manifesto — a nine-author community document under CC BY-SA 4.0, initiated by the two people who make this site. Sourcing one quotation for it turned up a drift in our own house.
Ryan supplied the Playful Manifesto quotation as a translation of my world into yours….This is a protest of the notion that there is any correct way to live
, which is what stimpunks.org carries. Alexander wrote to yours, and three sentences stand between that one and the protest.
A translation to somebody is offered; a translation into them is done to them. One word, and the image inverts. The ellipsis is the more ordinary fault: compressing is defensible, doing it with …. and no note is how a reader comes to believe two sentences are adjacent.
So the sheet quotes the opening whole and says on its face that the circulating version is tightened, naming our own page as where we found it. A ledger that only catches other people’s tightening is not a ledger, it is a defence. The fix on stimpunks.org is one word and a fuller quotation; that is not this repository and is recorded as an open item rather than acted on, the same way an SKS finding is.
Nick Walker on weirding comes from a recorded panel nobody here has listened to; Grada Kilomba’s Who Can Speak? from a 2016 book nobody here has opened. Both reach the page through the NQLS manifesto’s rendering. This file’s own rule permits that — where the primary is not reachable, quote it with the citation attached and name whose transcription it is — and both figcaptions name the transcription rather than the source, in bold, on the page rather than only in the ledger.
The Kilomba excerpt is two contiguous lines out of twenty-odd, and contiguous matters more than short. Picking the most striking lines from across the passage would have produced a tightened Kilomba on the page whose subject is tightening. Two that sit together elide nothing inside the quotation, and quoting the passage entire would be a substantial reproduction of a copyrighted work to make a two-line point.
Walker’s definition of neuroqueer as a verb is already on the home page and verified at source. This extends the same move to weird, which is what Sheet No. 4 is about: wyrd was demoted from fate to defect, and turning weird back into a verb is that history running the other way.
It would be easy to treat a document Ryan and Helen initiated as theirs to carry across without ceremony. Nine people wrote it. The foot of the sheet names every contributor and the licence, in the page rather than only in the ledger, and says plainly that what happened here is an adaptation: no sentence carried over verbatim, the argument taken off learning spaces and pointed at reading.
Share-alike is the reason this exists and the reason it is not the end of anything. CC BY-SA 4.0 is why the adaptation is permitted, and the same clause is why anybody may do this again to our page.
It does not restate the home page, which was the risk the mission page was shaped to avoid. The home page explains what queering is; the aims list what we are for and where each is kept; this argues why any of it follows. Three genres, one subject, no duplicated paragraphs.
2026 · 9 September
A new accession goes at the top, anchored on the register, and this one proves it Link to this section
The entry below records four accessions ending up in the wrong order and the two assertions added to catch it. Neither assertion can see the case that caused it — within a single day the order is editorial and nothing mechanical can verify it. This is the part that closes: a written rule about where the insert goes.
Anchor on <div class="qe-register" id="latest">, never on the last accession you wrote. The register runs newest first, so the top is a fixed address and the previous entry is not. Inserting above your own last entry is right for exactly as long as nobody else adds one — which was true every day this register has existed until this evening, when two sessions appended to it for three hours. Ryan asked for the rule; it is in CLAUDE.md beside the checklist a session reads before writing an entry, rather than only here where it would be read afterwards.
The marker moves in the same edit. · latest comes off whatever holds it and goes on the new entry, and check-markup.mjs refuses a page where it is not on the first accession. That gate plus this rule cover the two halves: the gate catches a marker in the wrong place, the anchor stops an entry landing in one.
This entry was inserted by the rule it describes, anchored on the register div with the marker moved off the section below. Which is the smallest possible test, and better than none.
2026 · 9 September
A way straight to the newest accession, and the discovery that it was not where the page said it was Link to this section
The contents list added an hour ago put the newest accession 4.8 screens down, so a jump was wanted. Building it exposed something worse: the register was out of chronological order and had been for the whole evening.
A link to the newest entry’s own id would be a hand-kept pointer at a moving target — stale the next time anything is mounted, in the file that exists to record exactly that kind of failure. The register runs newest first, so the top of the register is the latest by definition. #latest sits on the register itself and cannot go stale, because nothing about it is a copy of anything. It needs no script, which a derived href would have, and it gives the newest accession a permanent shareable address for the first time.
It sits directly under the lede, and that took a measurement. Placed after the register’s own housekeeping note it landed at 1,587px on an 866px viewport — below the fold, which is no use to somebody arriving to see what changed. Under the lede it is at 680px. Second time today a link was put somewhere reasonable-looking and measured out of sight, after the finding aid’s search box.
Two sessions were appending to this file at the same time, and each anchored its insert on the last accession it had written. Both were locally correct; the page was globally wrong. The four accessions from 22:43 onwards sat beneath the four from 20:46 to 22:33, and · latest was on the fifth section down. Re-ordered against the commit timestamps rather than against anybody’s memory.
This is the card-order fault again, in the one file that gate does not look at — the third time today that a list correct in every part has been wrong as a whole. And it now matters more than it did this morning, because #latest is a published address that depends on the order being right.
check-markup.mjs now checks that accession dates do not increase down the page, and that exactly one accession is marked latest and it is the first. The date check is worth having and was blind to this: every accession that day carries the same date. The marker check is the one that bites. Within a single day the order is editorial and nothing can verify it — but which section is newest is a claim the page makes out loud, and a claim can be checked. Both were made to fail before being believed, the first by putting this evening’s actual fault back.
It also turned up a third entity table. This gate carried its own six-entity decoder, which did not know · and handed the date check back a raw entity. tools/html.mjs was written to stop precisely that — an entity table is a lookup that one tool teaches and the other does not
— and the gate simply was not using it. It imports the shared one now, which throws on anything it does not know rather than passing it through, and all seventeen pages still pass.
2026 · 9 September
The finding aid gets one too, and three thresholds in a row turn out to have been the same mistake Link to this section
Every page on this site now carries a contents list except two, and neither of those declines on a threshold. The pattern is worth more than any of the three rules it replaced.
They went in this order, over about two hours. More than two headings — retired, because two entries that save twenty screens beat seven that save two. The block must not be too tall — retired, because 2,322px against a 120-screen page is a bargain and the comparison that decides it is the block against its own page. The page must be long enough — retired now, with the finding aid at 1,307 words.
Each of the three measured the list. None of them measured the reader. What is left is structural and has one instance: does this page already have a better index of itself? The home page answers yes — its plate of eight numbered cards is a contents list, and a second one above it would put two competing lists on one page. The error page is an error page. Everything else has one.
The house puts a contents list directly under the lede, and following that here pushed the input to 970px on an 866px viewport — out of sight on load, on the one page whose entire purpose is that field. Caught by measuring rather than by looking, which matters: the screenshot looked perfectly reasonable, because a screenshot of the top of a page always does.
It sits below the form and the results now, immediately before the sections it lists, and the input is back at 804px. A reader with results in front of them is not looking for a contents list; a reader scrolling past them is. The exception is recorded rather than left as a quirk of one file, because the next person to tidy this page will otherwise move it back.
2026 · 9 September
This register now has the contents list an earlier entry measured, refused, and wrote a rule against Link to this section
Ryan asked for it. The old refusal was right about its number and wrong about what the number meant — which is a more interesting way to be wrong than simply not having measured.
The figures, re-measured rather than quoted. Thirty-three accession headlines averaging 140 characters; the list renders 2,322px and puts the first entry 4.8 screens down. Both worse than the 1,293px and three and a half screens that got it refused, because ten accessions have been added since.
And it does not matter, because the page is 40,408 words. That is roughly a hundred and twenty screens. A list that costs 2.7 of them to reach any one of thirty-three accessions directly is the trade a contents list exists to make. The refusal compared the block against other pages’ blocks; the comparison that decides it is the block against its own page. This is the two-heading threshold’s mistake from the other end — count was the wrong measure there, height is the wrong measure here, and page length is the question in both.
Columns were tried and do not help. 2,322px in one column, 2,213 in two, 2,302 in three. Narrowing a column makes a 140-character sentence wrap proportionally more, so width traded for wraps is a wash. Measured in the browser before the CSS was considered, and then not written. The labels stay verbatim: truncating one is this site’s characteristic failure applied to itself, and a short second label is the drift the derivation exists to prevent.
Both indexes stay, and they do different jobs. The contents list is chronological, by accession, at the top; the index by sheet is at the foot and files the same entries by what they happened to. Front matter and back matter, which is how a bound volume carries both. The one-line pointer that used to sit by the legend came out — the contents list’s last item is a link to that index, and two adjacent links to one place read as a mistake even when both are right.
2026 · 9 September
A feature was mistaken for a fault, removed, and put back within the hour Link to this section
The rail on the ledger read Verified · Open · Every attribution on this page
— the third of those being the index’s own heading, listing itself inside the navigation beside it. Two components built in parallel, each correct on its own. The rail excludes .qe-contents by name; the entry index arrived as a second navigation block inside the landmark and nothing knew to skip it.
A heading that labels a navigation block is not a section of the page. That was always the rule; it was written down as .qe-contents because that was the only case when it was written. A list of class names is a rule that gets quietly broken by the next component — the same shape as the two view controls, and nothing else
and the one Python tool here
, both of which this file has already had to correct into boundaries. Every navigational block on this site is a nav, including the rail and the index themselves, so the element is the test.
Proved in both directions rather than one. The ledger’s rail is Verified · Open
and its entry index still fills 53 and 2; Sheet No. 1’s contents list and rail are unchanged at seven each. A fix to a shared derivation that is only checked on the page that was broken is a fix that breaks fourteen others quietly.
Worth recording as a hazard rather than only as a bug. Both components were built the same afternoon in two sessions against one working tree, and neither was wrong about its own page. The failure lives in the seam, which is the one place a gate here does not look: check-markup.mjs validates the served markup, and this list does not exist until a script runs.
The entry above determined a feature to be a bug, and the determination was wrong. The rail on the ledger listed Every attribution on this page
, this session called it self-announcement and removed it, and Ryan said plainly that he had found it useful. He is right: on a page of 130KB, a link from the rail straight down to an index of all fifty-five entries is the most useful thing in it.
Two cases that look identical and are not. A contents list containing On this sheet
is a list pointing at itself. A rail containing Every attribution on this page
is a list pointing somewhere a reader wants to go. Collapsing both into any heading inside a nav
was a generalisation that read as principled and cost a feature; the honest rule is narrower and older — a list must not contain its own heading, and .qe-contents and .qe-rail are one derivation shown twice.
The reversal is the entry, not a quiet edit to the one above it. That entry stands as written, because a register that revises its own determinations in place is a register that cannot be checked — which is the argument this whole page is built on. This is the third re-determination here and the first where the thing re-determined was our own judgement rather than a source.
The re-determination above is what made this possible, which is a pleasant way for a mistake to end. With two h2s a contents list on the ledger would have read Verified and Open and told a reader nothing — the stated reason both record pages went without one when they shipped. With the entry index’s heading back in the derivation it lists three, and the third is a jump straight to all fifty-five entries.
The standalone pointer came out in the same pass. It said every entry is listed by name in the index at the foot of this page
and sat immediately above a contents list whose third item is a link to exactly that. Two links to one place, adjacent, is the kind of thing that reads as a mistake even when both are correct.
Twelve of seventeen pages carried one at that point, and checking which four declined turned up a page with eight headings and no list.
Ryan’s call, and it is the right one. A contents list needs more than two headings
was the stated reason both record pages shipped without one, and it counts the wrong quantity: the reader’s problem on a twenty-thousand-word page is length, not heading count. Two entries that save twenty screens of scrolling are worth more than seven that save two. The question is only ever whether the page is long enough to want one.
Retiring a rule is a good moment to check what it was hiding. The privacy page is 2,058 words with eight headings and had no list — longer than Sheet No. 1 at 2,045, which has one. It was never a decision, just a page nobody counted. It has one now.
Four pages still decline and not one of them declines on heading count. The error page; the home page, whose plate is already a contents list; this register, whose accession headlines average 148 characters and measured 1,293px against 319 to 510 elsewhere — it gets its index as back matter instead; and the finding aid at 1,307 words, the shortest page here that is not an error page and well under the 2,045 of the shortest page that has one.
Found by checking the deployed file rather than the local one. The live queering.js carried the new nav test and the old class-name test, which meant a second copy of the same derivation somewhere else in the file. It was in measureTicks, which sizes the rail’s ticks to the sections they stand for.
It failed safe and therefore silently. That function re-derived the heading set with the old exclusion, counted three against the rail’s two, and hit its own heads.length !== items.length guard — so on both record pages the ticks were simply never measured. No error, nothing visibly broken, a rail of default-sized marks where a scale drawing belonged. A guard that fails safe still fails.
One derivation, one place. Both callers now use a single sectionHeads(), so there is no second copy left to fall behind. Verified on both pages afterwards: the ledger’s ticks read 32.0px and 9.0px — correctly saying that Verified holds fifty-three entries and Open holds two — and Sheet No. 1’s seven are unchanged.
2026 · 9 September
The two longest pages on the site could not be surveyed without reading all of them Link to this section
A reader wanting to know whether the ledger holds an entry on Rossetti had one option: scroll 130KB of it. Both record pages now carry an index of their own entries at the foot — 55 on the ledger, 71 on the decision log — with a one-line pointer up in the front matter, the way a bound volume does it.
A contents list was the wrong reach and this page already knows why. .qe-contents derives from a page’s h2s, and both records have two — it would have shown Verified and Open and delayed every reader to say nothing. What a reader wants is the entries. So it is the register’s .qe-sheet-index shape a second time: back matter, ruled off, at the foot, because front matter costs every reader and back matter costs none.
Generated into the HTML it would have double-indexed all 121 headings. The SKS mirror and search-index.json both read the landmark, and a list of every heading sitting beside those headings is a second copy of each — the exact reason the contents list is built at runtime rather than written down. So the served container is empty, queering.js fills it, and both generators skip it so the .md does not announce a list it has no room for.
The group headings are derived here, where the register’s are authored. That is the one real difference between the two indexes and it is not a relaxation: the register’s groups are sheet names, which are editorial words queering.js may not write, whereas these groups are the page’s own h2s and every label is a clone of text the reader can see above it. Nothing is composed, summarised or truncated — the same standing the contents list has.
A group heading is a paragraph and not a heading, which looks like a downgrade and is the opposite. These are clones of headings the reader has already passed; putting them back into the outline would give the page a shadow contents made of duplicates, which is worse for a screen reader’s rotor than having none. It wears .qe-index-sheet, so it still looks like what it is.
reveal.mjs says in its own comment that it is for a fetch or a hidden state, not for anything merely built at runtime
, and this component ships hidden — which reads like a case for it. It is not: the drift rail’s if (r.hidden) continue is only sensible if queering.js has already run under the gate, so anything that unhides itself is measured without help. Confirmed by counting rather than by reading the source: /ledger went from 1,782 measured elements to 1,845 with the index in, and its print count did not move, because the index is display: none on paper.
Two columns above 34rem, one below. Fifty-five short names in a single column is a screen and a half of nothing but links with the measure wasted on them; two columns of wrapped link text on a phone is a column of three-word fragments. The divider is a column-rule rather than a gap, because a bare gap between two lists of links reads as one ragged list. check-overlap.mjs was the thing to watch here and reports zero collisions across all three passes.
One spacing fault came out of looking: .qe-index-link is shaped for the register, where the pointer is the last thing before the entries and needs no bottom margin. Here the body follows it immediately, so the line read as the opening of the paragraph beneath it.
2026 · 9 September
Two pages of this cabinet had addresses, were listed on the home page, and were reachable from the foot of nothing Link to this section
The footers had drifted into three shapes: fifteen carrying the cabinet pages as authored gloss sentences, one carrying a short row of three, and the home page carrying none by design. The inconsistency was the symptom; the defect underneath it was that the ledger and the decision log appeared in no footer at all, two days after they were given addresses. Every footer is now a row of short links, the collaboration line, that page’s own licence sentence, and on the sheets one sentence pointing at the ledger — 32 to 98 words where there were 107 to 226.
Each cabinet page was introduced in the footer by an authored one-line gloss. Five sentences restated across sixteen pages is eighty copies of editorial prose, every one of them free to drift, and drift is what happened — which is how two pages could go missing from all of them at once without anybody noticing. The glosses still exist, once, in the furniture list on the home page, which is where this cabinet already said those sentences live.
The row uses short names, and that is a second name for those pages. It says Colophon, Register, Decisions; the pages call themselves How this site is made, The accession register and What is settled, and what is open. A row of links and a page title are different registers, and the rule against a second name is about the group headings, where a name identifies a set. The addresses are unchanged.
The home page keeps its bare footer: its furniture list sits two paragraphs above, with the same seven pages and their glosses, and a row of the same links directly beneath would be two lists of one thing.
Six sheets carried a paragraph of sourcing in the footer — which printing, how many scans, which page. The question was whether it belonged in the provenance line instead. It does not, and the reason is worth writing down: provenance here is accession history — when the sheet was mounted, how often its label has been corrected, each clause linked to the entry that did it. It is identical in shape on all eight sheets, and that sameness is what lets a reader scan it.
Which copy we read is a different fact with a different life. It is about the works the sheet reads rather than the sheet’s life in this collection, and putting it in the provenance line would bury the mounted, corrected twice pattern under prose that changes from sheet to sheet. It also already has two homes: the specimen block at the head of every sheet, and the ledger.
So the footer keeps one sentence — every quotation here was read in the work it comes from, and is logged in the ledger — and the trail stays where it was. What is lost is detail like read in three separately scanned copies, which is in the ledger, and which the sheets saying it were saying for the third time.
2026 · 9 September
A way back to the top, drawn as growth rather than as a chevron Link to this section
Every footer now ends in a link back to the top of the page: the words Scroll to top, a small stand of grass under them, and no script at all — an anchor already scrolls, and this site’s smooth scrolling was gated on reduced motion the day it was written.
The ask was grasses whose taller stems form an arrow pointing up. A chevron drawn over grass is an interface arrow wearing a costume, and this cabinet already has its own word for up: growth, stems drawing themselves on from the ground. So two tall blades arc up and converge at the middle stem’s seed head, and the silhouette is an arrow without one being drawn.
The first attempt put two short awns on the head and read as a small figure with its arms raised. It was looked at, and redrawn — which is what this cabinet’s rule about judging a drawing at the size it ships at is for. The words carry the meaning either way: the drawing is hidden from the accessibility tree, the link is named by real text, and a reader who sees only grass has lost an ornament rather than a control.
Two links now aim at the page’s main landmark: the skip link at the top and this one at the foot. A landmark that cannot take focus leaves a keyboard reader’s focus where it was while the page scrolls somewhere else — press the new link and the page goes to the top while the next Tab resumes at the bottom of the page you just left. It has been true of the skip link since it shipped, and it is invisible to anyone using a mouse, which is why nobody had noticed.
The landmark now takes tabindex="-1", which keeps it out of the tab order and lets a fragment link hand it focus. Verified rather than assumed: activating the footer link scrolls 9,952 pixels, sets the address, and moves focus to the landmark, so the next Tab starts at the top of the reading.
2026 · 9 September
Sheet No. 2 had no lede and an essay with no heading, so its own contents list could not name the reason it exists Link to this section
When every sheet got a contents list, this one could not have a normal one: all six of its headings were in the 2026 commentary, and Ryan’s 2022 essay above them was unheaded, so a list at the top would have named six sections beginning a fifth of the way down and said nothing about the essay. That was left open rather than patched, because giving the essay a heading is a decision about Ryan’s text and not a defect to sweep up. He has now taken it.
The essay is now a section called Against My Grind, and the phrase is Ryan’s own — it is lifted from the anecdote inside it, where he writes of the ways norms went against his grind. A heading invented for somebody else’s text would be a small piece of us wearing their voice, which is the failure the ledger exists to catch; a heading taken from the text is the text naming itself. The essay’s words are still untouched.
The note below it said “everything above is the essay”, and that stopped being true in the same edit. A lede and a heading now sit above it, and neither is his 2022 writing. The note names the section instead of the position, and says in as many words which parts are ours — a claim that binds is a claim to move in the commit that breaks it, which is the fourth time this cabinet has learned that and the first time on a sheet rather than the privacy page.
With a lede and seven headings the sheet is now shaped like every other, so its contents list moved back to where every other sheet keeps one — straight after the lede, at a twelfth of the way down the page rather than a fifth. The exception it needed a week ago no longer exists, and the note describing that exception has gone with it.
2026 · 9 September
The plate was eight screens down its own home page and there was no way back up to it Link to this section
Every heading here has had an authored address since the contents list was built, and the plate and the cabinet were reachable all along — by anyone who already knew the address. A link nobody can find is close to a link that does not exist, which is the objection this house makes to an untraceable quotation, arriving as a navigation problem. There is now a rail in the left margin on every page but this one: a column of short rules that becomes the page’s own headings when a pointer or a keyboard enters it.
This file already refuses a contents list for the home page because two competing navigational lists is a defect, and the rail plainly puts a second list beside the first on seven pages. The refusal stands and does not reach this: the contents list is front matter — read once, in sequence, in the measure, before the sheet begins. The rail is an instrument, glanced at from the middle of a sheet nine thousand words in. The home-page defect was two lists competing to be read; only one of these is for reading. Ryan’s call, against the recommendation to hide one, and the design work went into making them unmistakably different objects rather than into hiding either: the rail is smaller, mossy rather than rust, unnumbered, unlabelled, and out past the measure in space no line of text occupies.
It is unlabelled because a visible heading would be a third copy of the words On this sheet and the one free to drift. The aria-label is authored in the markup, once per page, and queering.js still writes no words — one builder now fills either container, because a second loop would be a second place for the three heading exclusions to be got right.
The register is the page that does not get one, for the reason it has no contents list either: twenty-eight headings averaging 147 characters, longest 226. In a 12rem column with no truncation allowed that is a four-thousand-pixel rail. The same measurement that sent this page’s index to the foot keeps the rail off it.
Two mistakes in the one rule this house wrote down because no gate enforces it. The instrument first: the view controls grow their targets with an absolutely positioned 44px box behind each control, and reaching for it here would have been wrong — rail links are stacked, so the boxes would overlap, the topmost would take every tap, and the rule asking for 44px would have produced a rail where most entries could not be pressed at all. Stacked targets take real padding.
Then the arithmetic. The padding was set from the measurements of a 1rem line and shipped 44px in a comment above targets that measured 31.1px — a control whose own note explains the failure, committing it. Found by measuring the rendered box rather than by reading the rule back, which is the whole reason this site measures. A 0.82rem line at 1.35 is 17.71px, so the padding is 0.83rem either side and the box is 44.3px. Verified after: no two hit areas overlap, and the tallest rail on the site — the colophon at fourteen entries, 690px — still clears a 900px viewport before the clamp scrolls it.
The rail lives outside the landmark, so no generator changed a single byte when all three were re-run — checked rather than assumed.
The rail shipped showing every label all the time, and needed nothing from tools/reveal.mjs — both Chrome gates load over file:// and queering.js is fetched by relative URL, so it runs and the labels were measured like any other text. That was proved rather than assumed, by putting a 2.9:1 colour on the contents list and watching the contrast gate report exactly one failure per heading on seven pages.
Then it was collapsed to hover, and all 109 labels went into the blind spot at once. A gate skips what it cannot see, and opacity: 0 is invisible. Proved both ways with a probe colour on the rail: with the new reveal line, 109 failures caught; without it, a clean PASS and 218 elements silently dropped from the count. The distinction is the thing worth keeping — REVEAL is for a fetch or a hidden state, and never for anything merely built at runtime.
The labels are left in flow at zero opacity rather than floated in pills, and that is what makes the reveal safe for the other gate. Pills would let the ticks sit at an even pitch, as they do on the page this was modelled on — and the moment the reveal turned them on for measurement they would lie over one another, so check-overlap.mjs would report every label sitting on the next. In flow, what the gates measure is the expanded rail that was already clean at 1280px. The pitch is uneven instead, because a row is as tall as its own label: one row on the home page, three on the waste garden.
It shipped appearing above 1232px. Ryan uses a browser whose tab sidebar takes its width out of the viewport, so a laptop was arriving under that and the rail he had just asked for never appeared at all. Lowering the number turned into finding out it had never been derived correctly.
The breakpoint was never measuring clearance. The rail and the page are both derived from the same centre line, so the gap between them is constant at every width — widening the window moves both outwards together and buys the prose nothing. The only thing that fails as the window narrows is the rail sliding off the left edge, so the left is now pinned rather than computed from the centre, which turns that failure into “stops moving”.
And the sum was holding back 288px for .qe-wide, which widens nothing on screen. This site’s own notes said two blocks break the measure — the masthead and the provocation. Neither does: the masthead never carried the class, and .qe-wide asks for 46rem inside a main capped at 34rem, where a max-width larger than its parent constrains nothing. The provocation renders at 448px, like every other block, and has done since the rule was written. Nobody can miss a block that was never wider, which is why it survived this long on a site with eight gates. It is left alone rather than changed, because widening the provocation is a decision about how this looks and the decision log is where that belongs.
Measured rather than calculated, which is what should have happened first: at 1024px the leftmost thing inside the landmark across the art-heavy sheets is 277–288px against a rail ending at 172px, so the real clearance is about 108px where the old sum was defending 24. The rail now appears above 1024px, 208px better than it shipped, checked on both sides of the boundary.
Collapsed, the rail was a column of identical rules at an uneven pitch — uneven because a row is as tall as its own label. Ryan’s read was that this was an imperfection worth leaning into. The trouble with leaning into it as it stood is that asymmetry only reads as asymmetry against a norm, and with nothing else varying the pitch read as an accident rather than a hand.
So the ticks were given the norm to deviate from, and the deviation is inherited from the sheet rather than invented: each tick is now as long as its section is tall, normalised across the page. The rail is a small scale drawing of the document, and you can see which section is the long one before reading a word. On the Dickinson sheet the longest section draws 32px and the shortest 9px, monotonic across all eight.
That it means something is the licence for it, not a bonus. A tick whose length varies looks like it encodes something, and this cabinet refuses decoration asserting a fact it does not have — a gold join on a sheet nobody corrected. Four treatments were drawn against the real stylesheet before choosing, and the one that varied length without meaning was refused for precisely that reason. The lean beside it claims nothing, which is what leaves it free to be ornament: up to 3.2 degrees, walked by the golden angle so the same sheet draws the same rail every time rather than rolling dice on each visit.
The two part company in plain view: the lean goes, the lengths stay. Plain view removes decoration and has never removed information, and splitting one effect into an honest half and an ornamental half is what makes that line drawable at all.
The question was whether small doodles above, below or around the rail would add to the handwritten feel — asked with the risk already named: that it might spend the negative space. Both arrangements were drawn and looked at, and the scatter was the wrong one. A cluster at the head of the rail lands in the top-left corner of the page, which is where a reader’s eye starts and where the skip link appears on focus, and it makes the rail’s decoration the first thing anyone sees. This component is unlabelled precisely so that margin stays empty; filling it spends the thing that made the rail acceptable.
What survives is the version that is not an addition at all. The rail’s rule already reads as a stem, and a stem that simply stops is the only unbotanical thing about it. It now ends in a terminus — two leaves and a bud, continuing the line rather than sitting beside it, pulled back past the nav’s padding to meet the border. Twenty-eight pixels, stroke only, in moss. It occupies margin nothing else wanted and puts no second object on the page.
It wears .qe-botanical, so the growth is inherited rather than restated: the stem draws itself on and the leaves unfurl, both already gated on reduced motion and already kept-but-stilled in plain view. Only the size is new, exactly as with the moth. Because it takes a palette token it follows the ground with no cabinet rule of its own, which was checked in both.
That no gate here measures a drawing against text is the reason it is small. check-overlap.mjs catches text sitting on text, so an ornament in the margin is guarded by nothing at all and could drift onto the measure at some width without a word being said. Keeping the mark inside the rail’s own box means the clearance already measured for the rail covers it too. Anything free-floating would need measuring by hand at every breakpoint, which is a standing cost this cabinet has not agreed to pay for decoration.
The entry above went out saying .qe-wide does nothing. That was an overcorrection and it was published three times before anyone checked paper. The first claim — that two blocks break the measure — was reasoned from a rule and was wrong. The second was measured on screen and then generalised to every medium, which is the same fault wearing better clothes.
@media print sets main { max-width: none }, so on a printed sheet that rule is the only thing holding the provocation in: it caps a block that would otherwise run the full width, and centres it. The class does not widen — on the one medium where it is live, it narrows. Reproducing the print condition and measuring: no effect at all at 717px of printable width, 3px at 739px, 80px at 816px. Its effect scales with the printer’s margins and is invisible at the defaults, which is why nothing ever looked wrong.
The lesson arrives here from a third direction. The colophon already says paper is a medium this house has been burned by, and both browser gates measure it separately for exactly this reason: paper is not a wider screen. The notes in queering.css and the guidance file now describe the rule as the paper-only narrowing it is, and the rule itself is unchanged — whether the provocation should break the measure on screen stays a design question rather than a defect.
No. 1, No. 2 and No. 7 were missing their On this sheet list. They run 2,045 to 3,098 words against 2,495 to 5,018 on the five that had one, so the bar the existing sheets set was already cleared and the gap was an oversight rather than a decision. All eight sheets carry one now. The opt-in stays in the markup: nothing derives a contents list from a word count, because which pages want one is editorial, and the pages that still decline all have a reason on the record.
“After the lede” turned out not to mean “before the first heading”, which was checked before anything was placed. Five of the existing lists carry opening prose after them — the Dickinson sheet nineteen blocks, the Quetelet sheet thirteen. A contents list is front matter for the sections, and the lede is not a section.
No. 2 puts its list somewhere no other sheet does, and that is authored. It has no lede, and all six of its headings are in the 2026 commentary — the 2022 essay above them is unheaded and stays that way, because the note directly above it says Ryan’s words are unchanged and a heading dropped into them would not be. A list at the top would name six sections that begin a fifth of the way down and say nothing at all about the essay, which is the reason the sheet exists. It sits immediately after that note instead, where the sheet says out loud that it is changing hands, and maps exactly what follows it.
2026 · 9 September
The ledger and the decision log had no addresses, so the aim that pointed at them was the thinnest receipt on the mission page Link to this section
Aim 12 says this site works in public with the working-out left in, and it pointed at two files on GitHub, because that was the only way to reach them. An aim whose receipt is on somebody else’s website is not much of a receipt. The attribution ledger and the decision log are now pages here — generated from the Markdown rather than retyped from it, because two hand-kept copies is the failure this whole house is organised against.
Every other generator here reads a page and writes Markdown beside it. This one reads Markdown and writes the page, and the direction is the design: those two files are working documents. The credit-source skill appends to the ledger; every session that settles something appends to the other. Making the page the source would mean editing a ledger entry in HTML, which is how a ledger stops being kept. Either direction is fine; two hand-kept copies is not.
It throws on a line it does not recognise, and then proves it did not drop one. Every block’s words are checked against the rendered text before anything is written — whitespace removed on both sides, because tags are word boundaries in the source and not in the output. That proof caught four faults in its own author on the way here, and three of them were the proof being wrong rather than the converter: it stripped a bullet, a table’s pipes, and then the underscores out of Photon Pulse_he_him, a study participant’s pseudonym the converter was right to leave alone. A guard that cries wolf gets relaxed, so the proof was made to model the converter rather than approximate it.
The real fault it found was **The lower-case *g* is kept** in the ledger — emphasis nested inside emphasis, where the inner pair is a letter being quoted. The first pass refused the nesting instead of reading it.
macOS is case-insensitive by default. A page at /decisions is decisions.html, and make-markdown.mjs writes a .md beside every page — so it would have written decisions.md, which is the same file as DECISIONS.md. The generator would have silently overwritten its own source with a round-tripped copy of itself, on the first run, with no error and nothing to restore from but git. attributions.md collides with ATTRIBUTIONS.md the same way.
Checked before a line was written, by creating AAA.md in a temp directory and asking for aaa.md. The addresses are /ledger — the site’s own name for that file in every footer it appears in — and /what-is-settled, which is the other file’s own opening line.
Its lede named the eight sheets, the colophon, the privacy policy and the register. It now also searches the aims, every attribution we have traced and every decision we have written down, so the sentence was false the moment the index was rebuilt. This is the third time a page that binds us has had to move in the same commit as the capability that changed it — after the privacy page twice. The pattern is the lesson: a claim only a human remembers is a claim that will eventually be false.
The index roughly doubled, and that is a real cost stated rather than hidden. 154 KB gzipped to 249 KB. It is fetched after the page renders and carries max-age=0, so an unchanged index is a 304 and no bytes move — the increase is paid when it changes, not on every visit. Both records were indexed rather than only the ledger, because a decision nobody can search is close to a decision nobody published.
The decision log carries one shell block, so make-markdown.mjs and make-search-index.mjs both threw on pre — the throw-rather-than-drop rule working exactly as intended, in two tools, within a minute of each other. The Markdown converter needed more than the tag. Its text handler collapses whitespace and escapes punctuation, which is right everywhere except inside a fence: the first output put a shell command and its continuation on one line with backslashes through the quoting. A fenced block is the one place in Markdown where neither pass is wanted.
The search walker indexes the block rather than skipping it. Skipping was the quieter choice and the wrong one — a command in the decision log is content, and a searcher looking for the deploy hook should find the page that runs it.
2026 · 9 September
A cabinet that publishes an attribution ledger, a privacy policy and a register of its own errors had never written down what any of it was for Link to this section
There was a page for what the cabinet holds, a page for how it is made, a page for everything we have got wrong, and a page for what the site knows about you. There was no page saying what we are trying to do. That absence is not neutral, and this site already knows why: a project with no stated aim is a project whose aims can drift with nobody able to point at the drift, which is the objection it makes to a quotation nobody can trace and a number nobody can re-derive. Sheet-less, numberless, and now written down.
The genre is the whole defence against duplication. The home page already carries 611 words of manifesto across three sections. A mission written as an argument would have restated most of it, and two copies of the same words drift — the rule this house repeats more than any other. So this is an index of commitments with receipts, which structurally cannot duplicate an argument: every aim ends by naming where it is already being practised, and an aim with no page keeping it would be visible as a hole. The form is Star Stuff’s, adopted deliberately; the aims are this site’s own and several have no counterpart there.
An aim you cannot fail is not an aim. The last section is a table pairing each aim with a condition somebody outside could observe, with no access to what we meant. Most of them are not hypothetical. The working tagline was once a paraphrase of Nick Walker wearing his name. Tuck and Yang were carried from settler colonialism to masking and the sheet nearly let their authority cover the move. And the plate said Seven sheets
above eight cards — a count in our prose nobody could re-derive, which is the last row of that table, committed on this site, this week.
What it refuses to claim. Stimpunks’ first programme is direct financial support to individuals, and a section says plainly that this site does none of it and should not be counted as though it did. No sheet here has paid anybody’s rent. The honest claim for a cabinet of readings is narrower and is stated at that width.
It is the first page in a second list at the foot of the home page. The founding papers is why the cabinet exists; The cabinet itself is how it is made and what it knows about you. Purpose above plumbing, and the split is Star Stuff’s too — see the entry below for the day the first list was built.
The page quotes the Stimpunks Foundation’s mission and Helen Edgar’s own landing page rather than paraphrasing either, because the paraphrase is where a mission goes soft and paraphrase-wearing-a-name is the failure the ledger exists to prevent. Both were read from the primary the day they were mounted, and both are logged.
Reading the primary found something, as usual. Two wordings of the Stimpunks mission sit on the same page — the statement block says the foundation builds tools that support people to live with dignity, challenge dehumanizing systems and design environments that honor difference as strength; the Mission Compass further down says enables people to live with dignity and stops. We quoted the longer, and the ledger records the discrepancy, because a reader who checks will find both and an unrecorded discrepancy is how a ledger loses its value.
Their capitalisation and their spelling are kept. House style capitalises Autistic and Disabled and spells honour; the quotation does neither. A quotation is not the place to apply house style, and this is the site that says so.
And one of their sentences turned out to be about Sheet No. 4. Stimpunks’ mission says We enable the weird, feral, chaotic, and magical people.
Sheet No. 4 is the history of that word being demoted from wyrd, meaning fate, to a name for people who do not fit. The sheet was not written to illustrate the mission; the collision was found by reading the mission properly, which is the argument for reading primaries in one sentence.
The aims run as one sequence across four group headings, which is four ol elements with start on three of them. The converter ignored the attribute, so the page said thirteen aims numbered 1 to 13 and /mission.md said 1–3, 1–5, 1–3, 1–2. A converter that silently drops an attribute is the same drift as one that silently drops a tag, which is the rule that already makes it throw on an unknown element — it arrived by the other door. It now reads start and throws if it is not a number.
Two components were added for the page and both are the bare tier: the one-sentence statement, and the aims list. The statement is not a blockquote — nothing is being quoted, it is the site speaking, and marking our own words as a quotation is the mistake most of these rules exist to avoid. The aims use native ol numbering rather than a counter on a pseudo-element, so a screen reader announces the position, and no colour goes on the marker: a ::marker is invisible to the contrast gate, which is exactly how this register’s own entry bullets once sat at 2.15:1 unreported.
2026 · 9 September
An eighth gate, ported the same day the failure it catches happened twice — and its first honest run found fifteen more Link to this section
The house rule is to port a Star Stuff check when the failure it catches becomes possible here. check-card-order.mjs did not clear that bar; it cleared a higher one. The plate shipped out of sequence, a sibling nav shipped out of sequence, and all seven existing gates passed both — correctly, because order is not colour, position, freshness, routing, structure, headers or the manifest, and a grid in the wrong order looks exactly like a grid in the right one.
Star Stuff checks ascending order within each series, because one of its collections interleaves Zine and Field Guide numbers on purpose and a single merged sequence would fail a page for doing what it means to do. This site has no series. There is one accession run and the kind chip is a label on it — No. 1 a Reading, No. 2 an Essay, No. 8 a Wall — and they ascend together.
Ported unchanged, that split would have been worse than no gate. No. 8 is a Wall and No. 7 is a Reading, so 1, 2, 3, 4, 5, 6, 8, 7 is two perfectly ascending series. Proved rather than reasoned about: the broken plate was put back, the series split was patched into the tool, and it reported ok · 0 problem(s) on it. Then the split came out and the same plate reported No. 7 follows No. 8. A port is a rewrite when the thing being ported encodes an assumption the new site does not share.
Every rule was made to fail before it was believed. Rule 1 on the restored plate; rule 2 by dropping a card outside every grid; the empty-authority guard by breaking the card selector on the plate and watching it report NOT MEASURED rather than clean — the overlap gate’s empty-pass lesson arriving in a second tool. And --check both ways, because that flag has now been load-bearing and missing twice in this repo: exit 1 with it, exit 0 without.
A sheet’s number and kind are written out once on every page that cards it — ten copies of one fact, which is the drift this site names in every rule it has. So the gate got a third rule: every card must agree with the plate about the sheet it points at. Rule 1 is only as good as the numbers it sorts, and a grid ordered by a wrong number ascends perfectly.
It found two mislabels and thirteen drifts on its first run. /404 called Sheet No. 2 a Reading
— it is Ryan’s own essay, and the plate says Essay — and called Sheet No. 8 a Reading
where the plate says Wall. Separately, the No. 8 accession wrote its kind chips with articles, A wall
on seven pages and A reading
and An essay
throughout its own sibling nav, against bare nouns on the fifty cards that came before. All fifteen now say what the plate says.
The plate is the authority, not the majority. A vote among sibling navs would have let A wall
, copied onto seven pages, outrank the one page whose subject is what this cabinet holds.
And where the plate is silent, the copies must still agree with each other. The plate does not card itself, so nothing could arbitrate / being a Plate
on one nav and The plate
on another; that is reported apart, once per address rather than once per page, because printing it twice invites somebody to fix whichever file they read first. No other kind chip here carries an article, so it is Plate
.
It does not check the plate against tools/pages.mjs. They agree today and the temptation is obvious, but they are two different facts: the number records when a sheet was accessioned and pages.mjs records the order a reader should meet the pages. Mount Sheet No. 9 and decide it reads best third, and the two diverge legitimately. Coupling them would turn an editorial decision into a build failure.
It also declines to order the unnumbered cards — there is no mechanical answer to where the colophon belongs relative to the register — and it says so in the summary rather than quietly leaving six cards out of the denominator.
2026 · 9 September
The plate said seven and carried eight, and two of them were in the wrong order — on the one page whose job is to say what is here Link to this section
Sheet No. 8 was mounted, carded and logged, and the sentence above the plate was left saying Seven sheets, so far.
The card went in at the end of the list rather than in its place, so the plate ran 1–6, 8, 7. Neither is a hard fact getting away from us; both are the register’s own bookkeeping getting away from us, which on a site that publishes an accession register is the more embarrassing of the two.
The count is a hand-written number beside a list that grows. Every other statement of the same fact was already right: /search says the eight sheets
, /404 says the eight sheets
, and tools/pages.mjs has held all eight in order since the sheet was mounted. One sentence in index.html disagreed with all three, and it is the sentence a first-time reader meets first.
The order was an append. A new card belongs where its number belongs, and this one was added after the last li instead. It is invisible in a review of the diff — the markup is valid, the card is correct, and the number is right on the card itself — and obvious the moment anybody reads the plate downward.
Having found the plate out of sequence, the obvious question was whether anything else was, so all fourteen pages were counted rather than the one that had been reported. Sheet No. 5 listed its siblings 4, 1, 2, 3, 6, 7, 8. Every other page was already ascending. The card is now in its place.
This is the failure check-card-order exists to catch on Star Stuff, and this repo has not ported it. The rule here is to port a gate when the failure it catches becomes possible; it has now happened twice in one afternoon, in two files, and neither instance broke a single one of the seven gates. The ordering truth is already written down and machine-readable — tools/pages.mjs — so the check has something to compare against. Recorded here rather than quietly fixed, because a correction that leaves the gate unbuilt is a correction waiting to be made again.
2026 · 9 September
The four pages that are not specimens were only ever in the footer, which is where a site puts what it hopes nobody needs Link to this section
The plate names eight readings and nothing else, so how the site is made, this register, the finding aid and the privacy page lived in the footer of every page and in no page’s content. A site that publishes an attribution ledger and a privacy policy should not file both under fine print. They now have a section of their own at the foot of the home page, under the name the group already had in tools/pages.mjs — so the plate, the finding aid’s manifest and /llms.txt call this set the same thing rather than three things.
The bare tier, and that is the whole design. Space only, no fill, no box — the surface this house reserves for the cabinet talking in its own voice. Fifteen components once shared one card treatment here and a reader could only rank them by reading the label; giving the furniture the plate’s clothes would be that defect deliberately reintroduced. The plate does the ranking, and this list agrees with it by declining to compete.
Back matter, not front matter. It sits last inside main, where the links it replaces already were. That is the correction the register paid for when a contents list at the top of this page delayed its first entry by three and a half screens: furniture at the top costs every reader, furniture at the foot costs none. The home page’s own content is a contents list already.
A description list, because each entry is a name and a gloss on it. The Markdown converter writes a term and its definition, so the copy an agent fetches at /index.md keeps the pairing instead of flattening into loose lines. It is inside main rather than beside the sibling nav for the reason the contents list may be: a list of the site’s own pages on the site’s own index page cannot be one sheet’s navigation indexed as another sheet’s content.
A dt that is entirely a link is not an inline link inside a sentence, so WCAG 2.5.8’s inline exception does not cover it — and the ink alone is 23px tall. Padding takes each target to 45px, which is 2.5.5’s figure rather than the 24px floor. It grows into the gap above the description instead of pushing the entries apart, so the list did not get taller to get reachable, and the next target starts a whole description later, so no two can touch. Measured afterwards, because nothing in the seven gates measures a hit area and a number nobody checked is a number.
The padding is also spacing, so the scale is taken net of it. 0.7rem inside an entry and a full --qe-space-3 between two — two to one, which groups the pairs by eye with no rule drawn anywhere. Left uncompensated the list would have started 11px below where every other block on the page starts, and an unauthored deviation makes the authored ones mean less.
The home page’s footer lost the four links and no other page did. On this page they are two paragraphs above; everywhere else the footer is still the way there. One page, one list of the same four things.
2026 · 9 September
A site that had spent a day removing its only third-party request mounted a YouTube player, and the whole of the work was making that honest Link to this section
Ryan and Helen listen to Eliot read The Waste Land together, and a site about reading things closely is a strange place to make somebody leave in order to hear one. So there is now a recording under the lilac. It cost a sentence this site had been proud of. /privacy said, of the Google fonts removed that morning, It was the only one.
That is no longer true, and the honest replacement is not a smaller boast but a more precise claim: reading a page makes no third-party request, and there is exactly one place where you can choose to make one.
Measured rather than asserted. On load, the set of non-local hosts the page contacts is [] — empty. After the press it is exactly one, www.youtube-nocookie.com, which is the host /privacy names. Both figures came out of a headless run reading performance.getEntriesByType('resource'), not out of a reading of the source.
The poster is drawn, not fetched. YouTube’s own thumbnail would have been a request to i.ytimg.com on every page load, before anybody pressed anything — which is exactly the Google-fonts failure this site had just spent a day removing, wearing a different hat. It is a scatter of the same lilac florets as the bush above it.
Without JavaScript the control is an ordinary link to the video, and pressing it goes to YouTube. With the script it stops navigating and swaps the player in place. Both are a request the reader chose, which is the same footing as every other outbound link here — and that link is also what survives into the Markdown copy, so an agent reading /index.md gets the address rather than a hole where a player was.
A third script, for the reason there was a second one. queering.js may never put content on a page; this script’s entire job is to put somebody else’s content on one. Widening that boundary to fit would have cost the boundary. It creates no words either — even the player’s accessible name is read from data-embed-title in the markup rather than written in the script.
check-metadata.mjs has enforced no page may fetch from another origin
since the fonts came home, and it did it by scanning HTML attributes. That check would have reported this page perfectly clean. The request lives in a script, and a gate that cannot see the place the failure would occur is a gate that certifies the failure. Three assertions were added, and each was made to fail before being believed:
Every third-party origin our own scripts mention must be named on /privacy. Not forbidden — named. Proved by renaming the host on the privacy page and watching the run go red. It found a real fault on its first honest run, too: the script contacts www.youtube-nocookie.com and the policy named the bare domain, so the policy was one subdomain away from being wrong about its own site.
A facade must stay a facade. An element carrying data-embed-id must have a plain link to the same video beside it — that link is the no-script path and the reason the request counts as chosen — and the served page must contain no iframe at all. Proved by deleting the link, and again by adding an iframe. The second turns out to fail twice: the Markdown converter throws on the unknown tag before the new check is even reached, which is the converter’s teach me or I will drop content
rule catching a privacy regression by accident.
The contrast gate caught the other one. The player’s subtitle was --qe-moss on --qe-paper-deep: 6.9:1, clearing WCAG AA and missing the house 7:1 by a tenth. That is the same surface this site already removed a recessed panel over, and it is the third time --qe-paper-deep has done this. The line is --qe-ink now, and the hierarchy is carried by size and weight, which is what should have carried it in the first place.
The absolute claim appeared in the lede, in the deliberately-not-here list, in the JSON-LD description and in three social descriptions. A privacy policy is a binding statement of practice, so a change that makes one false and fixes it next week has published a false one for a week. All of them moved in the same commit, and the page gained a section of its own describing what pressing play actually costs.
What that section refuses to say is the part worth noting. youtube-nocookie.com is Google’s privacy-enhanced player domain and it does not set advertising cookies on load. It is not anonymous: the IP address still reaches Google. No cookies
and no tracking
are different claims, and describing the first as the second is the sort of comfortable imprecision this page exists to avoid. It says so in those words.
This is the second time the finding aid’s lesson has been applied — a page that binds us is a page to re-check against the code every time the code grows a capability — and the first time the gate was extended rather than just the prose. A claim only a human remembers is a claim that will eventually be false.
2026 · 9 September
A lilac bush from Ryan’s own yard, standing above the footer, and the song under it belongs to a man almost nobody names Link to this section
Drawn from a photograph of the shrubs in Ryan’s garden, and mounted because the site had just borrowed a colour and had nothing of the actual plant in it. It closes the home page the way a plate closes a chapter. Ezra Furman, whose song gave the site those two colours, has said what they are for: So I wrote this theme song for us, and gave us some gang colors: lilac and black.
Us, there, is trans women, and the statement around that sentence is about being ready to defend one another’s lives. Furman, in Clash. The flower on this page is not a decoration borrowed from a song; it is the plant the colours were named after, growing in somebody’s yard.
A lilac is many slender woody stems from one clump at ground level, bare for the lower third, fanning into a dome half again as tall as they are. Both of the first two drafts put the bare stems at more than half the height and produced a hand fan — a shape that is unmistakably not a shrub, and unmistakably not this shrub. The proportion was eventually measured off the photograph rather than guessed.
The dome’s underside arches, low on the flanks and high in the middle, so the bare stems show through the centre exactly as they do in the photograph. One function in the markup defines that arch, and both the trunk tips and the flower placement obey it — two copies of that curve would drift, and the drift would be a bush whose trunks stop in mid-air.
Placement of the flowers went through three schemes. Rings left the middle hollow and read as a wreath. Uniform random sampling clumped into two lobes with a hole between them, which is what forty random points actually look like and why nobody should reach for random when they mean even. Staggered rows inside the ellipse give even coverage by construction, and that is the version here.
A panicle is a mass, not a chain. A lilac thyrse is a dense cone of hundreds of tiny four-lobed florets; the first attempt strung eleven large puffs along an axis and read as a bunch of grapes. It is drawn now as a triangular scatter stippled between the three lilacs, with a few four-lobed florets laid over it for texture. Drawing every real floret would be thousands of elements for a shape a reader sees as one thing.
The drawing is about seven hundred circles. Raw, it is 85KB; compressed, which is how every response here is actually served, it is nine, because markup this repetitive is very nearly free to a compressor. The home page went from 43KB to 143KB raw and from about 7KB to 22KB over the wire. Measured before it shipped rather than assumed either way.
The obvious optimisation was tried and reverted. Defining the leaf and the floret once and referencing them cut 20KB raw — and rendered every cloned leaf and floret in black. Outer stylesheet selectors do not cross into a use shadow tree; only inherited properties do, so .leaf and .floret simply stopped matching while the definitions themselves still looked perfectly correct. That is a fraction of a kilobyte compressed in exchange for a styling path that fails silently, and the comment in queering.css now says so, because the next person to look at seven hundred circles will have the same idea.
A class with no rule renders black, and nothing here catches that. An earlier pass had the generator emitting puff-pale while the stylesheet only knew puff and puff-deep: a third of every flower cluster came out in solid black, and it was found by looking. Star Stuff’s check-classes is the gate for exactly this, and it is the strongest candidate for the next port — the failure it catches is now known to be possible here, which is this repository’s stated bar.
In print the mass becomes an engraving. Every floret prints as an open circle in line, and the tone comes from how densely they overlap rather than from ink coverage — which keeps the design sheet’s claim that these drawings print as line work true, and looks better than the three flat greys the screen fills would have made. Checked under print emulation, where a second fault turned up: the print block sat above the base rule at equal specificity, so the caption printed moss-green. Source order decided it, and the print block now comes last.
April is the cruellest month, breeding / Lilacs out of the dead land
— the opening of The Waste Land, and Helen’s immediate association with the word. It is a useful one to have standing over this drawing, because it files the flower on the cruel side of the season: lilacs as what the dead land produces, memory and desire stirred up together, spring as an imposition rather than a mercy. A page that has just spent a paragraph on gang colours and one on a torch song is well served by a third reading that refuses to be consoling.
1922, so it is public domain in the United States, and four lines can be mounted whole rather than trimmed — which matters on a site whose stated risk is the tightened quotation. The wording was checked against Project Gutenberg’s transcription of the 1922 text rather than taken from memory; the Poetry Foundation’s copy, which is what the citation links, refuses automated requests. Cruellest
keeps its British spelling, as the house rule requires inside a quotation.
The song reached this site the way it reaches most people — through Nina Simone and Jeff Buckley. It is neither of theirs. James Shelton wrote words and music in 1950, for a Broadway revue called Dance Me a Song that ran a few weeks, where Hope Foye introduced it. Eartha Kitt recorded it in 1953, thirteen years before Simone and forty-one before Buckley.
This is the site’s characteristic failure in its most ordinary form — not an invented source, an absorbed one. A cover so much better known than its original that the original stops being mentioned is the same motion as a definition trimmed to fit a masthead: the work survives, the maker falls off it. So the caption names Shelton first and calls Simone and Buckley readings, which is what they are, and is also the argument this whole site is built on. One song, read three ways.
2026 · 9 September
A moth with the Earth where its body should be, in somebody else’s two colours, and the hardest part was stopping the middle of it from looking like a brain Link to this section
Ryan’s, and it is two borrowings at once. The cover of Nick Walker’s Neuroqueer Heresies sets a human brain where a swallowtail’s body would be; Ezra Furman’s Lilac and Black supplies the palette and the line the palette comes wrapped in — We wear the lilac and black
. Put the Earth where the brain was and you have this site’s name as a drawing. Both debts are stated in the figure’s own caption, which is the only version of this that is defensible here.
Every other drawing on this site sits above the prose as a masthead, or in a corner as a vine. This one closes Queering is a verb, because that is the section it is an argument about: Walker’s coinage, our extension of it, and a picture that performs the extension rather than restating it. The header spray at the top of the home page is untouched — it was never the thing to replace.
The surface is bare. Space only, no fill, no box: it is our own drawing with our own caption under it, which is the default tier and not an object mounted from elsewhere. The one dark-ground version drafted for review was refused for that reason as much as any other — a black card on a vellum sheet is a fourth surface, and the three-surface rule exists so that a reader can rank a panel without reading its label.
It wears .qe-botanical as well as .qe-moth, and that is deliberate. The growth motion, the stroke-drawn stems and the unfurling sprouts are all written once; only the fills are new. A second copy of that idiom is a second thing to keep in step with prefers-reduced-motion, and the reduced state has to be the finished drawing in both.
--qe-lilac takes the forewing, --qe-lilac-pale the hindwing and the sea of the globe, and both have --qe-cab-* counterparts aliased through both ground switches. The decorative five is a decorative seven now, and the sentence on the palette sheet that counted them has been recounted — a number in prose that nothing checks is a number that goes stale silently, and this one had been true since the site shipped.
The pale one goes darker in the drawer, not lighter. That is the gating-surface inversion arriving in a component with no text in it: in daylight the wash is the recessed thing under the wing, and lifting it in the cabinet would have it out-shouting the ink line. Neither token is for text in either ground, so 7:1 does not apply — there is not a letter anywhere in the drawing.
Black is --qe-ink, so the black inverts. In daylight the outline and the continents are near-black on vellum; in the drawer they are cream. The song says lilac and black and the drawer says otherwise, and the drawer wins, because the alternative is a literal black line on dark brown that nobody can see. The one version that would have kept the black in both grounds was the black card, and it lost on the surface rule above.
The print sheet flattens the wings to line work like every other drawing here, with one exception written into the rule: the continents keep their fill. Flatten those along with the wings and the globe stops being the Earth and becomes a ruled circle.
This is the funniest available failure and the least acceptable one. The drawing quotes a book cover that has a brain in the middle of it. Hand-drawn continents — three separate attempts at them — came out as a pair of symmetrical dark blobs either side of a central meridian, which is a Rorschach card, which is to say: a brain. A picture whose whole point is that the Earth is where the brain was cannot have a middle that reads as the thing it replaced.
So the coastlines are coarse lat/lon outlines put through an orthographic projection centred on 25° west and 12° north — the Atlantic view, the only one where the Americas and Africa are both legible. Points on the far side are pushed out onto the limb rather than folded back across the disc, which is what a continent going round the edge actually looks like. The foreshortening is Earth’s and not ours, and Africa is unmistakable at a forty-pixel radius, which is the size that matters.
It has no tails, after four attempts at them. Hanging straight down they read as legs; swept outward, as a bracket; curled inward, as a moustache; integrated into the hindwing path, as a boot. What actually says moth is a broad fanned hindwing and a feathered antenna, both of which it has. The cover’s tails say swallowtail, which we are not, and the caption carries that reference instead of the drawing pretending to.
One thing the review process itself taught: the first four screenshots showed no wings at all. Every wing is inside a .sprout, which starts at opacity: 0 and unfurls on a delay, so a screenshot taken half a second after load is a photograph of an animation that has not happened. The growth gating is correct and the reviewer was wrong; noting it because the next person to check a drawing here will hit the same thing.
2026 · 9 September
A real herbarium stamps its sheets with an accession number that is a row in a ledger, which is the whole reason this one could have it and most of the work was proving the ink was legal Link to this section
Prompted by Ryan noticing the oval stamp on a scanned sheet from the Ada Hayden Herbarium at Iowa State University — the institution’s name around the ring, its parent below, and 497892 across the middle. The suggestion was that a faded one would add to the sense of age, and it does. What it cost was a measurement, because faded and 7:1 are the same argument from opposite ends.
The faded look was measured before anything was drawn, and every candidate failed. --qe-lichen is 2.15:1 on paper — the exact figure this repository already uses as the injected value that a contrast run must report as FAIL, and the same one the register’s entry bullets sat at unreported. --qe-verdigris is 3.42:1. Neither clears 7:1, and neither clears the 4.5:1 large-text floor either, so there is no size at which a pale green letter becomes permissible here.
So the letters are --qe-moss at 7.8:1 in daylight and 7.2:1 in the drawer, and the age is carried entirely by the ring: two ovals with a wedge lifted out of each, and a few degrees of rotation authored per sheet. That is this cabinet’s standing rule — the colour goes on the rule and never on the glyph — and it turns out to be what a real understamped impression looks like anyway. The outline breaks long before the letterforms do. Nothing was given up to get the ink legal.
The number is real, which is the only reason there is a stamp at all. Ada Hayden’s 497892 is a row in a ledger somebody can go and read. A six-digit number invented here to look convincing would be a gold join on a sheet nobody corrected — decoration asserting a fact — and it would be the worst possible place for that failure, on a site whose one stated correctness requirement is attribution. What is real here is the sheet’s number and the day it was mounted, both of them entries on this page.
It says Queering Earth alone. The obvious move was to name Stimpunks and More Realms the way the Iowa stamp names its parent institution, and two custodians do not fit the oval — at that size the lower line crossed its own ring. The layout is not the argument, though: a stamp asserts a single custodian, this site is a collaboration, and Queering Earth
is the one name that is true of the whole of it. The two organisations are credited where credit is a sentence rather than a mark.
No sheet named its own number anywhere inside its landmark before today. Other sheets’ cards say it, from outside main where the mirror cannot see them, and this register says it constantly. So the stamp adds a fact rather than making a second copy of one, and there is no drift surface: it sits in one block with .qe-provenance, which states the same accession in words. The stamp is not a link, either. The provenance line beside it already points at the accession that put the sheet up, and a second tab stop landing on the same anchor a few millimetres away goes nowhere new.
mix-blend-mode: multiply is what makes the mark look stamped rather than printed: the sheet’s own foxing comes up through the ink the way it does through a real impression. On the dark ground it took a mark measuring 7.2:1 down to very nearly nothing — multiply darkens towards the ground, and in the cabinet the ground is the dark thing. Caught by looking at it in the drawer.
This is a blind spot in check-contrast.mjs and not an oversight in it. The tool composites computed colour pairs, so it saw --qe-moss on --qe-cab-paper and reported the figure that pair measures. It has no concept of a blend mode, and it never will without becoming a screenshot differ. It joins the two exemptions already written down: a ::marker, which is not an element with text of its own, and a texture, which varies luminance per pixel. A pass is not permission, and this is the third way to earn a false one.
The fix is a token rather than a second selector, because this is the fourth time that lesson has arrived. --qe-stamp-blend is multiply in :root and normal through both ground switches — the same shape the foxed-paper wash, the shadow a lifted sheet casts and the pale flesh of a specimen all ended up in, each of them a property that differs between the grounds and is not a colour. Two selectors carrying one decision is two selectors that drift.
The mark is in flow, at the head of the provenance line, and the corner version was refused. A stamp belongs in a corner of a real sheet, and an absolutely positioned one lands on the prose — at a narrow width, at 400% zoom, or under a long heading — which nothing in this repository can currently see happen. Star Stuff has check-overlap for exactly that, and the house rule is to port a check when the failure it catches becomes possible here. Not floating the stamp is cheaper than porting the gate, and the accession block reads better as one object regardless.
The stamp shipped and Ryan could not see it. The markup was live and correct, the stylesheet on the server was live and correct, and the browser had one of each from either side of the deploy: a paragraph of three unstyled spans where an oval should have been. A force reload fixed it, which is the signature. Every page here revalidates on every visit; queering.css was cached for three hundred seconds. For five minutes after any deploy, a returning reader got new markup with the old rules.
The comment in _headers predicted this exact event, in these words: a change that adds a class and its rule together would render unstyled for one visit.
It was a known, deliberate trade, and the entry in DECISIONS.md that made it is careful and mostly right — fingerprinting the assets really would churn twelve HTML files per stylesheet edit and cost this register the legible diffs it depends on. That refusal stands.
What was missing was a third option rather than a better answer to the two. The choice was posed as fingerprint against bound the cache, and nobody weighed giving the shared assets the same max-age=0, must-revalidate the HTML already has. It needs no generator, no rewritten pages and no gate, so it costs nothing the refusal was protecting; it closes the window to zero rather than to five minutes; and it is more bustable than three hundred seconds, which was the stated priority. The price is one conditional request per visit that returns 304 with an empty body, alongside the revalidation the page is already doing.
The reason this is coherent and not merely tidy: they fail when the page fails. No stale-if-error on the stylesheet — RFC 9111 forbids pairing it with must-revalidate, and it would buy nothing anyway, because the HTML fails closed and an unreachable origin leaves no document for a held-back stylesheet to apply itself to.
search-index.json had the same defect and needed the opposite directive. It was ten minutes, and it is derived from the sheets — so it is exactly the case the old note's own rule excluded: staleness where the stale copy can disagree with the fresh HTML. After a prose edit it could hand a searcher a snippet quoting a sentence that is no longer on the page it cites, and on this site that is the worst available failure. It is max-age=0 now without must-revalidate, which is deliberate: zero removes the skew, and omitting the stricter directive is what keeps stale-if-error legal. The index is fetched after the page has rendered, by a reader who has typed something, so the document exists either way and a finding aid a few minutes behind is better than one that fails closed. That judgement was in the original note and it survives.
The stamp belongs in the corner of a real sheet and it is not in the corner of these. An absolutely positioned mark lands on the prose at a narrow width, at 400% zoom, or under a long heading, and nothing here could see that happen. Star Stuff has check-overlap.mjs for exactly it, and the house rule is to port a check when its failure becomes possible. Refusing a design for want of a gate is a reason to build the gate, so it is ported — and the first thing it did was catch the refused design: seven collisions on Sheet No. 2, with the stamp’s own Sheet No. 2
sitting on the masthead’s Queering Earth
.
It is not a copy. The reveal step and the browser client were lifted out of check-contrast.mjs into two shared files rather than duplicated. The reveal step is the one that mattered: it is the list of things a page builds at runtime, it is editorial, it grows, and its own comment tells the next author to add to it — so two copies would be a component one gate learns and the other does not, which is the failure the shared entity table already exists to prevent. Both extractions were proved to change nothing: the contrast gate printed a byte-identical report before and after.
Two faults in the imported tool turned up on the way, and both are now fixed here. Its clip check walked upwards from an element’s parent, so an element clipping its own overflowing text was never treated as the thing doing the clipping. And the function that says where a collision is reported page
for absolutely positioned blocks — the precise case the gate exists to catch, given no address. Both are recorded in DECISIONS.md, because Star Stuff is not edited from a session in this repository.
Two of its four findings cannot fire here, and that is a house rule showing up somewhere nobody expected. There is not one rendered text element in any page on this site: the botanical art is 535 paths, 381 groups and 160 ellipses and circles, named to a screen reader by aria-label. That is never an image of text, and it means the two faults that motivated this tool upstream — a drawing’s label on another label, and a label on the prose — have no instance to find. They are kept anyway: dropping them would stop the sweep measuring SVG text, and the day a sheet carries a label the gate would report a clean page it never looked at. They were proved by injecting labels, and the file says so rather than letting them pass for tested.
An exemption was removed for exempting nothing. The skip link went on the ignore list on the strength of the upstream note, where its equivalent fires on five of seven pages. Tested here, the list is empty and the count is still zero, because this site’s skip link has no clipping ancestor to be outside of. An exemption that exempts nothing is a named hole a real fault can fall into, and worse, it reads as evidence that somebody checked.
It measures paper too, which the tool it came from does not. Star Stuff hands print collisions to a paper gate; this repository has none, and paper is the medium this house has already been burned by — forty-four of forty-six pages once printed blank. Three passes now: the screen, then US Letter and A4 at the width a sheet actually leaves for content.
The viewport moves, and that is the whole reason the pass is worth having. The contrast gate emulates print media at desktop width and is right to, because it measures colour and colour does not reflow. A collision is a position. In print this stylesheet lets main run the full width of the sheet, so measuring paper at desktop width measures a line length no printer produces. The counts say it plainly: this page is 4,884 pieces of text on screen, 3,567 on Letter, 3,604 on A4. Both papers, because those last two numbers differ — twenty-two pixels is enough to rewrap a line and move a hand-placed mark, so picking one and calling it print
would be this pass’s own mistake at a smaller scale.
And the guard against measuring nothing is per pass, which turns out to catch the original disaster. A stylesheet that renders nothing on paper measures zero there while measuring hundreds on screen — and the run reports the page as not measured, naming which passes came back blank, rather than reporting it clean. Forty-four pages printing blank would not survive this gate. That was not why the guard was written, which is the pleasant kind of accident.
Pagination is the honest limit. Print emulation reflows to the width but does not break a document into sheets, so a collision that exists only because two blocks land either side of a page break is still invisible. break-inside: avoid on the accession block is there because pagination is real. Reaching it means pulling text positions out of a generated PDF, which is a different tool and not a flag on this one.
The five existing gates were all green while the stamp rendered as three unstyled spans. Correctly green: check-markup reads tags, check-sitemap reads the manifest, check-contrast composites colours, check-metadata regenerates the derived layer, and check-addresses — the one that already probes the edge — asks about redirects. A cache policy is invisible to every one of them. So is a blend mode, which is the other thing that went wrong today; that one has no mechanical answer and is written down instead.
tools/check-cache.mjs asks one question: can a reader be served new markup with an old asset? Four checks offline — an asset outliving the pages that fetch it, an asset nobody has ruled on, must-revalidate paired with a stale- directive that RFC 9111 makes it cancel, and a rule left behind by a rename — and with --live it asks the site, which is the only thing that actually knows.
It does not flatten everything to zero, and a version that did would have been switched off within a week. The rule is the one this register already stated: staleness is safe only where the stale copy cannot disagree with the fresh HTML. A stylesheet knows the class names and can disagree. A derived index can disagree with the page it cites. A font cannot — it has no knowledge of structure, and a year of caching on the faces is correct. So the plates keep their thirty days and the faces their year.
Which assets are coupled is declared and never inferred, for the reason an entry’s data-sheet is declared: the inference is available, plausible and wrong. Nothing in a file’s bytes or its extension says whether its content knows about markup — queering.js and fonts/newsreader-latin.woff2 are both static files fetched by every page, and only one of them can contradict a class that shipped this morning. Two lists, each entry carrying its reason, and the gate fails on an asset in neither.
It reads our own scripts, because an HTML scan would have missed the file that prompted it. search-index.json is reached by a fetch inside queering-search.js and appears in no attribute on any page. Proved rather than assumed: with the index put back to ten minutes the gate names it, and that finding is reachable only through the script.
All five detectors were made to fail before the gate was believed, and the first attempt at proving the main one was a false pass — the edit meant to loosen the stylesheet had loosened the catch-all rule with it, so the pages moved too and there was genuinely no skew. The test was wrong, not the gate, and a gate whose green run has never been earned is worth nothing. Two findings were then regrouped: one wrong line covering sixty-five plates reported sixty-five times, and one wrong stylesheet policy reported once per page. A defect described fourteen times hides the next one.
Indexed, eight stamps put eight near-identical records carrying the site’s own name into the aid — Queering Earth Sheet No. 4 Accessioned 8 Sep 2026
— which is most of what a search for Queering Earth
would then return. That is precisely why .qe-masthead is already skipped, and the reasoning transfers without amendment.
Nothing becomes unfindable. The provenance line beside each stamp says Mounted 8 September 2026
in ordinary prose and is indexed; every sheet number is written out across this register’s own entries. A stamp is the sheet restating its accession in the object’s own form, not a new fact to find. It stays in the Markdown sibling, where there is no ranking for it to crowd — an agent reading /on-being-ill.md gets the transcription the way a herbarium record would carry it.
2026 · 9 September
A cabinet made almost entirely of other people’s sentences grew a search field, which is a machine for trimming other people’s sentences, and most of the work was teaching it when to refuse Link to this section
A conventional search snippet is this site’s characteristic failure, industrialised. Twenty words either side of the match, an ellipsis at each end, no maker and no citation — pointed at a page of prose that is a perfectly good convention, and pointed at eighty-two mounted quotations it manufactures exactly the artefact ATTRIBUTIONS.md exists to prevent, once per result. The whole feature is built around refusing to do that, and everything below follows from it.
Quoted text is indexed apart from ours, and the two are treated differently on purpose. A blockquote becomes one record carrying its cite and its caption, and a result that matches inside one renders the quotation entire with its maker attached — never a window onto it. Our own commentary is cropped, because it is ours and the rest of it is one click away. Where one of our sentences has a short quotation set inside it, the crop widens rather than cut in: the generator records the character range of all 190 of them, and the window grows until nothing is half-covered.
Those ranges are proved rather than trusted, and the first version of them was wrong. Offsets were recorded while the prose was being built and the prose was tidied afterwards, so every fence sat between four and fifteen characters downstream of the quotation it was supposed to protect — a guard reporting success while pointing at the wrong words, which is worse than no guard. The prose is now canonical as it is written and nothing may rewrite it later, and the generator slices the finished text at each recorded offset and throws unless it gets back exactly the characters it wrote. That check was made to fail before it was believed: offsets nudged by three characters, changelog.html reported by name, exit code 1.
The register is filed second, and the register is why. At 25,359 words it is more than a quarter of the site, so ranked flat it would bury the sheets on any search naming a writer. Its entries come under their own heading below the sheets, wearing the kind chip they already wear. The same page’s own finding — that an accession headline is a sentence by design and averages 148 characters — is why the new sheet points at the register rather than reprinting its eighteen headlines.
An attribution we have retracted is not searchable. Plain text has no vocabulary for this is the reading we got wrong, so an indexed del would surface a corrected attribution as though it were the live one — the same flattening that keeps del and ins as HTML in the Markdown siblings. Checked rather than assumed: the site’s one struck attribution is PROSPERO
, and the Miranda sheet says Prospero thirteen times in prose besides, so nothing became unfindable. The correction itself is findable here, in ordinary words, which is where it should be read.
The sheet carries the whole cabinet as ordinary HTML, page by page and section by section, generated into it between two markers the way the typefaces are written into the stylesheet. That is what a reader without JavaScript gets, and what the mirror indexes: the finding aid is the site’s one client-rendered page, and a landmark holding an empty results div would have said nothing to either. Nobody types that list, so no heading in it can drift from the heading it names.
Search shipped reachable only from the footer, which on Sheet No. 6 is nine thousand words below the fold — and most arrivals here are not by way of the plate. A shared link or a search result drops a reader straight onto a sheet. So it sits in the control cluster at the top of all fourteen pages now, which is also where it belongs by argument rather than by convenience: Search, Cabinet and Plain view are three ways of looking, and that cluster is the instrument tray. It is outside the landmark, so nothing about it reaches the Markdown, the search index or the mirror — verified by regenerating and getting zero changed files.
The first proposal was to hide it in the header illustration, as a magnifier resting on a flower, and it was measured rather than argued about. An a inside SVG is a real link and is keyboard-focusable — that part works. On a 375px phone the masthead art renders at 335px for a 470-unit viewBox, so one viewBox unit is 0.713 css pixels: a flower is drawn at 29 units and lands at 21px, and a link wrapped round one measured 12×12. Reaching 44px would need a 62-unit invisible disc — larger than the biggest element in the whole drawing and 37% of its height, swallowing the blooms either side. Two further faults would have followed: the stems are fill: none and so are not hit-tested at all, and a keyboard user would land on an unlabelled shape in the middle of a picture, which is the same objection this cabinet already makes to hover-gated section marks.
The loupe survived the argument, at a size where it can be seen. A botanist’s folding pocket lens, drawn at 22px beside the word. Sixteen candidates were rendered between 16 and 90px and looked at, which is the lesson favicon.svg already paid for twice, and the drawing was wrong twice before it was right — both times in a way only looking could catch.
Below about 20px two overlapping outlines go muddy, so each part is filled with the paper and occludes what is behind it rather than crossing it. That fixed the mud and left a worse fault, which Ryan spotted and the person drawing it had not: the two parts don’t look hinged together.
They were a teardrop case with a plain ring beside it and nothing reaching up to the rivet — two shapes that happened to touch. Both parts are teardrops with their apex at the pin now, rotated apart about that single point, which is what the object actually does. The last correction was that two equal lobes read as a wishbone rather than an instrument: the case is the fatter of the two and the lens ring smaller, as they are in the hand. The word carries the meaning regardless, so the drawing only has to be handsome and unmistakably a thing a botanist would have in a pocket.
And the ground control was 53×25. Found while measuring the other thing. WCAG 2.5.5 asks 44×44 and 2.5.8 asks 24×24, both of the interactive area rather than the visible mark — so it was one pixel over the floor and far under the number this site holds itself to on contrast everywhere else. Enlarging the ink would have made the quieter control loud, which its own note in the stylesheet asks not to happen, so the hit area is grown behind all three instead. Measured after: Search 72×44, Cabinet 53×44, Plain view 102×44, no two overlapping, each receiving its own tap, and the skip link still winning on top where it crosses them.
The policy is a binding statement of practice, which is why check-metadata.mjs enforces the third-party claim in it rather than trusting anybody’s memory. It also carried a sentence no gate can see: There is nowhere on this site to type anything, so there is nothing you could submit.
True when it was written on 9 September and false a few hours later, in the same afternoon, by us.
So the field was designed around the sentence rather than the sentence rewritten around the field. The searching happens in the reader’s browser against a file it has already fetched from this domain; there is no search server and no third party, and the policy now has a section of its own saying so. Nothing is remembered between visits, and the two view preferences remain the only two things this site stores.
The query is in the fragment, not a query string, and that is the part worth keeping. The ordinary way to make a search shareable is ?q= — which a browser sends, so every term anybody typed would land in the hosting log the policy describes two sections earlier. On a site about queerness, illness and naming yourself, that log would be the most revealing thing here by a wide margin. Browsers never send the part after the #, so /search#q=lavender is shareable, bookmarkable, and reaches nobody. The form is also hidden until its script runs, because a form without its script would submit to this address with a query string and undo the whole decision.
foundwent onto a rule
The first draft highlighted a match the way everything highlights a match: a wash of marigold behind the word. It failed twice, and each failure is one of this cabinet’s own rules arriving in a new component.
It failed the drawer, by measurement. Marigold at 0.30 over --qe-paper composites to 11.2:1 against the ink and passes comfortably. The same wash over --qe-cab-paper composites to 6.94:1, and every alpha above it is worse — because lightening a dark ground moves it towards light ink. That is the gating-surface inversion the stylesheet already warns about for cards, met again from the other side. No alpha of marigold clears 7:1 in the cabinet.
And it failed the seam rule, which is the one that mattered. --qe-marigold is spent on mends: a re-determination, a restored attribution, the provenance line of a corrected sheet. A search hit is not a repair, and a gold mark on a page nobody corrected is decoration asserting a fact — the failure that makes the real mends unfindable. So the mark is a rule under the word and nothing behind it, in verdigris, which nothing else here has claimed. The colour goes on the rule and never on the glyph, and the ink keeps 14.3:1 and 12.8:1 untouched in both grounds with no compositing left to measure.
The new capability is not in queering.js. That file may derive navigation from the DOM and may never create words, and a result is a sentence from another page put onto this one, however carefully. Widening the boundary to fit would have cost the boundary — so the search code lives in its own file loaded by the one page that needs it, and a reader of a sheet downloads neither it nor the 357 KB index. It still writes no label of its own: every word a searcher sees is authored in search.html and cloned, the way the index by sheet clones an entry’s existing chip.
Two entity tables became one, and one page order became one. The new generator needed the same tokenizer, the same comment stripping and the same case-sensitive entity table the Markdown generator has — and that table is the reason: it knows Þ from þ because the sheets quote Old English, and a second copy would be a lookup one tool learns and the other does not. Both now read from tools/html.mjs, and the editorial page order that /llms.txt and the new manifest both need lives once in tools/pages.mjs. The refactor was proved by the freshness gate: it regenerates and compares, so a green run is a byte-identical run.
2026 · 9 September
The site was measured against somebody else’s specification, and the first thing it found was a defect this cabinet had already named, already fixed one layer up, and never thought to look for underneath Link to this section
Audited against The Website Specification — the whole required tier, thirty-six items across ten categories, plus all twenty-one agent-readiness items at every status. Eight required findings, twenty-two verified passes, five items that genuinely do not apply here, and one that needs field data this site may not have yet two days after going live. The full working is in AUDIT.md in the repository, and it is a findings document rather than a fix list.
The largest finding was ours twice over, and it is closed below. Every sheet answers 200 at two addresses — /on-being-ill and /on-being-ill.html, byte-identical, same ETag. That is exactly the shape _redirects describes in its own comments, found on Star Stuff on 15 August and fixed here for the hostnames on 7 September: byte-identical documents at four URLs, which is a duplicate-content problem and an ambiguity about which address is the real one.
We wrote that down, fixed the hostname layer, and did not check the path layer. The house rule says addresses are extensionless, check-sitemap.mjs confirms no .html reaches the manifest, and every rel="canonical" points the right way — and the .html twin serves anyway, because no file-level guard can see what the edge actually answers. A guard that probes the served site was the thing this audit said we were missing, and there is one now.
The audit was wrong about this site, and writing the policy is what found it out. The finding recorded no analytics, no tag manager, no third-party script of any kind
— accurate about scripts, and misleading as a claim about privacy. Every page loaded Fraunces and Newsreader from Google’s font CDN, which told Google each reader’s IP address and user agent before a word was read. It was the only third-party request the site made, and it is the pattern a Munich court ruled against in 2022. Nobody had put it in a privacy policy because there was no privacy policy to put it in.
So the flow is gone rather than disclosed. Both faces are served from this domain now, generated by tools/make-fonts.mjs, keeping all three of the subsets Google served and Google’s own unicode-range values so that glyph coverage did not change by a single codepoint. That was checked rather than assumed: text metrics measured on the self-hosted build against the still-Google-served live site came back identical to three decimal places — 734.047, 752.711, 1855.906 — so the substitution is exact and the WONK axis that is this site’s whole typographic argument survives it.
The old argument for hot-linking a font CDN died in 2020, when browsers partitioned the HTTP cache per site to stop exactly this kind of cross-site tracking. A reader never arrived with Google’s copy already cached; every site paid for its own either way. The CDN was buying nothing but the data flow.
The policy is short because there is little to describe, and it names the two things that do happen: the two view preferences your own browser keeps and never sends anywhere, and the access log Netlify writes, which we do not use for anything and whose retention we do not control — said plainly rather than dressed up with a number we cannot enforce. No cookies, so no consent banner; there is nothing to consent to and a banner would be theatre. And a note on the outbound links, since nearly every sheet is made of citations: the one thing we do about them is Referrer-Policy: strict-origin-when-cross-origin, so a site you click through to learns that you came from here and not which sheet you had open.
The claim is enforced, not remembered. A privacy policy is a binding statement of practice, and this site makes no third-party requests
is a claim about code that would eventually go stale in somebody’s memory. check-metadata.mjs now fails on any attribute that makes a browser fetch from another origin — and exempts a href, because a link a reader chooses to follow is not a request the page made. On a site built out of citations that distinction is the difference between a gate that works and one that would have to be switched off.
One item on the spec’s required list is deliberately absent: a postal address. The policy names the two organisations and points at their own sites and this repository’s issues, which is where corrections already go and where they are answered in public. That gap is written down in AUDIT.md as outstanding rather than presented as complete. And the page says on its face that it was not written by a lawyer: it describes what the code does, and it was checked against the code rather than adapted from a template — which is the same standard the sheets are held to.
Thirteen scans went out as JPEG only, with no picture element and no modern format — 2.4 MB of lithographs, every one of them larger than it needed to be. They now ship AVIF and WebP through a fallback chain, and the numbers are not marginal: Dickinson’s manuscript leaf drops from 312 KB to 34 at twice the display size and 12 at once, the Hughes from 330 to 100, the Waterhouse from 341 to 150. A reader on a retina screen now fetches AVIF and never touches a JPEG at all.
The widths are measured rather than guessed, and that is what keeps the ladder short. A plate is displayed at a fixed css width — .qe-plate is 23rem and never reflows wider, .qe-plate-wide is the measure at 34rem — so each scan needs exactly that width and its 2x, and sizes needs no guesswork about viewports. Nothing is ever upscaled past the scan: inventing pixels an 1863 lithograph never had would make the plate look worse and the file bigger, which is both halves of wrong.
Quality was looked at, not inferred from a number. The hard cases here are not the paintings — they are Dickinson’s pen and the engraved caption on Cooke’s fungi plate, because fine line work is what a lossy encoder loses first. Both were cropped at 1:1 against the resized source and compared side by side: indistinguishable, with the blue rules of her writing paper and the words AGARICUS (LEPIOTA.) SISTRATUS. Fries.
intact. The measurements agreed — 36.9 to 40.7 — but the crops are the reason we believe it.
The near miss is the part worth keeping. tools/serve.mjs had no .avif entry, so the local server was sending the plates as application/octet-stream and the browser was quietly sniffing them — which works locally, because there is no nosniff there. Production sends nosniff on everything, and a picture element does not fall through to its next source when one fails to decode: the choice is made on the declared type, before the fetch. A wrong content type would have broken every plate on the site with no fallback to catch it. So the variants shipped one commit ahead of the markup, purely to confirm that Netlify types them image/avif before anything depended on it. It does.
tools/make-plates.py is a second Python tool, and CLAUDE.md stopped counting. Its rule was the one Python tool here
, and the reason behind that sentence was never the number — it was that something has to rasterise and nothing may need npm install. It is a boundary now: Python touches pixels, Node does everything else. make-images.py draws from the palette; this one re-encodes somebody else’s scan, and folding them together would have muddled both. That is the same correction the queering.js rule already took, for the same reason.
Five new detectors in check-metadata.mjs, all made to fail before being trusted, and one of them is the quiet kind: a scan whose bytes no longer match the hash it was encoded from. Replace a plate with a better scan and forget to re-run the tool, and nearly every reader gets AVIF of the old scan while the JPEG nobody fetches shows the new one — two versions of a specimen on one sheet, and nothing looking broken. Mount it, card it, log it, file it, route it, and encode it.
Every response carried the same header, so 2.4 MB of scanned lithographs was revalidated on every visit — thirteen plates that have not changed since somebody photographed them and never will. They now cache for thirty days. The half of this that was already right is worth naming: the spec’s recommendation for HTML is public, max-age=0, must-revalidate, which is exactly what Netlify was sending. It is written into _headers now so it is a decision we own rather than a default we inherited.
The plates get thirty days and not a year, because immutable is a promise this site cannot keep. That directive tells a browser the body can never change, and the spec reserves it for URLs carrying a content hash. Ours carry descriptive names: annales-lugduno-batavi-1863-tab4-gonystylus-miquelianus.jpg names one plate in one volume, and tab 4 of the 1863 Annales is not going to be re-cut. But almost certainly never is not what the word means, and a better scan could overwrite that filename tomorrow. Asserting a fact we cannot enforce is the same failure as a gold seam on a sheet nobody corrected. Thirty days is a claim we can keep.
queering.css and queering.js get five minutes, and the number is chosen for the shape of a visit rather than the size of the file. A reader moving through several sheets in one sitting revalidates once instead of once per sheet; a bad stylesheet reaches everyone within five minutes instead of sitting in caches with no way to bust it. That bound is the point. This site’s characteristic failure is a palette or print change that breaks pages silently — Star Stuff shipped forty-four of forty-six pages that printed blank — so an unbustable stylesheet is a worse exposure here than a slow one.
stale-while-revalidate is on the plates and deliberately not on those two. The HTML is always fresh, so a stylesheet one visit behind it would render a change that adds a class and its rule together as an unstyled page for that visit. Staleness is only safe where the stale copy cannot disagree with the fresh HTML. And stale-if-error now covers everything that is not must-revalidate, so a Netlify incident leaves the plates showing rather than broken — the two directives are never paired, because RFC 9111 cancels them and the spec calls that out by name.
Not fingerprinting the two shared assets is a decision and not an omission, and it is written up in DECISIONS.md. The clean answer the spec offers — a year and immutable — is available only to a content-hashed URL, which would mean a generator that renames both files and rewrites the reference in twelve pages. Every palette fix would then churn twelve HTML files and make its own diff unreadable, and this register depends on those diffs being legible. The prize is thirty-one kilobytes over the wire. It can be reconsidered later without undoing any of this.
robots.txt has always opened with one sentence: Everything here is meant to be read, quoted, and reused (CC BY-SA 4.0).
It was a sentence addressed to humans, in a file read by machines. Every training and retrieval crawler is now named and allowed explicitly, with Content-Signal: search=yes, ai-input=yes, ai-train=yes, and every response carries tdm-reservation: 0. Nothing about the policy changed; it stopped being an inference. A reservation of 1 beside a CC BY-SA licence would have been a contradiction somebody eventually has to resolve, and probably not in our favour.
The answer is yes, and the ask is attribution — so the same pass built the trail. Granting permission to mine a site whose one correctness requirement is credit, without making the credit reachable, would be the generous half of a decision and not the whole of it. So: a Markdown source beside every page, an index at /llms.txt, the whole site at /llms-full.txt, a feed of this register, JSON-LD on every page, and an Agent Skill at /.well-known/agent-skills/ whose main subject is how to cite this place and how to tell a checkable fact from a reading.
Nothing in the Markdown is typed. tools/make-markdown.mjs derives each .md from that page’s own main landmark — the same landmark the mirror reads, so the copy an agent fetches cannot disagree with the page — and derives the feed from this register’s own accessions. The rule it is built around is the bluntest one in CLAUDE.md: two copies of the same words drift, and the accessible one is always the copy that rots. The converter throws on a tag it has not been taught rather than dropping it, because a converter that quietly discards an element is that same drift arriving by another door.
One thing it refuses to flatten. <del> and <ins> stay as HTML in the Markdown instead of becoming ~~strikethrough~~ and nothing, because the one pair on this site is PROSPERO struck through and Miranda, First Folio, 1623 written in — a restored attribution, the kintsugi seam. Markdown has no counterpart for <ins>, so the pair would have read as old new
with nothing saying which was which. Losing the difference between what we got wrong and what is true is not a formatting compromise here.
The JSON-LD is authored and not generated, and this is the reason. Every sheet’s label already distinguishes the Maker — who made the thing being read — from Read by, who wrote our reading of it. In the structured data that is about.author against author, and the two are now stated separately on every sheet: The Army of the Upright is by Helen Edgar and Ryan Boren, about a work by Virginia Woolf. Collapsing them would tell every agent on the web that we wrote Woolf. check-metadata.mjs refuses the conflation outright, which makes it the first gate here that checks an attribution rather than a fact about a file. Where a page states no reader, no author is asserted at all.
Two traps paid for, and they were the same trap twice in one afternoon. A comment that names a tag in angle brackets is indistinguishable from that tag to a regex. The note in flower-codes.html explaining that positioning goes on the outer g and the animation on the inner one made the converter refuse the page; then a comment added to every head, explaining the new discovery links, said main in brackets and made a main-landmark extractor match inside the comment and take the head as the page body. The mirror reads that landmark too. Fixed on both sides — comments stripped before parsing, and the brackets taken out of the comments — and written into CLAUDE.md so it is not paid for a third time.
The status code was always right. This was never a soft 404 — a wrong address answered 404 from the day the domain was attached, which is the half of the spec’s error-page requirement that actually matters to a machine. The half it failed was the half a person sees: the body was Netlify’s default, a teal system-font page with no plate, no nav, no ground toggle, and nothing to say the reader had ever been here. 404.html now carries the masthead, both view controls, the before-first-paint snippet, the footer, and all eight cards, so a character out of place lands somewhere you can carry on from.
The drawing is an empty mount: a stem mounted diagonally across the sheet, six leaves thinning as they climb, and nothing at the tip. The herbarium version of a 404 is the sheet whose specimen is not on it. The first attempt was a tall narrow sprig that filled a sixth of its viewBox, which at width: 100% scaled into one enormous vertical stroke — a reminder that these drawings are sized by their box and not by their content. --len is the measured path length, 496, read off getTotalLength() rather than guessed.
Fixing the page introduced the exact fault the spec item leads with. 404.html is a real file, so /404 and /404.html both answered 200 with the error page — a soft 404, at two addresses, created by closing a finding about error pages. check-addresses.mjs --live reported both within a minute of the deploy, which is the first time a gate here has caught a regression the same pass that shipped it. Two rewrites in _redirects serve the page with a 404 status instead; the self-reference does not loop, and that was verified rather than assumed.
Two gates objected to the page for reasons that are wrong for an error page, and both now carry a named exception rather than a silent skip. check-sitemap has NOT_CONTENT, because an error page has no address to list and a listed URL that errors is a coverage fault. check-addresses has NOT_ADDRESSED, and is stricter about the page than the rule it excuses it from: it asserts the file exists at all, that a nonexistent address serves our page and not Netlify’s, and that neither /404 nor /404.html answers anything but 404. Both are allow-lists, so a third entry is a decision somebody makes and reviews.
Three omissions, each argued beside itself in the file rather than here. No rel="canonical", because the page is served at every unmatched address and a canonical would tell a crawler that every wrong URL on the site is one real page. noindex, because the page is thin by design and the spec asks for an explicit policy rather than an implicit one. No social card, because a new sheet needs one and this is furniture that should never be shared on purpose — a broken link that unfurls as a bare link is telling the truth. No provenance line and no contents list either, which is how / and /design already behave: furniture is not a sheet.
Netlify shadows a redirect with a real file, and on-being-ill.html is a real file. That is the whole mechanism, and it is why writing the rule down four times over did not enforce it: the house style says addresses are extensionless, check-sitemap.mjs reported locs still carrying .html — none
, every rel="canonical" pointed the right way, and check-markup.mjs had nothing to say. All four were correct. None of them can see what the edge answers. _redirects now carries a forced 301! for each of the ten sheets and for /index.html, enumerated rather than globbed so that a sheet without a rule is reportable by name.
The site was already redirecting the misspelled extension and serving the correct one. Netlify got every near miss on its own — /on-being-ill/ with the trailing slash and /on-being-ill.HTML in the wrong case both 301 here properly, because neither has a file to hide behind. Only the exact-case extension did. That is how this sat unnoticed from the day the domain was attached: the defect was invisible precisely where the file system agreed with the request.
tools/check-addresses.mjs is the fourth gate and the only one that knows what the edge answers. Offline by default, like the other three: it reads _redirects against the pages on disk and reports a missing rule, an unforced one, a wrong target, a stale one, an internal address carrying .html, and a root-relative asset. With --live it goes and asks the site, because a redirect loop is how this file fails and a loop cannot be seen offline. All six detectors were made to fail before the gate was believed — an unforced rule reported as needs 301! — on-being-ill.html is a real file and shadows an unforced rule
, which is the failure that would otherwise look green.
Two smaller inconsistencies went with it, both found by Ryan browsing the files locally rather than by any check. The two favicons and the touch icon were root-relative while queering.css and queering.js were not — one rule applied two ways, and now guarded. And the index at the foot of this page pointed at /index, which took a needless hop and was a third address for the plate. The local-browsing question has no fix and that is the trade: nothing on disk is named on-being-ill, so relative links would not help either. Extensionless addresses need a server, which is what tools/serve.mjs is for, and CLAUDE.md now says so instead of leaving it to be rediscovered.
Nothing here said who was allowed to frame a sheet. No content policy, no X-Frame-Options, not from this repository and not from Netlify’s defaults. The usual argument for that header is session theft, and it does not apply to this site: there is no login, no form, and no authenticated action to hijack. The reason it matters here is attribution. Anybody could load a sheet inside their own chrome and present it as theirs — on a site whose one stated correctness requirement is that credit reaches the person it belongs to. frame-ancestors 'none' and DENY now, together, because the older header is what very old browsers still read.
The transport header was Netlify’s default and a year short: max-age=31536000 with no includeSubDomains. It is two years and the subdomain flag now. The spec asks for the subdomain audit before that flag ships, because one HTTP-only subdomain breaks the moment it does — www answers 301 over HTTPS and there is nothing else under the name, so the audit came out clean. No preload, and that is the current advice rather than an omission: the preload list’s own operator now discourages it, browsers auto-upgrade plain HTTP regardless, and getting a domain off the list takes months.
The content policy carries frame-ancestors and nothing else, and that is the trap worth writing down. Every page has an inline <script> in its head — the snippet that applies both stored view preferences before first paint — and inline style throughout. A default-src or script-src added here without 'unsafe-inline' would kill that snippet, and the page would flash the decorated sheet at the reader who turned decoration off, or the daylight sheet at the reader who asked for the cabinet. A hardening pass that looks like an improvement and breaks an accessibility feature is the failure this note exists to prevent. The reasoning is in _headers beside the rule, not only here.
2026 · 9 September
Fifteen panels wore the specimen’s clothes, twenty-five margin values passed for a hand-kept register, and the site’s gold was being spent on the least interesting thing that happens to a sheet Link to this section
Prompted by Ryan reading on wabi-sabi in web design, and by a scoring of this site against the seven aesthetic principles that article names. Six of the seven were already here — two of them, fukinsei and datsuzoku, more thoroughly than the article states them. Seijaku, the quiet, was measurably the weakest. And the list circulating as the seven principles of wabi-sabi
turns out to be Hisamatsu Shin’ichi’s seven characteristics of Zen art, relabelled somewhere in transmission — with the third of them, the one about age, glossed in the design advice with no age left in it. That is why patina
recurs in that literature without ever becoming a principle, and this accession is mostly about that hole. The colophon now carries the scoring, and says what we can and cannot vouch for in the thing we are borrowing.
The patina was already here and only we could see it. This register has recorded a re-determination or a corrected label for every one of the seven sheets, and not one sheet said so on its own face. A herbarium sheet carries its annotation slips on the sheet — that is what makes an old sheet look old, and it is information rather than ornament.
So the foot of each sheet carries .qe-provenance: the mounting date, the count of label corrections and re-determinations since, and a link from each clause to the entry here that did it. It is inside <main>, unlike the sibling nav, because a sheet’s own accession history is content about that sheet and the mirror should have it.
Age you can read beats age you can only see. It is true, it is checkable, it survives plain view and paper and a screen reader and 400% zoom because it is a sentence, and it accrues on its own as this page grows. Every alternative considered — a noise tile, a grain filter, a torn edge — was a picture of age drawn over the words.
All seven sheets came out mended, so the seam is on all seven and today it distinguishes nothing. That is a fact about this site rather than a fault in the device, and inventing an unmended sheet to make the gold mean something would be the exact failure the rule below forbids. Sheet No. 8 will arrive clean.
Kintsugi is not that the crack shows. It is that the most precious material in the workshop is spent on the break. Read that way, this register had its taxonomy backwards: --qe-marigold, the site’s gold, marked Mounted — the routine intake — and the corrections got cooler colours.
Two tokens swapped. Mounted takes --qe-lichen, because mounting a sheet is the ordinary event. Re-determined takes --qe-marigold, because a re-determination is the largest correction a register records: the specimen turned out to be a different thing. Label corrected keeps --qe-coral, the smaller mend. On a site that publishes a ledger of its own mistakes, spending the gold on we got this wrong and fixed it is an argument rather than a decoration.
The vine at the top of this page is the legend — four blooms in the four kinds’ colours, in the order the legend gives them — so its second and third flowers changed too. A legend that no longer matches the thing it explains is worse than no legend.
The unclassed default for an entry and a chip is now --qe-rule and not an accent, so a mistyped class reads as plain instead of quietly passing for one of the four. --qe-verdigris leaves the register and keeps its other jobs: the green carnation, and the second butterfly.
background: var(--qe-card) appeared fifteen times in the stylesheet, thirteen of them with the same 1px rule and the same 2px radius. So the specimen, the mounting label, our own closing commentary and a housekeeping note were the same object to the eye. That is a defect in visual hierarchy and not a matter of taste: a reader cannot tell somebody else’s words from ours by looking, only by reading the label.
Three surfaces now, and a new panel takes the one that says what it is. Bare — space only — for our own commentary, which is the default. Ruled — --qe-card in a hairline box — for an object mounted here. Ruled off — hairlines above and below, no fill — for the ledger’s own housekeeping. .qe-restaged went bare, .qe-untidy and .qe-register-note went ruled off, and ruled now means something.
The third tier is rules and not a tint, and that is a measurement. A recessed --qe-paper-deep panel was tried first. In daylight it drops --qe-moss to 6.90:1 and --qe-rust to 6.21:1 — both under the house 7:1 and both over WCAG AA, so check-contrast.mjs, which gates at AA, would have passed it silently. That is the gap this file has had logged as open since yesterday, arriving as a real near-miss rather than a hypothetical.
Moving .qe-untidy off the card ground moved its bullets from 4.17:1 to 3.89:1. A bullet nobody can find is a list without a list in it. Checking the neighbours turned up the larger version of the same thing: the register’s own entry bullets were drawn in each kind’s accent, which measures 2.15:1 for lichen and 2.40:1 for marigold on paper.
Both fixed by the rule this stylesheet states in five other places: the colour goes on the rule and never on the glyph. The markers took --qe-moss, a text token at 7.80:1, and the accent stayed where it already was — the entry’s left rule and the chip’s underline. .qe-untidy gained a coral dashed rule in exchange, at 3.89:1, which clears the 3:1 a graphical object is held to.
Neither of these was a regression the guard could report: a ::marker is not an element with text, so nothing measures it. Found by measuring by hand, which is the only thing that has ever found this class of fault here.
The sheet used twenty-five distinct margin values: 2, 2.5, 1.5, 0.7, 2.75, 3, 1.75, 2.25, 2.4, 2.2rem and more. Asymmetry only reads as asymmetry against a norm. This site’s whole typographic argument is deviation — the wonk axis, the leaning slips, the four corner sprigs each drawn for its own corner — and twenty-five arbitrary gaps flatten the deviations that were actually authored.
One line of body text is 1.19rem × 1.65 = 1.96rem, and --qe-space-* is quarter-lines of it. The page was already nearly on that scale by ear: the three commonest values were 2rem, 2.5rem and 1.5rem, and quantizing moved most gaps by one to three pixels. The scale governs the space between blocks; inside a block the hand is still allowed. Paragraph spacing went from 1.35rem to 1.47rem, which is the one deliberate loosening.
Three corner profiles as well, spread so that no two panels a reader sees together are cornered alike: a sheet handled a hundred times does not have four identical corners, and thirteen components carried the same radius on all four of theirs. It is a radius, so it costs nothing in contrast and nothing on paper. That is koko for the price of a token.
The paper wash was position: fixed, so the stains held still as the sheet scrolled past them, which is the one thing a stain does not do. It is absolute now, against a position: relative body, so the foxing belongs to the sheet and travels with it.
The four stain positions were also hardcoded, so every sheet on the site was foxed in exactly the same four places. Nature does not repeat its foxing. They are --qe-fox-* tokens now, stated per page in the markup — the same idiom as --rot on a slip, because a stain is a fact about one piece of paper and not about the site. The front page keeps the original four as the fallback.
Still not texture, and that is now a written rule. The research this came from recommends a noise tile and a blur(0.5px) contrast(1.1) filter. Both are refused. A noise tile varies effective background luminance per pixel, and check-contrast.mjs composites against computed colour pairs — it cannot see a texture at all, so a grain under body text would pass every guard here and fail real readers. Foxing goes on the ground, the tape, the sprigs and the rules, and never under a letter.
On this sheet — the within-page twin of Elsewhere on the plate — now sits after the lede on the five longest sheets and on the colophon. Every <h2> on those pages, and every accession on this one, carries a small § beside it that is a link to itself, so a reader can send somebody straight to a word missing from the copy you will find or to the wabi-sabi section.
The list is derived and the addresses are authored, and the split is the whole design. A hand-kept contents list is a second copy of every heading, and the oldest rule here is that two copies drift and the accessible one rots — so the list is built from the page’s own headings and never typed. But an id derived the same way would die the moment anybody reworded a heading, taking every link a reader had shared with it. So the ids are short, topical, and written in the markup — #eden, #the-colon, #quetelet — the way a slip’s angle is written there. The permanent thing is authored, the label is computed, and nothing is written twice.
In the body, not a rail: the empty margins either side of the measure are the negative space the entry above spent its whole argument clearing. Not sticky, which also keeps it out of the way at 400% zoom. Not an accordion, and no highlight that follows the scroll — no new motion, the same rule this register already holds. :target marks where a reader landed instead, drawn in the gutter so arriving at a heading does not shift the words sideways.
The section mark is always visible rather than revealed on hover, because a hover affordance is one handed to mouse users and to nobody else.
Asked directly: should the front page have a contents list? No, and the reason is that it already has one. The plate of eight numbered cards is this site’s table of contents, so a list of the page’s own prose sections stacked above it would be two navigational lists competing on one page — and the one a reader arriving at the front door wants is the plate. It is also the shortest page here, at 1,362 words.
But the two things shipped together and they are separate decisions. Addresses are cheap: an id and a small section mark, no threshold, no furniture. A contents list is furniture and has to earn its place. Conflating them left four pages — the plate, and Sheets No. 1, 2 and 7 — with no way to link to any section on them.
The evidence was sitting on this page. Three entries above italicise the names of front-page sections and could not link to one of them — What grows here, The type plays, and the words do not move, Queering is a verb — while linking happily to a section of the colophon two entries away. The attribution ledger named three more. All six are links now.
Twenty-five addresses added across the four pages. Nothing gained a contents list, and /#what-grows-here is now a direct address for the plate of sheets, which is a useful thing to be able to hand somebody.
Monotropa uniflora, the ghost pipe: a plant carrying no chlorophyll that feeds entirely through fungal networks, named by Linnaeus in 1753 for the single turn of its stem, pressed into Emily Dickinson’s herbarium, and called by her the preferred flower of life
. Two hundred and thirty-eight years after the naming, Dinah Murray and Jeanette Buirski reached for the same Greek root to describe a mind whose attention runs in one deep channel. Following Helen Edgar’s essay, written for the fifth anniversary of Murray’s death.
A wall is a third kind of sheet, and the difference is not decoration. A reading has an order and arrives somewhere; a wall has a chorus, and its argument is made by accumulation. Seven people across 273 years stood in front of one specimen and each saw something the others could not. A herbarium sheet that has been in a cabinet long enough looks exactly like that: a specimen, and a stack of determination slips in different hands, every one signed.
Which is also the one thing that did not transfer from the zine walls this was modelled on. Those work by unattributed declaration — a wall of statements, deliberately unsourced, which is right for a manifesto and impossible here, where the citation is the product. So the wall is either our own words or labelled slips, and never a blur of the two.
The drawing is the first on this site with no leaf in it, and the absence is the argument: every other panel here is green because every other specimen photosynthesises. Two drafts were discarded against the drawing rules — one stood the pipes on a single thread, which is the baseline rule 1 forbids, and one drew them upright, which loses the one turn the genus is named for.
The biology is deliberately absent, and that is the shelf division doing real work. Myco-heterotrophy has numbers attached and belongs to Star Stuff, which risks a wrong fact. This sheet has the naming, the letter, the poem, the editor, and the word. The mounting label carries a Biology row saying where it went — the first time the two sites have split one subject on purpose.
The essay this sheet follows opens on Attention without feeling, is only a report.
credited to Mary Oliver’s Upstream (2016). It is not in Upstream. Ryan owns the book and looked. It is in Our World (2007), nine years earlier, and the passage runs: Attention without feeling, I began to learn, is only a report. An openness — an empathy — was necessary if the attention was to matter.
Two things happened to it. Three words went from the middle — I began to learn — which turns something Oliver came to over time into an aphorism she hands down. And the entire second sentence went, which is the one that says what attention needs instead. The version in circulation states the problem and drops the answer.
It survived because it was uncheckable. A reader who wanted to verify it would have opened Upstream, not found it, and assumed they had missed it. Finding this needed somebody who owned both books and was willing to conclude the citation was wrong rather than that they had looked badly.
Our sheet quotes both sentences, cites Our World, and says on its face that this is not where the line is usually credited. Not corrected on More Realms from here — that is Helen’s page and hers to change; the paths are in the decision log.
resonant and porousis exactly right, and it is Woolf guessing at what Coleridge meant
An open question since 8 September, closed because a sheet finally reused the line. Ryan put A Room of One’s Own in the library and it was read there: chapter VI, pp. 148–149. The wording is Woolf’s, the ellipsis is honest, and nothing had been tightened — the only fault was a primary cited to a secondary, and our sheet cites the book.
One nuance came out of reading it in place. The sentence is He meant, perhaps, that the androgynous mind is resonant and porous…
, and two sentences earlier the he is named: Coleridge certainly did not mean, when he said that a great mind is androgynous…
. So the line is Woolf speculating about another critic, hedged twice. Quoting it from the androgynous mind onward promotes a guess to a definition. Small, and exactly the shape this site watches for, so the sheet quotes from He meant, perhaps and names Coleridge in the caption.
The Dickinson letter came back with three characters of drift as well — a dash for a full stop, a lowercased Child, an inserted the. Nobody did it on purpose and it is what happens to a quotation copied from a copy. It is recorded because this sheet’s own subject is that Dickinson’s punctuation and capitals were regularised by her first editors, and here is the same drift, on the same writer, in 2026.
Monotropism was set out in Murray, Lesser and Lawson’s 2005 paper in Autism. Its third author is Wenn Lawson, a trans man who has published under Wenn for years. The journal record, Crossref, and every citation manager that reads them still carry the 2005 byline, so a citation generated automatically deadnames him.
Reproducing a publisher’s record over a living author’s own name is not neutral accuracy — it is a database outranking a person, and on a site about queering normativity it would be a poor place to let that pass without comment. The sheet cites him as Wenn Lawson, states what the byline says so the paper stays findable, and explains why in a sentence. Helen’s essay already does this correctly and is where we saw it done.
The social card for Sheet No. 8 generated correctly and did not appear in the run’s summary, because that summary iterated a hardcoded tuple of filenames nobody had added a line to. Noticed by eye.
Harmless in that direction and not in the other: the same list would print a complete-looking report while a card had silently failed to generate. The summary now enumerates what was actually written and prints a count, so a new card reports itself.
The card also needed its own drawing. The stock sprig puts leaves in lichen and three coloured heads on a stem, which is right for every other card here and exactly wrong for the one plant defined by having neither. A card showing green leaves on the ghost pipe is the card arguing with the page.
This ledger is written by accession, which is by date, because a sheet, its corrections and the CSS it needed are one dated event. That is the right unit to write in and the wrong one to look something up in — a reader here is usually asking what happened to one sheet, and its entries are scattered across sixteen dates. Index by sheet is the same entries filed the other way.
The distinction the attempt above missed is that a contents list is front matter and an index is back matter. That is the whole reason one measured badly here and the other does not: front matter delays every reader, and back matter delays none. The index sits at the foot of the page, where a bound volume has always kept one, and a single line up by the legend points down at it. The first accession is back to where it was.
Which sheet an entry concerns is stated in the markup, never guessed from its links. Deriving it would have been quick and wrong: the Dickinson accession links three sheets and concerns one, so incidental cross-references would have filed corrections under sheets they have nothing to do with. On a site whose whole risk is a wrong attribution, an index that silently misfiles a correction is the worst thing we could ship. So all seventy-three entries were read one at a time and each declares its own sheet. Two of them genuinely belong to two — the byline rule changed Sheet No. 4 and gave No. 1 a second reader in one stroke — so seventy-three entries file as seventy-five lines.
The groups are ours and only the filing is the machine’s. Every heading, sheet number and the order they appear in are written into this page, because they are editorial words. The script clones each entry’s existing name and its existing kind chip and puts them under the group the entry declares — nothing composed, nothing summarised, nothing truncated, so the index cannot call an entry something the entry does not call itself. The group headings were checked against each sheet’s own title and against the plate’s cards rather than typed from memory.
The failure this needed protecting from is the silent kind. A typo in an entry’s declared sheet does not throw and does not show: the entry matches no group, vanishes out of the index, and the register above it still reads exactly right. On a page whose subject is corrections, an index that quietly loses one is the fault least likely to be noticed and worst to have.
check-markup.mjs now validates every declared sheet against the pages that actually exist, reports an empty declaration, and reports a group that nothing files into — which catches the same typo from the other end, since a misspelling breaks the match in both directions at once.
Made to fail before it was believed, which is now four for four on this site’s guards: a typo’d entry, an emptied declaration and a stale group were each introduced on purpose and each reported with a line number and a non-zero exit, then reverted and the clean tree re-run.
One layout attempt was thrown away on measurement, too. The index lines were first a wrapping flex row with the kind chip beside the name. A chip plus an entry name is wider than the measure almost every time, so every single line put its chip alone on a row above itself and the index came to 6,726px for no extra information. Ordinary inline flow — the chip opening the line, the name wrapping beneath it — is 5,502px, and is what an index entry has looked like since long before any of this.
This is the longest page on the site — sixteen thousand words — so it got the contents list first. Then it was measured. An accession headline here is a sentence, which is this register’s own design decision written down where it was made, so the labels average 148 characters against 22 to 34 on a sheet. The block came out 1,293px against 319 to 510 everywhere else, and it pushed the first entry three and a half screens down the page.
Both ways to shrink it were closed. Truncating a label is this site’s characteristic failure applied to itself. Writing a short label beside each headline is the second copy that drifts. So the register keeps its section marks and its sixteen addresses, and has no contents list. Removed after measuring, rather than kept because it had been built.
What this page actually wants is an index by sheet, and that is left open rather than approximated. A reader here is usually asking what happened to one sheet, and the accessions are grouped by date. Gathering a sheet’s entries across accessions is a real editorial decision, not a layout one, and the measurement above is precisely the argument against reaching for the nearest component instead.
A new section on the colophon: what wabi-sabi is, which of the seven principles this sheet actually manages, and which two it was weak on. Six of the seven were here by accident — a herbarium sheet is already foxed paper, a faded specimen, a hand-lettered label and a mount that has been handled — so the honest framing is that we found the vocabulary after the fact and it told us which one we had been getting wrong.
The two failures are named rather than dressed up. Seijaku, the quiet, was a measurable defect and not a mood: fifteen components sharing one surface and twenty-five unrelated margin values. Koko, the weathered one, we had nothing for at all — every candidate was a picture of age painted over the words.
And a panel of what we cannot vouch for in the borrowed thing itself, because a section that scores a site against seven principles owes the reader the provenance of the seven. They are not wabi-sabi’s. They are Hisamatsu Shin’ichi’s seven characteristics of Zen art, from a 1971 book we have not read, reaching us through a peer-reviewed paper that cites it. The page says all of that on its face.
The note at the head of this accession, and the decision log with it, stated flatly that the design advice names shibui in the slot where Hisamatsu names koko — and that the swap is what dropped the aging out of the principle. That is not established. At least one rendering of Hisamatsu’s seven gives shibui/shibumi for that characteristic itself, glossed lofty dryness
, which is the same sense the koko renderings carry. Which term is Hisamatsu’s cannot be settled without the book, and we do not have the book.
It was written from memory before anything was checked, and it was caught by the sentence immediately after it, which said to verify against Hisamatsu before any of this reached public copy. Writing the colophon section was the moment that check came due.
What survives is the part that is checkable against two texts a reader can open: whatever the term should be, the design advice glosses its third principle with no age in it. That needs no ruling on anybody’s vocabulary. Corrected here, in the decision log, and in the attribution ledger — where the citation for the paper was re-pinned from Crossref’s own record rather than a search summary, for the reason the Wassell entry on this page already records.
The kintsugi device described above — the gold spent on a correction rather than on a mounting — was designed this morning from a general reading of kintsugi, and every note, commit message and entry described it in our own words: the gold goes on the mend. A library search then turned up Stimpunks Foundation’s own page on kintsugi, published 6 May 2026, saying The cracks are where the gold goes.
Nobody took anything from anybody. But a house phrase already existed and we had reinvented a near copy of it, and the version about to ship read as though the idea started in a stylesheet. Over-crediting others and under-claiming for ourselves is the safe direction, and that applies to our own colleagues at least as much as to strangers. The colophon now cites theirs and calls ours the small version.
Their page also supplied the argument the section was missing. Masking is the opposite of Kintsugi.
That sentence is what makes this device belong on a site about queering normativity rather than being borrowed warmth: a site about the cost of passing for typical cannot then file its own corrections where only the maintainers can read them. A hidden correction is a masked one — which is the argument for this register, arriving from Stimpunks rather than from a design blog. The sentence is theirs; the application to an accession register is ours; the page says which is which.
The style guide asks for 7:1. For this site’s whole life check-contrast.mjs gated at 4.5:1 — WCAG AA — with an entry in the decision log saying so and a line in the working notes warning, in as many words, not to cite the script as evidence of the house standard. A stated principle nobody measures is a wish.
The wish got called in this morning. The recessed panel described two entries above drops moss to 6.90:1 and rust to 6.21:1 in daylight, and passed the guard clean, because 6.21 clears AA. It was built, measured by hand, and thrown away — but it would have shipped on a day when nobody thought to measure by hand.
So the gate moved, in two tiers reported apart. Under AA reads FAIL and means illegible. Between AA and 7:1 reads UNDER and means readable, and beneath the number this site publishes. Both exit non-zero; one count would have hidden which kind had just landed, and they are different bugs. --aa drops to AA and prints a line saying the house target is not being measured — so that an argument for a particular colour is an argument somebody makes on the record, rather than a two-line edit nobody reviews.
It cost nothing, which is the argument for doing it today. All 9,142 text elements on the ten pages clear 7:1 in both grounds and under print emulation, so the gate could be raised without a single colour changing. Raised later it would have arrived tangled with whatever it first caught.
Made to fail before it was believed, the same way the cabinet pass was: the recessed panel was put back and reported 6.90 and 6.21 as UNDER; a 2.15:1 colour was injected and reported as FAIL on the other tier; --aa passed the same tree and said why. Exit codes checked on all three. Then reverted.
Two blind spots are now written into the tool’s own header rather than left to be rediscovered. A ::marker is not an element with text, so nothing measures it — that is how the bullets in the entry above sat at 2.15:1. And a texture is invisible to it entirely, because it composites computed colour pairs. A pass here is not permission for either.
The first version of the entry above claimed the wash tiles down long pages at a 150rem period, far enough apart that a reader never meets the repeat. Ryan met the repeat immediately, on the sheet, and said so: I can see lines at the color transitions of the background.
The cause is arithmetic and not blending. transparent 70% puts a gradient’s edge at 0.7 of its radius, so in a 2400px tile the stain at 8% reaches 278px above the tile’s top edge and the one at 96% reaches 352px below its bottom. Both were cut off square at the boundary, and a cut-off gradient meets the next copy of itself as a step. No amount of softening fixes a step.
Any fix that kept the tile would have had to constrain every page’s stain positions to a safe band inside it — a trap laid for whoever writes the next sheet, in exchange for an even cast on the two pages long enough to want one. So the tile is gone. Four stains over the whole sheet, and a long sheet is sparsely foxed, which is what a big sheet of foxed paper looks like. The spots do not multiply to fill it. The claim that a reader would never meet the repeat was the sort of thing this register exists to catch, and it was wrong within the hour.
2026 · 8 September
The sheet has a second ground, and it is the drawer shut rather than the lamp switched off Link to this section
A dark ground was refused once, in the entry for Sheet No. 5, on the grounds that this site has one ground and it is paper. That entry stands as a description of what it refused — a generic inverted palette arriving with a draft — and the decision has been amended rather than reversed. The cabinet is a herbarium object: dark warm brown, the drawer a sheet is filed in, and the dark-ground plate whose specimens are printed on near-black so that pale forms read.
A dark green ground takes the separation out of the colours this site is built from. Moss, lichen, and verdigris share their hue with it, and every accent measures worse against it than against brown for no gain: moss text at 7.1:1 rather than 7.2, rust at 6.2:1 rather than 7.3. Push the green to a real forest tone and nothing but cream clears 7:1 at all. A green ground makes green unusable, which is a plain result and not a matter of taste.
Brown was already the palette’s ground and nobody had noticed. The dark-ground botanical print that prompted this is drawn in cream, sage, marigold, and coral on near-black — which is --qe-ink, --qe-lichen, --qe-marigold, and --qe-coral as they already stood. The five decorative tokens are therefore carried across unchanged and deliberately still saturated. Only ink, moss, and rust are lifted, to 12.8:1, 7.2:1, and 7.3:1. Lifting the decoration to the same target was tried first and turns every flower chalky: 7:1 is a rule for letters, and the brightness belongs to the text.
It earns the mounted plates as well. The scans on these sheets are cream vellum, and cream vellum on dark brown reads as a plate lying lit on a shelf. On green it reads as a plate pasted onto green.
The contrast target has to be measured against the lightest surface any text sits on, and on a dark ground that is not the page. In daylight --qe-card is lighter than --qe-paper, so text on a card gains contrast and the page is the worst case. Invert the palette and keep the instinct — a card lifted above the ground — and text on a card loses contrast instead. Solving 7:1 against a lifted panel drags rust to #eab1a3, a pale pink with no rust left in it.
So the cabinet’s cards are recessed, the ground is the lightest surface again, rust stays an ember, and the lift is carried by the hairline the cards already had. It reads better than the lifted version anyway: compartments in a drawer rather than paper stacked on wood.
Three things were not token flips and are now tokens, which is the same lesson the print sheet taught in 2026: the foxed-paper wash (--qe-wash-a through -d), the shadow a lifted sheet casts (--qe-shade, a near-black that did nothing on a near-black ground), and the pale flesh of a specimen (--qe-flesh). The last was the visible bug: a mushroom’s stipe was filled with --qe-paper-deep, which it only ever matched by coincidence, so on the dark ground the stems of the four mushrooms on Sheet No. 4 became holes and the caps floated. They are cream now, which is what the dark-ground plate does with them.
The ground is a class on <html>, the palette is entirely in queering.css, and the words do not know what they are lying on — the same shape as plain view, and for the same reason. Every hex has one copy: the cabinet values are defined once as --qe-cab-* and the two switch rules carry nothing but aliases of them, so a drifted switch is a missing ground and never a wrong colour.
Three states, one word. With no stored choice the machine decides, from CSS alone and with no script involved, so a reader who has never touched the control still gets the ground their machine asked for. The control then names the ground they can see rather than a preference they have not expressed, and clicking it writes the other one down; the stored choice wins over the machine in both directions. It is the quieter of the two controls on purpose — plain view changes what the page is and keeps the pill, this changes what the page is lying on and gets a word and a hairline. Its label is restored before first paint by the inline snippet in every <head>, which now carries both preferences: deferred to queering.js it would flash the daylight sheet at somebody who asked for the cabinet.
Paper is daylight, always. Both switches are @media screen, so the print sheet cannot inherit a ground and a reader in the cabinet who hits Print gets ink on white.
The design page said three tokens clear 7:1 against the paper
, and quoted 14.3:1, 7.8:1, and 7.0:1 without saying what they were against. True of one ground out of two. The prose now says against the ground
, those three ratios are labelled on paper, and a new section carries the cabinet’s own numbers. The swatch chips needed no change at all: they are drawn with the tokens rather than with copies of them, so they restate themselves in whichever ground you are reading in.
And the contrast checker gates at WCAG AA, not at 7:1. CLAUDE.md puts the 7:1 target and tools/check-contrast.mjs in the same breath, which reads as though the script enforces the house target; it measures every element and fails them at 4.5:1, or 3:1 for large text. The 7:1 figure is held by hand-chosen tokens and by nothing else. That was found by breaking a token on purpose to see the new pass fail, watching it pass at 6.0:1, and going to look at why — which is the argument for the exercise. It is logged and not fixed: raising the gate is a separate job with its own list of things it would newly fail, and doing it inside this entry would have buried it.
tools/check-contrast.mjs measured one palette on screen and one on paper. Two grounds are two palettes, so it now runs the screen measurement again under prefers-color-scheme: dark — 2,840 more text elements, and the pass that would notice a cabinet card drifting back up above the ground. The print pass now runs with the dark preference deliberately left set, so a regression that let the cabinet reach paper lands as black-on-brown in the pass that already gates.
A new pass that reports without gating is decoration, and this one nearly was: the failure total it feeds counted screen and print only, so the cabinet column would have printed its numbers and never stopped a ship. Both are in the gate now, and the pass was verified by lifting --qe-cab-ink to a value near the ground and watching 1,675 cabinet failures appear against zero on screen and zero in print.
tools/make-images.py reads the palette out of queering.css with a search for each token name, which returns whichever copy appears first in the file. Two palettes in one stylesheet make that a loaded gun: reordering the sheet would silently turn every social card brown. The lookup is anchored to the :root block that holds the daylight values — a social card is a herbarium sheet, not the drawer it is filed in — and every generated file is byte-for-byte what it was.
2026 · 8 September
A first-person account that ends the moment two words fit had nothing under it about what a word that fits is for, and the writers who answer that were gathered on Stimpunks pages that are a finding aid and not a citation Link to this section
The Coming to Terms sheet carried Ryan Boren’s 2022 essay with every other writer’s words stripped out of it, which left it thin. A treatment on labels is now mounted below the essay: the copia, the smorgasbord, the arrangement of building materials, and the direction of travel that decides whether a word is invention or classification.
The frame is Ryan’s own: labels as a copia and a smorgasbord that you mix and match and self-apply. Copia is the rhetorician’s word for abundance — you generate the range before you choose — and Jordynn Jack pointed it at gender in 2012. Sonny Jane Wise set the same shape as a plate you fill yourself, and Florence Ashley supplies the sentence that stops it becoming a free-for-all: people arrange similar building materials differently, and an arrangement is not a lie.
The hinge is the direction of travel. Ira David Socol, writing in 2009, puts it in one line: only when people get to choose their own labels does any of this build anything. A word you reach for and the same word handed to you on a form are not one object in two coats — one is invention, the other is classification, and classification runs one way. Nick Walker built that direction into the grammar, the verb before the adjective, which is the sheet’s conclusion in his words rather than ours: nobody can diagnose you with a practice.
And the bill is real, which the sheet says at the same length as the case for. Helen Edgar aims the complaint at the right object — take the word away and the gate is still there, only the key is gone — and refuses to choose between labels as barrier and labels as liberation. The last word goes to a writer shedding theirs, and to the order of that sentence: the shedding comes first, the privilege named second, and the privilege is having had the words at all.
The label read The essay as published, with the quotations from other writers taken out. Ryan’s words are unchanged.
True of the sheet as it was, and false the moment anything was added under it. The label now names the second text and the month it was appended, and carries a new Appended line beside Written, so the two dates on the sheet cannot be read as one.
The seam is marked on the page as well as in the label. A note between the two texts says where the 2022 essay stops and the 2026 treatment starts. On a sheet whose whole subject is a word that fitted at a particular moment, letting four years of hindsight run on unbroken from the first-person account would have quietly improved the past.
The material was gathered from three Stimpunks pages, which is where it lives and is not where it can be cited from. Every quotation was then read in the work it came from — Wise’s post, Ashley’s published PDF, the Internet Archive’s capture of Socol’s 2009 guest post at an address that no longer resolves, Walker’s own page, Helen’s post, and the shedding post. Three originals keep spellings ours would not: Each of us are
, pathologizing
with a z, and reveling
with one l.
One line was cut and then put back, and the rule that cut it was the thing at fault. Language is not a set menu, it’s a buffet
is a transcription of speech from a video by The Leftist Cooks, taken down by Ryan and published on the glossary. It came out of the first draft because the caption track returns nothing and the wording could not be re-checked. That is a reason to label a quotation, not to bin it — a spoken line has no printing to go back to, only somebody’s ear, and the citation names the video, the channel and the date. It is on the sheet with the transcription attributed in the caption.
So the ledger’s rule about our own library has been narrowed to what it was actually for. It exists to stop our own prose — a gloss, a summary, a paraphrase — being read back later as somebody else’s wording. A direct quotation Ryan transcribed from a paper he read and published with a citation to that paper is not that; it is a first-hand reading with the source named. Papers get rented and access lapses. Re-reading is an upgrade, not a precondition, and the citation is the thing that has to be right.
The gap was named on the sheet, and then it closed. Jack’s Gender Copia is closed access and is held nowhere we could reach; every hit in our own library was one of our own pages quoting it, which is five witnesses that are one witness. The section shipped its first draft describing her argument and saying in the same breath that it was describing rather than quoting. Then Ryan put a scan of the printed article in the library, and the section was rewritten to quote her: the copia passage from page 3 as a specimen, the array of terms, and the four verbs from the Conclusions.
And the print pages punctuate her differently from the digital text. Our glossary carries masculine=feminine, sex=gender, male=female, nature=culture, symbolic=embodied. The printed pages carry a solidus in every one of those places. Neither is a mistake and this is not a correction of anybody — a slash rendering as an equals sign is ordinary publisher typesetting, the title of the same article is Sex/Gender in both, and the words are identical throughout. It is the Woolf trap in miniature: two real editions, and a quotation that is only right once it is attached to the copy it came from. This sheet quotes the print pages because the print pages are what was read, and the caption says so. Neither text is to be tidied against the other.
2026 · 8 September
The most-quoted sentence about lavender and Abraham Lincoln is word for word what Carl Sandburg wrote, and the man it describes is Joshua Speed Link to this section
Sheet No. 7 reads violet, pansy, green carnation, and lavender as one process caught at four moments: a description becomes a code, the code is read by the people it was meant to escape, and what is left is a name in somebody else’s mouth. Four public-domain plates, two of which are the wrong object and say so.
The set of four is Sarah Prager’s, gathered for JSTOR Daily in January 2020, and the sheet says so in its second section rather than its footnotes. What is ours is the reading: that a worn code fails by succeeding. It works until enough people use it, and the number of people who make it useful is the number who make it legible from outside. Then it is not a code, it is a charge — a word a newspaper can print and a court can enter into evidence — and the last move available is to wear it anyway, in the open, until it goes back to being a description.
The title is line 3 of Lord Alfred Douglas’s Two Loves, published in The Chameleon in December 1894 and read out against Wilde at the Old Bailey four months later. The poem opens in a garden that already has the violets in it — white lilies / A few, and crocuses, and violets / Purple or pale
— which is the sheet’s own connection and not Prager’s. Quoting Alcaeus on Sappho in Wharton’s 1885 rendering, Douglas, the 1906 shorthand reports of the trial, Sandburg’s 1926 first edition, and Prager twice.
The sheet is as careful about what it does not say. Wilde’s green carnations at Lady Windermere’s Fan, George Chauncey’s pansy craze, the Lavender Scare, and the Lavender Menace action are all named as Prager’s or her sources’, quoted as hers where quoted at all, and not repeated as ours. A note on the page says the gap is deliberate and sends the reader to her.
The sentence travels as Sandburg on Lincoln: A streak of lavender ran through him; he had spots soft as May violets.
Page 265 of the 1926 first volume opens Chapter 54 with it, and the subject of the paragraph is Joshua Speed. Sandburg extends the figure to Lincoln in the next sentence but one — different words — and on page 266 gives it to these two men
together.
Nothing was fabricated and no word was altered. The author, the book and the year are right, and Sandburg did say it of Lincoln, so the claim the sentence is usually deployed to support survives the correction whole. Only the him slipped, and the him is the entire meaning: a sentence about two young men who told each other their secrets in Springfield is a different sentence from a sentence about a president. This is the failure named in CLAUDE.md as this site’s characteristic one, found in the wild rather than in our own drafts. Prager names Speed in her very next sentence and her book is partly about him; this is compression in a much-retold line, and the sheet says so in as many words rather than scoring a point.
The corroboration rule fired before an error this time, not after one. Three Internet Archive copies were read first and all three agreed — and all three were scanned at the same centre, which is one pipeline and therefore one witness. That is exactly the trap the Dickinson entry below records, where two copies from the same library agreed on a broken piece of type. The passage was re-read in the University of British Columbia Library’s copy, scanned at the University of Toronto, before a word of it was published.
The violet mounted is the wrong species. Sappho’s violet is the Mediterranean Viola odorata; the plate is Viola pedata, the American birdfoot violet, photographed for a New York state museum survey in 1918, because that is the public-domain violet plate we had. The caption carries the correction on the page — The plant is the genus, not the poem
— and a note at the foot of the sheet asks readers for a better plate. It is logged as open in the ledger, and the fix is one line of markup the day a Viola odorata plate turns up.
The carnations are the wrong colour and there is no right one. A green carnation is a white carnation stood in dye, so no botanical plate of the flower Wilde’s friends wore exists or could — which turns out to be a fair description of the code itself, and the caption says that too. The other two plates, the 1896 pansy and the Hulme lavender, are simply the right flowers.
The sheet’s header drawing is the four plants of the front page’s new border, drawn at size and growing out of one ground line, in the order the sheet reads them. All nine stem --len values are the measured getTotalLength(): three were declared short on the first pass, which is invisible in the finished drawing and leaves the stroke permanently unfinished in the animation.
2026 · 8 September
Four flowers people wore when saying it in words was dangerous, drawn onto the corners of the plate of sheets Link to this section
Front-page furniture. The plate of sheets in What grows here now sits inside a ruled frame with a botanical sprig on each corner: violet, pansy, green carnation, lavender.
Violet, pansy, green carnation and lavender were all worn or sent as signals, at times and places where saying it in words was dangerous. Drawing them onto the corners of the plate puts the site’s subject into the site’s own furniture rather than into another paragraph about it. The four are gathered as a set by Sarah Prager in Four Flowering Plants That Have Been Decidedly Queered (JSTOR Daily, 29 January 2020), and the line under the frame credits her for the gathering.
It credits her for the gathering and nothing else. Her specific claims — Wilde’s buttonhole in 1892, Sandburg’s streak of lavender
, the violets in The Captive, the Lavender Menace action — are hers and her sources’, and none of them has been read back to a primary here. So the page asserts none of them. If these four ever become a sheet, that reading comes first.
Two things a sheet would have to say out loud, found while looking for plates. The obvious public-domain violet plate is Viola pedata, an American species photographed for a New York state museum survey — not Sappho’s violet. And no plate anywhere shows the flower Wilde’s friends wore: a green carnation is a white one stood in dye, so every carnation plate in existence is the wrong colour. Mounting one under that name would be exactly the quiet generalization this ledger exists to catch. The plates were previewed and held back for that reason, among others.
A four-sided vine drawn as one stretched SVG shears at its corners at every window size. A border on the wrapper never distorts, and four fixed-ratio sprigs pinned to it ride along at any width. Each sprig is drawn natively for its own corner rather than mirrored into place, because a mirrored bottom corner hangs its flowers upside down — fine as wallpaper, wrong on a herbarium sheet. The vine arms end in a tendril curl; a blunt round cap at full stroke width reads as a cut twig.
The frame bleeds out into the gutter by exactly its own padding. Padding it inward instead left the grid 387px, which is under the 417px that two 12.5rem tracks and a gap need, and the plate silently collapsed to one column — a stack of cards, which is a list, not a plate. That is the identical failure .qe-plate-grid’s own comment already records from the day the grid was written, and it still caught this change. Under 30rem the sprigs come in flush with the frame: hung outside it, the violets were clipped by the viewport at 390px.
Every new fill — four flowers and a narrow leaf — went into the print sheet’s line-art rule the day it was written rather than the day it failed, which is the standing debt from the 44 pages that printed blank on Star Stuff. The twelve stem --len values are measured getTotalLength(), not declared, which is the correction the Dickinson entry below already had to make once.
2026 · 8 September
A heading that says the type plays was set in the same even measure as every other heading, which is a claim arguing against itself Link to this section
Front-page typography only. Nothing a sheet claims about a text has changed.
The type plays, and the words do not move is now set per word. The softness rises across the first half and two words sit a degree off the line — and do not move is the one phrase set flat and straight, at SOFT 0, WONK 0. The heading demonstrates both halves of what it says rather than asserting them in an even line. Per word, never per letter: a heading cut into letter spans is one line to the eye and a stutter to a screen reader.
The verb gets the axis at its full extent. Queering in Queering is a verb and queer in To queer is to adapt now run at SOFT 100 against the heading’s own 40. Every h2 here already sets WONK 1, so the deviation a reader can actually see is carried by the softness — in roman, WONK alone moves too few glyphs to register at heading size, which is the same reason the type specimen on the colophon is set in italic.
Two rules in queering.css, reusing the .w idiom the cut-out line already had, and both switched off under html.plain along with everything else decorative. The rotation is dropped below 30rem, where a leaning word collides with its neighbour instead of leaning away from it — the guard the leaning title on Sheet No. 5 already needed.
2026 · 8 September
Higginson wrote let us alter as little as possible
and then printed Dickinson’s poem with eight of its nine dashes gone — and the copy a reader will find today has lost a word out of the line that asks to be moored Link to this section
Sheet No. 6 reads Wild nights – Wild nights! as co-regulation and answers it with a poem of Ryan’s. It mounts the Houghton leaf in facsimile, which makes it the first plate here that is licensed rather than public domain.
Twelve lines, three finite verbs, and every one of them a conditional: Were I, should be, Might I but. Nothing in the poem takes place. The sheet reads that as the grammar of limerence in Dorothy Tennov’s strict sense — the desire to be desired, defined by uncertainty — and reads the imagery as the clearest description of co-regulation anybody wrote before the word existed: the winds are not stilled, they are made futile, and what makes them futile is a place and company rather than a temperament.
The compass and the chart are the instruments you need in water you do not know — continuous correction, checked and rechecked — which is masking described as equipment. Dickinson does not say they were wrong. She says they are done with. Quoting Janae Elisabeth, Hogenkamp, Sanghavi and Natri, Helen Edgar twice, Kapp and six co-authors, Nick Walker for Margaret Price’s bodymind, and Helen Edgar again for Deb Dana’s glimmers.
The sheet carries a second poem, and it is ours. Thirty-two lines of Ryan’s, written for a person rather than a readership, mounted at his request. queering.css gained a .qe-verse component so that our verse and a dead poet’s verse can never be mistaken for one another: the specimen keeps a solid moss rule on the left and the display face, the reply gets a rust rule on top and the body face in italic, and a label that says whose words they are in words rather than in CSS.
The Poetry Foundation prints Franklin, credits the edition, and is right. The Academy of American Poets prints a composite: the dashes restored, so it is not 1891; heart, compass, chart and sea still lower case, so it is not the manuscript; a comma in Ah, the sea!
that is in neither; Wild Nights
capitalized where neither the leaf nor 1891 capitalizes it. And line 11 reads Might I moor.
Might I but moor is a plea with a limit written into it — if I could only, asking for the smallest possible version of the thing. Might I moor is a request for permission to dock. A poem that asks to be moored has had the hinge taken out of the asking, and the page carries no editor, no edition and no date, only This poem is in the public domain,
which is true of the poem and says nothing about the text. Read out of the live page on 8 September 2026.
This is the third time the register has caught this shape. Woolf had two texts and both were hers; Rossetti has a colon in her first printing where every circulating copy has a full stop. Name the printing, or do not quote.
Page 97 of Poems, Second Series takes nine dashes down to one — the em dash closing line 6, and even that has acquired a comma in front of it. Four of her capitals come down: Heart, Compass, Chart, Sea. Eden keeps its capital, because Eden is a proper noun in anybody’s grammar and the other four were only proper nouns in hers. Three exclamation marks and three commas arrive. Three further differences are the volume’s typography rather than editing — a two-line drop cap, the inset second line that the drop cap causes, and a space before every exclamation mark, which is the same French spacing as the 1896 Rossetti volume.
The lineation is the exception and it deserves better than it usually gets. Dickinson wrote Might I but moor –
and ran out of leaf, so Tonight –
went on the line below. Franklin records that division and reads through it; Todd and Higginson set what was in front of them. One editor reproduced the poem and the other reproduced the leaf, and both are defensible. The sheet says so rather than scoring a point.
Higginson’s letter of 21 April 1891 was read on page 127 of Millicent Todd Bingham’s Ancestors’ Brocades (1945) — rendered as an image and the type read, because that page’s OCR mangles the ampersand and the footnote marker. He is frightened of the poem, calls her a virgin recluse
five years after her death, and prints it anyway: Yet what a loss to omit it! Indeed it is not to be omitted.
The sheet does not claim he made the changes — nothing read here establishes whether the pointing is his, Todd’s or the compositor’s, and pinning it on the man whose letter survives would be convenient rather than true.
Page 97 was read in three separately scanned copies. In the first two, line 11 reads mocr instead of moor — a broken piece of type, unambiguous at native resolution, identical in both. Both are digitised from University of California Libraries holdings. The University of Toronto copy has the word intact.
The sheet nearly reported a press defect as a variant reading. The Rossetti entry in the ledger says its colon was checked in two separately scanned copies
, and it happened to be two libraries — which made the phrase read as sufficient when it is not. The rule is now written down in both ATTRIBUTIONS.md and DECISIONS.md: corroboration means a different physical copy, from a different holding institution, digitised by a different pipeline. Two of those three is not enough. No guard can catch this; nothing on disk knows which library scanned which item.
Caught before the sheet shipped, and logged because the third one is worse than anything the register has carried yet. The Hogenkamp paper was cited as 10.3389/fpsyg.2025.1546642 — a fabricated DOI, plausible-looking, for a paper that is actually in Autism in Adulthood at 10.1177/25739581261433443. An invented identifier does not fail; it resolves to somebody else’s work. The Nick Walker interview was cited as aut.2021.29014.njw; the registered DOI is aut.2020.29014.njw, for an article published in 2021. And the Trauma Geek essay had the wrong Medium slug, when the right one was sitting in the glossary page we had already read.
Every DOI on the sheet is now resolved through DOI content negotiation, with title, authors, journal, volume, issue, pages and year read off the registered record; the interview also gained Dora M. Raymaker as its interviewer, which the registered record supplies and memory had dropped. A DOI, a slug, a volume number and a page range are claims like any other.
This is the third register entry about a bad reference field, and it sharpens the standing note on check-references.mjs without quite firing it — that note says to write the link-resolver half if a third bad citation ships, and none of these three shipped. But the case is stronger than the note assumed. Both wrong DOIs return 404 from the DOI resolver, checked: an invented identifier is mechanically detectable in a way that a wrong volume number is not, which is the first citation error on this site a guard could actually have caught. The Medium slug would not have been — that host answers a script with a 403 whether the URL is real or not, and a checker that reads 403 as broken would cry wolf on half the references here. If the resolver half gets written, it can be trusted about DOIs and must be advisory about everything else.
- The facsimile is CC BY-NC-ND 3.0, not public domain. The first thing mounted here that is licensed rather than free. The credit is the archive’s required form, the site is non-commercial, and the file is unaltered because it was requested from Harvard’s own IIIF service at the width we wanted — so the only derivative was made by the rightsholder’s server. Mounting the 1891 printed page instead was considered and rejected: it is unambiguously public domain and it is the wrong object, because you cannot show what the printers did to the leaf with a picture of the printing.
- The title is Ryan’s phrase, not Dickinson’s — the first exception to the rule that a reading is titled from its specimen. Three titles out of the poem were on the table. None of them holds both halves of the sheet, because her poem only has the swell in it.
- The reply got punctuation and nothing else. Five full stops and five commas; no word, line break or capital touched, including the lower-case continuation lines, which turn out to be consistent across all eight stanzas and are therefore prosody rather than typing. Disclosed in the sheet’s label, itemised in the ledger, and named here — because an unmarked edit of our own text is the same failure as an unmarked edit of somebody else’s, and the site just happens to be the injured party.
- The header drawing is water. One line rises out of the lower left and breaks in a curl at the upper right; one lies almost flat across the foot and curls too, because it is water and not a ground line. The two moths are deliberately together rather than in opposite corners — the poem under them is about reciprocation. Three of the twenty
--lenvalues were declared short on the first pass, which is invisible in the finished drawing and obvious in the animation; all twenty are now the measuredgetTotalLength().
2026 · 8 September
A scholar cut her own sentence down to fit a later argument, marked every cut, and in doing so demonstrated the thing the sentence says Link to this section
The front page gained two sections on Pamela Demory’s Queer/Adaptation. One of the two quotations is a quotation of the other, five years apart, by the same person.
Nick Walker gave this site the verb. Demory gives it the motion: To queer, then, may be to adapt; to adapt is to queer.
Written in adaptation studies rather than in neurodiversity, and arriving at the same place from the other road — queer as a verb, as a doing rather than a being
. It is a description of what every sheet here already does to a canonical text, and its useful insistence is that doing it is not a lesser act than writing the original.
Quoting Demory’s Queer/Adaptation: An Introduction (Palgrave Macmillan, 2019) at three places on pages 1 and 3, her Queering Emily Dickinson for the Millennial Age (Palgrave Macmillan, 2024) once, and Linda Hutcheon at one remove, named on the page as quoted by Demory. Also on the page: the sheet count in What grows here, which had said three since Sheet No. 3 and now says five.
In 2024 Demory quotes her own 2019 sentence and cuts it: to evolve, to repeat, imitate, parody, make new gone, but also to turn gone, and to adapt is to queer — the half that ran the other way — gone. Every fragment that survives is verbatim, and every cut is marked with an ellipsis.
This is the failure mode of this site, performed correctly. ATTRIBUTIONS.md exists because the characteristic error here is not an invented source but a tightened one: a sentence trimmed to fit, with somebody else’s name left attached. What makes Demory’s trim an adaptation rather than a misquotation is that you can see where the scissors went. The front page now says that in as many words, which is a better argument for the ledger than the ledger can make for itself.
The 2019 chapter is held in full and every word taken from it was read in place. The 2024 chapter is paywalled and is not held. Its quoted-within fragments are still verified — they are checkable against the 2019 primary, fragment by fragment, and they check out — but Demory’s own 2024 framing sentence around them reached this site as a transcription, not as a page anybody here has read.
Everything checkable about it was checked: title, author, book, editors, series, publisher, and year, all against Springer’s record. The sentence itself is logged in ATTRIBUTIONS.md as verified in halves, with the unread half named. A quotation we believe and a quotation we have read are two different things, and the register is where the difference gets written down rather than forgotten.
2026 · 8 September
An editor in 1733 decided Miranda’s hardest speech was not credible coming from her, moved it into her father’s mouth, and three centuries of editions followed him Link to this section
Sheet No. 5 reads Shakespeare’s The Tempest alongside Waterhouse’s 1916 canvas. The layout came from Helen Edgar’s own Claude session and was adopted as she sent it; two citations in it did not survive checking.
Miranda’s name is Shakespeare’s coinage, built on the Latin mirari, to wonder at. The sheet turns the preposition: not wondered at, which the play does to her constantly, but wondered with. Six quotations from the play, the boy player who first performed her, the speech Lewis Theobald reassigned, and the chain of everybody who has staged her since.
Quoting the play in the Arden text, and Judith Butler, Sara Ahmed, Alison Kafer, Aldous Huxley, Nick Walker, Ann Thompson, Jessica Slights and David Kathman by reference. The Theobald reassignment was confirmed at two independent sources: the Folger edition prints the speech as Miranda’s, and the Shakespeare Navigators note gives Theobald’s own reasoning — that a three-year-old could not have taught Caliban to speak.
Same editor, same 1733 edition as Sheet No. 4. Theobald put weird back into Macbeth over Shakespeare’s weyward in volume 5 of the same Works. Two sheets now turn on one eighteenth-century editor deciding what a woman could plausibly have said.
The draft’s reference list put Kathman’s How old were Shakespeare’s boy actors?
in Shakespeare Survey 59. It is volume 58 (2005); the pages, 220–246, were right. And Ann Thompson’s chapter was credited to an editor named K. Chedzoy. The editor is Kate Chedgzoy — the draft had dropped a letter out of her surname. Both corrected before the sheet shipped.
This is the failure the register already carries once: a journal citation handed to us with the wrong issue and the wrong pages. It arrives the same way every time — inside a reference list that looks finished, in a field nobody reads twice. A volume number is a claim like any other and gets checked like one.
A third entry credited Helen Edgar’s Wyrd, Weird, and the Invention of Normal to Queering Earth, at an address on this site that does not exist. Her essay was published at More Realms in July 2026; this site published a reading of it. The reference now points at her publication, which is the byline rule from the entry below applied to a bibliography: naming ourselves as the publisher of prose she wrote is the same elision as putting her name over prose she did not.
The draft arrived as a self-contained page with its own palette written in hex. The typography survived and the hexes did not: queering.css gained a restaging section in which every colour aliases a --qe-* token. The leaning title, the wobbling section heads, the chain of stagers and the staging labels are all hers.
- The chain is an
<ol>. It arrived as a row of spans with→between them — five decorative arrows read aloud as words. The order is the content, so it is a list, and the arrows are drawn by CSS with an empty alt string. - The correction uses
<del>and<ins>, which is what Theobald actually did. It arrived as aline-throughon a<span>— invisible to a screen reader, which would have erased the one device on the sheet that is an argument about erasure. - The struck name is moss with a coral rule through it, not coral letters at 0.65 opacity, which is how the draft had it and which fails 7:1 twice over. The colour goes on the strike, never on the letters.
- The plate is the scan already on disk. The draft hot-linked Wikimedia with a JavaScript
onerrorfallback readingPlate to be inserted — source a high-resolution scan before publishing
. Waterhouse’s Miranda was mounted on Sheet No. 4 the same day, alt text and provenance already verified, so the sheet mounts the local file and the fallback is gone.
Both chains carry you, reading this
on the end, which is the sheet’s own argument about itself and not a flourish.
2026 · 8 September
A site that publishes a ledger of everyone else’s words was keeping the account of its own mistakes in a file only we could read Link to this section
Four sheets in, the corrections had piled up in the repository and nowhere else. This page is the fix.
Backfilled from the full commit history, cross-read against ATTRIBUTIONS.md and DECISIONS.md so that every correction named here is the one those files record. Linked from the footer of every page, next to the colophon.
It is drawn as a register rather than as a list of version numbers because that is what this site already is: things collected, mounted, labelled, and sometimes relabelled. The four kinds of entry are the four things that happen to a herbarium sheet.
2026 · 8 September
A sheet shipped with Helen Edgar’s name over prose she did not write — she declined the credit, and the answer had been written in our own colophon before the sheet was made Link to this section
Sheet No. 4 reads Helen Edgar’s Wyrd, Weird, and the Invention of Normal: before weird meant strange, wyrd meant fate, and the thing that got invented in between was normal.
A reading of Helen’s More Realms essay, with the word’s own drift down the page: wyrd as what comes to be, weird as the Fates’ own word, and weird as odd-looking and disturbingly different, which is where it arrives around 1820.
Quoting Alby Stone, Karen Bek-Pedersen, Mark Fisher, Robert Chapman, Eve Tuck and K. Wayne Yang, Elliot Wassell, Megan Ingram and Kai Jacobsen, and Ombre Tarragnat; describing Susan Schoon Eberly’s work on changelings and the folklore of disability without quoting it, because the article is paywalled and was not read here. Public-domain texts on the sheet: The Wanderer, Völuspá 20, Tam Lin (Child 39A), and Yeats’ The Stolen Child. The Old English gloss is ours and is labelled as ours — translators do not agree on ārǣd, and picking one rendering silently is picking a reading.
The sheet first carried a Written by — Helen Edgar row, because the argument, the sources, and the reading list are all hers. The draft flagged the risk and shipped anyway with a caveat row underneath instead of a fix. Helen read it and declined: I can’t take any credit beyond you reading my weird stuff.
She is right, and the colophon had already written the answer down: a label carries the date of the reading, and who read it
, and a specimen is collected, not written.
That is an authorship model, not a glossary entry. The label now reads Specimen — Helen’s essay; Maker — Helen Edgar; Read by — Ryan Boren. Nothing about the quotations changed; they were always marked and linked.
The rule for every sheet from here: a living person gets Maker for what they made and Read by for what they read, and never Written by for prose they did not write. Crediting the house instead — by Queering Earth
— was on the table and was rejected: naming an institution where a person belongs is the same elision as naming a person where an institution belongs. A caveat row under a wrong byline is not a fix. It is the wrong byline with a footnote.
Knock-on from the byline rule, applied the same day. Under that grammar the Wyrd sheet is a reading, not an essay, so the kicker, the plate card, three sibling navs, and the social card all changed to say so. The Army of the Upright’s Read by row went from Helen alone to Helen and Ryan.
One thing left untidy on purpose: this sheet keeps Helen’s title rather than taking a phrase out of the specimen the way the other readings do. If a session wants to tidy that, the title is the change and the address can stay.
Edward Robert Hughes, Midsummer Eve (c. 1908), and John William Waterhouse, Miranda — The Tempest (1916). Both public domain on the artists’ dates; both captions say she picked them, because on this site choosing the plate is a real contribution with a real name on it — and this is the sheet on which a real contribution had just been credited to the wrong kind of row.
The Hughes plate first sat between He was convicted of manslaughter and So: no romanticising the fae on this sheet, which split two sentences that answer each other and made a charming fairy painting the punchline to Bridget Cleary’s murder. It now opens the section instead. Where a plate sits is an argument, not a layout preference.
The brief for the sheet gave Elliot Wassell’s paper on Autistic joy as Disability & Society, 41(3), 1–26, 2025. The article’s own first page gives volume 41, issue 1, pages 236–261, 2026. 2025 is the online-first date, and 1–26
is the give-away of a citation copied out of an unpaginated online-first PDF.
Corrected here. Recorded as an open item for a session in the knowledge-system repository, because if that citation is sitting in notes elsewhere it needs the same correction — and this site does not edit that repository.
- The Waterhouse caption said Miranda had never seen anybody but her father and Caliban. Wrong — she also half-remembers
four or five women once that tended me
. And it placed the brave-new-world speechfour scenes later
, which is four acts. Both fixed against the text of the play. - The Bridget Cleary paragraph said she was burned to death by her own husband and relatives and named no verdict. The relatives’ role and the cause of death are both contested in the record; the sentence was narrowed to what is not. She died 15 March 1895 at Ballyvadlea, County Tipperary; her husband maintained she was a changeling; nine people were charged; he was convicted of manslaughter.
A caption is a claim like any other and gets checked like one. Alt text on both paintings was written from looking at the images, not from the catalogue record — descriptions inherited from a catalogue record describe the catalogue record.
Three quotations reach the Weird Sisters section through Karen Bek-Pedersen’s article rather than from Holinshed, the First Folio, and Theobald themselves, and every caption says so with her page number: a secondary source that says it is quoting is still a secondary source, and the reader is owed the chain.
Her own argument is that Shakespeare wrote weyward deliberately, that his three women are witches rather than Fates, and that Theobald’s 1733 emendation bypasses Shakespeare altogether
— which is inconvenient for a sheet about reclaiming the Weird Sisters. It is quoted twice and gets its own item in What this sheet will not tidy. Taking a scholar’s evidence and leaving her conclusion behind is the worst version of the paraphrase failure, because every individual quotation is exact and the page still lies.
Ryan’s brief was take inspiration from zine walls
, and the obvious risk in it is that a photocopied flyposted wall and a Victorian specimen sheet are not the same object. What made it work was noticing that they are: both are things cut out, laid down at an angle, and fixed where they overlap — one with masking tape, one with gummed linen strips. So .qe-wall, .qe-drift, and .qe-cutup are built from the card, the rule, and the accent colour the site already owned, rather than importing a second visual language. No new motion: the drawing at the top grows, the wall does not.
- The wall shipped as one column at every window size. Two 13.5rem tracks plus the gap need 452px and the measure gives 448, so it silently collapsed into a stack of slips — a list, not a wall — and it looked deliberate. Found by reading the computed
grid-template-columnsin the browser, not by looking at the page. Now 12.5rem. - The word-drift rail became a column rather than a third exception to the measure. Three states across 448px give 136px each, which will not carry the gloss under each word. The rail runs down the sheet instead. One fewer exception is worth more than one better timeline.
.qe-cutupuses inline-block, not flex. With flex items the scissored words look identical and copy out asoddifficultimmature..qe-plate-widecame back, exactly as the note about deleting it said it would — Waterhouse’s Miranda is 138cm across, and inside the portrait cap the foundering ship was a smudge in the corner.
A new section, Who reads, and who writes: these sheets are drafted in Claude Code sessions and edited by whoever is on the Read by row. Asked and answered as one honest section in the colophon and nothing in the labels — a label is about the reading, not the tooling, and a tool cannot carry responsibility, which is what a byline is. A site that keeps a ledger of everyone else’s words owes an account of where its own came from.
2026 · 8 September
Two grey woodcuts came off a colour sheet, and the drawing above them was rebuilt twice before it stopped standing to attention Link to this section
Both changes are about looks rather than accuracy, and both turned out to be the sheet’s own argument correcting the page.
Sheet No. 3 first mounted two figures from Charles Darwin’s Climbing Plants, chosen because the sheet’s argument is about holding on without merging and Fig. 13 is a tendril spiralling in two directions at once. Ryan: The black and white tendril illustrations are a little underwhelming. Let’s drop the tendril requirement and go for colour.
He is right about the page — a herbarium sheet in daylight is a colour object, and two grey rectangles of 1876 line-block sat on it like photocopies.
Replaced by three chromolithographs from Annales Musei Botanici Lugduno-Batavi volume 1 (1863), all lithographed by Emrik & Binger of Haarlem, each with a different draughtsman; and, in the section on what a fruiting body is for, a hand-coloured plate from M. C. Cooke’s Illustrations of British Fungi. Nothing about the Darwin verification was wrong. His reversed spiral is still on the sheet, still credited, quoted and linked instead of mounted, and the section reads no worse for it — the idea survived as prose.
The rule this settled: on this site a plate is chosen for how it looks on the sheet first and for what it depicts second. An illustration that has to be explained before it earns its place is not earning its place.
The Biodiversity Heritage Library’s Flickr tags on Tab. IV carry taxonomy:binomial=Gonystylus macrophyllus. The plate itself says GONYSTYLUS MIQUELIANUS, T. ET B., and that is what the sheet cites. The two may well be synonyms in current taxonomy — a question for a botanist, not for us — but the object’s own printed name is the object’s own printed name.
Third case on this site: a wrong Fitch on a neighbouring Curtis’s plate, metadata naming the wrong Darwin as the artist of his son’s drawings, and now this. Standing note, now with three cases behind it: read the corner. Every time. The volume itself was pinned by fetching the same Internet Archive leaf number from all four volumes of the serial and comparing them, because the plate numbering restarts each volume and Tab. IV
on its own identifies nothing.
v1 was five upright stems, evenly spaced, on one flat baseline — the argument of the sheet drawn literally. Helen: can we have squiggles and swirly bits so it isn’t all linear? may be add some mushrooms or something
. A sheet whose thesis is counter-narratives following their own rhythms had a drawing in military formation at the top of it. No guard can catch that: the markup was valid and the tokens were correct.
v3 is Art Nouveau, to Helen’s brief — flowing curved vines, spiralling tendrils, organic scrollwork, asymmetrical, nothing rigid. What that actually required: no baseline and no roots, so nothing can line up; every terminal curling back on itself, because a curve that merely stops is the thing this drawing is not; and a taller canvas, because filigree needs vertical room or the curls close into blobs.
The part that nearly got missed: the vines landed in v3 while the flowers and mushrooms were still v1’s — six-ellipse daisies and flat domes on sticks. Against sinuous linework they read worse than they had against straight stems, because they were now the only rigid things on the panel. A style note about line is also a style note about form. Blooms became five sinuous petals at uneven spacings; caps got an undulating margin over a bent tapering stipe.
One trap paid for here and worth stating: --len on a stem is its real measured length, read out of the live page. A declared length shorter than the actual one turns the dash into a repeating pattern and the vine draws itself on with gaps in it — invisible in the finished drawing, visible only while it grows. Three paths were short on the first pass.
2026 · 8 September
The first printing of Promises like Pie-crust ends line 20 with a colon, every copy in circulation ends it with a full stop, and the line is the one about breaking the chain Link to this section
Sheet No. 3 reads Christina Rossetti’s poem of 20 April 1861 next to a 2026 paper on supporting Autistic adults’ intimate lives.
Rossetti’s poem entire, from its first printing in New Poems by Christina Rossetti, Hitherto Unpublished or Uncollected (Macmillan, 1896), beside three passages of analysis and six participant quotations from Monique Huysamen, Chris Hatton, and Marianthi Kourti’s Embrace Difference, Challenge Normativity in Feminism & Psychology, and Amanda Van Slyke’s definition of solo polyamory.
The 1896 page 131 reads I should fret to break the chain :. The Poetry Archive, and every web copy checked, read it with a full stop. Every other mark in the poem matches: 1896 has two full stops in twenty-four lines, the circulating text has three, and eight lines end in colons in both.
The difference is grammatical. A full stop closes the thought and makes Let us be the friends we were
a fresh proposal; the colon makes the friendship the consequence of what precedes the mark.
Both pages were rendered as images and the type read, because the finding is a single punctuation mark and a text extractor is not evidence about one. Then a second physical copy — a different library, a different digitiser, a different pipeline — was read independently, and the mark, the alternating indent, and the date line agree in both. So the colon is the edition’s, not one library’s smudge.
What is not claimed: nobody here has seen her manuscript, so this is the earliest reading we can put our eyes on rather than a certified authorial one, and nothing on the sheet says anybody changed the mark on purpose. Three features of the 1896 page are the volume’s typography and not hers — French spacing before every colon, a drop cap, and a full-capitals title — and all three are normalised on the sheet and said out loud on it.
Promises and pie-crust are made to be broken
was proverbial before Rossetti used it. The attribution in circulation runs to Swift’s Polite Conversation (1738), which nobody here has read in a primary, and secondary sources record printed uses earlier still. The sheet therefore names no originator for the saying, and the ledger says not to improve that by adding Swift’s name off a quotation site.
- Two of the authors’ sentences are quoted from their middles, where the original lead-in is a framing clause. The lower-case letters are kept rather than raised to capitals, and the captions say so. Raising them is the small tightening that makes a clause look like a sentence somebody wrote.
- One participant’s quotation is printed in the article with a lower-case
lin place of everyI— five times, and nowhere else in twenty-three pages. It is in the printed article, not an extraction artifact: the page was rendered as an image to be sure. The sheet printsI, because a run of strayls reads as our typo and is spoken aloud asel
by a screen reader, and no word is changed by fixing it. Recorded so nobody corrects the sheet back against the PDF, and nobody quotes thels as a finding about her. - Participants are credited the way the paper credits them — pseudonym, age, gender, sexuality, and focus group. The group is part of the identification the study gives them and is not ours to drop.
- The paper writes
autistic
in lower case throughout; house style is Autistic. Quotations keep their authors’ usage, our prose uses ours, and the sheet’s footer says so, because an unexplained inconsistency looks like carelessness.
The sheet’s definition of solo polyamory is Amanda Van Slyke’s, and the author was read off the page rather than assumed from the site. It circulates widely with nobody’s name on it, and it has one. No publication date is given on that page, so none is asserted here — and the ledger says not to infer one from a sitemap or a feed.
.qe-poem lives in the shared stylesheet rather than in the page, because poems will recur here and the second one would otherwise copy the first one’s CSS and then drift from it. A poem’s line breaks are the object being mounted: reflowed into prose it is a different poem.
- Every line is its own block element, not a
<br>-separated run. A<br>among the lines breaks child counting, so an indent driven by an even/odd rule silently re-indents the whole poem the moment a line is added — the indent is a class the markup states outright instead. And the 1896 alternating indent is a fact about that setting, not a decorative rhythm to apply to any poem. - A hanging indent on every line, so a line too long for the measure is visibly a wrap and can never be mistaken for a line the poet wrote.
- The type steps down under 26rem, and this is the one place on the site it may: seven of the twenty-four lines wrapped on a 375px viewport at the body size, and a poem read at that ratio is being read as prose. Verified at 24 lines, 0 wraps.
- On paper, a stanza never splits across a page break.
on-being-ill is The Army of the Upright; promises-like-pie-crust is The Die Uncast. The split is deliberate: the filename is the address a reader searching for the source will guess, and the title is what the sheet found in it. An essay written by us is titled by us, so the convention applies only to a reading.
2026 · 7 September
The site was linking to one address and declaring a different one canonical, and nobody would have found it by reading the repository Link to this section
Netlify’s Pretty URLs post-processing is on by default and rewrites internal links to strip .html. So the served page said /coming-to-terms while the repository said coming-to-terms.html, and every canonical tag and sitemap entry said .html. Found by reading the served page rather than the repository, while checking that something else had deployed.
Two ways out were on the table — turn the setting off, or adopt what it produces. Ryan chose to adopt it: canonical tags, og:url, the sitemap, and every internal link now say the extensionless form, and nothing is rewritten on the way out any more because there is nothing left to strip. What it costs is that the filename and the address no longer match, which is now said out loud in the repository’s own guidance instead of left for the next session to discover. The sitemap check was changed to fail on a .html address, and the failure was verified by putting one back.
What the herbarium model means here, what biophilic design survives translation to a website, the five words this site uses for its own parts — specimen, sheet, label, plate, card — the palette with its measured contrast ratios, the type and its deviation axis, plain view, the drawings, and the borrowed plates with their sources.
Until then a sheet’s only internal link was back to the plate, so a reader arriving from a search result had exactly one way onward. Each sheet now ends with Elsewhere on the plate. It sits after the <main> element on purpose: the knowledge-system mirror takes page content from that landmark and nowhere else, so navigation placed inside it would be indexed as that sheet’s own content. No guard can catch that — the markup is valid and the landmark is correct.
2026 · 7 September
The phrase on the masthead turned out to be one hyphen away from the subtitle of a book we quote on the same page Link to this section
The first two sheets went up and were mounted on the plate as numbered cards.
Virginia Woolf’s On Being Ill, read from the 1930 Hogarth Press edition — the edition of 250 signed copies whose type Woolf set herself.
Ryan Boren on a lifetime of looking for a word that fits. The one kind of sheet where Written by is the right row: his own finished text, unchanged, and the label says so.
The tagline is Post-normal possibilities. The subtitle of Walker’s Neuroqueer Heresies is Notes on the Neurodiversity Paradigm, Autistic Empowerment, and Postnormal Possibilities — one hyphen apart, on a site that quotes him on its home page, about the subject of his book.
Helen wrote the phrase in the founding brainstorm and may well have arrived at it herself; post-normal also has a separate lineage in post-normal science that nobody here has checked against a primary. So this is not a finding of borrowing. It is a finding that our own decision log was asserting there was no risk here when there plainly is one, and that assertion was corrected. The masthead now reads after Nick Walker, linked to the book, with the full account in the section where he is already quoted. After
was chosen over his phrase
, which would take the coinage off Helen, and over silence, which was defensible only until a reader noticed the subtitle.
The working tagline was Subverting, defying, disrupting, and liberating oneself from all forms of normativity,
credited to Walker. It is not his sentence. His parenthetical glosses queering, and his object is specific: neuronormativity and heteronormativity.
Generalizing his object while keeping his name on the words would have put our paraphrase in his mouth on the masthead. The page now quotes him exactly, names the two normativities he named, and says plainly that carrying the verb further out is our extension.
Separately: Nick Walker uses he/him. The home page, the ledger, and the decision log were all written with she/her and were corrected together, on Ryan Boren’s word — he works alongside Walker, and a person’s stated preference outranks a stale third-party page. The ledger records why not to fix
this back by checking a website: Walker’s own about page carries no pronouns at all.
Woolf published On Being Ill in The New Criterion in January 1926 and revised it for Hogarth in 1930. Both texts are hers. 1926 reads with love, battle, and jealousy
where 1930 reads with love and battle and jealousy
; there are four more differences in the same paragraph.
The 1926 commas look exactly like a modern editor tidying Woolf’s polysyndeton. They are not — they are her own earlier sentence, and the and…and…and is her later one. Had we corrected
either against the other we would have produced a quotation that is wrong while looking more careful than the alternative. On a site built on re-reading, a wrong edition is a wrong attribution: name the edition, or do not quote. Our own library holds a note carrying the 1926 wording under a title that names no edition, with OCR damage in the body. It is a pointer. It is not quotable.
A hand-coloured lithograph of two orchid blooms on Sheet No. 2. The artist’s name was read off the plate rather than out of the catalogue record, and that turned out to matter: the plate is signed Worthington G. Smith, F.L.S. del et lith in the bottom-left corner, and the Biodiversity Heritage Library’s Flickr tags on a neighbouring plate credit a Walter Wood Fitch
who did not illustrate it — the illustrator in that period was Walter Hood Fitch. A digitiser’s metadata is a finding aid. The object carries its own attribution in the corner.
The front page became the plate: the sheet the others are mounted on, as numbered cards with a coloured tape strip across the top of each. Card class names were taken from Star Stuff on purpose rather than invented again.
Icons and cards are generated from the shared stylesheet’s own token values, so they cannot drift from the palette. Two traps paid for in the favicon: a doubled hyphen inside an XML comment made the whole SVG fail to parse — it looked fine, served with the right content type, and decoded as nothing — and a favicon is judged at 16px, not at 64, where a tilted leaf reads as a diagonal stroke and anything filled in lichen has too little contrast on paper to be a shape at all.
2026 · 7 September
For six minutes at a time the site looked deployed: a green dashboard, auto-publishing on, and a commit several pushes stale Link to this section
The site was planted and the domain went live the same day. Between those two things, three separate wrong answers about why pushes were doing nothing.
The home page, the palette as tokens in one stylesheet, plain view as a class over one document, three guard scripts, and the bridge to the knowledge system for finding — never for citing.
- The ground is paper, and it is the other end of the day from Star Stuff. The strongest differentiation from a night-sky site is not the same site in green.
- Fraunces as the display face, because it carries a
WONKaxis — letterforms that deviate from the norm, exposed as a setting. A site about queering normativity setting its masthead with the deviation axis turned up is the argument made in the type. - Plain view is a class, never a second page. Helen asked for a plain access version; the alternative — a decorated page and a separate accessible page — drifts, and the accessible copy is always the one that rots.
- Three guard scripts came over from Star Stuff and five did not: markup, sitemap, and contrast pass here; the other five catch failures this site cannot yet have. A check that cannot fail is a check nobody reads.
- The local server roots itself at the repository rather than at whatever directory it was started from. Star Stuff’s copy does the latter, where a wrong-directory run looks exactly like a site with every page missing.
Static files, no build command, no publish subdirectory — the repository root is the site. Deploy previews on pull requests are left on deliberately: a pull request produces the real page at a real address before anything reaches the live site, which is the review path for anyone editing through the GitHub web editor rather than a Claude session.
Creating the project through the API does not wire continuous deployment, and nothing you can do from the API fixes it. The first deploy works, the dashboard shows a green light and Auto publishing is on
, and there is no webhook, no deploy key, and no status-check hooks. It looks exactly like success. Three answers were recorded and two of them were wrong before the third stuck:
- Re-sending the repository configuration leaves the deploy key null and kicks a one-off build of current
HEAD— a trap of its own, because that stray deploy looks like the link repairing itself. - A hand-made GitHub webhook pointed at Netlify’s hook endpoint, matching Star Stuff’s exactly. GitHub delivers, Netlify answers 204 OK, and builds nothing. Verified twice. Netlify only honours a hook it created and recorded on its own side. This entry was written as a fix, corrected, and then corrected again — the first correction was also wrong.
- Concluding anything from a short poll of the deploys API. It lags, and it lags by minutes. Give it three before calling a push ignored.
The only fix is netlify init --force in the repository, which provisions the webhook, the deploy key, and the status-check hooks together and needs a browser grant, so a human runs it once. The two commands that tell a wired project from a deaf one are written down, because the dashboard will not tell you.
queering.earth is liveThe site was built for a week against a domain that did not resolve, with two things held back until it did: the host redirect, which would otherwise have sent the only working address to one that does not answer, and the entry in the knowledge-system mirror’s site map, which fetches over the network and would have failed the sync. Both switched on when the domain answered.
Settled the same day the first sheet was drafted, and it is the site’s attribution discipline drawn in the layout instead of left to a reader’s good faith. The specimen is somebody else’s — the essay, the painting, the word. The label is where we speak. Their words are in the specimen; ours are on the label; the line between the two is a fact about the page and not a promise about our behaviour.