Keyboard shortcuts

Press ← or → to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

Diagnostic Code Reference

Failures reported as RdfDiagnostic values carry a stable, machine-readable code alongside severity, message, detail and location. The code is the contract: tests, the SARIF emitter, the CLI, the Python ValueError text and downstream matchers key on it, while the message is free prose that may change wording. This page lists the codes by family, with the failure each one names and what a caller can do about it. The set was enumerated from the constructor sites in the source tree, not written from memory; if a code you see is missing here, the source is authoritative and the page is stale.

Codes are kebab-case, prefixed by the family that owns them. They are never translated, and a caller should compare the whole string rather than a prefix.

RdfDiagnostic::presentation() optionally provides a stable message identity, named typed parameters and structured detail. Select a presentation template by message_id(): one diagnostic code can cover several templates. Read parameter values directly instead of extracting them from English text. to_json() emits the versioned machine record, with logical 64-bit anchors and typed integers as exact decimal strings. SARIF retains it in properties.diagnosticRecord; C callers use the borrowed purrdf_error_presentation_json accessor.

iri-* — IRI parsing and base resolution (purrdf-iri)

IriError::diagnostic_code is the single owner of these strings for the whole workspace; every codec, SPARQL, ShEx and SHACL route an IRI failure through it. The base-related codes distinguish an invalid base, a missing base and a grammar that forbids relative references; their remedies differ.

