@rsconcept/rstool 1.3.0 → 1.4.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 (104) hide show
  1. package/README.md +4 -4
  2. package/dist/{agent-workflow-Gk0Vfnv1.d.ts → agent-workflow-D22FeODL.d.ts} +6 -6
  3. package/dist/{analysis-LLnPhmGa.d.ts → analysis-DA44pfgA.d.ts} +4 -3
  4. package/dist/common-D6TFl6l_.d.ts +11 -0
  5. package/dist/{constituenta-DnGR6bnM.d.ts → constituenta-QY5w1x91.d.ts} +7 -7
  6. package/dist/diagnostic-C6TRoBgt.d.ts +38 -0
  7. package/dist/diagnostic-assembly-DRunIcKQ.js +54 -0
  8. package/dist/diagnostic-assembly-DRunIcKQ.js.map +1 -0
  9. package/dist/{evaluation-Cns8BFm4.d.ts → evaluation-Cd4S7-3t.d.ts} +4 -3
  10. package/dist/index.d.ts +12 -12
  11. package/dist/index.js +4 -3
  12. package/dist/mappers/model-adapter.d.ts +3 -3
  13. package/dist/mappers/model-adapter.js +1 -199
  14. package/dist/mappers/schema-adapter.d.ts +5 -5
  15. package/dist/mappers/schema-adapter.js +8 -8
  16. package/dist/mappers/schema-adapter.js.map +1 -1
  17. package/dist/mappers/types.d.ts +6 -6
  18. package/dist/mappers/types.js +6 -10
  19. package/dist/mappers/types.js.map +1 -1
  20. package/dist/model-adapter-D-YmIvQW.js +225 -0
  21. package/dist/model-adapter-D-YmIvQW.js.map +1 -0
  22. package/dist/{model-value-BbonPzMz.d.ts → model-value-BUhr2IjA.d.ts} +2 -2
  23. package/dist/models/agent-workflow.d.ts +1 -1
  24. package/dist/models/analysis.d.ts +1 -1
  25. package/dist/models/common.d.ts +2 -2
  26. package/dist/models/common.js +1 -1
  27. package/dist/models/constituenta.d.ts +1 -1
  28. package/dist/models/diagnostic.d.ts +2 -2
  29. package/dist/models/diagnostic.js +3 -1
  30. package/dist/models/evaluation.d.ts +1 -1
  31. package/dist/models/index.d.ts +11 -11
  32. package/dist/models/index.js +3 -2
  33. package/dist/models/model-value.d.ts +1 -1
  34. package/dist/models/rstool-agent.d.ts +1 -1
  35. package/dist/models/rstool-agent.js +1 -1
  36. package/dist/models/session.d.ts +1 -1
  37. package/dist/models/tool-contract.d.ts +1 -1
  38. package/dist/models/tool-contract.js +1 -1
  39. package/dist/models/tool-contract.js.map +1 -1
  40. package/dist/{models-9G6ur_pg.js → models-DTLctDmB.js} +72 -15
  41. package/dist/models-DTLctDmB.js.map +1 -0
  42. package/dist/{rstool-agent-D2cQze_b.d.ts → rstool-agent-BMVAyMAG.d.ts} +11 -10
  43. package/dist/session/session-store.d.ts +6 -6
  44. package/dist/session/session-store.js +1 -1
  45. package/dist/{session-ChexW8i7.d.ts → session-CI4rLYby.d.ts} +3 -3
  46. package/dist/{tool-contract-0uRGhEfW.d.ts → tool-contract-sQfr-DYD.d.ts} +12 -12
  47. package/dist/wrapper/stdio-wrapper.js +1 -1
  48. package/docs/DIAGNOSTICS.md +63 -20
  49. package/examples/README.md +2 -0
  50. package/examples/agent-client.ts +15 -3
  51. package/examples/audit-diagnostics.ts +40 -0
  52. package/examples/chocolate-nim/build-rsform.ts +15 -0
  53. package/examples/chocolate-nim/build-rsmodel.ts +15 -22
  54. package/examples/chocolate-nim/model-demo.ts +11 -0
  55. package/examples/chocolate-nim/rsform-session.json +329 -310
  56. package/examples/chocolate-nim/rsmodel-session.json +311 -311
  57. package/examples/diagnostics-utils.ts +25 -0
  58. package/examples/expression-bank/bank-constituents.ts +10 -10
  59. package/examples/expression-bank/build-rsform.ts +8 -0
  60. package/examples/expression-bank/rsform-session.json +1501 -1501
  61. package/examples/kinship/build-rsform.ts +16 -1
  62. package/examples/kinship/build-rsmodel.ts +15 -56
  63. package/examples/kinship/model-demo.ts +35 -0
  64. package/examples/kinship/rsform-session.json +300 -215
  65. package/examples/kinship/rsmodel-session.json +216 -216
  66. package/examples/movd/build-rsform.ts +15 -0
  67. package/examples/movd/build-rsmodel.ts +15 -46
  68. package/examples/movd/model-demo.ts +31 -0
  69. package/examples/movd/rsform-session.json +359 -270
  70. package/examples/movd/rsmodel-session.json +263 -263
  71. package/examples/sample/build-rsform.ts +43 -3
  72. package/examples/sample/build-rsmodel.ts +26 -2
  73. package/examples/sample/rsform-session.json +41 -12
  74. package/examples/sample/rsmodel-session.json +37 -37
  75. package/examples/template-apply/build-rsform.ts +26 -9
  76. package/examples/template-apply/rsform-session.json +100 -45
  77. package/package.json +3 -2
  78. package/skills/rstool-helper/EXAMPLES.md +3 -1
  79. package/skills/rstool-helper/GUIDE.md +7 -6
  80. package/skills/rstool-helper/REFERENCE.md +19 -19
  81. package/src/index.ts +7 -4
  82. package/src/mappers/diagnostic-assembly.ts +96 -0
  83. package/src/mappers/diagnostics-collector.test.ts +63 -0
  84. package/src/mappers/diagnostics-collector.ts +73 -0
  85. package/src/mappers/model-adapter.ts +28 -99
  86. package/src/mappers/rsform-builder.ts +127 -0
  87. package/src/mappers/schema-adapter.ts +19 -15
  88. package/src/mappers/types.ts +12 -12
  89. package/src/models/agent-workflow.ts +2 -2
  90. package/src/models/analysis.ts +3 -2
  91. package/src/models/common.ts +0 -12
  92. package/src/models/constituenta.ts +4 -4
  93. package/src/models/diagnostic.ts +15 -10
  94. package/src/models/evaluation.ts +3 -8
  95. package/src/models/index.ts +8 -2
  96. package/src/models/rstool-agent.test.ts +66 -5
  97. package/src/models/rstool-agent.ts +22 -10
  98. package/src/models/tool-contract.ts +4 -4
  99. package/src/session/persistence.ts +2 -2
  100. package/src/session/session-store.ts +14 -7
  101. package/dist/common-DHJalS-Q.d.ts +0 -22
  102. package/dist/diagnostic-D9yl_mEL.d.ts +0 -19
  103. package/dist/mappers/model-adapter.js.map +0 -1
  104. package/dist/models-9G6ur_pg.js.map +0 -1
