@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.
Files changed (126) hide show
  1. package/README.md +7 -7
  2. package/dist/index.js +1 -1
  3. package/dist/mappers/model-adapter.d.ts +6 -2
  4. package/dist/mappers/model-adapter.js +28 -3
  5. package/dist/mappers/model-adapter.js.map +1 -1
  6. package/dist/mappers/schema-adapter.d.ts +1 -2
  7. package/dist/mappers/schema-adapter.js +1 -1
  8. package/dist/mappers/types.d.ts +4 -5
  9. package/dist/models/index.js +1 -1
  10. package/dist/models/rstool-agent.js +1 -2
  11. package/dist/{models-DG2uTaV_.js → models-D06g8LId.js} +6 -5
  12. package/dist/{models-DG2uTaV_.js.map → models-D06g8LId.js.map} +1 -1
  13. package/dist/{rsform-builder-DKwZfJvN.js → rsform-builder-BlXEe5Ow.js} +2 -2
  14. package/dist/{rsform-builder-DKwZfJvN.js.map → rsform-builder-BlXEe5Ow.js.map} +1 -1
  15. package/dist/session/session-store.d.ts +3 -3
  16. package/dist/session/session-store.js +1 -2
  17. package/dist/wrapper/client.d.ts +15 -9
  18. package/dist/wrapper/client.js +79 -12
  19. package/dist/wrapper/client.js.map +1 -1
  20. package/dist/wrapper/stdio-wrapper.d.ts +1 -1
  21. package/dist/wrapper/stdio-wrapper.js +18 -10
  22. package/dist/wrapper/stdio-wrapper.js.map +1 -1
  23. package/docs/BRIEF.md +93 -0
  24. package/docs/CONCEPTUAL-SCHEMA.md +17 -2
  25. package/docs/CONSTRUCTIONS.md +384 -0
  26. package/docs/DIAGNOSTICS.md +9 -8
  27. package/docs/DOMAIN.md +12 -0
  28. package/docs/METHOD.md +208 -0
  29. package/docs/MODEL-TESTING.md +48 -0
  30. package/docs/PORTAL-API.md +38 -285
  31. package/docs/PORTAL-MODELS.md +24 -0
  32. package/docs/PORTAL-OSS.md +56 -0
  33. package/docs/PORTAL-PUBLISH.md +39 -0
  34. package/docs/PORTAL-READ.md +301 -0
  35. package/docs/README.md +8 -4
  36. package/docs/REQUIREMENTS.md +61 -0
  37. package/docs/SYNTAX.md +5 -4
  38. package/docs/TYPIFICATION.md +12 -3
  39. package/docs/brief.schema.json +173 -0
  40. package/examples/README.md +16 -2
  41. package/examples/access-control/NOTES.md +23 -0
  42. package/examples/access-control/anti/collapsed.json +439 -0
  43. package/examples/access-control/anti/weakened.json +439 -0
  44. package/examples/access-control/brief-v1.json +231 -0
  45. package/examples/access-control/brief.json +310 -0
  46. package/examples/access-control/build-rsform.ts +151 -0
  47. package/examples/access-control/requirements-v1.md +9 -0
  48. package/examples/access-control/requirements-v2.md +4 -0
  49. package/examples/access-control/rsform-session-v1.json +439 -0
  50. package/examples/access-control/rsform-session.json +523 -0
  51. package/examples/audit-diagnostics.ts +9 -1
  52. package/examples/briefs.test.ts +126 -0
  53. package/examples/clinic-booking/NOTES.md +24 -0
  54. package/examples/clinic-booking/anti/collapsed.json +615 -0
  55. package/examples/clinic-booking/anti/species-as-genus.json +568 -0
  56. package/examples/clinic-booking/brief-v1.json +332 -0
  57. package/examples/clinic-booking/brief.json +405 -0
  58. package/examples/clinic-booking/build-rsform.ts +174 -0
  59. package/examples/clinic-booking/requirements-v1.md +9 -0
  60. package/examples/clinic-booking/requirements-v2.md +4 -0
  61. package/examples/clinic-booking/rsform-session-v1.json +615 -0
  62. package/examples/clinic-booking/rsform-session.json +700 -0
  63. package/examples/diagnostics-utils.ts +26 -0
  64. package/examples/kinship/brief.json +337 -0
  65. package/examples/kinship/build-rsform.ts +7 -4
  66. package/examples/kinship/rsform-session.json +20 -63
  67. package/examples/kinship/rsmodel-session.json +14 -14
  68. package/examples/kinship-subordination/NOTES.md +49 -0
  69. package/examples/kinship-subordination/brief.json +161 -0
  70. package/examples/kinship-subordination/build-rsform.ts +100 -0
  71. package/examples/kinship-subordination/rsform-session.json +795 -0
  72. package/examples/library-loans/NOTES.md +46 -0
  73. package/examples/library-loans/anti/collapsed.json +481 -0
  74. package/examples/library-loans/anti/species-as-genus.json +334 -0
  75. package/examples/library-loans/anti/uncovered.json +406 -0
  76. package/examples/library-loans/anti/weakened.json +464 -0
  77. package/examples/library-loans/brief-v1.json +340 -0
  78. package/examples/library-loans/brief.json +502 -0
  79. package/examples/library-loans/build-rsform.ts +239 -0
  80. package/examples/library-loans/requirements-v1.md +11 -0
  81. package/examples/library-loans/requirements-v2.md +5 -0
  82. package/examples/library-loans/rsform-session-v1.json +481 -0
  83. package/examples/library-loans/rsform-session.json +652 -0
  84. package/examples/library-loans/source-markup.md +18 -0
  85. package/examples/movd/brief.json +220 -0
  86. package/examples/movd/build-rsform.ts +5 -2
  87. package/examples/movd/rsform-session.json +14 -46
  88. package/examples/subordination/NOTES.md +59 -0
  89. package/examples/subordination/anti/collapsed.json +556 -0
  90. package/examples/subordination/anti/single-relation.json +125 -0
  91. package/examples/subordination/anti/transitive.json +573 -0
  92. package/examples/subordination/anti/weakened.json +539 -0
  93. package/examples/subordination/brief.json +386 -0
  94. package/examples/subordination/build-rsform.ts +63 -0
  95. package/examples/subordination/constants.ts +115 -0
  96. package/examples/subordination/rsform-session.json +556 -0
  97. package/examples/subordination/source-markup.md +19 -0
  98. package/examples/subordination/source.md +40 -0
  99. package/package.json +29 -20
  100. package/skills/INSTALL.md +28 -29
  101. package/skills/README.md +25 -10
  102. package/skills/rs-core/SKILL.md +56 -0
  103. package/skills/rs-explain/SKILL.md +28 -0
  104. package/skills/rs-explicate/SKILL.md +71 -0
  105. package/skills/rs-interpret/SKILL.md +67 -0
  106. package/skills/rs-portal/SKILL.md +51 -0
  107. package/skills/rs-review/SKILL.md +79 -0
  108. package/skills/rs-scope/SKILL.md +67 -0
  109. package/skills/rs-synthesis/SKILL.md +52 -0
  110. package/skills/rstool/SKILL.md +70 -0
  111. package/skills/rstool-helper/GUIDE.md +18 -272
  112. package/skills/rstool-helper/SKILL.md +8 -55
  113. package/skills/{rstool-helper → rstool-runtime}/EXAMPLES.md +40 -12
  114. package/skills/{rstool-helper → rstool-runtime}/REFERENCE.md +28 -7
  115. package/skills/rstool-runtime/SKILL.md +96 -0
  116. package/skills/scripts/brief-check.test.ts +165 -0
  117. package/skills/scripts/brief-check.ts +826 -0
  118. package/skills/scripts/check-brief.ts +94 -0
  119. package/skills/scripts/rstool-skills.mjs +119 -0
  120. package/skills/scripts/skill-stubs.test.ts +48 -0
  121. package/src/mappers/model-adapter.ts +34 -1
  122. package/src/models/rstool-agent.test.ts +95 -0
  123. package/src/wrapper/client.test.ts +43 -4
  124. package/src/wrapper/client.ts +95 -16
  125. package/src/wrapper/stdio-handler.test.ts +43 -0
  126. package/src/wrapper/stdio-handler.ts +19 -5