CodeMeaningRemedy
iri-emptyThe string is empty where a non-empty IRI/URI was required.Supply a non-empty IRI.
iri-missing-schemeThe string has no scheme, so it cannot be an absolute IRI.Write the IRI in absolute form, with a scheme.
iri-bad-schemeThe scheme is malformed (it must start with a letter and contain only letters, digits, +, - and .).Correct the scheme.
iri-bad-percent-encodingA % at the reported byte offset is not followed by two hexadecimal digits.Percent-encode the % itself, or complete the escape.
iri-disallowed-charA character the IRI grammar does not admit occurs at the reported byte offset.Percent-encode or remove the character.
iri-bad-authorityThe authority component (//host:port) is malformed.Correct the host or port.
iri-non-absolute-baseThe base IRI supplied for resolution is not itself absolute.Supply a base IRI that has a scheme, e.g. http://example.org/dir/.
iri-relative-no-baseA relative IRI reference was met with no base in scope: no in-document directive, no caller-supplied base, no retrieval IRI.Add a base to the document (@base/BASE in Turtle-family syntaxes, xml:base in RDF/XML, @context.@base in JSON-LD) or pass a base IRI to the API.
iri-not-absolute-by-grammarThe reference is not absolute and the syntax admits no relative reference at all (N-Triples, N-Quads), so no base could ever apply.Write the IRI in absolute form; supplying a base will not help.

native-codec-* — the text and XML codecs (purrdf-rdf)

CodeMeaningRemedy
native-codec-parseThe codec (Turtle family, RDF/XML, TriX, HexTuples) could not parse the input; the location names the line and column. Term nesting past the parser’s depth limit is reported under this code too.Fix the document at the reported position.
native-codec-limitA cumulative source byte/line counter or explicitly bounded local column cannot represent the next position.Split the source into separately addressed documents, or shorten an oversized line.
native-codec-utf8The input bytes are not valid UTF-8.Re-encode the document as UTF-8.
native-codec-panicThe codec panicked while parsing and the panic guard caught it. This is a defect in PurRDF, never in the input.Report it with the input that triggered it.
native-codec-readReading the RDF source through the streaming reader failed with an IO error.Check the source stream or file.
native-codec-writeWriting the serialized output failed with an IO error.Check the destination.
native-codec-serializeThe target format cannot represent the dataset — for example a named graph in a single-graph format — or the writer failed.Choose a format that carries the construct, or serialize through the loss-ledger lane.
native-codec-replayReplaying a parsed dataset into an event sink failed because the sink returned an error.The sink’s own error is carried in the message.
native-codec-unsupported-formatThe media type or format identifier names no codec.Use one of the supported media types or format ids.
native-codec-datatype-not-iriA literal’s datatype term is not an IRI.Give the literal an IRI datatype.
native-codec-direction-without-languageA base direction was given on a literal that has no language tag.Add a language tag, or drop the direction.
native-codec-invalid-directionA literal base direction other than ltr or rtl was given.Use ltr or rtl.
native-codec-iri-missing-valueAn IRI term event carried an empty value.Supply the IRI.
native-codec-missing-reifier-bindingA triple term refers to a reifier that has no binding.Bind the reifier before referring to it.
native-codec-predicate-not-iriA term in an IRI-only position (the predicate) is not an IRI.Use an IRI predicate.
native-codec-reifier-not-tripleA reifier binds something other than a triple term.Bind the reifier to a triple term.
native-codec-term-out-of-rangeA term id in the event stream is outside the range the stream introduced.The producing stream is inconsistent; regenerate it.
native-codec-unbound-triple-termA triple term names neither its components nor a reifier.Give the triple term its components or a reifier.

The last nine arise when the codec lane consumes term events rather than text — a GTS graph being resolved through the codec surface — and mirror the gts-* and rdf-ir-* codes below.

native-jsonld-* and jsonld-* — JSON-LD and YAML-LD

CodeMeaningRemedy
native-jsonld-decodeThe JSON-LD or YAML-LD input is malformed at the surface: invalid JSON/YAML, an encoding error, or a materialized-carrier byte budget exceeded.Fix the surface syntax or reduce the document.
native-jsonld-parseThe input is well-formed JSON-LD that does not map to RDF.Correct the JSON-LD structure.
jsonld-json-inputThe strict JSON reader rejected the input, for example a duplicate object member.Remove the duplicate or correct the JSON.
jsonld-context-invalidA context document, or the strict versioned options document, is invalid.Correct the context or options document.
jsonld-context-limitA context-processing ceiling was exceeded: loaded bytes, work count, definition complexity, or the offline context registry size.Reduce the context, or raise the limit the options document declares.
jsonld-derived-invalidThe deterministic dataset-IRI derived mode could not derive a prefix (an invalid IRI, or a null mapping).Correct the IRI the prefix would be derived from.
jsonld-derived-limitA derived-context work or byte ceiling was exceeded.Reduce the dataset’s IRI vocabulary or raise the declared limit.
jsonld-options-unusedJSON-LD serialization options were supplied for a format that is not JSON-LD or YAML-LD.Drop the options, or serialize to JSON-LD/YAML-LD.

cdt-* — SEP-0009 composite literals

A cdt:List or cdt:Map lexical form denotes blank nodes in the enclosing document’s scope, so a form that does not parse leaves that scope undefined and the whole document is refused rather than the literal being kept opaque.

CodeMeaningRemedy
cdt-literal-malformedA composite literal’s lexical form does not parse.Correct the literal.
cdt-literal-scan-disagreementThe bounded lexical scanner and the full parser disagree about the literal.This is a defect in PurRDF; report it with the literal.

rdf-ir-* — dataset structure (purrdf-core freeze and GTS import)

RdfDatasetBuilder::freeze() validates the structure of the dataset it is about to freeze; the GTS import sink reports the same family for a container whose terms do not form a well-formed dataset.

CodeMeaningRemedy
rdf-ir-term-out-of-rangeA quad references a TermId the builder never interned.Intern the term before pushing the quad.
rdf-ir-predicate-not-iriA quad’s predicate is not an IRI.Use an IRI predicate.
rdf-ir-literal-subjectA literal occupies subject position.RDF admits no literal subject; restructure the statement.
rdf-ir-triple-subjectA triple term occupies subject position.RDF 1.2 admits triple terms in object position only; use a reifier.
rdf-ir-graph-name-invalidA graph name is a literal or a triple term.A graph name must be an IRI or a blank node.
rdf-ir-graph-already-existsCreating a graph finds an existing slot in remembered-empty mode.Choose a fresh graph name or suppress this semantic error with SILENT.
rdf-ir-reifier-not-tripleA reifier binding points at something other than a triple term.Bind the reifier to a triple term.
rdf-ir-triple-cycleA triple term contains itself, directly or through nesting.Remove the cycle.
rdf-ir-triple-nesting-limitTriple-term nesting exceeds the builder’s depth limit.Flatten the nesting.
rdf-ir-dangling-term-refA GTS role references a term id that no term event introduced.The container is inconsistent; regenerate it.
rdf-ir-gts-fold-diagnosticThe GTS fold reported a diagnostic, surfaced through the import.The fold diagnostic’s own code and detail are in the message.
rdf-ir-iri-missing-valueAn imported IRI term has an empty value.Supply the IRI.
rdf-ir-literal-datatype-not-iriAn imported literal’s datatype resolves to a non-IRI.Give the literal an IRI datatype.
rdf-ir-missing-reifier-bindingAn imported triple term references a reifier with no recorded binding.Bind the reifier in the container.
rdf-ir-term-nesting-limitImported triple-term nesting exceeds the depth limit.Flatten the nesting.
rdf-ir-unbound-triple-termAn imported triple term names neither its components nor a reifier.Give the triple term its components or a reifier.

gts-* and rdf-* — GTS graph resolution, verification and writing

CodeMeaningRemedy
gts-term-out-of-rangeA GTS term id is out of range for the graph.The container is inconsistent; regenerate it.
gts-iri-missing-valueA GTS IRI term has an empty value.Supply the IRI.
gts-predicate-not-iriA GTS predicate term is not an IRI.Use an IRI predicate.
gts-literal-datatype-not-iriA GTS literal datatype does not resolve to an IRI.Give the literal an IRI datatype.
gts-direction-without-languageA GTS literal carries a base direction but no language tag.Add a language tag, or drop the direction.
gts-invalid-directionA GTS literal base direction is neither ltr nor rtl.Use ltr or rtl.
gts-missing-reifier-bindingA GTS triple term references a reifier the graph does not bind.Bind the reifier in the container.
gts-unbound-triple-termA GTS triple term names neither its own components nor a reifier.Give the triple term its components or a reifier.
gts-self-reaching-termA GTS term resolves through itself, so no walk of its components can terminate.Remove the cycle.
gts-term-nesting-limitGTS term nesting exceeds the depth limit.Flatten the nesting.
gts-fold-diagnosticThe GTS fold reported one or more diagnostics.Inspect the fold diagnostics listed in the detail.
gts-verify-digest-inclusionContent-addressed terms are not included in the verified chain.The container’s chain does not cover its content; do not trust it.
gts-verify-signatureCOSE signature verification failed.Check the signing key and the container’s integrity.
gts-writer-codecThe GTS writer’s codec reported an error while writing.The codec’s own error is in the message.
rdf-graph-name-not-nodeWhile building a GTS graph, a named-graph name is not an IRI or blank node.Use an IRI or blank node graph name.
rdf-reifier-not-nodeWhile building a GTS graph, an RDF 1.2 reifier is not an IRI or blank node.Use an IRI or blank node reifier.
rdf-term-nesting-limitRDF term nesting exceeded the depth limit while building a GTS graph.Flatten the nesting.

native-sparql-* — the SPARQL engine boundary (purrdf-sparql-eval)

CodeMeaningRemedy
native-sparql-query-parseThe query text does not parse under the SPARQL 1.1/1.2 grammar (including a malformed VERSION declaration; a well-formed but unrecognized version is native-sparql-unsupported).Fix the query at the reported position.
native-sparql-update-parseThe update request does not parse.Fix the update at the reported position.
native-sparql-query-explainEvaluation under --explain failed; the evaluator’s error is in the message.Address the underlying evaluation error.
native-sparql-query-evalQuery evaluation failed with an error no more specific code classifies; the evaluator’s error is in the message.Address the underlying evaluation error.
native-sparql-internalAn evaluator invariant was violated. The execution cannot produce a valid answer.Report the failure with its query and input; it requires an engine repair.
native-sparql-composite-boundConstructing a composite datatype value exceeded its element or lexical-byte resource bound.Reduce the value being constructed.
native-sparql-float-environmentThe calling thread’s floating-point environment cannot preserve the distance arithmetic’s specified IEEE-754 results.Evaluate on a thread with the supported floating-point environment.
native-sparql-function-operationalA host function or relation failed during execution: an opaque returned error, a caught panic, a resource ceiling, or an invalid protocol response.Repair the callee or adjust the resource limit; this cannot establish a validation verdict.
native-sparql-source-readOperational storage refused a forward/reverse lookup or complete row drain. The error is fatal, including inside SERVICE SILENT; no partial answer is published.Repair the source or adjust its explicit resource limits before retrying.
native-sparql-workspace-unpricedAn execution operation has no admitted working-memory owner, or a raw evaluator entry was called without the required reservation.Use an engine entry that carries the view’s owned workspace admission; supply any missing host/provider workspace certificate.
native-sparql-workspace-bound-overflowCertified workspace arithmetic exceeds u64.Reduce the query’s intermediate cardinality or pattern count.
native-sparql-update-evalUpdate evaluation failed with an error no more specific code classifies; the evaluator’s error is in the message.Address the underlying evaluation error.
native-sparql-algebraThe query’s algebra was refused before evaluation: Query::validate refused it, or a prepared plan needs replanning for the registries this evaluation supplies.Fix the query as the message says, or prepare the changed algebra before executing it.
native-sparql-constructTyped graph building was handed a query that is not a CONSTRUCT.Build graphs from a CONSTRUCT query.
native-sparql-execution-parameterA prepared execution was given a parameter name or slot it does not declare.Bind only the parameters the execution declares; the message lists them.
native-sparql-relation-incompleteA property-function relation answered from less than all of its data on an entry that has no evidence slot to label the short answer (the ungoverned query lane, and UPDATE). The message names the relation and its own reason.Run the query on a governed entry, whose receipt carries the relation’s witness, or wait for the relation to be complete.
native-sparql-property-functionThe property-function seam refused the query: a predicate under a declared namespace has no registration, a call site’s arity does not match the relation, no total order can serve a chain, or a prepared plan is being evaluated under a different registry than it was prepared with.Register the relation, correct the arity, or prepare and evaluate under the same registry.
native-sparql-aggregate-functionThe custom-aggregate seam refused the query: an AGG(<iri>, …) names no registered aggregate, or a prepared plan is being evaluated under a different aggregate registry.Register the aggregate, or prepare and evaluate under the same registry.
native-sparql-custom-functionA function or aggregate IRI resolved to no registered custom function, native function, or XSD constructor.Register the function under that IRI, or use a native one.
native-sparql-quoted-triple-term-variableA variable occupies a component of a quoted-triple term in a basic graph pattern or property path; structural triple-term matching is out of scope.Bind the triple term as a whole, or match its components through the reifier surface.
native-sparql-heldin-unconfiguredheldIn was called with no caller-supplied standpoint-predicate configuration.Configure the standpoint predicates before using heldIn.
native-sparql-evaluation-stack-exhaustedThe request nests deeper than the stack of the thread evaluating it can hold: before its recursive passes run, the evaluator measures the whole height of the query plan against the stack it has left (and a correlated substitution checks at every level of the copy it makes), and refuses before it runs out, rather than aborting the process or trapping the wasm instance. The parser admitted the request, and the same request answers with more stack.Evaluate on a native thread spawned with more stack, or nest the request less deeply. In wasm both lanes run on stacks of the same size — an asynchronous job’s region is exactly as large as the module’s own shadow stack — so nesting less deeply is the remedy there, and the message names no other.
native-sparql-unsupportedThe request is well-formed but uses something this engine refuses to evaluate as written — for example a SERVICE ?e for which no solution names an endpoint, or (without SILENT) ?e bound to a literal, or an unrecognized VERSION. The message names what and, where there is one, the rewrite. The Cloudflare adapter answers it with a 400.Rewrite the request as the message says.
native-sparql-host-stack-exhaustedwasm only: the request nests deeper than the JavaScript engine’s own call stack holds. PurRDF keeps a fixed 640 KiB budget of that stack for evaluating a request — graph patterns nested at most 284 levels, a tree at most 2 048 levels plus eight per nested group, expressions and paths at most 2 304 levels — and V8 gives the synchronous lane and an asynchronous job the same stack, so a plan past it is refused before it runs, the same on both lanes. Parsing handles nesting on heap stacks; these limits govern evaluator admission. The Cloudflare adapter answers it with a 400.Nest the request less deeply.
native-sparql-bnode-mint-prefixThe blank-node mint prefix supplied in the options is invalid.Supply a valid prefix.
native-sparql-service-deniedAn installed ServiceCatalog withheld a capability from a SERVICE endpoint the request names — the endpoint has no profile, or its profile does not grant a required query, network or credentials capability — so no endpoint was contacted. Under SERVICE SILENT the clause is the join identity instead, recorded as a silenced denied invocation. The Cloudflare adapter answers it with a 403.Grant the endpoint the capability in the catalog, or remove the SERVICE.
native-sparql-service-host-deniedThe host’s own service resolver refused a SERVICE request by its own policy, naming no catalog capability — for example a JavaScript resolveService that answered { kind: "denied" } — so no endpoint was contacted. Under SERVICE SILENT the clause is the join identity instead, recorded as a silenced host-denied invocation. The Cloudflare adapter answers it with a 403.Allow the request in the host’s policy, or remove the SERVICE.
native-sparql-service-failedA SERVICE endpoint was contacted and gave no usable answer: a transport failure, an HTTP error status, a redirect, a timeout of the resolver’s own, or a body that does not decode. Under SERVICE SILENT the clause is the join identity instead, recorded as a silenced invocation. The Cloudflare adapter answers it with a 502.Make the endpoint reachable, or write SERVICE SILENT.
native-sparql-service-unconfiguredNo remote query source reaches a SERVICE endpoint the request names: none was configured, or the configured one answers that nothing it holds reaches the endpoint. Under SERVICE SILENT the clause is the join identity instead, recorded as a silenced unconfigured invocation. The Cloudflare adapter answers it with a 500.Configure a source that reaches the endpoint, or remove the SERVICE.
native-sparql-load-no-resolverLOAD <iri> was requested but no GraphResolver host seam was provided. LOAD SILENT succeeds instead with nothing loaded, recorded as a silenced unconfigured invocation.Inject a resolver, or remove the LOAD.
native-sparql-load-deniedAn installed ServiceCatalog withheld a capability from the LOAD source (LoadError::Denied) — the source, or a location a redirect named, has no profile, or its profile does not grant a required network or credentials capability — so nothing was fetched. LOAD SILENT succeeds instead with nothing loaded, recorded as a silenced denied invocation. The Cloudflare adapter answers it with a 403.Grant the source the missing capability in the catalog, or remove the LOAD.
native-sparql-load-host-deniedThe host’s own LOAD resolver refused the source by its own policy, naming no catalog capability (LoadError::HostDenied) — for example a JavaScript resolveLoad that answered { kind: "denied" }. LOAD SILENT succeeds instead with nothing loaded, recorded as a silenced host-denied invocation. The Cloudflare adapter answers it with a 403.Allow the source in the host’s policy, or remove the LOAD.
native-sparql-load-failedA GraphResolver could not fetch the document (LoadError::Transport) — for example the wasm package’s asynchronous resolveLoad answered { kind: "transport" }, the fetch outlived its catalog profile’s timeout, or it followed more than five redirects. LOAD SILENT succeeds instead with nothing loaded, recorded as a silenced invocation. The Cloudflare adapter answers it with a 502.Make the source reachable, or write LOAD SILENT.
native-sparql-load-decodeA GraphResolver fetched the document and could not parse it (LoadError::Decode) — for example the wasm package’s asynchronous resolveLoad delivered a document in a media type no parser reads, or bytes that are not the syntax named. LOAD SILENT succeeds instead with nothing loaded, recorded as a silenced invocation. The Cloudflare adapter answers it with a 502.Serve a document in a syntax the resolver parses, or write LOAD SILENT.
native-sparql-load-stoppedThe request’s own stop signal (a cancellation or the deadline) fired while a LOAD was awaited (LoadError::Governed). A governed request reports the governor trip, not this code, SILENT or not.Raise the deadline, or do not cancel the job.
native-sparql-load-faultA GraphResolver’s handler faulted (LoadError::Fault) — for example the wasm package’s asynchronous resolveLoad threw, rejected, answered with nothing, or named a failure kind the protocol does not define. The message carries the handler’s words. LOAD SILENT succeeds instead with nothing loaded, recorded as a silenced fault invocation. The Cloudflare adapter answers it with a sanitized 500 whose real words go to its log under a correlation id.Return a document with its media type, a Response, a Dataset, a redirect or a typed failure — never throw.
native-sparql-cancelledwasm asynchronous lane: an ungoverned operation was cancelled (its AbortSignal fired). A governed operation reports the trip on its outcome instead. The Cloudflare adapter answers it with a 503.Do not cancel the operation.
native-sparql-deadlinewasm asynchronous lane: an ungoverned operation’s deadline passed. The Cloudflare adapter answers it with a 503.Raise the deadline.
native-sparql-not-acceptablewasm asynchronous lane: a negotiated query’s result — a graph carrying named graphs — can be carried by no format the Accept header allows. The Cloudflare adapter answers it with a 406 naming the formats that can.Accept TriG, N-Quads or JSON-LD.
native-sparql-update-in-flightwasm asynchronous lane: an asynchronous update of the same dataset is already in flight, or the dataset was mutated while the update ran, so the update is refused rather than evaluated against (or committed over) a state it never saw. The Cloudflare adapter answers it with a 409.Await the first update, then send the next.
native-sparql-host-faultThe host, not the request and not an endpoint, failed: a SERVICE source’s handler faulted (EvalError::ServiceHostFault) — for example a wasm resolveService that threw, rejected, answered with something that is not an answer, or named a failure kind the protocol does not define — in a clause without SILENT (under SERVICE SILENT the fault is the join identity, recorded on the evidence as a silenced fault); or, on the wasm asynchronous lane, a job whose delivery protocol broke or whose frames overwrote its stack region’s canary. The Cloudflare adapter answers it with a sanitized 500 whose real words go to its log under a correlation id.Fix the host handler.
native-sparql-governor-ceilingProtocol boundary: a deterministic governor ceiling stopped the operation — it was reached, or the planner’s estimate already exceeded it. The operation’s outcome carries the trip; this is the code of the problem a host answers it with (the Cloudflare adapter’s 422).Raise the ceiling, or narrow the request.
native-sparql-evaluationProtocol boundary: the operation’s evaluation failed with no more specific code; the problem’s code a host answers it with.Address the underlying evaluation error.
native-sparql-update-bad-destinationAn ADD/MOVE/COPY/LOAD destination is NAMED or ALL; it must be DEFAULT or a single named GRAPH.Name a single destination graph.
native-sparql-update-graph-missingAn UPDATE under the default RememberEmpty graph lifetime names an input graph that does not exist. CLEAR, DROP, ADD, COPY and MOVE refuse this input before changing the destination; SILENT leaves the operation unchanged. Self COPY and MOVE are unconditional no-ops.Create or load the input graph, or use SILENT.
native-sparql-subst-iriA substitution value is not a valid IRI.Supply a valid IRI.
native-sparql-subst-triple-predicateA substituted quoted triple has a predicate that is not an IRI.Use an IRI predicate.
native-sparql-subst-literal-datatypeA substituted literal’s datatype is not an IRI.Use an IRI datatype.
native-sparql-subst-langtagA pre-bound literal’s language tag is not one the lexing profile accepts.Supply a well-formed language tag.
native-sparql-xpath-operationalA selected dated XPath law failed operationally in a way that names no single xpath-* resource. The query is aborted and publishes no answer.Report the failure with its query and input.

xpath-* — dated native XPath regular expressions (purrdf-core)

These codes arise only when a caller selects a dated XPath law (xpath-2.0-2010-12-14 or xpath-3.1-2017-03-21) for SPARQL REGEX and REPLACE, SHACL sh:pattern or ShEx pattern facets. Without a selection, the compatibility regular expressions run and none of these codes appears. purrdf_core::xsd_regex::xpath::Resource::code is their single owner. Each one names the Resource that a Limits bound withheld (Error::Resource, with the exact requirement and the bound), or whose storage the host refused to allocate (Error::Allocation). The production bound Limits::new() sets is given in each row, and zero withholds a resource completely.

Every xpath-* code is operational. It is never a syntax verdict and never a non-match: invalid flags (FORX0001), an invalid pattern (FORX0002), an empty-matching replacement pattern (FORX0003) or invalid replacement text (FORX0004) is the host’s ordinary invalid-pattern outcome instead, which is a SPARQL expression error, a SHACL finding or a failed ShEx facet. A refusal fails the whole operation. A query publishes no answer, an update changes nothing, and a validation writes no report; the refusal never becomes an unbound value, a false filter or a conforming graph. The C ABI reports it as PURRDF_STATUS_REGEX_RESOURCE_ERROR (13).

The bounds apply to every pattern. Matching charges the work actually performed: character comparisons, choices, state copies, search advances and replacement output. A matcher step has no universal nanosecond cost, and neither one step per byte nor a one-to-three-step range describes every search.

Under a dated law, a finite maximum that the input cannot reach no longer creates distinct count states. Compatibility nullable bodies keep their finite bounds and original capture priority. Greedy single-character runs, including choices and capture chains, scan once and retain their priority-ordered stops. Large nonnullable counts can reuse relative states while their bound comparisons stay unchanged, with exact counts restored near a bound.

Production-default tests cover four mebibytes of ^[\s\S]{0,10000000}$, ^[^\n]{0,10000000}$, ^[^<>]{1,5000000}$, ^[\p{L} ]{1,5000000}$ and ^(\w+\s?){1,5000000}$, and four mebibytes of the exact-count choices ^(a|b){4194304}$ and (a|b){4000000}. Decision and capture searches have integer work bounds of four steps per byte for these classes/grouped words and six for these choices. Nonbinding maxima ten times larger spend the same work; these fixture bounds are not universal admission or timing guarantees. REPLACE over two mebibytes of grouped words retains the final iteration’s capture and also charges template and output work. The native_xpath_large benchmark group measures these forms and their count/input-size ladders beside the original literal, grouped and adversarial neighbours.

Nested counted repetitions whose bodies can repeat empty still distinguish count combinations. On aaab, ((a?){3000}){3000}b answers while ((a?){5000}){5000}b reaches an operational bound. There is no universal minimum-count threshold: the pattern and input determine which states coexist. A backreference keeps the backtracking matcher, whose exponential exploration (^(a|aa)*c\1$ over forty a) can reach the step bound. Such refusal is a hard operational error, not false, an absent capture or a partial replacement.

CodeMeaningRemedy
xpath-pattern-bytesResource::PatternBytes: the pattern source has more UTF-8 bytes than the bound (64 KiB). The source is refused before parsing, whether or not its syntax is valid.Shorten the pattern.
xpath-compile-stepsResource::CompileSteps: compiling the pattern needs more compiler operations, scanned characters and set operations included, than the bound (4,000,000).Simplify the pattern, for example its character-class arithmetic.
xpath-program-nodesResource::ProgramNodes: the compiled program needs more nodes than the bound (262,144).Simplify the pattern or reduce its counted repetitions.
xpath-compile-slotsResource::CompileSlots: building the program needs more construction cells than the bound (2,097,152).Simplify the pattern or reduce its counted repetitions.
xpath-match-stepsResource::MatchSteps: actual matching, capture search or replacement work exceeds 250,000,000 operations. Large nonbinding maxima and eligible single-character counts do not multiply per-byte work; nested count combinations, state closures, backreferences and replacement output can still exhaust it. No answer or partial replacement is published.Simplify the costly pattern structure, remove a backreference where its semantics are unnecessary, or process shorter input.
xpath-match-statesResource::MatchStates: matching needs more simultaneously pending alternative states than the bound (65,536).Reduce the pattern’s alternation and repetition.
xpath-match-slotsResource::MatchSlots: the live states, captures and continuations need more cells than the bound (1,048,576). Nested empty-capable repetitions can reach the bound depending on their combination of counts.Reduce the pattern’s captures and repetition, or match shorter input.
xpath-output-bytesResource::OutputBytes: REPLACE output exceeds the bound (64 MiB).Replace over shorter input or with shorter replacement text.

reasoning-* — SPARQL under an entailment regime (purrdf)

CodeMeaningRemedy
reasoning-closure-relation-witnessProperty-function relations derived from the closure cannot be combined with an OWL Direct-Semantics run whose restricted chase minted existential witnesses: a relation walking the closure could return a minted blank node the regime’s scoping graph does not contain.Query under a regime that mints no witnesses (rdf, rdfs, owl-rl, d, rif, simple), or drop the dataset-derived relations from the call.
reasoning-closure-relation-rebuildRebuilding the property-function relations over the closure failed.The relation builder’s own error is in the message.

statements-* — statement-metadata ingestion (purrdf-rdf)

These arise when a document’s rdf:reifies and owl:Axiom statements are read into the statement layer.

CodeMeaningRemedy
statements-turtle-parseThe statement-metadata Turtle failed to parse.Fix the Turtle.
statements-non-iriA term that must be an IRI in this context is not one.Use an IRI.
statements-reifies-non-tripleThe object of rdf:reifies is not a triple term.Reify a triple term.
statements-malformed-axiomAn owl:Axiom lacks its source, property or target.Complete the axiom.
statements-conflicting-structuralOne subject carries two different values for a structural field.Keep one value.

Other single-code families

CodeMeaningRemedy
sssom-tsv-parseAn SSSOM TSV document is malformed: a missing or unreadable header row, a malformed curie_map entry or set comment, a malformed row, or a non-numeric confidence; the location names the line.Fix the TSV at the reported line.
content-id-schemeA content-id scheme prefix is invalid: empty, non-ASCII, or ending in a hexadecimal digit (which would make it ambiguous with the 64-hex-character tail).Choose a prefix that is non-empty ASCII and does not end in 0-9, a-f or A-F.

Where the code reaches you

  • Rust — RdfDiagnostic::code on the returned error; its Display form is <severity> <code>: <message>.
  • Python — the ValueError message is that Display form (for example error native-codec-parse: …); an IRI failure is rendered as <code>: <message> (for example iri-relative-no-base: …).
  • JavaScript — the thrown Error message carries the same text, and its code property carries the code itself. The wasm package’s own refusals carry a purrdf-wasm-* code: purrdf-wasm-options (an option or argument an operation refused), purrdf-wasm-usage (a job asked for something out of turn), purrdf-wasm-serialize (a result that cannot be written in the format asked for), purrdf-wasm-entailment (an entailment regime or its closure failed), purrdf-wasm-extension-environment (the aggregate registry could not be built), purrdf-wasm-shacl and purrdf-wasm-shacl-product-refusal (a SHACL surface failed, or refused a prepared product).
  • C — the error string returned through the C ABI carries the same text.
  • SARIF — the ruleId of each result is the code, with a reportingDescriptor in the run’s rule table (purrdf-validate).