@@ -1,21 +1,21 @@
1
1
  {
2
- "contractVersion": "2.0.0",
2
+ "contractVersion": "2.1.0",
3
3
  "state": {
4
- "sessionId": "9c7ee71c-73c3-48e4-adf9-778055d4efa1",
4
+ "sessionId": "e5d18e6f-d229-4ef3-b61a-2e0e977bd506",
5
5
  "alias": "",
6
6
  "title": "",
7
7
  "comment": "",
8
- "createdAt": "2026-07-01T17:12:46.165Z",
9
- "updatedAt": "2026-07-01T17:13:06.465Z",
8
+ "createdAt": "2026-07-06T14:49:47.568Z",
9
+ "updatedAt": "2026-07-06T14:49:50.914Z",
10
10
  "revisions": [
11
11
  {
12
- "revisionId": "e1721f47-a1f3-4632-abf4-74ef743c51fb",
13
- "at": "2026-07-01T17:12:46.201Z",
12
+ "revisionId": "ec382d12-7ab2-42c2-975d-2e583d44d15e",
13
+ "at": "2026-07-06T14:49:47.738Z",
14
14
  "message": "КС «родственные отношения»: браки, пол, сиблинги; ∆ ⊆ ⊂ ⊄ ∨ ⇒ ⇔ bool red Pr1,2 Fi1,2 pr1,2, упакованные кванторы"
15
15
  },
16
16
  {
17
- "revisionId": "1a244230-2941-401e-97e2-4d1e7079e93c",
18
- "at": "2026-07-01T17:13:06.465Z",
17
+ "revisionId": "ba0d32e7-f21e-42ae-bfc3-8e6dc2528253",
18
+ "at": "2026-07-06T14:49:50.914Z",
19
19
  "message": "Модель kinship: D3 непуст; A1 card(X1)≤10 выполняется"
20
20
  }
21
21
  ],
@@ -92,57 +92,6 @@
92
92
  "diagnostics": []
93
93
  }
94
94
  },
