@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.
- package/README.md +3 -3
- package/dist/mappers/model-adapter.d.ts +1 -2
- package/dist/mappers/schema-adapter.d.ts +1 -2
- package/dist/mappers/types.d.ts +4 -5
- package/dist/models/rstool-agent.js +1 -2
- package/dist/session/session-store.d.ts +3 -3
- package/dist/session/session-store.js +1 -2
- package/dist/wrapper/client.d.ts +3 -4
- package/docs/BRIEF.md +93 -0
- package/docs/CONCEPTUAL-SCHEMA.md +16 -1
- package/docs/CONSTRUCTIONS.md +14 -2
- package/docs/DIAGNOSTICS.md +3 -2
- package/docs/DOMAIN.md +12 -0
- package/docs/METHOD.md +208 -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 +7 -4
- package/docs/REQUIREMENTS.md +61 -0
- package/docs/SYNTAX.md +4 -3
- package/docs/TYPIFICATION.md +1 -1
- 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 +18 -10
- 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 -299
- package/skills/rstool-helper/SKILL.md +8 -58
- package/skills/{rstool-helper → rstool-runtime}/EXAMPLES.md +16 -12
- package/skills/{rstool-helper → rstool-runtime}/REFERENCE.md +7 -5
- 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/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@rsconcept/rstool",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.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.",
|
|
5
5
|
"license": "MIT",
|
|
6
6
|
"author": "IRBorisov",
|
|
@@ -32,6 +32,7 @@
|
|
|
32
32
|
"types": "./dist/wrapper/client.d.ts",
|
|
33
33
|
"import": "./dist/wrapper/client.js"
|
|
34
34
|
},
|
|
35
|
+
"./skills/*": "./skills/*",
|
|
35
36
|
"./skills/rstool-helper/*": "./skills/rstool-helper/*",
|
|
36
37
|
"./skills/INSTALL.md": "./skills/INSTALL.md",
|
|
37
38
|
"./docs/*": "./docs/*",
|
|
@@ -39,7 +40,8 @@
|
|
|
39
40
|
"./package.json": "./package.json"
|
|
40
41
|
},
|
|
41
42
|
"bin": {
|
|
42
|
-
"rstool-wrapper": "dist/wrapper/stdio-wrapper.js"
|
|
43
|
+
"rstool-wrapper": "dist/wrapper/stdio-wrapper.js",
|
|
44
|
+
"rstool-skills": "skills/scripts/rstool-skills.mjs"
|
|
43
45
|
},
|
|
44
46
|
"files": [
|
|
45
47
|
"dist",
|
|
@@ -51,18 +53,18 @@
|
|
|
51
53
|
"LICENSE"
|
|
52
54
|
],
|
|
53
55
|
"dependencies": {
|
|
54
|
-
"
|
|
55
|
-
"eslint
|
|
56
|
-
"
|
|
56
|
+
"@rsconcept/domain": "3.2.0",
|
|
57
|
+
"eslint": "^10.13.0",
|
|
58
|
+
"eslint-plugin-simple-import-sort": "^14.0.0"
|
|
57
59
|
},
|
|
58
60
|
"devDependencies": {
|
|
59
|
-
"@types/node": "^26.
|
|
60
|
-
"@vitest/coverage-v8": "^
|
|
61
|
-
"tsdown": "^0.
|
|
62
|
-
"tsx": "^4.23.
|
|
61
|
+
"@types/node": "^26.6.5",
|
|
62
|
+
"@vitest/coverage-v8": "^5.0.5",
|
|
63
|
+
"tsdown": "^0.23.1",
|
|
64
|
+
"tsx": "^4.23.15",
|
|
63
65
|
"typescript": "^6.0.3",
|
|
64
66
|
"unrun": "^0.3.1",
|
|
65
|
-
"vitest": "^
|
|
67
|
+
"vitest": "^5.0.5"
|
|
66
68
|
},
|
|
67
69
|
"publishConfig": {
|
|
68
70
|
"access": "public"
|
|
@@ -84,6 +86,12 @@
|
|
|
84
86
|
"example:build-movd-rsmodel": "tsx examples/movd/build-rsmodel.ts",
|
|
85
87
|
"example:build-expression-bank-schema": "tsx examples/expression-bank/build-rsform.ts",
|
|
86
88
|
"example:build-template-apply-schema": "tsx examples/template-apply/build-rsform.ts",
|
|
89
|
+
"example:build-subordination-schema": "tsx examples/subordination/build-rsform.ts",
|
|
90
|
+
"example:build-kinship-subordination-schema": "tsx examples/kinship-subordination/build-rsform.ts",
|
|
91
|
+
"example:build-library-loans-schema": "tsx examples/library-loans/build-rsform.ts",
|
|
92
|
+
"example:build-access-control-schema": "tsx examples/access-control/build-rsform.ts",
|
|
93
|
+
"example:build-clinic-booking-schema": "tsx examples/clinic-booking/build-rsform.ts",
|
|
94
|
+
"check-brief": "tsx skills/scripts/check-brief.ts",
|
|
87
95
|
"example:audit-diagnostics": "tsx examples/audit-diagnostics.ts",
|
|
88
96
|
"kinship:cli": "tsx examples/kinship/cli.ts"
|
|
89
97
|
}
|
package/skills/INSTALL.md
CHANGED
|
@@ -1,35 +1,34 @@
|
|
|
1
|
-
# Install `rstool
|
|
1
|
+
# Install the `rstool` skill (agent procedure)
|
|
2
2
|
|
|
3
3
|
Use when the user has run `npm install @rsconcept/rstool` and asks to **install** or **enable** the rstool agent skill. The user should not copy files manually.
|
|
4
4
|
|
|
5
|
+
The steps are agent-neutral. Map each one to the conventions of your own host (which instructions file it always loads, whether and where it loads project skills); if unsure, ask the user.
|
|
6
|
+
|
|
7
|
+
The skill content stays in the package: the router `node_modules/@rsconcept/rstool/skills/rstool/SKILL.md`, the stage skills `skills/rs-*/`, `docs/`, `examples/`. Installing only adds pointers to the router, so nothing needs re-installing after a package update.
|
|
8
|
+
|
|
5
9
|
## Steps
|
|
6
10
|
|
|
7
11
|
1. Confirm the package exists: `node_modules/@rsconcept/rstool/package.json`.
|
|
8
|
-
2.
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
New-Item -ItemType Directory -Force -Path .agents/skills/rstool-helper | Out-Null
|
|
32
|
-
Copy-Item -Force node_modules/@rsconcept/rstool/skills/rstool-helper/SKILL.md .agents/skills/rstool-helper/SKILL.md
|
|
33
|
-
```
|
|
34
|
-
|
|
35
|
-
Use the equivalent path for your agent host if it does not use `.agents/skills`.
|
|
12
|
+
2. **Routing line** — the required part. Add it to the project instructions file that your host always keeps in context: `AGENTS.md` if the project has one (create it if the project uses none), otherwise your host's own file. If your host reads `AGENTS.md` through another file (for example, `CLAUDE.md` with `@AGENTS.md`), the line in `AGENTS.md` is enough.
|
|
13
|
+
|
|
14
|
+
```md
|
|
15
|
+
- Conceptual schemas (КС), RSLang (ЯРЭ), rstool or Portal → read `node_modules/@rsconcept/rstool/skills/rstool/SKILL.md` and follow it.
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
If the file lists the project skills, put the line in that list.
|
|
19
|
+
|
|
20
|
+
3. **Stub for auto-triggering** — optional, only if your host loads skills from a project folder. Use one folder: if the project already keeps its skills in a shared one (for example, `.agents/skills/`) and your host reads it, use that instead of adding a host-specific copy.
|
|
21
|
+
|
|
22
|
+
```bash
|
|
23
|
+
npx rstool-skills install --dir <skills-dir>
|
|
24
|
+
```
|
|
25
|
+
|
|
26
|
+
It writes `<skills-dir>/rstool/SKILL.md`: `name: rstool`, the router's `description` verbatim and one line «Прочитай `node_modules/@rsconcept/rstool/skills/rstool/SKILL.md` и следуй ему.» Without the bin: `npx rstool-skills stub` prints the same text, or write it by hand.
|
|
27
|
+
|
|
28
|
+
4. If the project has an old copied `rstool-helper/SKILL.md`, delete that folder — `rstool` replaces it.
|
|
29
|
+
5. Tell the user what was added and where.
|
|
30
|
+
|
|
31
|
+
## Do not
|
|
32
|
+
|
|
33
|
+
- Copy the stage skills (`rs-*`), `docs/` or `examples/` into the project: the router reads them from the package by path when a stage needs them.
|
|
34
|
+
- Write stubs into several folders that one host reads: it shows the skill twice.
|
package/skills/README.md
CHANGED
|
@@ -1,21 +1,36 @@
|
|
|
1
1
|
# Agent skills (`@rsconcept/rstool`)
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
One registered entry (`rstool`, the router) and stage / tool skills read by path. Skill text is Russian. Plan — [`../plans/skills-rework.html`](../plans/skills-rework.html).
|
|
4
4
|
|
|
5
5
|
## Layout
|
|
6
6
|
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
-
|
|
7
|
+
| Skill | Role |
|
|
8
|
+
| :------------------------------------------- | :------------------------------------------------------------------ |
|
|
9
|
+
| [`rstool/`](rstool/SKILL.md) | Router: scenario → stages, brief, anti-greening rules, report |
|
|
10
|
+
| [`rs-scope/`](rs-scope/SKILL.md) | Stage 1: scope, source markup, expressiveness requirements, round 1 |
|
|
11
|
+
| [`rs-core/`](rs-core/SKILL.md) | Stage 2: core hypotheses, properties as decisions, round 2 |
|
|
12
|
+
| [`rs-explicate/`](rs-explicate/SKILL.md) | Stage 3: RSLang formulas, diagnostics without losing meaning |
|
|
13
|
+
| [`rs-interpret/`](rs-interpret/SKILL.md) | Stage 4: brief scenarios on small models |
|
|
14
|
+
| [`rs-review/`](rs-review/SKILL.md) | Stage 5: review against the brief, then form; report template |
|
|
15
|
+
| [`rs-synthesis/`](rs-synthesis/SKILL.md) | Operation: synthesis of microtheories, OSS |
|
|
16
|
+
| [`rs-explain/`](rs-explain/SKILL.md) | Explaining a formula or construction |
|
|
17
|
+
| [`rs-portal/`](rs-portal/SKILL.md) | Tool: Portal REST, publish protocol |
|
|
18
|
+
| [`rstool-runtime/`](rstool-runtime/SKILL.md) | Tool: calling rstool; `REFERENCE.md` (contract), `EXAMPLES.md` |
|
|
19
|
+
| [`scripts/`](scripts/) | `check-brief.ts` (brief readiness), `rstool-skills.mjs` (install) |
|
|
20
|
+
| `rstool-helper/` | Deprecated stub → `rstool`; removed in the next minor release |
|
|
21
|
+
|
|
22
|
+
Only `rstool` is an entry point: a routing line in the project `AGENTS.md` and, where the host loads a project skills folder, a stub (name, description and the path; in the Portal workspace — `.agents/skills/rstool/` and `.claude/skills/rstool/`). Stage skills are not registered: the router and `check-brief` name the stage, the agent reads `skills/<name>/SKILL.md`. Paths inside skills are written from the package root `<rstool>` — `rsconcept/rstool/` in the Portal workspace, `node_modules/@rsconcept/rstool/` in an npm project.
|
|
23
|
+
|
|
24
|
+
Language reference and method — [`../docs/`](../docs/README.md).
|
|
13
25
|
|
|
14
26
|
## npm workflow
|
|
15
27
|
|
|
16
28
|
1. `npm install @rsconcept/rstool`
|
|
17
|
-
2.
|
|
18
|
-
3.
|
|
19
|
-
|
|
29
|
+
2. Ask the agent to follow [`INSTALL.md`](INSTALL.md): an agent-neutral procedure that each agent maps to its own host.
|
|
30
|
+
3. The agent reads the router and stage skills from `node_modules/@rsconcept/rstool/skills/`.
|
|
31
|
+
|
|
32
|
+
## Editing
|
|
33
|
+
|
|
34
|
+
The stub description must match `rstool/SKILL.md`; `scripts/skill-stubs.test.ts` checks the workspace stubs. After changing the router description, re-run from the repo root: `node rsconcept/rstool/skills/scripts/rstool-skills.mjs install --dir .agents/skills --dir .claude/skills`.
|
|
20
35
|
|
|
21
36
|
Contract changes: see `AGENTS.md` in this package (sync checklist).
|
|
@@ -0,0 +1,56 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rs-core
|
|
3
|
+
description: >-
|
|
4
|
+
Этап 2 концептуализации: ядро. По подтверждённому брифу выбрать неопределяемые
|
|
5
|
+
понятия и основное отношение из 2–3 гипотез, решить свойства отношений
|
|
6
|
+
(аксиома или её отсутствие), задать вопросы раунда 2 и проверить, что каждое
|
|
7
|
+
требование выражается через ядро, — до формул.
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Этап 2 · Ядро
|
|
11
|
+
|
|
12
|
+
Пути — от `<rstool>`. Метод — `docs/METHOD.md` §«Этап 2». Выбор `X#` / `C#` / `Z` — `docs/BASE-SELECTION.md`.
|
|
13
|
+
|
|
14
|
+
## Вход
|
|
15
|
+
|
|
16
|
+
`brief.json` со статусом `confirmed` или `assumed`.
|
|
17
|
+
|
|
18
|
+
## Шаги
|
|
19
|
+
|
|
20
|
+
1. **Кандидаты в неопределяемые понятия.** Из требований (не из словаря источника) выпиши кандидатов в `X#`, `C#`, `S#`. Для каждой пары кандидатов спроси: не виды ли это одного рода? «Может ли начальник быть подчинённым?», «может ли член ПК быть автором?» — если да, это одно базисное множество с ролями-отношениями, а не два `X#`.
|
|
21
|
+
2. **Родовое, а не видовое.** Проверь, не взят ли вид вместо рода: функция там, где отношение («у экземпляра один читатель» — это аксиома, а не тип); симметричное отношение там, где «считает»; кортеж (группа, преподаватель, аудитория) там, где нужна сущность «занятие» с отношениями.
|
|
22
|
+
3. **Основное отношение: 2–3 гипотезы.** Для каждой — что выражается, что нет («избыточно» / «недостаточно» для требований). Выбери и запиши в `decisions`: `topic`, `alternatives`, `choice`, `rationale`.
|
|
23
|
+
4. **Свойства как решения.** Для каждой родовой структуры пройди перечень: рефлексивность, симметричность, транзитивность / ацикличность, однозначность, всюду определённость, несовместимость с другими структурами. По каждому свойству — решение в журнал: аксиома или **«без аксиомы»** с обоснованием. Отсутствие аксиомы — тоже решение.
|
|
24
|
+
5. **Выразимость до формул.** Для каждого требования запиши `via` — одной строкой, как оно выразится через ядро: «`Pr1` назначений минус авторы рецензий», «замыкание блокировок через `R{}`». Не выражается — меняй гипотезу ядра (шаг 1–3), а не откладывай на формулы. Если требование нужно другой микротеории — `rs-synthesis`.
|
|
25
|
+
6. **Разнообразие.** Перечисли 3–6 интересных термов первого ранга от ядра (проекции, дополнения вида `X1\Pr1(S1)`, пересечения однотипных структур). Их не добавляют в схему; это источник различений и вопросов раунда 2.
|
|
26
|
+
7. **Раунд 2 вопросов** — 1–4 вопроса о развилках, которые появились только после гипотезы ядра: спорные свойства, которые не спросили в раунде 1, выбор между гипотезами, интересные термы из шага 6. Каждый с предложенным ответом и следствием для выразимости: «может ли задача блокировать сама себя? — предлагаю нет, тогда …». Задай и **закончи ход**. Ответы — в `questions` (`round: 2`) и в `decisions`.
|
|
27
|
+
- Раунд 2 не пропускается молча. «Продолжайте» или «на ваше усмотрение» в ответ на раунд 1 закрывает только те вопросы, что уже заданы.
|
|
28
|
+
- Нет развилок — запиши это в бриф одной строкой и скажи в отчёте.
|
|
29
|
+
- Спросить нельзя — `assumptions`, а в отчёте строка: «раунд 2 не задавался, эти аксиомы — допущения: …».
|
|
30
|
+
8. **Размер.** 3–6 отношений и 2–4 уровня конкретизации. Больше — раздели на микротеории и запиши план синтеза в `decisions`.
|
|
31
|
+
9. **Сценарии.** Допиши в сценарии значения неопределяемых понятий выбранного ядра (подписями), чтобы этап 4 мог их прогнать.
|
|
32
|
+
|
|
33
|
+
## Выход
|
|
34
|
+
|
|
35
|
+
В `brief.json`: `via` у каждого требования, решения по ядру и свойствам, вопросы и ответы раунда 2, сценарии со значениями. Конвенции для `X#` / `C#` / `S#` — текстом в решениях (на этапе 3 они уйдут в конституенты).
|
|
36
|
+
|
|
37
|
+
## Гейт
|
|
38
|
+
|
|
39
|
+
- Каждое требование имеет `via`; нет требования «потом придумаем».
|
|
40
|
+
- Решения по основному отношению и по свойствам каждой структуры записаны, включая отсутствующие аксиомы.
|
|
41
|
+
- Раунд 2 пройден или записаны допущения.
|
|
42
|
+
- Размер в пределах микротеории или есть план синтеза.
|
|
43
|
+
|
|
44
|
+
`check-brief` на этом этапе ещё покажет непокрытые требования (конституент нет) — это нормально; блокеров `core` быть не должно. Дальше — `rs-explicate`.
|
|
45
|
+
|
|
46
|
+
## Не делай
|
|
47
|
+
|
|
48
|
+
- Не вводи два `X#` для ролей одного рода.
|
|
49
|
+
- Не вводи как `S#` то, что выводится из других структур (`D#` / `F#` / `P#` на этапе 3).
|
|
50
|
+
- Не кодируй статусы и виды константами `C#` — классификация даёт структуры и аксиомы разбиения.
|
|
51
|
+
- Не решай свойства молча: каждая отсутствующая аксиома — запись в журнале.
|
|
52
|
+
- Не начинай писать формулы, пока хотя бы одно требование без `via`.
|
|
53
|
+
|
|
54
|
+
## Читать по потребности
|
|
55
|
+
|
|
56
|
+
`docs/METHOD.md` §«Этап 2»; `docs/CONCEPTUAL-SCHEMA.md` §«Неопределяемые понятия», §«Родовые структуры»; `docs/BASE-SELECTION.md`; разбор альтернатив и свойств — `examples/subordination/NOTES.md`.
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rs-explain
|
|
3
|
+
description: >-
|
|
4
|
+
Объяснить человеку формулу ЯРЭ, конструкцию языка или учебную КС: роль
|
|
5
|
+
конституенты, разбор снаружи внутрь, ступень, при запросе — вычисление на данных.
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# Объяснение
|
|
9
|
+
|
|
10
|
+
Пути — от `<rstool>`. Карточки конструкций и полный сценарий — `docs/CONSTRUCTIONS.md`. Бриф не нужен.
|
|
11
|
+
|
|
12
|
+
## Шаги
|
|
13
|
+
|
|
14
|
+
1. **Роль.** Имя, тип и термин конституенты; что она выражает в предметной области (по конвенции и текстовому определению).
|
|
15
|
+
2. **Формула как есть** — без переписывания.
|
|
16
|
+
3. **Вид выражения:** теоретико-множественное (значение — множество, кортеж, число) или логическое (истина / ложь).
|
|
17
|
+
4. **Снаружи внутрь:** главная операция, затем её аргументы; объясняй только конструкции, которые есть в формуле (`docs/CONSTRUCTIONS.md`).
|
|
18
|
+
5. **Ступень и опоры:** типизация результата (`labelType`) и от каких конституент формула зависит.
|
|
19
|
+
6. **Пример на данных** — только по запросу: маленькая модель подписями (сценарий брифа или `setModelValues` + `evaluate` на копии сессии).
|
|
20
|
+
|
|
21
|
+
Для учебной схемы — ещё **решения по ядру**: почему выбраны эти неопределяемые понятия и отношения, какие аксиомы есть и каких сознательно нет (журнал решений брифа, если он есть; иначе — как гипотеза).
|
|
22
|
+
|
|
23
|
+
## Не делай
|
|
24
|
+
|
|
25
|
+
- Не меняй схему, объясняя её.
|
|
26
|
+
- Не используй имена API в тексте: «формальное определение», а не `definitionFormal` (словарь — `skills/rstool-runtime/SKILL.md`).
|
|
27
|
+
- Не называй `X#` «базисом», `T#` — «теоремой».
|
|
28
|
+
- Не разбирай конструкции, которых нет в формуле.
|
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rs-explicate
|
|
3
|
+
description: >-
|
|
4
|
+
Этап 3 концептуализации: экспликация — записать ядро и производные понятия на
|
|
5
|
+
ЯРЭ, развёртывая от требований брифа; починить формулу или разобрать
|
|
6
|
+
диагностики без потери смысла. Правила против подгонки под «зелёное».
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Этап 3 · Экспликация
|
|
10
|
+
|
|
11
|
+
Пути — от `<rstool>`. Проектирование формул — `docs/CONCEPTUAL-SCHEMA.md`; синтаксис — `docs/SYNTAX.md`; коды диагностик — `docs/DIAGNOSTICS.md`; вызовы — `skills/rstool-runtime/SKILL.md`.
|
|
12
|
+
|
|
13
|
+
## Вход
|
|
14
|
+
|
|
15
|
+
Бриф с `via` у каждого требования и решениями по ядру. Для починки формулы — лёгкий бриф: смысл конституенты одной строкой (из термина, текстового определения или вопроса пользователю) и сценарий, который этот смысл проверяет. **Смысл фиксируется до правки.**
|
|
16
|
+
|
|
17
|
+
## Шаги
|
|
18
|
+
|
|
19
|
+
1. **Ядро.** `X#`, `C#`, `S#` с предметными конвенциями: что элемент, порядок компонент кортежа, ссылка на решение (`DC#`). Затем аксиомы из решений по свойствам.
|
|
20
|
+
2. **Развёртывание от требований.** Для каждого требования по его `via` — конституента и только нужные поставщики. Не выводи все возможные термы.
|
|
21
|
+
- Раскрытие структуры: `D# := Pr1(S1)`, `Pr2,3(S1)`, `red(…)` — термины для компонент.
|
|
22
|
+
- Обособление: выражение со свободной переменной — `F#` / `P#`; повторяющийся фрагмент — `D#` / `F#`.
|
|
23
|
+
- Зависимость «аргумент → значение» — `F# ::= [ξ∈A] E(ξ)`, не множество пар `I{(ξ,σ) | …}`.
|
|
24
|
+
- (Не)пустота — `S ≠ ∅` / `S = ∅`, не `card(S) > 0`.
|
|
25
|
+
- Транзитивное замыкание, достижимость, ацикличность — через `R{}` в `F#`, а не квантор по `ℬ(X1)` (`invalidPropertyUsage`).
|
|
26
|
+
- Однозначность отношения — `card(S1)=card(Pr1(S1))`.
|
|
27
|
+
3. **Порядок:** `X#`, `C#` → независимые `S#` → `D#`/`F#`/`P#` → `A#`/`T#`; поставщики раньше потребителей (`applySchemaPatch` упорядочивает пачку сам).
|
|
28
|
+
4. **Перед сохранением** сомнительной формулы — `analyzeExpression`. Пачку правь одним `applySchemaPatch`.
|
|
29
|
+
5. **Ссылки брифа.** Впиши в `expressiveness[].constituent` и `invariants[].constituent` имена конституент. Сохрани сессию (`exportSession`) в папку задачи.
|
|
30
|
+
6. **Проверка:** `check-brief` (`docs/BRIEF.md`). Блокеров `core` и `explicate` быть не должно; дальше — `rs-interpret`.
|
|
31
|
+
|
|
32
|
+
## Цикл диагностик
|
|
33
|
+
|
|
34
|
+
1. `listDiagnostics()`: `kind` — `expression` (формула), `schema` (омонимы, дубликаты, конвенции), `model` (интерпретация).
|
|
35
|
+
2. По `name` найди исправление в `docs/DIAGNOSTICS.md`; короткие «было → стало» — `skills/rstool-runtime/EXAMPLES.md` «Типичные диагностики». Для ошибок внутри `F#`/`P#` смотри `stack[0]`.
|
|
36
|
+
3. Исправляй диапазон `from`–`to` в формуле так, чтобы **смысл из брифа сохранился**; проверь сценарием.
|
|
37
|
+
4. Не повторяй вызов без изменения ввода.
|
|
38
|
+
|
|
39
|
+
## Смысл важнее «зелёного»
|
|
40
|
+
|
|
41
|
+
Нельзя ради чистых диагностик:
|
|
42
|
+
|
|
43
|
+
- удалять или ослаблять аксиому, связанную с инвариантом брифа, без нового решения в журнале;
|
|
44
|
+
- превращать производное понятие (`D#`/`F#`/`P#`) в `S#`, `X#` или `C#` — у неопределяемого нет формулы, поэтому нет и ошибок, но понятие перестаёт выводиться;
|
|
45
|
+
- заменять формулу тривиальной (`∅`, `D5 := X1`, тавтология) или менять порог / условие (`≥ 2` → `≥ 1`);
|
|
46
|
+
- удалять конституенту, на которую ссылается бриф, или оставлять непустой `failed` после `best_effort`;
|
|
47
|
+
- оставлять пустую конвенцию у неопределяемого понятия.
|
|
48
|
+
|
|
49
|
+
Если смысл не выражается: вернись в `rs-core` (другая гипотеза ядра, промежуточные `D#`/`F#`) и запиши решение. Если ЯРЭ этого не выражает — `openQuestions` в бриф и честное «готово частично» в отчёте. При развитии схемы запускай `check-brief` с `--base <прежняя сессия>`: он ловит удалённые и ослабленные понятия.
|
|
50
|
+
|
|
51
|
+
## Выход
|
|
52
|
+
|
|
53
|
+
Сессия в папке задачи; бриф со ссылками на конституенты.
|
|
54
|
+
|
|
55
|
+
## Гейт
|
|
56
|
+
|
|
57
|
+
- Диагностики чисты, `failed` пуст.
|
|
58
|
+
- У каждого требования и инварианта есть конституента; ни одно не ослаблено.
|
|
59
|
+
- Конвенции у всех `X#` / `C#` / `S#`.
|
|
60
|
+
- Описание схемы (`comment` сессии, на Portal — описание) содержит назначение, ограничения с невыразимым и краткий журнал решений; конвенции и текстовые определения не ссылаются на `DC#` и имена конституент в простом тексте — бриф при синтезе не переносится, а конвенции не перенумеровываются. Бриф пока не уходит в Portal — без этого решения теряются при экспорте. Для `education` текст решений в схеме обязателен.
|
|
61
|
+
|
|
62
|
+
## Не делай
|
|
63
|
+
|
|
64
|
+
- Не вводи `S#` для отношения, которое выводится из других.
|
|
65
|
+
- Не кодируй атрибуты и статусы константами `C#`.
|
|
66
|
+
- Не добавляй `R1` как конституенту: радикал живёт только в `[…]` у `F#` / `P#`.
|
|
67
|
+
- Не правь пакет `<rstool>` — скрипты и сессии в папке задачи.
|
|
68
|
+
|
|
69
|
+
## Читать по потребности
|
|
70
|
+
|
|
71
|
+
`docs/CONCEPTUAL-SCHEMA.md`, `docs/SYNTAX.md`, `docs/DIAGNOSTICS.md`, `docs/TYPIFICATION.md`, `docs/BASE-SELECTION.md`; антипримеры подгонки — `examples/subordination/NOTES.md` §«Антипримеры».
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rs-interpret
|
|
3
|
+
description: >-
|
|
4
|
+
Этап 4 концептуализации: интерпретация — проверить смысл КС на маленьких КМ
|
|
5
|
+
по сценариям брифа: примеры и контрпримеры для требований, аксиом и
|
|
6
|
+
различений. При провале вернуться к ядру, а не подгонять формулу.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Этап 4 · Интерпретация
|
|
10
|
+
|
|
11
|
+
Пути — от `<rstool>`. Формат сценариев — `docs/BRIEF.md` §«Сценарии»; формы значений КМ и тесты — `docs/MODEL-TESTING.md`.
|
|
12
|
+
|
|
13
|
+
## Вход
|
|
14
|
+
|
|
15
|
+
Схема без ошибок диагностик (сессия, сохранённая `exportSession`) и `brief.json` со сценариями.
|
|
16
|
+
|
|
17
|
+
## Шаги
|
|
18
|
+
|
|
19
|
+
1. **Ожидания на конституенты.** В каждый сценарий допиши `expect`: для требований — `value` или `contains` / `excludes` на их конституенты; для `F#` / `P#` — `args` подписями; для инвариантов — `holds` на аксиому. Ожидания выводи из смысла требования и источника, **не** из того, что вычисляет текущая формула.
|
|
20
|
+
2. **Покрытие сценариями.**
|
|
21
|
+
- У каждого инварианта — `positive` (аксиома истинна) и `negative` (ложна). Негатив нарушает ровно это правило, иначе он ничего не доказывает.
|
|
22
|
+
- У каждого различения — `witness`: сценарий, где значения двух понятий различаются.
|
|
23
|
+
- При развитии схемы старые сценарии остаются — это регрессия.
|
|
24
|
+
- Граничные случаи там, где в требовании есть число или порог (`≥ 3`, `≤ 20`): ровно на границе и за ней.
|
|
25
|
+
3. **Прогон.**
|
|
26
|
+
|
|
27
|
+
```bash
|
|
28
|
+
npx tsx <rstool>/skills/scripts/check-brief.ts --session <abs>/session.json --brief <abs>/brief.json
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
В workspace Portal: `pnpm --filter @rsconcept/rstool exec tsx skills/scripts/check-brief.ts …`. Сценарии выполняются на копии сессии — рабочая модель не портится. Матрица приёмки: сценарий × ожидание → факт.
|
|
32
|
+
|
|
33
|
+
4. **Разбор провала.** Прежде чем менять формулу, ответь, где ошибка:
|
|
34
|
+
- **в ожидании** (неправильно понят источник) — уточни у пользователя или в источнике, исправь сценарий и запиши почему;
|
|
35
|
+
- **в формуле** при верном ядре — `rs-explicate`, правка без изменения смысла требования;
|
|
36
|
+
- **в ядре** (понятие не выражается, различение склеилось, вид вместо рода) — вернись в `rs-core`, новая гипотеза и запись в журнал решений.
|
|
37
|
+
|
|
38
|
+
Менять ожидание под результат формулы без такого разбора — подгонка.
|
|
39
|
+
|
|
40
|
+
5. Повторяй прогон, пока блокеров `interpret` нет.
|
|
41
|
+
|
|
42
|
+
## Выход
|
|
43
|
+
|
|
44
|
+
Сценарии с ожиданиями в `brief.json`; вывод `check-brief` с матрицей приёмки — в отчёт.
|
|
45
|
+
|
|
46
|
+
## Гейт
|
|
47
|
+
|
|
48
|
+
- Все сценарии проходят.
|
|
49
|
+
- У каждого инварианта есть позитивный и негативный сценарий.
|
|
50
|
+
- Каждое различение подтверждено сценарием, на котором значения различаются. Предупреждение «различение не проверено» — не сдавать: добавь сценарий с `expr`, на котором значения различаются, или скажи в отчёте, что различение не проверено.
|
|
51
|
+
|
|
52
|
+
Дальше — `rs-review`. При провале — `rs-core` или `rs-explicate` по шагу 4.
|
|
53
|
+
|
|
54
|
+
## Не делай
|
|
55
|
+
|
|
56
|
+
- Не проверяй только «нет диагностик» или только позитивные данные.
|
|
57
|
+
- Не пиши ожидание, подсмотрев значение формулы.
|
|
58
|
+
- Не добавляй в рабочую схему конституенты «для теста» — используй `expr` в сценарии.
|
|
59
|
+
- Не задавай значения производным понятиям: только `X#`, `C#`, `S#`.
|
|
60
|
+
|
|
61
|
+
## Если скрипт не подходит
|
|
62
|
+
|
|
63
|
+
Сложная проверка (перебор по `Z`, функции с радикалами) — вручную на копии сессии: `setModelValues` и `evaluate` (`docs/MODEL-TESTING.md`, `skills/rstool-runtime/SKILL.md`). Результат всё равно запиши сценарием в бриф, если ожидание выражается.
|
|
64
|
+
|
|
65
|
+
## Читать по потребности
|
|
66
|
+
|
|
67
|
+
`docs/BRIEF.md`, `docs/MODEL-TESTING.md`; пример брифа со сценариями — `examples/subordination/brief.json`.
|
|
@@ -0,0 +1,51 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rs-portal
|
|
3
|
+
description: >-
|
|
4
|
+
Portal REST для агента: ссылка Portal → API-запрос, чтение схемы, модели или
|
|
5
|
+
ОСС с API-ключом или анонимно, импорт в rstool, протокол публикации
|
|
6
|
+
(версия → замена → сверка), лимиты.
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Portal
|
|
10
|
+
|
|
11
|
+
Пути — от `<rstool>`. Указатель REST — `docs/PORTAL-API.md`.
|
|
12
|
+
|
|
13
|
+
## Ссылка → API
|
|
14
|
+
|
|
15
|
+
UI-ссылку (`https://portal.acconcept.ru/rsforms/856?tab=editor`) не открывай и не парси HTML: преобразуй в REST — `https://api.portal.acconcept.ru/api/rsforms/856/details` (query и hash отбрасываются). Правила, поиск, доступ — `docs/PORTAL-READ.md`.
|
|
16
|
+
|
|
17
|
+
- С API-ключом пользователя: `/api/agents/...` и `Authorization: Bearer rcp_…`.
|
|
18
|
+
- Без ключа видны только публичные схемы в `/S` и `/L`. Для непубличной — попроси ключ, JSON `/details` или временную публикацию; **не** cookie.
|
|
19
|
+
- Нужны только название или доступ — метаданные, не `/details`.
|
|
20
|
+
|
|
21
|
+
## Чтение и импорт
|
|
22
|
+
|
|
23
|
+
1. `GET …/rsforms/:id/details` → файл в папке задачи (UTF-8).
|
|
24
|
+
2. `importData(payload)` — `auto` распознает JSON Portal; не передавай его как `kind: 'session'`.
|
|
25
|
+
3. `listDiagnostics()`; дальше по маршруту (`skills/rstool/SKILL.md`): ревью, развитие.
|
|
26
|
+
4. Сохрани сессию-базу (`exportSession`) — для `check-brief --base` и сводки изменений.
|
|
27
|
+
|
|
28
|
+
Модели — `docs/PORTAL-MODELS.md`; ОСС — `docs/PORTAL-OSS.md`.
|
|
29
|
+
|
|
30
|
+
## Бриф на Portal
|
|
31
|
+
|
|
32
|
+
Пока бриф на Portal не хранится (план — блок «Задание» в паспорте схемы): держи `brief.json` в папке задачи. При ревью или развитии схемы Portal без брифа восстанови его (`rs-scope` §«Восстановление брифа»).
|
|
33
|
+
|
|
34
|
+
## Публикация
|
|
35
|
+
|
|
36
|
+
Протокол — `docs/PORTAL-PUBLISH.md` §«Протокол публикации»:
|
|
37
|
+
|
|
38
|
+
1. Работа по этапам, пока `check-brief` не покажет этап `review` без блокеров (или пользователь согласился с «готово частично»).
|
|
39
|
+
2. Сводка изменений относительно сессии-базы → **подтверждение пользователя**.
|
|
40
|
+
3. Описание схемы содержит назначение, ограничения и краткий журнал решений (гейт `rs-explicate`). `create-version` (если есть права) → `replace` с `exportPortal({ kind: 'schema' })`.
|
|
41
|
+
4. Повторно прочитай `/details`, импортируй и сверь. Отчёт со ссылкой на схему в UI.
|
|
42
|
+
|
|
43
|
+
## Лимиты
|
|
44
|
+
|
|
45
|
+
Правки: 30 в минуту, 300 в час; `replace`, `create-version` и создание КС — ещё не больше 15 в час. `429` — бюджет кончился, не повторяй в цикле. Подробно — `docs/PORTAL-PUBLISH.md` §«Лимиты».
|
|
46
|
+
|
|
47
|
+
## Не делай
|
|
48
|
+
|
|
49
|
+
- Не заменяй схему без сводки изменений и подтверждения.
|
|
50
|
+
- Не предлагай авторизацию через session cookie.
|
|
51
|
+
- Не перебирай id подряд — используй контекстный поиск.
|
|
@@ -0,0 +1,79 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: rs-review
|
|
3
|
+
description: >-
|
|
4
|
+
Этап 5 концептуализации: ревью КС и отчёт. «Оцени», «проверь», «найди
|
|
5
|
+
проблемы» в схеме или самопроверка перед сдачей своей работы. Два прохода:
|
|
6
|
+
соответствие брифу (требования, различения, инварианты, невыразимое, решения),
|
|
7
|
+
затем форма ЯРЭ. Отчёт начинается с таблицы «требование → конституента → доказательство».
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# Этап 5 · Ревью и сдача
|
|
11
|
+
|
|
12
|
+
Пути — от `<rstool>`. Правила формы — `docs/CONCEPTUAL-SCHEMA.md`.
|
|
13
|
+
|
|
14
|
+
## Вход
|
|
15
|
+
|
|
16
|
+
Схема (сессия, файл, Portal) и бриф. Ревью чужой схемы без брифа: сначала `rs-scope` §«Восстановление брифа» — задача из запроса пользователя, требования из терминов и текста запроса.
|
|
17
|
+
|
|
18
|
+
**Без явного запроса на правку не создавай ни исправленную, ни новую («предложенную») сессию.** Сначала отчёт. Рекомендации — текстом: формула и чем она проверена (анализ выражения, `evaluate({ expression })` на модели исходной сессии или сценарий брифа с `expr`). Нужна правка — спроси в конце отчёта.
|
|
19
|
+
|
|
20
|
+
## Проход 1. Соответствие брифу
|
|
21
|
+
|
|
22
|
+
1. `check-brief --review` (см. `rs-interpret`): покрытие, матрица приёмки, блокеры. Для чужой схемы блокеры — находки отчёта, а не план правки.
|
|
23
|
+
2. Для каждого требования: конституента **действительно** выражает понятие? Сверь термин, текстовое определение и формулу; подтверди сценарием. Термин сильнее формулы («сыгранные матчи» = все матчи календаря) — блокер.
|
|
24
|
+
3. Различения разведены: два понятия не совпадают на сценарии-свидетеле.
|
|
25
|
+
4. Инварианты: аксиома ловит нарушение (негативный сценарий ложен) и не запрещает лишнего (позитив истинен).
|
|
26
|
+
5. Невыразимое: то, что пользователь хотел, но схема не выражает, названо и согласовано (ограничение или открытый вопрос), а не пропущено молча.
|
|
27
|
+
6. Журнал решений: выбор ядра и свойств отношений обоснован; схема не противоречит записанному решению (решение «без аксиомы транзитивности» — а аксиома есть).
|
|
28
|
+
7. Пересказ: в схеме нет понятий из исключённого (`restrictions`) и нерелевантного.
|
|
29
|
+
|
|
30
|
+
## Проход 2. Форма ЯРЭ
|
|
31
|
+
|
|
32
|
+
- [ ] Диагностики: `listDiagnostics` по `expression` / `schema` / `model`. `analysisSuccess: true` в summary не означает отсутствия диагностик.
|
|
33
|
+
- [ ] Неопределяемые понятия независимы; производное не объявлено `S#`.
|
|
34
|
+
- [ ] `X#` — предметные сущности; `C#` — только если нужны порядок и арифметика над именованным набором; чистые числа — `Z` (`docs/BASE-SELECTION.md`). Статусы и виды не кодируются в `C#`.
|
|
35
|
+
- [ ] Роли одного рода — одно базисное множество, не два.
|
|
36
|
+
- [ ] Вычисляемая зависимость «аргумент → значение» — `F#`, а не множество пар с `Pr`/`Fi`.
|
|
37
|
+
- [ ] (Не)пустота — `S ≠ ∅` / `S = ∅`, не `card(S) > 0`.
|
|
38
|
+
- [ ] Повторяющиеся фрагменты формул обособлены в `D#` / `F#`.
|
|
39
|
+
- [ ] Конвенции у `X#` / `C#` / `S#` предметные: что элемент, порядок компонент кортежа.
|
|
40
|
+
- [ ] Текстовые определения используют только понятия схемы.
|
|
41
|
+
- [ ] `R#` в `[…]` у `F#` / `P#` — радикал, не пропущенная конституента.
|
|
42
|
+
- [ ] Нет «сирот» — конституент вне путей к требованиям и аксиомам (для `project` — ошибка).
|
|
43
|
+
- [ ] Атрибутивная (`N#`) и родоструктурная экспликации не смешаны без запроса.
|
|
44
|
+
|
|
45
|
+
## Ранжирование находок
|
|
46
|
+
|
|
47
|
+
По смыслу, а не по полю `severity` инструмента:
|
|
48
|
+
|
|
49
|
+
- **блокер** — требование не выражено или выражено неверно (термин ≠ формула, проверено сценарием); склеенное различение; аксиома не ловит нарушение инварианта; формула не разбирается или невычислима; `schemaDependencyCycle`, `schemaFormalDuplicate`, `schemaHomonym`;
|
|
50
|
+
- **важно** — нарушение правил проектирования: лишнее `S#`, коды в `C#`, вид вместо рода, график вместо `F#`, нет решения по спорному свойству, `card(S) > 0`;
|
|
51
|
+
- **замечание** — `schemaMissingConvention`, `schemaMissingTerm`, стиль, именование.
|
|
52
|
+
|
|
53
|
+
## Отчёт
|
|
54
|
+
|
|
55
|
+
1. **Вердикт** (1–2 предложения): отвечает ли схема запросу; главный риск. «Диагностик нет» — не вердикт.
|
|
56
|
+
2. **Как схема отвечает на запрос** — таблица:
|
|
57
|
+
|
|
58
|
+
| Требование | Конституента | Доказательство |
|
|
59
|
+
| :----------------------------- | :----------- | :-------------------------------------- |
|
|
60
|
+
| E1 доклады, ожидающие рецензий | `D3` | SC1 ✓, SC2 ✓ |
|
|
61
|
+
| E3 доступный экземпляр | — | не выражено: не хватает понятия «бронь» |
|
|
62
|
+
|
|
63
|
+
Плюс инварианты (аксиома, позитив / негатив) и различения (свидетель).
|
|
64
|
+
|
|
65
|
+
3. **Не выражено сознательно:** ограничения и невыразимое; допущения; открытые вопросы.
|
|
66
|
+
4. **Решения по ядру**, которые пользователь должен знать.
|
|
67
|
+
5. **Находки** (для ревью): блокер → важно → замечание; у каждой — имя конституенты, суть, как подтверждено.
|
|
68
|
+
6. **Рекомендации:** конкретные правки, проверенные анализом и сценарием; не применены без запроса.
|
|
69
|
+
7. **Проверки:** диагностики (числа, без JSON), вывод `check-brief`, файлы (сессия, бриф, экспорт).
|
|
70
|
+
|
|
71
|
+
Готово частично — так и скажи и перечисли, что не покрыто и почему: не хватает исходного понятия, понятие не выведено или нужен синтез с другой схемой.
|
|
72
|
+
|
|
73
|
+
## Перед публикацией
|
|
74
|
+
|
|
75
|
+
Перед заменой схемы на Portal — сводка изменений относительно опубликованной версии и подтверждение пользователя (`rs-portal`).
|
|
76
|
+
|
|
77
|
+
## Читать по потребности
|
|
78
|
+
|
|
79
|
+
`docs/CONCEPTUAL-SCHEMA.md`, `docs/METHOD.md` §«Этап 5»; образец ревью — `examples/subordination/NOTES.md` §«Антипримеры».
|