RBE DOCS

/

Diagnostics

RELC error codes

LIVE
BRANCH · MAIN
doc/error-codes/relc.md
SOURCE ↗

RELC codes describe whole-application compilation/linking rather than basic REL syntax. RELC discovers sources, resolves identities/imports/capabilities, builds immutable Runtime Images, and prepares native executable artifacts.

Ranges

RangeMeaning
RELC1000-1099source discovery/registration/identity
RELC2000-2099imports/symbol linking/dependencies
RELC2100-2199capability/authority validation
RELC3000-3099native lowering/artifact preparation
RELC3100-3199Runtime Image construction/identity
RELC4000-4099activation/transition failures
RELC9000-9099compiler invariant failures / probable compiler bugs

Emitted migration umbrella codes

RELC1000 — source discovery/registration error not yet classified more narrowly

Status: Emitted.

RELC failed while discovering, extracting, registering, or initially compiling a source, but the originating branch does not yet own a narrower RELC10xx code.

Status: Emitted.

Whole-application linking failed before that branch had a narrower stable RELC20xx code. The original link reason remains in the diagnostic.

RELC2200 — Runtime ENV/policy/middleware lowering error

Status: Emitted.

RELC failed while resolving typed Runtime ENV, ServerPolicy, or MiddlewarePlan state used by the immutable Runtime Image.

Specific migration codes

RELC1001 — duplicate source identity

Status: Reserved.

Two physical or embedded REL sources resolved to the same logical source identity.

Why RELC stops: Runtime Images require one deterministic owner for every SourceId. Allowing two definitions would make dependency/capability binding ambiguous.

Action: rename or move one source so each logical source has a unique identity.

RELC1002 — unsupported or inconsistent source role

Status: Reserved.

A source was discovered with a role that conflicts with its registration/embedding context.

Action: verify that embedded and physical files retain the intended .route, .module, .service, or Server REL role.

RELC2001 — unresolved import or symbol

Status: Reserved.

A source references a Module/Service/export that is not present in the linked application image.

Action: verify logical import names, file names and exported symbol spelling.

RELC2002 — dependency cycle is not supported

Status: Reserved.

RELC detected a dependency cycle that the current execution model cannot safely satisfy. Service-to-Service synchronous cycles are a common example because a single-request worker model can deadlock.

Action: break the synchronous cycle by restructuring ownership, introducing an asynchronous boundary, or moving shared logic to a Module when appropriate.

RELC2101 — capability not permitted for source role

Status: Emitted.

The REL syntax/import exists, but the source role does not own that capability.

Action: move the privileged operation behind the correct owning source and import its exported interface instead of widening the caller's authority.

RELC2102 — capability target or operation is invalid

Status: Emitted.

A capability request does not map to an exact supported target/operation pair. RELC deliberately rejects wildcard or dynamically widened authority.

RELC3001 — native Container execution required but lowering failed

Status: Emitted.

The linked Runtime Image requires a capability that is only safe through the Container Controller, but Route-WASM lowering could not produce an executable artifact for that route.

This is intentionally fail-closed. RELC must not silently fall back to an in-process interpreter when doing so would bypass Container capability mediation.

Action: read the lowering reason included in the diagnostic. Rewrite only unsupported syntax that genuinely blocks native lowering. If a supported construct triggers this code, treat it as a compiler defect and report it.

RELC3101 — Runtime Image identity could not be constructed

Status: Reserved.

RELC failed while canonicalizing or hashing the immutable application state used for Runtime Image identity. Because Runtime Image IDs participate in capability authority, RELC must not invent or partially recover an identity.

RELC4001 — Runtime Image activation rejected

Status: Reserved.

A compiled Runtime Image could not become the active image because activation invariants failed.

Action: preserve both the old and candidate image IDs plus the full activation diagnostic.

RELC9001 — compiler invariant violated

Status: Reserved.

RELC reached a state that should be impossible if earlier compiler passes behaved correctly. This is the canonical "likely RELC bug" code.

Action: capture and report the complete diagnostic/context, RBE build ID, source path/role, Runtime Image/source hashes if available, and the smallest reproducible REL project. Do not treat RELC9001 as a normal syntax mistake.

RELC9002 — deterministic compiler output diverged

Status: Reserved.

Two compiler paths/runs that should produce identical canonical output produced different identities/artifacts.

This is a correctness bug because Runtime Image identity and capability provenance rely on deterministic compilation.

Action: preserve both outputs/hashes and report the bug; avoid deploying the divergent build until understood.

CANONICAL DOCUMENTATION

This page follows the RBE main/doc tree and is refreshed by the Kastrick documentation bridge.

main · 5 min revalidate