95
- {
96
- "id": 5,
97
- "alias": "D2",
98
- "cstType": "term",
99
- "definitionFormal": "Pr2(S1)",
100
- "term": "потомки",
101
- "definitionText": "Люди, являющиеся ребёнком хотя бы в одном отношении родитель — ребёнок",
102
- "convention": "",
103
- "analysis": {
104
- "success": true,
105
- "type": {
106
- "typeID": 5,
107
- "base": {
108
- "typeID": 3,
109
- "baseID": "X1"
110
- }
111
- },
112
- "valueClass": "value",
113
- "diagnostics": []
114
- }
115
- },
116
- {
117
- "id": 59,
118
- "alias": "D13",
119
- "cstType": "term",
120
- "definitionFormal": "Pr2,1(S1)",
121
- "term": "пары ребёнок — родитель",
122
- "definitionText": "Все отношения ребёнок — родитель как пары людей",
123
- "convention": "",
124
- "analysis": {
125
- "success": true,
126
- "type": {
127
- "typeID": 5,
128
- "base": {
129
- "typeID": 4,
130
- "factors": [
131
- {
132
- "typeID": 3,
133
- "baseID": "X1"
134
- },
135
- {
136
- "typeID": 3,
137
- "baseID": "X1"
138
- }
139
- ]
140
- }
141
- },
142
- "valueClass": "value",
143
- "diagnostics": []
144
- }
145
- },
146
95
  {
147
96
  "id": 4,
148
97
  "alias": "F1",
@@ -212,6 +161,27 @@
212
161
  "diagnostics": []
213
162
  }
214
163
  },
164
+ {
165
+ "id": 5,
166
+ "alias": "D2",
167
+ "cstType": "term",
168
+ "definitionFormal": "Pr2(S1)",
169
+ "term": "потомки",
170
+ "definitionText": "Люди, являющиеся ребёнком хотя бы в одном отношении родитель — ребёнок",
171
+ "convention": "",
172
+ "analysis": {
173
+ "success": true,
174
+ "type": {
175
+ "typeID": 5,
176
+ "base": {
177
+ "typeID": 3,
178
+ "baseID": "X1"
179
+ }
180
+ },
181
+ "valueClass": "value",
182
+ "diagnostics": []
183
+ }
184
+ },
215
185
  {
216
186
  "id": 6,
217
187
  "alias": "F2",
@@ -245,23 +215,6 @@
245
215
  "diagnostics": []
246
216
  }
247
217
  },
