@rsconcept/rstool 1.9.0 → 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.
Files changed (105) hide show
  1. package/README.md +3 -3
  2. package/dist/mappers/model-adapter.d.ts +1 -2
  3. package/dist/mappers/schema-adapter.d.ts +1 -2
  4. package/dist/mappers/types.d.ts +4 -5
  5. package/dist/models/rstool-agent.js +1 -2
  6. package/dist/session/session-store.d.ts +3 -3
  7. package/dist/session/session-store.js +1 -2
  8. package/dist/wrapper/client.d.ts +3 -4
  9. package/docs/BRIEF.md +93 -0
  10. package/docs/CONCEPTUAL-SCHEMA.md +16 -1
  11. package/docs/CONSTRUCTIONS.md +14 -2
  12. package/docs/DIAGNOSTICS.md +3 -2
  13. package/docs/DOMAIN.md +12 -0
  14. package/docs/METHOD.md +208 -0
  15. package/docs/PORTAL-API.md +38 -285
  16. package/docs/PORTAL-MODELS.md +24 -0
  17. package/docs/PORTAL-OSS.md +56 -0
  18. package/docs/PORTAL-PUBLISH.md +39 -0
  19. package/docs/PORTAL-READ.md +301 -0
  20. package/docs/README.md +7 -4
  21. package/docs/REQUIREMENTS.md +61 -0
  22. package/docs/SYNTAX.md +4 -3
  23. package/docs/TYPIFICATION.md +1 -1
  24. package/docs/brief.schema.json +173 -0
  25. package/examples/README.md +16 -2
  26. package/examples/access-control/NOTES.md +23 -0
  27. package/examples/access-control/anti/collapsed.json +439 -0
  28. package/examples/access-control/anti/weakened.json +439 -0
  29. package/examples/access-control/brief-v1.json +231 -0
  30. package/examples/access-control/brief.json +310 -0
  31. package/examples/access-control/build-rsform.ts +151 -0
  32. package/examples/access-control/requirements-v1.md +9 -0
  33. package/examples/access-control/requirements-v2.md +4 -0
  34. package/examples/access-control/rsform-session-v1.json +439 -0
  35. package/examples/access-control/rsform-session.json +523 -0
  36. package/examples/audit-diagnostics.ts +9 -1
  37. package/examples/briefs.test.ts +126 -0
  38. package/examples/clinic-booking/NOTES.md +24 -0
  39. package/examples/clinic-booking/anti/collapsed.json +615 -0
  40. package/examples/clinic-booking/anti/species-as-genus.json +568 -0
  41. package/examples/clinic-booking/brief-v1.json +332 -0
  42. package/examples/clinic-booking/brief.json +405 -0
  43. package/examples/clinic-booking/build-rsform.ts +174 -0
  44. package/examples/clinic-booking/requirements-v1.md +9 -0
  45. package/examples/clinic-booking/requirements-v2.md +4 -0
  46. package/examples/clinic-booking/rsform-session-v1.json +615 -0
  47. package/examples/clinic-booking/rsform-session.json +700 -0
  48. package/examples/diagnostics-utils.ts +26 -0
  49. package/examples/kinship/brief.json +337 -0
  50. package/examples/kinship/build-rsform.ts +7 -4
  51. package/examples/kinship/rsform-session.json +20 -63
  52. package/examples/kinship/rsmodel-session.json +14 -14
  53. package/examples/kinship-subordination/NOTES.md +49 -0
  54. package/examples/kinship-subordination/brief.json +161 -0
  55. package/examples/kinship-subordination/build-rsform.ts +100 -0
  56. package/examples/kinship-subordination/rsform-session.json +795 -0
  57. package/examples/library-loans/NOTES.md +46 -0
  58. package/examples/library-loans/anti/collapsed.json +481 -0
  59. package/examples/library-loans/anti/species-as-genus.json +334 -0
  60. package/examples/library-loans/anti/uncovered.json +406 -0
  61. package/examples/library-loans/anti/weakened.json +464 -0
  62. package/examples/library-loans/brief-v1.json +340 -0
  63. package/examples/library-loans/brief.json +502 -0
  64. package/examples/library-loans/build-rsform.ts +239 -0
  65. package/examples/library-loans/requirements-v1.md +11 -0
  66. package/examples/library-loans/requirements-v2.md +5 -0
  67. package/examples/library-loans/rsform-session-v1.json +481 -0
  68. package/examples/library-loans/rsform-session.json +652 -0
  69. package/examples/library-loans/source-markup.md +18 -0
  70. package/examples/movd/brief.json +220 -0
  71. package/examples/movd/build-rsform.ts +5 -2
  72. package/examples/movd/rsform-session.json +14 -46
  73. package/examples/subordination/NOTES.md +59 -0
  74. package/examples/subordination/anti/collapsed.json +556 -0
  75. package/examples/subordination/anti/single-relation.json +125 -0
  76. package/examples/subordination/anti/transitive.json +573 -0
  77. package/examples/subordination/anti/weakened.json +539 -0
  78. package/examples/subordination/brief.json +386 -0
  79. package/examples/subordination/build-rsform.ts +63 -0
  80. package/examples/subordination/constants.ts +115 -0
  81. package/examples/subordination/rsform-session.json +556 -0
  82. package/examples/subordination/source-markup.md +19 -0
  83. package/examples/subordination/source.md +40 -0
  84. package/package.json +18 -10
  85. package/skills/INSTALL.md +28 -29
  86. package/skills/README.md +25 -10
  87. package/skills/rs-core/SKILL.md +56 -0
  88. package/skills/rs-explain/SKILL.md +28 -0
  89. package/skills/rs-explicate/SKILL.md +71 -0
  90. package/skills/rs-interpret/SKILL.md +67 -0
  91. package/skills/rs-portal/SKILL.md +51 -0
  92. package/skills/rs-review/SKILL.md +79 -0
  93. package/skills/rs-scope/SKILL.md +67 -0
  94. package/skills/rs-synthesis/SKILL.md +52 -0
  95. package/skills/rstool/SKILL.md +70 -0
  96. package/skills/rstool-helper/GUIDE.md +18 -299
  97. package/skills/rstool-helper/SKILL.md +8 -58
  98. package/skills/{rstool-helper → rstool-runtime}/EXAMPLES.md +16 -12
  99. package/skills/{rstool-helper → rstool-runtime}/REFERENCE.md +7 -5
  100. package/skills/rstool-runtime/SKILL.md +96 -0
  101. package/skills/scripts/brief-check.test.ts +165 -0
  102. package/skills/scripts/brief-check.ts +826 -0
  103. package/skills/scripts/check-brief.ts +94 -0
  104. package/skills/scripts/rstool-skills.mjs +119 -0
  105. package/skills/scripts/skill-stubs.test.ts +48 -0
