@rsconcept/rstool 1.4.3 → 1.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.
Files changed (52) hide show
  1. package/README.md +5 -4
  2. package/dist/{agent-workflow-D22FeODL.d.ts → agent-workflow-BTwrxOoX.d.ts} +9 -2
  3. package/dist/{diagnostic-assembly-DRunIcKQ.js → diagnostic-assembly-B-6vIA5I.js} +3 -1
  4. package/dist/{diagnostic-assembly-DRunIcKQ.js.map → diagnostic-assembly-B-6vIA5I.js.map} +1 -1
  5. package/dist/index.d.ts +3 -3
  6. package/dist/index.js +1 -1
  7. package/dist/mappers/model-adapter.js +127 -1
  8. package/dist/mappers/model-adapter.js.map +1 -0
  9. package/dist/mappers/schema-adapter.d.ts +5 -1
  10. package/dist/mappers/schema-adapter.js +44 -11
  11. package/dist/mappers/schema-adapter.js.map +1 -1
  12. package/dist/mappers/types.js +1 -1
  13. package/dist/models/agent-workflow.d.ts +2 -2
  14. package/dist/models/diagnostic.js +1 -1
  15. package/dist/models/index.d.ts +4 -4
  16. package/dist/models/index.js +1 -1
  17. package/dist/models/rstool-agent.d.ts +1 -1
  18. package/dist/models/rstool-agent.js +1 -1
  19. package/dist/models/tool-contract.d.ts +1 -1
  20. package/dist/models/tool-contract.js +1 -1
  21. package/dist/models/tool-contract.js.map +1 -1
  22. package/dist/{models-B255GaEC.js → models-LMyDB0md.js} +25 -4
  23. package/dist/models-LMyDB0md.js.map +1 -0
  24. package/dist/rsform-builder-DKwZfJvN.js +102 -0
  25. package/dist/rsform-builder-DKwZfJvN.js.map +1 -0
  26. package/dist/{rstool-agent-BGQAzFly.d.ts → rstool-agent-BrAFJcoE.d.ts} +6 -4
  27. package/dist/session/session-store.js +1 -1
  28. package/dist/{tool-contract-sQfr-DYD.d.ts → tool-contract-BUaDRHoO.d.ts} +8 -3
  29. package/dist/wrapper/stdio-wrapper.js +8 -2
  30. package/dist/wrapper/stdio-wrapper.js.map +1 -1
  31. package/docs/CONCEPTUAL-SCHEMA.md +44 -0
  32. package/docs/CONSTITUENTA.md +1 -1
  33. package/docs/DIAGNOSTICS.md +32 -31
  34. package/docs/README.md +3 -3
  35. package/package.json +19 -18
  36. package/skills/README.md +3 -3
  37. package/skills/rstool-helper/EXAMPLES.md +194 -3
  38. package/skills/rstool-helper/GUIDE.md +79 -8
  39. package/skills/rstool-helper/REFERENCE.md +192 -34
  40. package/skills/rstool-helper/SKILL.md +28 -8
  41. package/src/mappers/diagnostic-assembly.ts +3 -0
  42. package/src/mappers/rsform-builder.ts +1 -1
  43. package/src/mappers/schema-adapter.ts +48 -16
  44. package/src/models/agent-workflow.ts +8 -0
  45. package/src/models/index.ts +1 -0
  46. package/src/models/rstool-agent.test.ts +21 -0
  47. package/src/models/rstool-agent.ts +23 -0
  48. package/src/models/tool-contract.ts +8 -1
  49. package/src/wrapper/stdio-handler.ts +8 -1
  50. package/dist/model-adapter-D-YmIvQW.js +0 -225
  51. package/dist/model-adapter-D-YmIvQW.js.map +0 -1
  52. package/dist/models-B255GaEC.js.map +0 -1
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@rsconcept/rstool",
3
- "version": "1.4.3",
3
+ "version": "1.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.",
5
5
  "license": "MIT",
6
6
  "author": "IRBorisov",
@@ -50,21 +50,6 @@
50
50
  "README.md",
51
51
  "LICENSE"
52
52
  ],
