Every failure this place grew, made runnable. Not the story of the bug — the bug itself, in a file you can open, next to the check that passed while it was broken and the check that convicts.
Public domain · take it, run it, send one backFailure is not expensive. Undetectable failure is expensive.
An error found in ten minutes cost ten minutes. The same error found by the person who needed the thing to work, a week later, in front of the thing that mattered, cost a week. Identical error, two prices, and the whole difference is instrumentation.
So the discipline is not be right more often. It is: grow instruments that can convict you.
It applies to anything that reports on your behalf. The smoke alarm: press the button, or you own a plastic disc. The backup: restore one file, or you own a folder. Answers that convict the check: “Nothing.” “I’d have to go and look.” “It would show up somewhere.” “The light would still be green.” “It’s never failed, so it must be fine.”
Each one carries four things, and the second is the valuable one.
The instruments are published too, not just the failures — the three gates this site actually runs before anything ships, each one having replaced a check that could not produce a finding: videocheck.mjs, livediff.py, linkcheck.py (what each one is for). Public domain, same as everything else here.
Machine-readable: /failures.json. Agent guidance: /llms.txt. The narrative record these came from: what it taught.
A signal is evidence only if the failure could have changed it.
These four were all read on a path the failure could not reach. The poster is painted by the poster attribute, which never touches the film. opacity:1 is set by a scroll observer, which never touches playback. No exception was thrown is produced by the absence of a throw, which an early return satisfies exactly as well as a completed pass.
In each case the reassuring value was unconditional — it was going to be produced either way. A signal produced unconditionally carries no information at all.
One correction worth keeping: these were not invisible. Every one was found by a person looking at the page. They were invisible to the instruments and plain to the eye. Believing otherwise sends you off to grow more elaborate instruments, when what actually caught all four was somebody looking.
A hero film was gated behind navigator.connection: it returned early, loading nothing at all, if saveData was set, or effectiveType === '3g', or downlink < 1.2. On Android those are rolling round-trip estimates, not measurements — a good phone on good wifi reads 3g routinely. So the film was never fetched, and the poster underneath made refusal look exactly like playback. It stood for days. Found by the owner, not by any check.
const box = v.getBoundingClientRect();
const painted = box.width > 0 && box.height > 0 &&
getComputedStyle(v).visibility === 'visible';
console.assert(painted); // PASSES on a film never fetched
// and its most seductive form, a screenshot diff:
// await expect(hero).toHaveScreenshot('hero.png');
// The poster IS the first frame. The snapshot matches perfectly.The rectangle is painted by something that cannot know whether the film arrived.
let asked = false;
v.addEventListener('loadstart', () => { asked = true; });
setTimeout(() => {
console.assert(asked, 'FILM NEVER REQUESTED');
console.assert(v.networkState !== 0, 'NETWORK_EMPTY');
}, 900);
// better, out of page: count the bytes, not the intentions
// page.on('request', r => { if (/\.mp4$/.test(r.url())) hits++ });
// expect(hits).toBeGreaterThan(0);Measured 23 August 2026: simulated 3g, downlink 0.9 and Data Saver each produced zero network requests for the film.
CSS hid every clip until JavaScript added a class called .playing. That class was applied by an intersection observer, on the line after the swallowed play() rejection. It meant scrolled into view. The stylesheet read it as this works.
console.assert(getComputedStyle(v).opacity === '1');
console.assert(v.classList.contains('playing'));
console.assert(v.getAttribute('src'));
// All three PASS on a clip whose play() rejected 1.5s ago.None of those values is produced by a path that includes playback succeeding.
const t0 = v.currentTime; await new Promise(r => setTimeout(r, 800)); console.assert(v.readyState >= 3, 'HAVE_FUTURE_DATA never reached'); console.assert(v.currentTime > t0, 'time did not advance'); console.assert(!v.error, 'media error ' + (v.error && v.error.code));
readyState 0, currentTime 0, error code 4 — while opacity still reads 1.
An inline script queried elements written below it. At parse time they did not exist, so querySelectorAll returned an empty list, the guard fired, and the function returned. On every device. Every load. It threw nothing, because there was nothing to throw.
let errs = 0;
window.addEventListener('error', () => errs++);
window.addEventListener('unhandledrejection', () => errs++);
console.assert(errs === 0, 'page threw'); // PASSESThe silence of a function that returned on its first line is identical to the silence of one that ran to completion.
const items = document.querySelectorAll('.item');
console.assert(items.length > 0, 'nothing to act on — stale selector');
console.assert([...items].every(el => el.dataset.ready === '1'),
'feature no-opped');
// the general form: every effectful pass declares how many things it
// expected to touch, and fails when that number is zero.Three items in the document, zero touched, error count still 0.
The check read the label. The label was written by the thing being tested.
In each of these a value was read from a declaration when it should have been derived from the artefact. level=31 is a field; ceil(w/16) × ceil(h/16) is derived. codec_name=h264 is a field; the count of frames a decoder actually produced is derived.
A test that reads the producer’s own claim is not a second opinion. It is the first opinion, quoted back.
A clip was stamped -level 3.1 by hand. H.264 Level 3.1 permits 3,600 macroblocks per frame and 108,000 per second. A 1080×1920 frame carries 8,160, and at 30fps 244,800 — both ceilings breached, by the same 2.27×. Android’s hardware decoder sizes its buffers from the declaration and refused. Desktop software decoders ignore the declaration entirely, which is why it played on every machine we owned.
ffprobe -v error -select_streams v:0 \ -show_entries stream=level -of csv=p=0 clip.mp4 # -> 31 "good, Level 3.1 as intended" # and its accomplice, the quiet pipeline: ffmpeg -v error -i in.mp4 -c:v libx264 -level 3.1 out.mp4 && echo OK # exit 0. libx264 DID print the violation, at warning level, # and -v error threw it away.
The field reads 31 because somebody wrote 31, not because the stream honours it.
mbs=$(( ((w+15)/16) * ((h+15)/16) )) # CEIL, not floor rate=$(( mbs * fps )) [ "$mbs" -le 3600 ] && [ "$rate" -le 108000 ] \ && echo "PASS: the declaration is true" \ || echo "FAIL: declares L$lvl, carries $mbs MB @ $rate MB/s"
Prints the two real numbers beside the two ceilings — the same sentence libx264 printed at encode time and nobody read.
bash h264-declared-level-violation.sh. Self-contained, no dependencies, nothing to install beyond what it names.floor and the count 8,040 for two days. Both were wrong, and the entry contradicted itself: its ratio had been derived with ceil while its formula said floor. Corrected 23 August 2026 by a reviewing agent that recomputed it and refused the brief it was handed. floor and ceil agree at 720, 1280, 1920 and 640 — every dimension divisible by 16 — so the wrong formula looks right until it meets 1080 or 360, which is to say until it meets the resolutions people actually ship.-level at all — let the encoder write the truth.The browser used to verify that three clips played had no H.264 decoder. canPlayType returned the empty string. So the pass criterion had quietly degraded to a source string was assigned — a claim satisfied by a source pointing at a 404, at a corrupt file, and at a stream the device refuses. It passed straight through three distinct real defects.
const ok = !!video.currentSrc; // a string exists
await page.waitForSelector('video[src]'); // an attribute existsNeither ever asks a decoder for a picture.
// 1. prove the instrument can register a difference AT ALL, first
if (!v.canPlayType('video/mp4; codecs="avc1.4D401F"'))
throw new Error('INCONCLUSIVE: this harness is blind');
// 2. only now assert on decoded output
// (and accumulate FORWARD motion — a loop that wraps
// makes a naive t1-t0 delta go negative)Where the codec is genuinely absent it exits inconclusive rather than returning a green tick it has not earned.
canPlayType returns probably). That is the browser this site’s video gate runs in now.A check whose passing state and its failing state are the same state.
The question a check must answer is never did it pass. It is could it have failed — and the only honest way to answer that is to break the thing on purpose, once, and watch.
A verifier compared HTTP Content-Length against the local file size. The edit 4:36 → 4:49 is the same byte count, so three just-edited files reported identical to live. It was not a careless check. It was structurally incapable of producing the finding.
live_len = int(r.headers['Content-Length'])
if live_len == os.path.getsize(local):
print('IDENTICAL') # <- the only branch that ever ranByte count is invariant under the entire class of edits this check existed to catch. It had one reachable state, and it printed it.
It was worse than that: it only behaved because Python’s urllib requests identity encoding by default. Negotiate gzip and the same check flips to reporting every file as different — and a check that always fails gets muted, which is the same ceremony wearing the opposite mask.
lh = hashlib.md5(open(local,'rb').read()).hexdigest()
if hashlib.md5(body).hexdigest() != lh:
print(f'DIFFERS {rel} local {lh[:8]} / live {...}')Two visibly different digests and the file that carries them.
python3 content-length-diff.py. Self-contained, no dependencies, nothing to install beyond what it names.A countdown on a video end-card called a shared stopCount() on reaching zero — and stopCount() cleared the pending auto-advance that zero was supposed to trigger. The display counted down perfectly the whole way. It was never a race: the ticker hit zero 200ms before the advance was due, so the clear won every single time, on every device, forever.
// what a reviewer actually checked, by eye and then in a test: await page.waitForFunction(() => countEl.textContent === ''); // 8,7,6,5,4,3,2,1 then blank. Every frame correct.
This is the sharpest one. The observable is not merely uncorrelated with the outcome — it is the trigger of the outcome’s destruction. The better the countdown looks, the more certainly the advance is dead. A display cannot report the failure of a thing it causes.
if(left<=0){ clearInterval(tick); tick=null; } // stop only the ticker
// and the test that can fail:
const before = video.currentSrc;
await page.waitForFunction(s => video.currentSrc !== s, before,
{ timeout: 12000 });A timeout naming the source that never changed. The countdown’s appearance is not consulted at all.
A link to an anchor that does not exist does not 404. The browser lands silently at the top of the page. The link checker stripped everything after the # one line before it started looking, then reported that it found nothing wrong.
u = u.split('#')[0] # <- the evidence is deleted here
if not os.path.exists(resolve(u)):
missing.append(u)The check discards the evidence, then reports it found none. Both a good fragment and a dead one leave behind the identical path string.
def ids_of(text):
return set(re.findall(r'\bid="([^"]+)"', text))
if frag not in ids_of(src[target]):
missing.append((rel, href, f'no id="{frag}" in {target}'))The page, the href, and the reason: no id="if-someone-calls" in findings/index.html. Exit 1, so the deploy stops.
A copy carries its own truth, and at the destination that truth wins.
This family costs more than the others, and it is worth saying why plainly.
This site once published “stripes rule him out” as an exclusion. The animal is striped — forehead, neck, shoulders, forelegs. That sentence, read by a person holding a phone and looking at a real cat, is an instruction to discard a genuine sighting. And they would follow it, because it came from the owner’s own site and sounded like expertise.
It was corrected at the source. The correction reached one copy in six.
A claim is corrected at the source. Every copy already made — a search cache, a repost, a screenshot in a group chat, a downloaded video, a language model’s training snapshot — keeps answering with the old one.
curl -s https://example.org/ | grep -c 'the wrong sentence' # expect 0
The check interrogates the one copy the publisher can write to — which is, by construction, the copy that was just corrected. Its scope is exactly the set in which it can never find a failure. It feels like the strongest possible check, because it tests production directly and tests the exact string. Directness is the disguise.
# enumerate CARRIERS, not sources.
for every superseded string:
scan every artefact you can read
# then LIST, separately, every artefact you CANNOT read —
# because that list is the actual finding.The path of every file still carrying a retired sentence. Plus an honest count of the artefacts grep can say nothing about: frames, waveforms, screenshots, rasters. Those close by retirement, never by correction.
python3 correction-cannot-reach-its-copies.py. Self-contained, no dependencies, nothing to install beyond what it names.superseded_strings. The exact wrong phrasings are listed so any reader, scraper or agent holding a stale copy can grep itself and find out. Two details most adopters get wrong: the registry needs a short cache (1800s here, against 604800 on assets — a correction index behind a long cache is itself a stale copy) and Access-Control-Allow-Origin: *, because being read by other people’s tools is the entire point.A pasted widget carried its own :root palette — same specificity as the site’s, declared later, so it won page-wide. Seven tokens; four were new and harmless, three collided. The symptom surfaced 400 lines and one component away from the cause, as a washed-out hero and white flashes at section seams. Nothing was wrong with any of those. They were faithfully painting a token whose value had been replaced from somewhere they had no relationship with.
// read the authored stylesheet
[...sheet.cssRules].find(r => r.selectorText === ':root')
.style.getPropertyValue('--ink') // '#0b171e' -> PASSA later rule of equal specificity does not edit the earlier one — it out-ranks it. The earlier declaration survives verbatim, so a check reading authored CSS returns the right answer from a healthy document and a poisoned one alike.
// read what the browser RESOLVED, and convict on a redefined NAME
const cs = getComputedStyle(document.documentElement);
for (const [name, authored] of SITE_TOKENS)
if (cs.getPropertyValue(name).trim() !== authored)
fail(`${name}: authored ${authored}, resolved ${...}`);
// and FAIL on any stylesheet you could not read —
// a sheet you cannot read is not a sheet that passed.Every redefined token by name, with the value it lost.
:root block as a bug — was overruled on 23 August 2026. Run against this site’s own pages it flags four blocks, and all four are innocent, because they namespace their tokens. Block count is not the signal. A redefined name is the signal. The oracle that found this had its own ceremony too: its first version skipped unreadable stylesheets with a bare catch { continue } and cheerfully passed a page whose stylesheets had not loaded — the exact defect it was written to catch, one level up.--avtl-ink collides with nothing — and check the resolved value rather than the authored one.This is an invitation, and it is meant literally.
If you are a person, an agent, or something in between: take these, run them, break them. Then send back a failure this corpus does not hold — or a better version of one it does. A sharper reproduction. A ceremony we did not notice we were performing. An oracle that convicts where ours only suspects.
A note on where this lives. This record belongs to HAVENS — the sibling of this site, which is being cultivated now and will have its own address shortly. Until it does, the corpus lodges here, because here is where the failures happened. avenlost.pet has exactly one job, and it is not this one.
A correction is the most welcome thing you can send. Three entries on this page were corrected by reviewers who refused the brief they were handed and recomputed it: the macroblock arithmetic was wrong for two days, the concat root cause was wrong from the start, and the :root rule was overruled outright. All three corrections are marked in place, with what the wrong version said. That is what this record is for.
A cat named Aven has been missing from Panama City Beach, Florida since 19 May 2026. Round black spots on gold, very tall ears, a long banded tail with a dark tip, long legs and a tall build. Stripes on his head, neck and legs are normal — they do not rule him out.
If you have seen a cat like this: photograph him from a distance, please don’t chase, and send it.
Call or text any hour · 260‑337‑3747