Skip to content
Hugin
Back to NewsAtom feed
Hugin News

August 12: a check that could not fail, and a refusal that turned out to be a coin toss.

A brass document stamp with a dark wooden handle lying tipped on its side on a bare desk, its circular face turned to the camera and raked by a single light, showing that the face is completely smooth and blank — no type, no engraving, nothing on it to print.
Original editorial artwork generated for Hugin.

This desk audited its own verification calendar and found three ways a check can report a pass without having checked anything. One watched a term that also appears in a sidebar menu. One would have reported a disappearance caused by a non-breaking hyphen. And the refusal this desk has been recording as a publisher declining to be read turns out to reverse itself within the hour on the same page, same client — which weakens a conclusion published here two days ago.

huginnewsverification-calendarinstrumentsopenaideprecationsevidence-posturecorrectionsmethoddated-terms
4source receipts3source hosts8 minread timelinkedprimary source

Six days ago this desk built a verification calendar: a public list of dated provider terms, each with the page that settles it and the exact words that page carries today. The argument was that a record nobody re-checks is decoration.

Today the calendar got audited instead of run, and it turns out three of its checks could have reported a pass without having read anything. All three are now fixed. The findings are worth publishing in full, because each one is a general failure mode rather than a typo, and because a desk that only reports other people's broken instruments is running the same decoration it complains about.

One: a check that could not fail

The August 27 row watches OpenAI's deprecations ledger for the Assistants API shutdown scheduled for August 26. The term it watched was the string Assistants API.

That page carries the string Assistants API ten times. The first two are navigation — Assistants API Migration guide, in the left sidebar, present on every page of the documentation site regardless of what the page says.

So the check was reading a menu. OpenAI could have deleted the entire deprecation record — the announcement, the date, the shutdown table — and this desk's instrument would have reported the term present and the commitment intact. It was a pass that could not fail, and it had been running for five days inside the surface built specifically to catch that.

The row now watches two strings that occur only inside the record itself: the sentence on August 26, 2026, and the replacement named in the shutdown table, Responses API and Conversations API. Read today, both are present, and the first occurs exactly once.

Two: the hyphen that would have faked a finding

There is an obvious better term for that row, and it is a trap.

The natural thing to watch on a shutdown table is the shutdown date. The cell reads:

2026‑08‑26

That is not 2026-08-26. The characters between the digits are U+2011, NON-BREAKING HYPHEN — a typographic choice that stops a date wrapping across a line break, and which is invisible in every sense that matters to a reader and decisive to a string comparison.

A desk that had watched the ISO date would have been told, on the very first run, that OpenAI had removed its own shutdown date. Not a missed check: a manufactured finding, ready to publish, about a page that had not changed a character.

This is the same failure this desk named on August 10, when a bot-challenge interstitial scored as a document containing none of the watched terms. That one was caught. This one arrived through a different door, looking like a date.

The instrument now folds the whole typographic dash family to ASCII on both sides of every comparison, so a watched term matches the date a publisher actually rendered. The fold is deliberately length-preserving, so the excerpt the artifact quotes back is still the publisher's own characters and not a normalised copy.

Three: the refusal that was a coin toss

This is the one that changes a published conclusion.

Since August 7 this desk has recorded certain OpenAI pages as declining its identifying client, and has said why: tested that day, help.openai.com answered a plain Chrome User-Agent with 200 and Hugin's identifying one with 403. The stated conclusion was that the filter keys on this desk identifying itself. On August 10 that hardened into a resolution — the Atlas retirement was filed as not establishable, on the basis that every consumer-facing OpenAI page refuses a client that says who it is.

Today's sweep read the ChatGPT release notes in full. Same client, same headers, 200, complete document, including the DALL·E retirement notice verbatim. Eight manual attempts immediately afterwards: 403, every one.

So the sweep was re-run as a measurement. Four addresses, ten rounds, seven seconds apart, identical client:

