@rsconcept/rstool 0.8.1 → 0.8.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (2) hide show
  1. package/docs/DIAGNOSTICS.md +126 -82
  2. package/package.json +3 -3
@@ -1,87 +1,131 @@
1
1
  # Диагностика
2
2
 
3
- Читай, когда `analyzeExpression` или `addOrUpdateConstituenta` вернули `diagnostics`.
4
-
5
- ## `DiagnosticRecord`
6
-
7
- - `code` — числовой `RSErrorCode`.
8
- - `params` аргументы сообщения.
9
- - `from`, `to` — диапазон в `definitionFormal`.
10
- - `constituentId` — есть в диагностике сессии из `listDiagnostics`.
11
-
12
- Источник истины: `@rsconcept/domain/src/rslang/error.ts`. Для короткого вида UI/логов используй `getRSErrorPrefix(code)`.
13
-
14
- ## Классы кодов
15
-
16
- - `0x8400` — parser: синтаксис и скобки.
17
- - `0x8800` — semantic: типизации, области видимости, структура.
18
- - `0x8100`runtime/evaluation: вычисление модели.
19
- - `0x2800` warning: обычно не блокирует выражение.
20
- - `0x88Cx` — правила схемы и `cstType`.
21
-
22
- ## Частые parser-коды
23
-
24
- - `0x8400 unknownSyntax` — неопределенная синтаксическая ошибка.
25
- - `0x8406 missingParenthesis` не закрыты `(` `)`.
26
- - `0x8407 missingCurlyBrace` не закрыты `{` `}`.
27
- - `0x8408 missingSquareBracket` не закрыты `[` `]`.
28
- - `0x8409 bracketMismatch` смешаны типы скобок.
29
- - `0x840A doubleParenthesis` лишняя пара скобок.
30
- - `0x840B missingOpenBracket` закрывающая скобка без открывающей.
31
- - `0x8415 expectedLocal` нужна локальная переменная.
32
- - `0x8416 expectedType` — нужна явная ступень.
33
-
34
- ## Локальные переменные
35
-
36
- - `0x8801 localUndeclared` — свяжи переменную квантором или параметром.
37
- - `0x8802 localShadowing` переименуй внутреннюю переменную.
38
- - `0x8815 localOutOfScope` — перенеси использование внутрь области видимости.
39
- - `0x2801 localDoubleDeclare` — warning; объявление задублировано.
40
- - `0x2802 localNotUsed` warning; переменная не используется.
41
-
42
- ## Типизации и структура
43
-
44
- - `0x8803 typesNotEqual` / `0x8825 typesNotCompatible` операнды несовместимы для оператора (`params`: тип A, тип B, оператор).
45
- - `0x8804 globalNotTyped` сначала добавь и проанализируй поставщика.
46
- - `0x8805 invalidDecart`, `0x8806 invalidBoolean`, `0x8810 invalidReduce` — неверная ступень для операции.
47
- - `0x8807 invalidTypeOperation` аргумент оператора (`∪`, `∈`, `D{}`, `:∈` и т.д.) должен быть множеством (`params`: оператор, тип).
48
- - `0x8808 invalidCard` — `card(...)` не над множеством.
49
- - `0x8809 invalidDebool` — нет гарантии синглетона.
50
- - `0x880B globalFuncWithoutArgs` функция вызвана без `[]`.
51
- - `0x8811 invalidProjectionTuple`, `0x8812 invalidProjectionSet` — неверная проекция.
52
- - `0x8813 invalidEnumeration` элементы перечисления разных ступеней.
53
- - `0x8816 invalidElementPredicate` S` с несовместимыми ступенями (`params`: тип элемента, оператор, тип множества).
54
- - `0x8818 invalidArgsArity`, `0x8819 invalidArgumentType` — неверный вызов функции.
55
- - `0x8821 radicalUsage` радикал вне домена параметра.
56
- - `0x8822 invalidFilterArgumentType`, `0x8823 invalidFilterArity` — неверный `Fi`.
57
- - `0x8824 arithmeticNotSupported`, `0x8826 orderingNotSupported` тип не поддерживает оператор (`params`: тип, оператор); для арифметики/порядка нужна ступень `Z`.
58
- - `0x8827 expectedLogic` — нужна логическая формула.
59
- - `0x8828 expectedSetexpr` нужно теоретико-множественное выражение, а не логика.
60
- - `0x882A invalidQuantifierDomain` в кванторной декларации `∀`/`∃` область должна быть множеством (`params`: оператор, тип); не путать с `0x8807`.
61
-
62
- ## Схема и вычисление
63
-
64
- - `0x8861 cstEmptyDerived` — у выводимой конституенты пустая формула.
65
- - `0x8862 definitionNotAllowed` у `basic`/`constant` непустая формула.
66
- - `0x8840 globalNoValue` / `0x8103 calcGlobalMissing` — нет значения в модели.
67
- - `0x8841 invalidPropertyUsage` `Property` использован как вычислимое значение.
68
- - `0x8101 setOverflow`, `0x8102 booleanBaseLimit`, `0x8104 iterationsLimit` выражение слишком дорого вычислять.
69
- - `0x8100 calcUnknownError` непредвиденная ошибка вычисления (неверные данные для операции, внутренний сбой).
70
- - `0x8105 calcInvalidDebool` `debool` получил не синглетон.
71
- - `0x8106 iterateInfinity`, `0x8107 calculationNotSupported` конструкция не исполнима в конечной модели.
72
- - `0x8108 calcInvalidData` несовместимые значения в runtime (`params`: значение A, значение B, оператор); типично сравнение множества с числом. Диапазон `from`/`to` узел операции.
73
-
74
- ## Типичные ошибки агентов
75
-
76
- - Задавать значение `term`/`axiom`/`statement` напрямую.
77
- - Писать формулу у `basic` или `constant`.
78
- - Добавлять потребителя раньше поставщика.
79
- - Давать логическое тело `term` или нелогическое тело `axiom`/`statement`.
80
- - Использовать `R#` в теле результата.
81
- - Вычислять производные понятия до привязки данных для базовых.
82
- - Сравнивать или комбинировать значения несовместимых ступеней в модели (ожидай `0x8108 calcInvalidData` с оператором в `params`).
83
- - Писать `∀a∈Z` или `∀a∈(логика)` вместо множества (ожидай `0x882A invalidQuantifierDomain`).
3
+ Читай, когда `analyzeExpression`, `addOrUpdateConstituenta`, `listDiagnostics` или `evaluate*`
4
+ вернули диагностику. Источник истины по кодам — `@rsconcept/domain/src/rslang/error.ts`.
5
+
6
+ ## Где лежит диагностика
7
+
8
+ У rstool два представления одной и той же ошибки.
9
+
10
+ - **Плоское** `RSToolErrorDescription` — в `AnalysisResult.diagnostics` (из `analyzeExpression`
11
+ и `addOrUpdateConstituenta(...).analysis`) и в `EvaluationResult.diagnostics`:
12
+ - `code` числовой `RSErrorCode`.
13
+ - `from`, `to` — полуинтервал `[from, to)` в `definitionFormal` (или в выражении вычисления).
14
+ - `params?` — позиционный массив строк-аргументов сообщения (см. таблицы ниже).
15
+ - **Обёрнутое** `DiagnosticRecord` — только из `listDiagnostics`:
16
+ - `sessionId`, `expression`исходное выражение.
17
+ - `error` — то же `RSToolErrorDescription` (`code`/`from`/`to`/`params`) **вложено**, читай `record.error.code`.
18
+ - `constituentId?`id конституенты. У диагностик от `addOrUpdateConstituenta` он есть;
19
+ у черновиков `analyzeExpression` он `undefined`. Фильтруй `listDiagnostics(sessionId, { constituentId })`.
20
+
21
+ ## Класс и префикс кода
22
+
23
+ Класс выводится по битовым маскам кода (порядок проверки важен — см. `inferErrorClass`):
24
+
25
+ | Маска | Класс | Префикс `getRSErrorPrefix` |
26
+ | :------- | :--------- | :------------------------- |
27
+ | `0x0100` | EVALUATION | `E` + hex |
28
+ | `0x0200` | LEXER | `L` + hex |
29
+ | `0x0400` | PARSER | `P` + hex |
30
+ | `0x0800` | SEMANTIC | `S` + hex |
31
+ | иначе | UNKNOWN | `U` + hex |
32
+
33
+ - Диапазоны: `0x84xx` — parser (синтаксис, скобки), `0x88xx` — semantic (типизация, область
34
+ видимости, структура, схема, отсутствие значения), `0x81xx` — evaluation (вычисление КМ),
35
+ `0x28xx` — предупреждения (класс UNKNOWN, префикс `U`).
36
+
37
+ ## Parser (`0x84xx`, префикс `P`)
38
+
39
+ | Код | Имя | `params` | Исправление |
40
+ | :------- | :-------------------- | :------------------- | :------------------------------------------------------------------------------- |
41
+ | `0x8400` | `unknownSyntax` | — | Неопределённая синтаксическая ошибка: проверь операторы, скобки, идентификаторы. |
42
+ | `0x8409` | `bracketMismatch` | `[expected, actual]` | Закрой ожидаемой скобкой `expected` вместо `actual`. |
43
+ | `0x840A` | `doubleParenthesis` | — | Убери лишнюю внешнюю пару `(( … ))`. |
44
+ | `0x840B` | `missingOpenBracket` | `[bracket]` | Непарная закрывающая `bracket`: убери её или добавь открывающую. |
45
+ | `0x840C` | `missingCloseBracket` | `[bracket]` | Непарная открывающая `bracket`: убери её или добавь закрывающую. |
46
+ | `0x8415` | `expectedLocal` | | Ожидалось имя локальной переменной. |
47
+ | `0x8416` | `expectedType` | — | Тип выражения не соответствует `cstType` конституенты. |
48
+ | `0x8417` | `invalidFilterSyntax` | | Синтаксис `Fi`: `Fi1[D1](S1)`, `Fi1,2[D1,D2](S1)` или `Fi1,2[D3](S1)`. |
49
+
50
+ ## Предупреждения (`0x28xx`, префикс `U`, не блокируют)
51
+
52
+ | Код | Имя | `params` | Исправление |
53
+ | :------- | :------------------- | :------- | :--------------------------------------------------------------------- |
54
+ | `0x2801` | `localDoubleDeclare` | `[name]` | Объявление `name` задублировано можно игнорировать или убрать дубль. |
55
+ | `0x2802` | `localNotUsed` | `[name]` | Переменная `name` не используется. |
56
+
57
+ ## Локальные переменные и область видимости (`0x88xx`, префикс `S`)
58
+
59
+ | Код | Имя | `params` | Исправление |
60
+ | :------- | :---------------- | :------- | :--------------------------------------------------------- |
61
+ | `0x8801` | `localUndeclared` | `[name]` | Свяжи `name` квантором или объяви параметром. |
62
+ | `0x8802` | `localShadowing` | `[name]` | Переименуй внутреннюю переменную `name`. |
63
+ | `0x8815` | `localOutOfScope` | `[name]` | Перенеси использование `name` внутрь её области видимости. |
64
+
65
+ ## Типизация и структура (`0x88xx`, префикс `S`)
66
+
67
+ | Код | Имя | `params` | Исправление |
68
+ | :------- | :------------------------------ | :------------------- | :--------------------------------------------------------------------------------------------------------------------------- |
69
+ | `0x8803` | `typesNotEqual` | `[a, b, operator]` | Операнды `operator` должны иметь равный тип (`a` ≠ `b`). |
70
+ | `0x8825` | `typesNotCompatible` | `[a, b, operator]` | Типы `a` и `b` несовместимы для `operator`. |
71
+ | `0x8804` | `globalNotTyped` | `[name]` | Поставщик `name` не типизирован: добавь и проанализируй его раньше. |
72
+ | `0x8805` | `invalidDecart` | `[arg]` | Аргумент `arg` оператора `×` неподходящей ступени. |
73
+ | `0x8806` | `invalidBoolean` | `[arg]` | Аргумент `arg` оператора `ℬ()` неподходящей ступени. |
74
+ | `0x8810` | `invalidReduce` | `[arg]` | `red(arg)` требует ступень `ℬℬ`. |
75
+ | `0x8807` | `invalidTypeOperation` | `[operator, type]` | Аргумент `type` оператора `operator` (`∪`, `∈`, `D{}`, `:∈` и т.п.) должен быть множеством. |
76
+ | `0x8808` | `invalidCard` | `[arg]` | `card(arg)` только над множеством. |
77
+ | `0x8809` | `invalidDebool` | `[arg]` | `debool(arg)` требует ступень-множество с гарантией синглетона. |
78
+ | `0x880B` | `globalFuncWithoutArgs` | `[name]` | Терм-/предикат-функция `name` вызвана без аргументов: нужен `F#[…]` / `P#[…]`. |
79
+ | `0x8811` | `invalidProjectionTuple` | `[from, to]` | Проекция `Pr` только над кортежем. |
80
+ | `0x8812` | `invalidProjectionSet` | `[projection, type]` | Неверная проекция `projection` над типом `type`. |
81
+ | `0x8813` | `invalidEnumeration` | `[a, b]` | Элементы перечисления разной типизации (`a` ≠ `b`). |
82
+ | `0x8814` | `invalidCortegeDeclare` | — | Число переменных кортежа размерности `×` (напр. `∀(a,b)∈X1`). |
83
+ | `0x8816` | `invalidElementPredicate` | `[a, operator, c]` | `a operator c` (`ξ∈S`) с несовместимыми ступенями: `a` тип элемента, `c` — тип множества. |
84
+ | `0x8817` | `invalidEmptySetUsage` | — | Бессмысленное использование `∅` (напр. `X1∪∅`). |
85
+ | `0x8818` | `invalidArgsArity` | `[expected, actual]` | Неверное число аргументов функции (`expected` ≠ `actual`). |
86
+ | `0x8819` | `invalidArgumentType` | `[expected, actual]` | Тип аргумента не соответствует объявлению: ожидалось `expected`, получено `actual`. |
87
+ | `0x881C` | `globalStructure` | — | Некорректный домен родовой структуры (`cstType` STRUCTURED): нужна ступень-структура вроде `ℬ(X1×D2)`, а не, напр., `X1∩X1`. |
88
+ | `0x8821` | `radicalUsage` | `[name]` | Радикал `name` допустим только внутри аргумента функции. |
89
+ | `0x8824` | `arithmeticNotSupported` | `[type, operator]` | `type` не поддерживает арифметику `operator`: нужна ступень `Z` или `C#`. |
90
+ | `0x8826` | `orderingNotSupported` | `[type, operator]` | `type` не поддерживает порядок `operator`: нужна ступень `Z` или `C#`. |
91
+ | `0x8827` | `expectedLogic` | `[type]` | Нужна логическая формула, получен тип `type`. |
92
+ | `0x8828` | `expectedSetexpr` | `[type]` | Нужно теоретико-множественное выражение, получен тип `type` (напр. `Logic`). |
93
+ | `0x8829` | `invalidArgumentCortegeDeclare` | — | Связное объявление кортежа запрещено в аргументах функции (`[(a,b)∈S1]`): используй проекции или раздельные переменные. |
94
+ | `0x882A` | `invalidQuantifierDomain` | `[operator, type]` | Область квантора `operator` (`∀`/`∃`) должна быть множеством, а не `type`. |
95
+
96
+ ## Фильтр `Fi` (`0x882x`, префикс `S`)
97
+
98
+ | Код | Имя | `params` | Исправление |
99
+ | :------- | :---------------------------- | :----------------------------------- | :------------------------------------------------------------------------------------ |
100
+ | `0x8822` | `invalidFilterArgumentType` | `[operator, actual, expected]` | Аргумент `Fi` имеет тип `actual`, ожидался `expected` (обычно `ℬ(…)`). |
101
+ | `0x8823` | `invalidFilterArity` | `[indexCount, paramCount, operator]` | Число индексов `indexCount` ≠ числу параметров `paramCount` у `operator`. |
102
+ | `0x882B` | `invalidFilterParameterType` | `[param, expected, operator]` | Тип параметра `param` не совпадает с компонентом аргумента `expected` для `operator`. |
103
+ | `0x882C` | `invalidFilterIndex` | `[operator, actual, index, arity]` | Индекс проекции `index` превышает арность кортежа `arity` аргумента `actual`. |
104
+ | `0x882D` | `invalidFilterBooleanEchelon` | `[operator, actual, expected]` | У параметра `Fi` недостаёт ступени ℬ: тип `actual`, `bool(actual)` дал бы `expected`. |
105
+
106
+ ## Значение и схема (`0x88xx`, префикс `S`)
107
+
108
+ | Код | Имя | `params` | Исправление |
109
+ | :------- | :--------------------- | :------- | :----------------------------------------------------------- |
110
+ | `0x8840` | `globalNoValue` | `[name]` | Идентификатор `name` невычислим в модели. |
111
+ | `0x8841` | `invalidPropertyUsage` | — | `Property` - множество использовано как вычислимое значение. |
112
+ | `0x8861` | `cstEmptyDerived` | — | У выводимой конституенты пустая формула. |
113
+ | `0x8862` | `definitionNotAllowed` | — | У `basic`/`constant` определение не допускается. |
114
+
115
+ ## Вычисление КМ (`0x81xx`, префикс `E`)
116
+
117
+ | Код | Имя | `params` | Исправление |
118
+ | :------- | :------------------------ | :----------------- | :--------------------------------------------------------------------- |
119
+ | `0x8100` | `calcUnknownError` | — | Непредвиденная ошибка вычисления. |
120
+ | `0x8101` | `setOverflow` | `[limit]` | Превышен предел числа элементов `limit`: упрости выражение или данные. |
121
+ | `0x8102` | `booleanBaseLimit` | `[limit]` | Превышен предел базы степенного множества `limit`. |
122
+ | `0x8103` | `calcGlobalMissing` | `[name]` | Нет значения для `name`: задай `setConstituentaValue(s)`. |
123
+ | `0x8104` | `iterationsLimit` | `[limit]` | Превышен предел итераций `limit`. |
124
+ | `0x8105` | `calcInvalidDebool` | — | `debool` получил не синглетон. |
125
+ | `0x8106` | `iterateInfinity` | — | Итерация по бесконечному множеству. |
126
+ | `0x8107` | `calculationNotSupported` | — | Объявление функции не подразумевает вычисления. |
127
+ | `0x8108` | `calcInvalidData` | `[a, b, operator]` | Несовместимые значения `a` и `b` для `operator` в runtime. |
84
128
 
