Коды ошибок и предупреждений
Каждая диагностика Aura имеет стабильный код — по нему удобно искать в CI-логах
и ссылаться в обсуждениях. E — ошибка, W — предупреждение (в --strict
предупреждения блокируют).
Хост (E00xx)
Возникают на границе между манифестом и приложением, которое его встраивает.
У E0001-E0006 нет позиции в исходнике, потому что разбор ещё не начинался;
E0007-E0009 указывают на вызов в скрипте (D35).
| Код | Значение | Как исправить |
|---|---|---|
| E0001 | хост не смог открыть файл либо aura.lock нечитаем | в сообщении — исходная ошибка ввода-вывода |
| E0002 | скрипт ничего не экспортирует под этим именем | проверьте имя; экспортом являются только свойства : и pub def |
| E0003 | экспорт — не функция | получите его через get, а не function или call |
| E0004 | у функции другое число аргументов | проверяется при привязке функции, до любого вызова |
| E0005 | у аргумента нет точного значения в Aura | целое за пределами i64, NaN или бесконечность, байтовая строка; отвергается, а не приводится |
| E0006 | результат не подходит под тип хоста | сообщение называет путь внутри значения, где не совпало |
| E0007 | скрипт импортирует или вызывает функцию хоста, которую хост не предоставил | модуль host: предоставляет приложение во время выполнения, поэтому aura eval останавливается здесь; aura check перечисляет, что нужно скрипту |
| E0008 | функция хоста вернула ошибку | сообщение - от приложения; скрипт не может её обработать |
| E0009 | функция хоста вызвана с неверным числом аргументов (при загрузке) или типами (при вызове) либо вернула значение, которого нет в Aura | сообщение называет функцию |
| E0010 | скрипт вызван изнутри одной из его же функций хоста | запрещено (D35): верните значение скрипту |
| E0011 | перезагрузка изменила бы экспорт скрипта: экспорт удалён, либо изменился его вид или число аргументов | хост мог его привязать, поэтому продолжает работать старая версия (D36); чтобы изменить экспорт, перезапустите приложение |
Лексика (E01xx)
| Код | Смысл | Как чинить |
|---|---|---|
| E0101 | после десятичной точки нет цифры (12.) | 12.0 либо 12 |
| E0102 | незакрытая строка до конца строки | строки в Aura однострочные; закройте " |
| E0103 | целочисленный литерал не помещается в i64 | |
| E0104 | registry-импорт без версии | import a/b@v1 as x — версия обязательна (D8) |
| E0105 | неожиданный символ | |
| E0106 | незакрытая интерполяция #{ | |
| E0107 | незакрытая блочная строка | закрыть end на отступе открывающей строки (D16) |
| E0108 | разделитель разрядов стоит неверно | _ группирует по три от точки: 10_000_000, 0.000_001 — но не 100_, 1__0 и не 2_3_7_1_9_3_3 |
Синтаксис (E02xx)
| Код | Смысл | Как чинить |
|---|---|---|
| E0200 | ожидался конкретный токен | текст ошибки называет какой |
| E0201 | инлайн-блок из v1.1 (metrics port: 9090) | объектный блок: metrics: … end (D3) |
| E0203 | не хватает end / ] | |
| E0204 | ожидалось выражение | |
| E0205 | statement’ы разделяются переносами строк | |
| E0206 | pub не перед def/type/enum | свойства экспортируются сами; = всегда приватен |
| E0207 | у cond нет ветки else | добавить else -> …: каждая ветвь обязана дать значение (D14) |
| E0208 | слишком глубокая вложенность | предел рекурсии, из-за которого глубоко вложенный ввод — ошибка, а не переполнение стека; цепочка вида a + b + c засчитывает свою длину (D42) |
| E0211 | член enum — не строка в кавычках | члены перечисляются строками, по одной на строку (D18) |
| E0212 | дубликат члена enum | каждый член указывается один раз |
| E0213 | enum без членов | пустой набор нельзя удовлетворить |
| E0214 | значение вычислено и выброшено | голое выражение не в конце функции никуда не идёт; напишите key:, name = или assert (D40) |
| E0215 | в теле есть свойства, и оно же кончается значением | функция возвращает одно или другое; сделайте значение свойством или уберите свойства (D40) |
Выполнение (E03xx)
| Код | Смысл | Как чинить |
|---|---|---|
| E0301 | повторное присваивание — значения иммутабельны | новое имя либо вложенный scope |
| E0302 | затенение внешней переменной без маркера | shadow x = ... (D7) |
| W0303 | shadow ничего не затеняет | уберите shadow |
| E0304 | переполнение целочисленной арифметики | Float либо пересмотрите величины |
| E0305 | деление на ноль | |
| E0306 | неподходящий тип операнда | условия — строго Bool; «правдивости» нет |
| E0307 | в интерполяции/join не скаляр | сериализуйте явно: .to_json() |
| E0308 | неизвестное поле объекта | опечатка? .get(key, default) для опциональных |
| E0309 | неизвестный метод | список — в справочнике методов; поля-функции пакетов вызываются так же |
| E0310 | нет прав (capability) | подсказка в ошибке называет нужный флаг (D1) |
| E0311 | путь вне разрешённых --allow-read каталогов | |
| E0312 | функции передано меньше аргументов, чем параметров | |
| E0313 | ошибка чтения файла (I/O) | |
| E0314 | некорректный TOML/JSON/YAML при парсинге | |
| E0315 | методу (map/filter) не передана лямбда | |
| E0316 | некорректное выражение внутри #{...} | |
| E0317 | индекс вне границ списка / first()/last() на пустом | .get(i, default) |
| E0318 | obj["key"] — скобки на объектах запрещены | точечная форма: obj."key" (D11) |
| E0319 | некорректная длительность | формат "1h30m", единицы d/h/m/s |
| E0320 | некорректная дата | RFC3339: "2026-07-18T12:00:00Z" |
| E0321 | некорректный base64 | base64_decode() на входе, который не является base64 |
| E0322 | склеенный список или строка превышает предел размера | + удваивает: потолок 1M элементов / 16 MiB |
| E0323 | to_object() получил один и тот же ключ дважды | молчаливая перезапись зависела бы от порядка элементов; уберите дубли заранее |
| E0324 | null выводится как текст | интерполяция и to_str() обязаны совпадать; скажите, что печатать в пустом случае (D31) |
| E0325 | вычисление исчерпало бюджет шагов | --max-steps его увеличивает, --stats показывает расход (D34); в Script бюджет — на вызов (D33) |
| E0326 | вычисление исчерпало бюджет памяти | --max-memory его увеличивает; считается каждое созданное значение и кадр (D34) |
| E0327 | zip() получил списки разной длины | молча отброшенный хвост унёс бы часть конфигурации; сначала обрежьте длинный через slice (D39) |
| E0328 | значение вложено глубже 256 списков и объектов | почти всегда цикл, который на каждом шаге заворачивает результат; стройте уровни рядом, а не друг в друге (D43) |
| E0398 | внутреннее: окружение замыкания было освобождено | ошибка в Aura — пришлите манифест в issue |
| E0399 | вычисление вложено глубже 256 уровней | почти всегда рекурсивная функция без условия остановки; map, filter и reduce обходят список без вложенности (D42) |
| E0533 | now()/timestamp() не существуют | время передаёт хост: env("BUILD_TIME", ...) (D13) |
Модули и пакеты (E04xx)
| Код | Смысл | Как чинить |
|---|---|---|
| E0401 | циклический импорт (цепочка в сообщении) | разорвите цикл: общий код — в третий модуль |
| E0402 | integrity-хэш пакета не совпал с aura.lock | содержимое пакета изменилось — разберитесь почему |
| E0403 | --frozen: записи нет в aura.lock | aura add локально, лок — в коммит |
| E0404 | модуль не найден / не резолвится | путь, версия, --registry-dir |
| E0410 | импорт передан интерпретатору без загрузчика модулей | встречается только при прямом встраивании вычислителя; используйте facade::eval_file/eval_source, которые грузят модули |
Анализ и валидация (E05xx / W05xx)
| Код | Смысл | Как чинить |
|---|---|---|
| W0501 | неиспользуемая переменная | мёртвый код — удалите |
| W0502 | неиспользуемый импорт | |
| W0503 | неиспользуемая функция/тип | для API пакета — пометьте pub |
| E0504 | необъявленная переменная | объявление должно предшествовать использованию |
| E0505 | env() или read_file() при --hermetic | передать значение снаружи либо снять флаг и выдать право |
| E0511 | отсутствует поле, требуемое схемой | |
| E0512 | тип поля не совпал со схемой | Int и Float — разные типы |
| E0513 | лишнее поле (только --strict) | уберите поле либо добавьте в схему |
| E0514 | значение не входит в enum | подсказка предлагает ближайший член и перечисляет набор (D18) |
| E0515 | инвариант схемы не выполняется для этого экземпляра | собственный assert схемы; показано его же сообщение |
| E0516 | значение по умолчанию, которое поле принять не может | проверяется там, где схема объявлена, а не там, где используется |
| W0512 | эффектный вызов в импортированном модуле | у импортов нет I/O-прав; пересмотрите дизайн пакета |
| W0513 | нулевое поле заполняется из get(key) или env(name) без значения по умолчанию | отсутствие тихо станет null; задайте значение по умолчанию или уберите ? |
| E0530 | провал assert | сообщение — ваше собственное |
| E0531 | вызван fail(...) |
Сериализация (E06xx)
| Код | Смысл | Как чинить |
|---|---|---|
| E0601 | функция/схема внутри выводимого дерева | путь ключа — в сообщении; на верхнем уровне pub-элементы исключаются сами |
| E0602 | не-конечный Float (NaN/Inf) | |
| E0603 | ограничение формата (TOML: нет null, корень — объект) | |
| E0604 | два ключа сплющиваются в один ключ json-flat | ключ с точкой неотличим от вложенного пути; взять --format json либо переименовать ключ |