@rsconcept/rstool 0.4.0 → 0.5.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.
- package/README.md +1 -1
- package/docs/CONCEPTUAL-SCHEMA.md +66 -28
- package/docs/CONSTITUENTA.md +11 -9
- package/docs/PORTAL-API.md +1 -0
- package/docs/TYPIFICATION.md +3 -9
- package/package.json +1 -1
- package/skills/rstool-helper/EXAMPLES.md +50 -0
- package/skills/rstool-helper/GUIDE.md +4 -30
package/README.md
CHANGED
|
@@ -4,7 +4,7 @@ Agent-facing library for **incremental RSForm construction**, **RSLang expressio
|
|
|
4
4
|
|
|
5
5
|
## Agent skill
|
|
6
6
|
|
|
7
|
-
RS language + rstool workflows for agents: `skills/rstool-helper/` (`GUIDE.md`, `REFERENCE.md`, `EXAMPLES.md`) and `docs/` (`DOMAIN.md`, `SYNTAX.md`, …). A **thin** entry skill is installed into the project’s agent skills folder; see [Installing the agent skill](#installing-the-agent-skill) below.
|
|
7
|
+
RS language + rstool workflows for agents: `skills/rstool-helper/` (`GUIDE.md`, `REFERENCE.md`, `EXAMPLES.md`) and `docs/` (`DOMAIN.md`, `CONCEPTUAL-SCHEMA.md` for relation-first KS design, `SYNTAX.md`, …). A **thin** entry skill is installed into the project’s agent skills folder; see [Installing the agent skill](#installing-the-agent-skill) below.
|
|
8
8
|
|
|
9
9
|
## Install
|
|
10
10
|
|
|
@@ -9,15 +9,7 @@
|
|
|
9
9
|
- Добавляй понятие, если оно дает новый критерий, роль, отношение, инвариант или правило.
|
|
10
10
|
- Если пользователь постоянно переформулирует одно различие, введи отдельную конституенту.
|
|
11
11
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
`term`, `definitionText`, `convention` держи в языке схемы и в ее словаре.
|
|
15
|
-
|
|
16
|
-
- `term` — короткое имя понятия.
|
|
17
|
-
- `definitionText` — текстовая интерпретация формального определения.
|
|
18
|
-
- `convention` — соглашение для неопределяемого понятия.
|
|
19
|
-
|
|
20
|
-
Перед записью `definitionText` проверь существительные: важный предметный термин должен быть введен как `N#`, `X#`, `C#`, `S#` или `D#`.
|
|
12
|
+
Подробнее про структуру и поля конституент см. в [CONSTITUENTA.md](./CONSTITUENTA.md).
|
|
21
13
|
|
|
22
14
|
## Номиноиды и атрибутирование
|
|
23
15
|
|
|
@@ -25,7 +17,7 @@
|
|
|
25
17
|
|
|
26
18
|
Атрибутирование связывает номиноид с другими конституентами через атрибуты. Это отдельная атрибутивная экспликация, не замена `S#`, `D#`, `A#` в родоструктурной экспликации.
|
|
27
19
|
|
|
28
|
-
Правило для `rstool`: не смешивай атрибутивную и родоструктурную
|
|
20
|
+
Правило для `rstool`: не смешивай атрибутивную и родоструктурную экспликацию если явно не указано пользователем.
|
|
29
21
|
|
|
30
22
|
## Родовые структуры
|
|
31
23
|
|
|
@@ -34,19 +26,64 @@
|
|
|
34
26
|
Паттерн для отношения:
|
|
35
27
|
|
|
36
28
|
1. `X1` — базисное множество.
|
|
37
|
-
2. `S1: ℬ(X1×X1)` — отношение;
|
|
29
|
+
2. `S1: ℬ(X1×X1)` — отношение; предметное пояснение в `convention`.
|
|
38
30
|
3. `D# := Pr1(S1)`, `D# := Pr2(S1)` — именованные компоненты.
|
|
39
|
-
4. Сложные термы строятся поверх этих `D#`.
|
|
31
|
+
4. Сложные термы строятся поверх этих `D#` и `S#`.
|
|
32
|
+
|
|
33
|
+
Если повторяется цепочка вроде `Pr2(Fi1[D](S7))`, введи промежуточный терм или функцию `F#`.
|
|
34
|
+
|
|
35
|
+
## Подход relation-first
|
|
36
|
+
|
|
37
|
+
Используй при объединении нескольких исходных КС в одну предметную модель и при появлении длинных цепочек `∃d1…∃dn` в разных термах.
|
|
38
|
+
|
|
39
|
+
### Семантическая лестница
|
|
40
|
+
|
|
41
|
+
Строй схему слоями; каждый следующий слой ссылается только на предыдущие:
|
|
42
|
+
|
|
43
|
+
| Слой | Роль | Что вводить |
|
|
44
|
+
| :--- | :--------------------- | :------------------------------------------------------------------------------------------- |
|
|
45
|
+
| 1 | Базис | `X#`, `C#` — пустой `definitionFormal`, смысл в `convention` / `definitionText` из источника |
|
|
46
|
+
| 2 | Структуры | `S#` — типизация `ℬ(…×…)` и конвенция на кортеж |
|
|
47
|
+
| 3 | Инварианты | `A#` — короткие ограничения (см. ниже про `card`) |
|
|
48
|
+
| 4 | Параметрический доступ | `F#` — «локальный API»: `[α∈…] Pr*(Fi*[…](S#))` |
|
|
49
|
+
| 5 | Центральное отношение | один `D#` (или `S#` с конвенцией), задающий полную траекторию синтеза |
|
|
50
|
+
| 6 | Витрина понятий | `D#` через `Pr*`, `Fi*`, `card`, `red`; узкие `F#` для аналитики |
|
|
51
|
+
|
|
52
|
+
### Центральное отношение
|
|
53
|
+
|
|
54
|
+
Когда в тексте описан единый сценарий, зафиксируй его **одним** объектом:
|
|
55
|
+
|
|
56
|
+
```text
|
|
57
|
+
D13 ::= I{(α, ξ1, τ, ξ2, β1, β2, ρ, ξ3) |
|
|
58
|
+
α∈S6; ξ1∈X2; τ∈F7[α,ξ1]; …; ξ3∈S3
|
|
59
|
+
}
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
(Имена и арность — по предметной области; важна форма: кортеж + ограничения через уже введённые `F#` и `S#`.)
|
|
63
|
+
|
|
64
|
+
Далее можешь дать название необходимым частям кортежа с помощью `D#` через `Pr#`
|
|
65
|
+
|
|
66
|
+
### Инварианты: `card` вместо длинных `∀`
|
|
67
|
+
|
|
68
|
+
Для функциональности отношения удобно:
|
|
69
|
+
|
|
70
|
+
```text
|
|
71
|
+
card(S1) = card(Pr1,2(S1))
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
Эквивалентно идее `∀d1,d2∈S1 ...`
|
|
75
|
+
|
|
76
|
+
Оставляй `∀`/`∃`, когда не получается заменить на теоретико-множественные и структурные конструкции.
|
|
40
77
|
|
|
41
|
-
|
|
78
|
+
### Проекции вместо повторных кванторов
|
|
42
79
|
|
|
43
|
-
|
|
80
|
+
Если условие уже задано на `S#` или центральном `D#`, производный терм — это почти всегда:
|
|
44
81
|
|
|
45
|
-
`
|
|
82
|
+
- `Prk(…)` / `Pri,j(…)`;
|
|
83
|
+
- `Fi*k[{…}](…)`;
|
|
84
|
+
- `D{ξ∈… | F[ξ] = …}` или `card(F[ξ]) = 1`.
|
|
46
85
|
|
|
47
|
-
|
|
48
|
-
- задавать уникальность, тотальность, непересечение, порядок, область и диапазон;
|
|
49
|
-
- оправдывать `debool(...)`: внутреннее множество должно быть гарантированно одноэлементным.
|
|
86
|
+
Перед тем как писать `D{x∈… | ∃d1∈… ∃d2∈…}`, проверь: нельзя ли выразить через `Pr` от уже введённого отношения.
|
|
50
87
|
|
|
51
88
|
## Проверка на маленькой модели
|
|
52
89
|
|
|
@@ -61,18 +98,19 @@
|
|
|
61
98
|
- Атрибутивная экспликация не смешана с родоструктурной без явного запроса пользователя.
|
|
62
99
|
- Не добавляй проверки принадлежности к собственной типизации: если `x` уже объявлен в `X1`, `x ∈ X1` избыточно.
|
|
63
100
|
- Покрыты главные предметные сущности, роли, отношения и утверждения.
|
|
64
|
-
-
|
|
65
|
-
- У каждой аксиомы
|
|
101
|
+
- Повторяющиеся отборы вынесены в `F#`, а не размазаны по термам.
|
|
102
|
+
- У каждой аксиомы понятна цель.
|
|
66
103
|
- Частые падения аксиом в модели указывают на ошибку данных или семантики схемы.
|
|
67
104
|
- Сомнительные выражения проверены на маленькой КМ, если есть показательные тестовые данные.
|
|
68
105
|
|
|
69
106
|
## Рабочий порядок
|
|
70
107
|
|
|
71
|
-
1. Собери словарь предметной
|
|
72
|
-
2. Добавь `X#` и `C#` с
|
|
73
|
-
3. Добавь
|
|
74
|
-
4.
|
|
75
|
-
5.
|
|
76
|
-
6.
|
|
77
|
-
7.
|
|
78
|
-
8.
|
|
108
|
+
1. Собери словарь предметной области (базисы, ключевые отношения, сценарий синтеза).
|
|
109
|
+
2. Добавь `X#` и `C#` с конвенциями из источника.
|
|
110
|
+
3. Добавь базовые `S#` (трансформация, перевод, допускание, выбор, цели, субъекты).
|
|
111
|
+
4. Добавь `A#` на структуры (`card`, покрытие `Pr1,2(S#)=…`, принадлежность выбора).
|
|
112
|
+
5. Введи `F#` для типовых запросов.
|
|
113
|
+
6. Производные понятия — `Pr*` / `Fi*` / `F#` от центрального `D#` и базовых `S#`.
|
|
114
|
+
7. Узкие классификаторы (`для любой обстановки`, `для одного индивида`) — через `F#` и `card`/`=` с `X#`, не новые монолиты.
|
|
115
|
+
8. Перед каждым upsert — `analyzeExpression`.
|
|
116
|
+
9. Для сомнительной семантики — маленькая КМ (`MODEL-TESTING.md`).
|
package/docs/CONSTITUENTA.md
CHANGED
|
@@ -2,21 +2,23 @@
|
|
|
2
2
|
|
|
3
3
|
Читай перед `addOrUpdateConstituenta`.
|
|
4
4
|
|
|
5
|
-
## Поля
|
|
5
|
+
## Поля
|
|
6
6
|
|
|
7
7
|
- `id` — стабильный id внутри сессии.
|
|
8
8
|
- `alias` — имя вида `X1`, `D5`, `F2`; префикс должен совпадать с `cstType`.
|
|
9
9
|
- `cstType` — роль конституенты.
|
|
10
10
|
- `definitionFormal` — формальное определение; для `basic` и `constant` строго `''`.
|
|
11
|
-
- `term` —
|
|
12
|
-
- `definitionText` —
|
|
13
|
-
- `convention` — соглашение для неопределяемого понятия.
|
|
11
|
+
- `term` — термин в естественном языке, используется в текстовых определениях. Если обозначаются элементы множества, то пишется с маленькой буквы во множественном числе. Иначе с большой буквы в единственном.
|
|
12
|
+
- `definitionText` — текстовое определение, соответствующее формальному определению. Для простых выражений не указывается если совпадает с термином. Каждый используемый термин должен быть введен в схеме.
|
|
13
|
+
- `convention` — соглашение для неопределяемого понятия. Может использовать термины, не определенные в схеме.
|
|
14
14
|
|
|
15
15
|
Пропущенные текстовые поля сохраняются как `''`. Пиши `term`, `definitionText`, `convention` на одном языке: в языке схемы или, для новой схемы, в языке запроса.
|
|
16
16
|
|
|
17
|
+
Не добавляй точку в конце текстовых полей.
|
|
18
|
+
|
|
17
19
|
## `cstType`
|
|
18
20
|
|
|
19
|
-
- `nominal` / `N#` — номиноид. В родоструктурной экспликации не используется.
|
|
21
|
+
- `nominal` / `N#` — номиноид. В родоструктурной экспликации и формальных определениях не используется.
|
|
20
22
|
- `basic` / `X#` — базисное множество; формула пустая.
|
|
21
23
|
- `constant` / `C#` — константное множество; формула пустая.
|
|
22
24
|
- `structure` / `S#` — родовая структура; формула задает типизацию.
|
|
@@ -26,13 +28,13 @@
|
|
|
26
28
|
- `axiom` / `A#` — аксиома; нужна типизация `Logic`.
|
|
27
29
|
- `statement` / `T#` — высказывание; нужна типизация `Logic`.
|
|
28
30
|
|
|
29
|
-
`basic`, `constant`, `structure` можно интерпретировать через `setConstituentaValue`. `term`, `axiom`, `statement` вычисляются и напрямую не задаются.
|
|
31
|
+
В модели `basic`, `constant`, `structure` можно интерпретировать через `setConstituentaValue`. `term`, `axiom`, `statement` вычисляются и напрямую не задаются.
|
|
30
32
|
|
|
31
|
-
##
|
|
33
|
+
## Различие родовой структуры и терма
|
|
32
34
|
|
|
33
|
-
`S#` —
|
|
35
|
+
`S#` — неопределяемое понятие - родовая структура. Пример: `definitionFormal: 'ℬ(X1×X1)'` описывает ступень элемента: множество пар над `X1`.
|
|
34
36
|
|
|
35
|
-
`D#` — терм. `definitionFormal: 'X1×X1'` строит полный декартов продукт.
|
|
37
|
+
`D#` — производное понятие - терм. Пример: `definitionFormal: 'X1×X1'` строит полный декартов продукт.
|
|
36
38
|
|
|
37
39
|
Для бинарного отношения обычно нужно:
|
|
38
40
|
|
package/docs/PORTAL-API.md
CHANGED
package/docs/TYPIFICATION.md
CHANGED
|
@@ -29,16 +29,10 @@
|
|
|
29
29
|
|
|
30
30
|
## `AnalysisResult.type`
|
|
31
31
|
|
|
32
|
-
`type` приходит как JSON анализатора: `Record<string, unknown> | null`.
|
|
33
|
-
|
|
34
|
-
Правила:
|
|
35
|
-
|
|
36
32
|
1. Сначала проверь `analysis.success === true` и `analysis.type !== null`.
|
|
37
33
|
2. Не разбирай объект вручную; используй helpers из `@rsconcept/domain`.
|
|
38
34
|
3. `valueClass` уточняет вычислимость: `Value`, `Property`, `Invalid`.
|
|
39
35
|
|
|
40
|
-
Полезные API: `TypeID`, `TypePath`, `makeTypePath`, `parseTypeText(...)`.
|
|
41
|
-
|
|
42
36
|
## `S#` и `D#`
|
|
43
37
|
|
|
44
38
|
- У `structure` (`S#`) `definitionFormal` читается как типизация. `ℬ(X1×X1)` описывает множество пар.
|
|
@@ -52,14 +46,14 @@
|
|
|
52
46
|
|
|
53
47
|
Требуют подходящую ступень:
|
|
54
48
|
|
|
55
|
-
- `red(S)` — нужно `S :
|
|
49
|
+
- `red(S)` — нужно `S : ℬℬ(H)`.
|
|
56
50
|
- `debool(S)` — нужно одноэлементное множество.
|
|
57
51
|
- `pr1(tuple)`, `Pr1(S)` — нужна достаточная арность.
|
|
58
|
-
- `Fi1[
|
|
52
|
+
- `Fi1[a](S)` — `a` должен соответствовать выбранной проекции.
|
|
59
53
|
|
|
60
54
|
## Частые ошибки
|
|
61
55
|
|
|
62
56
|
- `debool(S)` без гарантии синглетона.
|
|
63
57
|
- `pr3((a, b))`: индекс вне арности.
|
|
64
|
-
- `Fi1,2[
|
|
58
|
+
- `Fi1,2[a](S)`: параметр `a` не совпал с двумя проекциями.
|
|
65
59
|
- `A#` и `T#` не имеют `Logic`: будет `expectedLogic`.
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsconcept/rstool",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.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",
|
|
@@ -162,6 +162,52 @@ if (!result.success || result.status !== EvalStatus.HAS_DATA || JSON.stringify(r
|
|
|
162
162
|
|
|
163
163
|
Use this pattern for tests that protect important definitions. Full kinship model: `../../examples/build-kinship-rsmodel.ts`. More notes: `../../docs/MODEL-TESTING.md`.
|
|
164
164
|
|
|
165
|
+
## Relation-first synthesis (layered KS)
|
|
166
|
+
|
|
167
|
+
Pattern for merging sub-schemas (transformation + transition + choice → stimulation). Reference: Portal `D01B03` / rsform `843`.
|
|
168
|
+
|
|
169
|
+
1. **Structures** — one `S#` per mechanism, typification only:
|
|
170
|
+
|
|
171
|
+
```text
|
|
172
|
+
S1: ℬ(X1×X2×X1) // transformation
|
|
173
|
+
S2: ℬ(X2×X3×X2) // transition
|
|
174
|
+
S4: ℬ(X2×X1×X3) // allowance (flat triple, not ℬ(X2×X1×ℬ(X3)))
|
|
175
|
+
S5: ℬ(X1×ℬ(X3)×X3) // choice
|
|
176
|
+
```
|
|
177
|
+
|
|
178
|
+
2. **Axioms** — short invariants:
|
|
179
|
+
|
|
180
|
+
```text
|
|
181
|
+
A1: Pr1,2(S1) = X1×X2
|
|
182
|
+
A2: card(S1) = card(Pr1,2(S1))
|
|
183
|
+
A4: card(S5) = card(Pr1,2(S5))
|
|
184
|
+
A5: ∀d∈S5 pr3(d)∈pr2(d)
|
|
185
|
+
```
|
|
186
|
+
|
|
187
|
+
3. **Functions** — parameterized access (reuse everywhere):
|
|
188
|
+
|
|
189
|
+
```text
|
|
190
|
+
F5[α,β] := Pr3(Fi1,2[{(β,α)}](S4)) // possible actions
|
|
191
|
+
F7[α,ξ] := F6[α, F5[α,ξ]] // chosen action in situation
|
|
192
|
+
```
|
|
193
|
+
|
|
194
|
+
4. **Central term** — one tuple relation, then projections:
|
|
195
|
+
|
|
196
|
+
```text
|
|
197
|
+
D13 ::= I{(α,ξ1,τ,ξ2,β1,β2,ρ,ξ3) | α∈S6; ξ1∈X2; τ∈F7[α,ξ1]; …; ξ3∈S3}
|
|
198
|
+
D14 := Pr3(D13) // stimuli
|
|
199
|
+
D18 := Pr2(D13) // initial situations
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
5. **Classifiers** — filter via `F#`, not a new `∃` chain:
|
|
203
|
+
|
|
204
|
+
```text
|
|
205
|
+
F8[α] := Pr2(Fi3[{α}](D13))
|
|
206
|
+
D22 := D{ξ∈D14 | F8[ξ] = X2} // stimulus valid in any situation
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
Upsert in dependency order; run `analyzeExpression` on `I{…}` before committing the central `D#`.
|
|
210
|
+
|
|
165
211
|
## Common mistakes
|
|
166
212
|
|
|
167
213
|
- `definitionFormal: 'Z'` on `basic` / `constant` → `definitionNotAllowed`.
|
|
@@ -169,6 +215,10 @@ Use this pattern for tests that protect important definitions. Full kinship mode
|
|
|
169
215
|
- Wrong `cstType` in `analyzeExpression` → role-specific errors.
|
|
170
216
|
- `term` with `X1×X1` for a relation → full Cartesian product, not relation typification.
|
|
171
217
|
- `structure` with `Pr1(S1)` → wrong role; projections belong on `term` / `function`.
|
|
218
|
+
- Same long `∃d1…∃dn` chain in many `D#` → define one central `D#` and use `Pr*` / `F#`.
|
|
219
|
+
- `S4: ℬ(X2×X1×ℬ(X3))` when you only need «individual allows actions» → prefer `ℬ(X2×X1×X3)` + `F5`.
|
|
220
|
+
- `∀x∈A, ∀y∈B` → invalid; nest: `∀x∈A (∀y∈B (…))`.
|
|
221
|
+
- Functional relation axiom as huge `∀⇒` → prefer `card(S)=card(Pr1,2(S))` when equivalent.
|
|
172
222
|
- `setConstituentaValue` on `term`, `axiom`, or `statement` → cannot set computed constituents directly.
|
|
173
223
|
- Evaluation before base bindings → missing value, empty result, or evaluation failure.
|
|
174
224
|
|
|
@@ -29,6 +29,8 @@ Paths are relative to this file.
|
|
|
29
29
|
|
|
30
30
|
## Workflow
|
|
31
31
|
|
|
32
|
+
Use this when editing or checking schemas and models.
|
|
33
|
+
|
|
32
34
|
1. `createSession`.
|
|
33
35
|
2. Add `basic` (`X#`) and `constant` (`C#`) with `definitionFormal: ''`.
|
|
34
36
|
3. Add dependencies before dependents.
|
|
@@ -41,26 +43,6 @@ Paths are relative to this file.
|
|
|
41
43
|
10. Persist with `exportSession` / `importSession`.
|
|
42
44
|
11. For user-uploadable Portal files, use `exportPortalSchema` for schema JSON or `exportPortalModel` for model JSON.
|
|
43
45
|
|
|
44
|
-
## Portal REST
|
|
45
|
-
|
|
46
|
-
rstool never calls Portal REST itself. Fetch live data outside rstool, then import constituents with `addOrUpdateConstituenta`.
|
|
47
|
-
|
|
48
|
-
- UI host: `https://portal.acconcept.ru`.
|
|
49
|
-
- API host: `https://api.portal.acconcept.ru`.
|
|
50
|
-
- Useful reads: `/api/rsforms/{id}`, `/api/rsforms/{id}/details`, `/api/library/{id}/versions/{v}`, `/api/oss/{id}`, `/api/models/{id}`, `/schema`.
|
|
51
|
-
- Do not scrape SPA HTML or reuse UI query params like `?tab=`.
|
|
52
|
-
|
|
53
|
-
## Syntax Cheatsheet
|
|
54
|
-
|
|
55
|
-
- Globals: `X1`, `C1`, `S1`, `D1`, `F1`, `P1`, `A1`, `T1`, `N1`, `R1`.
|
|
56
|
-
- Locals: `x`, `ξ`, `μ2`.
|
|
57
|
-
- Literals: `42`, `Z`, `∅`.
|
|
58
|
-
- Set expressions: `∪`, `∩`, `\`, `∆`, `×`, `ℬ(...)`, tuples, `Pr*`, `Fi*`.
|
|
59
|
-
- Logic: `¬`, `&`, `∨`, `⇒`, `⇔`, `∀`, `∃`, `=`, `≠`, `<`, `∈`, `⊆`.
|
|
60
|
-
- Parameterized expressions: `[arg1∈H1, arg2∈H2] body`.
|
|
61
|
-
|
|
62
|
-
Read tool output; do not infer types by inspection.
|
|
63
|
-
|
|
64
46
|
## Diagnostics Loop
|
|
65
47
|
|
|
66
48
|
1. Check `analysis.success`.
|
|
@@ -76,19 +58,11 @@ Read tool output; do not infer types by inspection.
|
|
|
76
58
|
3. Derived constituents in topological order.
|
|
77
59
|
4. Axioms and statements after their references.
|
|
78
60
|
|
|
79
|
-
## Natural-Language Fields
|
|
80
|
-
|
|
81
|
-
Keep `term`, `definitionText`, and `convention` in one language.
|
|
82
|
-
|
|
83
|
-
- Extending a schema: use the schema's existing language.
|
|
84
|
-
- New schema: use the user's request language.
|
|
85
|
-
|
|
86
61
|
## Checklist
|
|
87
62
|
|
|
88
63
|
- [ ] `sessionId` tracked.
|
|
89
|
-
- [ ] `basic` / `constant` formals are empty.
|
|
90
|
-
- [ ] Dependencies exist before upsert.
|
|
91
64
|
- [ ] `cstType` matches the role.
|
|
65
|
+
- [ ] Check schema and fix errors before showing result.
|
|
92
66
|
- [ ] Diagnostics handled before commit/export.
|
|
93
|
-
- [ ] Ambiguous semantics checked on a small model
|
|
67
|
+
- [ ] Ambiguous semantics checked on a small model.
|
|
94
68
|
- [ ] Base values set before evaluation.
|