Changelog — 2.131–2.149

Releases 2.131.0 through 2.149.2. Current releases are on the main changelog, and every band is listed in the release archive.

Loading audio...

Version 2.149.2

August 15, 2026

We corrected a rule in our own handbook that had been quietly wrong

  • Nothing on the site changed. This is an internal note, and it is here because we write down the mistakes as well as the fixes.
  • One of our engineering rules said a particular piece of duplicated logic could not be shared, so it had to be copied. That turned out to be untrue — it could be shared, and had been elsewhere in the codebase for months. Three copies existed where the rule claimed one.
  • The interesting part is why nobody noticed. When something is written down as impossible, people stop checking. A claim that a door is locked is rarely re-tested, which is exactly what makes a wrong one expensive.
  • Nothing to do at your end.

Version 2.149.1

August 15, 2026

The search box is now the first thing on the home page

  • It has moved to the top, just under the news ticker — above the events spotlight and the welcome section, rather than below them.
  • If you arrive knowing what you are looking for, you should not have to scroll past what we chose to show you first. Everything further down the page is our selection; the search box is the one thing there that lets you ask for yours.
  • Nothing else has changed about it — same box, same results, same behaviour without JavaScript.
  • Nothing to do at your end.

Version 2.149.0

August 15, 2026

Sharing a vignette gave you the long, ugly link

  • The Share button on a vignette’s own page copied the full, unwieldy web address instead of the short one. Everywhere else on the site — the vignette listings, reflections, events, sessions — it gave you the short link, as it should. Just not on the one page you are most likely to be reading when you decide to share it.
  • The short link existed the whole time. Nothing was missing and nothing needed creating; the page simply fetched it and then forgot to use it. Every vignette already had one, and any short link you saved before today still works.
  • Nothing complained, and that is the interesting part. A long link works perfectly well — it opens the right page, it can be sent to anybody. So there was no error to notice and nothing that looked broken. It was only ever visible if you happened to compare what you copied from two different places.
  • We found three more places quietly doing their own version of the same thing, including the one that prints a link onto a downloadable wallpaper. None of them was giving out a wrong link today, but all four were working it out separately, which is how they would eventually disagree. They now all ask the same one place.
  • Two checks now stop this returning, and they deliberately catch different things: one refuses to build if a page forgets to pass the short link on, and the other refuses if a page asks for the ingredients and never makes anything with them. Either alone would have missed this.
  • Nothing to do at your end. Existing links are unaffected.

Version 2.148.1

August 14, 2026

The new search page had invented a name for something that already has one

  • The search results grouped vignettes under the heading “Stories”. They are Vignettes, and always have been — that is the word used everywhere else on the site.
  • A results page is exactly the wrong place to get that wrong, because it is where somebody learns what we call things. A heading that says “Stories” teaches a word that appears nowhere else, and then lets them down when they go looking for it.
  • The same invented word had already spread into these release notes, so it has been corrected there too, before any of it went out.
  • Nothing to do at your end.

Version 2.148.0

August 14, 2026

You can now search the whole site from one box on the front page

  • There is a search box on the home page, and it searches everything at once — reflections, vignettes, articles, events, sessions and the help pages.
  • Results are grouped by what they are, rather than mixed into one list. That is deliberate: it lets you see at a glance that a name appears in three reflections and two sessions, which one long list would bury.
  • A category with nothing in it still appears, and says so. Hiding it would leave you unable to tell “we have nothing about this” from “we do not search that yet” — and those are very different answers.
  • If one category cannot be searched, it says that too, differently. One is an answer; the other is a fault, and they should never look alike.
  • It works without JavaScript, and your search ends up in the address bar, so you can bookmark a search or send someone a link to one.
  • There is no as-you-type searching, on purpose. It would send a request for every letter you press, and the box already does the job when you press enter.
  • This completes the search work. Everything that has landed over the last several updates — keeping things ready to search, checking hourly that it is honest, describing pages to machines — was building towards this box.

Version 2.147.0

August 14, 2026