package/docs/METHOD.md ADDED
@@ -0,0 +1,208 @@
1
+ # Метод концептуализации
2
+
3
+ Как строить КС, которая отвечает запросу пользователя, а не только проходит анализатор. Структура метода взята из учебника З. А. Кучкарова (далее Т1, Т2 — тома 1 и 2), определения и обозначения — из Portal ([DOMAIN.md](DOMAIN.md), корневой `CONTEXT.md`). Книга агенту не справочник: её буквы и устаревшие формулировки сюда уже переведены.
4
+
5
+ Цитаты приводятся по изданию: З. А. Кучкаров. Методы концептуального анализа и синтеза в теоретическом исследовании и проектировании социально-экономических систем. Т. 1–2. 3-е изд. М.: Концепт, 2008. Права на текст принадлежат организации-издателю.
6
+
7
+ ## Основная мысль
8
+
9
+ КС ценна не числом конституент и не отсутствием диагностик, а тем, что **выражает нужные понятия и различения**. Поэтому работа начинается с задачи и требований к схеме, а не со словаря источника, и каждое решение о ядре записывается.
10
+
11
+ Готово = выполнены требования к выразительным средствам, различения разведены, инварианты выражены аксиомами, это подтверждено сценариями на КМ, и диагностики чисты. Чистые диагностики — необходимое, но не достаточное условие.
12
+
13
+ ## Таблица соответствия: книга → Portal
14
+
15
+ | В книге | На Portal |
16
+ | :------------------------------------------------------------- | :--------------------------------------------------------------- |
17
+ | `D` — родовая структура | `S#` — родовая структура |
18
+ | `T` — терм | `D#` — терм; `F#` / `P#` — терм- и предикат-функции |
19
+ | `A` — аксиома | `A#` — аксиома |
20
+ | «теорема» | `T#` — высказывание (типа «теорема» на Portal нет) |
21
+ | основные множества | базисные множества `X#`; константные `C#`; ступень `Z` |
22
+ | ступени, шкала множеств (Бурбаки) | типизация ЯРЭ ([TYPIFICATION.md](TYPIFICATION.md)) |
23
+ | атрибутивная → теоретико-множественная → родоструктурная формы | одна запись на ЯРЭ; атрибутивная проверка — строка `via` в брифе |
24
+ | документация на теорию | бриф и журнал решений ([BRIEF.md](BRIEF.md)) |
25
+ | интерпретация в конце цикла | сценарии на КМ с начала работы («сначала тест») |
26
+
27
+ Не переноси буквы книги в схему: книжный `D1` — это наш `S1`, книжный `T1` — наш `D1`.
28
+
29
+ Журнал решений — прямое продолжение требования книги:
30
+
31
+ > «Решение каждый раз фиксируется, и если оно меняется, то это должно отражаться в документации на теорию. Если теория, как и компьютерная программа, документируется плохо, то “модулей” становится очень много, вследствие этого теория становится неудерживаемой и неконтролируемой» — Т1 §1.2.7.
32
+
33
+ ## Подход: исследовательский и проектный
34
+
35
+ Назначение схемы задаёт строгость проверок (поле `approach` брифа).
36
+
37
+ | `approach` | Что считается ответом на запрос | Строгость |
38
+ | :---------- | :-------------------------------------------------------------------------------------------------------------------- | :------------------------------------------------------------------------------------------------- |
39
+ | `research` | Термины источника получили точные определения; смешанное в тексте разведено; противоречия и пробелы источника названы | Различения обязательны. Элементы базисных множеств могут быть условными. «Сироты» — предупреждение |
40
+ | `education` | Схема минимальна, каждое определение объяснимо, решения по ядру видны | Сценарий на каждое требование |
41
+ | `project` | Покрыты сущности, роли, состояния и бизнес-правила; ядро пригодно для синтеза | Позитивный и негативный сценарий у каждого инварианта; конвенции обязательны; «сироты» — ошибка |
42
+
43
+ При проектном подходе (ПО, ОСС) каждый элемент базисного множества должен быть дан фактически: в сценариях — реальные объекты. При исследовательском интерпретируются производные понятия; элементы базисных множеств могут быть условными.
44
+
45
+ > «При проектном подходе мы должны реализовать то, что положили в схеме, каждый элемент схемы должен материализоваться… множество исходных понятий должно быть дано фактически. При исследовательском подходе… схемы получают интерпретацию только в части своих производных понятий» — Т1 §1.5.2.4.
46
+
47
+ ## Роли: методник и предметник
48
+
49
+ Агент — **методник**: знает метод и язык, предлагает варианты. Пользователь — **предметник**: знает предметную область и решает спорное. Показанная предметнику гипотеза ядра порождает у него вопросы, которые он сам бы не задал («схемное увеличение»). Отсюда два раунда вопросов: до формализации и после гипотезы ядра.
50
+
51
+ > «Нередко предметник-профессионал с удивлением обнаруживает, что на вопросы, возникшие из логики синтеза, они не знают ответа, что такие вопросы ранее у них не возникали… всегда возникает некое “схемное увеличение”, позволяющее рассмотреть подробнее детали» — Т1 §1.6.2.1.
52
+
53
+ Правила вопросов:
54
+
55
+ - раунд 1 — не больше 5 вопросов, раунд 2 — не больше 4;
56
+ - у каждого вопроса — предложенный ответ и следствие для выразимости, чтобы пользователь мог просто подтвердить;
57
+ - пользователь подтверждает бриф целиком; новый вопрос — только при появлении нового различения или требования;
58
+ - если спросить нельзя (фоновый агент) — ответы записываются в `assumptions`, статус брифа `assumed`.
59
+
60
+ ## Этапы
61
+
62
+ Маршрут по умолчанию, а не ритуал. Последовательность не алгоритмична: возврат к любому этапу разрешён, и инструмент проверки брифа подсказывает, куда вернуться. Для точечной правки этапы 1–2 сводятся к одной строке брифа.
63
+
64
+ > «…определенной алгоритмической последовательности их применения в настоящее время нет… не надо воспринимать методные возможности как догму» — Т1 §1.2.1.1.
65
+
66
+ ### Этап 1. Постановка
67
+
68
+ **Выделение предметной области** — через задачу и точку зрения. Объект исследования (`object`) и задача (`task`) пишутся одной-двумя фразами. Предметная область задаётся в основном **отрицательно**: что исключено (время, история, процедуры, психология, оплата…). У каждого ограничения — перечень понятий, которые из-за него станут **невыразимыми** (`restrictions[].inexpressible`). Пользователь видит цену ограничения до формализации.
69
+
70
+ > «Определение может носить отрицательный характер, т.е. не прямо определять предмет концептуализации, а исключать то, что концептуализации подлежать не будет, “высекая”, таким образом, предметную область из неограниченного содержания» — Т1 §1.2.2.
71
+ >
72
+ > «…не будут различаться “бывшие”, “настоящие” и “будущие” отношения “начальник – подчиненный”. Таким образом, понятие “мой подчиненный, который является моим бывшим начальником” – невыразимо в этой теории» — Т2 §4.2.1.2.
73
+
74
+ **Расчистка источника** — две сетки разметки текста:
75
+
76
+ 1. по статусу утверждения: определение; правило (ограничение); пример; термин без определения; оценочное или нерелевантное;
77
+ 2. по смысловым блокам: о чём фрагмент (сущность, роль, отношение, состояние, правило).
78
+
79
+ Нерелевантное и оценочное («интерфейс должен быть удобным») в схему не идёт; исключённое по задаче — в `restrictions`. Расчистка — главное средство против пересказа источника.
80
+
81
+ > «…необходимы разметка содержания по статусам и группировка частей по понятийным блокам. Для этого строятся две сетки: первая – по статусу, вторая – по основным содержательным блокам» — Т1 §1.2.3.
82
+
83
+ **Требования к выразительным средствам** (`expressiveness`) — понятия, которые схема обязана выразить. Это то, ради чего схему просили. Каждое требование проверяемо: для него можно написать пример или контрпример. Ориентир из инженерии онтологий — competency questions.
84
+
85
+ > «Исследователь должен знать, каковы будут выразительные возможности теории, с помощью которой он намерен решить выдвинутую им задачу» — Т1 §1.2.4.
86
+
87
+ **Различения** (`distinctions`) — пары понятий, которые в запросе смешаны или легко смешиваются: «назначенный» и «написавший», «активная» и «просроченная выдача». Разнообразие различений — главная ценность схемы: она должна вскрыть различение там, где в запросе было одно неразличённое понятие.
88
+
89
+ > «Основной целью концептуализации является вскрытие разнообразия там, где имеет место единственное, не различенное» — Т1 §1.2.17.
90
+
91
+ **Инварианты** (`invariants`) — правила, которые схема должна выражать аксиомами.
92
+
93
+ **Классификация** в требованиях (статусы, категории): одно основание, полнота, непересекаемость. Она даёт пару аксиом разбиения (`S2∪S3=X1 & S2∩S3=∅`), а не коды в `C#`.
94
+
95
+ > «– на протяжении деления должно удерживаться одно основание; – результаты деления совокупности на классы должны полностью исчерпывать совокупность признаков; – классы… не должны иметь общих элементов… Аксиома 1. Каждый объект принадлежит какому-нибудь классу. Аксиома 2. Каждый объект попадает только в один класс» — Т1 §1.2.29.
96
+
97
+ Гейт: задача, ограничения и невыразимое записаны; каждое требование и инвариант проверяемы; раунд 1 вопросов пройден, остальное — в допущениях; бриф `confirmed` или `assumed`.
98
+
99
+ ### Этап 2. Ядро
100
+
101
+ Ядро выбирается **под требования**, а не под словарь, и проверяется на них **до формул**.
102
+
103
+ **Исходные понятия как гипотеза.** Каждое кандидат-неопределяемое понятие проверяется: не являются ли два кандидата видами одного рода? Вопрос «может ли начальник быть подчинённым?» ведёт к более высокой абстракции «люди» с отношением подчинения вместо двух базисных множеств. Признак: интерпретации двух `X#` пересекаются, или требование связывает их элементы как одно и то же лицо.
104
+
105
+ > «Эту гипотезу нужно проверить следующим образом: могут ли начальники сами быть подчиненными по отношению к другим, и, наоборот, подчиненные сами быть начальниками? Известное содержание однозначно говорит, что могут… существует более высокая абстракция, чем начальник – подчиненный» — Т2 §4.2.1.4.
106
+
107
+ **Родовое, а не видовое.** Если положить вид вместо рода, теряются остальные виды. Пример: однозначная функция там, где нужно отношение; симметричное отношение там, где в тексте «считает». Два понятия с общей частью — признак того, что ни одно не родовое.
108
+
109
+ > «Наличие двух понятий, имеющих общую часть, указывает на то, что каждое из них не является родовым… если вместо родового отношения используется видовое, то исследователи теряют другие виды» — Т1 §1.2.18.
110
+
111
+ **Не удваивать сущности.** Выводимое не вводится как исходное: производное — `D#`/`F#`/`P#`, а не новое `S#`. Неопределяемые понятия равноуровневы: ни одно не выражается через другие.
112
+
113
+ > «Если мы вводим то, что выводимо, повторно, как исходное понятие, то это и будет удвоение сущности… надо гарантировать (или стремиться к тому), чтобы эти абстракции были одного уровня» — Т1 §1.2.12.
114
+
115
+ **Альтернативные гипотезы основного отношения.** Для основного отношения рассматриваются 2–3 варианта (единичное / множественное / оба; читатель × экземпляр или читатель × издание; кортеж или сущность с отношениями). Варианты сравниваются по выразительной силе: «избыточно» или «недостаточно» для требований. Выбор записывается в журнал решений.
116
+
117
+ > «Постулируя одно из двух или оба отношения, мы либо делаем теорию избыточной (выразительных средств гораздо больше, чем нужно), либо недостаточной» — Т2 §4.2.1.5.1.
118
+
119
+ **Свойства отношения как решения.** Для каждой родовой структуры проходится стандартный перечень:
120
+
121
+ | Свойство | Пример аксиомы |
122
+ | :---------------------------------- | :------------------------------------- |
123
+ | рефлексивность / антирефлексивность | `∀ξ∈X1 (ξ,ξ)∉S1` |
124
+ | симметричность / асимметричность | `∀(α,β)∈S1 (β,α)∉S1` |
125
+ | транзитивность; ацикличность | через замыкание `R{}`: `∀ξ∈X1 ξ∉F2[ξ]` |
126
+ | однозначность (функциональность) | `card(S1)=card(Pr1(S1))` |
127
+ | всюду определённость | `Pr1(S1)=X1` |
128
+ | несовместимость с другой структурой | `S1∩S2=∅` |
129
+
130
+ Свойства не переносятся по привычке: «Аксиомы логически вытекают из ограничения предметной области» (Т2 §4.2.1.5.3). В разборе подчинения книга не запрещает ни симметричность, ни циклы — подчинение многоаспектно, и главнокомандующий может быть подчинён генштабу, которым руководит. По каждому свойству — решение с обоснованием. **Отсутствие аксиомы — тоже решение** и записывается в журнал (`choice: "без аксиомы"`). Спорные свойства выносятся на раунд 2 вопросов.
131
+
132
+ > «…мы не вводим аксиому, требующую, чтобы отношение было определено на всем множестве людей. На этом примере подчеркнем, что отсутствие аксиом – тоже решение, т.к. это соответствует содержанию» — Т2 §4.2.1.5.3.
133
+
134
+ **Проверка выразительных возможностей ядра** — до экспликации. Для каждого требования одна строка: как оно выразится через ядро (поле `via`: «`Pr2` выдач», «дополнение к E1 в `X2`», «замыкание блокировок»). Не выражается — меняется гипотеза ядра, а не формула. Это дешёвый гейт против непокрытого запроса.
135
+
136
+ > «Составляется список понятий, которые мы хотим выразить, но уже в понятиях теории, введенных на предыдущих этапах… это отношение не дает понятия “коллективного руководства”. Следовательно, можно сделать вывод, что этот вариант отношений предметную область не отражает» — Т2 §4.2.1.7. Отсюда смена гипотезы: от единичного отношения к множественному.
137
+
138
+ **Ограниченное исследование.** Термы первого ранга от ядра (проекции, дополнения вида `X1\Pr1(S1)`, пересечения однотипных структур) полезно перечислить и показать пользователю как «разнообразие» — источник вопросов раунда 2. В схему целиком они не добавляются.
139
+
140
+ **Размер микротеории:** 3–6 отношений и 2–4 уровня конкретизации. Если требований больше, схема делится на микротеории, которые собираются синтезом (ОСС).
141
+
142
+ > «Получающиеся при этом концептуальные схемы содержат, как правило, до 3–6 отношений (“элементарных теорий”) и 2–4 уровня конкретизации. Такие схемы мы относим к классу “микротеорий”» — Т1, предисловие.
143
+
144
+ Гейт: каждое требование имеет `via`; решения по основному отношению и свойствам записаны; раунд 2 пройден; размер в пределах микротеории или есть план синтеза.
145
+
146
+ ### Этап 3. Экспликация
147
+
148
+ Развёртывание **от требований**: выводятся только нужные понятия и их поставщики, через раскрытие структуры (`Pr`, `red`) и обособление (`F#`/`P#` для выражений со свободными переменными) — см. `CONTEXT.md`. Формально-дедуктивное развёртывание всех термов по рангам не нужно: число термов растёт комбинаторно.
149
+
150
+ Правила проектирования формул — [CONCEPTUAL-SCHEMA.md](CONCEPTUAL-SCHEMA.md); синтаксис — [SYNTAX.md](SYNTAX.md); диагностики — [DIAGNOSTICS.md](DIAGNOSTICS.md).
151
+
152
+ **Смысл важнее «зелёного».** Исправление диагностики не меняет смысл. Нельзя ради чистых диагностик:
153
+
154
+ - удалять или ослаблять аксиому, связанную с инвариантом брифа, без нового решения в журнале;
155
+ - превращать производное понятие (`D#`/`F#`/`P#`) в `S#`, `X#` или `C#`;
156
+ - заменять формулу тривиальной (`∅`, голая ссылка `D5 := X1`, тавтология);
157
+ - удалять конституенту, на которую ссылается бриф, или оставлять непустой `failed` после `best_effort`;
158
+ - оставлять пустую конвенцию у неопределяемого понятия.
159
+
160
+ Если смысл не удаётся выразить — вернись к ядру (другая гипотеза, промежуточные `D#`/`F#`) и запиши решение. Если ЯРЭ этого не выражает — запиши `openQuestions` и честно скажи «готово частично».
161
+
162
+ Гейт: диагностики чисты; ни одно требование не ослаблено; `failed` пуст.
163
+
164
+ ### Этап 4. Интерпретация
165
+
166
+ Сценарии брифа (`scenarios`) — маленькие интерпретации с ожиданиями: примеры и контрпримеры. Пишутся **в бриф до формул** (этап 1–2) и прогоняются на КМ непрерывно. Значения задаются подписями элементов. Ориентир — приёмочные тесты.
167
+
168
+ - У каждого инварианта — позитивный (аксиома истинна) и негативный (ложна) сценарий.
169
+ - У каждого различения — сценарий-свидетель, на котором значения понятий различаются.
170
+ - При развитии схемы старые сценарии — регрессия.
171
+
172
+ **Гипотетико-дедуктивный цикл:** гипотеза → вывод → интерпретация → пересмотр гипотезы. Провалился сценарий — сначала спроси, верна ли гипотеза ядра, и только потом правь формулу. Подгонка формулы под сценарий без пересмотра смысла — то же «озеленение».
173
+
174
+ > «Затем производные понятия переносятся в предметную область, интерпретируются и на основе сравнения пересматриваются исходные предположения. Цикл “гипотеза-дедукция-интерпретация” замыкается» — Т1 §1.2.8.
175
+
176
+ Гейт: все сценарии проходят; у каждого инварианта есть позитив и негатив; каждое различение подтверждено.
177
+
178
+ ### Этап 5. Ревью и сдача
179
+
180
+ Ревью в два прохода: сначала **соответствие брифу** (требования, различения, инварианты, невыразимое, решения), затем форма ЯРЭ. Отчёт начинается с таблицы «требование → конституента → доказательство (сценарий)».
181
+
182
+ **Когда КС закончена.** Когда выведенными понятиями объясняется всё зафиксированное содержание. Если требование не покрыто, причина — одна из трёх: утеряна абстракция (не хватает исходного понятия), понятие не выведено, или не реализована комбинация синтеза (нужна другая микротеория). Отчёт называет причину и следующий шаг.
183
+
184
+ > «Если же остались какие-то необъяснимые части содержания, то можно предположить, что: – либо одна из абстракций утеряна, – либо она еще не выражена в имеющейся теории, – либо имеется нереализованная комбинация синтеза» — Т1 §1.2.18.
185
+
186
+ ## Синтез микротеорий
187
+
188
+ Сложная предметная область — несколько микротеорий, объединённых синтезом через таблицу отождествлений ([DOMAIN.md](DOMAIN.md) «Синтез», [PORTAL-OSS.md](PORTAL-OSS.md)).
189
+
190
+ Правила отождествления: исходное с исходным — можно; исходное одной схемы с производным другой — можно, при этом понятие становится конкретнее; производное с производным — только при полном совпадении структуры. Синтетическая аксиома связывает понятия разных микротеорий (пример: «прямой родственник не может быть в прямом подчинении»).
191
+
192
+ **Бриф синтеза.** У каждой схемы ОСС свой бриф; брифы аргументов в результат не переносятся. Бриф результата описывает то, что даёт сам синтез: отождествления и новые отношения (решения), новые выводимые понятия (требования), синтетические аксиомы (инварианты). Синтез без нового — лишний.
193
+
194
+ **Имена после синтеза.** Встроенные конституенты получают новые номера (rstool — следующие свободные по типу; синтез в ОСС на Portal перенумеровывает все имена подряд). Формулы, типизация и ссылки в терминах и текстовых определениях перенумеровываются автоматически, конвенции — нет. Поэтому в конвенциях только предметный смысл: без имён конституент и без номеров решений брифа.
195
+
196
+ > «Не запрещено отождествлять производное понятие одной теории с исходным понятием другой… уровень абстракции этого понятия повышается… Запрещается отождествлять производные понятия с производными, за исключением очень незначительного числа совпадений, которые заключаются в полном совпадении структуры понятий» — Т1 §1.2.18.
197
+
198
+ ## Современные ориентиры
199
+
200
+ Для агента, не для текста пользователю: требования к выразительным средствам ≈ competency questions; сценарии ≈ приёмочные тесты; расчистка ≈ разметка требований; микротеория ≈ модуль онтологии; синтез ≈ слияние онтологий с таблицей соответствий; журнал решений ≈ ADR.
201
+
202
+ ## Учебные примеры
203
+
204
+ | Пример | Что показывает |
205
+ | :---------------------------------------------------------------------- | :--------------------------------------------------------------------------- |
206
+ | [`examples/subordination/`](../examples/subordination/) | этапы 1–2 целиком: ограничения, альтернативы, свойства как решения |
207
+ | [`examples/kinship/`](../examples/kinship/) | родовое отношение «быть ребёнком» и выведенное разнообразие; бриф «обучение» |
208
+ | [`examples/kinship-subordination/`](../examples/kinship-subordination/) | синтез двух микротеорий и синтетическая аксиома |
@@ -35,6 +35,16 @@ await tool.setModelValues({
35
35
 
36
36
  Здесь `X1` получает подписи элементов, а `S1: ℬ(X1×X1)` получает множество пар по индексам элементов `X1`.
37
37
 
38
+ - Порядок элементов и дубликаты во входе не важны: `setModelValues` приводит значения `S#` к канонической форме (сортировка `compare`, без повторов). В `getModelState` и в результатах вычисления множества всегда отсортированы — сравнивай с ожиданием как с отсортированным массивом.
39
+ - Кортежи — `[TUPLE_ID, …]`; вложенные множества — обычные массивы (`ℬℬ(X1)`: `[[0, 1], [2]]`).
40
+ - `status` в `evaluate` / `recalculateModel` — числовой `EvalStatus` (`7` `HAS_DATA`, `6` `EMPTY`, `5` `AXIOM_FALSE`, `4` `EVAL_FAIL`); таблица — в `REFERENCE.md`.
41
+
42
+ ## Чтение результата
43
+
44
+ - Конституента: `evaluate({ constituentId })` — вычисляет её и все поставщики.
45
+ - Scratch: `evaluate({ expression, cstType })`. `cstType` задаёт ожидаемую ступень: `'term'` — множество или число, `'axiom'` — логическое выражение (`P1[S1]`, `D2⊆S1`). В scratch-выражении можно ссылаться на любые конституенты схемы, включая производные `D#`.
46
+ - Литералов элементов `X#` в ЯРЭ нет: выражай тестовые элементы через схему (`debool(D3)`, `Pr1(S1)\Pr2(S1)`), а не через подписи.
47
+
38
48
  ## Скрипты-тесты
39
49
 
40
50
  Если проверка влияет на поведение схемы или есть риск регрессии, вынеси ее в маленький скрипт или colocated `*.test.ts`:
@@ -46,6 +56,44 @@ await tool.setModelValues({
46
56
 
47
57
  Тест должен проверять смысл формулы, а не только отсутствие диагностик. Для аксиом отдельно проверяй положительный и отрицательный набор данных: корректная модель должна давать истинную аксиому, ошибочная — `AXIOM_FALSE` или диагностируемый сбой вычисления.
48
58
 
59
+ ```ts
60
+ import { EvalStatus, TUPLE_ID } from '@rsconcept/domain';
61
+
62
+ // X1 — вершины, S1: ℬ(X1×X1) — рёбра, A1 ::= ∀α∈X1 α∉F4[α] — ацикличность
63
+ const X1 = 1,
64
+ S1 = 2,
65
+ A1 = 17;
66
+ await tool.setModelValues({
67
+ set: [
68
+ { target: X1, value: { 0: 'a', 1: 'b', 2: 'c' } },
69
+ {
70
+ target: S1,
71
+ value: [
72
+ [TUPLE_ID, 0, 1],
73
+ [TUPLE_ID, 1, 2]
74
+ ]
75
+ }
76
+ ]
77
+ });
78
+ let a1 = tool.evaluate({ constituentId: A1 });
79
+ // a1.status === EvalStatus.HAS_DATA, a1.value === 1
80
+
81
+ await tool.setModelValues({
82
+ set: [
83
+ {
84
+ target: S1,
85
+ value: [
86
+ [TUPLE_ID, 0, 1],
87
+ [TUPLE_ID, 1, 2],
88
+ [TUPLE_ID, 2, 0]
89
+ ]
90
+ }
91
+ ]
92
+ });
93
+ a1 = tool.evaluate({ constituentId: A1 });
94
+ // a1.status === EvalStatus.AXIOM_FALSE, a1.value === 0
95
+ ```
96
+
49
97
  ## Ограничения
50
98
 
51
99
  - Маленькая КМ проверяет семантику на выбранных данных, но не доказывает определение для всех моделей.