@rsconcept/rstool 0.5.1 → 0.6.0

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.
@@ -0,0 +1,134 @@
1
+ {
2
+ "contractVersion": "1.3.0",
3
+ "state": {
4
+ "sessionId": "2d99e61f-79aa-471f-aaed-6965538e6fc8",
5
+ "createdAt": "2026-05-27T07:22:35.861Z",
6
+ "updatedAt": "2026-05-27T07:22:35.880Z",
7
+ "revisions": [
8
+ {
9
+ "revisionId": "14a15ffa-87c1-4ed7-bcf1-b8e6367fbd6d",
10
+ "at": "2026-05-27T07:22:35.880Z",
11
+ "message": "Built sample RSForm"
12
+ }
13
+ ],
14
+ "items": [
15
+ {
16
+ "id": 1,
17
+ "alias": "X1",
18
+ "cstType": "basic",
19
+ "definitionFormal": "",
20
+ "term": "",
21
+ "definitionText": "",
22
+ "convention": "",
23
+ "analysis": {
24
+ "success": true,
25
+ "type": {
26
+ "typeID": 5,
27
+ "base": {
28
+ "typeID": 3,
29
+ "baseID": "X1"
30
+ }
31
+ },
32
+ "valueClass": "value",
33
+ "diagnostics": []
34
+ }
35
+ },
36
+ {
37
+ "id": 2,
38
+ "alias": "C1",
39
+ "cstType": "constant",
40
+ "definitionFormal": "",
41
+ "term": "",
42
+ "definitionText": "",
43
+ "convention": "",
44
+ "analysis": {
45
+ "success": true,
46
+ "type": {
47
+ "typeID": 5,
48
+ "base": {
49
+ "typeID": 3,
50
+ "baseID": "C1",
51
+ "isOrdered": true,
52
+ "isArithmetic": true,
53
+ "isIntegerCompatible": true
54
+ }
55
+ },
56
+ "valueClass": "value",
57
+ "diagnostics": []
58
+ }
59
+ },
60
+ {
61
+ "id": 3,
62
+ "alias": "S1",
63
+ "cstType": "structure",
64
+ "definitionFormal": "ℬ(X1×X1)",
65
+ "convention": "Pairs (parent, child) over X1.",
66
+ "term": "",
67
+ "definitionText": "",
68
+ "analysis": {
69
+ "success": true,
70
+ "type": {
71
+ "typeID": 5,
72
+ "base": {
73
+ "typeID": 4,
74
+ "factors": [
75
+ {
76
+ "typeID": 3,
77
+ "baseID": "X1"
78
+ },
79
+ {
80
+ "typeID": 3,
81
+ "baseID": "X1"
82
+ }
83
+ ]
84
+ }
85
+ },
86
+ "valueClass": "value",
87
+ "diagnostics": []
88
+ }
89
+ },
90
+ {
91
+ "id": 4,
92
+ "alias": "D1",
93
+ "cstType": "term",
94
+ "definitionFormal": "Pr1(S1)",
95
+ "term": "",
96
+ "definitionText": "",
97
+ "convention": "",
98
+ "analysis": {
99
+ "success": true,
100
+ "type": {
101
+ "typeID": 5,
102
+ "base": {
103
+ "typeID": 3,
104
+ "baseID": "X1"
105
+ }
106
+ },
107
+ "valueClass": "value",
108
+ "diagnostics": []
109
+ }
110
+ },
111
+ {
112
+ "id": 5,
113
+ "alias": "A1",
114
+ "cstType": "axiom",
115
+ "definitionFormal": "1=1",
116
+ "term": "",
117
+ "definitionText": "",
118
+ "convention": "",
119
+ "analysis": {
120
+ "success": true,
121
+ "type": {
122
+ "typeID": 6
123
+ },
124
+ "valueClass": "value",
125
+ "diagnostics": []
126
+ }
127
+ }
128
+ ],
129
+ "model": {
130
+ "items": []
131
+ }
132
+ },
133
+ "diagnostics": []
134
+ }
@@ -0,0 +1,163 @@
1
+ {
2
+ "contractVersion": "1.3.0",
3
+ "state": {
4
+ "sessionId": "3026929f-c091-4bed-8fb7-fffd913c49bd",
5
+ "createdAt": "2026-05-27T07:22:37.637Z",
6
+ "updatedAt": "2026-05-27T07:22:37.665Z",
7
+ "revisions": [
8
+ {
9
+ "revisionId": "af453320-14f6-4ea8-abd2-f03201cec00d",
10
+ "at": "2026-05-27T07:22:37.665Z",
11
+ "message": "Built sample RSModel"
12
+ }
13
+ ],
14
+ "items": [
15
+ {
16
+ "id": 1,
17
+ "alias": "X1",
18
+ "cstType": "basic",
19
+ "definitionFormal": "",
20
+ "term": "",
21
+ "definitionText": "",
22
+ "convention": "",
23
+ "analysis": {
24
+ "success": true,
25
+ "type": {
26
+ "typeID": 5,
27
+ "base": {
28
+ "typeID": 3,
29
+ "baseID": "X1"
30
+ }
31
+ },
32
+ "valueClass": "value",
33
+ "diagnostics": []
34
+ }
35
+ },
36
+ {
37
+ "id": 2,
38
+ "alias": "C1",
39
+ "cstType": "constant",
40
+ "definitionFormal": "",
41
+ "term": "",
42
+ "definitionText": "",
43
+ "convention": "",
44
+ "analysis": {
45
+ "success": true,
46
+ "type": {
47
+ "typeID": 5,
48
+ "base": {
49
+ "typeID": 3,
50
+ "baseID": "C1",
51
+ "isOrdered": true,
52
+ "isArithmetic": true,
53
+ "isIntegerCompatible": true
54
+ }
55
+ },
56
+ "valueClass": "value",
57
+ "diagnostics": []
58
+ }
59
+ },
60
+ {
61
+ "id": 3,
62
+ "alias": "S1",
63
+ "cstType": "structure",
64
+ "definitionFormal": "ℬ(X1×X1)",
65
+ "convention": "Pairs (parent, child) over X1.",
66
+ "term": "",
67
+ "definitionText": "",
68
+ "analysis": {
69
+ "success": true,
70
+ "type": {
71
+ "typeID": 5,
72
+ "base": {
73
+ "typeID": 4,
74
+ "factors": [
75
+ {
76
+ "typeID": 3,
77
+ "baseID": "X1"
78
+ },
79
+ {
80
+ "typeID": 3,
81
+ "baseID": "X1"
82
+ }
83
+ ]
84
+ }
85
+ },
86
+ "valueClass": "value",
87
+ "diagnostics": []
88
+ }
89
+ },
90
+ {
91
+ "id": 4,
92
+ "alias": "D1",
93
+ "cstType": "term",
94
+ "definitionFormal": "Pr1(S1)",
95
+ "term": "",
96
+ "definitionText": "",
97
+ "convention": "",
98
+ "analysis": {
99
+ "success": true,
100
+ "type": {
101
+ "typeID": 5,
102
+ "base": {
103
+ "typeID": 3,
104
+ "baseID": "X1"
105
+ }
106
+ },
107
+ "valueClass": "value",
108
+ "diagnostics": []
109
+ }
110
+ },
111
+ {
112
+ "id": 5,
113
+ "alias": "A1",
114
+ "cstType": "axiom",
115
+ "definitionFormal": "1=1",
116
+ "term": "",
117
+ "definitionText": "",
118
+ "convention": "",
119
+ "analysis": {
120
+ "success": true,
121
+ "type": {
122
+ "typeID": 6
123
+ },
124
+ "valueClass": "value",
125
+ "diagnostics": []
126
+ }
127
+ }
128
+ ],
129
+ "model": {
130
+ "items": [
131
+ {
132
+ "id": 1,
133
+ "type": "basic",
134
+ "value": {
135
+ "0": "alice",
136
+ "1": "bob"
137
+ }
138
+ },
139
+ {
140
+ "id": 2,
141
+ "type": "basic",
142
+ "value": {
143
+ "0": "zero",
144
+ "1": "one",
145
+ "2": "two"
146
+ }
147
+ },
148
+ {
149
+ "id": 3,
150
+ "type": "ℬ(X1×X1)",
151
+ "value": [
152
+ [
153
+ -111,
154
+ 0,
155
+ 1
156
+ ]
157
+ ]
158
+ }
159
+ ]
160
+ }
161
+ },
162
+ "diagnostics": []
163
+ }
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsconcept/rstool",
3
- "version": "0.5.1",
3
+ "version": "0.6.0",
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",
@@ -35,6 +35,7 @@
35
35
  "./skills/rstool-helper/*": "./skills/rstool-helper/*",
