wyper.io ← AI transparency
Accountability

Contested results

Anyone can challenge a published verification with a counter-source. Every challenge filed lands here, including the open ones and the ones we lose. The log is append-only and hash-chained, so a loss is as hard to hide as a win.

Schema v1, committed 20 August 2026 before the first entry existed · machine-readable dump · dump with the full chain

Read this before the numbers below. As of 20 August 2026 there are zero disputes. The log is built and empty, and an empty constraint constrains nothing. By our own published standard this page is a press release until four things are true: 50 disputes on file including ones that went against us, the head hash published on a schedule, at least one accepted dispute that changed a public report, and the open-queue age reported next to the log. Three of those four cannot be faked by us, they need someone on the outside to file.

Live state

disputes filed
open
oldest open (days)
chain

Loading from /api/disputes/log

Who decides

Not us alone. A log meant to constrain us cannot have us as its only judge. What is in force is a published evidence standard with a clock and no single decider.

A dispute is accepted if the counter-source is reachable, on-point, and was not already in the original report. It is rejected only if it fails this checklist, and the reason must be one of these five, named in the entry:

Rejection reasonMeans
off-topicconcerns a different claim than the one checked
unreachablethe source cannot be opened or read, with the reason given
already-consideredit was in the original report, with a pointer to where
opinion-not-evidenceopinion, prediction or taste, not a checkable statement
unverifiable-quotethe asserted wording is not in the cited source, checked the same way we check every other quote

The clock is 14 days. If it runs out, the case stays open, it does not disappear and it is not auto-rejected. Silence is not an acquittal. The code refuses to record a rejection without one of those five reasons; there is no path around it.

Rotating external reviewers are the stronger form and are explicitly foreseen if volume or stakes rise. Promising them now would be a promise without funding. What is ruled out permanently is an internal committee with unpublished criteria, that is theatre with a door.

Why a lost row cannot quietly vanish

Each entry carries the hash of the previous one. We tested both attacks against our own log:

AttackResult
rewrite the text of entry 4{"heil":false,"bruch":{"seq":4,"was":"content does not match its hash"}}
delete entry 3 entirely{"heil":false,"bruch":{"seq":4,"was":"prev_hash does not match its predecessor"}}

Both results appear in every public request, under kette. You never have to take our word for the chain, recompute it from the dump.

What is deliberately not published

The disputant's email address. It is needed to reply and does not belong in a public register, the log records only whether a contact address was on file. An X handle is published only if the disputant supplied one, because that is their public identity.

File one

Every published verification has a Dispute this result action. A dispute must be substantiated (a source link) and attributable (an email or a public X handle). No anonymous unsourced drive-bys, that is the only filter, and it applies before the case is recorded, not after.

Full field list, state machine and reasoning: DISPUTE-LOG-SCHEMA.md in the public repository. Schema changes are new versions with a date, never silent edits.