@rsconcept/rstool 1.7.1 → 2.0.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 +7 -7
- package/dist/index.js +1 -1
- package/dist/mappers/model-adapter.d.ts +6 -2
- package/dist/mappers/model-adapter.js +28 -3
- package/dist/mappers/model-adapter.js.map +1 -1
- package/dist/mappers/schema-adapter.d.ts +1 -2
- package/dist/mappers/schema-adapter.js +1 -1
- package/dist/mappers/types.d.ts +4 -5
- package/dist/models/index.js +1 -1
- package/dist/models/rstool-agent.js +1 -2
- package/dist/{models-DG2uTaV_.js → models-D06g8LId.js} +6 -5
- package/dist/{models-DG2uTaV_.js.map → models-D06g8LId.js.map} +1 -1
- package/dist/{rsform-builder-DKwZfJvN.js → rsform-builder-BlXEe5Ow.js} +2 -2
- package/dist/{rsform-builder-DKwZfJvN.js.map → rsform-builder-BlXEe5Ow.js.map} +1 -1
- package/dist/session/session-store.d.ts +3 -3
- package/dist/session/session-store.js +1 -2
- package/dist/wrapper/client.d.ts +15 -9
- package/dist/wrapper/client.js +79 -12
- package/dist/wrapper/client.js.map +1 -1
- package/dist/wrapper/stdio-wrapper.d.ts +1 -1
- package/dist/wrapper/stdio-wrapper.js +18 -10
- package/dist/wrapper/stdio-wrapper.js.map +1 -1
- package/docs/BRIEF.md +93 -0
- package/docs/CONCEPTUAL-SCHEMA.md +17 -2
- package/docs/CONSTRUCTIONS.md +384 -0
- package/docs/DIAGNOSTICS.md +9 -8
- package/docs/DOMAIN.md +12 -0
- package/docs/METHOD.md +208 -0
- package/docs/MODEL-TESTING.md +48 -0
- package/docs/PORTAL-API.md +38 -285
- package/docs/PORTAL-MODELS.md +24 -0
- package/docs/PORTAL-OSS.md +56 -0
- package/docs/PORTAL-PUBLISH.md +39 -0
- package/docs/PORTAL-READ.md +301 -0
- package/docs/README.md +8 -4
- package/docs/REQUIREMENTS.md +61 -0
- package/docs/SYNTAX.md +5 -4
- package/docs/TYPIFICATION.md +12 -3
- package/docs/brief.schema.json +173 -0
- package/examples/README.md +16 -2
- package/examples/access-control/NOTES.md +23 -0
- package/examples/access-control/anti/collapsed.json +439 -0
- package/examples/access-control/anti/weakened.json +439 -0
- package/examples/access-control/brief-v1.json +231 -0
- package/examples/access-control/brief.json +310 -0
- package/examples/access-control/build-rsform.ts +151 -0
- package/examples/access-control/requirements-v1.md +9 -0
- package/examples/access-control/requirements-v2.md +4 -0
- package/examples/access-control/rsform-session-v1.json +439 -0
- package/examples/access-control/rsform-session.json +523 -0
- package/examples/audit-diagnostics.ts +9 -1
- package/examples/briefs.test.ts +126 -0
- package/examples/clinic-booking/NOTES.md +24 -0
- package/examples/clinic-booking/anti/collapsed.json +615 -0
- package/examples/clinic-booking/anti/species-as-genus.json +568 -0
- package/examples/clinic-booking/brief-v1.json +332 -0
- package/examples/clinic-booking/brief.json +405 -0
- package/examples/clinic-booking/build-rsform.ts +174 -0
- package/examples/clinic-booking/requirements-v1.md +9 -0
- package/examples/clinic-booking/requirements-v2.md +4 -0
- package/examples/clinic-booking/rsform-session-v1.json +615 -0
- package/examples/clinic-booking/rsform-session.json +700 -0
- package/examples/diagnostics-utils.ts +26 -0
- package/examples/kinship/brief.json +337 -0
- package/examples/kinship/build-rsform.ts +7 -4
- package/examples/kinship/rsform-session.json +20 -63
- package/examples/kinship/rsmodel-session.json +14 -14
- package/examples/kinship-subordination/NOTES.md +49 -0
- package/examples/kinship-subordination/brief.json +161 -0
- package/examples/kinship-subordination/build-rsform.ts +100 -0
- package/examples/kinship-subordination/rsform-session.json +795 -0
- package/examples/library-loans/NOTES.md +46 -0
- package/examples/library-loans/anti/collapsed.json +481 -0
- package/examples/library-loans/anti/species-as-genus.json +334 -0
- package/examples/library-loans/anti/uncovered.json +406 -0
- package/examples/library-loans/anti/weakened.json +464 -0
- package/examples/library-loans/brief-v1.json +340 -0
- package/examples/library-loans/brief.json +502 -0
- package/examples/library-loans/build-rsform.ts +239 -0
- package/examples/library-loans/requirements-v1.md +11 -0
- package/examples/library-loans/requirements-v2.md +5 -0
- package/examples/library-loans/rsform-session-v1.json +481 -0
- package/examples/library-loans/rsform-session.json +652 -0
- package/examples/library-loans/source-markup.md +18 -0
- package/examples/movd/brief.json +220 -0
- package/examples/movd/build-rsform.ts +5 -2
- package/examples/movd/rsform-session.json +14 -46
- package/examples/subordination/NOTES.md +59 -0
- package/examples/subordination/anti/collapsed.json +556 -0
- package/examples/subordination/anti/single-relation.json +125 -0
- package/examples/subordination/anti/transitive.json +573 -0
- package/examples/subordination/anti/weakened.json +539 -0
- package/examples/subordination/brief.json +386 -0
- package/examples/subordination/build-rsform.ts +63 -0
- package/examples/subordination/constants.ts +115 -0
- package/examples/subordination/rsform-session.json +556 -0
- package/examples/subordination/source-markup.md +19 -0
- package/examples/subordination/source.md +40 -0
- package/package.json +29 -20
- package/skills/INSTALL.md +28 -29
- package/skills/README.md +25 -10
- package/skills/rs-core/SKILL.md +56 -0
- package/skills/rs-explain/SKILL.md +28 -0
- package/skills/rs-explicate/SKILL.md +71 -0
- package/skills/rs-interpret/SKILL.md +67 -0
- package/skills/rs-portal/SKILL.md +51 -0
- package/skills/rs-review/SKILL.md +79 -0
- package/skills/rs-scope/SKILL.md +67 -0
- package/skills/rs-synthesis/SKILL.md +52 -0
- package/skills/rstool/SKILL.md +70 -0
- package/skills/rstool-helper/GUIDE.md +18 -272
- package/skills/rstool-helper/SKILL.md +8 -55
- package/skills/{rstool-helper → rstool-runtime}/EXAMPLES.md +40 -12
- package/skills/{rstool-helper → rstool-runtime}/REFERENCE.md +28 -7
- package/skills/rstool-runtime/SKILL.md +96 -0
- package/skills/scripts/brief-check.test.ts +165 -0
- package/skills/scripts/brief-check.ts +826 -0
- package/skills/scripts/check-brief.ts +94 -0
- package/skills/scripts/rstool-skills.mjs +119 -0
- package/skills/scripts/skill-stubs.test.ts +48 -0
- package/src/mappers/model-adapter.ts +34 -1
- package/src/models/rstool-agent.test.ts +95 -0
- package/src/wrapper/client.test.ts +43 -4
- package/src/wrapper/client.ts +95 -16
- package/src/wrapper/stdio-handler.test.ts +43 -0
- package/src/wrapper/stdio-handler.ts +19 -5
|
@@ -0,0 +1,161 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": 1,
|
|
3
|
+
"status": "confirmed",
|
|
4
|
+
"approach": "education",
|
|
5
|
+
"object": "Подчинение и родство сотрудников одной организации",
|
|
6
|
+
"task": "Учебный пример синтеза: соединить микротеории «Начальники и подчинённые» и «Родство» и выразить правило конфликта интересов",
|
|
7
|
+
"source": "examples/subordination, examples/kinship; синтез по Т1 §1.2.18",
|
|
8
|
+
"restrictions": [
|
|
9
|
+
{
|
|
10
|
+
"id": "L1",
|
|
11
|
+
"excludes": "родство дальше 1 ранга (родители, дети, братья, сёстры)",
|
|
12
|
+
"inexpressible": ["подчинение внуку", "подчинение двоюродному брату"]
|
|
13
|
+
}
|
|
14
|
+
],
|
|
15
|
+
"expressiveness": [
|
|
16
|
+
{
|
|
17
|
+
"id": "E1",
|
|
18
|
+
"concept": "прямое подчинение родственнику",
|
|
19
|
+
"ref": "Т1 §1.2.18",
|
|
20
|
+
"via": "пары прямого подчинения, где подчинённый — прямой родственник начальника",
|
|
21
|
+
"constituent": "D11"
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
"id": "E2",
|
|
25
|
+
"concept": "косвенное подчинение родственнику",
|
|
26
|
+
"ref": "Т1 §1.2.18",
|
|
27
|
+
"via": "косвенные подчинённые, которые — прямые родственники",
|
|
28
|
+
"constituent": "D12"
|
|
29
|
+
}
|
|
30
|
+
],
|
|
31
|
+
"distinctions": [
|
|
32
|
+
{
|
|
33
|
+
"id": "V1",
|
|
34
|
+
"between": ["E1", "E2"],
|
|
35
|
+
"text": "прямое подчинение родственнику (запрещено) ≠ косвенное (допустимо)",
|
|
36
|
+
"witness": "SC1"
|
|
37
|
+
}
|
|
38
|
+
],
|
|
39
|
+
"invariants": [
|
|
40
|
+
{
|
|
41
|
+
"id": "I1",
|
|
42
|
+
"text": "В прямом подчинении прямой родственник находиться не может (синтетическая аксиома)",
|
|
43
|
+
"ref": "Т1 §1.2.18",
|
|
44
|
+
"constituent": "A3",
|
|
45
|
+
"positive": "SC1",
|
|
46
|
+
"negative": "SC2"
|
|
47
|
+
},
|
|
48
|
+
{
|
|
49
|
+
"id": "I2",
|
|
50
|
+
"text": "Брат или сестра тоже не может быть в прямом подчинении",
|
|
51
|
+
"ref": "Т1 §1.2.18",
|
|
52
|
+
"constituent": "A3",
|
|
53
|
+
"positive": "SC1",
|
|
54
|
+
"negative": "SC3"
|
|
55
|
+
}
|
|
56
|
+
],
|
|
57
|
+
"decisions": [
|
|
58
|
+
{
|
|
59
|
+
"id": "DC1",
|
|
60
|
+
"topic": "таблица отождествлений",
|
|
61
|
+
"alternatives": [
|
|
62
|
+
"отождествить люди родства и люди подчинения (исходное с исходным)",
|
|
63
|
+
"оставить два базисных множества и связать отношением «является»"
|
|
64
|
+
],
|
|
65
|
+
"choice": "отождествить базисные множества людей",
|
|
66
|
+
"rationale": "правило говорит об одних и тех же людях; исходное с исходным отождествлять можно (Т1 §1.2.18)"
|
|
67
|
+
},
|
|
68
|
+
{
|
|
69
|
+
"id": "DC2",
|
|
70
|
+
"topic": "правило конфликта интересов",
|
|
71
|
+
"choice": "синтетическая аксиома A3 и понятие нарушения D11",
|
|
72
|
+
"rationale": "правило не выражается ни в одной микротеории — это новое знание синтеза"
|
|
73
|
+
},
|
|
74
|
+
{
|
|
75
|
+
"id": "DC3",
|
|
76
|
+
"topic": "косвенное подчинение родственнику",
|
|
77
|
+
"choice": "без аксиомы, но выразимо понятием D12",
|
|
78
|
+
"rationale": "«Запрет налагается только на прямое подчинение и родственные отношения 1 ранга» (Т1 §1.2.18): сын может быть рядовым сотрудником"
|
|
79
|
+
},
|
|
80
|
+
{
|
|
81
|
+
"id": "DC4",
|
|
82
|
+
"topic": "прямые родственники",
|
|
83
|
+
"choice": "родители, дети, братья и сёстры — из микротеории родства",
|
|
84
|
+
"rationale": "Т1 §1.2.18: «прямые родственные отношения: брат, сестра, сын, дочь»"
|
|
85
|
+
}
|
|
86
|
+
],
|
|
87
|
+
"scenarios": [
|
|
88
|
+
{
|
|
89
|
+
"id": "SC1",
|
|
90
|
+
"title": "Директор — отец рядовых сотрудников в своей вертикали",
|
|
91
|
+
"values": {
|
|
92
|
+
"X1": ["boss", "ann", "bob", "kid", "sis"],
|
|
93
|
+
"S1": [
|
|
94
|
+
[["boss"], ["ann", "bob"]],
|
|
95
|
+
[["ann"], ["kid", "sis"]]
|
|
96
|
+
],
|
|
97
|
+
"S2": [
|
|
98
|
+
["boss", "kid"],
|
|
99
|
+
["boss", "sis"]
|
|
100
|
+
]
|
|
101
|
+
},
|
|
102
|
+
"expect": [
|
|
103
|
+
{
|
|
104
|
+
"of": "D11",
|
|
105
|
+
"value": []
|
|
106
|
+
},
|
|
107
|
+
{
|
|
108
|
+
"of": "D12",
|
|
109
|
+
"value": [
|
|
110
|
+
["boss", "kid"],
|
|
111
|
+
["boss", "sis"]
|
|
112
|
+
]
|
|
113
|
+
},
|
|
114
|
+
{
|
|
115
|
+
"of": "A3",
|
|
116
|
+
"holds": true
|
|
117
|
+
}
|
|
118
|
+
]
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
"id": "SC2",
|
|
122
|
+
"title": "Директор назначил сына начальником отдела (прямое подчинение)",
|
|
123
|
+
"base": "SC1",
|
|
124
|
+
"values": {
|
|
125
|
+
"S1": [
|
|
126
|
+
[["boss"], ["ann", "kid"]],
|
|
127
|
+
[["kid"], ["bob"]]
|
|
128
|
+
]
|
|
129
|
+
},
|
|
130
|
+
"expect": [
|
|
131
|
+
{
|
|
132
|
+
"of": "A3",
|
|
133
|
+
"holds": false
|
|
134
|
+
},
|
|
135
|
+
{
|
|
136
|
+
"of": "D11",
|
|
137
|
+
"value": [["boss", "kid"]]
|
|
138
|
+
}
|
|
139
|
+
]
|
|
140
|
+
},
|
|
141
|
+
{
|
|
142
|
+
"id": "SC3",
|
|
143
|
+
"title": "Брат — прямой начальник сестры",
|
|
144
|
+
"base": "SC1",
|
|
145
|
+
"values": {
|
|
146
|
+
"S1": [
|
|
147
|
+
[["boss"], ["ann", "bob"]],
|
|
148
|
+
[["kid"], ["sis"]]
|
|
149
|
+
]
|
|
150
|
+
},
|
|
151
|
+
"expect": [
|
|
152
|
+
{
|
|
153
|
+
"of": "A3",
|
|
154
|
+
"holds": false
|
|
155
|
+
}
|
|
156
|
+
]
|
|
157
|
+
}
|
|
158
|
+
],
|
|
159
|
+
"assumptions": [],
|
|
160
|
+
"openQuestions": []
|
|
161
|
+
}
|
|
@@ -0,0 +1,100 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Synthesis of two microtheories: kinship (parent–child) and subordination,
|
|
3
|
+
* with the synthetic axiom «a direct relative is not in direct subordination».
|
|
4
|
+
* Run from the package root: `pnpm run example:build-kinship-subordination-schema`.
|
|
5
|
+
*/
|
|
6
|
+
import { writeFileSync } from 'node:fs';
|
|
7
|
+
import { resolve } from 'node:path';
|
|
8
|
+
|
|
9
|
+
import { type AgentConstituentaPatch, RSToolAgent } from '../../src';
|
|
10
|
+
|
|
11
|
+
import { describeBrief, formatDiagnostics } from '../diagnostics-utils';
|
|
12
|
+
import { SUBORDINATION_ITEMS } from '../subordination/constants';
|
|
13
|
+
|
|
14
|
+
/** Kinship microtheory reduced to what the synthesis needs. */
|
|
15
|
+
const KINSHIP_ITEMS: AgentConstituentaPatch[] = [
|
|
16
|
+
{ alias: 'X1', term: 'люди', convention: 'Люди, родство которых рассматривается.' },
|
|
17
|
+
{
|
|
18
|
+
alias: 'S1',
|
|
19
|
+
term: 'родитель–ребёнок',
|
|
20
|
+
definitionFormal: 'ℬ(X1×X1)',
|
|
21
|
+
convention: 'Пара (родитель, ребёнок).'
|
|
22
|
+
},
|
|
23
|
+
{
|
|
24
|
+
alias: 'F1',
|
|
25
|
+
term: 'родители человека',
|
|
26
|
+
definitionFormal: '[ξ∈X1] Pr1(Fi2[{ξ}](S1))',
|
|
27
|
+
definitionText: 'Родители данного человека.'
|
|
28
|
+
},
|
|
29
|
+
{
|
|
30
|
+
alias: 'F2',
|
|
31
|
+
term: 'дети человека',
|
|
32
|
+
definitionFormal: '[ξ∈X1] Pr2(Fi1[{ξ}](S1))',
|
|
33
|
+
definitionText: 'Дети данного человека.'
|
|
34
|
+
},
|
|
35
|
+
{
|
|
36
|
+
alias: 'F3',
|
|
37
|
+
term: 'братья и сёстры',
|
|
38
|
+
definitionFormal: '[ξ∈X1] Pr2(Fi1[F1[ξ]](S1))\\{ξ}',
|
|
39
|
+
definitionText: 'Другие дети родителей данного человека.'
|
|
40
|
+
},
|
|
41
|
+
{
|
|
42
|
+
alias: 'F4',
|
|
43
|
+
term: 'прямые родственники',
|
|
44
|
+
definitionFormal: '[ξ∈X1] F1[ξ]∪F2[ξ]∪F3[ξ]',
|
|
45
|
+
definitionText: 'Родители, дети, братья и сёстры данного человека — родственники 1 ранга (Т1 §1.2.18).'
|
|
46
|
+
}
|
|
47
|
+
];
|
|
48
|
+
|
|
49
|
+
function run() {
|
|
50
|
+
const tool = new RSToolAgent();
|
|
51
|
+
const receiver = tool.createSession({
|
|
52
|
+
alias: 'KSUB',
|
|
53
|
+
title: 'Родство и подчинение',
|
|
54
|
+
comment: describeBrief(resolve(import.meta.dirname, 'brief.json'))
|
|
55
|
+
});
|
|
56
|
+
tool.applySchemaPatch({ items: SUBORDINATION_ITEMS }, receiver.sessionId);
|
|
57
|
+
const source = tool.createSession({ title: 'Родство' });
|
|
58
|
+
tool.applySchemaPatch({ items: KINSHIP_ITEMS }, source.sessionId);
|
|
59
|
+
|
|
60
|
+
tool.setCurrentSession(receiver.sessionId);
|
|
61
|
+
const synthesis = tool.synthesize({
|
|
62
|
+
sourceSessionId: source.sessionId,
|
|
63
|
+
// исходное с исходным: люди родства — те же сотрудники (решение DC1)
|
|
64
|
+
substitutions: [{ original: 'X1', substitution: 'X1' }]
|
|
65
|
+
});
|
|
66
|
+
const kin = synthesis.aliasMapping;
|
|
67
|
+
const result = tool.applySchemaPatch({
|
|
68
|
+
commitMessage: 'синтез родства и подчинения',
|
|
69
|
+
items: [
|
|
70
|
+
{
|
|
71
|
+
alias: 'A3',
|
|
72
|
+
term: 'нет прямого подчинения родственнику',
|
|
73
|
+
definitionFormal: `∀(α,β)∈D1 β∉${kin.F4}[α]`,
|
|
74
|
+
definitionText:
|
|
75
|
+
'Прямой родственник (родитель, ребёнок, брат, сестра) не находится с человеком в прямом подчинении (Т1 §1.2.18).'
|
|
76
|
+
},
|
|
77
|
+
{
|
|
78
|
+
alias: 'D11',
|
|
79
|
+
term: 'подчинение родственнику',
|
|
80
|
+
definitionFormal: `D{(α,β)∈D1 | β∈${kin.F4}[α]}`,
|
|
81
|
+
definitionText: 'Пары прямого подчинения, в которых начальник и подчинённый — прямые родственники.'
|
|
82
|
+
},
|
|
83
|
+
{
|
|
84
|
+
alias: 'D12',
|
|
85
|
+
term: 'косвенное подчинение родственнику',
|
|
86
|
+
definitionFormal: `D{(α,β)∈X1×X1 | β∈F3[α] & β∈${kin.F4}[α]}`,
|
|
87
|
+
definitionText: 'Пары людей, где второй — косвенный подчинённый первого и его прямой родственник.'
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
});
|
|
91
|
+
const diagnostics = tool.listDiagnostics();
|
|
92
|
+
if (!result.success || diagnostics.length > 0) {
|
|
93
|
+
throw new Error(formatDiagnostics(diagnostics));
|
|
94
|
+
}
|
|
95
|
+
const path = resolve(import.meta.dirname, 'rsform-session.json');
|
|
96
|
+
writeFileSync(path, tool.exportSession() + '\n', 'utf8');
|
|
97
|
+
console.log(`kinship-subordination: ${JSON.stringify(kin)} → ${path}`);
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
run();
|