@@ -0,0 +1,340 @@
1
+ {
2
+ "version": 1,
3
+ "status": "confirmed",
4
+ "approach": "project",
5
+ "object": "Выдача книг в библиотеке",
6
+ "task": "Эксплицировать понятия выдачи и доступности для проектирования ИС: модель данных и проверки при сохранении",
7
+ "source": "requirements-v1.md",
8
+ "restrictions": [
9
+ {
10
+ "id": "L1",
11
+ "excludes": "штрафы и оплата (п. 8)",
12
+ "inexpressible": ["сумма штрафа", "долг читателя в рублях"]
13
+ },
14
+ {
15
+ "id": "L2",
16
+ "excludes": "история выдач — только текущее состояние (п. 7)",
17
+ "inexpressible": ["бывшие выдачи", "сколько раз читатель брал издание", "дата возврата"]
18
+ },
19
+ {
20
+ "id": "L3",
21
+ "excludes": "каталог и поиск (п. 9) — интерфейс, не предметная область",
22
+ "inexpressible": ["автор издания", "название"]
23
+ }
24
+ ],
25
+ "expressiveness": [
26
+ {
27
+ "id": "E1",
28
+ "concept": "выдача: кто, что и когда взял",
29
+ "ref": "п. 2",
30
+ "via": "родовая структура читатель × экземпляр × день",
31
+ "constituent": "S2"
32
+ },
33
+ {
34
+ "id": "E2",
35
+ "concept": "просроченные выдачи",
36
+ "ref": "п. 5",
37
+ "via": "день выдачи + 14 < текущий день",
38
+ "constituent": "D4"
39
+ },
40
+ {
41
+ "id": "E3",
42
+ "concept": "доступные экземпляры",
43
+ "ref": "п. 6",
44
+ "via": "экземпляры вне Pr2 выдач",
45
+ "constituent": "D2"
46
+ },
47
+ {
48
+ "id": "E4",
49
+ "concept": "доступные издания",
50
+ "ref": "п. 6",
51
+ "via": "у издания есть доступный экземпляр",
52
+ "constituent": "D3"
53
+ },
54
+ {
55
+ "id": "E5",
56
+ "concept": "должники",
57
+ "ref": "п. 5",
58
+ "via": "Pr1 просроченных выдач",
59
+ "constituent": "D6"
60
+ }
61
+ ],
62
+ "distinctions": [
63
+ {
64
+ "id": "V1",
65
+ "between": ["X2", "X3"],
66
+ "text": "экземпляр ≠ издание: выдают экземпляр, доступность спрашивают про издание"
67
+ },
68
+ {
69
+ "id": "V2",
70
+ "between": ["E5", "D5"],
71
+ "text": "должник ≠ читатель с выдачами",
72
+ "witness": "SC1"
73
+ }
74
+ ],
75
+ "invariants": [
76
+ {
77
+ "id": "I1",
78
+ "text": "Экземпляр не выдан двум читателям одновременно",
79
+ "ref": "п. 3",
80
+ "constituent": "A1",
81
+ "positive": "SC1",
82
+ "negative": "SC2"
83
+ },
84
+ {
85
+ "id": "I2",
86
+ "text": "На руках у читателя не больше 5 экземпляров",
87
+ "ref": "п. 4",
88
+ "constituent": "A2",
89
+ "positive": "SC1",
90
+ "negative": "SC3"
91
+ },
92
+ {
93
+ "id": "I3",
94
+ "text": "Каждый экземпляр — копия ровно одного издания",
95
+ "ref": "п. 1",
96
+ "constituent": "A3",
97
+ "positive": "SC1",
98
+ "negative": "SC4"
99
+ },
100
+ {
101
+ "id": "I4",
102
+ "text": "День выдачи не позже текущего",
103
+ "constituent": "A4",
104
+ "positive": "SC1",
105
+ "negative": "SC5"
106
+ }
107
+ ],
108
+ "decisions": [
109
+ {
110
+ "id": "DC1",
111
+ "topic": "основное отношение «выдача» S2",
112
+ "alternatives": ["читатель × издание", "экземпляр → читатель (функция)", "читатель × экземпляр × день"],
113
+ "choice": "S2: читатель × экземпляр × день выдачи",
114
+ "rationale": "просрочка требует дня, доступность — экземпляра; «один читатель у экземпляра» — аксиома A1, а не тип"
115
+ },
116
+ {
117
+ "id": "DC2",
118
+ "topic": "срок выдачи",
119
+ "alternatives": ["срок как компонента выдачи", "константа 14 в формуле"],
120
+ "choice": "константа 14 в формуле D4",
121
+ "rationale": "п. 2: срок одинаков для всех"
122
+ },
123
+ {
124
+ "id": "DC3",
125
+ "topic": "текущий день",
126
+ "alternatives": ["просроченные как S# (отмечает библиотекарь)", "S3: Z — номер текущего дня"],
127
+ "choice": "S3: Z",
128
+ "rationale": "просрочка — производное понятие, не неопределяемое"
129
+ },
130
+ {
131
+ "id": "DC4",
132
+ "topic": "однозначность выдачи по экземпляру",
133
+ "choice": "аксиома A1",
134
+ "rationale": "п. 3"
135
+ },
136
+ {
137
+ "id": "DC5",
138
+ "topic": "издание экземпляра",
139
+ "choice": "отношение S1 и аксиома A3 (однозначность и всюду определённость)",
140
+ "rationale": "п. 1"
141
+ },
142
+ {
143
+ "id": "DC6",
144
+ "topic": "запрет новой выдачи должнику",
145
+ "choice": "без аксиомы",
146
+ "rationale": "это правило процедуры выдачи, а схема описывает состояние (L2)"
147
+ }
148
+ ],
149
+ "scenarios": [
150
+ {
151
+ "id": "SC1",
152
+ "title": "Две выдачи, одна просрочена",
153
+ "values": {
154
+ "X1": ["ann", "bob", "cat"],
155
+ "X2": ["e1", "e2", "e3", "e4"],
156
+ "X3": ["war", "peace"],
157
+ "S1": [
158
+ ["e1", "war"],
159
+ ["e2", "war"],
160
+ ["e3", "peace"],
161
+ ["e4", "peace"]
162
+ ],
163
+ "S2": [
164
+ ["ann", "e1", 1],
165
+ ["bob", "e3", 10]
166
+ ],
167
+ "S3": 20
168
+ },
169
+ "expect": [
170
+ {
171
+ "of": "D1",
172
+ "value": ["e1", "e3"]
173
+ },
174
+ {
175
+ "of": "D2",
176
+ "value": ["e2", "e4"]
177
+ },
178
+ {
179
+ "of": "D3",
180
+ "value": ["war", "peace"]
181
+ },
182
+ {
183
+ "of": "F2",
184
+ "args": ["war"],
185
+ "value": ["e2"]
186
+ },
187
+ {
188
+ "of": "D4",
189
+ "value": [["ann", "e1", 1]]
190
+ },
191
+ {
192
+ "of": "D6",
193
+ "value": ["ann"]
194
+ },
195
+ {
196
+ "of": "D5",
197
+ "value": ["ann", "bob"]
198
+ }
199
+ ]
200
+ },
201
+ {
202
+ "id": "SC2",
203
+ "title": "Экземпляр e1 выдан двоим",
204
+ "base": "SC1",
205
+ "values": {
206
+ "S2": [
207
+ ["ann", "e1", 1],
208
+ ["bob", "e1", 2]
209
+ ]
210
+ },
211
+ "expect": [
212
+ {
213
+ "of": "A1",
214
+ "holds": false
215
+ }
216
+ ]
217
+ },
218
+ {
219
+ "id": "SC3",
220
+ "title": "Шесть экземпляров у одного читателя",
221
+ "base": "SC1",
222
+ "values": {
223
+ "X2": ["e1", "e2", "e3", "e4", "e5", "e6"],
224
+ "S1": [
225
+ ["e1", "war"],
226
+ ["e2", "war"],
227
+ ["e3", "war"],
228
+ ["e4", "war"],
229
+ ["e5", "war"],
230
+ ["e6", "war"]
231
+ ],
232
+ "S2": [
233
+ ["ann", "e1", 1],
234
+ ["ann", "e2", 1],
235
+ ["ann", "e3", 1],
236
+ ["ann", "e4", 1],
237
+ ["ann", "e5", 1],
238
+ ["ann", "e6", 1]
239
+ ]
240
+ },
241
+ "expect": [
242
+ {
243
+ "of": "A2",
244
+ "holds": false
245
+ }
246
+ ]
247
+ },
248
+ {
249
+ "id": "SC4",
250
+ "title": "Экземпляр без издания",
251
+ "base": "SC1",
252
+ "values": {
253
+ "S1": [
254
+ ["e1", "war"],
255
+ ["e2", "war"],
256
+ ["e3", "peace"]
257
+ ]
258
+ },
259
+ "expect": [
260
+ {
261
+ "of": "A3",
262
+ "holds": false
263
+ }
264
+ ]
265
+ },
266
+ {
267
+ "id": "SC5",
268
+ "title": "Выдача из будущего",
269
+ "base": "SC1",
270
+ "values": {
271
+ "S2": [["ann", "e1", 25]]
272
+ },
273
+ "expect": [
274
+ {
275
+ "of": "A4",
276
+ "holds": false
277
+ }
278
+ ]
279
+ },
280
+ {
281
+ "id": "SC6",
282
+ "title": "Все экземпляры «war» на руках",
283
+ "base": "SC1",
284
+ "values": {
285
+ "S2": [
286
+ ["ann", "e1", 1],
287
+ ["bob", "e2", 10]
288
+ ]
289
+ },
290
+ "expect": [
291
+ {
292
+ "of": "D3",
293
+ "value": ["peace"]
294
+ },
295
+ {
296
+ "of": "F2",
297
+ "args": ["war"],
298
+ "value": []
299
+ }
300
+ ]
301
+ }
302
+ ],
303
+ "questions": [
304
+ {
305
+ "round": 1,
306
+ "text": "Для чего схема?",
307
+ "proposed": "основа для ИС: модель данных и проверки",
308
+ "answer": "да"
309
+ },
310
+ {
311
+ "round": 1,
312
+ "text": "Что исключаем?",
313
+ "proposed": "штрафы, историю выдач, каталог и поиск",
314
+ "consequence": "невыразимы «сумма штрафа», «бывшие выдачи», «автор издания»",
315
+ "answer": "да"
316
+ },
317
+ {
318
+ "round": 1,
319
+ "text": "Что различать?",
320
+ "proposed": "экземпляр и издание; должника и читателя с выдачами",
321
+ "answer": "да"
322
+ },
323
+ {
324
+ "round": 2,
325
+ "text": "Срок выдачи одинаков для всех?",
326
+ "proposed": "да, 14 дней",
327
+ "consequence": "срок — константа в формуле, а не данные выдачи",
328
+ "answer": "да"
329
+ },
330
+ {
331
+ "round": 2,
332
+ "text": "Запрещать ли выдачу должнику?",
333
+ "proposed": "нет, это правило процедуры",
334
+ "consequence": "без аксиомы; схема описывает состояние",
335
+ "answer": "да"
336
+ }
337
+ ],
338
+ "assumptions": ["дни нумеруются целыми числами в одной шкале"],
339
+ "openQuestions": []
340
+ }