53
- "dependencies": {
54
- "@rsconcept/domain": "2.0.2"
55
- },
56
- "devDependencies": {
57
- "@types/node": "^26.1.0",
58
- "@vitest/coverage-v8": "^4.1.9",
59
- "tsdown": "^0.22.3",
60
- "tsx": "^4.22.5",
61
- "typescript": "^6.0.3",
62
- "unrun": "^0.3.1",
63
- "vitest": "^4.1.9"
64
- },
65
- "publishConfig": {
66
- "access": "public"
67
- },
68
53
  "scripts": {
69
54
  "build": "tsdown",
70
55
  "typecheck": "tsc -p tsconfig.json --noEmit",
@@ -83,6 +68,22 @@
83
68
  "example:build-expression-bank-schema": "tsx examples/expression-bank/build-rsform.ts",
84
69
  "example:build-template-apply-schema": "tsx examples/template-apply/build-rsform.ts",
85
70
  "example:audit-diagnostics": "tsx examples/audit-diagnostics.ts",
86
- "kinship:cli": "tsx examples/kinship/cli.ts"
71
+ "kinship:cli": "tsx examples/kinship/cli.ts",
72
+ "prepublishOnly": "pnpm run build"
73
+ },
74
+ "dependencies": {
75
+ "@rsconcept/domain": "workspace:*"
76
+ },
77
+ "devDependencies": {
78
+ "@types/node": "^26.1.0",
79
+ "@vitest/coverage-v8": "^4.1.9",
80
+ "tsdown": "^0.22.3",
81
+ "tsx": "^4.22.5",
82
+ "typescript": "^6.0.3",
83
+ "unrun": "^0.3.1",
84
+ "vitest": "^4.1.9"
85
+ },
86
+ "publishConfig": {
87
+ "access": "public"
87
88
  }
