Edit this page

Diagnostics

Validation reports every problem it finds, each with a stable code, a path into the manifest, and a message that says how to fix it. With source maps (aleph check adds them), each diagnostic also points at the line in your app:

✖ unbounded_limit at app.ts:24:5 (routes[1].plan.body[0].op.limit)
  query limit must have a static upper bound, found int. Use a literal, an int input with a max, or $.min(limit, N).

Codes are stable: tools and agents can match on them.

CodeMeaning
invalid_manifestThe JSON doesn't match the manifest format.
unsupported_format_versionThe manifest's formatVersion isn't one this core reads.
invalid_nameA name isn't 1-64 characters of letters, digits, and _.
invalid_field_typeA field type is malformed: min above max, an empty enum, nested arrays, objects too deep, a bad decimal scale.
invalid_defaultA default doesn't fit its field.
invalid_keyAn entity's key is empty, repeats a field, or uses an optional, array, or object field.
invalid_indexAn index has no fields or uses an unorderable field.
row_too_largeA row's worst-case size is over 64 KB. Lower string and array maximums.
unknown_entityThe plan names an entity that isn't declared.
unknown_fieldA field, object field, or state field isn't declared.
unknown_indexA query names an undeclared index.
unknown_counterA counter isn't declared.
unknown_errorfail or ensure names an error the route or handler doesn't declare.
unknown_inputThe plan reads an input the route doesn't declare.
duplicate_route_idTwo routes share an id.
duplicate_routeTwo routes have the same method and path shape.
invalid_pathA path doesn't start with / or has empty segments.
path_param_mismatchThe path's :params don't match the declared params.
invalid_error_statusAn error status isn't 400-599, or a success status isn't 200-399.
undefined_varA plan uses a variable outside its scope.
duplicate_varA plan defines a variable twice.
missing_key_fieldA key is missing a field, or an insert has no value for a key field.
missing_required_fieldAn insert or object is missing a required field.
immutable_key_fieldAn update tries to change a key field.
invalid_prefixA prefix or anyOf doesn't fit the scanned key, or anyOf is combined with paging.
invalid_counter_keyA counter's grouping, aggregate, or shards are invalid.
unbounded_listA loop or aggregate is over something without a known maximum length.
unbounded_limitA query's limit has no static upper bound. Use a constant, an int input with a max, or $.min(limit, N).
write_in_pure_blockA map or filter body writes, releases an effect, or returns.
non_exhaustive_matchA $.match doesn't cover every enum value and has no _ case.
unknown_match_caseA $.match case isn't a value of the enum.
invalid_field_accessA field is read from something that isn't a row or object.
type_mismatchAn operand, written value, or response has the wrong type, or may be null where it can't be.
invalid_predicateA row expression (index, counter, invariant) depends on something other than the row.
invalid_authA route's auth rule is malformed.
unknown_roleA route requires an undeclared role.
unknown_scopeA route requires an undeclared API key scope.
invalid_idempotencyAn idempotency TTL is out of range.
immutable_entityAn append-only entity is updated or deleted.
unknown_eventAn event isn't declared.
unknown_queueA queue isn't declared.
unknown_channelA channel isn't declared.
unknown_bucketA bucket isn't declared.
unknown_integrationAn integration isn't declared.
unknown_operationAn integration operation isn't declared, or is called with the wrong mode.
invalid_payloadPayload or input values don't match their declared fields.
invalid_handlerA handler's trigger, schedule, or workflow transition is invalid.
invalid_declarationA declaration is invalid: a queue without a handler, a workflow without its start step, a bad CORS origin, or a versioned entity without version.
invalid_routeA route-level rule is broken: a reserved header, a webhook that isn't public POST, or OPTIONS routes.
invalid_rangeA query range has two lower or two upper bounds, or no field to bound.
invalid_expressionAn expression's static arguments are invalid: a bad regex, an unknown time zone, a bad pattern or scale.
over_budgetThe worst case of a route or handler is over a limit. Lower the bounds that drive it, or move the work to a job.
trigger_cycleHandlers set each other off in a loop (a trigger that writes its own entity, events that emit each other, a queue job that enqueues itself), so a chain would never end. Break the cycle, or declare maxDepth on every handler in it.