The search boxes already on the site just got considerably better at their job

  • Searching within reflections, vignettes, sessions or events now understands spelling variations, forgives typos, copes with more than one word, and puts the best matches first. Until now each of those did a simple “does this text appear anywhere” check and then sorted by date.
  • What you may notice: results are ordered by how well they match rather than by when they were published, and a search will sometimes find things it used to miss.
  • Events are the deliberate exception. That page groups things as happening now, coming up, or past — which is a decision about how events should be presented, not an accident of sorting. Searching there still finds more than it used to, but the grouping is left alone.
  • Nothing you are not meant to see can appear, and that was designed in rather than hoped for. The search decides which things match; the site still decides which of those you may see, exactly as before. So even if the search were out of date, it could not surface something withdrawn.
  • If the search is ever unavailable, these pages quietly go back to the old behaviour rather than breaking. You would get the older, simpler matching — not an error page.
  • We proved this did not lose anything rather than assuming it. We recorded what a set of searches returned beforehand, made the change, and compared. Nothing that used to find results now finds none.
  • Nothing to do at your end.

Version 2.146.0

August 14, 2026

Everything on the site is now ready to be searched, including the part that was genuinely difficult

  • Events and their sessions are now kept ready for searching too, which was the last piece. Every kind of thing we publish is now covered.
  • Events were harder than everything else, and for a reason that is easy to miss. A session belongs to an event, and whether a session should be findable depends on its event — so changing one event quietly changes what should be findable for everything inside it. Archiving an event has to remove all its sessions; renaming one has to update all of them.
  • Nothing about editing an event looks like it should touch a session, which is exactly why this kind of thing gets missed. Nothing about the session itself has changed.
  • It is also invisible on the copy of the site we develop against, because there each event happens to have a single session. Something that handled only the event would look flawless there. On the live site one event can hold well over a dozen. So the test now builds that situation deliberately rather than relying on what happens to be there.
  • One detail was a single line away from being wrong in a way nothing would have reported. Deleting an event also deletes its sessions — so the list of what to tidy up has to be taken before the deletion, not after, or there is nothing left to read and their entries linger. Three of our four checks could not have caught that; only the deletion one could.
  • And while deliberately breaking things to test the checks, we broke it for real. Six leftover entries were created by those experiments — and the hourly sweep we added last week found them, described them correctly, and cleaned them up. That was not planned, and it is the most convincing evidence we have that the safety net works.
  • Nothing to do at your end, and there is still nothing to type into — that is the next piece.

Version 2.145.0

August 14, 2026

A rule meant to keep our own workings off the screen was doing the exact opposite

  • One of our internal editing screens could show a message describing how the site is put together — the sort of detail that belongs in our notes and nowhere else. It only ever appeared to us, and only when something was already misconfigured, but it should not have been possible at all.
  • The cause is the interesting part: the check meant to prevent it was doing the reverse of what it intended. It tried to tell our own carefully-written explanations apart from the raw output of the software we use, and show only the former. It got both backwards — hiding the messages written for a person, and showing the ones written for us.
  • We had also assumed the risk came from other people’s software, and it does not. Those messages turn out to be short and generic. The revealing ones are the ones we wrote, precisely because we wrote them to be helpful when something breaks.
  • Whether a message can be shown is now something it has to say about itself. Anything that has not said so gets a plain, uninformative sentence instead — so forgetting now errs towards saying too little rather than too much.
  • And the build now refuses the old approach outright, because we proved a test could not catch it coming back.
  • Two admissions. Our own note describing this problem was wrong about its size — we thought seven places were affected and it was one, partly because a search matched a comment saying the opposite of what it appeared to. And the first version of the new build check flagged the paragraph explaining the rule, in the very file we had just fixed.
  • Nothing to do at your end, and nothing on the public site was ever affected.

Version 2.144.0

August 14, 2026

A check that fixes things now writes down what it found, because otherwise nobody would know it was needed

  • Every hour, something now compares what should be searchable against what actually is, and puts right anything that has slipped. That keeps search honest without anyone watching it.
  • The awkward part is that a check which quietly fixes things is almost as bad as one that never runs. Everything looks perfect either way. If the mechanism that keeps search up to date as we edit had failed, the hourly sweep would paper over it for ever and we would never find out.
  • So it records what it found, before fixing it. There is now a list of every run: when, whether it found anything, and whether it repaired it. A steady trickle of “found something” is the sign that something upstream is broken — which is precisely what we would otherwise have been blind to.
  • The screen shows both numbers, never a tick on its own. An index that is switched on and completely empty answers every search with nothing and looks perfectly healthy. Showing what should be there beside what is there is the only way to tell those apart.
  • Where it has to shorten a long list, it says so. “Showing 50 of 214”, not fifty entries that quietly read as the whole story.
  • And the categories we have not built yet say so plainly rather than showing green. Otherwise finishing them would look like fixing a bug, and not finishing them would look like everything being fine.
  • Nothing to do at your end. This is an internal tool; nothing on the public site changes.