36
36
  "./skills/INSTALL.md": "./skills/INSTALL.md",
37
37
  "./docs/*": "./docs/*",
38
+ "./examples/*": "./examples/*",
38
39
  "./package.json": "./package.json"
39
40
  },
40
41
  "bin": {
@@ -45,6 +46,7 @@
45
46
  "src",
46
47
  "skills",
47
48
  "docs",
49
+ "examples",
48
50
  "README.md",
49
51
  "LICENSE"
50
52
  ],
package/skills/README.md CHANGED
@@ -6,9 +6,9 @@ Each skill lives in its own subdirectory: `skills/<skill-name>/SKILL.md` (plus r
6
6
 
7
7
  - `INSTALL.md`: agent procedure after `npm install`
8
8
  - `rstool-helper/SKILL.md`: thin entry skill — copy into the project’s agent skills folder (see `INSTALL.md`)
9
- - `rstool-helper/GUIDE.md`: canonical workflow and language primer
10
- - `rstool-helper/REFERENCE.md`: API, stdio, contract
11
- - `rstool-helper/EXAMPLES.md`: worked examples and pitfalls
9
+ - `rstool-helper/GUIDE.md`: единая точка входа воркфлоу, чеклисты, обзор языка (на русском)
10
+ - `rstool-helper/REFERENCE.md`: API, stdio, контракт (на русском)
11
+ - `rstool-helper/EXAMPLES.md`: примеры и типичные ошибки (на русском)
12
12
  - `../docs/*.md`: language reference (DOMAIN, SYNTAX, DIAGNOSTICS, …)
13
13
 
14
14
  ## npm workflow
@@ -1,8 +1,8 @@
1
- # rstool Examples
1
+ # Примеры rstool
2
2
 
3
- Short examples for agents. For full scripts, see `../../examples/`.
3
+ Короткие примеры для агентов. Полные скрипты и JSON-сессии `../../examples/` ([README](../../examples/README.md)). Воркфлоу — [GUIDE.md](GUIDE.md).
4
4
 
5
- ## Minimal Session
5
+ ## Минимальная сессия
6
6
 
7
7
  ```ts
8
8
  import { CstType, RSToolAgent } from '@rsconcept/rstool';
@@ -20,7 +20,7 @@ tool.addOrUpdateConstituenta(sessionId, {
20
20
  alias: 'S1',
21
21
  cstType: CstType.STRUCTURED,
22
22
  definitionFormal: 'ℬ(X1×X1)',
23
- convention: 'Elements are (parent, child) pairs with parent, child ∈ X1.'
23
+ convention: 'Элементы пары (родитель, потомок); родитель, потомок ∈ X1.'
24
24
  }
25
25
  });
26
26
 
@@ -31,9 +31,9 @@ const { state, diagnostics } = tool.addOrUpdateConstituenta(sessionId, {
31
31
  console.log(state.analysis.success, diagnostics.length);
32
32
  ```
33
33
 
34
- ## Analyze Before Upsert
34
+ ## Анализ перед upsert
35
35
 
36
- Use scratch analysis when syntax or `cstType` is uncertain.
36
+ Черновой анализ, когда синтаксис или `cstType` под вопросом.
37
37
 
38
38
  ```ts
39
39
  const analysis = tool.analyzeExpression(sessionId, {
@@ -46,9 +46,9 @@ if (!analysis.success) {
46
46
  }
47
47
  ```
48
48
 
49
- Fix the reported `from` / `to` range, then re-run analysis. Maybe rethink the whole definition or split into multiple constituents
49
+ Исправь диапазон `from` / `to` из отчёта и повтори анализ. При необходимости пересмотри определение целиком или разбей на несколько конституент.
50
50
 
51
- ## Evaluation
51
+ ## Вычисление
52
52
 
53
53
  ```ts
54
54
  tool.setConstituentaValue(sessionId, {
@@ -64,11 +64,11 @@ const scratch = tool.evaluateExpression(sessionId, {
64
64
  console.log(scratch.success, scratch.value); // true, 3
65
65
  ```
66
66
 
67
- For stored definitions, set values for `basic`, `constant`, and `structure`, then call `evaluateConstituenta` or `recalculateModel`.
67
+ Для сохранённых определений задай значения `basic`, `constant` и `structure`, затем вызови `evaluateConstituenta` или `recalculateModel`.
68
68
 
69
- ## Semantic Smoke Test
69
+ ## Семантический smoke-тест
70
70
 
71
- When syntax is valid but meaning is uncertain, build a tiny model and assert the value.
71
+ Синтаксис верен, но смысл неочевиден собери маленькую модель и проверь значение.
72
72
 
73
73
  ```ts
74
74
  import { CstType, EvalStatus, RSToolAgent } from '@rsconcept/rstool';
@@ -103,15 +103,15 @@ tool.setConstituentaValues(sessionId, {
103
103
  const result = tool.evaluateConstituenta(sessionId, { constituentId: 3 });
104
104
 
105
105
  if (!result.success || result.status !== EvalStatus.HAS_DATA || JSON.stringify(result.value) !== '[0]') {
106
- throw new Error(`Expected Pr1(S1) to select the first coordinate; got ${JSON.stringify(result)}`);
106
+ throw new Error(`Ожидалось Pr1(S1) = первая координата; получено ${JSON.stringify(result)}`);
107
107
  }
108
108
  ```
109
109
 
110
- Use this pattern for tests that protect important definitions. Full kinship model: `../../examples/build-kinship-rsmodel.ts`. More notes: `../../docs/MODEL-TESTING.md`.
110
+ Подробнее: `../../docs/MODEL-TESTING.md`.
111
111
 
112
- ## Wrapper Client
112
+ ## Клиент обёртки
113
113
 
114
- Use the wrapper when the agent talks to a separate `rstool-wrapper` process.
114
+ Когда агент общается с отдельным процессом `rstool-wrapper`.
115
115
 
116
116
  ```ts
117
117
  import { CstType } from '@rsconcept/rstool';
@@ -135,36 +135,27 @@ console.log(diagnostics);
135
135
  await client.close();
136
136
  ```
137
137
 
138
- Manual stdio is one JSON request per line:
138
+ Ручной stdio один JSON-запрос на строку:
139
139
 
140
140
  ```jsonl
141
141
  { "id": "1", "method": "createSession", "params": {} }
142
142
  { "id": "2", "method": "addOrUpdateConstituenta", "params": { "sessionId": "...", "input": { "draft": { "id": 1, "alias": "X1", "cstType": "basic", "definitionFormal": "" } } } }
143
143
  ```
144
144
 
145
- ## Export / Import
145
+ ## Экспорт / импорт
146
146
 
147
147
  ```ts
148
148
  const payload = tool.exportSession(sessionId);
149
149
  const restored = tool.importSession(payload);
150
150
  ```
151
151
 
152
- Export includes session state and model values.
152
+ Экспорт включает состояние сессии и значения модели.
153
153
 
154
- To create files the user can upload to an existing Portal object:
154
+ Файлы для загрузки пользователем в существующий объект Portal:
155
155
 
156
156
  ```ts
157
157
  const schemaJson = tool.exportPortalSchema(sessionId);
158
158
  const modelJson = tool.exportPortalModel(sessionId);
159
159
  ```
160
160
 
161
- Use `schemaJson` on a schema page and `modelJson` on a model page via **Load from JSON**.
162
-
163
- ## Common mistakes
164
-
165
- - Wrong `cstType` in `analyzeExpression` → role-specific errors.
166
- - `term` with `X1×X1` for a relation → full Cartesian product, not relation typification.
167
- - `structure` with `Pr1(S1)` → wrong role; projections belong on `term` / `function`.
168
- - Same long `∃d1…∃dn` chain in many `D#` → define one central `D#` and use `Pr*` / `F#`.
169
- - `setConstituentaValue` on `term`, `axiom`, or `statement` → cannot set computed constituents directly.
170
- - Evaluation before base bindings → missing value, empty result, or evaluation failure.
161
+ `schemaJson` на странице схемы, `modelJson` на странице модели, через **Load from JSON**.
@@ -1,68 +1,122 @@
1
- # RS Language & rstool
1
+ # RSLang и rstool
2
2
 
3
- Compact entry guide for agents. Keep details in linked docs.
3
+ Краткий входной гайд для агентов. Детали в связанных документах.
4
4
 
5
- **RSLang** is a formal notation for conceptual schemas: concepts, relations, operations, assertions. Core ideas: membership `x∈y`, set-theoretic expressions, logical expressions, typification.
5
+ **RSLang** формальная нотация концептуальных схем: понятия, отношения, операции, утверждения. Основа: принадлежность `x∈y`, теоретико-множественные и логические выражения, типизация.
6
6
 
7
- **rstool** is the agent API for sessions, upserts, analysis, diagnostics, model values, evaluation, export/import.
7
+ **rstool** API агента для сессий, upsert, анализа, диагностик, значений модели, вычисления, экспорта/импорта.
8
8
 
9
- - Library: `@rsconcept/rstool`.
10
- - Analyzer: `@rsconcept/domain`.
11
- - Stdio wrapper: `npx rstool-wrapper`, JSON per line.
12
- - Node client: `RSToolWrapperClient`.
9
+ - Библиотека: `@rsconcept/rstool`.
10
+ - Анализатор: `@rsconcept/domain`.
11
+ - Stdio-обёртка: `npx rstool-wrapper`, JSON построчно.
12
+ - Node-клиент: `RSToolWrapperClient`.
13
13
 
14
- ## What to Read
14
+ ## Что читать
15
15
 
16
- Paths are relative to this file.
16
+ Пути относительно этого файла.
17
17
 
18
- - API, methods, stdio, error codes: [REFERENCE.md](REFERENCE.md).
19
- - Worked examples and pitfalls: [EXAMPLES.md](EXAMPLES.md).
20
- - Domain terms: [../../docs/DOMAIN.md](../../docs/DOMAIN.md).
21
- - Schema design rules: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
22
- - Constituents and validation: [../../docs/CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
23
- - Syntax: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
24
- - Typification: [../../docs/TYPIFICATION.md](../../docs/TYPIFICATION.md).
25
- - Definition testing with small conceptual models: [../../docs/MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
26
- - Diagnostics: [../../docs/DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
27
- - Portal REST reads: [../../docs/PORTAL-API.md](../../docs/PORTAL-API.md).
28
- - Grammar pointers: [../../docs/GRAMMAR-REF.md](../../docs/GRAMMAR-REF.md).
18
+ - API, методы, stdio, коды ошибок: [REFERENCE.md](REFERENCE.md).
19
+ - Примеры: [EXAMPLES.md](EXAMPLES.md).
20
+ - Термины предметной области: [../../docs/DOMAIN.md](../../docs/DOMAIN.md).
21
+ - Концептуализация, создание схемы: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
22
+ - Конституенты и валидация: [../../docs/CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
23
+ - Синтаксис: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
24
+ - Типизация: [../../docs/TYPIFICATION.md](../../docs/TYPIFICATION.md).
25
+ - Проверка определений на КМ: [../../docs/MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
26
+ - Диагностики: [../../docs/DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
27
+ - Грамматика: [../../docs/GRAMMAR-REF.md](../../docs/GRAMMAR-REF.md).
28
+ - REST Portal: [../../docs/PORTAL-API.md](../../docs/PORTAL-API.md).
29
29
 
30
- ## Workflow
30
+ ## Воркфлоу
31
31
 
32
- Use this when editing or checking schemas and models.
32
+ Все пошаговые сценарии собраны здесь. Справочные документы дают правила и детали.
33
33
 
34
- 1. `createSession`.
35
- 2. Develop schema - add constituents with proper type and attributes.
36
- 3. Add dependencies before dependents.
37
- 4. Use `analyzeExpression` before upsert when unsure.
38
- 5. Fix diagnostics by `from` / `to` range in `definitionFormal`.
39
- 6. When unsure about semantics, build a tiny conceptual model and evaluate test data.
34
+ ### Редактирование и проверка схемы
40
35
 
41
- - Set base/model values with `setConstituentaValue(s)`.
42
- - Evaluate with `evaluateExpression`, `evaluateConstituenta`, or `recalculateModel`.
36
+ Когда схема уже есть и нужны точечные правки, новые конституенты или проверка формул.
43
37
 
44
- 7. `commitStep` when the state is coherent.
45
- 8. Persist with `exportSession` / `importSession`.
46
- 9. For user-uploadable Portal files, use `exportPortalSchema` for schema JSON or `exportPortalModel` for model JSON.
38
+ 1. `createSession` (или продолжить существующую сессию).
39
+ 2. Развивай схему — добавляй конституенты с корректным `cstType` и атрибутами.
40
+ 3. Добавляй поставщиков раньше потребителей (см. [порядок объявления](#порядок-объявления-конституент)).
41
+ 4. Перед upsert при сомнении вызывай `analyzeExpression`.
42
+ 5. Исправляй диагностики по диапазону `from` / `to` в `definitionFormal` ([DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md)).
43
+ 6. При сомнении в семантике собери маленькую КМ и проверь тестовые данные ([цикл КМ](#проверка-на-маленькой-км)).
44
+ 7. Задай базовые/модельные значения: `setConstituentaValue(s)`; вычисли: `evaluateExpression`, `evaluateConstituenta`, `recalculateModel`.
45
+ 8. `commitStep`, когда состояние согласовано.
46
+ 9. Сохрани: `exportSession` / `importSession`.
47
+ 10. Для загрузки в Portal: `exportPortalSchema` (схема) или `exportPortalModel` (модель).
47
48
 
48
- ## Diagnostics Loop
49
+ ### Концептуализация (КС из содержания источника)
49
50
 
50
- 1. Check `analysis.success`.
51
- 2. If false, read `analysis.diagnostics` or `listDiagnostics`.
52
- 3. Map `code` to a fix in `DIAGNOSTICS.md`.
53
- 4. Patch the reported `from` / `to` range.
54
- 5. Re-run only after changing input.
51
+ Когда нужно построить или существенно развить КС по тексту ПО, требованиям или предметному описанию. Правила редукции, слоёв и паттернов — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
55
52
 
56
- ## Declaration Order
53
+ 1. Собери словарь: базовые понятия, ключевые отношения, сценарий синтеза.
54
+ 2. Добавь `X#`, `C#` с конвенциями из источника (не копируй дословно).
55
+ 3. Добавь базовые `S#`: трансформация, перевод, допускание, выбор, цели, субъекты.
56
+ 4. Проверь независимость базовых понятий — они не выводятся друг из друга.
57
+ 5. Добавь `A#` на структуры: `card`, покрытие `Pr1,2(S#)=…`, принадлежность выбора.
58
+ 6. Введи `F#` для типовых запросов.
59
+ 7. Производные понятия строй через `Pr*`, `Fi*`, `F#` от центрального `D#` и базовых `S#`.
60
+ 8. Перед каждым upsert — `analyzeExpression`; при ошибках — [цикл диагностик](#цикл-диагностик).
61
+ 9. Сомнительную семантику проверь на маленькой КМ ([цикл КМ](#проверка-на-маленькой-км), [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
62
+ 10. Перед показом результата пройди [чеклист ревью КС](#ревью-концептуальной-схемы).
63
+
64
+ Дальше — обычное [редактирование и проверка](#редактирование-и-проверка-схемы): commit, export.
65
+
66
+ ### Цикл диагностик
67
+
68
+ Когда `analysis.success === false` или `listDiagnostics` не пуст. Коды и типичные ошибки — [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
69
+
70
+ 1. Запусти `analyzeExpression` (черновик без сохранения).
71
+ 2. Прочитай `code`, `from`, `to`, `params` в `analysis.diagnostics` или через `listDiagnostics`.
72
+ 3. Сопоставь `code` с исправлением в [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
73
+ 4. Исправь именно диапазон в `definitionFormal`.
74
+ 5. Не повторяй вызов без изменения ввода.
75
+ 6. После успеха — `addOrUpdateConstituenta`.
76
+
77
+ ### Проверка на маленькой КМ
78
+
79
+ Когда синтаксис верен, но смысл формулы неочевиден. Подробности и форма данных — [MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
80
+
81
+ 1. Отдельная `createSession` или изолированная копия текущей сессии.
82
+ 2. Только нужные поставщики: `X#`, `C#`, `S#` и проверяемые `D#` / `F#` / `P#` / `A#`.
83
+ 3. `analyzeExpression` и `addOrUpdateConstituenta`.
84
+ 4. Значения базовых понятий: `setConstituentaValue` / `setConstituentaValues`.
85
+ 5. `evaluateExpression` или `evaluateConstituenta`; сравни с ожидаемым `value`.
86
+ 6. При нескольких зависимых определениях — `recalculateModel`.
87
+
88
+ Для регрессий вынеси проверку в скрипт или colocated `*.test.ts` (см. [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
89
+
90
+ ### Порядок объявления конституент
57
91
 
58
92
  1. `basic`, `constant`.
59
- 2. Core structures and key concepts.
60
- 3. Derived constituents in topological order.
61
- 4. Axioms and statements after their references.
93
+ 2. Базовые структуры и ключевые понятия.
94
+ 3. Производные конституенты в топологическом порядке.
95
+ 4. Аксиомы и утверждения после всех ссылок.
96
+
97
+ Правила валидации по типам — [CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
98
+
99
+ ## Чеклисты
100
+
101
+ ### Сессия и rstool
102
+
103
+ - [ ] Отслеживается `sessionId`.
104
+ - [ ] `cstType` соответствует роли конституенты.
105
+ - [ ] Поставщики добавлены раньше потребителей.
106
+
107
+ ### Перед показом, commit и export
108
+
109
+ - [ ] Схема проверена; ошибки исправлены.
110
+ - [ ] Диагностики обработаны до `commitStep` и экспорта.
111
+
112
+ ### Ревью концептуальной схемы
62
113
 
63
- ## Checklist
114
+ Перед завершением концептуализации или крупного изменения. Правила — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
64
115
 
65
- - [ ] `sessionId` tracked.
66
- - [ ] `cstType` matches the role.
67
- - [ ] Check schema and fix errors before showing result.
68
- - [ ] Diagnostics handled before commit/export.
116
+ - [ ] Атрибутивная и родоструктурная экспликации не смешаны без явного запроса.
117
+ - [ ] Нет избыточной проверки принадлежности к собственной типизации (`x∈X1`, если `x` уже в `X1`).
118
+ - [ ] Базовые понятия независимы, введены необходимые по смысле аксиомы.
119
+ - [ ] Покрыты главные сущности, роли, отношения, утверждения.
120
+ - [ ] В текстовых определениях используются только понятия из схемы.
121
+ - [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
122
+ - [ ] Сомнительная семантика проверена на маленькой КМ при наличии тестовых данных.