Twenty-five items reached Done this week and none went to Won't Do, against fifteen the week before. Eighteen of them were CronCal's, and most of those came down to one habit: a number had been reasoned about, and this week it was measured.

Its specification asked CronCal to score at least ninety for performance on a throttled mobile profile, and the audit that ran this week established that it cannot. The home route ships about four megabytes; the profile throttles to about 184 kilobytes a second; the division comes out at twenty-one seconds, which is the measured time to largest paint almost exactly. The download is the metric. The runtime alone, before a line of the application arrives, would score zero on that measure, and with every other metric made perfect the model reaches seventy-seven. So the target moved rather than the architecture. The record now carries a floor set a few points under the worst median observed, so that ordinary variance cannot trip it — a gate that fails on noise gets ignored, and an ignored gate is worse than none — and a transfer budget tight enough that the next careless dependency will. Payload is the number actually under our control. The score, it turned out, is not: half a megabyte came off first load this week and the score moved within noise.

That half megabyte came from one line. The library behind the Quartz dialect does not declare itself trimmable, so the linker left it whole, and an XML scheduling plugin nobody calls kept 379 kilobytes of XML support alive in an application that parses no XML. The ticket had favoured relinking the runtime instead; measured, that was worth 0.8 per cent and a slower build on every push, and it was declined and written down so it is not reopened on a hunch. Neither test suite could see any of this, because unit tests run against untrimmed assemblies, so all sixty-two published expressions were run through the trimmed build and the untrimmed one and compared. No differences, and every visitor downloads 509 kilobytes less.

Accessibility scored one hundred on all four audited pages in both themes, and the second half of that sentence is the one that took the work. Lighthouse only ever audits the light colour scheme, and CronCal's primary theme is dark, so a perfect score said nothing about the theme most visitors see. The audit ran a second checker in both schemes by hand and found the dark one short of the AA floor on a single token. The guard that came out of it is a unit test that reads the token file and computes the contrast ratio for twenty-four text-on-surface pairs in both themes — twenty-eight cases, no browser, milliseconds. It was first scoped as eight more browser boots on every push, permanently, to guard what had been one hex value; that was the wrong trade. Every route now also fits at 320 pixels without sideways scrolling, and a test asserts as much at all four specified widths. It was verified to go red with the fix removed, which is the only way to know a test is testing anything.

— On evidence —

A test that has never been seen to fail is not evidence of anything.

The daylight-saving verification the specification calls for was run for London, New York and Sydney, and it earned its place. Rules were being evaluated in UTC and only then projected into the zone the reader had chosen, so a rule's wall-clock time drifted by an hour across every transition and could never land in the hour that goes missing in spring or the one that repeats in autumn. Each dialect now evaluates in its own zone and resolves those two hours the way its real scheduler does: cron skips the gap, Quartz runs at its end, and a major cloud provider's dialect stays in UTC and says so rather than silently sharing the setting. Transition days are marked on the calendar and explained. Underneath, the bridge that generates a time zone from the IANA database now round-trips all 597 zones exactly from 2020 onwards, and a test pins that at zero deviations, so that a database update introducing a shape the model cannot express fails the build instead of a fire time.

The first diagnosis of that bridge blamed two zones that suspend daylight saving for Ramadan. They had never been the problem — the database models the suspension as a negative saving, which the existing code already reproduced. The fault was two hours a decade wherever a country changes its standard offset in the middle of a day, and it was shared with zones the first ticket never mentioned. The figure of 595 zones out of 597 had been measured over five years, a window narrow enough to flatter it; widened to fifty, it was thirty-six short. Both corrections are recorded above the original text rather than in place of it, because the original was read before it was fixed.

Two major versions arrived and got different answers. The library behind the Quartz dialect went to a fourth major and was investigated and not adopted: the new version accepts an expression the old one rejects, and answers a conflict between day-of-month and day-of-week by firing on both, Unix-style. The same expression now has two correct answers depending on which version the reader runs, and CronCal's whole promise is to report what their scheduler does — so whether that is one dialect or two is a product question, raised as its own ticket, and the upgrade is held until it is answered. The test framework's next major was adopted, and was not a version bump. It brought a new testing platform that refuses the old runner outright on the current SDK, so the runner moved, and four project files and the CI workflow moved with it. Eight hundred and seventy-three tests, one fewer than before, and the one was accounted for: a cookbook recipe listing its own expression twice, which the old version ran twice and the new one runs once.

The site also took cookieless analytics, as N17 Time did a fortnight ago.

Four client sites now say who built them. A beauty therapy studio, an independent garage, a local dog-training club and a clinical canine massage practice each gained a footer credit linking back here — a plain anchor in every case, so no cookie, no third-party request and no change to any content-security policy, and each checked on the live site rather than the preview.

N17 Time now shows the score while a match is on, and it was verified on a real one on Saturday, end to end and unattended. The fixtures feed's free tier runs a few minutes behind the pitch; that delay is not published anywhere, so it was measured against a public scoreboard across two live games before anything was built, and a score a few minutes old was judged acceptable against the paid tier that removes it. One scheduled trigger every two minutes replaces the hourly one. Outside a match a tick reads the stored snapshot and exits; inside the window it asks for the match once and writes only when something has changed; and the hourly refresh is skipped while play is on, so the page can never jump to the next fixture mid-game. The whole cycle — fixture, live, full time, next fixture — completed without anyone touching it, for under one per cent of the free request allowance. Pitch to page was six to ten minutes a goal, against an estimate of about seven. For one goal the feed served two different answers on consecutive reads and the page mirrored both, as designed; the change that would stop that costs two minutes on every goal, and is parked until the next match says whether it is worth it.

In progress across every project stands at eight, down one.

The week's habit, if it has one, is measuring what had previously been reasoned about: a target divided by a bandwidth, a saving weighed before it was believed, a delay nobody had published, a zone count re-run over a window wide enough to be honest. Reasoning is cheaper, and it is usually right. The measuring is for the usually.