853 lines
32 KiB
Markdown
853 lines
32 KiB
Markdown
## 1. Формат ведения технической документации агентом
|
||
|
||
## 1.1. Общие принципы
|
||
|
||
Техническая документация, формируемая агентом, должна строиться как **система атомарных, не пересекающихся по смыслу документов**, связанных между собой явными ссылками.
|
||
|
||
Ключевые принципы:
|
||
- один документ описывает одну сущность или один устойчивый технический аспект;
|
||
- документ не должен дублировать соседние документы;
|
||
- общая система знаний должна собираться через ссылки, а не через копипасту;
|
||
- структура документации должна быть пригодна как для чтения человеком, так и для индексирования в RAG.
|
||
|
||
## 1.2. Базовые типы документных единиц
|
||
|
||
На первом этапе логично сохранить текущую семантику типов документов, но перенести ее в файловую модель.
|
||
|
||
Базовые типы:
|
||
- `ui_page`
|
||
- `api_method`
|
||
- `logic_block`
|
||
|
||
Позже могут добавиться:
|
||
- `architecture_overview`
|
||
- `integration_doc`
|
||
- `domain_entity`
|
||
- `glossary_item`
|
||
- `index_page`
|
||
|
||
## 1.3. Принцип декомпозиции страниц / файлов
|
||
|
||
### Один устойчивый объект — один документ
|
||
Если объект можно переиспользовать или на него могут ссылаться другие документы, его надо выносить в отдельный файл.
|
||
|
||
Примеры:
|
||
- отдельная UI-страница;
|
||
- отдельный API endpoint;
|
||
- отдельный блок логики;
|
||
- отдельный интеграционный сценарий.
|
||
|
||
### Документы не должны пересекаться по смыслу
|
||
Если описание повторяется в нескольких местах, нужно выделять общий документ и ссылаться на него.
|
||
|
||
Примеры:
|
||
- фронтальная страница не должна заново описывать логику API;
|
||
- документ по API не должен заново раскрывать общую логику переиспользуемого блока;
|
||
- вместо дублирования должен быть переход по ссылке.
|
||
|
||
### Use case и детальные правила живут раздельно
|
||
Сценарий описывает поток работы, а детали выносятся в функциональные требования, отдельные блоки логики или контрактные описания.
|
||
|
||
Это важно и для RAG-индексации:
|
||
- сценарии индексируются как workflows;
|
||
- отдельные правила — как facts;
|
||
- сущности и блоки — как entities.
|
||
|
||
## 1.4. Иерархическая организация документации
|
||
|
||
Документация должна быть организована как иерархическое дерево каталогов и файлов, а не как набор неструктурированных страниц.
|
||
|
||
Пример верхнего уровня:
|
||
|
||
```text
|
||
docs/
|
||
ui/
|
||
api/
|
||
logic/
|
||
domains/
|
||
integrations/
|
||
architecture/
|
||
glossary/
|
||
errors/
|
||
```
|
||
|
||
Пример организации:
|
||
|
||
```text
|
||
docs/
|
||
ui/
|
||
order-create-page.md
|
||
order-edit-page.md
|
||
api/
|
||
orders-create.md
|
||
orders-get.md
|
||
logic/
|
||
order-validation.md
|
||
order-enrichment.md
|
||
architecture/
|
||
system-overview.md
|
||
integration-landscape.md
|
||
errors/
|
||
catalog.yaml
|
||
```
|
||
|
||
## 1.5. Учет связей между документами
|
||
|
||
Связи должны быть **явными и поддерживаемыми агентом**.
|
||
|
||
Примеры:
|
||
- UI-страница ссылается на API, который она вызывает;
|
||
- API-документ ссылается на переиспользуемые логические блоки;
|
||
- логический блок ссылается на связанные интеграции;
|
||
- архитектурный обзор ссылается на набор конкретных модулей и документов;
|
||
- документ по коду может ссылаться на системную аналитику, которая инициировала изменение.
|
||
|
||
Именно эта сеть ссылок затем индексируется в слоях:
|
||
- `D1_DOCUMENT_CATALOG`
|
||
- `D3_ENTITY_CATALOG`
|
||
- `D4_WORKFLOW_INDEX`
|
||
- `D5_REFERENCE_GRAPH`
|
||
- `D6_DOC_CODE_LINKS`
|
||
|
||
## 1.6. Формат markdown-документов
|
||
|
||
Основной формат технической документации — `Markdown`.
|
||
|
||
Каждый документ состоит из двух частей:
|
||
1. **YAML frontmatter** — структурные метаданные;
|
||
2. **Markdown body** — основное содержимое по шаблону.
|
||
|
||
## 3.7. YAML frontmatter
|
||
|
||
Frontmatter нужен для:
|
||
- определения типа документа;
|
||
- идентификации документа;
|
||
- определения его места в иерархии;
|
||
- фиксации связей с кодом и другими документами;
|
||
- выделения сущностей и тегов;
|
||
- упрощения построения слоев `D1`, `D3`, `D5`, `D6`.
|
||
|
||
### Базовый frontmatter
|
||
|
||
```yaml
|
||
---
|
||
id: ui-order-create-page
|
||
title: Страница создания заказа
|
||
doc_type: ui_page
|
||
domain: orders
|
||
status: draft
|
||
related_docs:
|
||
- api-orders-create
|
||
- logic-order-validation
|
||
entities:
|
||
- Order
|
||
- CreateOrder
|
||
tags:
|
||
- ui
|
||
- orders
|
||
- creation
|
||
#owner: system-analyst
|
||
#source_of_truth: code
|
||
#related_code:
|
||
# - src/orders/ui/create_page.tsx
|
||
# - src/orders/api/orders_controller.py
|
||
---
|
||
```
|
||
|
||
### Обязательные поля
|
||
|
||
- `id` — стабильный уникальный идентификатор документа;
|
||
- `title` — человекочитаемый заголовок;
|
||
- `doc_type` — тип документа;
|
||
- `related_docs` — ссылки на связанные документы;
|
||
- `status` — статус документа;
|
||
- `domain` - домен фичи (Карточка клиента, Задачи, Сделки, Предложения)
|
||
- `sub_domain` - поддомен внутри основной сущности (Счета, ЗДА, ECM)
|
||
|
||
### Рекомендуемые поля
|
||
- `owner`
|
||
- `entities`
|
||
- `tags`
|
||
- `parent`
|
||
- `children`
|
||
- `feature`
|
||
- `system_analytics_refs`
|
||
- `business_refs`
|
||
- `updated_from`
|
||
- `reviewers`
|
||
- `source_of_truth`
|
||
- `related_code`
|
||
|
||
### Допустимые значения `doc_type`
|
||
- `ui_page`
|
||
- `api_method`
|
||
- `logic_block`
|
||
- `architecture_overview`
|
||
- `integration_doc`
|
||
- `domain_entity`
|
||
- `glossary_item`
|
||
- `index_page`
|
||
|
||
### Допустимые значения `status`
|
||
- `draft`
|
||
- `in_review`
|
||
- `approved`
|
||
- `outdated`
|
||
- `generated`
|
||
- `active`
|
||
|
||
### Допустимые значения `source_of_truth`
|
||
- `code`
|
||
- `doc`
|
||
- `system_analysis`
|
||
- `business_requirements`
|
||
- `mixed`
|
||
|
||
## 1.8. Typed frontmatter для разных типов документов
|
||
|
||
У каждого типа документа есть:
|
||
- **общие поля**;
|
||
- **тип-специфичные поля**.
|
||
|
||
### Пример для `api_method`
|
||
|
||
```yaml
|
||
---
|
||
id: api.create_invoice
|
||
doc_type: api_method
|
||
domain: billing
|
||
title: Создание инвойса
|
||
|
||
endpoint: POST /api/v1/invoices
|
||
auth: USER
|
||
idempotent: false
|
||
timeout_ms: 3000
|
||
|
||
links:
|
||
called_by:
|
||
- ui.invoice_form
|
||
uses_logic:
|
||
- logic.invoice_validation
|
||
writes_db:
|
||
- db.invoices
|
||
- db.invoice_items
|
||
integrates_with:
|
||
- int.crm_sync
|
||
|
||
related_docs:
|
||
- ui.invoice_form
|
||
- logic.invoice_validation
|
||
related_code:
|
||
- services/billing/api/create_invoice.py
|
||
entities:
|
||
- Invoice
|
||
- CreateInvoice
|
||
|
||
tags:
|
||
- invoice
|
||
- create
|
||
- billing
|
||
status: active
|
||
version: 1.3
|
||
source_of_truth: code
|
||
---
|
||
```
|
||
|
||
### Для `api_method` полезно поддерживать
|
||
|
||
- `endpoint`
|
||
- `sup_parameters`
|
||
- `role_model_actions`
|
||
- `monitoring_actions`
|
||
- `audit_actions`
|
||
- `idempotent`
|
||
- `timeout_ms`
|
||
- `links.called_by`
|
||
- `links.uses_logic`
|
||
- `links.writes_db`
|
||
- `links.integrates_with`
|
||
|
||
### Для `ui_page` позже полезно поддерживать
|
||
- `calls_api`
|
||
- `user_analitycs_actions`
|
||
- `sup_parameters`
|
||
- `role_model_actions`
|
||
- `entry_points`
|
||
- `uses_logic`
|
||
|
||
### Для `logic_block` полезно поддерживать
|
||
|
||
- `called_from`
|
||
- `uses_logic`
|
||
- `reads_db`
|
||
- `writes_db`
|
||
- `integrates_with`
|
||
|
||
## 1.9. Двухслойная структура документа: `Summary` + `Details`
|
||
|
||
LLM не должна каждый раз тонуть в полном документе. Поэтому каждый документ должен содержать два уровня представления.
|
||
|
||
### `Summary`
|
||
Короткая, строго структурированная спецификация. Это слой **быстрого контекста**.
|
||
|
||
Рекомендуемый объем:
|
||
- примерно 30–60 строк;
|
||
- без длинных пояснений;
|
||
- только ключевые факты.
|
||
|
||
Пример:
|
||
|
||
```md
|
||
## Summary
|
||
- Purpose: создание инвойса из формы
|
||
- Actor: пользователь
|
||
- Trigger: Submit
|
||
- Main API: POST /api/v1/invoices (api.create_invoice)
|
||
- Validation: required fields, amount > 0, date <= today
|
||
- Errors: 400(field errors), 409(duplicate), 503(retryable)
|
||
- Analytics: event invoice_submit, invoice_error
|
||
```
|
||
|
||
### `Details`
|
||
Полное раскрытие объекта:
|
||
- use case;
|
||
- функциональные требования;
|
||
- UI;
|
||
- API;
|
||
- integrations;
|
||
- ошибки;
|
||
- НФТ;
|
||
- связи;
|
||
- кодовые привязки.
|
||
|
||
### Блок `## Integrations`
|
||
|
||
Если у объекта есть интеграции, они должны быть выделены в отдельный блок `## Integrations`.
|
||
Интеграции не нужно дублировать во frontmatter.
|
||
Основное описание хранится в body документа.
|
||
|
||
Ожидаемый принцип:
|
||
- одна интеграция = одна отдельная запись внутри блока;
|
||
- у интеграции есть краткое имя;
|
||
- у интеграции есть структурированные атрибуты;
|
||
- дополнительные детали допускаются в свободной форме через вложенный словарь.
|
||
|
||
Рекомендуемые атрибуты интеграции:
|
||
- `target`
|
||
- `target_type`
|
||
- `direction`
|
||
- `interaction`
|
||
- `via`
|
||
- `purpose`
|
||
- `details`
|
||
|
||
Где:
|
||
- `target` - идентификатор или имя целевого объекта;
|
||
- `target_type` - тип цели: `api`, `ui`, `entity`, `service`, `queue`, `db`, `external_system`;
|
||
- `direction` - направление: `inbound`, `outbound`, `bidirectional`;
|
||
- `interaction` - тип взаимодействия: `calls`, `reads`, `writes`, `emits`, `consumes`, `depends_on`;
|
||
- `via` - технический канал интеграции;
|
||
- `purpose` - зачем нужна интеграция;
|
||
- `details` - словарь с гибкой структурой под дополнительные параметры.
|
||
|
||
Пример:
|
||
|
||
```md
|
||
## Integrations
|
||
|
||
### Orders API
|
||
- target: api.orders.create
|
||
- target_type: api
|
||
- direction: outbound
|
||
- interaction: calls
|
||
- via: POST /api/orders
|
||
- purpose: создание заказа
|
||
- details:
|
||
- auth: service-token
|
||
- retry: true
|
||
|
||
### Order Entity
|
||
- target: domain.order
|
||
- target_type: entity
|
||
- direction: outbound
|
||
- interaction: writes
|
||
- via: repository
|
||
- purpose: сохранение состояния заказа
|
||
- details:
|
||
- transaction: required
|
||
```
|
||
|
||
Этот блок должен быть пригоден и для чтения человеком, и для последующего извлечения в отдельный RAG-слой интеграций.
|
||
|
||
## 1.10. Общие требования к markdown body
|
||
|
||
1. В документе должен быть один `H1`, совпадающий с `title`.
|
||
2. Основные разделы используют `H2`.
|
||
3. Подразделы внутри разделов используют `H3`.
|
||
4. Не должно быть хаотической вложенности заголовков.
|
||
5. Один раздел должен описывать одну смысловую часть.
|
||
6. Текст не должен дублировать соседние документы.
|
||
7. Вместо дублирования должны использоваться явные ссылки на связанные документы.
|
||
8. Сценарии, правила, ограничения и ссылки на код должны быть отделены друг от друга.
|
||
|
||
## 1.11. Базовый каркас markdown-документа
|
||
|
||
```md
|
||
---
|
||
id: api-orders-create
|
||
title: Метод создания заказа
|
||
doc_type: api_method
|
||
domain: orders
|
||
status: draft
|
||
source_of_truth: code
|
||
related_docs:
|
||
- logic-order-validation
|
||
- ui-order-create-page
|
||
related_code:
|
||
- src/orders/api/create_order.py
|
||
entities:
|
||
- Order
|
||
- CreateOrder
|
||
tags:
|
||
- api
|
||
- orders
|
||
---
|
||
|
||
# Метод создания заказа
|
||
|
||
## Summary
|
||
- Purpose: создание заказа
|
||
- Actor: пользователь
|
||
- Trigger: submit формы
|
||
- Main API: POST /orders
|
||
|
||
## Details
|
||
### Описание
|
||
### Технический use case
|
||
### Функциональные требования
|
||
### Нефункциональные требования
|
||
### Контракт
|
||
|
||
|
||
## 3.13. Специализированные шаблоны документов
|
||
|
||
### UI Page
|
||
|
||
```md
|
||
# <Название страницы>
|
||
|
||
## Summary
|
||
## Назначение
|
||
## Контекст
|
||
## Технический use case
|
||
## Описание UI
|
||
## UI Elements
|
||
## Функциональные требования
|
||
## Нефункциональные требования
|
||
## Связанные API
|
||
## Связанные блоки логики
|
||
## Связанный код
|
||
## Связанные документы
|
||
## История изменений
|
||
```
|
||
|
||
#### Требования к разделу `Описание UI`
|
||
Для каждого элемента желательно описывать:
|
||
- тип элемента;
|
||
- назначение;
|
||
- источник данных;
|
||
- default / placeholder;
|
||
- правила активации;
|
||
- поведение при взаимодействии;
|
||
- валидацию.
|
||
|
||
#### Требования к разделу `UI Elements`
|
||
UI-элементы должны храниться в **табличном** или **полуструктурированном** виде.
|
||
|
||
Пример:
|
||
|
||
```md
|
||
## UI Elements
|
||
|
||
| id | type | label | data_source | validation | behavior |
|
||
|--------|--------|---------|------------|------------|----------|
|
||
| amount | input | Amount | local | >0 | enables submit |
|
||
| submit | button | Create | - | - | calls api.create_invoice |
|
||
```
|
||
|
||
Если модель UI сложная, допустим sidecar-файл `ui_elements.yaml` или `ui_elements.json` рядом с основным документом.
|
||
|
||
### API Method
|
||
|
||
```md
|
||
# <Название API метода>
|
||
|
||
## Summary
|
||
## Назначение
|
||
## Контекст
|
||
## Технический use case
|
||
## Функциональные требования
|
||
## Contract
|
||
## Integrations
|
||
## Errors
|
||
## Нефункциональные требования
|
||
## Связанные блоки логики
|
||
## Связанный код
|
||
## Связанные документы
|
||
## История изменений
|
||
```
|
||
|
||
#### Требования к разделу `Contract`
|
||
Контракт может:
|
||
- быть кратко описан прямо в документе;
|
||
- ссылаться на OpenAPI;
|
||
- ссылаться на отдельный контрактный файл.
|
||
|
||
Для REST API целевым источником истины должен становиться `OpenAPI`.
|
||
|
||
### Reusable Logic Block
|
||
|
||
```md
|
||
# <Название блока логики>
|
||
|
||
## Summary
|
||
## Назначение
|
||
## Контекст
|
||
## Технический use case
|
||
## Функциональные требования
|
||
## Integrations
|
||
## Ограничения и условия вызова
|
||
## Нефункциональные требования
|
||
## Связанные API / UI / integration points
|
||
## Связанный код
|
||
## Связанные документы
|
||
## История изменений
|
||
```
|
||
|
||
## 3.14. Машинно-читаемые API-контракты
|
||
|
||
Для API контрактов **источником истины** должен становиться:
|
||
- `OpenAPI` — предпочтительно;
|
||
- либо временно строгий markdown/yaml-контракт, если OpenAPI еще нет.
|
||
|
||
Минимальный набор для API-контракта:
|
||
- `endpoint`
|
||
- `method`
|
||
- `request fields`
|
||
- `required / optional`
|
||
- `constraints`
|
||
- `response`
|
||
- `errors`
|
||
- `idempotency`
|
||
- `retry`
|
||
- `timeout`
|
||
- `auth`
|
||
|
||
## 3.15. Каталог ошибок
|
||
|
||
Ошибки, HTTP-коды, retry-правила и клиентское поведение не должны размазываться по разным документам.
|
||
|
||
Нужен единый каталог ошибок, например `docs/errors/catalog.yaml`.
|
||
|
||
Пример:
|
||
|
||
```yaml
|
||
errors:
|
||
- error_id: invoice_validation_failed
|
||
http_code: 400
|
||
internal_code: BILLING_400_01
|
||
when: invalid request fields
|
||
client_behavior: show field errors
|
||
retry: false
|
||
owner: billing
|
||
|
||
- error_id: invoice_duplicate
|
||
http_code: 409
|
||
internal_code: BILLING_409_01
|
||
when: duplicate invoice detected
|
||
client_behavior: show duplicate warning
|
||
retry: false
|
||
owner: billing
|
||
|
||
- error_id: crm_sync_unavailable
|
||
http_code: 503
|
||
internal_code: BILLING_503_02
|
||
when: downstream CRM unavailable
|
||
client_behavior: retry later
|
||
retry: true
|
||
owner: billing
|
||
```
|
||
|
||
В API- и logic-документах лучше ссылаться на `error_id`, а не заново подробно описывать каждую ошибку.
|
||
|
||
## 3.16. Требования к качеству документа для RAG
|
||
|
||
1. **Явные заголовки** — не использовать безымянные блоки текста.
|
||
2. **Атомарные утверждения** — не смешивать несколько правил в одном пункте, если их можно разделить.
|
||
3. **Явные сущности** — использовать стабильные названия компонентов, API, модулей, страниц.
|
||
4. **Явные ссылки** — не писать «этот метод», если можно указать конкретную ссылку или идентификатор.
|
||
5. **Минимум дублирования** — повторяющийся контент должен заменяться ссылками.
|
||
6. **Привязка к коду** — если документ описывает кодовый объект, это должно быть явно указано.
|
||
7. **Разделение сценариев и правил** — workflow и fact-like требования должны быть отделены.
|
||
|
||
## 3.17. Как структура markdown помогает RAG
|
||
|
||
- `frontmatter` + заголовки → `D1_DOCUMENT_CATALOG`
|
||
- `entities`, `tags`, устойчивые термины → `D3_ENTITY_CATALOG`
|
||
- атомарные функциональные и нефункциональные требования → `D2_FACT_INDEX`
|
||
- `Технический use case` → `D4_WORKFLOW_INDEX`
|
||
- `related_docs`, явные ссылки → `D5_REFERENCE_GRAPH`
|
||
- `related_code`, упоминания symbols и файлов → `D6_DOC_CODE_LINKS`
|
||
- `Summary` → быстрый retrieval и short-form context для LLM
|
||
|
||
## 3.18. Принципы генерации документации агентом
|
||
|
||
Когда документ пишет агент, он должен:
|
||
- сначала извлечь evidence из кода, системной аналитики и существующих документов;
|
||
- определить тип документа;
|
||
- заполнить frontmatter;
|
||
- построить markdown body по шаблону;
|
||
- явно указать связи с кодом и другими документами;
|
||
- не дублировать уже существующее описание, если можно сослаться на него.
|
||
|
||
---
|
||
|
||
|
||
## 4.4. Layered RAG
|
||
|
||
RAG строится как система специализированных слоев для двух основных доменов:
|
||
- `CODE RAG`
|
||
- `DOCS RAG`
|
||
|
||
Каждый graph извлекает контекст не из одного общего индекса, а из нужного набора слоев в зависимости от intent.
|
||
|
||
## 4.5. Evidence gate
|
||
|
||
Перед синтезом ответа или документа агент должен проверять, хватает ли опоры.
|
||
|
||
Примеры:
|
||
- найден ли symbol;
|
||
- найдено ли достаточное количество code chunks;
|
||
- есть ли supporting relations;
|
||
- есть ли document evidence;
|
||
- есть ли docs ↔ code mapping.
|
||
|
||
Если опоры недостаточно, агент должен:
|
||
- деградировать в упрощенный режим;
|
||
- честно фиксировать неполноту ответа;
|
||
- при необходимости уходить в fallback.
|
||
|
||
## 4.6. Synthesis layer
|
||
|
||
На этом этапе LLM:
|
||
- агрегирует найденные артефакты;
|
||
- формирует объяснение;
|
||
- пишет документ;
|
||
- структурирует результат под нужный шаблон.
|
||
|
||
LLM не должна быть основным источником фактов. Фактическая основа должна приходить из RAG и диагностируемого pipeline.
|
||
|
||
## 4.7. Diagnostics
|
||
|
||
Система должна сохранять диагностический след:
|
||
- какой graph был выбран;
|
||
- какие слои использовались;
|
||
- что было найдено;
|
||
- где retrieval был слабым;
|
||
- почему был выбран fallback;
|
||
- какие evidence стали основой ответа.
|
||
|
||
## 4.8. Сценарии: Target Architecture vs MVP-now
|
||
|
||
### 4.8.1. Target Architecture
|
||
|
||
#### CODE
|
||
- `OPEN_FILE` — открыть конкретный файл;
|
||
- `OPEN_SYMBOL` — открыть класс / функцию / метод;
|
||
- `EXPLAIN` — объяснить, как работает сущность или фрагмент;
|
||
- `FIND_TESTS` — найти релевантные тесты;
|
||
- `FIND_ENTRYPOINTS` — найти основные точки входа;
|
||
- `RELATED_CODE` — найти связанные сущности и ближайший контекст.
|
||
|
||
#### DOCS
|
||
- `DOC_SEARCH` — найти релевантный фрагмент документации;
|
||
- `DOC_EXPLAIN` — кратко объяснить, что сказано в документации по теме;
|
||
- `DOC_ENTITY_LOOKUP` — найти разделы, связанные с сущностью или компонентом;
|
||
- `GENERATE_DOCS_FROM_CODE` — сформировать документацию по коду с нуля для модуля, класса, функции, компонента или сценария.
|
||
|
||
#### CROSS-DOMAIN
|
||
- `FIND_IMPLEMENTATION_BY_DOC` — найти реализацию по описанию;
|
||
- `FIND_DOC_BY_CODE` — найти документацию по коду;
|
||
- `COMPARE_DOCS_AND_CODE` — базовое сопоставление документации и реализации.
|
||
|
||
#### GENERAL / FALLBACK
|
||
- `GENERAL_QA` — общий сценарий ответа на вопрос, если домен или интент не удалось определить уверенно.
|
||
|
||
### 4.8.2. MVP-now
|
||
|
||
В текущем цикле фокус на сценариях:
|
||
|
||
- `OPEN_FILE`
|
||
- `EXPLAIN`
|
||
- `FIND_TESTS`
|
||
- `FIND_ENTRYPOINTS`
|
||
- `GENERAL_QA`
|
||
|
||
DOCS и CROSS_DOMAIN остаются частью target architecture; в текущем цикле они не являются обязательной частью test-first MVP.
|
||
|
||
---
|
||
|
||
## 5. Структура слоев RAG
|
||
|
||
## 5.1. CODE RAG
|
||
|
||
### C0 — Source Chunks
|
||
**Назначение:** базовые фрагменты исходного кода.
|
||
**Единица:** chunk кода.
|
||
**Как формируется:** исходные файлы обходятся и режутся на chunk’и с учетом структурных границ.
|
||
**Статус в MVP:** да.
|
||
|
||
### C1 — Symbol Catalog
|
||
**Назначение:** каталог модулей, классов, функций, методов и других значимых сущностей.
|
||
**Единица:** symbol.
|
||
**Как формируется:** из AST и синтаксического разбора кода.
|
||
**Статус в MVP:** да.
|
||
|
||
### C2 — Symbol Relations
|
||
**Назначение:** связи между symbols.
|
||
**Единица:** relation.
|
||
**Как формируется:** вторым проходом по AST и структурным зависимостям.
|
||
**Статус в MVP:** да, в ограниченном виде.
|
||
|
||
### C3 — Entrypoints
|
||
**Назначение:** каталог точек входа системы.
|
||
**Единица:** entrypoint.
|
||
**Как формируется:** специализированными детекторами entrypoint-паттернов.
|
||
**Статус в MVP:** да, минимально.
|
||
|
||
### C4 — Execution Paths
|
||
**Назначение:** типовые пути исполнения.
|
||
**Единица:** path.
|
||
**Как формируется:** поверх `C2` и `C3` через производную трассировку.
|
||
**Статус в MVP:** нет.
|
||
|
||
### C5 — Test Mappings
|
||
**Назначение:** связи production code ↔ tests.
|
||
**Единица:** mapping.
|
||
**Как формируется:** по путям, именам, импортам и конвенциям проекта.
|
||
**Статус в MVP:** да, минимально.
|
||
|
||
### C6 — Code Facts
|
||
**Назначение:** нормализованные факты из кода.
|
||
**Единица:** fact.
|
||
**Как формируется:** поверх `C1–C3` как производный слой.
|
||
**Статус в MVP:** нет.
|
||
|
||
## 5.2. DOCS RAG
|
||
|
||
### D0 — Document Chunks
|
||
**Назначение:** базовые фрагменты документации.
|
||
**Единица:** document chunk.
|
||
**Как формируется:** документы нормализуются и режутся на chunk’и с сохранением `section path`.
|
||
**Статус в MVP:** да.
|
||
|
||
### D1 — Document Catalog
|
||
**Назначение:** каталог документов и разделов.
|
||
**Единица:** `document node / section node`.
|
||
**Как формируется:** из структуры документов и их заголовков.
|
||
**Статус в MVP:** да.
|
||
|
||
### D2 — Fact Index
|
||
**Назначение:** атомарные факты из документации.
|
||
**Единица:** fact.
|
||
**Как формируется:** из `D0/D1` через правила, шаблоны и при необходимости LLM extraction с валидацией.
|
||
**Статус в MVP:** частично.
|
||
|
||
### D3 — Entity Catalog
|
||
**Назначение:** каталог сущностей и понятий документации.
|
||
**Единица:** entity / concept.
|
||
**Как формируется:** из устойчивых терминов, заголовков, словарей и нормализации повторяющихся сущностей.
|
||
**Статус в MVP:** да, минимально.
|
||
|
||
### D4 — Workflow Index
|
||
**Назначение:** процедуры, сценарии, последовательности шагов.
|
||
**Единица:** workflow.
|
||
**Как формируется:** из use case, процессных разделов и последовательных описаний шагов.
|
||
**Статус в MVP:** нет.
|
||
|
||
### D5 — Reference Graph
|
||
**Назначение:** граф ссылок между документами, секциями, сущностями и фактами.
|
||
**Единица:** reference link.
|
||
**Как формируется:** из явных и неявных cross-links между документами.
|
||
**Статус в MVP:** нет.
|
||
|
||
### D6 — Doc-Code Links
|
||
**Назначение:** мост между документацией и кодом.
|
||
**Единица:** `doc artifact ↔ code artifact link`.
|
||
**Как формируется:** из имен, aliases, путей, устойчивых терминов и других надежных соответствий.
|
||
**Статус в MVP:** да, минимально.
|
||
|
||
## 5.3. Layer scope: Target Architecture vs MVP-now
|
||
|
||
### 5.3.1. Target Architecture
|
||
|
||
Полная карта слоёв:
|
||
|
||
- **CODE:** C0–C6 (Source Chunks, Symbol Catalog, Symbol Relations, Entrypoints, Execution Paths, Test Mappings, Code Facts)
|
||
- **DOCS:** D0–D6 (Document Chunks, Document Catalog, Fact Index, Entity Catalog, Workflow Index, Reference Graph, Doc-Code Links)
|
||
|
||
### 5.3.2. MVP-now
|
||
|
||
**Обязательные сейчас:**
|
||
|
||
- `C0_SOURCE_CHUNKS`
|
||
- `C1_SYMBOL_CATALOG`
|
||
- `C2_SYMBOL_RELATIONS`
|
||
- `C3_ENTRYPOINTS`
|
||
|
||
**В облегчённом виде:**
|
||
|
||
- `C5_TEST_MAPPINGS` или `C5-lite`
|
||
|
||
**Не блокируют текущий этап:**
|
||
|
||
- `C4_EXECUTION_PATHS`
|
||
- `C6_CODE_FACTS`
|
||
- весь docs runtime (слои D0–D6 в исполнении runtime)
|
||
|
||
Слои документации остаются частью target architecture; docs retrieval пока не обязателен для текущего code-first milestone.
|
||
|
||
---
|
||
|
||
## 6. Итоговая рамка MVP-now
|
||
|
||
Сейчас система должна стабильно работать в **test-first** режиме.
|
||
|
||
**Фокус:**
|
||
|
||
- CODE_QA;
|
||
- через тесты настраиваются:
|
||
- intent routing (IntentRouterV2);
|
||
- layered retrieval;
|
||
- evidence sufficiency;
|
||
- answer quality;
|
||
- diagnostics.
|
||
|
||
**Не входят в текущий milestone:**
|
||
|
||
- UI-интеграция;
|
||
- docs runtime;
|
||
- полная интеграция orchestration переносится на следующий этап после стабилизации test pipeline.
|
||
|
||
В целевой архитектуре по-прежнему заложены:
|
||
- уверенная работа с кодом, symbols, entrypoints, тестами;
|
||
- ответ по документации и мост docs ↔ code;
|
||
- генерация документации по коду;
|
||
- fallback при неуверенном роутинге.
|
||
|
||
В MVP-now сознательно **не включаются** самые дорогие части:
|
||
- полноценные execution paths для всей системы;
|
||
- богатые fact-индексы по всем доменам;
|
||
- полный reference graph документации;
|
||
- глубокая автоматизация подготовки системной аналитики.
|