88
- }
89
+ }
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`: единая точка входа — воркфлоу, чеклисты, обзор языка (на русском)
10
- - `rstool-helper/REFERENCE.md`: API, stdio, контракт (на русском)
11
- - `rstool-helper/EXAMPLES.md`: примеры и типичные ошибки (на русском)
9
+ - `rstool-helper/GUIDE.md`: entry point — task→read matrix, workflows (incl. review), checklists (Russian)
10
+ - `rstool-helper/REFERENCE.md`: API, stdio, MCP names, response shapes, help map (Russian)
11
+ - `rstool-helper/EXAMPLES.md`: snippets, anti-patterns, diagnostics, `examples/` index (Russian)
12
12
  - `../docs/*.md`: language reference (DOMAIN, SYNTAX, DIAGNOSTICS, …)
13
13
 
14
14
  ## npm workflow
@@ -1,5 +1,22 @@
1
1
  # ЯРЭ и rstool — примеры
2
2
 
3
+ Короткие фрагменты для агентов. Воркфлоу — [GUIDE.md](GUIDE.md). Контракт — [REFERENCE.md](REFERENCE.md).
4
+
5
+ ## Индекс runnable `examples/`
6
+
7
+ Полные сценарии пакета:
8
+
9
+ | Тема | Паттерн | Смотри |
10
+ | ----------------------------------------------------- | ------------------------------------ | ------------------------------------------------- |
11
+ | [`sample/`](../../examples/sample/) | Минимальная КС + КМ | `X1`, `C1`, `S1`, `D1`, `A1` |
12
+ | [`kinship/`](../../examples/kinship/) | Предметная схема, модель, CLI | отношения на `X1`, правки интерпретации |
13
+ | [`chocolate-nim/`](../../examples/chocolate-nim/) | Математика на `Z` без `X#` | [BASE-SELECTION.md](../../docs/BASE-SELECTION.md) |
14
+ | [`movd/`](../../examples/movd/) | Сложные `S#`, мультипроекции, `Fi` | фильтры и проекции |
15
+ | [`expression-bank/`](../../examples/expression-bank/) | Шаблоны на радикалах `R#` | [SYNTAX.md](../../docs/SYNTAX.md) «Радикалы» |
16
+ | [`template-apply/`](../../examples/template-apply/) | Подстановка `R#` → предметные домены | применение шаблонов |
17
+
18
+ Запуск и структура папок — [examples/README.md](../../examples/README.md).
19
+
3
20
  ## Схема: batch patch
4
21
 
5
22
  ```ts
@@ -16,6 +33,160 @@ const result = tool.applySchemaPatch({
16
33
  console.log(result.summary.itemCount, result.success);
17
34
  ```
18
35
 
36
+ ## Терм-функция вместо множества пар
37
+
38
+ Правила — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md), раздел «Терм-функция вместо множества пар».
39
+
40
+ ### Было: граф и чтение через фильтр
41
+
42
+ ```ts
43
+ tool.applySchemaPatch({
44
+ items: [
45
+ { alias: 'X1', convention: 'узлы' },
46
+ { alias: 'S1', definitionFormal: 'ℬ(X1×X1)', convention: 'ориентированные рёбра' },
47
+ {
48
+ alias: 'D1',
49
+ term: 'узел и его исходящие рёбра',
50
+ definitionFormal: 'I{(ξ,σ) | ξ:∈X1; σ:=Pr2(Fi1[{ξ}](S1))}'
51
+ },
52
+ {
53
+ alias: 'D2',
54
+ term: 'узел и число исходящих рёбер',
55
+ definitionFormal: 'I{(ξ,n) | α:∈D1; ξ:=pr1(α); n:=card(pr2(α))}'
56
+ },
57
+ {
58
+ alias: 'A1',
59
+ term: 'функциональность графика D1',
60
+ definitionFormal: '∀d1,d2∈D1 (pr1(d1)=pr1(d2) ⇒ pr2(d1)=pr2(d2))'
61
+ }
62
+ ]
63
+ });
64
+ ```
65
+
66
+ Потребитель «степени» вынужден тащить пары и аксиому однозначности.
67
+
68
+ ### Стало: терм-функции и вызовы
69
+
70
+ ```ts
71
+ tool.applySchemaPatch({
72
+ items: [
73
+ { alias: 'X1', convention: 'узлы' },
74
+ { alias: 'S1', definitionFormal: 'ℬ(X1×X1)', convention: 'ориентированные рёбра' },
75
+ {
76
+ alias: 'F1',
77
+ term: 'исходящие соседи',
78
+ definitionFormal: '[ξ∈X1] Pr2(Fi1[{ξ}](S1))'
79
+ },
80
+ {
81
+ alias: 'F2',
82
+ term: 'исходящая степень',
83
+ definitionFormal: '[ξ∈X1] card(F1[ξ])'
84
+ },
85
+ {
86
+ alias: 'D3',
87
+ term: 'стоки',
88
+ definitionFormal: 'D{ξ∈X1 | F2[ξ]=0}'
89
+ }
90
+ ]
91
+ });
92
+ ```
93
+
94
+ `A1` не нужна: однозначность уже в `F1`/`F2`. Множество пар не вводится, пока оно само не станет предметом утверждения.
95
+
96
+ ### Когда пары уместны
97
+
98
+ Многозначная связь «документ — автор» — отношение; `F1` даёт **множество** авторов, а `D1` — отношение на документах:
99
+
100
+ ```ts
101
+ tool.applySchemaPatch({
102
+ items: [
103
+ { alias: 'X1', convention: 'документы' },
104
+ { alias: 'X2', convention: 'лица' },
105
+ { alias: 'S1', definitionFormal: 'ℬ(X1×X2)', convention: 'авторство' },
106
+ {
107
+ alias: 'F1',
108
+ term: 'авторы документа',
109
+ definitionFormal: '[δ∈X1] Pr2(Fi1[{δ}](S1))'
110
+ },
111
+ {
112
+ alias: 'D1',
113
+ term: 'соавторские пары документов',
114
+ definitionFormal: 'D{(a,b)∈X1×X1 | a≠b & F1[a]∩F1[b]≠∅}'
115
+ }
116
+ ]
117
+ });
118
+ ```
119
+
120
+ ## `D{}` / `I{}` / `R{}` — когда что
121
+
122
+ Синтаксис — [SYNTAX.md](../../docs/SYNTAX.md).
123
+
124
+ | Генератор | Когда | Пример |
125
+ | ---------------------------- | ------------------------------------------ | ------------------------------------------------------------------------------------------ |
126
+ | `D{ξ∈A \| P(ξ)}` | Отбор по условию без пошагового построения | `D{ξ∈X1 \| F2[ξ]=0}` |
127
+ | `I{… \| блоки;}` | Нужны промежуточные присваивания / сборка | `I{(ξ,n) \| α:∈D1; ξ:=pr1(α); n:=card(pr2(α))}` — лучше заменить на `F#`, если это функция |
128
+ | `R{x:=base \| cond \| next}` | Рекурсивное наращивание | обход / итерация по правилу |
129
+
130
+ Антипаттерн: `I{(ξ,σ) \| ξ:∈A; σ:=E(ξ)}` для однозначного `E` → пиши `F ::= [ξ∈A] E(ξ)`.
131
+
132
+ ## Конвенция: плохо / хорошо
133
+
134
+ У `X#` / `C#` / `S#` конвенция обязательна по смыслу (иначе `schemaMissingConvention`).
135
+
136
+ | Плохо | Хорошо |
137
+ | --------------------------------------------- | ----------------------------------------------------------------- |
138
+ | `convention: 'X1'` | `convention: 'сотрудники организации'` |
139
+ | `convention: 'отношение'` | `convention: 'ориентированные рёбра: пара (начало, конец)'` |
140
+ | пустая / копия термина без предметного смысла | кто элементы, как читать компоненты кортежа, какой порядок в паре |
141
+
142
+ Конвенция — предметный язык; она не заменяет формулу и не проверяется ЯРЭ.
143
+
144
+ ## Типичные диагностики (было → стало)
145
+
146
+ Полный справочник — [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md). Исправляй диапазон `from`/`to` в формуле.
147
+
148
+ | `name` | Было | Стало |
149
+ | ------------------------------------------------- | -------------------------------------------------- | ---------------------------------------------------------------- |
150
+ | `typesNotEqual` | смешение ступеней в `∪` / `=` | выровняй типы или введи промежуточный терм |
151
+ | `globalNotTyped` | ссылка на ещё не введённый / нетипизированный `S1` | сначала поставщик в том же или предыдущем patch |
152
+ | `arithmeticNotSupported` / `orderingNotSupported` | `ξ+1` или `α<β` при `ξ∈X1` | `Z` или `C#` ([BASE-SELECTION.md](../../docs/BASE-SELECTION.md)) |
153
+ | `globalFuncParenCall` | `F1(ξ)` | `F1[ξ]` |
154
+ | `globalFuncWithoutArgs` | голое `F1` в формуле | `F1[…]` |
155
+ | `radicalUsage` | `R1` в теле формулы или как конституента | `R#` только в `[…]` у `F#`/`P#` |
156
+ | `schemaMissingConvention` | `X1` без конвенции | добавь предметную конвенцию |
157
+ | `schemaHomonym` | одинаковый термин у разных конституент | различай термины |
158
+ | `schemaDependencyCycle` | круг в определениях (`F3 → P1 → F3`) | разорви цикл: убери взаимные ссылки |
159
+ | `localOutOfScopeParentheses` | `∀a∈S P(a) & Q(a)` | `∀a∈S (P(a) & Q(a))` |
160
+ | `invalidFilterSyntax` | кривой `Fi` | `Fi1[{ξ}](S1)` / `Fi1,2[D1,D2](S1)` |
161
+
162
+ ```ts
163
+ const analysis = tool.analyzeExpression({
164
+ expression: 'F1(ξ)', // ошибка: скобки вызова
165
+ cstType: CstType.TERM
166
+ });
167
+ // смотри analysis.diagnostics[].name, from, to
168
+ ```
169
+
170
+ ## Scratch-проверка одной формулы
171
+
172
+ Без полной схемы задачи — минимальный стенд:
173
+
174
+ ```ts
175
+ const tool = new RSToolAgent();
176
+ tool.applySchemaPatch({
177
+ items: [
178
+ { alias: 'X1', convention: 'элементы' },
179
+ { alias: 'S1', definitionFormal: 'ℬ(X1×X1)', convention: 'рёбра' }
180
+ ]
181
+ });
182
+ const draft = tool.analyzeExpression({
183
+ expression: '[ξ∈X1] Pr2(Fi1[{ξ}](S1))',
184
+ cstType: CstType.FUNCTION
185
+ });
186
+ ```
187
+
188
+ Семантику значения — отдельная маленькая КМ ([MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
189
+
19
190
  ## `X#`, `C#` и `Z`
20
191
 
21
192
  Выбор основания — [BASE-SELECTION.md](../../docs/BASE-SELECTION.md).
@@ -66,7 +237,7 @@ const scratch = tool.evaluate({ expression: '1+2', cstType: CstType.TERM });
66
237
  const recalc = tool.recalculateModel();
67
238
  ```
68
239
 
69
- ## Экспорт / импорт
240
+ ## Экспорт / импорт и Portal round-trip
70
241
 
71
242
  ```ts
72
243
  const payload = tool.exportSession();
@@ -75,10 +246,30 @@ const restored = tool.importData(payload, 'session');
75
246
  const schemaJson = tool.exportPortal({ kind: 'schema' });
76
247
  const modelObj = tool.exportPortal({ kind: 'model', format: 'object' });
77
248
 
78
- // Portal GET /api/rsforms/:id/details
79
- const session = tool.importData(portalDetailsJsonString);
249
+ // Portal GET /api/rsforms/:id/details → строка или объект
250
+ const session = tool.importData(portalDetailsJsonString); // kind auto
251
+ tool.listDiagnostics();
252
+ // правки…
253
+ const forPortal = tool.exportPortal({ kind: 'schema' });
80
254
  ```
81
255
 
256
+ Не передавай `/details` с `kind: 'session'`. REST и curl — [PORTAL-API.md](../../docs/PORTAL-API.md).
257
+
258
+ ## Образец текста ревью (не код)
259
+
260
+ После [воркфлоу ревью](GUIDE.md#ревью--оценка-готовой-кс) ответ может выглядеть так:
261
+
262
+ > **Вердикт:** схема покрывает роли и отношение подчинения; главный риск — вычисляемая «степень» задана графиком пар вместо терм-функции.
263
+ >
264
+ > **Диагностики:** 0 ошибок expression; 1 предупреждение schema (омоним термина).
265
+ >
266
+ > **Важно:** `D4` — множество пар «сотрудник — число подчинённых»; лучше `F#` с `card`.
267
+ > **Замечание:** у `S2` конвенция слишком общая («связь»).
268
+ >
269
+ > **Покрытие:** сущности и иерархия есть; нет высказывания о единственности руководителя.
270
+ >
271
+ > **Рекомендации:** (1) заменить `D4` на `F#`; (2) уточнить конвенцию `S2`; (3) при необходимости добавить `T#`. Правки не применял — жду подтверждения.
272
+
82
273
  ## Stdio (плоские params)
83
274
 
84
275
  ```json
@@ -10,6 +10,7 @@
10
10
  - Анализатор: `@rsconcept/domain`.
11
11
  - Stdio-обёртка: `npx rstool-wrapper`, JSON построчно.
12
12
  - Node-клиент: `RSToolWrapperClient`.
13
+ - MCP: `@rsconcept/rstool-mcp` (tools в `snake_case` — [REFERENCE.md](REFERENCE.md)).
13
14
 
14
15
  ## Быстрый контракт для агента
15
16
 
@@ -20,6 +21,25 @@
20
21
  - Модель: `setModelValues`, `evaluate`, `recalculateModel`.
21
22
  - Перед сохранением сомнительной формулы — `analyzeExpression`.
22
23
 
24
+ ## Задача → чтение
25
+
26
+ Не открывай все `docs/` сразу. Выбери строку по запросу пользователя, прочитай **минимум**, остальное — только если упрёшься в пробел.
27
+
28
+ | Задача пользователя | Читать (минимум) | Не читать сразу |
29
+ | :------------------------------------------------------- | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------------------------------------- |
30
+ | Собрать / существенно развить КС из текста | этот GUIDE → [концептуализация](#концептуализация-кс-из-содержания-источника); [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md); [BASE-SELECTION.md](../../docs/BASE-SELECTION.md); при сомнении — [EXAMPLES.md](EXAMPLES.md) | PORTAL-API целиком; TYPIFICATION целиком |
31
+ | Оценить / отревьюить готовую КС (без запроса «перепиши») | этот GUIDE → [ревью / оценка](#ревью--оценка-готовой-кс); [чеклист ревью](#ревью-концептуальной-схемы); [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md); при импорте — [PORTAL-API.md](../../docs/PORTAL-API.md) | EXAMPLES с batch patch; полный SYNTAX |
32
+ | Точечные правки существующей схемы | этот GUIDE → [редактирование](#редактирование-и-проверка-схемы); [REFERENCE.md](REFERENCE.md) при вызовах | CONCEPTUAL-SCHEMA целиком |
33
+ | Починить формулу / диагностики | этот GUIDE → [цикл диагностик](#цикл-диагностик); [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md); [EXAMPLES.md](EXAMPLES.md) «типичные диагностики» | CONCEPTUAL-SCHEMA; PORTAL-API |
34
+ | Импорт / правка по ссылке Portal | этот GUIDE → [Portal](#оценка-или-правка-кс-из-portal); [PORTAL-API.md](../../docs/PORTAL-API.md) | SYNTAX; BASE-SELECTION |
35
+ | Проверить смысл на данных / КМ | этот GUIDE → [КМ](#проверка-на-маленькой-км); [MODEL-TESTING.md](../../docs/MODEL-TESTING.md) | DOMAIN/ОСС; CONCEPTUAL-SCHEMA |
36
+ | Объяснить синтаксис / генераторы / `F#`/`P#` | [SYNTAX.md](../../docs/SYNTAX.md); при необходимости [EXAMPLES.md](EXAMPLES.md) | воркфлоу сессий |
37
+ | Разобрать типизацию / ступени | [TYPIFICATION.md](../../docs/TYPIFICATION.md) | PORTAL-API |
38
+ | Вызовы API / stdio / MCP | [REFERENCE.md](REFERENCE.md) | docs языка |
39
+ | Термины КС, ядро/тело, не путать ярлыки | [DOMAIN.md](../../docs/DOMAIN.md) | — |
40
+
41
+ Полный индекс справочников — [ниже](#что-читать) и в [docs/README.md](../../docs/README.md).
42
+
23
43
  ## Границы правок: не трогай пакет rstool без запроса
24
44
 
25
45
  Задача по КС, Portal или источнику пользователя **не означает** правку дерева `rsconcept/rstool/`.
@@ -45,10 +65,10 @@ pnpm --filter @rsconcept/rstool exec tsx path/to/your/build-schema.ts
45
65
 
46
66
  Пути — относительно этого файла.
47
67
 
48
- - API, методы, stdio: [REFERENCE.md](REFERENCE.md).
49
- - Примеры: [EXAMPLES.md](EXAMPLES.md).
68
+ - API, методы, stdio, MCP: [REFERENCE.md](REFERENCE.md).
69
+ - Примеры и антипаттерны: [EXAMPLES.md](EXAMPLES.md).
50
70
  - Термины предметной области: [../../docs/DOMAIN.md](../../docs/DOMAIN.md).
51
- - **`X#` / `C#` / `Z`:** [../../docs/BASE-SELECTION.md](../../docs/BASE-SELECTION.md) — когда какое основание вводить.
71
+ - **`X#` / `C#` / `Z`:** [../../docs/BASE-SELECTION.md](../../docs/BASE-SELECTION.md).
52
72
  - Концептуализация, создание схемы: [../../docs/CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
53
73
  - Конституенты и валидация: [../../docs/CONSTITUENTA.md](../../docs/CONSTITUENTA.md).
54
74
  - Синтаксис ЯРЭ: [../../docs/SYNTAX.md](../../docs/SYNTAX.md).
@@ -56,7 +76,7 @@ pnpm --filter @rsconcept/rstool exec tsx path/to/your/build-schema.ts
56
76
  - Проверка определений на КМ: [../../docs/MODEL-TESTING.md](../../docs/MODEL-TESTING.md).
57
77
  - Диагностики: [../../docs/DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
58
78
  - REST Portal: [../../docs/PORTAL-API.md](../../docs/PORTAL-API.md).
59
- - Репозиторий Portal (исходники, API, nginx): [ConceptPortal на GitHub](https://github.com/IRBorisov/ConceptPortal).
79
+ - Репозиторий Portal: [ConceptPortal на GitHub](https://github.com/IRBorisov/ConceptPortal).
60
80
 
61
81
  ## Воркфлоу
62
82
 
@@ -86,6 +106,8 @@ pnpm --filter @rsconcept/rstool exec tsx path/to/your/build-schema.ts
86
106
  Portal JSON из `/details` не является форматом `exportSession`. Используй `importData(payload)` —
87
107
  kind `auto` (default) определит `portal-details` или `portal-schema`. Явный kind: `'portal-details'`, `'portal-schema'`, `'session'`.
88
108
 
109
+ Если задача — **оценка** схемы из Portal, а не правка: после импорта иди в [ревью / оценка](#ревью--оценка-готовой-кс), не начинай массовый refactor.
110
+
89
111
  ### Концептуализация (КС из содержания источника)
90
112
 
91
113
  Когда нужно построить или существенно развить КС по тексту ПО, требованиям или предметному описанию. Правила редукции, слоёв и паттернов — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
@@ -93,7 +115,7 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
93
115
  1. Собери словарь: неопределяемые понятия, ключевые отношения, сценарий синтеза.
94
116
  2. Добавь независимые неопределяемые понятия `X#`, `C#`, `S#` с конвенциями из источника (не копируй дословно). Для выбора `X#` vs `C#` vs `Z` — [BASE-SELECTION.md](../../docs/BASE-SELECTION.md).
95
117
  3. Всё, что выводится из уже введённых понятий, оформляй как `D#` / `F#` / `P#`, а не как новое `X#` / `C#` / `S#`.
96
- 4. Вводи промежуточные `D#`, `F#`, `P#` для проекций, функциональных связей и повторяющихся фрагментов формул.
118
+ 4. Вводи промежуточные `D#`, `F#`, `P#` для проекций, функциональных связей и повторяющихся фрагментов формул. Если зависимость имеет вид «для `ξ` вычислить значение», оформляй её как `F#`, а не как множество пар `I{(ξ,σ)|…}` ([CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md), «Терм-функция вместо множества пар»).
97
119
  5. Добавь `A#` и `T#` после терминов, на которые они опираются.
98
120
  6. Перед каждым patch — `analyzeExpression`; при ошибках — [цикл диагностик](#цикл-диагностик).
99
121
  7. Сомнительную семантику проверь на маленькой КМ ([цикл КМ](#проверка-на-маленькой-км), [MODEL-TESTING.md](../../docs/MODEL-TESTING.md)).
@@ -101,9 +123,30 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
101
123
 
102
124
  Дальше — обычное [редактирование и проверка](#редактирование-и-проверка-схемы): commit, export.
103
125
 
126
+ ### Ревью / оценка готовой КС
127
+
128
+ Когда пользователь просит **оценить**, **проревьюить**, **найти проблемы** в уже существующей схеме (сессия, JSON, ссылка Portal) — и **не** просит сразу переписать её.
129
+
130
+ **Правило:** без явного запроса на правку не делай массовый рефакторинг и не заменяй схему «улучшенной версией». Сначала отчёт; правки — только по согласованию или если пользователь сразу сказал «исправь».
131
+
132
+ 1. Загрузи схему: текущая сессия, `importData`, или Portal → [PORTAL-API.md](../../docs/PORTAL-API.md).
133
+ 2. `listDiagnostics()` — раздели `expression` / `schema` / `model`; зафиксируй ошибки и предупреждения.
134
+ 3. `getSessionState('summary')` — обзор состава; при необходимости `full` для формул.
135
+ 4. Структурный проход по [чеклисту ревью](#ревью-концептуальной-схемы) и [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md):
136
+ - неопределяемые vs производные (`S#` там, где должно быть `D#`/`F#`/`P#`);
137
+ - `X#` / `C#` / `Z` ([BASE-SELECTION.md](../../docs/BASE-SELECTION.md));
138
+ - терм-функции vs множества пар;
139
+ - радикалы `R#` не объявлены конституентами;
140
+ - покрытие задачи vs избыточность.
141
+ 5. Severity в отчёте:
142
+ - **блокер** — диагностики `error`, схема не анализируется / ломает вычисление;
143
+ - **важно** — нарушение правил проектирования (лишнее `S#`, график вместо `F#`, смешение экспликаций);
144
+ - **замечание** — стиль, именование, возможные упрощения, пробелы покрытия.
145
+ 6. Ответ — по [шаблону ревью](#шаблон-ответа-ревью). Предлагай конкретные правки списком; применяй их только по запросу.
146
+
104
147
  ### Цикл диагностик
105
148
 
106
- Когда `analysis.success === false` или `listDiagnostics` не пуст. Коды и типичные ошибки — [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md).
149
+ Когда `analysis.success === false` или `listDiagnostics` не пуст. Коды и типичные ошибки — [DIAGNOSTICS.md](../../docs/DIAGNOSTICS.md); короткие «было → стало» — [EXAMPLES.md](EXAMPLES.md).
107
150
 
108
151
  1. Вызови `listDiagnostics()` — смотри `kind`: `expression` (формула), `schema` (омонимы, дубликаты, термин/конвенция), `model` (интерпретация).
109
152
  2. Для черновика формулы — `analyzeExpression` (без сохранения).
@@ -134,6 +177,10 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
134
177
 
135
178
  ## Формат ответа агента
136
179
 
180
+ Выбери шаблон по типу задачи. Не вставляй большой JSON в чат без запроса пользователя.
181
+
182
+ ### Сборка / правка схемы
183
+
137
184
  В конце работы сообщи:
138
185
 
139
186
  - что изменено в схеме или модели;
@@ -141,7 +188,28 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
141
188
  - какой экспорт получен: сессия / схема для Portal / модель для Portal;
142
189
  - какие проверки выполнены: анализ выражений / вычисление / пересчёт модели / тесты.
143
190
 
144
- Не вставляй большой JSON в чат без запроса пользователя.
191
+ ### Шаблон ответа: ревью
192
+
193
+ 1. **Краткий вердикт** (1–2 предложения): пригодна ли схема к задаче, главный риск.
194
+ 2. **Диагностики:** число ошибок / предупреждений по `expression` / `schema` / `model` (без полного JSON).
195
+ 3. **Находки** списком: блокер → важно → замечание; у каждой — имя конституенты и суть.
196
+ 4. **Покрытие:** что из задачи отражено; чего не хватает.
197
+ 5. **Рекомендации:** конкретные правки; не применяй их без запроса.
198
+ 6. **Проверки:** что уже сделано (import, listDiagnostics, выборочный анализ).
199
+
200
+ ### Шаблон ответа: диагностики
201
+
202
+ - какие конституенты / формулы затронуты;
203
+ - `name` диагностики и смысл простым языком;
204
+ - что изменено в формальном определении (или почему правка не нужна);
205
+ - повторная проверка: чисто / осталось.
206
+
207
+ ### Шаблон ответа: объяснение формулы
208
+
209
+ - роль конституенты и термин;
210
+ - формула как есть;
211
+ - по шагам: что вычисляется / утверждается;
212
+ - на какие понятия опирается; типизация.
145
213
 
146
214
  ### Язык ответа
147
215
 
@@ -187,7 +255,7 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
187
255
 
188
256
  ### Ревью концептуальной схемы
189
257
 
190
- Перед завершением концептуализации или крупного изменения. Правила — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
258
+ Перед завершением концептуализации, крупного изменения или как проход в [воркфлоу ревью](#ревью--оценка-готовой-кс). Правила — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
191
259
 
192
260
  - [ ] Атрибутивная и родоструктурная экспликации не смешаны без явного запроса.
193
261
  - [ ] Нет избыточной проверки принадлежности к собственной типизации (`x∈X1`, если `x` уже в `X1`).
@@ -196,5 +264,8 @@ kind `auto` (default) определит `portal-details` или `portal-schema`
196
264
  - [ ] Покрыты главные сущности, роли, отношения, утверждения.
197
265
  - [ ] В текстовых определениях используются только понятия из схемы.
198
266
  - [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
267
+ - [ ] Вычисляемые зависимости «аргумент → значение» оформлены как `F#` с вызовами, а не как пары / тройки + `Pr`/`Fi` (см. [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md), «Терм-функция вместо множества пар»).
268
+ - [ ] Пары / `I{(ξ,σ)|…}` оставлены только для истинных отношений, графиков как объектов или многозначных связей.
199
269
  - [ ] `R#` в `[…]` у `F#` / `P#` не считается пропущенной конституентой; радикалы не добавляют в схему как `X#` / `S#` / `D#`.
200
270
  - [ ] Сомнительная семантика проверена на маленькой КМ при наличии тестовых данных.
271
+ - [ ] При чистом ревью: отчёт по [шаблону](#шаблон-ответа-ревью) выдан **до** любых массовых правок.