vibeapp.win

What brokeUpdated 3 October 2026

A sitemap filter that could never filter

The kokkekunst.no site had a sitemap filter that ended in `|| true`, so it let every URL through, including unpublished stories marked noindex. It was fixed in a design round on 2026-08-30. This is what the bug was, what replaced it, and the rule that came out of it.

The short version

What went wrongThe sitemap filter ended in `|| true`, so it let every URL through, including unpublished noindex stories. Without it, the filter would have dropped all news URLs.

How we found itIt was found and fixed in the 30 August 2026 design round, where the commit called the filter a no-op.

The rule nowEvery filter or check needs a test showing it can fail, and `|| true` should not be used by default.

This post documents something Claude got wrong. The claim rests on a commit or a file, not on memory. All of Claude's mistakes

The kokkekunst.no site is built with Astro. It builds the stories into pages, a sitemap and share cards. The newsroom engine writes each story’s frontmatter, including the slug, unpublished and noindex fields. An unpublished story stays up as a tombstone with noindex on it.

The sitemap needs to go along with that. A comment in the site’s Astro config said so directly: unpublished stories should not be in the sitemap, because there they would invite search engines back.

The filter written to do that could not do it.

What the filter did

The sitemap integration takes a filter function. It gets each page URL and returns true to keep the URL or false to drop it. The old filter checked whether the URL contained the news path, negated that, and then added || true at the end.

Anything OR’d with true is true. So the filter returned true for every URL it was given. Every page went into the sitemap, tombstones included. The comment above the filter described behaviour that never happened.

When we read the line more closely, the left side was wrong too. Without the || true, the expression would have dropped every news URL, not only the unpublished ones. The site would have shipped a sitemap with no stories in it. The || true hid a filter that was wrong the other way. Neither version ever looked at whether a story was unpublished or noindex. The filter function only gets a URL, and a URL doesn’t carry that information.

The commit that fixed it called it what it was: “sitemap-filteret var en no-op (|| true)”, meaning “the sitemap filter was a no-op”.

When it was fixed

The fix landed on 2026-08-30 in a design round. That commit is mostly a visual change: the plate now sits half on the dark “pass” and half in the light “dining room” on the front page, on every story page and on the share card. The same commit lists four bugs it fixed:

  • the dark top strip had never rendered (an override outside the media query),
  • the sitemap filter was a no-op,
  • the footer floated on short pages,
  • the /bocuse page was missing spaces around its links.

The commit title says “three bug fixes” and the body lists four. That is a small mistake of its own.

Who wrote it

This site is about what happens when Henning and Claude build things together, so the honest answer matters. Henning writes no code himself, so the original filter line was Claude’s. The material we have doesn’t say when it went in.

What we can say: this kind of bug is easy for anyone to write, human or model, and easy for a reviewer to skim past. || true is a common way to keep a step from failing while you work on something else. The line reads like a filter. Its comment describes a filter. Nothing about it looks broken until you work out the boolean in your head.

What replaced it

The fix moves the decision to where the information actually is. The filter only gets a URL, so the fixing commit made the config read the stories’ frontmatter once at build time:

  1. It walks the news content directory for markdown files.
  2. For each file, it looks at the frontmatter block for unpublished: true or noindex: true.
  3. If either is set, it records the story’s slug in a set of hidden slugs.

The new filter then:

  • drops the search page, which is also noindex,
  • pulls the slug out of any news URL and drops it if it is in the hidden set,
  • keeps everything else.

In that commit, the frontmatter was parsed with a rough regex rather than a YAML parser. A comment in the config explained why that was acceptable: the newsroom engine always writes slug:, unpublished: and noindex: on separate lines. That made the site depend on how the engine formats its output. If the engine had changed that format, the check would have quietly stopped matching.

The rule

A filter that has never been seen to reject anything is not known to be a filter. Two things came out of this:

  • Every filter or check needs a test showing it can fail. For the sitemap, that means a build with at least one unpublished or noindex story and an assertion that its URL is not in the sitemap. A check that has only ever passed hasn’t shown it can do anything.
  • No || true by default. If a step really must not fail the build, say so explicitly and visibly, and log what was let through. Don’t hide it at the end of a boolean.

Corrections

  1. Attribution corrected: an earlier version said the material did not show who wrote the code and did not put the mistake on Claude. Henning writes no code himself; the code was written by Claude.