Proof

Every finding names the rule it broke

validate() reports every problem at once, never just the first — a report that stops at one failure is how a reader concludes there is one. Each finding carries the number below.

The numbering has gaps because it belongs to the specification rather than to this page: rules 01, 02 and 08 are about the record itself and live in @flashyos/directory. Renumbering these to look tidy would break every finding anybody has already seen.

Rule 03

Nothing expires before it was asserted

A claim that was never valid is not a claim that expired, and treating them alike hides a clock that is wrong.

Rule 04

One claim, one canonical home

Two homes for one fact is two facts, and the second one drifts.

Rule 05

Identifiers well formed, unique, and matching their kind’s prefix

An id that does not say what kind of thing it names is an id a reader has to guess about.

Rule 06warning

Every organisation has an accountable human

The one question the format exists to answer. A warning rather than an error because an org can be mid-setup — but it is never silent.

Rule 07

Nothing in the private tier is marked public

The failure that leaks. Consent is not a filter applied on the way out; it is a property of the row.

Rule 09

A stale conflict disclosure fails the build

A disclosure nobody has restated is a disclosure nobody has checked, and an unchecked one reads exactly like a current one.

Rule 10

No cross-boundary edge claims a countersignature it does not have

The whole point. An org cannot sign its own claim about somebody else, and a record that let it would make every other rule decorative.

conformance() is separate: it checks the graph against the world rather than against itself, and fails when a charter in the manifest is missing from the graph. Back to the overview.