@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.
- package/README.md +1 -1
- package/docs/CONCEPTUAL-SCHEMA.md +0 -29
- package/docs/CONSTITUENTA.md +0 -2
- package/docs/DIAGNOSTICS.md +1 -5
- package/docs/MODEL-TESTING.md +0 -9
- package/docs/README.md +4 -2
- package/examples/README.md +59 -0
- package/examples/agent-client.ts +76 -0
- package/examples/build-kinship-rsform.ts +466 -0
- package/examples/build-kinship-rsmodel.ts +125 -0
- package/examples/build-sample-rsform.ts +90 -0
- package/examples/build-sample-rsmodel.ts +106 -0
- package/examples/kinship/cli.ts +247 -0
- package/examples/kinship/constants.ts +12 -0
- package/examples/kinship/session.ts +190 -0
- package/examples/kinship/x1-actions.test.ts +136 -0
- package/examples/kinship/x1-actions.ts +371 -0
- package/examples/kinship-rsform-session.json +1221 -0
- package/examples/kinship-rsmodel-session.json +1263 -0
- package/examples/sample-rsform-session.json +134 -0
- package/examples/sample-rsmodel-session.json +163 -0
- package/package.json +3 -1
- package/skills/README.md +3 -3
- package/skills/rstool-helper/EXAMPLES.md +20 -29
- package/skills/rstool-helper/GUIDE.md +103 -49
- package/skills/rstool-helper/REFERENCE.md +105 -107
- package/skills/rstool-helper/SKILL.md +3 -3
|
@@ -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.
|
|
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`:
|
|
10
|
-
- `rstool-helper/REFERENCE.md`: API, stdio,
|
|
11
|
-
- `rstool-helper/EXAMPLES.md`:
|
|
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
|
|
1
|
+
# Примеры rstool
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Короткие примеры для агентов. Полные скрипты и JSON-сессии — `../../examples/` ([README](../../examples/README.md)). Воркфлоу — [GUIDE.md](GUIDE.md).
|
|
4
4
|
|
|
5
|
-
##
|
|
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: '
|
|
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
|
-
##
|
|
34
|
+
## Анализ перед upsert
|
|
35
35
|
|
|
36
|
-
|
|
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
|
-
|
|
49
|
+
Исправь диапазон `from` / `to` из отчёта и повтори анализ. При необходимости пересмотри определение целиком или разбей на несколько конституент.
|
|
50
50
|
|
|
51
|
-
##
|
|
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
|
-
|
|
67
|
+
Для сохранённых определений задай значения `basic`, `constant` и `structure`, затем вызови `evaluateConstituenta` или `recalculateModel`.
|
|
68
68
|
|
|
69
|
-
##
|
|
69
|
+
## Семантический smoke-тест
|
|
70
70
|
|
|
71
|
-
|
|
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(
|
|
106
|
+
throw new Error(`Ожидалось Pr1(S1) = первая координата; получено ${JSON.stringify(result)}`);
|
|
107
107
|
}
|
|
108
108
|
```
|
|
109
109
|
|
|
110
|
-
|
|
110
|
+
Подробнее: `../../docs/MODEL-TESTING.md`.
|
|
111
111
|
|
|
112
|
-
##
|
|
112
|
+
## Клиент обёртки
|
|
113
113
|
|
|
114
|
-
|
|
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
|
-
|
|
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
|
-
##
|
|
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
|
-
|
|
152
|
+
Экспорт включает состояние сессии и значения модели.
|
|
153
153
|
|
|
154
|
-
|
|
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
|
-
|
|
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
|
-
#
|
|
1
|
+
# RSLang и rstool
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
Краткий входной гайд для агентов. Детали — в связанных документах.
|
|
4
4
|
|
|
5
|
-
**RSLang**
|
|
5
|
+
**RSLang** — формальная нотация концептуальных схем: понятия, отношения, операции, утверждения. Основа: принадлежность `x∈y`, теоретико-множественные и логические выражения, типизация.
|
|
6
6
|
|
|
7
|
-
**rstool**
|
|
7
|
+
**rstool** — API агента для сессий, upsert, анализа, диагностик, значений модели, вычисления, экспорта/импорта.
|
|
8
8
|
|
|
9
|
-
-
|
|
10
|
-
-
|
|
11
|
-
- Stdio
|
|
12
|
-
- Node
|
|
9
|
+
- Библиотека: `@rsconcept/rstool`.
|
|
10
|
+
- Анализатор: `@rsconcept/domain`.
|
|
11
|
+
- Stdio-обёртка: `npx rstool-wrapper`, JSON построчно.
|
|
12
|
+
- Node-клиент: `RSToolWrapperClient`.
|
|
13
13
|
|
|
14
|
-
##
|
|
14
|
+
## Что читать
|
|
15
15
|
|
|
16
|
-
|
|
16
|
+
Пути — относительно этого файла.
|
|
17
17
|
|
|
18
|
-
- API,
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
-
|
|
22
|
-
-
|
|
23
|
-
-
|
|
24
|
-
-
|
|
25
|
-
-
|
|
26
|
-
-
|
|
27
|
-
-
|
|
28
|
-
-
|
|
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
|
-
##
|
|
30
|
+
## Воркфлоу
|
|
31
31
|
|
|
32
|
-
|
|
32
|
+
Все пошаговые сценарии собраны здесь. Справочные документы дают правила и детали.
|
|
33
33
|
|
|
34
|
-
|
|
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
|
-
|
|
42
|
-
- Evaluate with `evaluateExpression`, `evaluateConstituenta`, or `recalculateModel`.
|
|
36
|
+
Когда схема уже есть и нужны точечные правки, новые конституенты или проверка формул.
|
|
43
37
|
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
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
|
-
|
|
49
|
+
### Концептуализация (КС из содержания источника)
|
|
49
50
|
|
|
50
|
-
|
|
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
|
-
|
|
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.
|
|
60
|
-
3.
|
|
61
|
-
4.
|
|
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
|
-
|
|
114
|
+
Перед завершением концептуализации или крупного изменения. Правила — [CONCEPTUAL-SCHEMA.md](../../docs/CONCEPTUAL-SCHEMA.md).
|
|
64
115
|
|
|
65
|
-
- [ ]
|
|
66
|
-
- [ ] `
|
|
67
|
-
- [ ]
|
|
68
|
-
- [ ]
|
|
116
|
+
- [ ] Атрибутивная и родоструктурная экспликации не смешаны без явного запроса.
|
|
117
|
+
- [ ] Нет избыточной проверки принадлежности к собственной типизации (`x∈X1`, если `x` уже в `X1`).
|
|
118
|
+
- [ ] Базовые понятия независимы, введены необходимые по смысле аксиомы.
|
|
119
|
+
- [ ] Покрыты главные сущности, роли, отношения, утверждения.
|
|
120
|
+
- [ ] В текстовых определениях используются только понятия из схемы.
|
|
121
|
+
- [ ] Повторяющиеся части формальных определений вынесены в производные понятия `D#` и `F#`.
|
|
122
|
+
- [ ] Сомнительная семантика проверена на маленькой КМ при наличии тестовых данных.
|