Version 2.143.0

August 14, 2026

Most of the site is now ready to be searched — and why we are not showing you a search box yet

  • Reflections, vignettes, articles and the help pages are all now kept ready for searching, as they are written and changed. Only our events and their sessions are still to come, and they are the fiddly ones, because a single change to an event quietly changes what should be findable for everything inside it.
  • We could have put a search box up today, and deliberately have not. It would have found reflections and nothing else — so somebody searching for a commemoration would get no results and reasonably conclude we have never covered it.
  • That is a mistake we have already made once, in a different form. A large number of event pages were live, perfectly good, and unreachable by clicking for months. Nobody reported it, because content that is simply missing looks exactly like content that was never made. A search page makes that worse, not better: an empty category and a category we have not finished are identical on screen.
  • The help pages needed a different approach from everything else. They are not stored in a database — they are part of the site itself — so nothing happens when they change that we could listen for. Instead the periodic check that compares what should be searchable against what is picks them up. That works, and it means that check now genuinely matters rather than being a safety net.
  • We strengthened the test that proves all this can fail. It was only ever checking one category, which proved the shared machinery and quietly assumed the rest. It now checks every one.
  • And it caught us describing our own test too generously. One check was documented as catching a mistake it turns out it cannot catch. Rather than delete it or quietly leave the claim standing, we wrote down what it actually does.
  • Nothing to do at your end, and there is still nothing to type into.

Version 2.142.0

August 14, 2026

Describing our pages to machines properly — including admitting the dates we do not actually have

  • Every public page now describes itself in a form search engines and other software can read directly — what it is, what it is called, when it was published, and how it relates to anything it belongs to. Until now only the site as a whole did.
  • It is built from exactly the same description the search work already produces, which was the reason that piece was done first. One answer to “what is this page”, used twice. Two answers would have drifted apart, and the half that drifted would have been the one nobody was looking at.
  • Whether something is public is decided in one place, and this new work does not get a say. If a piece of content is not public, there is simply nothing to describe, so nothing is written. That is stricter than the page itself: an author previewing their own unpublished draft sees the page, and machines are told nothing about it.
  • For our events we deliberately leave out the date, because we do not have one. An event is a series of sessions, and the only date stored against it is the moment somebody first created the record — not when the commemoration happened. Publishing that would have been a confident, machine-readable, wrong answer. The individual sessions do have real dates, and those are stated in full.
  • The cost of that choice is real and we are taking it knowingly: search engines will not show the richer “event” display for our event pages without a date. A missing detail loses a nicer result; an invented one misleads everything that trusts it.
  • We also caught something on its way out of the door. Each of our vignettes has a private working note attached, written by the author for themselves. It is deliberately hidden everywhere on the site — and this new work would have published it as the vignette’s public description. It never reached anyone. More uncomfortably, a test was quietly insisting it should be there; that test now insists on the opposite.
  • And our own description of ourselves was pointing at the wrong place on the development site, because the address had been typed in by hand rather than worked out. It now follows whichever site it is actually on.
  • Nothing to do at your end. Nothing looks different; this is entirely about what machines are told.

Version 2.141.0

August 14, 2026