248
- {
249
- "id": 67,
250
- "alias": "T1",
251
- "cstType": "statement",
252
- "definitionFormal": "∀(μ,ν)∈S1 μ∉F2[ν]",
253
- "term": "родитель не потомок ребёнка",
254
- "definitionText": "В каждой паре родитель — ребёнок родитель не является потомком ребёнка",
255
- "convention": "",
256
- "analysis": {
257
- "success": true,
258
- "type": {
259
- "typeID": 6
260
- },
261
- "valueClass": "value",
262
- "diagnostics": []
263
- }
264
- },
265
218
  {
266
219
  "id": 7,
267
220
  "alias": "F3",
@@ -424,6 +377,23 @@
424
377
  "diagnostics": []
425
378
  }
426
379
  },
380
+ {
381
+ "id": 15,
382
+ "alias": "A2",
383
+ "cstType": "axiom",
384
+ "definitionFormal": "S2∪S3=X1 & S2∩S3=∅",
385
+ "term": "разбиение людей по полу",
386
+ "definitionText": "Каждый человек является либо мужчиной, либо женщиной",
387
+ "convention": "",
388
+ "analysis": {
389
+ "success": true,
390
+ "type": {
391
+ "typeID": 6
392
+ },
393
+ "valueClass": "value",
394
+ "diagnostics": []
395
+ }
396
+ },
427
397
  {
428
398
  "id": 41,
429
399
  "alias": "S4",
@@ -517,78 +487,6 @@
517
487
  "diagnostics": []
518
488
  }
519
489
  },
520
- {
521
- "id": 50,
522
- "alias": "A4",
523
- "cstType": "axiom",
524
- "definitionFormal": "card(S4)=card(D4) & card(S4)=card(D5)",
525
- "term": "единственность браков",
526
- "definitionText": "Каждый человек может состоять только в одном браке",
527
- "convention": "",
528
- "analysis": {
529
- "success": true,
530
- "type": {
531
- "typeID": 6
532
- },
533
- "valueClass": "value",
534
- "diagnostics": []
535
- }
536
- },
537
- {
538
- "id": 57,
539
- "alias": "D12",
540
- "cstType": "term",
541
- "definitionFormal": "S2∆S3",
542
- "term": "люди",
543
- "definitionText": "Совокупность мужчин и женщин как симметрическая разность разбиения по полу",
544
- "convention": "",
545
- "analysis": {
546
- "success": true,
547
- "type": {
548
- "typeID": 5,
549
- "base": {
550
- "typeID": 3,
551
- "baseID": "X1"
552
- }
553
- },
554
- "valueClass": "value",
555
- "diagnostics": []
556
- }
557
- },
558
- {
559
- "id": 69,
560
- "alias": "T2",
561
- "cstType": "statement",
562
- "definitionFormal": "S2⊄S3",
563
- "term": "не все мужчины — женщины",
564
- "definitionText": "Множество мужчин не содержится в множестве женщин",
565
- "convention": "",
566
- "analysis": {
567
- "success": true,
568
- "type": {
569
- "typeID": 6
570
- },
571
- "valueClass": "value",
572
- "diagnostics": []
573
- }
574
- },
575
- {
576
- "id": 15,
577
- "alias": "A2",
578
- "cstType": "axiom",
579
- "definitionFormal": "S2∪S3=X1 & S2∩S3=∅",
580
- "term": "разбиение людей по полу",
581
- "definitionText": "Каждый человек является либо мужчиной, либо женщиной",
582
- "convention": "",
583
- "analysis": {
584
- "success": true,
585
- "type": {
586
- "typeID": 6
587
- },
588
- "valueClass": "value",
589
- "diagnostics": []
590
- }
591
- },
592
490
  {
593
491
  "id": 45,
594
492
  "alias": "F31",
@@ -626,27 +524,33 @@
626
524
  }
627
525
  },
