Changelog — 2.150–2.162
Releases 2.150.0 through 2.162.0. Current releases are on the main changelog, and every band is listed in the release archive.
Loading audio...
Version 2.162.0
August 19, 2026We now count how much of a video is actually watched, not how far it was skipped
- We had no idea whether anyone watches our videos. Not how many press play, and certainly not how far they get. That matters for deciding how long to make them, which is a bigger question than anything technical.
- The obvious way to measure this is wrong, and wrong in the direction that flatters. If you simply check how far the playhead has got, then anyone who drags the slider to the end counts as having watched the whole thing. So does anyone skipping ahead to see how long it is. The numbers would look wonderful and mean nothing — and because they look wonderful, nobody goes looking for the mistake.
- So we count time actually spent watching. Skipping forward contributes nothing at all. We tested it: dragging the slider to the very end of a video records that you pressed play, and nothing else.
- Nothing about you is recorded. No name, no account, no address, no cookie, nothing that could be traced back to a person. Just that a video was played, and roughly how much of it was seen. None of the questions we are asking need anything more, and we are not collecting anything we do not need.
- It also tells us whether the new adaptive video is actually being used, rather than merely existing — which is a different question, and the sort that is easy to assume the answer to.
- The internal dashboard names the videos rather than showing a reference code. A code is something you then have to go and look up; a title and a link is something you can read.
- Nothing to do at your end, and nothing changes about playback.
Version 2.161.0
August 19, 2026Videos now adjust their quality to your connection instead of stalling
- A video used to be one fixed quality, take it or leave it. If your connection could not keep up with it, the only thing it could do was stop and buffer. Each video is now prepared at three quality levels, and your browser moves between them as it goes — starting carefully, then stepping up once it can see there is room.
- You should notice this as videos simply not stalling. On a good connection nothing changes at all; you get the same quality as before. On a poor one, the video keeps playing at a lower quality rather than stopping altogether. The picture is exactly the same shape and size either way.
- iPhones and iPads get this without downloading anything extra. They understand this kind of video natively, so there is no additional code for them to fetch. Other browsers need a small helper, and that helper is only downloaded when you actually press play — never for someone who scrolls past.
- We checked that last claim properly rather than assuming it. On a page left open with the video on screen and untouched: no video, no subtitles, and no helper code downloaded. Nothing at all until you ask for it.
- The video no longer shifts position as it loads. The space it occupies used to be worked out from the still image shown before playing, which is very slightly a different shape from the video — so the page nudged by a few pixels the moment playback began. Its size is now fixed in advance and never changes.
- One of our own checks was quietly wrong, in a way that would have made this feature not work for most people. There is a standard way to ask a browser whether it can play a given kind of video, and for this kind several browsers answer “maybe” when the real answer is no. We had trusted that answer, which would have left most visitors on the old fixed-quality video while everything looked fine at our end. Found by testing, not by reading code.
- Vignettes get this too, and their captions gained rather more. The words printed onto a vignette are only the characters’ dialogue — on the one we tested that is two lines out of thirteen, with the narrator’s eleven never shown at all. The caption file carries all thirteen.
- We also found some story pictures being sent far larger than they are shown. Eleven panels displayed at about 250 pixels wide were each being fetched at a size meant for a full-width screen — roughly seven times more picture than anyone could see. Found while testing something else entirely.
- Older videos will be converted gradually, in the background. Until one is done it plays exactly as it does today, so there is no moment where anything is half-finished or unavailable.
- Nothing to do at your end. Press play as usual.
Version 2.160.0
August 19, 2026The front page was downloading the reflection video whether you watched it or not
- Having just made the front page’s pictures roughly twelve times lighter, the video turned out to be ten times heavier than all of them put together. A phone arriving at the front page could begin downloading the whole thing — around ten megabytes — before anyone had pressed play. The still frame you see before playing is a separate picture, so none of that was needed to show you anything.
- The page now downloads none of it until you press play. Not less of it — none. Playing works exactly as before; the download simply starts when you ask for it.
- How much was being wasted depended entirely on which browser you used, which is the real problem here. On a desktop machine the same video took a couple of seconds’ worth. On a phone it could take the lot. We have measured the same file at both extremes, and the gap was never something we chose — it was left to each browser to decide. It is now zero for everyone.
- Which is why this never showed up in ordinary testing. Anyone checking on a laptop saw a page behaving perfectly well. The problem only appeared on the kind of connection most people actually use.
- The videos now carry real captions, with a button to turn them on. The words have always been printed onto the video picture itself. That looks like captions, and it is genuinely useful when the video is shared to YouTube or Instagram — but on our own site it is not captions at all. It is part of the image.
- The difference matters, and it is worth spelling out. Words printed into a picture cannot be read aloud by a screen reader, because to software they are not words — they are shapes. They cannot be made bigger. They cannot be given a background, or a colour that works for you. They cannot be turned off. They cannot be translated. And they cannot be searched. A separate caption file is text, so all of those become possible — and the first of them is the one that decides whether a blind or partially sighted visitor can use the video at all.
- Your own caption settings now apply. Every operating system and browser lets you choose how captions look — larger text, a solid background behind them, higher contrast. Those settings have never done anything on our videos, because there was nothing for them to act on. They work now. That is the single biggest practical gain for anyone who relies on captions rather than merely preferring them.
- There is a proper Captions button under the video, and this is not us duplicating something browsers already do. Browsers do have their own captions control — and at the width these tall videos are shown, they hide it. We measured it: the player is about a third of a screen wide, and at that size the browser folds its captions button away into an unlabelled menu behind three dots. Captions that exist but cannot be found are not much better than no captions, so there is now a labelled button that says whether they are on or off.
- Our button and the browser’s own captions control now agree with each other. Browsers do have a captions option, tucked away in a menu. Our first version ignored it entirely, so turning captions on through the browser left our button still saying OFF — a page telling you the opposite of what was happening. Both controls now follow each other, whichever one you use.
- Vignettes get captions too, and theirs were missing more. The words printed onto a vignette are only the characters’ dialogue — the narrator’s lines were never shown, because printing them would cover the artwork they are describing. That is a fine reason for the picture and a poor one for someone who cannot hear, who was left with fragments of dialogue and no story between them. The caption file carries everything.
- The spoken title now appears in the captions, and it never did before. The title is read aloud at the start and shown as a picture on screen — so a sighted viewer got it twice and a deaf viewer got it not at all. Captions should describe what is being said, not what is already visible.
- The setting is remembered, on purpose. Needing captions is something about you, not about one particular video. Turn them on once and they stay on — every video, every visit — rather than making you ask again each time.
- With captions on you now see two sets, kept deliberately apart. Ours appear at the top of the video and the printed-in ones stay at the bottom. Our first attempt put them in the same place and they landed on top of each other — every automated check we have passed, and it took looking at a screenshot of the video actually playing to notice. The ones at the top are the ones your own settings control.
- There is a new help page explaining all of this. Under Help, Watching sits next to Listening and sets out why there are two kinds of caption, what each one can and cannot do, and why we keep both.
- Leaving captions off costs you nothing at all. The caption file is not downloaded unless you ask for it, so this adds no weight whatsoever to a page we have just spent two releases making lighter. Nobody pays for a feature they are not using.
- Captions will appear on new videos as they are made, not on the back catalogue. The timings that record which word is spoken when are worked out while a video is being produced, and were never kept afterwards — so an older video has nothing to build a caption file from. Those keep behaving exactly as they do today until they are next remade, and the button simply does not appear on them.
- Two of our own measuring tools were misreading this while we worked on it. One reported that no video had been downloaded at all, for a video that had just downloaded nearly a minute’s worth. Both were wrong in the flattering direction — they made the fix look better than it was — which is the kind we go looking for hardest.
- Nothing to do at your end. The front page should feel lighter on a phone, and the video plays the same as always.
Version 2.159.0
August 18, 2026Every picture on the site is now sent the modern way — and the event pages were the worst of them
- An event page was sending 5.4 MB of pictures, and 99.8% of it was a single image. It now sends about a tenth of a megabyte. A reflection page went from roughly 2 MB to a tenth of that. Nothing looks different — same pictures, sent in a modern format at a size that matches the space they are shown in.
- We had fixed most of that page a few days ago and missed the part that mattered. The small pictures in the list were tidied up; the one big picture at the top was left alone, on the reasoning that it was only one image among many. Everything we did fix on that page came to about ten kilobytes. The one we skipped was five thousand.
- The reason it was skipped was real, and it has been kept. These artworks come in several different shapes, and the usual fix needs to know the shape in advance — guess wrong and the page jumps about as it loads. We take the part that shrinks the file and leave out the part that needs to know the shape.
- Two other things we had written down as impossible turned out to have stopped being true. Both notes were correct when written and both were about one specific tool; neither applied to the approach we are now using. We only found out by re-reading them properly rather than trusting them.
- Author photographs were being sent at full size to appear as a thumbnail the size of a fingernail. Nothing looked wrong, because nothing was wrong except the amount being sent.
- One picture on our publication pages had been quietly broken for some articles, because a line of code that translates where a file lives was missing. Found while doing this work, fixed at the same time.
- What we did NOT change, and why, is written down rather than left implied. Two thumbnails come from YouTube rather than us, so they are not ours to re-encode. Thirteen pictures in our internal editing tools still need someone to measure the space they appear in — measuring is the whole job here, and guessing would just move the problem. Eight others were done, because their size is stated exactly in the code and needed no measuring.
- Nothing to do at your end. Pages should simply appear faster, especially on a phone.
Version 2.158.1
August 18, 2026The tool we use to correct our own bug reports was quietly corrupting them
- We keep a written record of every known problem, and we have a rule that a record which has gone out of date must be corrected rather than left standing. An out-of-date note is worse than a missing one, because it sends the next person confidently down the wrong path.
- The command we would naturally use to make that correction turned out to mangle the thing it was correcting. Reading a note back gave us a version formatted for display on a screen, not the original text — and writing that back in place of the original quietly reformatted the whole thing. It came out about the same length, which is what made it dangerous: nothing looked wrong.
- There is now a small tool for it that checks its own work. It reads the true original, shows what would change before changing anything, refuses if someone else has edited the note in the meantime, refuses if the replacement is empty or suspiciously short, and reads the note back afterwards to confirm what was stored is what was sent.
- One of those checks was missing the first time we did this by hand, earlier the same day. That edit was fine only because nobody else happened to be editing the same note at that moment — which is luck rather than a safeguard, so it is now a check.
- Nothing to do at your end. This is internal tooling; nothing on the site changed.
Version 2.158.0
August 18, 2026The front page was sending you seven megabytes of pictures to show two of them
- The home page now loads roughly twelve times lighter. It was sending about 7.6 MB of images and now sends about 0.65 MB. On a phone it is lighter still. Nothing looks any different — the pictures are the same pictures, simply sent in a modern format and at a size that matches the space they are shown in.
- Two files were ninety-three per cent of it. The event artwork at the top, and the still frame you see on the reflection video before you press play. Everything else on the page put together was a rounding error beside them.
- The tool that fixes this has been available to us the whole time, and we had reasoned ourselves out of using it here. When we did this across the rest of the site a few days ago, these two were deliberately left out, for a good reason that turned out to apply to a different page. The reason was “it is one picture among seventy, so it barely matters”. That was measured on a page carrying seventy pictures. This page carries two.
- The bigger of the two was invisible to the search that found all the others. A still frame on a video is not stored the way a picture on a page is, so every check we ran for oversized images skipped straight past the largest one on the page. It was found only by watching what the page actually downloads, rather than by looking at what it contains.
- The reason those two were left alone is still a real reason, and it has been kept. These artworks come in several different shapes, and the usual fix requires knowing the shape in advance — get it wrong and the page jumps about as it loads. We have taken the part that shrinks the file without the part that needs to know the shape.
- Our own measuring tool was quietly wrong, in the direction that made the work look less worthwhile. The first set of readings said we would save about a fifth. Checked properly, the real saving was closer to nineteen twentieths — the tool had been asking for the pictures in a way no real browser ever does, and getting a worse answer back. Two more of our checks were also misreading things, both in the flattering direction.
- Nothing to do at your end. The page should simply appear faster, especially on a phone or a slow connection.
Version 2.157.0
August 18, 2026A disk that reported itself perfectly healthy was running at a fraction of its speed
- We replace hardware before it fails, and our checks are supposed to tell us when. One drive told us it was in excellent condition — its own self-assessment passed, no errors of any kind recorded — while reading data at roughly a three-hundredth of what that kind of drive should manage.
- Nothing we watch could ever have caught it. Every signal we monitor is about errors, and there weren’t any. The drive wasn’t failing. It was succeeding, extremely slowly, which turns out to look identical to perfect health from every direction we were looking.
- We found it by accident. A routine task was taking absurdly long, and someone thought to measure rather than wait. That is not a monitoring strategy, and it is uncomfortably close to how these things usually get noticed.
- So we now measure something we never measured. Reading speed is the only check that tells a healthy drive apart from that one, and it takes about three seconds. It is now part of what we check routinely rather than something we reach for once we already suspect a problem.
- The same check found one more oddity worth watching, and cleared several machines entirely. Everything else is healthy, which is genuinely useful to know rather than assume — we had never actually looked.
- You may notice brief interruptions over the next fortnight. Some planned maintenance is underway on the systems behind the site. It is scheduled so that most of it costs nothing visible, but a short pause here and there is possible.
- Nothing to do at your end.
Version 2.156.0
August 16, 2026The work people wait for was running on the slowest thing we own
- Our AI work has moved onto much faster hardware. Reflections, vignettes, the phonetic guides for recitation, and the tool that finds relevant passages while an editor is writing all run through the same system, and that system has moved.
- The one that mattered most was the one someone sits and waits for. When an editor asks for relevant passages, that request had come to take about forty-five seconds — long enough to break the thread of what you were writing. It now comes back in under four. Everything else generates quietly in the background where nobody is watching a clock, so the slowest thing was also the most visible, and we had stopped noticing.
- The longest job we run went from about four and a half minutes to forty seconds. That is the one that writes a complete illustrated story. It was never something anyone sat and watched, which is exactly why it went unexamined for as long as it did.
- We had chosen the slower arrangement on purpose, and then not revisited it — and it was worse than we realised. It was picked for the quality of what it produces, knowingly accepting that it was not fast. That was the right call when it was made. What we had not noticed is that it had also made that longest job nearly three times slower than the arrangement it replaced. The evidence was sitting in our own records the whole time. Nothing was broken, so nothing said anything.
- The move could not be a simple one, and the reason is worth recording. The settings that told our software which hardware to build for were correct for the old machine and would have quietly stayed correct-looking on the new one — running perfectly well while using almost none of what the new hardware can do. We would have measured the result, found it barely better, and reasonably concluded the move was not worth making. Those settings are now explicit about which machine they describe.
- The old machine stays switched on for a day, doing nothing. If anything is wrong we can put the work straight back on it while we look. It gets a new job later this week.
- Nothing to do at your end. Nothing on the site changed — things that were slow behind the scenes are simply less slow.
Version 2.155.0
August 16, 2026Our health checks were watching the wrong machine
- Nothing was broken, and that is what made this worth writing up. We recently moved all of our AI work onto a different machine. The checks that tell our team whether that AI is healthy carried on watching the old one — and reported it as fine, entirely truthfully, about a machine that had nothing to do.
- Had the working machine failed, four separate screens would have said everything was well while the site quietly fell back to a paid outside service. We would have found out from a bill rather than from the page whose only job is to tell us.
- It was found by accident, while working out whether the old machine could be switched off. Nothing would have reported it, because from the outside a check that passes and a check that passes about the wrong thing look identical.
- One of our own admin pages was naming the outside software our AI is built on. It was not out-of-date information — the page asks the service what it is running, and the answer carried the supplier's name with it. Our own models have their own names for exactly this reason, and the page now uses them. If it ever meets a model it has no name for, it says so plainly instead of falling back to the supplier's.
- The checks now follow the work rather than naming a machine, so the next time something moves they move with it.
- Nothing to do at your end. Nothing on the site was affected.
Version 2.154.0
August 15, 2026All our AI features now go through one front door — and closing the side doors found an unlocked one
- Everything the site asks an AI to do is supposed to go through a single piece of code, so that every request is recorded, costed, and automatically retried elsewhere if the first attempt fails. Five features were quietly going around it.
- Those five were invisible in our own records. Not slow, not broken — simply absent. When we looked at what our AI features had been doing, translation appeared to be unused; it was actually just unrecorded, which is a very different thing and much easier to believe.
- 🔴 One of them turned out to need no sign-in at all. A page that writes summaries and tags for an article could be triggered by anyone, not just our editors. It happened to be pointing at a machine that had moved, so it was failing rather than working — but that is luck, not a safeguard, and the fix that made the feature work would have made the hole real. Both landed together.
- Two of the five were not actually in use, and one had been recorded as unused months ago. A note to that effect was sitting in this very changelog and nobody had acted on it. Around a thousand lines of code went with them.
- Article writing was rebuilt, and it stopped throwing away most of its own budget. When a talk is long, it has to be read in sections and then drawn together. The rule deciding when to do that counted letters, and an AI does not read letters — it reads pieces, and how many pieces a letter costs varies almost fourfold depending on the text. We now measure the real figure before deciding.
- The biggest single improvement was simply not sending the timecodes. Subtitle files carry a timestamp for every line, and those cost the AI far more to read than the words do. Removing them cut the largest talk we hold by more than three quarters — it had not fitted at all before, and now uses about a quarter of what is available.
- A test button in our admin tools could not test the thing it was there to test. It kept its own private list of which AI services exist, and that list had never been updated, so the newest one was missing from it entirely.
- Our own usage figures were counting our test button presses as real activity — about one row in seven. They are still recorded, because a test genuinely uses the same resources, but they are now kept separate rather than mixed in.
- The rule is now enforced automatically, so a sixth side door cannot be added without the build failing. We have written this kind of rule down before and had it walked around four times, which is why it is a check rather than a note.
- One thing was deliberately given up. Article writing used to show the text appearing word by word. It now reports which section it is working on instead. Making the word-by-word view work with the automatic-retry behaviour is genuinely difficult to get right, and getting it half right would reintroduce exactly the problem this work removed.
- An internal page for a tool that has moved to its own site now simply takes you there. It used to show a stub explaining how to set the tool up, which named more about how we run things than an internal page should. Sending people to the real product is both more useful and says nothing.
- Our internal activity page was naming the software behind our AI. Two columns were printing raw internal identifiers rather than plain descriptions — one of them the name of an outside vendor. They now say what the thing does. It also claimed “0 in / 0 out” for speech-to-text, which measures nothing meaningful for audio; it now says so rather than showing a confident zero.
- Two things our own testing caught before release. A page showing what our AI has been doing was displaying an internal machine name for the newest service, because it kept its own private list of names and that list had never been updated — the same shape of mistake as one we fixed last week, one file away. And article writing showed a progress bar that could sit still for two or three minutes with nothing else moving, which is indistinguishable from being stuck; it now shows a running clock.
- Nothing to do at your end.
Version 2.153.0
August 15, 2026We added a new AI service and it could not be reached — because the same fact was written down in four places
- Adding a new AI service should be one change. It was four, and only one of them got made, so the new service was configured, listed, apparently working — and unreachable. Every one of our tests passed.
- There is now one list, and a build check that fails if anyone starts a second.
- A related fact had been written out twenty-eight times: which service handles our AI work by default. Changing it meant twenty-eight correct edits, and twenty-seven of them would have left something subtly wrong that still passed every test. It is one line now.
- We also removed a large piece of code that nothing had used for months. It had been on our list of things to fix, and it turned out most of the problem we thought we had was concentrated in a file nobody was calling.
- A small internal display was showing an address it should not have. Removed.
- Nothing to do at your end. This is preparation for moving our AI work onto different equipment, and none of it has reached the live site yet.
Version 2.152.0
August 15, 2026The check that decides whether a voice sounds right was only checking a third of what it should
- Before any passage in another script is read aloud, it is rewritten into English letters so the voice can pronounce it. We keep a set of hard test passages to check a model does that well.
- Those tests were only enforcing two of the seven rules they were meant to. Most seriously, a model that handed the passage back completely unchanged — having done nothing at all — was scored as a pass.
- Four missing checks have been added, including the one that started this: long vowels have to be written doubled, or the voice clips them short.
- Getting this wrong in the cautious direction matters. There is rarely one correct way to write a word in English letters, so a check that is too strict would flag good work and quickly be ignored. Each new check is tested against several different-but-correct spellings to be sure it stays quiet on those.
- Nothing to do at your end. No audio already published is affected.
Version 2.151.0
August 15, 2026Groundwork for how our AI features are run, and a gap in our own testing
- Nothing changes for you, and nothing is using this yet. It is preparation, deliberately landed inert so it can be reviewed calmly rather than in the middle of a switch-over.
- Not every AI engine is spoken to in the same way, and our code now handles a second style of conversation as well as the one it already knew.
- The part worth writing down is what we found while doing it. We had 198 tests covering this area and not one of them checked the single setting that decides which style is used. The obvious way to add a new engine would have passed every test and then failed in production.
- We also found a comment in our own code that was simply untrue, and it was the kind that does damage — it described the setup in a way that would have convinced someone they could make this change by editing a config file, when they could not.
- Nothing to do at your end.
Version 2.150.0
August 15, 2026Better tools for checking whether a change actually helps
- Nothing on the site changed. These are internal measuring tools, and they matter because they decide what we believe about our own work.
- They now test the real thing rather than a stand-in. Each one borrows the actual text, settings and checks the site uses, instead of keeping its own copy that can quietly drift out of step.
- We learned that the hard way the day before. A test holding its own slightly-different copy produced a dramatic and completely wrong result, which took real effort to disprove.
- One of them deliberately gives no verdict. For judging a translation there is no mechanical right answer, so it shows the results side by side and leaves the judgement to a person. A check that cannot really check is worse than no check at all.
- Nothing to do at your end.