Reflections are now kept ready for searching — along with something whose whole job is to distrust that

  • Every published reflection is now recorded for searching as it is written or changed. There is still nowhere to type a search — that comes next — but the material is being kept ready from now on rather than gathered up at the end.
  • Unpublishing one removes it straight away, and that is the half we most wanted to get right. Something you withdraw has to stop being findable, not merely stop being linked to.
  • We deliberately built two mechanisms rather than one. The first keeps things up to date as content is edited. The second periodically compares everything that should be searchable against everything that is, and reports the difference. The second exists because the first has gaps we already know about: certain kinds of bulk change are invisible to it by design.
  • The second one reports before it repairs, on purpose. If it quietly fixed what it found, nobody would ever discover that the first one had stopped working — everything would look perfect right up until the checker stopped too. So it says what was wrong first, and only then puts it right.
  • One near-miss worth admitting. An early version of this would have quietly removed a reflection from the search results every time somebody liked it. Nothing would have failed and no error would have appeared anywhere; the reflection would simply have stopped being findable. It was caught while writing down why the code was shaped that way.
  • It also briefly broke the copy of the site we develop on, and never touched the live one. A fault had been sitting harmlessly in place for a long time, hidden only because a tidy-up step happened to be removing the part that would have exposed it. Our change stopped that tidy-up applying, and the problem appeared instantly — which is the good outcome. The alternative is finding it much later, somewhere less forgiving.
  • Nothing to do at your end, and searching is still being built.

Version 2.140.0

August 14, 2026

Writing down the rest of the search work, including one thing we had only said out loud

  • The remaining pieces of the site-wide search now each have their own record, rather than living as a list inside one document. That includes the search box for the front page, which is the part you will actually see.
  • One important detail had only been mentioned in conversation and written down nowhere. Events contain sessions, so a single change to an event — archiving it, renaming it, changing what it reveals — quietly changes what should be findable for every session inside it. It is now recorded next to the code it affects.
  • It is also the kind of thing that looks fine while you are building it. On our development copy each event happens to have one session, so a change that handles only the event would appear to work perfectly; on the live site an event can hold fifteen or more.
  • Nothing to do at your end, and searching is still being built.

Version 2.139.0

August 14, 2026

Preparing to separate our test setup from the live one, carefully and in the right order

  • The searchable copies of the texts are currently shared between the version of the site we develop on and the live one. That is harmless for the texts themselves — they are word for word the same in both — but the settings around them are shared too, and those we would rather keep apart.
  • This release only prepares for that; it changes nothing yet, deliberately. The separation has to happen in a strict order — make the copies, then switch over, then remove the old ones — and doing it in any other order would take the texts offline. So the switch is off, and off is the correct setting today.
  • We also corrected our own note about why this mattered. We had written down a risk that turned out, on checking, not to exist in the way we described. The real reason is narrower, and it is now written down accurately rather than alarmingly.
  • Nothing to do at your end, and nothing you can see has changed.

Version 2.138.0

August 14, 2026

We built a page for ourselves last week and then forgot to put a link to it anywhere

  • An editing tool we added recently worked perfectly and could not be found. It was only reachable by typing its address directly, because nothing on our own admin screens pointed at it.
  • It is the same fault we fixed on the public site a few days ago, where a large number of pages were live and perfectly good but not reachable by clicking. A page nothing links to looks exactly like a page that was never made — and nothing anywhere complains.
  • While fixing it we checked every one of our admin pages the same way, and found something worse: a page that had been telling us a feature was “coming soon” and would arrive in a later phase of development — when in fact every part of it had been built and had been in use for months.
  • That one is the more dangerous kind of mistake. A missing page sends you looking; a page that says something does not exist yet stops you looking. It now takes you to the real thing instead.
  • Nothing to do at your end, and nothing on the public site is affected.

Version 2.137.0

August 14, 2026

Searching the texts for “prayer” was quietly missing the books of supplications

  • A word that belongs to two groups of related terms was only ever being connected to one of them. The word was “prayer”: it reached salat, salah and namaz, but not dua, supplication or invocation — which is exactly the wrong half to lose, because two of the books in our collection are books of supplications.
  • Nothing reported it, and nothing could have. Searching worked, results came back, and they looked entirely reasonable. Four connections out of seventy-six were simply absent, and no check anywhere compared those two numbers.
  • The repair was to delete our second copy of the same piece of logic rather than patch it. We had written the same thing twice; one copy had this fault and the other did not. Now there is one, and a test that checks the whole rule rather than just the word we happened to notice.
  • You will see the difference once the texts are next re-indexed, not immediately — the correction applies when the settings are next written, and we have been clear with ourselves about that rather than assuming it took effect.
  • Nothing to do at your end.

Version 2.136.0

August 14, 2026