628
526
  {
629
- "id": 48,
630
- "alias": "F34",
527
+ "id": 46,
528
+ "alias": "F32",
631
529
  "cstType": "function",
632
- "definitionFormal": "[α∈D5] debool(F31[{α}])",
633
- "term": "муж жены",
634
- "definitionText": "",
530
+ "definitionFormal": "[σ∈ℬ(X1)] Pr2(Fi1[σ](S4))",
531
+ "term": "жены группы людей",
532
+ "definitionText": "Жёны людей из данной группы людей",
635
533
  "convention": "",
636
534
  "analysis": {
637
535
  "success": true,
638
536
  "type": {
639
537
  "typeID": 7,
640
538
  "result": {
641
- "typeID": 3,
642
- "baseID": "X1"
539
+ "typeID": 5,
540
+ "base": {
541
+ "typeID": 3,
542
+ "baseID": "X1"
543
+ }
643
544
  },
644
545
  "args": [
645
546
  {
646
- "alias": "α",
547
+ "alias": "σ",
647
548
  "type": {
648
- "typeID": 3,
649
- "baseID": "X1"
549
+ "typeID": 5,
550
+ "base": {
551
+ "typeID": 3,
552
+ "baseID": "X1"
553
+ }
650
554
  }
651
555
  }
652
556
  ]
@@ -656,12 +560,12 @@
656
560
  }
657
561
  },
658
562
  {
659
- "id": 46,
660
- "alias": "F32",
563
+ "id": 47,
564
+ "alias": "F33",
661
565
  "cstType": "function",
662
- "definitionFormal": "[σ∈ℬ(X1)] Pr2(Fi1[σ](S4))",
663
- "term": "жены группы людей",
664
- "definitionText": "Жёны людей из данной группы людей",
566
+ "definitionFormal": "[σ∈ℬ(X1)] F31[σ]∪F32[σ]",
567
+ "term": "супруги группы людей",
568
+ "definitionText": "Супруги людей из данной группы людей",
665
569
  "convention": "",
666
570
  "analysis": {
667
571
  "success": true,
@@ -691,6 +595,36 @@
691
595
  "diagnostics": []
692
596
  }
693
597
  },
598
+ {
599
+ "id": 48,
600
+ "alias": "F34",
601
+ "cstType": "function",
602
+ "definitionFormal": "[α∈D5] debool(F31[{α}])",
603
+ "term": "муж жены",
604
+ "definitionText": "",
605
+ "convention": "",
606
+ "analysis": {
607
+ "success": true,
608
+ "type": {
609
+ "typeID": 7,
610
+ "result": {
611
+ "typeID": 3,
612
+ "baseID": "X1"
613
+ },
614
+ "args": [
615
+ {
616
+ "alias": "α",
617
+ "type": {
618
+ "typeID": 3,
619
+ "baseID": "X1"
620
+ }
621
+ }
622
+ ]
623
+ },
624
+ "valueClass": "value",
625
+ "diagnostics": []
626
+ }
627
+ },
694
628
  {
695
629
  "id": 49,
696
630
  "alias": "F35",
@@ -722,66 +656,38 @@
722
656
  }
723
657
  },
724
658
  {
725
- "id": 54,
726
- "alias": "D9",
727
- "cstType": "term",
728
- "definitionFormal": "I{(σ, γ) | σ:∈D4; γ:=F35[σ]}",
729
- "term": "пары муж — жена",
730
- "definitionText": "Множество пар, состоящих из мужа и его жены",
659
+ "id": 50,
660
+ "alias": "A4",
661
+ "cstType": "axiom",
662
+ "definitionFormal": "card(S4)=card(D4) & card(S4)=card(D5)",
663
+ "term": "единственность браков",
664
+ "definitionText": "Каждый человек может состоять только в одном браке",
731
665
  "convention": "",
732
666
  "analysis": {
733
667
  "success": true,
734
668
  "type": {
735
- "typeID": 5,
736
- "base": {
737
- "typeID": 4,
738
- "factors": [
739
- {
740
- "typeID": 3,
741
- "baseID": "X1"
742
- },
743
- {
744
- "typeID": 3,
745
- "baseID": "X1"
746
- }
747
- ]
748
- }
669
+ "typeID": 6
749
670
  },
750
671
  "valueClass": "value",
751
672
  "diagnostics": []
752
673
  }
753
674
  },
