---
title: "Changelog"
url: https://cavendish.space/changelog.html
updated: 2026-09-20
license: CC0-1.0
license_url: https://creativecommons.org/publicdomain/zero/1.0/
---
# Changelog

Notable changes to Cavendish Cards — both the **deck** (cards added or reworded) and the **site** (features and fixes at [cavendish.space](https://cavendish.space/)). Newest first; dates are when a change shipped. The site deploys continuously, so there are no version numbers — for the full detail, see the [commit history](https://github.com/Stimpunks/Cavendish-Cards/commits/main).

Each dated entry is split into **Deck** (changes to the cards themselves) and **Site** (changes to the web version). An entry only includes the sections that changed.

## 2026-09-20

### Site

- **The changelog has a feed: [/feed.xml](https://cavendish.space/feed.xml).** RSS 2.0, one item per dated entry, generated from `CHANGELOG.md` in the same build that renders [the page](https://cavendish.space/changelog.html) — so the two cannot tell different histories. It is advertised in every page head with `rel="alternate"` and as a `Link:` header, not only on the changelog itself: the page somebody is standing on when they decide to follow a project is rarely the changelog, and a reader that cannot auto-discover a feed leaves the person typing a URL they have to be told.

- **It is the only push channel here, which is the reason to have one.** This site has no analytics, no mailing list, no account, and nothing that phones home — so until now the only way to know a card had changed was to come back and check. A feed closes that without opening anything: it is a static file behind a CDN, subscribing is a fetch, and the site learns nothing about who did it. The page says so where the link is.

- **A dated heading is now an anchor, and that is what an item points at.** `## 2026-09-18` renders as `<h2 id="2026-09-18">`, so an item links to its own entry instead of to the top of a page that is already five hundred lines long. It also fixes the quieter half: a link to one day's changes can be sent to somebody.

- **The item is the entry, not the bullet.** Several things shipping on one day land on one dated heading, so they land in one item — and a change appended to today's entry updates that item rather than shipping a second one. The `guid` is the anchor URL and never changes once it has gone out, which is the only thing a reader has to tell an edited entry from a new one.

- **The hygiene sites usually skip.** `atom:link rel="self"`, so a mirrored or forwarded copy still says where to subscribe. `lastBuildDate` is the newest entry rather than the build time — the channel's content changed when the changelog did, and stamping every deploy would tell a conditional fetcher to re-read the whole thing because an unrelated card face moved. Dates are assembled by hand rather than by `strftime`, because RFC 822 wants English month names and the build machine's locale is not ours to assume. Timestamps sit at midnight GMT, which is the earliest moment of the stated day anywhere west of the meridian, so an entry dated today is never stamped in the future for the aggregators that quietly drop those.

- **One fewer hand-kept copy, not one more.** The feed link had to reach all twenty-one pages, and the `llms.txt` link it sits beside was already five hand-written copies in the hand-authored heads plus two more pasted into the generator's own head templates. Both now come from one function, written into the hand-authored files inside `head:start`/`head:end` markers — the same arrangement as the menu, and required for the same reason it is: a stale menu is at least visible to whoever opens it, while a head link that stops being written is invisible until somebody says their reader cannot find the feed.

- **Fixed: every bullet on this page was its own list.** The Markdown renderer closed an open list at the first blank line, and every source here puts a blank line between bullets — forty of these paragraphs run together unreadably in an editor otherwise. So a dated entry with a dozen bullets rendered as a dozen separate lists of one item each. **It looked right and read wrong:** ten one-item lists and one ten-item list are styled almost identically, so nothing showed on screen, while a screen reader announced *"list, 1 item"* once per bullet, dozens of times down an entry — telling somebody the opposite of what the page means. The same markup had just started shipping inside the feed's items too, which is what surfaced it. A blank line now ends a paragraph, a blockquote and a pull quote, and nothing else, which is what every other Markdown renderer does with one. 183 lists became 23, with the same 245 items and not a word of text moved.

- **Merging them made the spacing wrong, so the spacing moved too.** Changelog bullets are paragraphs wearing markers — the median runs three lines and the longest twelve, where every other prose list on the site is one line — and at the 4px that suits a short list, two entries sat closer together than the lines inside one of them. They now get the same 10px as a paragraph. The 19px they had before was the browser's default margin on a `<ul>`, which is to say it was the bug, not a decision. Short lists everywhere else are untouched: of the fourteen prose pages the renderer builds, exactly one changed.

- **A build check the feed made necessary, which found a link broken since July.** Every link in `CHANGELOG.md` now has to be absolute, and `_check_changelog_links()` warns when one is not. The page could nearly live with a relative link; a feed item cannot, because it is read inside somebody's reader, where the href resolves against whatever that reader calls home. The first run found `./CALL-FOR-ART.md` — which had been broken on the page all along, since that file lives in the repo and not on the site. It points at the copy on GitHub now.

- `/feed` and `/rss.xml` redirect to it, because a feed URL gets typed by hand more than most and a 404 there reads as *this site has no feed* rather than as a typo. Netlify serves it as `application/rss+xml` — pinned on that one path so `sitemap.xml` keeps its own type — and `scripts/serve.py` mirrors that locally, so a reader pointed at the dev server sees what production sends.

## 2026-09-18

### Deck

- **The Pattern Library completed at 56 the same day, and `stuck` finally has a Pattern.** Hours after the anxiety cluster went live, the Library went from 18 published to all 56. The deck's crosswalk had flagged task initiation as a gap in its own words — *getting going is not the same as switching; 13 Context Switching Cost is adjacent, not identical* — and [55 Task Initiation](https://stimpunks.org/patterns/library/task-initiation/) is built on exactly that, grounded in [monotropic inertia](https://stimpunks.org/glossary/monotropic-inertia/): the difficulty of starting *and* of stopping, as a feature of a monotropic attention system rather than a failure of will. That is `stuck`'s own frame — the engine won't start yet, which tells you about the moment and not the person. **Second gap closed in two days.**

- **Pattern 45 is Neurological Pluralism, not Cognitive Pluralism**, matching [the glossary](https://stimpunks.org/glossary/neurological-pluralism/) where the term already lived. `your way is a real way` is the card that names it.

- **Four gaps stay open, and the thirty-eight new Patterns closed none of them** — interoception (`can't tell`), dissociation (`far-away`), regulated and good states (`bright`, `fizzy`, `warm`), and differential environmental sensitivity (the Growers). Two gaps closing in two days makes the list look like it is being worked through, and it isn't: that batch built upward into Systems, and these four sit below the Library's floor. The good-states gap is the most on-ethos of them and the least likely to arrive by accident, since a friction-lean Library has no reason to reach for it.

- **Nothing a person sees changed.** Two cards' `## Pattern` blocks moved and nothing else. The field is facilitator-layer by the one-way rule: it renders in the [guidebook](https://cavendish.space/guidebook.html) and is stripped before the deck's data, so it never reaches a card face, the starter deck, or the web deck's card view.

- **The anxiety cluster has Patterns now — 52 Threshold Anxiety, 53 Exposure Anxiety, 54 Rejection Sensitivity.** Four cards had clean lineages and nowhere in the [Pattern Library](https://stimpunks.org/patterns/library/) to sit: `big step` (threshold anxiety), `too seen` (exposure anxiety), `tender` (rejection-sensitive dysphoria), and the fix-side `no spotlight`. It was the largest entry in the crosswalk's gap list. The three Patterns are live, the four cards are wired to them, and that gap is closed. **Nothing a person sees changed** — the `## Pattern` field is facilitator-layer, the same wall as materials: it renders in the [guidebook](https://cavendish.space/guidebook.html) and never on a card face, in the starter deck, or in the web deck's card view.

- **52 shipped as Threshold Anxiety, not the drafted "anticipatory anxiety", and the rename is the point.** The [glossary](https://stimpunks.org/glossary/threshold-anxiety/) argues that threshold anxiety works better as a plain description than as a label, and `big step`'s own Notes already said *"This card names threshold anxiety"*. Glossary, card, and Pattern now use one name instead of three.

- **The card layer still waits on Helen.** The Pattern pages are the Library layer — design-frame prose over concepts the glossary already carried — and they went up on Ryan's call. The four cards' own words did not change here, and their framing is hers to shape.

- **Two new signposts in the What helps view: `Choosing` and `Same & new`.** Twelve become fourteen, and **"More" is empty for the first time** — every What helps card now sits under a signpost. `Choosing` holds `fewer choices`; `Same & new` holds `keep it the same` and `something different`.

- **They are not called "Predictability" and "Novelty", and that is the whole decision.** Those are principle names, and every existing signpost names something a person can recognise — Sound, Touch, Pressure, Light & looking. Worse, a signpost called Predictability pulls at `tell me first`, which belongs in Telling & talking because it is about *warning*, not sameness. Naming for the channel instead of the principle left an already-placed card alone.

- **A signpost is a channel with two directions, not a need with one.** That is why `keep it the same` and `something different` share one rather than getting a signpost each: the taxonomy already works this way. `Sound` holds both `headphones` (turn it down) and `a steady sound` (add some); `Mouth & nose` holds a calming smell brought close and an overwhelming one taken away; `Temperature` is one card that runs both ways. Splitting the pair would have separated two cards whose Notes point at each other.

- `Choosing` stands apart from `Being in charge` because the motions are opposite — one hands the person the dial, the other asks somebody else to cut the field down. It holds one card, which is normal here: Being in charge, Touch, Pressure, Temperature and Make your own each hold one too.

- **`one thing at a time` and `tell me first` were left where they are**, though the new signposts pull at both. Moving a card that already has a home is a bigger change than placing one that has none, and it should not ride along on somebody else's decision — a card quietly reshelved during an unrelated change is how `tell me first` came to be printed as a lily pad in two documents. Both are now their own entry in the open flags rather than a clause inside a resolved one, with what would decide each: for `one thing at a time`, whether the card is about *pace* or about *how much is live at once*; for `tell me first`, whether it belongs with the way a thing is communicated or with the thing being communicated about. Helen's, and not urgent — both cards are findable and correctly explained where they sit.

- **`_check_signpost_parity()` now guards the two lists the signposts live in.** `GROUPS` decides which signpost a card appears under in the deck; `IMPL_WHATHELPS` carries that signpost's build guidance in the implementation guidebook. Nothing joined them — one holds card slugs, the other holds prose — so a signpost added to one and not the other was wrong in a way no rebuild surfaced: a heading in the deck with no guidance behind it, or guidance for a signpost the deck no longer has. It warns on either, and on the two agreeing while rendering in a different order. Non-fatal and printed to stderr, like the condition-parity and card-citation checks beside it.

- **New What helps card: `something different`.** *"Something different from before."* A space can be well built, well lit, carefully calibrated, and still be exactly what it was a month ago; a world that never varies goes flat even when nothing about it is wrong. The card names a need for newness — **not more input, different input** — and the reframe it carries is that asking for something different is not ingratitude and not being hard to please, which is how it gets read when somebody worked hard on the space that has stopped being new. It does not cancel [`keep it the same`](https://cavendish.space/guidebook.html): a routine holding steady while the thing inside it moves is [monotropism](https://stimpunks.org/monotropism/), not a contradiction — the tunnel stays, what's in it can move. The picture is a path worn smooth with the familiar things still on it, and a branch curving off toward something bright; the worn path carries on past the fork, because the old way is not being closed.

- **A correction, since it was logged the other way yesterday.** The claim that novelty had no home anywhere in the deck was half wrong: `need more` (Weather) is already *"the world too flat, too still, too quiet."* **The state had a card; the need did not.** `need more` is about *amount* — its Notes say to add input rather than take it away — and a room can be full of input and identical every day. That narrower gap is what the new card fills, and the two are now on the distinctness watchlist together: if playtesters reach for them interchangeably, the line is too fine and this is one card, not two.

- **It is in no signpost, deliberately.** It falls into "More" in the What helps view, alongside `fewer choices` and `keep it the same`. Forcing it into a sense signpost would be wrong — it isn't a channel — and inventing the thirteenth is Helen's call, not one to make while adding a card. Three cards outside the taxonomy also make that case better than two: decision load, predictability, and novelty are almost exactly the non-sensory principles that prompted this.

### Site

- **Two new pages, both about the environment rather than the deck: [SPACE-TIME](https://cavendish.space/space-time.html) and [Building inclusive environments](https://cavendish.space/inclusive-environment.html).** The deck could already tell you what a person needs; neither page is about that. One names what a place has to hold, and the other names the layers a place is built in, so the answer to a spread stops being improvised each time. Both sit under **The model** in the menu, beside ARLES, and both open by saying which of the three they are: SPACE-TIME says what has to be true, the layers say where to build it, ARLES says in what order.

- **SPACE-TIME is Helen Edgar's, and it is carried whole.** Nine elements — Sensory attunement, Predictability and place, Acceptance and agency, Communication and connection, Empathy, then Togetherness, Insiderness and personal journey, Meaning-making and sense of place, Embodiment and uniqueness — joining the Autistic SPACE framework (Doherty et al., 2023) to the eight dimensions of care (McGreevy et al., 2024, after Todres et al., 2009) and rooting both in monotropism (Murray, Lesser and Lawson, 2005). Published first at [Autistic Realms](https://autisticrealms.com/space-time-a-monotropism-informed-framework-for-autistic-people/).

- **The infographic is laid out, not pictured.** The article's graphic is nine elements of prose, which is the worst possible thing to flatten into an image: unselectable, unsearchable, untranslatable, unreadable at a screen reader and unreadable at 200% zoom on a phone. It is rebuilt as two panels of letter tiles with the statement underneath, so it survives being read by anything. The letters are `aria-hidden` — each is the first letter of the name right beside it, and a screen reader announcing "S, Sensory attunement" would read the spelling aloud as content.

- **The table is reproduced, and it stays four columns.** The Cavendish mapping is deliberately **not** a fifth column: it is our writing, and folding it in would make one table that reads as though one person wrote all of it. It gets its own section — *What each element asks of a room* — one block per element, naming the places, the cards, and the zone-builder conditions that answer it. The table sits in a labelled, focusable scroll region, which is what makes its fourth column reachable from a keyboard on a narrow screen.

- **The figure, the table and the mapping all come from one list.** `SPACE_TIME` in `build-site.py` is the single source, and each field carries its provenance in a comment: the element names in columns two and three are other people's frameworks, cited and never absorbed; the monotropism column is Helen's, reproduced as written except for house US spelling; the mapping is ours. The article publishes the same content as a graphic *and* a table, and keeping two copies here would have let them drift the first time a line was reworded.

- **Two new build checks, one of which immediately caught something.** `_check_space_time_cards()` warns when the mapping cites a card that isn't in the deck or files one under the wrong realm — `i want to stay a while` was written under Weather, and it is a lily pad. `_check_space_time_conds()` warns when it names a zone-builder condition `rooms.js` no longer has; the page prints the zoner's own wording for each one, parsed from `rooms.js` by a `_cond_map()` the condition-parity check now shares.

- **Building inclusive environments is adapted from Stimpunks' [Create a Neurodiversity Inclusive Environment](https://stimpunks.org/design/create-a-neurodiversity-inclusive-environment/), rewritten rather than lifted** — the same rule the PMLD section was written under earlier today, and it holds even though both authors could relicense their own text. Seven layers, body outward: nervous system, sensory environment, interaction and communication, routines and predictability, instruction and assessment, discipline and repair, policy and power. Under each, what the deck and the zoner actually give you to build it — **and where they give you nothing.** The deck reaches layers 1 to 4 well, touches 5, and stops before 6 and 7 by design, which is the same line [ARLES](https://cavendish.space/arles.html) draws at Systems. Saying so matters: a deck cannot fix a place whose problem is at layer 7, and it will look like the deck failed when what happened is that nobody built the thing it asked for.

- **Both pages carry the refusal the frameworks invite.** Nine lettered elements is an invitation to score a room out of nine, and from there a person, and from there a chart on the wall with names on it; seven layers is seven columns and a grid. Neither is a scale, nobody is ever asked to name an element, and the mapping runs one way only — from what somebody laid down, to what the room owes them. The layers page also says plainly that most practitioners in an unfitting building are mandated into most of what makes it unfitting: *broken systems, not broken people* does not stop applying when the person is an adult with a lanyard.

- **Licensing, stated on the page rather than assumed.** Helen and Ryan have agreed to dual-license their own contributions so both pieces can travel with the deck under CC0. That covers their words and nobody else's — the frameworks SPACE-TIME draws together stay with their authors and are named rather than absorbed. The right to relicense your own work is not a right to relicense the work it cites.

- **Fixed: the SPACE-TIME tiles were unreadable without their stylesheet, and that is a window every deploy opens.** The letter, the name and the line were concatenated with no separator, leaning entirely on CSS to break them apart — unstyled they read `SSensory attunementThe channels a bodymind takes the world in through`. It was seen on the live site within minutes, because the service worker serves navigations **network-first** and `styles.css` **cache-first**: for one load after any deploy that adds a component, a returning visitor gets the new markup against the previous stylesheet. That window is structural and every new component crosses it. The parts are now separated by real whitespace and each name carries its own full stop, so the fallback is a sentence — "S Sensory attunement. The channels a bodymind takes the world in through…". Whitespace between flex items is discarded and the children are block-level once styled, so the styled page is unchanged but for the full stop. Logged as a build gotcha, since the rule is general: a component has to say words with no CSS, and the way to check is to disable the stylesheet and read it.

- **Fixed: numbered lists in prose sources rendered as run-on paragraphs.** `md_to_html` had no rule for `1. `, so every numbered line fell through to the paragraph branch and was joined to its neighbours — the three steps for reading a spread had been shipping on [example spreads](https://cavendish.space/example-spreads.html) as one paragraph with the numerals stranded mid-sentence. Nothing ever failed, which is why it lasted. It now emits an `<ol>`.

- **New section in the [implementation guidebook](https://cavendish.space/implementation.html#build-examples): worked examples for multi-sensory and PMLD settings.** The book had almost nothing for a person who will never point at a card. It now builds the zones from a different channel — what somebody reaches for, turns toward, settles into, or pushes away — with the cave at four heights (over a bed, a floor tent a wheelchair or a standing frame comes *inside*, an umbrella opened where the person already is, a ceiling hoop that takes a projection), the campfire as multisensory and rhyming stories, Story Massage and Dance Massage, and messy play graded by temperature and texture, and the watering hole as shared trays of paint and a projected scene held long enough that people can come into it and leave without it ending. Drawn from [Cavendish Spaces for Multi-Sensory Learners and Those with Profound and Multiple Learning Disabilities](https://stimpunks.org/2024/10/28/spaces-for-multi-sensory-learners-and-those-with-profound-and-multiple-learning-disabilities/), by Helen Edgar and Ryan Boren.

- **Written in the deck's own words rather than lifted.** The source is CC BY-SA 4.0 and every page here is CC0, and a BY-SA island inside a CC0 deck would travel outward silently through the print sheets and the `.md` endpoints. The authors could have relicensed their own text, but rewriting was the better move anyway: the section had to carry this book's voice and this book's refusals, and the source is linked so nobody has to take our word for the practice.

- **Three guardrails that carry more weight in this setting than anywhere else in the book.** A den someone cannot leave is not a den — when leaving needs somebody else's hands, the way out is a person who checks on the person's signal, not a doorway, and without that a sensory space is seclusion with nicer lighting. Whatever a person talks with comes into the space, in reach and charged; a space that separates a person from their voice is the wrong space however soft it is. And reading is not scoring: what somebody reaches for is a design brief for the room, exactly like a spread, and it does not go in a file.

- **The section says what it does not have.** The source works cave, campfire, and watering hole — Thornburg's three. The library and the habitat are Cavendish's own additions and it does not work them, so neither does this, and the section says so rather than inventing examples. A gap in the examples is not a sign the zones don't apply.

- **The lineage credit now points somewhere.** The implementation guidebook was already crediting Helen's twenty years teaching children with Profound and Multiple Learning Disabilities and linking nothing. It links the write-up. The [Cavendish Space page](https://cavendish.space/space.html#more) carries it too, under "Take it into a room," beside [Creating Cavendish Space on a Budget](https://stimpunks.org/2024/03/14/creating-cavendish-space-on-a-budget/).

- Logged for Helen's batch review — it is her practice and half her text.

- **"Building the niche" opened by assuming you already knew what to change.** *"These are the pieces you change so the space fits"* is the right sentence when somebody has laid a card. When nobody has, the section offered nothing. It now says to walk the room and ask it one channel at a time — what does a person see here, hear, smell; what meets them when they touch something; how can they move — standing in the room rather than at a desk, with the answers going into the signposts below. Adapted from the design questions in the [multi-sensory write-up](https://stimpunks.org/2024/10/28/spaces-for-multi-sensory-learners-and-those-with-profound-and-multiple-learning-disabilities/), which the section now links twice.

- **A sense-walk has a blind spot, and the note names it.** Five of the deck's twelve signposts answer a sensory question; four do not, and one of those four is **Being in charge** — the load-bearing one, because the same input is fine when the person controls it and too much when somebody else does. A survey of channels alone builds a beautifully calibrated room that nobody has the dial for. So the note asks two more questions on their own: who holds the controls, and how much a person has to say — or how fast they have to be — to get what they need.

- **Evidence logged on the homeless-signpost question.** `fewer choices` and `keep it the same` still sit in no signpost, and "Being in charge" has been the standing guess for both. It now looks wrong for either: `fewer choices` asks for *less to hold the dial over*, which is close to the inverse of control, and `keep it the same` is predictability rather than agency. The repo draws that line twice already — the [livable worlds checklist](https://cavendish.space/livable-worlds.html) keeps *Predictability and flow* and *Decision load* as separate sections, neither of them autonomy, and the same three-way split appears independently in the principles behind the multi-sensory write-up. That points at a thirteenth signpost, possibly two, rather than a wider Being in charge. Noted with it: a signpost named for predictability would pull at `tell me first`, which is already placed and has already been mis-filed once in print, and of those six principles the only one with no home anywhere in the deck is **novelty** — sensory seeking is well covered, wanting something to *change* is not. Written up in full in the open flags. A deck call, and Helen's.

## 2026-09-17

### Deck

- **The watering hole's prompt was *“A soft place to pause and be near people.”*** It is now **“Where we learn from each other.”** Two things were wrong with it. *Soft* was a metaphor, and a metaphor is the first thing to go in easy-read text — a literal reader looks for cushions. Worse, the zoner used the word twice in two senses on one page: a checkbox asking whether the room has *something soft to sit or lean on*, which is literal, sat directly above a prompt where it was not. But the deeper problem was *pause*. The watering hole is [Thornburg's third learning space](https://stimpunks.org/glossary/caves-campfires-watering-holes/) — the informal place where peers share what they know, *“acting as both learner and teacher simultaneously,”* learning through conversations rather than lectures, the water cooler and the lunchroom where things cross-pollinate by chance. Framing it as somewhere to pause and rest made it a second cave. The new wording leads with what the zone is *for*, and pairs with the library's *“Where we keep what we've figured out”* — working it out together, then keeping it. The sign printed beneath still says joining in is optional (*“Be near people without joining in”*), which is the right order: what the place is, then what it does not demand. The card is the source; the zoner and the Cavendish Space page keep hand-copies, and all four changed together. Logged for Helen's batch review.

- **`PLACEHOLDER ART · HUMAN ART WANTED` came off the card faces.** It was the condition the placeholder-art carve-out was granted on, so this is a real change and not housekeeping. What changed is that the deck became something people *print*: the new print-and-play page hands anyone the whole deck at playing-card size, and a line of grey capitals across ninety-four cards is a line nobody can take off once they have been cut. The card belongs to the person holding it, and that sentence was never addressed to them — it was addressed to us, and to anyone who might mistake a stand-in for finished art. It is still said, in the [call for art](https://github.com/Stimpunks/Cavendish-Cards/blob/main/CALL-FOR-ART.md), the README, the playtest and template READMEs, and on the site, which is where somebody who could actually send art will read it. Dropped everywhere rather than only on the print sheets: a card that says one thing on paper and another on screen is two decks.

- The picture now sits centred in its window rather than riding high in it. The offset that pushed it up existed to leave room for the line that has gone, and is computed from the two heights instead of hard-coded, so it cannot be left pointing at nothing again.

### Site

- **The Cavendish Space page led with recovery where it should lead with peers.** The watering hole read *“the zone of informal connection and nervous-system recovery — a place to pause, connect casually, and re-regulate,”* with *learner and teacher at once* trailing at the end and a “Looks like” list of decompression spaces, rest areas and step-away options. Recovery is a true thing about the zone but it is a *consequence*, not the definition. It now opens on social learning with peers, informal and unscheduled, what gets shared crossing by chance the way it does at a water cooler or in a corridor — and then says that being low-stakes by design is also what makes it somewhere to decompress. The “Looks like” list gains *places to cross paths* and leads with the social entries.

- **Place Explorers described the library as a reading room.** It read *“Everyone sharing a space to think or learn in. Together, but separately,”* with the example *“the whole class reading at the same time”* — which is silent parallel work, and not what the card says the library is. The library is *where we keep what we've figured out*: the shared store the other places feed into. In children's words it now reads *“Where we keep what we have worked out, so anyone can find it again. Look things up, and add what you know,”* with *“the word wall, or the box of instructions everyone adds to.”* The “add what you know” half matters — a library you can only take from is a shelf, not a commons.

- **Place Explorers said the wrong thing about the watering hole too.** It read *“Lots of people near each other, all doing their own thing. You do not have to talk to anyone”* with the example *“everyone drawing quietly at the same big table”* — which is parallel play, not peer exchange, and closer to the library than to the zone it was describing. It now reads *“Lots of people, showing each other what they know. You can join in, or just listen”*, with *“everyone showing the class something they made.”* Same correction as the card's prompt, in children's words: what the place is *for* first, then the reassurance that joining in is optional.

- **The printable room signs carry the zone's illustration.** A sign that said *the cave* in words only asked the one thing the deck never asks: that you read it. Each sign now shows that zone's own picture from the Places cards — the same image, so a person who cannot read the sign on the wall can still match it to the card in their hand, which is the whole mechanism of the deck applied to the room. Verified by rendering the print path rather than reading it: five zones, five pages, picture and words together on each.

- The picture is the card's art without the card around it, generated beside each face as `places--<slug>--art.svg`. A whole card face there would have printed the zone's name and prompt twice, once at wall size and once too small to read. It keeps the card's paper colour rather than going transparent, so it reads the same on screen, in dark mode, and on paper.

- **New page: [Place Explorers](https://cavendish.space/place-explorers.html).** The five Cavendish places in children's words, for ages about 7 to 11, laid out as five cards rather than a column of prose — each one showing its **real card face from the deck**, so a child sees on the page exactly the card they would be handed. The purple is the Places realm's own accent, the same one the faces carry. Adapted from Helen Edgar's *Zone Explorers*, and the same model as the rest of the site rather than a simpler one: a page for younger readers is a translation, not a reduced edition.

- **Places, not zones.** The rest of the site says zones, and [Zone a room](https://cavendish.space/rooms.html) still does. The children's page says *places*, because that is what they are — somewhere you can go — because it is the word the deck's own realm uses, and because "zone" is the word a regulation-zones framework already owns. Five named zones plus a question about how you feel reads as that framework to any teacher, whether or not it is meant. A place is somewhere a person can be; it describes the room, never the state of the child in it. The page says so in the grown-up section, along with which word the rest of the site uses, so nobody gets lost between pages.

- **The child text leads.** A page written for a 7-year-old cannot open with two paragraphs about itself addressed to adults. The attribution, the "same model, said smaller" line and the note about zones-versus-places now sit below the child's half of the page: the housekeeping at the top of "For the grown-up reading this", which opens by saying plainly where the handover is, and the credit to Helen with the rest of the lineage at the foot. The line under the heading is the child's line as well.

- **The page turns toward the room, not the child.** The draft it came from ended with a picker — choose a zone, and be told to go and find it — which quietly hands a child responsibility for an accommodation the room may not have. That is the deck's argument run backwards. The page now spends a section on the opposite: *a place you need and cannot find is the room not being finished yet*, said to the child, and repeated to the adult as information about the room rather than a request to manage. There is no picker, because the point-at-a-picture job it was imitating is already done, properly and face-down, by the Places cards themselves — so the page shows those cards and links the deck instead of building a second, worse version of them.

- **The tools keep their real names.** The draft renamed the deck a "Feelings Finder" and the room zoner a "Zone Detective." Both are dropped. "Feelings Finder" is the worse of the two — it recasts a deck of states and needs as emotion identification, which is the exact slide [Not an AAC board](https://cavendish.space/not-aac.html) exists to refuse — and inventing names for tools that already have them leaves a classroom hunting for something that does not exist. The page links [the deck](https://cavendish.space/deck.html), [Zone a room](https://cavendish.space/rooms.html), and the AAC page by name.

- **Thornburg is credited.** The cave, campfire, and watering hole are David Thornburg's learning-space metaphors, credited on the origin page, the why sheet, the guidebook, and the space page. A page derived from those three should not be the one place the lineage drops out.

- Only the child-height line and the classroom example are written into the generator; the card's **name and picture come from `cards/places/`**, so rewording a card cannot leave this page quoting one that no longer says that. The page's Markdown endpoint is generated in the same build from the same table, the way the guidebook and implementation layer already are.

- **Bigger type, shorter lines, more air.** Measured against the sibling sites at the same viewport: stimpunks.org runs 19.5px body text on a 46–50 character measure, queering.earth 19px on 44, monotropicmap.org 17px on 49 — and Cavendish was 18px on **72**. The font size was mid-pack; the line length was the outlier, 45% longer than the family, and it had the tightest leading of any of them at 1.55. Long lines need *more* help getting back to the next one, not less. Three numbers changed: the prose measure **72ch → 64ch**, body line-height **1.55 → 1.65**, and the root size **18px → 19px**. By x-height — what you actually perceive — the gap to stimpunks closes from 13% to 8%.

- Both old values sat right at a WCAG 1.4.8 (AAA) limit: 80 characters for measure and 1.5 for line spacing. Passing, but not where a site about not making people work to read should be sitting.

- Everything is sized in `rem` off that root, so one number moved the headings, the nav, the card tiles and the room signs together. Checked afterwards: no horizontal overflow anywhere, the deck's tiles still lay out and clip nothing, and the print paths re-rendered at the same page counts — 15 sheets for the deck's faces, 30 with backs, one page per room sign. The prose pages do use more paper, which is what bigger type with more leading costs: the why sheet goes from 6 pages to 7.

- The top bar fits one row on a 375px phone with 18px to spare, having been re-measured after the root change; its gaps and side padding tighten below 480px to buy that. It wraps to two rows below about 344px.

- **There is a Home link in the bar now.** Every other Stimpunks site has one and this one did not: the only route home was the first entry of a collapsed menu, which is not there until you open something. It sits first in the top bar on all twenty pages, shaped like the theme toggle beside it, and it keeps the word **Home** at every screen width — a house glyph on its own is a guess for anyone who does not already know it, which defeats the point. On the threshold itself it stays in exactly the same place and goes quiet rather than disappearing, so the bar never moves around under you.

- Four controls put the bar 13px over a single phone row, so **the deck button now says “The deck” on phones and “Open the deck” everywhere else.** It carries both labels and the stylesheet paints one; the link's accessible name is the full wording at every width, so what a screen reader announces does not change with the screen, and the short label stays a subset of it. The theme toggle drops to its icon on phones too. The bar is back to one row — 62px on a 375px screen, against 54px before Home existed and 115px with it wrapped.

- The deck button is now generated as well, from one definition, into the four hand-authored pages that carry it. Generated blocks can be **required or optional**: a missing required marker stops the build, an optional one simply means that page does not have that block — which is how the deck page carries a menu and no button back to itself.

- **The menu is now generated into the five hand-authored pages too, so `SITE_NAV` is the only copy of it.** The threshold, the deck, the zoner, the badge maker and the Cavendish Space page each carried the whole menu by hand, kept in step with the generator by a rule and a check — and the check compared hrefs, so it could tell you the links matched while saying nothing about whether the groups did. Those five now carry a marked block that `build-site.py` writes; everything outside the markers is still hand-authored and untouched. A one-word change to a nav label now reaches all twenty pages from one edit, which is how this was verified. The build reports which files it rewrote, and stops outright if a marker has gone missing rather than leaving that page quietly stale.

- **The site menu is grouped.** Nineteen flat entries was a wall rather than a list. They now sit under four headings — **Use it** (the deck, the zoner, the badge maker, print), **The deck in use** (guidebook, implementation, facilitator, example spreads, Place Explorers, group access needs, livable worlds), **The model** (what a Cavendish Space is, why this exists, not an AAC board, origin, ARLES) and **About this site** (privacy, changelog) — with Cavendish Space itself above them all. The Cavendish Space page moved down out of the tools and in with the model, which is where a person looking for it will look.

- **One taxonomy, not two.** `llms.txt` already grouped the same eighteen pages, differently, for models. It now builds its sections from the menu's groups, so the site cannot present itself to a person in one shape and to a model in another. The group's order is simply the order the groups first appear in the nav list, so there is no second list to keep in step, and a grouped page with no llms.txt description is reported on the build rather than silently dropped.

- The menu is a panel of one list per group rather than a single list with headings faked as list items, each list named for its group, so a screen reader announces “list, Use it, 4 items” and hears the group name once.

- **Fixed: the site menu's last two items were unreachable on short phones.** The menu is absolutely positioned inside a `position: sticky` breakbar, so a menu taller than the screen is not just awkward — the items past the bottom edge cannot be reached at all, because scrolling the page moves the sticky bar and the menu with it. At nineteen entries the open menu measured 692px, which overflows a 375×667 phone (iPhone SE and 8, and plenty of Androids) by 81px: **Privacy & security and Changelog could not be tapped.** On a taller phone it fitted, but at 85% of the screen, so the next page added would have broken those too. The menu now caps its own height to the viewport and scrolls, in `dvh` where supported so it measures what you can actually see rather than the viewport with the browser chrome retracted.

- The nav parity check did not catch it, and could not have: it compares the hrefs in each copy of the menu, not whether a person can reach them.

- **A fourth refused framework: no emotional sorting.** The list of frameworks the deck refuses read *no pathology paradigm, no deficit ideology, no behaviorism*. It now adds: **a card names where a person can be and what helps. It never places them on a scale of how regulated they are, and there is no state anyone is supposed to get back to. The five places describe a room, not the person standing in it.** Five named zones and a question about how you feel sit one step away from a framework that sorts children into colored zones by how regulated they look, and a school that reads the deck that way will use it that way — a chart on the wall with names on it, a daily check-in, a log. That is what the no-scoring rule and the face-down default exist to prevent, and until now the point was made in exactly one place, on the new children's page. It is now in all four hand-kept copies of the list (README, the guidebook, and both generators) plus the facilitator sheet's prose version and the why sheet's own “it doesn't” list.

- **The refusal is not anti-regulation**, which is the trap in saying it at all. A third of the deck maps to regulation patterns in the crosswalk — Regulation First, Stim Regulation, Regulation Windows, Co-Regulation — and section 1 of the livable worlds checklist is titled Regulation. The difference is not regulation versus none. It is *who the tool describes*, which is why the wording names the scale and the supposed-to-get-back-to state rather than the word itself.

- **The Cavendish Space page says the same thing where the zones are defined.** *A zone is a place, not a state.* Every one of them names somewhere a person can be — a corner of a room, with a door or a rug or a sightline. None names how a person is feeling, how regulated they look, or which one they ought to be in. You zone the room; the room does not zone anybody.

- **Fixed six documents that still said the card faces are marked as placeholders.** They are not, since the `PLACEHOLDER ART · HUMAN ART WANTED` line came off the faces earlier today. The faces changed and the documents describing them did not, so `llms.txt`, the README twice, the call for art twice, and the starter deck's preamble each went on telling a reader to look for a line that is no longer there — and `llms.txt` is the file written specifically for models to quote. `assets/playtest/README.md` was the one that already had it right. The claim is still made, in every one of those places; what is corrected is *where* it says the claim appears.

- While in the same sentence: `llms.txt` said the deck's art **is** human- and community-made. That is the rule, not the state — only the Interaction cards have finished faces so far. It now says the art *is to be* human- and community-made, that most of it has yet to be drawn, and that the call for art is open.

- **Every page says what it is now.** Twelve pages — the why sheet, Not an AAC board, origin, ARLES, example spreads, group access needs, the livable worlds checklist, privacy, the changelog, the facilitator sheet, print, and the new children's page — opened with the same generic line about the deck under their heading, which told a visitor who had just landed on one of them nothing at all. Each now carries its own: what *this* page is for and what you can do with it. The deck, the zoner, the badge maker, the space page, the guidebook and the implementation guidebook already had theirs, and the 404 page's lost the boilerplate half it was carrying.

- The fallback that allowed it is gone: `_standalone_page()`'s `tagline` argument has no default, so a page cannot be added without someone writing a line for it.

- The service worker's version hash now covers `group-needs.html` as well as the new page. Group access needs was precached but missing from the hash inputs, so a change to it never evicted a returning visitor's cached copy.

- **The Cavendish Space page links the implementation guidebook and the budget post.** It laid out the five zones and then left you at the edge of them: nothing on the page said how to *build* one. And the page that tells the Cavendish estate story — a man who could afford to construct his own conditions, and the scientists with brakemen for fathers who could not — was the one page on the site that never mentioned you can do this with a blanket over a table. The zone list now points at the [implementation guidebook](https://cavendish.space/implementation.html), which says how to build each zone in cushions, light, sightlines, and floor plan, and [Creating Cavendish Space on a Budget](https://stimpunks.org/2024/03/14/creating-cavendish-space-on-a-budget/) joins the why sheet and the broadside under “Take it into a room.” Both were already cited from the guidebook and the implementation layer; the condensed account of the model was the one place that reached neither.

- **Dropped the print-and-play PDF and its builder.** `scripts/build-playtest-pdf.py`, `assets/playtest/cavendish-cards-playtest.pdf` and its hash sidecar are gone; the new page replaces them and is better on every axis. **94 cards against 88** — the PDF skipped Interaction, which has finished faces the placeholder generator does not produce — and it used the placeholder face for every card even where finished art existed, so it had quietly started to disagree with the deck. It was Letter-only. It was also 3.9 MB of binary tracked in git that no two builds produced identically, which is why it needed a hash sidecar to stop dirtying every build. A generated artifact that needs a mechanism to hide how unreproducible it is has a bigger problem than staleness. The site's page costs the repo nothing and is rebuilt on every deploy. `build-placeholders.py` stays: `assets/playtest/**` is still the reviewable record of what the placeholder art looks like.

- With it went the last use of `cairosvg`, so the PDF venv only needs WeasyPrint now. Existing venvs are fine as they are.

- **New page: [Print the deck](https://cavendish.space/print.html).** The whole deck, 94 cards on 15 sheets, nine to a page, at **2.5 × 3.5 in** — standard playing-card size, which is what the card faces were already drawn at. It fits a normal sleeve, a normal box, and a normal hand. There is nothing to configure, on purpose: a deck is a deck, so the page has no options, no size picker, and no paper control.

- **One sheet geometry, both papers.** A sheet is exactly the 3 × 3 grid and no more — 7.5 × 10.5 in — which is the one size that fits US Letter and A4 inside a quarter-inch margin. So there is a single set of files and nothing to choose. US Letter is the tight one: eleven inches less two quarter-inch margins is 10.5 exactly, with nothing spare, and the page says so rather than letting somebody discover it a ream in.

- **A sheet never mixes realms.** It costs four part-full pages across the deck and buys the thing the page would otherwise need a control for: to print one realm, print its pages. The contents list gives the page numbers.

- Each slot is painted with the card's own paper color before the card goes down, so a straight cut through the rounded corners a face draws does not leave four white notches on every card.

- **Backs are offered and explicitly optional.** The deck's privacy rule is that face-down cards are indistinguishable — a spread must not leak before its person turns a card up — and blank card stock does that perfectly well. Where backs are wanted, every card in a realm shares one, so a back sheet is the same image nine times and alignment cannot go wrong whichever way the paper turns over.

- **Two print bugs found by rendering the pages instead of reading them.** The deck's sheets paginated to 18 pages instead of 15, and the badge sheets printed at 8.08 in wide instead of 8.5 — both because `main` and `.wrap` carry padding that is real millimetres when an exact-size sheet meets an exact-size page. And the rule meant to strip the page furniture matched nothing at all on generated pages, which nest differently from hand-authored ones. A print stylesheet that matches nothing fails silently; these were caught by rendering with WeasyPrint and counting pages, which is now the documented way to check a print path.

- `web/faces/` is wiped and rebuilt rather than written over. Netlify builds from a clean checkout so it never noticed, but a long-lived clone had accumulated 77 orphan faces from an old naming scheme — every one still precached by the service worker, every one still carrying markings the deck had since dropped.

- **New page: [Interaction badges](https://cavendish.space/badges.html).** Interaction is the one realm meant to be worn, and until now the site could show you the cards but not hand you a badge. The new page makes them at any of the four standard conference badge sizes &mdash; 4 &times; 3 in, A7, A6, and 4 &times; 6 in, each portrait or landscape, all of them sizes you can buy a holder for &mdash; from the deck's own six signals, with the card's own name and line on each. The layout is proportional rather than drawn once and stretched, because those four do not share an aspect ratio; the punch holes are the deliberate exception and stay a quarter inch a third of an inch down at every size, since that is a fact about hole punches rather than about badges. You choose which signals go in the stack, put your event's name and your own logo on them, and get sheets laid out for cutting: one signal per sheet for an event, or one set per sheet for a person. The lineage is named on the page: [color communication badges](https://stimpunks.org/access/interaction/) from Autism Network International and the first Autreat, 1996, and the [Stimpunks field guide](https://stimpunks.org/fieldguide/events/access/interaction-badges/) page organizers already use.

- **It is a print job, so it is specified like one.** Home printing gets cut lines, safe margins, and the four settings that actually go wrong &mdash; starting with scale, because a browser shrinks to fit by default and a badge printed at 94% neither fits a holder nor lines its holes up with the next sheet. A print shop gets the rest: trim size, an eighth-inch bleed, crop marks, the hex values, stock weight, matte rather than gloss because glare defeats a badge read at an angle, hole positions if they are drilling (computed for whichever size is selected, rather than written down once and left to go stale), how much to order, and what to do to the proof. Sheets are imposed butt-cut, so one guillotine cut serves two badges. Downloads are SVG with the two Atkinson Hyperlegible weights written into the file, so nothing has to be installed at the other end and no text has to be converted to outlines.

- **Your own logo, and it never leaves your browser.** The file is read with `FileReader` and embedded in the badge as a data URL. There is no upload, and no endpoint to upload to &mdash; `form-action 'none'` and "no server-side code, no database" are both untouched. The one CSP change is `data:` in `img-src`, which is the narrowest relaxation that makes an embedded logo possible; `style-src` still has no `'unsafe-inline'`, so the badge colors are classes, the sheets are drawn with SVG presentation attributes, and the print page size goes in through the CSSOM.

- **The lanyard carries the photo consent: red for no photos, black for yes.** Being photographed is a different question from being spoken to, and a photo outlives the day. The page says so, and says the part that is easy to skip &mdash; a lanyard color is color on its own, which is the one thing the badges themselves refuse to do, so write the words on the cord as well. Assembly is spelled out too: punch two holes, two binder rings rather than one so a card cannot spin and show the wrong signal, and a breakaway clasp, which is a safety requirement rather than a preference.

- **The build now checks prose against the deck.** Every card error found by reading the facilitator sheet had reached print, and all of them survived for the same reason: prose gets proofread against itself and never against `cards.json`. `_check_card_citations()` reads the documents that cite cards as examples and warns three ways — an italic list beside real cards holding something that is not a card, a near-miss differing only by its article, and a list introduced as one realm holding a card from another. Confirmed by putting all three of this week's real errors back and watching each one fire, then confirming a clean repo reports nothing.

- **Deliberately narrow, because a noisy warning is one nobody reads.** The first cut flagged three innocent sentences — a realm word anywhere in the preceding line was treating an unrelated list as a claim about that realm. It now only counts a realm word that runs straight into the list. It still cannot catch an invented phrase sitting in plain prose with no italics and no realm word near it, which is how "a minute alone" got in; that one still needs a human read.

- **Read the facilitator sheet against the deck, and it had told staff to look for a card in the wrong realm.** "Map the edges" said to lay a lily pad and then listed *slowly, tell me first, i need a minute, coming back* — three lily pads and a What helps card. `tell me first` genuinely does pad a crossing, so it is named as what it is rather than dropped. "Moving between" listed *a minute alone*, which is not a card at all; the card is `i need a minute`. Both errors were in the printed starter deck too, from the same original sentence, and both are fixed in both.

- **The sheet never mentioned the zoner or the AAC boundary.** It goes to support staff — the people most likely to read a picture deck as a communication system — and it was the one place the not-an-AAC-board line was neither stated nor linked, while four other documents carry it. It now says so, and links the page. "Build a niche" ends by pointing at [Zone a room](https://cavendish.space/rooms.html), which had gone unmentioned on the sheet for whoever is setting up the space.

- **And the share-copy line was imprecise a day after it was written.** It said the shared copy leaves out "the cards that are worn rather than sent," which describes Interaction and not the Kind words and growers it also holds back. Named properly now.

- **The facilitator sheet now says what to do with a pile of spreads.** The group-brief method has been on the site for a while and was absent from the one artifact its audience actually holds — the sheet you hand to whoever is running the space, and the PDF they take away. It is in there now, with the link, and so is the thing the sheet's sharing section had stopped describing accurately: in the deck that choice is two buttons, and a facilitator should ask for the shared copy by name, because it leaves out the note, the date, and the cards that are worn rather than sent.

- **It did not get a launch card on the front page, on purpose.** The three doors there are intents — show how you feel, set up a room, read the idea — not a list of features, and grouping a pile of spreads is a later step inside the second one rather than a fourth way in. Nobody arrives needing it: an event has to have happened first. And the front page is what a school or a parent sees first, where a top-level "run your group's needs through an AI" would reframe a deck about a person showing how they feel into a data pipeline — the exact reading the rest of the site works to refuse. Its line in the "also here" list now names the trigger instead of the mechanism: what to do with a pile of spreads after an event.

- **The "one-page print sheet" has been two pages for some time.** Nothing re-checked the claim after the sheet grew. Corrected in the four places that said it, three of which a reader sees.

- **New page: [Cavendish Cards are not AAC](https://cavendish.space/not-aac.html).** The boundary was already stated in four places, in one paragraph each, and one paragraph has not been enough. The deck looks exactly like an AAC board &mdash; pictures, a spread, a person pointing &mdash; and it is free, printable, and available this afternoon, while real AAC is expensive, gate-kept, and waitlisted. That asymmetry is what turns “they have the cards” into a reason to stop chasing a device. The new page makes the whole argument: what AAC is for and the four commitments that come with it, what the deck is for, six differences that decide the question (curated vs. comprehensive, reframe vs. referent, precision required there and not here, where the labor lands, privacy vs. transmission by default, optional vs. a right), why the inclusion test draws the line at “can’t tell belongs, hungry does not,” why growing toward comprehensiveness is a failure mode rather than a roadmap, why this is not PECS, how the two actually work together, and five standing commitments to AAC users. Linked from the guidebook’s own not-an-AAC-board note, the README, the why sheet, and the card template.

- Two lines on that page are set as large pull quotes, because they are the ones that decide the argument: *“The deck deliberately moves labor off the person and onto the environment. AAC deliberately gives the person their own power to speak. Both are right. They are not the same move.”* and *“The deck is a lens, not a language. It makes one hard-to-voice thing sayable and hands the room a to-do list. It does not give anyone their words, and it was never built to.”* Prose pages can now mark a pull quote with `>> ` in their Markdown source; the line is promoted rather than repeated beside the body text, so it still appears exactly once.

- HSTS now lasts two years instead of one. It is a per-visitor timer that resets on every visit, so this protects anyone coming back within two years of their last visit &mdash; a facilitator who used the deck last spring and returns next spring gets an encrypted connection on their first request, not their second.

- **The site now says yes to AI crawlers on purpose, by name.** `robots.txt` used to allow everything with one blanket line, which permitted the same traffic but said nothing about whether that was a decision. It now names ten vendor crawlers and welcomes each one, and explains why in the file itself: the deck is CC0, so objecting to being read would be incoherent, and if a model is going to say something about Autistic and Disabled people we would rather it had read this than not. Counter-deficit framing missing from training data means pathology language fills the gap. This changes nothing about the deck's own art, which stays human- and community-made.

- Added a way to ask whether anything was committed without being rebuilt. `build-all.py --check` runs the build and reports any generated file that moved, and an opt-in pre-commit hook runs it for anyone who wants it. The deck's generated files &mdash; the guidebook, the starter deck, the print PDFs &mdash; have drifted behind the cards before, and until now the only defense was remembering. The hook stays off until you turn it on.

## 2026-09-16

### Deck

- **Every card has a picture now.** For months the deck's 88 non-Interaction cards carried an empty dashed box where the illustration goes — a placeholder that said "image pending" and printed the picture description in words underneath. That defeated the premise. The whole idea is that a person shows how they feel by *pointing at a picture*, with no reading required, and there was no picture to point at; the one thing the deck asks of a card, it could not do.

- **So the art rule gets one narrow carve-out.** Deck art is still human- and community-made, and no AI-generated image is committed here — that has not changed and is not up for negotiation. What has changed is what a *placeholder* is allowed to be. The same carve-out already in force for the site's favicon, app icons, and card frames now covers card faces: **plain vector illustration, drawn in code**, one motif per card, written by hand as shapes with coordinates in a source file anyone can read, diff, and edit. No image generator was used, and none will be. Every card face says `PLACEHOLDER ART · HUMAN ART WANTED` under the picture, so a card never pretends to be finished.

- **[The call for art](https://github.com/Stimpunks/Cavendish-Cards/blob/main/CALL-FOR-ART.md) is still open and still the point.** These pictures exist so the deck can be printed, cut, and played now — not so it can stop waiting for artists. The moment a human piece arrives for a card, it goes into `assets/cards/` and the web and print builds prefer it automatically; the placeholder is deleted. A deck nobody can use is not a purer deck.

- **Image cues are no longer printed on the card.** They were, while the window was empty, because words were the only thing standing in for the picture. They are now what they were always meant to be: the brief the illustration was drawn from, kept in the card files and the starter deck for illustrators. The card itself asks nothing of a reader.

### Site

- **A new page for grouping a room's access needs**, at [/group-needs.html](https://cavendish.space/group-needs.html). At an event, people lay spreads; a coordinator cannot hold twenty of them in their head. The page is a method for turning the pile into one short brief for the room — and it doubles as a skill description you can hand to whatever AI you already use, so it does the sorting. Hand it the page, then the spreads.

- **The method is narrow on purpose, because of what goes wrong without it.** Left to itself, a general-purpose AI will invent its own categories for access needs, rank them by how many people asked, and hand back something that reads like a report on a group of people. So the page does not ask for analysis. It asks for translation into a vocabulary that already exists here: the seventeen room conditions behind [Zone a room](https://cavendish.space/rooms.html), plus three lists that are not the room at all — kit, permission, and pacing. A need that fits no box is listed in the person's own card rather than forced into one.

- **Three rules carry the stance, and they are the whole point.** No score, ever. The subject of every output sentence is the room, never a person or a group. And no counting — not how many spreads named a thing, not sorted by it, not marked common or rare. Access is not a vote: one person needing a way out is exactly as actionable as eight, because you build the way out once either way. Counts also re-identify, since in a small group "named once" points at somebody.

- **Consent gets a step of its own, before the method.** Turning a card face-up is consent given to the room, in the moment, to the people there — not to an AI company. So the page opens with what to do first: merge and strip names, tell people at the start that this is the plan, drop the note field, leave out a spread that would be recognizable, and know that whatever service you paste into has its own retention and it is not ours. Weather, Kind words, and Interaction cards are never aggregated at all.

- **Nothing about this touches the site's promise.** No form, no endpoint, no submission, no storage. The page is prose; the work happens in the coordinator's own tool. Cavendish still stores nothing, and still has no server-side code.

- **A fourth run, deliberately messy, caught a rule that could have leaked a private note.** The paste was journal copies with dates, notes, reflection lines, an Interaction card, a Kind word, a grower, un-merged spreads, and a sentence the coordinator had typed in themselves — roughly every failure the pre-paste checklist lists. The mapping came back exact, and all three of the mappings corrected last time were verified unmasked. Then it found the hole.

- **"Quote a non-card line back" and "never quote the note" were opposite instructions with no test between them.** The rule added a commit earlier said to quote free text back so it was not lost; the note rule said never to reproduce a note's content. Nothing on the page said how to tell one from the other — and they are indistinguishable the moment somebody tidies the word "Note:" off a note while cleaning up a paste. A tool following both rules would have quoted the most identifying text in the pile into a document meant to circulate.

- **So nothing gets quoted now, whatever it is labelled.** Free text of any kind — a note, a stray sentence, an unlabelled line — is reported as present, unmapped, and the coordinator's to read. There was never a reason to repeat it: the coordinator is holding the paste. The deck's own furniture, the title line and dates and separators, is dropped without comment, which the previous wording had also swept up.

- **The worked example broke two more of the page's rules.** It opened a line with "someone drew their own" — a person as the subject of a sentence, which rule two forbids — and its drop line read "an Interaction card, and a note field," where the indefinite article is a count of one and the plural would be a count of more. Both fixed; drop kinds are now bare labels carrying no number at all.

- **The build now checks the example against the page.** Twice running, the failure has been prose contradicting prose a few paragraphs away — the part nobody proofreads, and the part a reader copies. `build-site.py` now verifies that the example's room list runs in the page's own condition order, that its link matches its own list, and that no example line takes a person as its subject. Confirmed by breaking each one and watching it warn.

- **And the no-counting rule stopped leaning on its weaker argument.** "You build the way out once either way" is true for a fixture and not true for anything with a budget attached, and a coordinator does have to decide what to do first. The rule stands on re-identification alone, which is enough, and the page now says plainly where the ordering does come from: tick what is already true in the zoner, start with the permissions because they cost nothing, and if you still have to choose, ask the people who will be in the room.

- **A third independent run, this time on a paste of share copies, came back exact.** Same thirteen conditions as the key, in the same order, and the session reported it had not needed to guess anywhere. It confirmed what the button was for: with no reflection lines in the paste there was no text that could match a card nobody laid, which was the largest failure the method describes. It also noted, fairly, that a clean paste gives the "should not have been in the paste" safety net nothing to prove.

- **The method's own example broke two of its own rules.** It listed the room conditions in the order the cards happened to arrive — the exact thing the ordering rule below it forbids — and its sample link carried the same order, so anyone copying the example copied the violation. Its Kit line then described "something soft" using the wording of the `soft` room condition, which the prose three paragraphs earlier had just explained it is not. Both fixed, and both now checked against the page's own mapping table rather than by eye.

- **Two mappings were stretches and are gone.** `parallel existence` no longer produces "room to move": the card is body doubling — settle nearby, expect nothing — and asks for company, not floor space. `no spotlight` no longer produces "a way out": it names exposure anxiety, being called on and watched, and reading a request to leave into a request not to be addressed is the kind of inference this method forbids everywhere else. `let me stim` gains "room to move" instead, because that card's own notes say to make room for the movement.

- **Three things the method never said, and needed to.** Merged spreads repeat, so the brief must say each thing once — a list that repeats an item is a tally in a list's clothing. A line in the paste that is not a card is not the tool's to discard: a coordinator's own sentence gets quoted back under the remainder, for the same reason the note does. And a fetch layer that returns a summary of a page rather than the page loses every rule on it while looking like success.

- **The brief no longer reads as though it rests on the whole pile.** On a day when most of what was laid was weather, a confident room list implies more than it has. It now says the room list comes only from the cards that name a need — true, with no number in it and no claim about anyone's day.

- **The deck can now produce a copy meant for someone else.** It had one copy button, labelled "Copy for a journal," with a note field that said "just for you" — a private keepsake. The group-brief method had been quietly repurposing that keepsake as the thing a coordinator collects, which is why every test run failed the same way: the journal copy carries a date, a reflection question under each card, and whatever was typed in the note.

- **"Copy to share" is the card lines and nothing else.** No date, no questions, no note, and no interaction cards, kind words or growers — those are for showing in the room or keeping, not for sending on. The deck says which of them it left out, so nobody has to guess what was withheld. The strip step the method asks coordinators to remember now happens in the deck, at the moment a person decides to share.

- **And the choice to share is now its own act.** Turning a card face-up is consent to show it in this room. Pressing a second, differently labelled button is consent to send it somewhere else. A person who never presses it has shared nothing, and does not have to say why.

- **Share copies merge themselves.** They carry no header and no separator, so several pasted together become one flat list — which is what a brief needs, and which destroys the record of whose needs arrived together. In a small group, that record is what identifies somebody.

- **"Print to hand over" prints the shared version.** For anyone with no way to send anything — which includes most children on a shared school computer — paper into a box is the most private route available and the only one with a chain of custody. The page also warns that copying on a shared computer leaves the spread on the clipboard for whoever sits down next.

- **The method page now says how a spread reaches a coordinator at all**, which it had never covered: ask for the shared copy by name, the paper and show-me-the-screen routes, never hand out a link that pre-addresses a message to you — and two things not to build. Not an anonymous self-deleting drop box, which sounds like privacy and is a safeguarding problem, and stores the message on someone else's server besides. Not a consent checkbox, which on a site with no server has nothing to enforce it and cannot be informed anyway; the consent that counts is said out loud before anyone lays a card.

- **A second independent run came back clean on the mapping, and found six more things.** Twelve different spreads, chosen because they exercise the mappings that had just changed. Every condition matched, the card roster did its job, and the session reported it had not needed to guess at a realm once — which was the whole point of adding it.

- **A note field is still the coordinator's to act on, and the method never said so.** It told the tool not to mine the note and then let the matter drop, which meant the most specific information in the pile — a named light in a named hall, a door where leaving required an explanation — quietly went nowhere while the brief said generic things about dim and quiet. Not mining it is right. Letting it fall on the floor is not. The brief now hands it back: not used here, still yours, go and look at what it names.

- **Merging is not a tidiness request.** Twelve spreads with a separator between them are a headcount, and a more revealing one than a number, because they also show which needs arrived together — which is what identifies a person in a small group. The deck's copy button produces one spread at a time, so this is how a real paste arrives unless somebody does something about it. The method now says that plainly, and an un-merged paste is reported back as a strip failure.

- **Dens were lost from a label.** [Zone a room](https://cavendish.space/rooms.html)'s own checkbox has always read "a corner, nook, or den out of the main flow," but the short label used everywhere else dropped the den — so the deck's `a den` card mapping to that condition looked like a stretch rather than the form's own words. Restored in the zoner, its printed output, and the method.

- **The permission list had no rule behind it**, just cards somebody had listed once. It has one now: a card belongs there as well as in a condition when the room allowing it is not enough and somebody has to say so out loud. A room can physically let you sit on the floor and still be a room where nobody does. `let me control it` joins the list on that test.

- **Empty lists keep their heading.** A section that silently disappears reads as nothing to report. If nobody named a permission the brief says so — and says it does not mean none are needed, since the signs carry the standing ones either way.

- **An independent session ran the spreads and found the method's real flaw.** It produced a correct room list, then reported that it had guessed at six cards. The method names which cards map to which condition, and never says which realm any card belongs to — so every card not in a mapping list left it choosing between "this is weather, it goes with the day", "this has no box, it goes to the remainder" and "this is a realm we never aggregate, drop it" by reading the card's tone. That is exactly the inference the page exists to forbid, and the page was requiring it. `not right now` is an Interaction card and `not yet` is a lily pad; `you don't have to talk` is a Kind word and carries no description at all, so a pasted spread gives nothing to identify it by.

- **The fix was already published and never pointed at.** The whole deck is at [/cards.json](https://cavendish.space/cards.json), every card under its realm. The method now says to fetch it first and sort the paste into realms before mapping anything, and to ask the coordinator rather than guess if it cannot.

- **"Something soft" was in the wrong place, and it was a mapping made from a card's name.** The card reads "a plush thing to hold" — a comfort object — and it had been mapped to the room condition "something soft to sit or lean on" because the words matched. It is kit. The condition stays, because a room does still need somewhere soft to sit, but no card in the deck asks for it: a person who wants it will say so in their own words, which is what the remainder is for.

- **The brief no longer summarizes the weather at all.** It used to be allowed one plain sentence about the day. "The weather ran the full range" sounds harmless and is still a claim about a group of people's moods, which two of the three rules forbid. The brief now says only that weather was laid and is not being summarized, and that anyone who wants to know how the day felt can ask the people who were there.

- **"Dropped unread" was a comforting phrase for something that did not happen.** You have to read a note to know it is a note. The brief now says a note field was present and is not used, which is true, and says plainly that the only step which can keep a note unread is the one before the paste.

- **Three smaller contradictions closed.** The self-check told coordinators to reject any brief containing a category outside the vocabulary — which is precisely what the two remainder lines carry, so a correct brief failed its own check. A zone somebody asked for had nowhere to go, since the link carries conditions only; the method now says zones are carried by hand and why. And the brief's own lists had no stated order, so any order could be read as a ranking; the room list now runs in the page's fixed order.

- **A second test run found the method reading the wrong lines.** A spread copied out of the deck carries the reflection question the app offered under each card, and several of those questions name *other cards* as examples — "is there a lily-pad card that fits right now — not yet, slowly, or i need a minute?" names three cards nobody laid. The method said nothing about those lines. A tool matching card names against the whole paste would have pulled a pacing need out of a spread where somebody laid nothing but weather, which is the exact failure the page exists to prevent. It now says to read only the card lines, and why.

- **The strip list was inconsistent with itself.** The method told coordinators to remove Interaction cards and the note field, then told the tool that a Kind word or a grower in the paste meant the strip step had failed — a step that had never asked for either. Everything that never aggregates is now named in one place and left out of the paste together, which also means less of it reaches a third party.

- **The zoner link is now written out, not inferred.** The method told a tool to put the ids "after `#asked=`" and never said what came before it — the address itself appeared only inside an example of finished output. That worked, because a capable tool reads the example and copies it, but it meant the one instruction the coordinator actually carries away was the one thing never stated outright. The section is now called how to build it rather than what it does not do, and gives the whole address, the separator, a worked example, and the rule that the link always starts `https://cavendish.space/` because it gets pasted into a message, not into that page.

- **The group-brief method got tested, and four things were wrong with it.** Twelve generated spreads went through it in a separate session, which is the only way to find out what a set of instructions actually does. The room list and the zoner link came back exactly right. What it caught was everything the method had no rule for.

- **Growers were not addressed at all.** Dandelion, tulip and orchid describe how a person grows and what conditions they need — self-description, and a pile of it summarized is the closest this deck comes to producing a profile. The method now names growers alongside Kind words and Interaction as never aggregated. It also says why they are the most tempting thing here to mine: "give me my conditions and I bloom" sounds like it names conditions, and does not name which.

- **Lily pads fell through a gap.** The mapping table gestured at "the lily pads about going slowly," which left `stuck` and `watch first` belonging to nothing. They now split three ways, named card by card rather than described: `coming back` maps, because it asks the room to hold a place; the four pace requests map; `ready now` and `all done` are passing states and are never aggregated; `stuck` and `watch first` go to the remainder with a question. Nothing is left to inference.

- **A brief must now say what it had to drop.** If an Interaction card, a Kind word, a grower or a note field is in the paste, the strip step did not happen, and the coordinator has to learn that before the next event — a silent drop teaches them the process worked when it did not. The report names the kind and nothing else: never the content, never how many. The note field matters most: it is the most identifying text in a pile, and often the most mappable, which is exactly why it is not the tool's to mine.

- **The remainder was doing two jobs.** "Somebody drew their own card" and "this page could not place a card that exists" are different problems and ask different questions — one is a gap in the deck, the other a gap in the instructions. They are two lines now, and neither is ever resolved by stretching a condition to fit.

- **And the brief can now arrive in the zoner.** [Zone a room](https://cavendish.space/rooms.html) reads a group brief from the end of its own URL — `rooms.html#asked=quiet,corner,way-out` — and shows what was asked for beside what the room has: asked for and already here, asked for and not there yet. Tick what is true and the rest is the to-do list.

- **It does not tick the boxes for you, on purpose.** A tick means the room has something; a brief means somebody asked for it. Pre-filling a brief would make the page announce zones the room cannot actually hold, which is the one thing that page exists to refuse. So the brief is a layer beside the form, not a shortcut into it, and "put the brief aside" clears it without touching your ticks. The page re-sorts the list into its own order, so a tool that ranked its output cannot pass the ranking along, and it still never counts anything.

- **The link is a fragment, which is the whole reason this needs no server.** Everything after the `#` stays in the browser and is never put in the request — that is how URLs work, not a promise being made. The list is not saved to your browser either, because it is a record of what people asked for: close the tab and it is gone, the same as a spread. Still no form, still no endpoint, still nothing stored.

- The print-and-play PDF is no longer rebuilt when nothing has changed. It renders differently every time it is built — same pages, a few bytes apart — so every full build left a 3.7MB file looking modified when it wasn't, which both hid real staleness and would have padded the repository with meaningless copies. It now checks a hash of what actually shapes it and does nothing if that hasn't moved.

- **The printed facilitator sheet had been saying the wrong thing since July.** The deck was rewritten for all ages in the summer — `child` became `person`, `adult` became `facilitator` — and the web version changed with it, but the PDF you actually print and hand to someone did not. It still said "the child controls sharing," still described "Build my day" as being for "a child and a support worker," and was missing the rewritten "Map the edges." Rebuilt from the current source, along with the print-and-play deck, which had been missing two pages of cards added since July.
- **And the reason it lagged is fixed, not just the lag.** The PDF builders need native libraries that Apple's system Python cannot load, so rebuilding them meant remembering an undocumented local setup — which is why two months passed. `build-all.py` now finds the right interpreter itself and runs the PDF steps with it, so one command rebuilds everything. Where that interpreter doesn't exist, it skips exactly as before and prints the three commands that would fix it.

- **The guidebook is now published as Markdown too**, at [`/guidebook.md`](https://cavendish.space/guidebook.md) — the whole deck, every card, in one file an agent or a reader can take whole. It was the one page held back from the Markdown endpoints, because its Markdown was built by a different script than its web page and could fall behind the deck without anyone noticing. The document builder moved into a function both scripts call, so the web guidebook, the Markdown guidebook, and the copy in the repository are now rendered from the cards in a single pass and cannot disagree. Checked by changing a card and watching all three move together.

- **HSTS now covers subdomains.** The site already told browsers to use HTTPS and nothing else; it now says the same for every subdomain of cavendish.space. Checked before shipping rather than after: `www` is the only subdomain, it serves valid HTTPS, and the certificate is a wildcard, so nothing was left behind by the change. No `preload` — the preload list's own operator advises against it now, and getting off the list takes months.

- **Added a security contact.** [`/.well-known/security.txt`](https://cavendish.space/.well-known/security.txt) (RFC 9116) tells anyone who finds a hole here where to send it, instead of leaving them to guess between an issue tracker, a contact form, and posting publicly. The privacy page gained the human-readable half: what to report, where, and that there is no bounty because this is a small nonprofit project. The file is generated rather than hand-written, because the RFC's required `Expires` field invalidates it once it lapses — every deploy pushes the date out again. It is served from the site root and rewritten to the canonical `/.well-known/` path, because Netlify quietly declines to publish dot-directories — which it does not warn about and which only shows up as a 404 on the live site.

- **The site is now readable by machines without scraping it.** Every prose page is published as its Markdown source alongside its HTML — `/why.html` is also `/why.md` — carrying frontmatter with the title, the canonical URL, the date the source last changed, and the CC0 licence. The Markdown is copied in the same build that renders the HTML, from the same file, so the two cannot drift. Nine pages; the guidebook is deliberately left out, because its Markdown is generated by a different script and would ship a snapshot that falls behind the deck.
- **Added [`/llms.txt`](https://cavendish.space/llms.txt)** — a short curated index rather than a restatement of the sitemap. It leads with the two things the deck is most often mistaken for: it is not a screening tool, and it is not an AAC board. If a model is going to summarize this project, those are the sentences it should have. Advertised with `rel="describedby"` in every page head and as a `Link:` header, which is the part llms.txt v2 added and the part sites usually skip.
- The homepage footer now says both are there, for anyone reading with a machine.

- **A real 404 page.** A broken link used to land on Netlify's stock "Page not found" — right status code, wrong everything else: no menu, no route back, and not a word in the deck's voice. `/404.html` is now generated from the same shell as every other prose page, so its menu comes from `SITE_NAV` and cannot drift. The copy holds the line the rest of the deck holds: a dead link is a broken system, not a visitor who did something wrong. It names four doors back in and says where to report the bug.
- **Dark mode was telling the browser it was light.** Every page shipped `<meta name="color-scheme" content="light">` while the stylesheet has shipped a full dark theme for months. Browsers took the meta tag at its word, so dark-mode visitors got light-rendered scrollbars and form controls, and the white flash the no-flash script exists to prevent. Now `light dark`.
- `theme-color` was a single cream value, which put light browser chrome above a dark page. It is now a light/dark pair keyed to `prefers-color-scheme`, using the same two `--bg` tokens as the stylesheet.
- **The web manifest was served as `application/octet-stream`.** Netlify has no mapping for the `.webmanifest` extension, and some browsers refuse a manifest at the wrong type — which would have broken add-to-home-screen silently, with nothing in any log. `netlify.toml` now pins `application/manifest+json`.
- The standalone page shell's one-line description is now overridable instead of hardcoded. It had to be: "you're on one of its pages" is false on the page that says a page isn't there.

## 2026-09-15

### Site

- **The five zones are now drawn, not just listed.** Between the doors and the footer, the threshold carries a landscape of the whole model: a cave in a hillside, a campfire ringed with stones, a watering hole, a library, and the ground that holds all four — with a dashed path of stepping stones running between them, because the edges and the lily pads are part of the model too. Hand-drawn SVG, every fill a theme token, and a caption that names each zone in plain text so the meaning is never trapped in the picture.
- The mark now appears on the front page too, locked up beside the wordmark the way it is on the share card. It is the same `favicon.svg` the browser already fetched for the tab rather than an inlined copy, so the logo on the page cannot drift from the icon when the generator rebuilds it.
- **New mark.** The favicon was a fan of three cards, which described the site when the site was a card deck. It is now **a sheltering arch with a hearth inside it** — the cave and the campfire in one shape, on the house cream tile that reads as the habitat holding them. Chosen by rendering the candidates at 16px and looking: a three-zone version was legible at 64px and mush at 16, which is the size that actually matters.
- Icons and the Open Graph card are now generated from one SVG source by `scripts/build-icons.py`, so the mark is defined once. Three variants, for a real reason: a browser tab draws the favicon as-is and keeps its rounded border, while Apple and Android mask app icons and crop the edges — a rounded tile inside a mask gets its corners shaved twice.
- **New share card** at 1200×630, set in Atkinson Hyperlegible like the site, carrying the mark, the line *places built to fit bodyminds, not the other way round*, and the two verbs. The old `og:image:alt` described a fan of cards on a cream background, which had not been true since the image changed; it now describes what is actually in the picture.
- Fixed a latent cache bug found while doing it: the service worker's version hash was computed from the HTML, CSS, JS and card faces but **not** the icons it precaches — so an icon-only change would never have reached a returning visitor. Everything precached now feeds the version.

- **The site moved to [cavendish.space](https://cavendish.space/).** The name now matches what the site is: Cavendish Space holding the deck, the room zoner, and the model, rather than a card deck that grew two more things. **cavendish.app keeps working** — it stays registered, stays an alias on the site, stays on the certificate, and 301s path-for-path, so every existing link lands on the same page it always did.
- Everything the site says about itself moved with it: canonical URLs, Open Graph and Twitter URLs, the JSON-LD graph, the sitemap, robots.txt, and the footer on the printable room signs, which had the old domain baked into the sheet you pin to a door.

- **The home page is now a threshold, not the deck.** `/` opens **Cavendish Space** — three doors, above the fold, no scrolling to reach a tool: *Show how you feel* (the deck), *Set up a room* (the zoner), and *Read the idea* (the model, at stimpunks.org). The deck keeps everything it had and now lives at **[/deck.html](https://cavendish.space/deck.html)**, first and largest among the doors because it is the one with an audience already pointed at it.
- **The threshold is deliberately thin on prose.** The deck's promise is that no reading is required to use it, so a landing page that has to be read would charge its own audience at the door. One line of framing, three doors, and a link to the rest. The full Cavendish Space model stays at [stimpunks.org](https://stimpunks.org/space/cavendish/) rather than being restated here — one canonical explainer, not two.
- An installed app still opens the deck: `start_url` in the web manifest now points at `/deck.html`, so anyone who added Cavendish to a home screen lands where they always did.
- Added **[What is a Cavendish Space?](https://cavendish.space/space.html)** — a condensed but detailed account of the model, so the third door on the threshold stays on site instead of sending a first-time reader straight off it. Who Cavendish was and why the name carries an argument about privilege; caves, campfires, and watering holes with their Thornburg lineage; the rhythm of intermittent collaboration that keeps them distinct; the eleven elements; dandelions, tulips, and orchids; and what the model refuses. It ends with the full set of stimpunks.org resources — the model, the project, the Why Sheet and broadside, and the glossary vocabulary.
- **stimpunks.org stays canonical, and the page says so twice** — once at the top and once in the footer: *where the two differ, that one is right.* A condensed copy that does not name its source is how you end up with two explainers and no way to tell which is current.
- The page carries **all five zones** — cave, campfire, watering hole, library, and habitat — each with what it looks like in practice and the design recipes behind it, condensed from [Designing Cavendish Space](https://stimpunks.org/cavendish/). Three come from Thornburg's primordial learning metaphors; the library and the habitat complete them.
- It also carries the two parts of the model that are easiest to leave out and most likely to be what actually breaks: **the edges**, where transitions between zones consume processing time and drive masking pressure — *design is tested at the edges* — and **lily pads**, the small landing places that stabilise those crossings. Lily pads are a realm in the deck; until now the site explained the cards without ever explaining the idea behind them.

- Added **[Zone a room](https://cavendish.space/rooms.html)** — the deck's environment-side companion. You tick what a room has got, and it says which Cavendish zones the room can hold today: cave, campfire, watering hole, library, habitat. The zones a room can't hold yet come back as a list of **changes to the room**, in the room's own words, never as a lack. Then it prints **signs for the door**, one zone per sheet, because a cave only works if people know not to talk in it — and that knowledge has to be in the room, not in a document.
- **No score, and the code says so.** No number out of five, no percentage, no grade, no pass, no certificate. Every question is about the room and what can be changed in it; no output sentence takes a person as its subject. The page says this out loud before the first question, next to the same commitment the [Livable worlds checklist](https://cavendish.space/livable-worlds.html) already makes.
- **The questions are the deck's vocabulary, not a new one.** The conditions are grouped by the same sense signposts the What helps realm uses — Being in charge, Sound, Light & looking, Touch/Pressure/Temperature, Movement, Space & enclosure, Telling & talking, People & time — so a need named on a card and a condition ticked on this page are the same need. Each zone's requirements are written from its own card's Notes; the wording on the page is the deck's.
- Works with JavaScript off: the five zones and what each one needs are in the page, so it can be worked out on paper. With it on, nothing leaves the browser — state is in `localStorage`, there is no account, and no request goes anywhere.
- Where it sits: a room is the **Environment** rung of [ARLES](https://cavendish.space/arles.html), and the rung below it is what a person actually needs. A spread is a design brief for the room; this is where the brief gets acted on.

## 2026-07-21

### Deck

- Added two cards from the [SLODF ARLES crosswalk](https://stimpunks.org/design/slodf/) (Dark, 2026), where a workplace-inclusion framework's design responses named needs the deck hadn't yet voiced — both chosen to serve everyday all-ages use, not just work: **one thing at a time** (What helps) for task sequencing, reframing the switching cost of a piled-up queue as monotropic focus rather than slowness; and **say it straight** (What helps) for plain, direct communication, holding the double empathy problem (Milton, 2012) in its Notes as lineage rather than as a label. *(For Helen's batch review: `say it straight` is the first card to name the need Double Empathy explains — it patterns to 30 Communication Bandwidth and keeps 28 Double Empathy as a behind-lens; whether a direct-communication card should finally turn Double Empathy into a nameable Pattern is flagged as an open question in the [Pattern crosswalk](https://github.com/Stimpunks/Cavendish-Cards/blob/main/cavendish-cards-pattern-crosswalk.md). Distinctness to watch in playtest: one thing at a time vs let me finish / fewer choices / pulled every way.)*
- Added three cards for playtesting, drawn from the Livable worlds checklist crosswalk where the deck had gaps: **fewer choices** (What helps) for decision overload, **keep it the same** (What helps) for a need for sameness — reframing the labeled "insistence on sameness" as a support need — and **running on empty** (Weather) for everyday depletion, from spoon theory.

### Site

- Added a workplace example spread — **[A new job, first weeks](https://cavendish.space/example-spreads.html)** (an adult, at work) — showing the deck read as a design brief across a workday, and featuring the two new cards. Reinforces adult self-use and the all-ages reframe.
- The **[ARLES page](https://cavendish.space/arles.html)** now situates the deck against the [System-Level Organisational Design Framework](https://stimpunks.org/design/slodf/) (SLODF): SLODF reads *across* four organisational domains but has no Lived Experience layer, and the deck's Weather realm is precisely the layer it lacks. Facilitator-layer framing only — no jargon on the cards.
- The ARLES page also adds a companion section on the [Ecosystemic Model of Distress](https://stimpunks.org/design/ecosystemic-model-of-distress/) (EMD; Gray-Hammond): distress read as a *current* through nested ecosystems, versus ARLES as a *ladder*. Reframes a spread as **feedback** — the bodymind reporting an unsustainable ecosystem — not a symptom list. No new cards: EMD's person layer is already covered by Weather, and its distinctive content is the Systems/power layer the deck deliberately doesn't card.

- Added a **[Livable worlds checklist](https://cavendish.space/livable-worlds.html)** page — a companion environmental audit that pairs with the deck, adapted from Stimpunks' [Livable Worlds Checklist](https://stimpunks.org/design/livable-worlds-checklist/) (after Rose & Lupton, 2026) and dedicated to the public domain under CC0. Eleven areas, from regulation to sustainability, run on the room, the routine, the kit, or the system — never on the person — with no score and no pass mark, plus a section-by-section crosswalk to the cards that voice each need.
- Deep-linked pages now orient newcomers: every guide page carries a sticky top bar with an **Open the deck** button and the Menu, plus a *Cavendish Cards* home link and a one-line description in the header — so landing on a page like the guidebook or the checklist makes clear what the site is and how to reach the playable deck.

## 2026-07-20

### Deck

- **Kind words reframe:** no longer framed as *a gift*. A Kind word is **given to someone, or claimed for yourself** — never earned. The card back now reads *a kind word* / *you don't have to earn it* (was *a gift* / *given, not earned*), the faces read *given or claimed*, and the guidebook and starter deck match. Self-use is first-class alongside giving.

### Site

- Card backs can now be opened in the lightbox — on the table, a face-down card gets the same enlarge button, showing just the back image (no card name or notes) so it can be seen larger without turning the card up. A visual-accessibility fix that keeps the turn-up-to-share gesture intact.
- Offline cache now updates on art-only and guidebook-only changes: the service worker versions by page and card-face **content**, not just filenames — so returning visitors always get the current deck.

## 2026-07-19

### Deck

- Added **let me unmask** (What helps) — permission, and a safe space, to drop the mask for anyone who masks to get by. It names the *need* to stop performing, not the act of masking itself. Lineage: masking / camouflaging; freedom of embodiment (Nick Walker).
- **All-ages reframe:** the whole deck now speaks to people of any age, not just children — *child* becomes *person* throughout, and *adult* becomes *facilitator* where it means the support role (age-neutral wording elsewhere). Self-use and peer-use are first-class: the deck is as much for an Autistic adult naming their own conditions as for a child. The child-safety commitments stay, and children are still named explicitly.
- Mapped the deck to the **[Stimpunks Pattern Library](https://stimpunks.org/patterns/library/)**: each card can carry an optional Pattern field, and the guidebook now shows the pattern(s) each card instantiates, linking the published ones. Facilitator-layer only — patterns never appear on the card itself, the starter deck, or the web card view.
- Added **big step** (Weather) — threshold anxiety: the dread at the edge of a change, like a doorway, a first day, or graduating. The moves for crossing it live in *Lily pads* and *What helps*.
- **Plain-language pass across the whole deck:** every card's guidebook entry rewritten to about a grade-6 reading level (down from ~7.8), one idea per sentence, following [ASAN's plain-language guidance](https://autisticadvocacy.org/resources/accessibility/easyread/). The metaphors, counter-deficit reframes, and lineage all stay — the sentences just got shorter and plainer.
- Added **no words right now** (situational mutism) and **too seen** (exposure anxiety) to Weather, and **no spotlight** to *What helps* — naming the voice going quiet and the discomfort of being seen, with lineage credited to Donna Williams.
- Added the kind word **you don't have to talk**, affirming that not speaking is not the same as not knowing (presume competence).
- Added **tender** (Weather) — the wound of rejection sensitivity, the "emotional sunburn," with lineage credited.

### Site

- Added an **[ARLES & the cards](https://cavendish.space/arles.html)** page — how the deck fits the Stimpunks Design Method (Attention → Relational → Lived Experience → Environment → Systems), with the design-method poster. Markdown pages can now include images.
- The site reflects the all-ages reframe (see Deck), and gained an example spread of **an adult using the deck for themselves** — no facilitator. The behind-the-scenes "adult layer" is now the **"facilitator layer"** across the guidebook and implementation pages.
- Added an **[Example spreads](https://cavendish.space/example-spreads.html)** page — worked gameplay examples that read a spread as a design brief for the environment, not a report on a person.
- The **guidebook** now links community vocabulary in each card's lineage to the Stimpunks glossary (monotropism, interoception, exposure anxiety, and more); the in-the-moment card view stays plain.
- **Copy for a journal** now includes the date and an optional note field (kept only in the copy, never saved).

## 2026-07-18

### Site

- Added a **favicon and app icons** — the card-fan mark — across the site.
- Added **Open Graph and Twitter Card** metadata and a social share image, so shared links show a proper preview.
- The site is now an **offline-capable Progressive Web App**: it keeps working with no connection after the first visit, and can be installed to a home screen or dock.
- Added a **light/dark toggle** and automatic **dark mode** using the Solarized dark palette. It follows your device setting, and the toggle remembers your choice on your own device.
- Self-hosted the **Atkinson Hyperlegible** typeface, removing the third-party font request.
- Added a **Privacy & security page** and a strict set of security response headers, including a Content Security Policy.
- Added a **sitemap, robots.txt, and structured data**, plus web-app metadata, for better discoverability and installation.
- Added this **changelog**, kept in the repository and published as a page on the site.
- Reworked the **I need a bodymind break** button into a calming full-screen break: a modal (with the deck paused behind it) holding the definition of *bodymind*, an affirmation invitation, a self-hosted looping ocean-waves recording by Adriel Jeremiah Wool, and a collapsible list of ways to affirm your bodymind.
- Fixed the **Copy for a journal** button failing silently in privacy-hardened Firefox browsers (such as Zen); it now uses a reliable fallback and shows a "Copied!" confirmation.

## 2026-07-17

### Site

- Fixed a card-identity bug: cards are now keyed by realm *and* slug, so each realm's "your own" card no longer collides with another's in selection, card backs, and faces.

## 2026-07-16

### Deck

- Added the monotropism weather cards — **in the zone**, **meerkat**, **round and round**, and **pulled every way** — with their lineage credited.
- Added **can't tell** (interoception) and **need more** (sensory seeking) to Weather, plus **happy flappy** (happy stimming).
- Added **let me stim**, **let me finish**, and **let me come and go**, along with more niche-construction cards, regrouping *What helps* into twelve sense signposts.
- Reframed *Love Locutions* as self-affirmation (shown as **Kind words** in the app), moved **parallel existence** into *What helps*, and kept penguin pebbling as a guidebook note rather than a card.
- Named the **"not an AAC board"** boundary, with an inclusion test in the card template, the README, and the guidebook.
- Curated the Weather order into a gentle range with no good/bad split, renamed families to **realms**, and made **lily pads** a browsable realm.

### Site

- Added native **Why**, **Origin**, and **Facilitator** pages, a generated **Implementation guidebook**, and a site-wide collapsed menu.
- Added **lightbox zoom** and a collapsible "what this card means" to card previews, and grouped the deck by realm with per-realm info.
- Made laid cards toggle back off the table, kept an added-state on tiles, and added a sticky jump-to-table button.
- Added the **build a niche** and **map your rhythm** play modes (seven ways to play), the Why Sheet, and a consent guardrail in the implementation guidebook.

## 2026-07-15

### Deck

- Added **guidebook Notes to every card** — the entry that says what each card means and how to hold it.
- Added **reflection questions**: per-realm pools plus per-card overrides, with the Reflection field documented in the card template.

### Site

- Added the **playable web deck** and its Netlify build, and linked it from the README.
- Ran four playtest rounds: intro and guidebook pages, a bodymind-break, an interaction-first guided order, sense grouping, a reflection summary, and per-realm draw-your-own.
- Added the **guidebook assembler**, the **print-and-play PDF** builder, and the playtest placeholder generator.
- Added the **call for art**, linked from the README and the site.

## 2026-07-14

### Deck

- **Initial deck** — 49 cards scaffolded across six families.
- Added the **interaction realm** — the Autistic community's color communication badges — with finished card faces.
- Stated the deck is **not a screening tool**, refusing the pathology, deficit, and behaviorism framings.

### Site

- Added print-scale **SVG card templates** for every family plus the blank, and the two card backs.
- Rebuilt the **facilitator sheet** (larger type, six-color rainbow, sharing models) and wrote the project README.