Search will understand that Hussein, Husayn and Hussain are the same name — and that Hasan and Husayn are not

  • Names reach English through many spellings, and a reader should find a page whichever one they type. We write Husayn; you might write Hussein, Hussain or Husain. The same goes for Ashura, Muharram, Ramadhan and a great many places and terms.
  • The list of which spellings mean the same thing can now be edited by us directly, so when we notice one we have missed we can add it there and then instead of waiting for a release.
  • The important half is what it refuses. Hasan and Husayn are two different people, and a list like this is exactly where that sort of mistake gets made once and then never noticed. The page will not let two things be merged where merging them would be an error — it stops and says which two, and changing that list is a deliberate, reviewed act rather than something anyone can do from a form.
  • Our own glossary settled one of these while we built it. Nohe, nasheed, marsiya and latmiya are four different kinds of mourning poetry, not four words for one — so search will keep them apart.
  • Nothing to do at your end, and search itself is still being built.

Version 2.135.0

August 14, 2026

One answer to “where does this page live”, now used by the list we give search engines too

  • The list of pages we hand to search engines was working out each web address for itself, separately from the rest of the site. It agreed, which is how these things always look right up until they quietly stop agreeing.
  • It now asks the same single place everything else asks. Every address it produces is identical to before — we checked that by comparing the whole list character for character, not by reading the code and deciding it looked fine.
  • We wrote the check before making the change, deliberately. A check written afterwards only tells you the new version agrees with itself, which is not the question.
  • Nothing to do at your end, and nothing you can see has changed.

Version 2.134.0

August 14, 2026

Making sure the search we are building can only ever return things that are actually published here

  • Search results will only ever be drawn from what is genuinely published on this site. That sounds obvious, and the work was making it structurally impossible for it to be otherwise rather than something we simply take care over.
  • The site now refuses to set up a search collection at all unless it has been told which one it belongs to. It stops with a clear message rather than guessing and carrying on.
  • Refusing is the whole point, because a wrong guess here would not look like a fault. Results would still appear, still look entirely reasonable, and simply be the wrong ones — and nothing would report it. We would rather it stopped noisily than worked plausibly.
  • We also found that a note in our own records was wrong while checking this, and corrected it. It had described the situation as much simpler than it is, and we had already started planning against it.
  • Nothing has changed on the site yet, and nothing to do at your end.

Version 2.133.0

August 14, 2026

The first piece of a search box for the whole site — and it is the part that decides what stays private

  • We have started building a single search that covers everything here. At the moment searching only works inside one section at a time, so there is no way to ask “where do we talk about this?” and get an answer from across the site. This is the first step towards that.
  • The first piece is deliberately the least visible one: the rule that decides whether something may appear in results at all. Rather than write that rule a second time for search, search now asks exactly the same thing the rest of the site already asks. One answer rather than two that can quietly drift apart.
  • That matters more here than almost anywhere else. A search box is the one place where something we had deliberately taken down could quietly become findable again — and unlike most faults, that one would never announce itself. So the tests are written the other way round, checking what must not be findable: a test that only checks the right things appear is blind to the opposite mistake.
  • Nothing has changed on the site yet, and nothing to do at your end.

Version 2.132.0

August 14, 2026

A note in our own records, written down the day it happened rather than months later

  • We are setting up another machine to help generate the writing on this site, and we have written that down while it is still being built. Our own notes have a long history of describing things that were planned and never happened, or that happened and were never recorded — so the note says plainly that it is in progress and that nothing has been settled.
  • It changes nothing you can see, and it may yet change nothing at all — whether it takes on any of the work is genuinely undecided, and the note says that too rather than quietly implying otherwise.
  • Nothing to do at your end.

Version 2.131.0

August 14, 2026

This page was getting long again, so the older entries have moved to their own page

  • Versions 2.118 to 2.130 now live on their own page, linked at the bottom of this one and listed in the release archive. Nothing has been removed, and every link anyone has shared to one of those entries still works — it now takes you to the new page instead.
  • We moved them before we needed to, not after. The last time we split this page we left it until there was no room at all, which meant the decision was made in a hurry. There was room for a few more entries this time, and a large piece of work is about to start producing them — so it was the right moment.
  • Nothing to do at your end, and nothing on the site itself has changed.