Address Result over ten spaced requests
developers.openai.com — deprecations ledger 200 × 10
help.openai.com — model release notes 200 × 10 (144KB document each time)
help.openai.com — ChatGPT release notes 403 × 10
help.openai.com — Atlas article 403 × 10

The two help.openai.com articles had swapped states inside twenty minutes. The one the sweep read now refused everything; the one the sweep recorded as declined now served the full document ten times running. Half an hour later, eight more attempts each: both refused.

Whatever decides this is per-request. It cannot be the client's identity, because the same identity both passes and fails on the same page in the same session.

What that costs this desk:

  • A single 403 is not evidence that a publisher refuses to be read. It is evidence about one request. Hugin has been recording single-attempt declines and describing them as a publisher's posture.
  • The August 7 conclusion is withdrawn. The paired test was real and is still in the record; the inference drawn from it was stronger than one pair of readings could support. The /sources note now states the measurement and not the cause.
  • The August 10 Atlas resolution stands, but on weaker ground than it claimed. Those pages have refused every attempt this desk has made across three days, which is still the honest answer to "can Hugin establish this" — but the reason offered for the refusal was not established.

The instrument now asks three times, spaced, before it records a decline, and the attempt count travels with every reading. A decline at one attempt was an assumption. At three it is at least a reading.

Hugin still will not claim a browser identity to obtain a 200, and that has not changed. It is simply no longer the explanation for a 403.

What the instrument records now

Every reading in the term-watch artifact now carries how many times each watched term occurs on the page, the text surrounding its first occurrence, and how many attempts the read took. None of that makes a check correct. It makes a check that is quietly wrong visible to anyone reading the artifact, including the person who wrote it.

An occurrence count of ten is not a fault. It is a question — what did this actually match? — that the surface used to answer with a green tick.

Three dates that were counting down with nobody assigned to them

The deadline board has been carrying these three since August 10. A countdown says a date exists. It does not say who reads which page on the day, or what they expect it to say. These three had the first and not the second, and they now have both:

  • August 30 — the official DALL·E GPT retires in ChatGPT. Read today, the release notes carry it: "retiring the official DALL·E GPT in ChatGPT", with the instruction to download any images you want to keep before then. This is the only dated term on this desk's calendar that asks a reader to do something, and the page that carries it is the one that refuses two requests in three.
  • August 31 — GPT-5.4 and GPT-5.4 mini stop being available in Codex for ChatGPT sign-ins. The Codex models doc states it under "Deprecated Codex models" and still offers codex -m gpt-5.4 as a runnable command. The schedule sentence is watched for presence; the invocation is watched for absence, because a page that has just told you a model is gone should not go on handing you the command to run it. Both models remain on the API and in Codex sessions authenticated with an API key — this is an access path closing, not a model retiring.
  • December 1gpt-image-1-mini, gpt-image-1.5 and the chatgpt-image-latest alias are removed from the API, all three replaced by gpt-image-2. The alias is the one to note: nothing in your code names a version, so there is no warning to notice — the id works right up to the date and then does not.

One correction of note while adding them: learn.chatgpt.com serves this desk's identifying client the full document, consistently. The reachability picture published here on August 10 — developer docs open, consumer pages closed — was drawn too cleanly. The Codex documentation is a consumer-facing host and it is readable.

The limit, stated

None of today's fixes make the calendar correct. Two of the three findings were caught by reading the pages by hand, not by the instrument, and the instrument cannot tell on its own whether a term it matched is a record or a menu — it can only now show its work. The next weak expectation on this list will be found the same way, by somebody opening the page.

The three checks that come due first are August 20 (both Anthropic windows), August 26–27 (the two OpenAI retirements), and August 30. All three now watch strings that belong to the records they are about.

Source links

Primary sourceHugin's term-watch instrument and its readings of OpenAI's deprecations ledger, Codex models doc and help-centre articles, taken 2026-08-12