Every graded finding carries a stable, dotted family.item code (charter koan 9, errors are lore). Clients and repair tools match on the code, which is stable across message wording. This page catalogues every code the system emits: its family (the check or tool that raises it), its severity, any structured repair it carries, and what it means.
These finding codes are disjoint from the wire error-code registry (the ErrorCode values in error-codes.md, per the dli-worker contract §3.2 / §9). The distinction is load-bearing: a wire error code says the call failed — it was malformed (schema), refused by principle (refused), or hit a server defect (internal); a finding code is a graded domain observation about the lore itself. A well-formed call over inconsistent lore returns findings, not an error. No code appears in both sets.
97 dotted codes across 13 families, plus 4 proof.resource-violation sub-codes. A family.item code names its check battery in the family and the specific violation in the item. Two codes can share a stem across families — the naming vet’s name.register-fit (a kernel error) and the authoring seam’s name.unvetted (an authoring warn) are different findings from different surfaces.
Severity belongs to the emitting check. Some findings include structured repair data; others explain the next step in their message. Error-severity findings block author.materialize, while warnings do not.
Emitted by: predicate-identity validation and policy projection in the world loader/check seam
Owner:dli-world :: model.rs (LoadFinding)
Severity: Mixed: an observed-shape mismatch is an error that blocks
materialization; a union-policy promotion is a non-blocking warning.
Code
Severity
Repair
Meaning
predicate-identity.arity-mismatch
error
—
a certain predicate-identity component contains incompatible observed positional arities; materialization is refused rather than performing a partial merge.
Severity: Errors block contradictions; warnings flag unresolved drafts or temporal gaps.
Code
Severity
Repair
Meaning
continuity.stale-era-model
error
—
an older compiled model lacks era declarations; recompile it from source or the lorestore before checking.
continuity.chronology-cycle
error
—
the before-graph closes a cycle; the timeline would have no consistent order.
continuity.prior-contradiction
error
—
a claim contradicts an established prior certain fact.
continuity.rejected-lore
error
—
a certain fact realizes a killed/rejected token.
continuity.unknown-entity
error
—
a claim references an entity that is not in scope.
continuity.proposed-as-fact
error
—
a claim states shadow (proposed) lore as settled.
continuity.intra-episode-contradiction
error
—
a claim set fixes one slot two contradictory ways within an episode.
continuity.fluent-contradiction
error
—
a fluent slot holds two distinct values certainly at once over overlapping intervals (a state’s since/until spans collide).
continuity.pending-conflict
warn
—
a proposed value and another live value differ on a declared-functional non-fluent slot; the warning does not decide either account or block materialization.
continuity.fd-violation
error
—
canon’s own certain layer holds two distinct values for a subject on a predicate the author declared functional, breaking the functional dependency.
continuity.derived-fd-violation
error
—
the same functional-dependency break as continuity.fd-violation, but visible only once the world’s rules are saturated — a wire-authored rule (or an identity-closure copy) derives the second value rather than an author asserting it directly.
continuity.identity-temporal-unsupported
error
—
a same-as identity link names a declared era or event on either side — v1 refuses to unify time points (a defeasible merge over chronology indices would half-merge the timeline).
continuity.fluent-order-undeclared
warn
—
a fluent slot holds two distinct certain-support values whose temporal cover is undeclared-order-indeterminate at some point — a before-fact between the named anchors would settle whether they actually clash. Non-blocking: the contradiction check itself never fires on undeclared order.
continuity.inertia-unanchored
warn
—
a predicate declared inertial carries a value with no since anchor, so no forward-persistence interval can be derived — the declaration would silently do nothing. Non-blocking; names the slot so the missing anchor is a deliberate choice, not an accident (DL-0081, koan 4).
Severity: Mixed: structural, register, uniqueness, morphology, and banned-token violations are errors; aural clashes, set clashes, sayability, and confusables are warnings. (Distinct from the authoring-seam name.unvetted finding below.)
Code
Severity
Repair
Meaning
name.slot-sequence
error
—
the name’s slots match no name-kind pattern of its dialect.
name.role-membership
error
—
a name-part is not declared in the dialect under the role it fills.
name.register-fit
error
—
the name does not fit its declared dialect/register.
name.phonotactics
error
—
the name violates the dialect’s phonotactics (vowels, endings, clusters, stress).
name.uniqueness
error
—
the name collides with an existing name in canon.
name.fixed-token-reuse
error
—
the name reuses a fixed token reserved elsewhere.
name.aural-clash
warn
—
the name is aurally too close to another across the whole name-space.
name.set-clash
warn
—
the name is not aurally distinct within its declared set.
name.gender-morphology
error
—
the name’s morphology conflicts with its declared gender.
name.sayability-cap
warn
—
the name exceeds the configured sayability-tier caps.
name.banned-in-name
error
—
the name realizes banned diegetic vocabulary.
name.confusable
warn
—
the id mixes a Latin-looking form with a look-alike character from another script (a homoglyph).
Severity: Per-code severity gates author.materialize: an error blocks it, a warn passes. These are the findings that carry structured machine repairs.
Code
Severity
Repair
Meaning
render.provenance-unrepresentable
warn
—
the staged declaration has provenance the text renderer cannot preserve; its rendered line is omitted.
name.unvetted
warn
run-check
a name has not passed the naming oracle; it enters proposed and unvetted.
entity.unknown
error
resolve-entity
no entity of that id is in scope; the claim is staged but cannot materialize until it exists.
event.era-missing
error
—
an event has no era anchor; every event must occur during a declared era.
event.era-kind
error
—
an event’s era anchor names an entity that is not an era.
fact.contradiction
error
—
a claimed slot value contradicts a certain fact the base asserts.
order.cycle
error
—
a before fact would close a cycle against the existing orderings.
consequence.changed
warn
—
under a supposition the derived-consequence set may move; see author.diff.
hypothesis.not-in-fork
error
—
a hypothesis is legal only in a fork workspace.
hypothesis.bundle-limit
error
—
a proposal bundle carries at most one hypothesis; a second supposition is a second fork.
hypothesis.unknown
error
—
no hypothesis of that id is staged in this workspace to suppose.
question.unknown
error
—
no open question of that id exists in this workspace to add an option to.
field.control-char
error
remove-control-chars
a free-text field carries a control/bidi/zero-width character that could forge or reorder a declaration in the review diff.
citation.unknown-decision
error
resolve-citation
a cited decision id does not resolve against the decisions the corpus declares. The engine records the attribution a caller supplies but verifies that what it cites exists: the unknown decision’s variable is left open, so the claim can never read certain, and materialize is barred until the id is repaired.
decision.duplicate-in-batch
error
—
one bulk decision-recording request repeats an exact decision id; the complete batch is refused atomically and the finding identifies both record positions.
identity.self-merge
warn
—
a same-as claim names the same id on both sides; it is a no-op merge.
predicate-identity.self-merge
warn
—
a predicate-identity claim names the same predicate on both sides; it is retained for provenance but has no semantic effect.
identity.temporal-unsupported
error
—
a same-as claim names an era or event endpoint; identity merging is not defined over the temporal spine (v1 boundary).
identity.sort-mismatch
warn
—
a same-as claim merges entities of different sorts (e.g. a person and a place); staged but flagged for review.
rule.empty-body
error
add-body-literal
a rule’s body has no literals; a body-less rule would derive its head unconditionally on the wire, but its render reparses via the .dli text path to a malformed rule the loader refuses (migration parity). Refused before staging.
rule.unbound-variable
error
bind-variable
a rule’s head, or a negated body literal, names a variable no positive body atom binds — a range-restriction (datalog safety) violation. Refused before staging.
rule.duplicate
error
—
a rule of that name is already staged or already in the compiled base; rule names are unique so author.defeat can cite one unambiguously. Refused before staging.
rule.unstratifiable
error
—
staging this rule alongside everything already staged would leave the world unstratifiable (a negative-dependency cycle); the stratification pre-flight refuses it before it ever reaches the workspace, so no add can brick a later read.
state.anchor-kind
error
resolve-anchor
a state’s temporal anchor names a KNOWN entity of the wrong sort — since/until need an event, after/during need an era.
workspace.base-missing
error
—
the workspace’s project document base is no longer loaded.
world.uncompilable
error
—
the staged declarations do not compile into a checkable world.