754
675
  {
755
- "id": 47,
756
- "alias": "F33",
757
- "cstType": "function",
758
- "definitionFormal": "[σ∈ℬ(X1)] F31[σ]∪F32[σ]",
759
- "term": "супруги группы людей",
760
- "definitionText": "Супруги людей из данной группы людей",
676
+ "id": 51,
677
+ "alias": "D7",
678
+ "cstType": "term",
679
+ "definitionFormal": "D{ξ∈X1 | card(F33[{ξ}]\\{ξ})>1}",
680
+ "term": "люди в нескольких браках",
681
+ "definitionText": "Люди, у которых больше одного супруга",
761
682
  "convention": "",
762
683
  "analysis": {
763
684
  "success": true,
764
685
  "type": {
765
- "typeID": 7,
766
- "result": {
767
- "typeID": 5,
768
- "base": {
769
- "typeID": 3,
770
- "baseID": "X1"
771
- }
772
- },
773
- "args": [
774
- {
775
- "alias": "σ",
776
- "type": {
777
- "typeID": 5,
778
- "base": {
779
- "typeID": 3,
780
- "baseID": "X1"
781
- }
782
- }
783
- }
784
- ]
686
+ "typeID": 5,
687
+ "base": {
688
+ "typeID": 3,
689
+ "baseID": "X1"
690
+ }
785
691
  },
786
692
  "valueClass": "value",
787
693
  "diagnostics": []
@@ -830,20 +736,29 @@
830
736
  }
831
737
  },
832
738
  {
833
- "id": 51,
834
- "alias": "D7",
739
+ "id": 54,
740
+ "alias": "D9",
835
741
  "cstType": "term",
836
- "definitionFormal": "D{ξ∈X1 | card(F33[{ξ}]\\{ξ})>1}",
837
- "term": "люди в нескольких браках",
838
- "definitionText": "Люди, у которых больше одного супруга",
742
+ "definitionFormal": "I{(σ, γ) | σ:∈D4; γ:=F35[σ]}",
743
+ "term": "пары муж — жена",
744
+ "definitionText": "Множество пар, состоящих из мужа и его жены",
839
745
  "convention": "",
840
746
  "analysis": {
841
747
  "success": true,
842
748
  "type": {
843
749
  "typeID": 5,
844
750
  "base": {
845
- "typeID": 3,
846
- "baseID": "X1"
751
+ "typeID": 4,
752
+ "factors": [
753
+ {
754
+ "typeID": 3,
755
+ "baseID": "X1"
756
+ },
757
+ {
758
+ "typeID": 3,
759
+ "baseID": "X1"
760
+ }
761
+ ]
847
762
  }
848
763
  },
849
764
  "valueClass": "value",
@@ -1697,6 +1612,27 @@
1697
1612
  "diagnostics": []
1698
1613
  }
1699
1614
  },
1615
+ {
1616
+ "id": 57,
1617
+ "alias": "D12",
1618
+ "cstType": "term",
1619
+ "definitionFormal": "S2∆S3",
1620
+ "term": "мужчины и женщины",
1621
+ "definitionText": "Совокупность мужчин и женщин как симметрическая разность разбиения по полу",
1622
+ "convention": "",
1623
+ "analysis": {
1624
+ "success": true,
1625
+ "type": {
1626
+ "typeID": 5,
1627
+ "base": {
1628
+ "typeID": 3,
1629
+ "baseID": "X1"
1630
+ }
1631
+ },
1632
+ "valueClass": "value",
1633
+ "diagnostics": []
1634
+ }
1635
+ },
1700
1636
  {
1701
1637
  "id": 58,
1702
1638
  "alias": "F36",
@@ -1730,6 +1666,36 @@
1730
1666
  "diagnostics": []
1731
1667
  }
