# Онтология — Правила ведения

> Эти правила **обязательны** для всех агентов. Невыполнение = нарушение.

---

## 1. Когда использовать онтологию

**Обязательно** при:
- Работе с проектами (создание, обновление, закрытие)
- Работе с задачами (создание, изменение статуса, удаление)
- Распределении работ между агентами
- Проверке зависимостей между задачами
- Планировании новых активностей

**Онтология — единственный источник истины** о проектах и задачах. Не держать информацию в голове, в daily notes или в MEMORY.md — только в онтологии.

---

## 1.1 Строгая иерархия проекта и задачи

- **Task без Project не существует.**
- Каждый `Project` — это отдельный контейнер с собственной документацией.
- Каждая `Task` обязана принадлежать одному `Project`.
- Если работа не укладывается в существующий проект, сначала создаётся новый `Project`, затем задачи внутри него.
- У `Task` есть уникальный идентификатор и отдельная папка внутри папки проекта.
- У `Project` есть общая документация на уровне всей папки проекта.
- Человеческое имя объекта хранится в `name` / `title`; машинный `id` остаётся внутренним и не должен быть частью читаемого названия в документации и папках.

---

## 2. Правила записи ( Stream — curator)

### 2.1 Стрим — единственный writer
- Все изменения в онтологию вносит **только Стрим**
- Другие агенты (Dev, Legal, Feda) **не пишут напрямую**
- Запросы на изменения → `sessions_send` → Стрим → проверка → внесение

### 2.2 Изменения — только с подтверждения Славы
- Любое изменение (создание, удаление, обновление сущности) → **только после ОК Славы**
- Исключение: мелкие правки по типу "обновить статус на done" если Слава сам сказал
- Спорные вопросы → Слава решает

### 2.3 Принцип одного источника
- Информация о проекте/задаче должна быть **только в онтологии**
- Не дублировать в MEMORY.md, daily notes, TZ файлах
- Исключение: MEMORY.md содержит только **ссылки** на онтологию

---

## 3. Атрибуты сущностей

### Project
| Поле | Тип | Обязательно | Описание |
|------|-----|-------------|----------|
| `name` | string | ✅ | Человеческое название проекта |
| `status` | enum | ✅ | planning, active, paused, completed, archived |
| `folder` | string | ✅ | Папка проекта: `tasks/{project-slug}/` |
| `doc_path` | string | ✅ | Главный файл проекта, обычно `PROJECT.md` |
| `description` | string | — | Краткое описание |
| `start_date` | date | — | Дата старта |
| `end_date` | date | — | Дата окончания |

### Task
| Поле | Тип | Обязательно | Описание |
|------|-----|-------------|----------|
| `title` | string | ✅ | Человеческое название задачи |
| `project` | string | ✅ | ID проекта |
| `folder` | string | ✅ | Папка задачи внутри проекта |
| `doc_path` | string | ✅ | Главный файл задачи, обычно `TASK.md` |
| `assignee` | string | — | Исполнитель |
| `status` | enum | ✅ | open, in_progress, done, blocked, cancelled |
| `priority` | enum | — | high, medium, low, urgent |
| `description` | string | — | Детали задачи |

---

## 4. Жизненный цикл

### Создание проекта
1. Слава/агент предлагает → обсуждаем
2. Слава соглашается → Стрим создаёт в онтологии
3. Привязываем `folder` и `doc_path`
4. Создаём структуру `tasks/{project}/`

### Создание задачи
1. Предложение → описание → assignee → приоритет
2. Слава ОК → Стрим создаёт
3. Task привязывается к Project
4. Назначаем `folder` и `doc_path`

### Обновление статуса
1. Кто-то сообщает (Слава, агент, результат работы)
2. Стрим проверяет → обновляет в онтологии
3. Если задача done → проверяем есть ли зависимые

### Закрытие проекта
1. Все задачи done
2. Слава подтверждает → status → done
3. Description обновить с датой закрытия

---

## 5. Проверки (автоматически)

При каждом запросе涉及 проектов/задач:
- [ ] Данные взяты из онтологии
- [ ] Статусы актуальны
- [ ] Нет конфликтующих задач
- [ ] Assignee соответствует

При планировании:
- [ ] Проверены зависимости
- [ ] Нет блокирующих задач
- [ ] Учтены приоритеты

---

## 6. Недопустимо

- ❌ Создавать задачи минуя онтологию
- ❌ Держать важные данные только в MEMORY.md
- ❌ Изменять онтологию без ведома Славы
- ❌ Другим агентам писать напрямую
- ❌ Удалять сущности без подтверждения

---

## 7. Файлы онтологии

```
memory/ontology/
├── schema.yaml     — схема типов и полей (обязательна валидация)
├── graph.jsonl     — сами сущности и связи
└── RULES.md       — этот файл
```

Ontology skill reference:
```
skills/ontology/references/schema.md
```

Ontology script:
```
skills/ontology/scripts/ontology.py
```

---

## 8. Исключения

Всё что **не относится** к проектам/задачам — в MEMORY.md или daily notes:
- Личные заметки о Славе
- Пароли/ключи (только .env)
- Техническая документация (TZ, PROJECT.md)
- Архивные данные

---

## 9. Стандарт структуры папок

### Project
```text
tasks/<project-slug>/
├── PROJECT.md
├── docs/
├── journal/
├── assets/
├── meta/
└── TASKS/
    ├── backlog/
    ├── active/
    ├── blocked/
    ├── done/
    └── archive/
```

### Task
```text
tasks/<project-slug>/TASKS/<status>/<task-id>/
├── TASK.md
├── context.md
├── report.md
└── attachments/
```

### Правило путей
- `Project.folder` — папка проекта, всегда читаемый slug.
- `Project.doc_path` — главный документ проекта.
- `Task.folder` — папка задачи внутри папки проекта, всегда читаемый slug.
- `Task.doc_path` — главный документ задачи.
- `Task` всегда связан с `Project` и живёт внутри его структуры.
- В именах папок и документов не использовать внутренние `id` как часть человекочитаемого названия; внутренний `id` хранится только в онтологии.

---

_Обновлено: 2026-04-09_
