Error Reference
Compiler Errors
Compiler errors are printed to stderr and cause a non-zero exit code. All error codes begin with VERR_.
VERR_FIELD_NOT_DECLARED
A field referenced in an expression does not exist in the entity’s state: block.
VERR_FIELD_NOT_DECLARED: field 'follwing_count' not declared in state 'user'Fix: Check for typos in field names. Ensure the field is declared in the state: block.
VERR_NON_DETERMINISTIC_EXPRESSION
An expression uses a non-deterministic function (now(), random(), uuid()).
VERR_NON_DETERMINISTIC_EXPRESSION: 'now()' is forbidden in expressions — use event.ts for timestampsFix: Replace now() with event.ts. For entity IDs, pass the ID as an intent input field rather than generating it inside the DSL.
VERR_SPEL_FORBIDDEN_FUNCTION
A SpEL expression calls a disallowed method or accesses external I/O.
VERR_SPEL_FORBIDDEN_FUNCTION: method 'System.currentTimeMillis' is not permittedFix: Use only permitted expression operators and scopes. See Expressions.
VERR_INTENT_EVENT_CONFLICT
An action attempts to emit an event that is bound to a different entity type than the action’s state.
VERR_INTENT_EVENT_CONFLICT: action 'FOLLOW_ARTIST' (state: user) cannot emit event 'SHOW_ANNOUNCED' (state: artist)Fix: Only emit events whose state: matches the action’s state:. To affect another entity, use a listener or saga.
VERR_CROSS_STREAM_WRITE
A projection handler attempts to write to a table owned by a different entity stream.
VERR_CROSS_STREAM_WRITE: projection 'artist_followers' cannot write to table 'user_following'VERR_OP_UNKNOWN
An unrecognized operation name is used in a rule’s then: block.
VERR_OP_UNKNOWN: operation 'update' is not recognized. Valid ops: set, add, sub, push, filter, remove, find, map, unset, merge, emit, emit_each, submit, reject, schedule, lookup, relationship_create, relationship_remove, if, for_eachFix: Replace the op with the correct name from the valid ops list.
VERR_MODE_UNKNOWN
A rule block uses an unrecognized mode: value.
VERR_MODE_UNKNOWN: mode 'always' is not valid. Valid modes: preflight, core, side_effectsVERR_EXPRESSION
A SpEL expression fails to parse or evaluate during compilation validation.
VERR_EXPRESSION: cannot parse expression 'entity.count +' — unexpected end of expressionFix: Check expression syntax. Ensure all parentheses and operators are balanced.
VERR_PRODUCT_STRUCTURE
The app folder is missing required files or has an invalid manifest structure.
VERR_PRODUCT_STRUCTURE: app.causet not found in './my-app'Fix: Ensure app.causet exists in the folder passed to the compiler.
ClassCastException — filter.where is an object, not a string
java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class java.lang.String
at parseFilterOperationCause: A filter op has where: specified as a YAML object instead of a string expression.
Fix: Write where: as a quoted SpEL string:
# Wrong
where:
field: value
# Correct
where: "entity.field == 'value'"ClassCastException — scalar field given YAML object
java.lang.ClassCastException: class java.util.LinkedHashMap cannot be cast to class java.lang.String
at parseRuleCause: A field that expects a string expression is given a YAML map.
Fix: Wrap the value in quotes or restructure the YAML:
# Wrong
value:
some_key: some_val
# Correct
value: "some_key"Runtime Errors (HTTP)
400 UNKNOWN_ACTION
The action field in the intent request does not match any action defined in the active IR for this fork.
{
"error": "UNKNOWN_ACTION",
"action": "CREATE_WIDGET",
"message": "Action 'CREATE_WIDGET' not found in active IR for fork 'main'"
}Cause: The action was not compiled into the active release, or the fork has no active release.
400 PREFLIGHT_REJECTION
A preflight rule’s reject op fired. The response includes the DSL-defined rejection code.
{
"error": "PREFLIGHT_REJECTION",
"code": "TICKET_LIMIT_EXCEEDED",
"rule": "max_tickets_per_user",
"message": "Preflight rejection: TICKET_LIMIT_EXCEEDED"
}The code value is the string from the DSL reject op:
then:
- op: reject
code: TICKET_LIMIT_EXCEEDEDThis is a normal business outcome — handle PREFLIGHT_REJECTION in application code the same way you handle any expected validation error.
404 ENTITY_NOT_FOUND
The target entity has no events in the ledger for this fork.
{
"error": "ENTITY_NOT_FOUND",
"entityType": "user",
"entityId": "user-999",
"forkId": "main"
}Note: In Causet, entities are created implicitly by the first event that references them. A 404 means no action has ever been successfully submitted for this entity on this fork.
409 CONCURRENT_WRITE
Another writer modified the entity between when it was loaded and when the runtime attempted to persist the new events (cursor contention).
{
"error": "CONCURRENT_WRITE",
"entityId": "item-1",
"message": "Cursor version mismatch — retry the request"
}Fix: Retry with exponential backoff. The runtime serializes writes per entity — under normal load this error is rare.
503 SERVICE_UNAVAILABLE
The database or Kafka is unreachable.
{
"error": "SERVICE_UNAVAILABLE",
"message": "Cannot connect to event store database"
}Query Errors
400 QUERY_NOT_FOUND
The query name does not exist in the active IR for this fork.
{
"error": "QUERY_NOT_FOUND",
"queryName": "shows_for_followed_artists",
"forkId": "main"
}400 INVALID_PARAMS
A required query parameter is missing or has the wrong type.
{
"error": "INVALID_PARAMS",
"missing": ["user_id"],
"message": "Required parameter 'user_id' was not provided"
}404 SCHEMA_NOT_FOUND
The tenant schema for this platform/application/fork does not exist in the projections database. The fork has not been deployed.
{
"error": "SCHEMA_NOT_FOUND",
"schema": "my_platform_concert_app_staging",
"message": "Tenant schema not found — deploy a release to this fork first"
}Fix: Deploy a release to the fork via the control plane. Deployment creates the schema and applies DDL.