EK9 Compiler Error Index
This is the index of all 453 EK9 compiler error codes. Every code opens its own page: what went wrong, how to fix it, compiled examples of the failure and the fix, and the Q&A entries that teach it.
Understanding EK9 Error Codes
EK9 error codes use the format E[PP][NNN] where:
- PP (01-20): Compilation phase number for phase-specific errors
- PP (50): Common errors that can occur in multiple phases
- NNN (001-999): Error number within that category
Examples
A real compile of a source with a typo (coutn for count, from
the command line page): the line above the error names
the phase that found it, and E50001 is a common error - 50 - that several
phases can report.
$ ek9 -E0 -c commandline_errorformat.ek9
ek9: compilation failed (exit 8)
EK9 : FULL_RESOLUTION: Errors in ./commandline_errorformat.ek9
EK9 : Error : E50001: 'coutn' on line 8 position 28: 'coutn': not resolved
See: ek9 -h E50001
EK9 : Compilation failed
Tip: Phase-specific errors (E01xxx-E20xxx) tell you exactly
which compilation phase detected the issue. Use -Cp [PHASE_NAME]
to compile only up to that phase while debugging.
Error Verbosity Levels
EK9 provides six cumulative error verbosity levels (-E0 to -E5).
Each level includes all features from lower levels. See
command line options for full details and examples.
| Flag | Name | Features |
|---|---|---|
-E0 | Minimal | Compact single-line messages (default) |
-E1 | Visual | Rust-style source display with carets |
-E2 | Suggestions | + "Did you mean?" fuzzy matching |
-E3 | Rich | + Full explanations with diagnosis, rationale, and examples |
-E4 | Paradigm | + Concise paradigm summary (key design decisions and built-in capabilities) |
-E5 | Bootstrap | + Complete forAI.json reference dump for AI bootstrapping |
Rich Mode (-E3)
For AI-assisted development or learning, use -E3 to get detailed explanations:
ek9 -E3 -C myfile.ek9
Rich mode includes structured guidance with icons for quick scanning:
- 🔧 TO FIX - actionable remediation steps
- 📝 EXAMPLE - code that causes this error
- COMMON CAUSES - typical reasons for this error
- DISTINCTION - clarification from similar error codes
Note: Rich mode is automatically enabled for EK9 unit tests to help developers and AI assistants understand test failures more quickly.
Common Errors (E50xxx)
Some errors can occur in multiple compilation phases because they represent
fundamental issues that are checked throughout the compilation process.
These errors use the special prefix E50.
Example: E50001: NOT_RESOLVED can occur when:
- Phase 2 (SYMBOL_DEFINITION): Generic type parameter cannot be resolved
- Phase 3 (REFERENCE_CHECKS): Identifier lookup fails
- Phase 4 (EXPLICIT_TYPE_SYMBOL_DEFINITION): Parameterized type argument is not found
When you see an E50xxx error, check the full error message for context about which phase detected it and what type of symbol was being resolved.
Compiler-development codes (E50200-E50390)
The codes E50200 to E50390 are reported for the directives used to develop the
EK9 compiler itself. Other than @Test, the directives are compiler-development tooling and not
designed for mainstream programs: an EK9 program needs none of them. These codes keep their pages, so
ek9 -h E50200 still explains them, but they have no example and the index lists them last.
Compiler developers: docs/testing/EK9_DIRECTIVE_TEST_FILE_PROCESS.md in the compiler repository
describes every directive.
All error codes
453 error codes
Jump to: E01xxx Parsing and excluded constructs | E02xxx Symbol definition | E03xxx Duplication checks | E04xxx Reference checks | E05xxx Explicit type symbol definition | E06xxx Type hierarchy checks | E07xxx Full resolution | E08xxx Pre-IR checks (flow analysis) | E09xxx Plugin resolution | E10xxx IR generation | E11xxx Code quality and IR analysis | E12xxx Security constraints | E50xxx Common errors | E81xxx-E83xxx Test configuration, execution and coverage | Compiler development: the directive codes (E50200-E50390)
| Code | Meaning | Category | Phase |
|---|---|---|---|
| E01010 | invalid reference naming; module scope name missing | E01xxx Parsing and excluded constructs | REFERENCE_CHECKS |
| E01020 | invalid module name | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01030 | Variable/Function/Type duplicated, likely to lead to confusion | E01xxx Parsing and excluded constructs | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E01040 | Type/Function name duplicated | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01050 | are duplicated values (or are too similar, likely to be confusing) | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01060 | is a reserved keyword and cannot be used as an identifier | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01070 | 'break' does not exist in EK9 - use stream pipelines with 'head' or guards | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01071 | 'continue' does not exist in EK9 - use stream pipelines with 'filter' or 'skip' | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01072 | 'return' does not exist in EK9 - declare return values with '<-' and compiler ensures all paths initialize | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01073 | 'null' does not exist in EK9 - use tri-state semantics (unset/set) with '?' operator | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01074 | semicolons are not needed in EK9 - uses indentation-based syntax like Python | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01075 | 'new' does not exist in EK9 - instantiate types with TypeName() directly | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01076 | 'goto' does not exist in EK9 - use structured control flow | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01077 | 'def' does not exist in EK9 - define functions by name directly | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01078 | 'elif' does not exist in EK9 - use 'else if' (two words) | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01079 | 'None' does not exist in EK9 - use tri-state semantics with '?' operator | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01080 | 'self' does not exist in EK9 - use 'this' keyword | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01081 | Python list comprehensions do not exist in EK9 - use stream pipelines | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01082 | multiple '->' arrows not supported - use indented block for multiple parameters | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01083 | multiple '<-' arrows not supported - only one return declaration allowed | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01084 | prefix operator used in suffix position - place BEFORE expression | E01xxx Parsing and excluded constructs | PARSING |
| E01085 | suffix operator used in prefix position - place AFTER expression | E01xxx Parsing and excluded constructs | PARSING |
| E01086 | aggregate member out of order - EK9 requires: properties first, then methods, then operators (a bare 'default operator' last) | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01087 | empty defines block - add at least one type, function, or program definition | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01088 | only one 'defines package' block is permitted per module | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01089 | differs only by case from an existing construct (too similar, likely to be confusing) | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01090 | is the name of a built-in construct; a second meaning for that name is not allowed | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01091 | a type parameter name must not resolve to anything; use a conceptual name such as 'T' | E01xxx Parsing and excluded constructs | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E01092 | '?' tests whether a value is set - an assignment target cannot carry it | E01xxx Parsing and excluded constructs | PARSING |
| E01093 | a backtick String is never closed - it runs to the end of the file | E01xxx Parsing and excluded constructs | PARSING |
| E01094 | 'close' is not a statement in EK9 - closing is generated: declare 'default operator close' (or write 'operator close' for extra work); a local closes through try or its statement | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01095 | '<=?' and '>=?' were removed - on equal values '<?' and '>?' now give the LEFT operand, so write '<?' for '<=?' and '>?' for '>=?' | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E01096 | '??' and '??=' are not EK9 operators - EK9 is designed so that a value is never absent (it may be unset), so there is nothing for them to test; write 'x ?: y' to use 'y' when 'x' is unset, and 'x :=? y' to assign 'y' only when 'x' is unset | E01xxx Parsing and excluded constructs | SYMBOL_DEFINITION |
| E02010 | Property/Field duplicated | E02xxx Symbol definition | FULL_RESOLUTION |
| E02030 | duplicate/ambiguous methods/operations | E02xxx Symbol definition | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E02040 | variable name duplicated, resulting in multiple fields of same name | E02xxx Symbol definition | SYMBOL_DEFINITION |
| E02050 | same trait referenced multiple times | E02xxx Symbol definition | TYPE_HIERARCHY_CHECKS |
| E02060 | duplicated enumerated value in switch 'case' | E02xxx Symbol definition | FULL_RESOLUTION |
| E02070 | PATH is duplicated in terms of structure/naming | E02xxx Symbol definition | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E02080 | use of a delegate and methods of same name | E02xxx Symbol definition | FULL_RESOLUTION |
| E02090 | a listed trait is already a trait of another listed trait or of the super class - it is inherited through that one | E02xxx Symbol definition | TYPE_HIERARCHY_CHECKS |
| E03010 | conflicts with a reference | E03xxx Duplication checks | REFERENCE_CHECKS |
| E03020 | conflicting references | E03xxx Duplication checks | REFERENCE_CHECKS |
| E03030 | reference does not resolve | E03xxx Duplication checks | REFERENCE_CHECKS |
| E04010 | is not a candidate to be constrained | E04xxx Reference checks | TYPE_HIERARCHY_CHECKS |
| E04020 | result must be String, have the $ operator or can be promoted to String | E04xxx Reference checks | FULL_RESOLUTION |
| E04030 | type must be of Exception type | E04xxx Reference checks | FULL_RESOLUTION |
| E04040 | type must be a function or delegate | E04xxx Reference checks | FULL_RESOLUTION |
| E04050 | type must be a simple aggregate/list/dict | E04xxx Reference checks | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E04060 | not an aggregate type | E04xxx Reference checks | FULL_RESOLUTION |
| E04070 | as it is not 'template/generic' in nature | E04xxx Reference checks | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E04080 | Template/Generic requires parameterization | E04xxx Reference checks | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E05020 | a circular type/function hierarchy has been used | E05xxx Explicit type symbol definition | TYPE_HIERARCHY_CHECKS |
| E05030 | not open to be extended | E05xxx Explicit type symbol definition | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E05040 | 'super' for implicit 'Any' base class is not required | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05050 | 'this()' and 'super()' must be the first statement in a constructor | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05060 | 'this()' and 'super()' can only be used in constructors, did you mean 'this.' or 'super.' | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05070 | inappropriate use of 'this' | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05080 | inappropriate use of 'super' | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05090 | can be used with :=:, :~:, +=, -=, /= and *=. But not direct assignment | E05xxx Explicit type symbol definition | SYMBOL_DEFINITION |
| E05100 | cannot override anything | E05xxx Explicit type symbol definition | SYMBOL_DEFINITION |
| E05110 | does not 'override' any method/operator | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05120 | as it overrides method of same name/signature in hierarchy | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05130 | methods with same signature have different access modifiers | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05140 | function signature does not match 'super' function | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05150 | 'pure' in super requires 'pure' for this definition | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05160 | 'super is not 'pure', requires this definition not to be marked as 'pure' | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05170 | dispatcher handler must match the purity of the dispatcher entry point ('pure' on both or on neither) | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05180 | same method name as dispatcher, but marked private in super - won't be called | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05190 | if any constructor is marked pure, all constructors must be pure | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05200 | incompatible genus with local constructor use | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05210 | dispatcher handler type is unreachable from base dispatch type's hierarchy | E05xxx Explicit type symbol definition | PRE_IR_CHECKS |
| E05220 | dispatcher handler return type is not covariant with dispatcher entry point return type | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E05230 | dispatcher has ambiguous handler resolution for reachable type | E05xxx Explicit type symbol definition | PRE_IR_CHECKS |
| E05240 | type is not permitted to extend/implement this sealed type | E05xxx Explicit type symbol definition | PRE_IR_CHECKS |
| E05250 | abstract type cannot be in 'allow only' list — only concrete classes are permitted | E05xxx Explicit type symbol definition | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E05260 | dispatcher on sealed type must have handlers for all permitted types | E05xxx Explicit type symbol definition | PRE_IR_CHECKS |
| E05270 | a class with 'allow only' must be declared 'as open' | E05xxx Explicit type symbol definition | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E05280 | dispatcher handler can never be reached - no concrete type in the program routes to it | E05xxx Explicit type symbol definition | PRE_IR_CHECKS |
| E05290 | parents disagree on 'pure' - one method cannot honour both a pure and a non-pure contract | E05xxx Explicit type symbol definition | FULL_RESOLUTION |
| E06010 | type/function is generic but no parameters were supplied | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06020 | type/function is generic, but incorrect number of parameters supplied | E06xxx Type hierarchy checks | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E06021 | a generic function infers its type arguments only when its parameters are exactly its type parameters, in order; parameterise it explicitly | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06030 | type is generic, but for type inference to work; the number of generic and constructor parameters must be the same | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06040 | a generic type requires 2 constructors, default and inferred type | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06050 | a generic type requires correct constructor argument to match parametric types (and order) | E06xxx Type hierarchy checks | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E06060 | a generic type does not support private or protected constructors | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06070 | type inference is not supported within generic/template type/functions | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06080 | the constraining type with a generic/template cannot be a function | E06xxx Type hierarchy checks | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E06090 | a named dynamic class cannot be used within a generic type/function | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06100 | implementation must be provided for generic function | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06110 | use of a constructor in a generic/template that uses a function is not supported | E06xxx Type hierarchy checks | POST_RESOLUTION_CHECKS |
| E06120 | functions can be used in generics/templates but only '?' is supported | E06xxx Type hierarchy checks | POST_RESOLUTION_CHECKS |
| E06130 | constraining type constructors must exist on parameterizing type | E06xxx Type hierarchy checks | POST_RESOLUTION_CHECKS |
| E06131 | an alias or constrained type is made from a copy of its base value, so the base needs a public copy constructor - one parameter of exactly its own type | E06xxx Type hierarchy checks | TYPE_HIERARCHY_CHECKS |
| E06132 | a collection cannot carry a type invariant: its only usable constraints are whole-container predicates ('contains'), which are 'require' preconditions, and a mutating operator would re-validate on every '+=' - so a mutation could break it; constrain the ELEMENT type instead ('List of MyConstrainedElement'), which holds for every element however the collection is assembled | E06xxx Type hierarchy checks | TYPE_HIERARCHY_CHECKS |
| E06140 | ambiguous match | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06150 | conflicting methods to be resolved | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06160 | not an immediate trait of this context | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06170 | trait method access not supported here | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06180 | not accessible from this context | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06190 | EK9 Result must be used with two different types | E06xxx Type hierarchy checks | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E06200 | use of parenthesis '( )' not allowed in this context | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06210 | parenthesis '( )' required in this context | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06220 | choose either empty parenthesis '( )' with values or a type definition | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06230 | variables being captured must be named when not just using identifiers | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06240 | either all variable must be named or none, when passing parameters | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06250 | the order and naming of arguments must match parameters | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06260 | invalid package property | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06261 | a package must have a 'description' | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06262 | a package must have a 'version' | E06xxx Type hierarchy checks | SYMBOL_DEFINITION |
| E06270 | parameter mismatch | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06280 | operator declared with too many parameters | E06xxx Type hierarchy checks | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E06290 | operator declared with too few parameters | E06xxx Type hierarchy checks | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E06300 | require one argument only | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06310 | function must have no arguments | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06320 | invalid number of parameters | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E06330 | argument types are not compatible with each other | E06xxx Type hierarchy checks | FULL_RESOLUTION |
| E07010 | remove 'override' with use of 'private' access modifier | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07020 | 'override' of a method/operator and 'abstract' (no implementation) is not logical | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07030 | 'default' of operators on a trait is not supported | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07040 | 'by' variable is not supported on a trait only on a class | E07xxx Full resolution | FULL_RESOLUTION |
| E07050 | 'abstract' modifier on a constructor is not logical | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07060 | 'override' is not required on a constructor | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07070 | traits do not support constructor methods | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07075 | traits do not support properties/fields | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07080 | 'default' constructor with parameters is not supported | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07090 | 'default' modifier is only valid for constructors, not regular methods | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07100 | defined as default/abstract but an implementation has been provided | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07110 | implementation not provided so must be declared as abstract | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07120 | base level implementation must be provided for dispatcher method | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07130 | not declared abstract but still has abstract methods/operators | E07xxx Full resolution | FULL_RESOLUTION |
| E07140 | all abstract methods/operators must be implemented | E07xxx Full resolution | FULL_RESOLUTION |
| E07150 | text method missing for language variant | E07xxx Full resolution | FULL_RESOLUTION |
| E07155 | text type already defined for this locale | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07156 | 'locale' is reserved in a text construct - it names the auto-provided Locale field | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07160 | implementation must be provided | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07170 | a developer coded constructor(s) are required where uninitialised properties are used | E07xxx Full resolution | PRE_IR_CHECKS |
| E07175 | default constructor must be 'private' when uninitialised properties exist | E07xxx Full resolution | PRE_IR_CHECKS |
| E07176 | a constructor cannot rely on the implicit super() - the super has no accessible no-argument constructor (it is 'private', or there is none) - call or provide an accessible initialising super constructor | E07xxx Full resolution | FULL_RESOLUTION |
| E07177 | the super type has no accessible no-argument constructor (it is 'private', or there is none), so a default constructor cannot be generated here - you must define a constructor for this sub-type that calls an accessible super(...) | E07xxx Full resolution | FULL_RESOLUTION |
| E07180 | 'default' of operators requires this type to have appropriate operator | E07xxx Full resolution | FULL_RESOLUTION |
| E07181 | comparisons with the type itself are generated from its sameness ('<=>' or '=='), never written or requested | E07xxx Full resolution | FULL_RESOLUTION |
| E07182 | sameness ('<=>' or '==') written by hand on an abstract base or a trait is hierarchy-wide sameness; a subtype inherits it and cannot redefine it | E07xxx Full resolution | FULL_RESOLUTION |
| E07183 | sameness ('<=>' or '==') must have a body where it is declared; it cannot be abstract | E07xxx Full resolution | FULL_RESOLUTION |
| E07184 | '#?' goes with the type's sameness: defaulted with a defaulted one, hand-written with a hand-written one | E07xxx Full resolution | FULL_RESOLUTION |
| E07185 | an abstract '$', '$$' or '#?' is only for a type with no fields (counting inherited ones): a sub-type's generated operator covers only its own fields, so these fields would be left out - give the operator a body, or use 'default operator' for it | E07xxx Full resolution | FULL_RESOLUTION |
| E07186 | a subtype of an ordered type (its super has '<=>') must stay ordered: it declares '<=>' (by hand or 'default operator <=>'), not '==' alone, and a bare 'default operator' needs every one of its fields to have a '<=>' | E07xxx Full resolution | FULL_RESOLUTION |
| E07187 | '<?' and '>?' select by '<=>', which is unset for two values of different run-time types: they cannot be used on an open or abstract class, record or component, or a trait, unless its sameness is hierarchy-wide - make the type closed, write '<=>' by hand on its abstract base or trait, or compare with '<=>' and handle unset yourself | E07xxx Full resolution | FULL_RESOLUTION |
| E07188 | a '<=>' must order every two set values of its type: it cannot return an unset Integer, nor build its result on a '<=>' (a field's, a super's, a function's) that answers unset for two set values | E07xxx Full resolution | PRE_IR_CHECKS |
| E07190 | 'default' of operators requires super to have appropriate operator | E07xxx Full resolution | FULL_RESOLUTION |
| E07200 | 'default' of operators requires property/field to have appropriate operator | E07xxx Full resolution | FULL_RESOLUTION |
| E07210 | 'default' of operators can only support '?' operator with function delegate fields | E07xxx Full resolution | FULL_RESOLUTION |
| E07220 | 'default' is not supported on this operator | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07230 | 'default' with an operator must not have signature or body | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07235 | aggregate with properties/fields requires 'override operator ?' (custom) or 'default operator ?' (auto-generated) to define set/unset semantics | E07xxx Full resolution | FULL_RESOLUTION |
| E07236 | dynamic class with captured variables requires 'default operator ?' to define set/unset semantics for captured fields | E07xxx Full resolution | FULL_RESOLUTION |
| E07237 | a record exists only to carry data, but this concrete record has no fields (counting inherited ones) - give it a field, make it a class or component if it carries behaviour, or mark it 'as abstract' if it is the root of a record hierarchy | E07xxx Full resolution | FULL_RESOLUTION |
| E07238 | a type that adds fields, concrete or abstract, must declare its own '$', '$$' and ':=:', and its own sameness ('<=>' or '==', with '#?'), where it would inherit one: the inherited operator was written for the super's fields and cannot know these - use 'default operator' for each (or the bare 'default operator') or write one | E07xxx Full resolution | FULL_RESOLUTION |
| E07240 | non web service methods cannot be marked with the 'protected' access modifier | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07250 | component methods cannot be marked with the 'protected' access modifier | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07260 | class methods can only be marked with the 'protected' access modifier in classes that are 'open' | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07270 | trait methods cannot be marked with an access modifier, they are always public | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07280 | access modifier is not needed here - methods are 'public' by default | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07290 | only constructors and operators methods are supported on records | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07300 | declaration supporting 'uninitialised' is not needed | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07310 | 'cases' should cover all enumerated values in 'switch' | E07xxx Full resolution | FULL_RESOLUTION |
| E07320 | 'default' is required in this 'switch' statement | E07xxx Full resolution | FULL_RESOLUTION |
| E07330 | 'default' is required in this 'switch' expression | E07xxx Full resolution | FULL_RESOLUTION |
| E07340 | without a control, failed to find subject of flow | E07xxx Full resolution | FULL_RESOLUTION |
| E07360 | application selection not allowed in this context | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07370 | all paths lead to an Exception | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07380 | return not possible, as instructions only result in an Exception | E07xxx Full resolution | FULL_RESOLUTION |
| E07390 | constant Boolean literal in expression is pointless | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07395 | 'Void' has no accessible methods or operators | E07xxx Full resolution | FULL_RESOLUTION |
| E07400 | returning variable and type missing | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07405 | returning block required for assignment to 'lhs' when used in expression | E07xxx Full resolution | FULL_RESOLUTION |
| E07406 | returning block is not required as there is no 'lhs' variable to assign it to | E07xxx Full resolution | FULL_RESOLUTION |
| E07410 | returning type must be same as the construct type | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07420 | returning type must not be same for promotion | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07430 | return not required/supported in this context | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07440 | return types are incompatible (covariance required) | E07xxx Full resolution | FULL_RESOLUTION |
| E07450 | function must have no parameters | E07xxx Full resolution | FULL_RESOLUTION |
| E07460 | function must have a single parameter | E07xxx Full resolution | FULL_RESOLUTION |
| E07470 | function must have a two parameters | E07xxx Full resolution | FULL_RESOLUTION |
| E07480 | is not a function delegate | E07xxx Full resolution | FULL_RESOLUTION |
| E07490 | function must return a value | E07xxx Full resolution | FULL_RESOLUTION |
| E07500 | operator must be declared pure | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07510 | operator must not be declared pure | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07520 | must return a Boolean | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07530 | only compatible with Boolean type | E07xxx Full resolution | FULL_RESOLUTION |
| E07540 | is not compatible with a Boolean type | E07xxx Full resolution | FULL_RESOLUTION |
| E07550 | must return an Integer | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07560 | must be an Integer with a value greater than zero | E07xxx Full resolution | FULL_RESOLUTION |
| E07570 | must return a String | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07580 | must return a JSON | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07590 | if a program returns a value it can only be an Integer | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07600 | program arguments are limited to a finite range of EK9 built in types | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07610 | inappropriate combination of program arguments | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07620 | operator not defined | E07xxx Full resolution | FULL_RESOLUTION |
| E07621 | the type argument's operator does not return the type the generic uses it as | E07xxx Full resolution | POST_RESOLUTION_CHECKS |
| E07630 | operator cannot be used on an Enumeration in this way | E07xxx Full resolution | FULL_RESOLUTION |
| E07640 | use <> for the not equal operator | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07650 | use ~ for the not operator | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07660 | operator name cannot be used as a method | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07670 | operator not supported, only +=, -=, :^:, :~: and ? are supported | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07671 | a service URI needs 'for' before it and an HTTP verb needs 'as' before it | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07680 | URI with place holder variable not supported in this context | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07690 | HTTP access verb not supported in this context | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07700 | HTTP PATH parameter is invalid | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07710 | additional name needed for QUERY, HEADER or PATH parameters | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07720 | additional name only required for QUERY, HEADER or PATH parameters | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07730 | HTTP PATH variable count and PATH parameter count mismatch | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07731 | each HTTP PATH variable must be bound by exactly one PATH parameter | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07740 | implementation not provided, but services cannot be abstract | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07750 | Web Service return type must be compatible with HTTPResponse | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07760 | only Integer, String, Date, Time, DateTime, Milliseconds, Duration, HTTPRequest and HTTPContext supported | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07770 | Web Service parameter type must be HTTPRequest for REQUEST | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07780 | Web Service type HTTPRequest can only be used by itself | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07790 | Web Service parameter type cannot be HTTPRequest | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07791 | Web Service parameter type must be HTTPContext for CONTEXT | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07792 | Web Service type HTTPContext can only be used by itself | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07793 | Web Service parameter type cannot be HTTPContext | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07800 | Web Service must have return value and it must be compatible with HTTPResponse | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07810 | Dispatch only supported in classes | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07820 | only one method can be marked as a dispatcher entry point | E07xxx Full resolution | FULL_RESOLUTION |
| E07825 | a trait cannot supply a dispatcher handler - move the handler into the class | E07xxx Full resolution | FULL_RESOLUTION |
| E07830 | unable to find a '|' pipe operator for type | E07xxx Full resolution | FULL_RESOLUTION |
| E07835 | 'collect as T' needs T to have a no-argument constructor that can be called where the pipeline is written | E07xxx Full resolution | FULL_RESOLUTION |
| E07840 | it does not have compatible iterator() - hasNext()/next() methods | E07xxx Full resolution | FULL_RESOLUTION |
| E07845 | a for-range needs an ordered, steppable type - this type has no ordering and no step | E07xxx Full resolution | FULL_RESOLUTION |
| E07850 | only a single Exception is supported | E07xxx Full resolution | FULL_RESOLUTION |
| E07860 | require a function or function delegate | E07xxx Full resolution | FULL_RESOLUTION |
| E07870 | require an Integer value or function/function delegate | E07xxx Full resolution | FULL_RESOLUTION |
| E07880 | a function or function delegate is not required here | E07xxx Full resolution | FULL_RESOLUTION |
| E07890 | not mutable | E07xxx Full resolution | FULL_RESOLUTION |
| E07895 | cannot assign to a method-call result - not an assignable target; only mutating operators (+=, -=, :~:, :^:, :=:) apply to a call result | E07xxx Full resolution | FULL_RESOLUTION |
| E07900 | Invalid value | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07901 | a double-quoted String is never interpolated - '${' needs a backtick String | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07902 | a plain "..." String literal is required here - a backtick String is not a compile-time literal | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07903 | a unicode escape needs exactly four hex digits (0-9, a-f, A-F) - write \\u for a backslash and a 'u' | E07xxx Full resolution | SYMBOL_DEFINITION |
| E07910 | sanitized parameters must be String type | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07920 | sanitized modifier only valid on incoming function/method parameters | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07930 | cannot assign from sanitized parameter - creates hidden copy semantics | E07xxx Full resolution | FULL_RESOLUTION |
| E07940 | 'sanitized' cannot be dropped - the declaration this one stands in for (an overridden method or function, a dispatcher entry point, or another locale of the text) marks this parameter 'sanitized'; it may be added, never removed | E07xxx Full resolution | FULL_RESOLUTION |
| E07941 | 'sanitized' cannot be used on captured variables - sanitize at the original entry point | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07942 | 'sanitized' is specified in the function/method definition, not at call sites | E07xxx Full resolution | FULL_RESOLUTION |
| E07943 | 'sanitized' cannot be used on variable declarations - sanitize at the function/method entry point | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07944 | 'sanitized' cannot be used on an extern parameter - the compiler does not generate an extern body, so nothing would clean it; the external implementation must clean its input itself | E07xxx Full resolution | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E07950 | '++' and '--' are statement-only operators in EK9 - they cannot be used in expressions | E07xxx Full resolution | FULL_RESOLUTION |
| E08010 | used before definition | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08020 | might be used before being initialised | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08030 | has not been checked before access | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08040 | Reassignment/mutation within possible 'safe method access' scope is not allowed | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08050 | return value is not always initialised | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08055 | return value is initialised before a 'require' precondition; declare it 'as Type?' and assign it after the require(s) | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08056 | a guard can skip the stream, but a stream expression has no way to declare the value produced on the skip path; use the statement form with your own accumulator | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08060 | is/may not be initialised before use | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08061 | the object is used before it is fully constructed - set every property before calling its methods | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08070 | never initialised | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08080 | self assignment | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08081 | comparing a value to itself is always constant and indicates a logic error | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08082 | comparison between literal values has a predetermined result | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08083 | arithmetic expression always produces a constant result | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08084 | comparing a Boolean with true/false is redundant | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08085 | logical expression is always true or always false | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08086 | condition is always true based on data flow analysis | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08087 | condition is always false based on data flow analysis | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08088 | isSet check is always true based on data flow analysis | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08089 | isSet check is always false based on data flow analysis | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08090 | is not referenced anywhere, or not referenced after assignment | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08091 | parameter is declared but never used in the function/method body | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08092 | empty check is always true based on data flow analysis | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08093 | empty check is always false based on data flow analysis | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08094 | coalescing expression has a predetermined result - both operands are literals, or a literal on the left of '?:' is always set and so always chosen | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08095 | assign-if-unset ':=?' can never apply because the target is always set - the right side is never evaluated | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08096 | an operator that keeps an unset value unset can never give it a value | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08097 | assign-if-unset ':=?' always applies because the target is always unset here - it is a plain assignment; use ':=' (or declare the variable with the value) | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08100 | reassignment not allowed when scope is marked as 'pure' (':=?' is supported) | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08110 | reassignment not allowed of an incoming argument/parameter | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08120 | mutating variables is not allowed when scope is marked as 'pure' | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08130 | is not marked 'pure', but call is made in a scope that is marked as 'pure' | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08140 | component injection not allowed when scope is marked as 'pure' | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08150 | dependency injection of a non-abstract component is not allowed, use an abstract base component | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08160 | dependency injection is not allowed | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08170 | an injected component is never assigned, not even with ':=?' - for a fallback, assign to a new variable ('chosen <- supplied' then 'chosen :=? injected') | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08180 | not marked for injection nor initialised | E08xxx Pre-IR checks (flow analysis) | SYMBOL_DEFINITION |
| E08190 | circular dependency detected in component injection chain | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08200 | component used before registration in application block | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08210 | program uses injection but application has no registration for the required component type | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08220 | program uses injection but has no linked application | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08230 | duplicate registration of the same abstract component type in application | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08240 | mutation operators are not applicable to function types, only '?' operator is supported | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08250 | 'this' cannot be passed as an argument to, or stored into, another object inside a constructor body | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08251 | mutation of shared state must happen inside MutexLock.enter(...) — wrap the write in a MutexKey body | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08252 | nested enter() on a different lock identity — potential deadlock from lock-order cycle | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08253 | same lock acquired across a thread boundary — inner acquire blocks waiting for outer holder; MutexLock reentrancy does not cross threads | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08254 | MutexLock cannot appear in a generic type parameter — move the lock to a class or component field | E08xxx Pre-IR checks (flow analysis) | SYMBOL_DEFINITION |
| E08255 | two locks of the same type are nested but no consistent acquisition order can be statically proven — under some interleaving this will deadlock; protect the state under ONE lock over an owning record (and if the state is durable or shared across instances, a mutex cannot protect it — that is a transaction concern) | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08256 | MutexLock construction is only allowed as a field initialiser on a class or component | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08257 | MutexLock(...) argument must be a fresh value — a literal or a constructor call (MutexLock(List() of Item) builds an empty payload; MutexLock(String(existing)) copies, but only for a type with a copy constructor - List and Dict have none); not a reference to existing state | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08258 | data inside a MutexLock must be purely contained — assigning 'lockedItem' creates an external reference; use ':=:' (copy), ':~:' (merge), or ':^:' (replace) instead | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08260 | compile-time constant value violates the type's constraint — this would Panic at runtime | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08261 | no value of the base type can satisfy this constraint — every construction would Panic | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08262 | every suffixed value in a constraint must carry the SAME suffix — comparing across currencies or units is never satisfied | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08263 | construction can never complete - every path through it constructs the same type again, so it overflows the stack at run time; construct the recursive part only under a condition, or hold it in an 'Optional of Type' or a 'List of Type', which start empty | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08264 | this constructor leaves properties without a value - it can only be used through this() from a constructor that sets them; construct through a constructor that sets every property | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08265 | a constraint's literal must match the operator's parameter type exactly — a constraint is never converted, so write the literal in that type or add the operator taking this one | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08266 | an injected component is always set, so checking that it is set is always true - use the injected value directly; for a fallback, use a new variable ('chosen <- supplied' then 'chosen :=? injected') | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08269 | a coalescing operator ('?:', '<?', '>?') mixed with a different binary operator must be parenthesised - it binds tighter than arithmetic, comparison and logic, so write '(a + b) ?: c' or 'a + (b ?: c)' to say which is meant | E08xxx Pre-IR checks (flow analysis) | SYMBOL_DEFINITION |
| E08270 | a '<-' guard's variable is always unset in the later 'else if' and 'else' blocks of its 'if' - they run because it was unset - so this read finds nothing; use it inside the guarded block, or assign it a new value first | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08271 | a 'register' statement constructs what it registers - call a constructor of the component or service (and of each aspect), not a function, method or delegate | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08272 | a for-range creates new values of its declared type - its counter as T(start) and each loop variable as T(counter) - so the range type must be concrete and have a public copy constructor T(T) that produces an independent value | E08xxx Pre-IR checks (flow analysis) | FULL_RESOLUTION |
| E08273 | word 'not' is never an operand of another operator unless parenthesised, except 'and', 'xor' and 'or' - it binds below the comparisons, so write 'a == (not b)' or '$ (not b)', or 'not (a == b)' if that is meant; 'a and not b' needs none | E08xxx Pre-IR checks (flow analysis) | SYMBOL_DEFINITION |
| E08274 | a negation applied to a negation - word 'not', '~' or unary '-' in any mix, parenthesised or not ('not not b', 'not (not b)', '~~b', '- -x', '-(-x)') - cancels out: write the operand, or a single negation if one was meant | E08xxx Pre-IR checks (flow analysis) | SYMBOL_DEFINITION |
| E08275 | the text given to 'Networking().urlOf()' is known when the program is compiled - an endpoint in the source is configuration hard-coded: read it with 'Networking().urlFromEnv(name)', and derive other URLs from it with 'withPath', 'withPathSegment', 'withQueryParam' or 'resolve'; 'urlOf' is for URL text that arrives while the program runs | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08276 | a for-range whose start, end and step are known when the program is compiled can never step from its start to its end - its step is zero, moves away from the end, or takes a Time range across midnight; give 'by' a step that moves from the start toward the end (negative to count down), or leave 'by' out | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08277 | the same variable is read by 'cat' and appended to ('>>' or 'tee') in one stream statement, so the read never reaches the end - input is output; read a copy instead, use '>' to replace it, or collect into a new variable | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E08278 | cannot be the target of '>' because '>' replaces the target with a fresh value and this type cannot make one (it must be concrete, have an accessible constructor with no arguments and have a ':=:' operator); use '>>' to add to it instead, or give the type those | E08xxx Pre-IR checks (flow analysis) | PRE_IR_CHECKS |
| E09010 | inappropriate use in this context | E09xxx Plugin resolution | FULL_RESOLUTION |
| E10010 | 'void' return type cannot be used with an assignment | E10xxx IR generation | FULL_RESOLUTION |
| E10011 | 'Void' is the absence of a value - it cannot be the type of a variable, property, parameter or type argument | E10xxx IR generation | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E10020 | Void cannot be used in stream pipelines | E10xxx IR generation | FULL_RESOLUTION |
| E10030 | use of a constructor directly on an abstract type is not permitted. | E10xxx IR generation | POST_RESOLUTION_CHECKS |
| E10031 | 'T()' in the generic type needs a public no-argument constructor on the type used to parameterise it | E10xxx IR generation | POST_RESOLUTION_CHECKS |
| E10032 | a constructor the generic uses on T from a pure scope ('T()', or the copy constructor 'T(T)' a for-range uses) must be pure on the type used to parameterise it | E10xxx IR generation | POST_RESOLUTION_CHECKS |
| E10040 | 'group' requires a preceding 'sort' with no type-changing operations between them | E10xxx IR generation | FULL_RESOLUTION |
| E10050 | this operation needs a bounded source; an unbounded source (Stdin, UDP, TCPConnection) or an infinite one (an iterator whose hasNext() always returns true) must be bounded first with 'head N' | E10xxx IR generation | FULL_RESOLUTION |
| E11010 | excessive complexity - refactor | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11011 | excessive nesting - extract function | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11012 | too many statements - extract functions | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11013 | excessive expression complexity - extract intermediate variables | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11014 | low cohesion - class has disconnected method groups, consider splitting | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11015 | excessive efferent coupling - depends on too many types | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11016 | excessive module coupling - references too many external modules | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11017 | low module cohesion - constructs share little commonality | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11018 | unused captured variable in dynamic function or class | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11019 | excessive inheritance depth - consider delegation with 'by' | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11020 | combined complexity and size exceeds maintainability threshold | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11021 | cognitive complexity exceeds limit - extract functions | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11022 | class has component characteristics - use 'defines component' | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11023 | manual delegation detected - use 'by' keyword | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11024 | class mixes data and service coordination - split into class + component | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11025 | class has too many service and data fields - split into component + data class | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11026 | references not in alphabetical order - reorder for consistency | E11xxx Code quality and IR analysis | REFERENCE_CHECKS |
| E11027 | too many constructs in module - split into focused modules | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11030 | confusingly similar variable names - rename for clarity | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11031 | non-descriptive variable name - use meaningful identifier | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11032 | variable name shadows operator keyword - use a more specific name | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11040 | too many injected fields - use a facade component to group dependencies | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11041 | multiple methods use the same injected type - promote to a facade component | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11042 | application has too many registrations - split into focused applications | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11043 | method uses too many distinct injected types - extract to a dedicated component | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11044 | override method body is identical to super - remove the override | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11050 | operator returns a value but result is discarded - assign to variable or use in expression | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11051 | pure method/function returns a value but result is discarded - a pure call with no side effects achieves nothing | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11052 | method returns Result or Optional but result is discarded - must always be checked | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11053 | data clump detected - extract a record to group repeated parameters | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11054 | method chain traverses too many types - extract a function or use a pipeline | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11055 | constructor result is discarded - assign to a variable; if you need side effects, use a function | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11061 | call passes 2+ Boolean literals positionally - use named arguments for clarity | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11062 | call has 4+ positional arguments - use named arguments for clarity | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11064 | literal in comparison/range - give it a meaningful name | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11065 | literal appears multiple times - extract to a named constant | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11066 | constants should be consolidated into a single file | E11xxx Code quality and IR analysis | DUPLICATION_CHECK |
| E11067 | module has many constants - consider a dedicated constants file | E11xxx Code quality and IR analysis | DUPLICATION_CHECK |
| E11068 | string concatenation with 3+ parts - use string interpolation instead | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11069 | nested call chain exceeds one level - extract intermediate variable for readability | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11070 | nested call in throw - extract intermediate variable for the exception | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11080 | hardcoded cloud provider credential detected | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11081 | hardcoded platform token detected | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11082 | hardcoded private key material detected | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11083 | hardcoded database credential detected | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11084 | hardcoded JWT token detected | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11086 | hardcoded API key detected | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E11090 | reveal() on Sensitive is only permitted in a method of a class or trait that is Privileged: it has the Privileged trait, a trait that has it, or a super class that has it | E11xxx Code quality and IR analysis | PRE_IR_CHECKS |
| E12010 | type requires declared package capability | E12xxx Security constraints | PRE_IR_CHECKS |
| E12020 | application registers services but program has no HTTP server | E12xxx Security constraints | PRE_IR_CHECKS |
| E12021 | program creates HTTP but application has no service registrations | E12xxx Security constraints | PRE_IR_CHECKS |
| E12022 | program creates HTTP without 'with application of' linkage | E12xxx Security constraints | PRE_IR_CHECKS |
| E12023 | program creates more than one HTTP instance | E12xxx Security constraints | PRE_IR_CHECKS |
| E12050 | service requires 'open' or 'constrain by' security posture declaration | E12xxx Security constraints | SYMBOL_DEFINITION |
| E12060 | constraint reference could not be resolved to a type | E12xxx Security constraints | PRE_IR_CHECKS |
| E12062 | constraint reference must extend SecurityGate or CORSPolicy | E12xxx Security constraints | PRE_IR_CHECKS |
| E12064 | both constraint references extend the same base type | E12xxx Security constraints | PRE_IR_CHECKS |
| E50001 | not resolved | E50xxx Common errors | FULL_RESOLUTION |
| E50010 | type not resolved | E50xxx Common errors | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E50020 | incompatible genus | E50xxx Common errors | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E50030 | types are not compatible with each other | E50xxx Common errors | FULL_RESOLUTION |
| E50040 | cannot be abstract | E50xxx Common errors | SYMBOL_DEFINITION |
| E50050 | Variable/Constant duplicated | E50xxx Common errors | SYMBOL_DEFINITION |
| E50060 | method/function not resolved | E50xxx Common errors | FULL_RESOLUTION |
| E50070 | cannot use an abstract function in this manner | E50xxx Common errors | FULL_RESOLUTION |
| E50080 | cannot make a call on an abstract function/type directly | E50xxx Common errors | FULL_RESOLUTION |
| E50090 | incompatible genus in parameter(s) | E50xxx Common errors | FULL_RESOLUTION |
| E50100 | incompatible category | E50xxx Common errors | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E81001 | missing expected output file for test case | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81002 | orphan expected output file (no matching commandline args) | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81003 | argument count mismatch between program and file | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81004 | arguments provided for no-parameter program | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81005 | program requires arguments but no commandline files found | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81006 | cannot convert argument to required parameter type | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81007 | @Test program has no assertions and no expected output files | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81008 | duplicate test case IDs in same directory | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81009 | invalid file name pattern (typo detected) | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81010 | invalid placeholder syntax in expected output | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81011 | assertion is not reachable from any @Test program | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81012 | assertion is reachable from non-test program | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81013 | malformed line in envvars file (no '=' separator) | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81014 | orphan envvars file (no matching commandline args) | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81015 | test construct only allowed in dev source files | E81xxx-E83xxx Test configuration, execution and coverage | FULL_RESOLUTION |
| E81016 | orphan stdin file (no matching commandline args) | E81xxx-E83xxx Test configuration, execution and coverage | |
| E81056 | a closeable value held in a named local must be a try-with-resources resource | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81057 | a callable whose return type is closeable must return a NEW instance; to lend a held resource, return a non-closeable view type (e.g. StringInput) | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81059 | a closeable value may only be stored where the declared type is closeable | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81060 | the close operator is never called as a method, 'super.close()' included - make the value a try-with-resources resource; a type's own properties and its super class are closed by its generated close | E81xxx-E83xxx Test configuration, execution and coverage | FULL_RESOLUTION |
| E81061 | a closeable type is never a type argument - hold it as a property of a type you own (closed in its 'operator close'), acquire it in a try, or lend it as a parameter | E81xxx-E83xxx Test configuration, execution and coverage | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E81062 | a closeable value enters a property or a try resource only when it is NEW (a constructor call, or a call that returns a new closeable) - anything else already has an owner that closes it | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81063 | a closeable slot is assigned once - a property in its own constructor or initialiser, a returning variable once on each path (declared unset), a try resource only by its try; re-pointing it drops the resource it held | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81064 | closeable properties are closed in reverse declaration order, so a constructor must acquire them in declaration order | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81065 | 'default operator :=:' cannot copy a closeable property - the copy would share the resource and both objects would close it | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81066 | a trait's 'operator close' is abstract (no body) - a trait holds no properties, so it has nothing to close; the class that holds the resource closes it in its own 'operator close' | E81xxx-E83xxx Test configuration, execution and coverage | EXPLICIT_TYPE_SYMBOL_DEFINITION |
| E81067 | if you hold it, you close it - a type with a closeable property must declare its own 'operator close' ('default operator close' or one you write); an inherited close cannot see this type's property | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81068 | the 'operator close' of an open or abstract type can never call a method a subtype may override, nor hand out 'this' - a subtype's own properties are closed before this body runs | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81069 | a dynamic function has no 'operator close', so it can never close a NEW closeable it captures - capture one the enclosing scope owns (a try resource), or capture it in a dynamic class that closes it | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81070 | 'default operator close' with nothing to close - no closeable property and no super class close - would only make the type closeable, forcing every caller into a 'try'; remove it | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81071 | a closeable made but never named in the arguments of 'super(...)' or 'this(...)' can never be closed - nothing can surround a construction call; make the value in a function and pass the result ('super(freshDescription())'), or take the closeable as a constructor parameter | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81072 | a closeable made but never named is kept by what it is given to, so the statement cannot close it and nothing else would - if the callee only uses it, name it as a try resource ('try -> res <- Res()') and pass 'res'; if it keeps it, keep it inside the try, pass a value taken from it, or make the holder a closeable that owns it | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81073 | a stream's element type is never closeable - the stages would make resources nothing can close; name each one as a try resource in a 'for' loop ('try -> res <- makeRes(label)') and use it there | E81xxx-E83xxx Test configuration, execution and coverage | FULL_RESOLUTION |
| E81074 | an Exception is a value carried to a handler, not a resource - it has no 'operator close', declared, defaulted or inherited; put the resource in a type of its own and close it there | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E81075 | a try resource is closed when its try ends, so it must not be given to a call that keeps it - keep the resource inside the try, pass a value taken from it, or make the holder a closeable that owns it | E81xxx-E83xxx Test configuration, execution and coverage | PRE_IR_CHECKS |
| E82001 | test execution timeout | E81xxx-E83xxx Test configuration, execution and coverage | |
| E83001 | code coverage below threshold | E81xxx-E83xxx Test configuration, execution and coverage | |
| E50200 | invalid directive | Compiler development: the directive codes (E50200-E50390) | |
| E50210 | but the directive is missing | Compiler development: the directive codes (E50200-E50390) | |
| E50220 | directive error classification incorrect | Compiler development: the directive codes (E50200-E50390) | |
| E50230 | but the error is missing | Compiler development: the directive codes (E50200-E50390) | |
| E50240 | complexity mismatch | Compiler development: the directive codes (E50200-E50390) | |
| E50250 | symbol not resolved | Compiler development: the directive codes (E50200-E50390) | |
| E50260 | symbol hierarchy not in place | Compiler development: the directive codes (E50200-E50390) | |
| E50270 | symbol category mismatched | Compiler development: the directive codes (E50200-E50390) | |
| E50280 | symbol genus mismatched | Compiler development: the directive codes (E50200-E50390) | |
| E50290 | genus does not exist | Compiler development: the directive codes (E50200-E50390) | |
| E50300 | unexpected symbol resolved | Compiler development: the directive codes (E50200-E50390) | |
| E50310 | count does not match | Compiler development: the directive codes (E50200-E50390) | |
| E50320 | probe output mismatch | Compiler development: the directive codes (E50200-E50390) | |
| E50330 | expected squirrelled data key not set on symbol | Compiler development: the directive codes (E50200-E50390) | |
| E50340 | unknown squirrelled data key (must be a CommonValues enum entry) | Compiler development: the directive codes (E50200-E50390) | |
| E50350 | input-variety mismatch | Compiler development: the directive codes (E50200-E50390) | |
| E50360 | obligations mismatch | Compiler development: the directive codes (E50200-E50390) | |
| E50370 | verification mismatch | Compiler development: the directive codes (E50200-E50390) | |
| E50380 | counterexample mismatch | Compiler development: the directive codes (E50200-E50390) | |
| E50390 | data-touch verdict mismatch | Compiler development: the directive codes (E50200-E50390) |