85
129
  ## Цикл исправления
86
130
 
87
- Пошаговый цикл — в `../skills/rstool-helper/GUIDE.md`, раздел «Цикл диагностик». Здесь — справочник кодов и типичных ошибок.
131
+ Пошаговый цикл — в `../skills/rstool-helper/GUIDE.md`, раздел «Цикл диагностик». Здесь — справочник кодов.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsconcept/rstool",
3
- "version": "0.8.1",
3
+ "version": "0.8.3",
4
4
  "description": "Agent-facing library for incremental RSForm construction, RSLang analysis, diagnostics, modeling, and evaluation. Wraps @rsconcept/domain with a deterministic session contract and stdio wrapper.",
5
5
  "license": "MIT",
6
6
  "author": "IRBorisov",
@@ -70,10 +70,10 @@
70
70
  "prepublishOnly": "npm run build"
71
71
  },
72
72
  "dependencies": {
73
- "@rsconcept/domain": "^1.4.3"
73
+ "@rsconcept/domain": "^1.4.5"
74
74
  },
75
75
  "devDependencies": {
76
- "@types/node": "^25.9.4",
76
+ "@types/node": "^26.0.1",
77
77
  "tsdown": "^0.22.3",
78
78
  "tsx": "^4.22.4",
79
79
  "typescript": "^6.0.3",