1732
1668
  },
1669
+ {
1670
+ "id": 59,
1671
+ "alias": "D13",
1672
+ "cstType": "term",
1673
+ "definitionFormal": "Pr2,1(S1)",
1674
+ "term": "пары ребёнок — родитель",
1675
+ "definitionText": "Все отношения ребёнок — родитель как пары людей",
1676
+ "convention": "",
1677
+ "analysis": {
1678
+ "success": true,
1679
+ "type": {
1680
+ "typeID": 5,
1681
+ "base": {
1682
+ "typeID": 4,
1683
+ "factors": [
1684
+ {
1685
+ "typeID": 3,
1686
+ "baseID": "X1"
1687
+ },
1688
+ {
1689
+ "typeID": 3,
1690
+ "baseID": "X1"
1691
+ }
1692
+ ]
1693
+ }
1694
+ },
1695
+ "valueClass": "value",
1696
+ "diagnostics": []
1697
+ }
1698
+ },
1733
1699
  {
1734
1700
  "id": 64,
1735
1701
  "alias": "A6",
@@ -1764,6 +1730,40 @@
1764
1730
  "diagnostics": []
1765
1731
  }
1766
1732
  },
1733
+ {
1734
+ "id": 67,
1735
+ "alias": "T1",
1736
+ "cstType": "statement",
1737
+ "definitionFormal": "∀(μ,ν)∈S1 μ∉F2[ν]",
1738
+ "term": "родитель не потомок ребёнка",
1739
+ "definitionText": "В каждой паре родитель — ребёнок родитель не является потомком ребёнка",
1740
+ "convention": "",
1741
+ "analysis": {
1742
+ "success": true,
1743
+ "type": {
1744
+ "typeID": 6
1745
+ },
1746
+ "valueClass": "value",
1747
+ "diagnostics": []
1748
+ }
1749
+ },
1750
+ {
1751
+ "id": 69,
1752
+ "alias": "T2",
1753
+ "cstType": "statement",
1754
+ "definitionFormal": "S2⊄S3",
1755
+ "term": "не все мужчины — женщины",
1756
+ "definitionText": "Множество мужчин не содержится в множестве женщин",
1757
+ "convention": "",
1758
+ "analysis": {
1759
+ "success": true,
1760
+ "type": {
1761
+ "typeID": 6
1762
+ },
1763
+ "valueClass": "value",
1764
+ "diagnostics": []
1765
+ }
1766
+ },
1767
1767
  {
1768
1768
  "id": 12,
1769
1769
  "alias": "A1",
@@ -6,6 +6,8 @@ import { CstType, RSToolWrapperClient, type AgentConstituentaPatch } from '../..
6
6
  type DraftBatch = { draft: AgentConstituentaPatch };
7
7
 
8
8
  import { DEFAULT_RSFORM_SESSION_PATH } from './constants';
9
+ import { MOVD_MODEL_SET } from './model-demo';
10
+ import { assertCleanDiagnostics } from '../diagnostics-utils';
9
11
 
10
12
  /**
11
13
  * Учебная RSForm «МОВД» по Portal rsforms/838 (сокращённо).
@@ -308,6 +310,19 @@ async function run() {
308
310
  throw new Error(`${failedAlias}: analysis failed`);
309
311
  }
310
312
 
313
+ await client.call('setModelValues', {
314
+ sessionId: session.sessionId,
315
+ set: [...MOVD_MODEL_SET]
316
+ });
317
+ await client.call('recalculateModel', { sessionId: session.sessionId });
318
+
319
+ await assertCleanDiagnostics(
320
+ client,
321
+ session.sessionId,
322
+ new Map(drafts.map(entry => [entry.draft.id!, entry.draft.alias])),
323
+ 'movd RSForm'
324
+ );
325
+
311
326
  await client.call('commitStep', {
312
327
  sessionId: session.sessionId,
313
328
  message: 'КС «МОВД» (rsforms/838): Pr1,2, Fi1,2, pr1,2 на ℬ(X3×X1×X2) и ℬ(X3×X1×X4)'
@@ -13,43 +13,10 @@ import {
13
13
  D6_ID,
14
14
  D10_ID,
15
15
  DEFAULT_RSFORM_SESSION_PATH,
16
- DEFAULT_RSMODEL_SESSION_PATH,
17
- S1_ID,
18
- S2_ID,
19
- S3_ID,
20
- S4_ID,
21
- X1_ID,
22
- X2_ID,
23
- X3_ID,
24
- X4_ID
16
+ DEFAULT_RSMODEL_SESSION_PATH
25
17
  } from './constants';
26
-
27
- /**
28
- * Демо-эпизод: Алиса в ситуации «переговоры» выделяет «стол»,
29
- * рассматривает «выйти» и «остаться», выбирает «выйти».
30
- */
31
- const X1_BINDING = { 0: 'переговоры' } as const;
32
- const X2_BINDING = { 0: 'стол', 1: 'дверь' } as const;
33
- const X3_BINDING = { 0: 'Алиса' } as const;
34
- const X4_BINDING = { 0: 'выйти', 1: 'остаться' } as const;
35
-
36
- /** S1: состав ситуации — стол и дверь в переговорах. */
37
- const S1_VALUE = [
38
- [TUPLE_ID, 0, 0],
39
- [TUPLE_ID, 0, 1]
40
- ] as const;
41
-
42
- /** S2: Алиса выделяет стол в переговорах. */
43
- const S2_VALUE = [[TUPLE_ID, 0, 0, 0]] as const;
44
-
45
- /** S3: Алиса рассматривает оба действия. */
46
- const S3_VALUE = [
47
- [TUPLE_ID, 0, 0, 0],
48
- [TUPLE_ID, 0, 0, 1]
49
- ] as const;
50
-
51
- /** S4: Алиса выбирает «выйти». */
52
- const S4_VALUE = [[TUPLE_ID, 0, 0, 0]] as const;
18
+ import { MOVD_MODEL_SET } from './model-demo';
19
+ import { assertCleanDiagnostics } from '../diagnostics-utils';
53
20
 
54
21
  async function run() {
55
22
  const client = new RSToolWrapperClient({
@@ -67,16 +34,7 @@ async function run() {
67
34
 
68
35
  await client.call('setModelValues', {
69
36
  sessionId: imported.sessionId,
70
- set: [
71
- { target: X1_ID, value: X1_BINDING },
72
- { target: X2_ID, value: X2_BINDING },
73
- { target: X3_ID, value: X3_BINDING },
74
- { target: X4_ID, value: X4_BINDING },
75
- { target: S1_ID, value: S1_VALUE },
76
- { target: S2_ID, value: S2_VALUE },
77
- { target: S3_ID, value: S3_VALUE },
78
- { target: S4_ID, value: S4_VALUE }
79
- ]
37
+ set: [...MOVD_MODEL_SET]
80
38
  });
81
39
 
82
40
  const recalculated = await client.call<{
@@ -135,6 +93,17 @@ async function run() {
135
93
  throw new Error(`Expected A4 to hold; got ${JSON.stringify(a4Eval)}`);
136
94
  }
137
95
 
96
+ const state = await client.call<{ items: Array<{ id: number; alias: string }> }>('getSessionState', {
97
+ sessionId: imported.sessionId,
98
+ detail: 'full'
99
+ });
100
+ await assertCleanDiagnostics(
101
+ client,
102
+ imported.sessionId,
103
+ new Map(state.items.map(item => [item.id, item.alias])),
104
+ 'movd RSModel'
105
+ );
106
+
138
107
  await client.call('commitStep', {
139
108
  sessionId: imported.sessionId,
140
109
  message: 'Модель МОВД: Алиса, переговоры, стол значим, выбор «выйти»'