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

Validation Rules

The transpiler reports diagnostics with short codes. Full text lives in cambrian-lang docs/LANGUAGE.md and cambrian-transpiler/src/validate/. Below is a public-target highlights list (EVM / Lean / Container).

Families

PrefixConcern
VEntity / route / member / phase / deploy / match
EDomain EVM / Solidity-language compatibility
LLean language / Lean–EVM pair
Ttest / property / fuzz
Iinvariant
Fproject.yaml
WWarnings / lints

Notable V codes

CodeSummary
V27 / V28Route-level vs per-phase where vs var scoping
V29Forbidden actions inside action-level for
V30 / V31extern entity uniqueness / route uniqueness
V32 / V33deploy / from arity (V33 is Domain EVM)
V34 / V35Unknown / mistyped emit
V36More than three indexed event params (EVM)
V38 / V39Unknown / mistyped throw Name
V40 / V41receive / fallback shape and uniqueness (EVM)
V42return(value) without -> T
V43^member outside transform bodies
V45Duplicate deploy collision risk
V46–V53Hex-address ambiguity, match exhaustiveness, if without else, bare stdlib (V49), type bridges (V50), unused let, record cycles, let some patterns

Notable E codes (EVM / Solidity)

CodeSummary
E07 / E17–E21 / E23Solidity lowering limits (iterators, maps, tuples, casts)
E09from → require(msg.sender == …) (warning)
E12evm:: off the EVM domain
E16Unknown namespace / address_of where CREATE2 addresses are not emitted / encode misuse
E22Typed send to unknown entity (declare extern entity)

Notable L codes (Lean)

CodeSummary
L5 / L6Vacuous throw / return expectations
L8Send dest not a static in-program address
L9 / L11Failing self-call without a fail surface
L10 / L12Warnings: sends inside invariant steps; TVM rescue/recover dropped on Lean
L13 / L14Missing crypto lowering / unknown types

Notable T / I / F / W

CodeSummary
T10–T12, T15–T23Property params, assume/bound placement, with vs ctx, instance bindings
T38Boolean expect is not boolean-shaped, mentions result on a route with no return type, or mentions result when that name is already a parameter, let, or member
I1–I6, I8–I16Actions, checks, multi-entity qualification, trace::*
F1 / F3Coverage requires parent enabled; engine name
F4Imported file (in-language import or yaml imports:) declares entity / test / fuzz / invariant
F5yaml imports: or a bare import "…" did not resolve against the first search directory or any library_paths root
W7 / W8Fuzz fallback types; unpinned forall in concrete tests

Many legacy platform constructs produce E-family diagnostics on EVM; prefer writing portable Cambrian that stays within msg:: / sys:: / std:: / evm:: as documented in this book.