1435 lines
112 KiB
Markdown
1435 lines
112 KiB
Markdown
# Runtime Trace: 20260409-153809-3f140269bb3f
|
||
|
||
- active_rag_session_id: 0b09b5dd-db4c-439d-81fb-3f140269bb3f
|
||
|
||
## request
|
||
```json
|
||
{
|
||
"request_id": "req_10fe9cd1a1324ce49b71af6360259423",
|
||
"session_id": "as_198a782ca0f9428d862f28c5418bfd9e",
|
||
"active_rag_session_id": "0b09b5dd-db4c-439d-81fb-3f140269bb3f",
|
||
"process_version": "v2",
|
||
"created_at": "2026-04-09T15:38:09.755494+00:00",
|
||
"message": "Сформируй документацию по системной аналитике\n/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md"
|
||
}
|
||
```
|
||
|
||
## process.v2
|
||
```json
|
||
{
|
||
"event": "intent_routed",
|
||
"routing_domain": "DOCS",
|
||
"intent": "DOC_UPDATE",
|
||
"subintent": "FROM_FEATURE",
|
||
"normalized_query": "Сформируй документацию по системной аналитике /Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"target_terms": [
|
||
"/users/alex/dev_projects_v2/ai"
|
||
],
|
||
"anchors": {
|
||
"entity_names": [
|
||
"Users",
|
||
"Dev_projects_v2"
|
||
],
|
||
"file_names": [
|
||
"process/v2/test_doc/features/create_contact.md"
|
||
],
|
||
"endpoint_paths": [
|
||
"/users/alex/dev_projects_v2/ai"
|
||
],
|
||
"target_doc_hints": [
|
||
"/users/alex/dev_projects_v2/ai",
|
||
"users-alex-dev_projects_v2-ai",
|
||
"users-alex-dev_projects_v2-ai-endpoint",
|
||
"users-alex-dev_projects_v2-ai endpoint",
|
||
"ai",
|
||
"ai-endpoint",
|
||
"ai endpoint",
|
||
"docs/logic/telegram-notification-loop.md"
|
||
],
|
||
"matched_aliases": [],
|
||
"process_domain": null,
|
||
"process_subdomain": null,
|
||
"scope_type": "entity",
|
||
"candidate_domains": [],
|
||
"candidate_subdomains": [],
|
||
"candidate_entities": [],
|
||
"candidate_apis": [],
|
||
"signal_types": [
|
||
"API_ENDPOINT",
|
||
"DOMAIN_ENTITY",
|
||
"LOGIC_FLOW"
|
||
]
|
||
},
|
||
"confidence": 0.9500000000000001,
|
||
"routing_mode": "llm_default",
|
||
"llm_router_used": true,
|
||
"reason_short": "Запрос явно указывает на формирование документации по системной аналитике из указанного файла create_contact.md.",
|
||
"rag_session_id": "0b09b5dd-db4c-439d-81fb-3f140269bb3f"
|
||
}
|
||
```
|
||
|
||
## process.v2.pipeline
|
||
```json
|
||
{
|
||
"event": "router_resolved",
|
||
"domain": "DOCS",
|
||
"intent": "DOC_UPDATE",
|
||
"subintent": "FROM_FEATURE",
|
||
"confidence": 0.9500000000000001
|
||
}
|
||
```
|
||
|
||
## process.v2.pipeline
|
||
```json
|
||
{
|
||
"event": "anchors_extracted",
|
||
"signal_types": [
|
||
"API_ENDPOINT",
|
||
"DOMAIN_ENTITY",
|
||
"LOGIC_FLOW"
|
||
],
|
||
"endpoint_paths": [
|
||
"/users/alex/dev_projects_v2/ai"
|
||
],
|
||
"target_doc_hints": [
|
||
"/users/alex/dev_projects_v2/ai",
|
||
"users-alex-dev_projects_v2-ai",
|
||
"users-alex-dev_projects_v2-ai-endpoint",
|
||
"users-alex-dev_projects_v2-ai endpoint",
|
||
"ai",
|
||
"ai-endpoint",
|
||
"ai endpoint",
|
||
"docs/logic/telegram-notification-loop.md"
|
||
],
|
||
"matched_aliases": [],
|
||
"target_terms": [
|
||
"/users/alex/dev_projects_v2/ai"
|
||
]
|
||
}
|
||
```
|
||
|
||
## process.v2.pipeline
|
||
```json
|
||
{
|
||
"event": "alias_resolution",
|
||
"resolved_aliases": [],
|
||
"target_doc_hints": [
|
||
"/users/alex/dev_projects_v2/ai",
|
||
"users-alex-dev_projects_v2-ai",
|
||
"users-alex-dev_projects_v2-ai-endpoint",
|
||
"users-alex-dev_projects_v2-ai endpoint",
|
||
"ai",
|
||
"ai-endpoint",
|
||
"ai endpoint",
|
||
"docs/logic/telegram-notification-loop.md"
|
||
]
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_started",
|
||
"workflow_id": "v2.docs_update.from_feature"
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_step_traced",
|
||
"workflow_id": "v2.docs_update.from_feature",
|
||
"step": {
|
||
"id": "resolve_source",
|
||
"title": "Определение источника аналитики"
|
||
},
|
||
"input": {
|
||
"source_kind": "",
|
||
"source_ref": "",
|
||
"project_root": "",
|
||
"feature_content_len": 0,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
},
|
||
"output": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"issues": 0,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "",
|
||
"feature_content_len": 0,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_step_traced",
|
||
"workflow_id": "v2.docs_update.from_feature",
|
||
"step": {
|
||
"id": "load_source",
|
||
"title": "Загрузка системной аналитики"
|
||
},
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "",
|
||
"feature_content_len": 0,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
},
|
||
"output": {
|
||
"source_kind": "markdown_file",
|
||
"content_loaded": true,
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"issues": 0,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_step_traced",
|
||
"workflow_id": "v2.docs_update.from_feature",
|
||
"step": {
|
||
"id": "parse_feature",
|
||
"title": "Парсинг функциональных требований"
|
||
},
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
},
|
||
"output": {
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units": 2,
|
||
"issues": 2,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_step_traced",
|
||
"workflow_id": "v2.docs_update.from_feature",
|
||
"step": {
|
||
"id": "load_doc_rules",
|
||
"title": "Загрузка doc_rules"
|
||
},
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
},
|
||
"output": {
|
||
"enabled": true,
|
||
"loaded": true,
|
||
"supported_doc_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"issues": 2,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature.llm
|
||
```json
|
||
{
|
||
"event": "request",
|
||
"prompt_name": "v2_docs_update.plan_change_units",
|
||
"system_prompt": "Ты классифицируешь units системной аналитики для построения плана изменений документации.\n\nВерни только JSON:\n{\n \"items\": [\n {\"index\": 0, \"doc_type\": \"api_method\", \"reason\": \"...\"}\n ]\n}\n\nПравила:\n- Используй только doc_type из allowed_doc_types.\n- Не пропускай item, даже если не уверен: выбери наиболее близкий тип.\n- Ориентируйся на heading и snippet.\n- Никакого markdown и текста вне JSON.",
|
||
"user_prompt": "{\n \"system_rules\": \"Системные правила документации:\\n1. Один устойчивый объект — один документ.\\n2. Документы не должны дублировать друг друга по смыслу.\\n3. Связи между документами должны быть явными (related_docs/links).\\n4. Документация организована иерархически по папкам docs/*.\\n5. Markdown-документ состоит из YAML frontmatter и body.\\n6. Обязательные поля frontmatter: id, title, doc_type, related_docs, status, domain, sub_domain.\",\n \"allowed_doc_types\": [\n \"ui_page\",\n \"api_method\",\n \"logic_block\",\n \"architecture_overview\",\n \"integration_doc\",\n \"domain_entity\",\n \"glossary_item\",\n \"index_page\"\n ],\n \"items\": [\n {\n \"index\": 0,\n \"heading\": \"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»\",\n \"snippet\": \"- type: ui_page\\n- id: ui.contacts_dgr.create\\n\\nОсновной сценарий:\\n- Пользователь заполняет атрибуты карточки и нажимает кнопку «Добавить».\\n- ui.contacts_dgr вызывает endpoint POST /api/v1/clients/contacts-dgr для создания карточки контакта ДГР.\\n- ufs.contacts_dgr обрабатывает запрос и возвращает ответ.\\n- ui.contacts_dgr отображает результат создания контакта ДГР в виде push-уведомления.\"\n },\n {\n \"index\": 1,\n \"heading\": \"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr\",\n \"snippet\": \"- type: api_method\\n- id: ufs.contacts_dgr.api.create\\n- endpoint: POST /api/v1/clients/contacts-dgr\\n\\nТребования для основного сценария:\\n- Проверить входящий запрос на соответствие JSON-схеме. Если ошибка, завершить сценарий с кодом BAD_REQUEST.\\n- Авторизовать запрос по наличию периметра CI02792632.ContactsDGR.Create. При отсутствии периметра завершить основной сценарий с кодом UNAUTHORIZED.\\n- Для и\"\n }\n ]\n}",
|
||
"log_context": "workflow.v2.docs_update.from_feature.plan"
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature.llm
|
||
```json
|
||
{
|
||
"event": "response",
|
||
"text": "{\n \"items\": [\n {\"index\": 0, \"doc_type\": \"ui_page\"},\n {\"index\": 1, \"doc_type\": \"api_method\"}\n ]\n}"
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_step_traced",
|
||
"workflow_id": "v2.docs_update.from_feature",
|
||
"step": {
|
||
"id": "build_change_plan",
|
||
"title": "Построение плана изменений"
|
||
},
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
},
|
||
"output": {
|
||
"docs_rows": 7,
|
||
"planned_changes": 2,
|
||
"issues": 2,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature.llm
|
||
```json
|
||
{
|
||
"event": "changeset_prompt_built",
|
||
"doc_type": "ui_page",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"prompt_chars": 11064,
|
||
"rules_chars": 9572
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature.llm
|
||
```json
|
||
{
|
||
"event": "request",
|
||
"prompt_name": "v2_docs_update.build_doc_changeset",
|
||
"system_prompt": "Ты формируешь один item changeset для документации на основе системной аналитики и правил doc_rules.\n\nВерни только JSON-объект формата:\n{\n \"op\": \"create|update|delete\",\n \"path\": \"docs/...\",\n \"reason\": \"краткая причина\",\n \"proposed_content\": \"полный markdown документа для create/update\"\n}\n\nПравила:\n- Строго соблюдай структуру и ограничения из doc_rules_context.\n- Для create/update верни полный итоговый markdown (frontmatter + body).\n- Для update не используй placeholder-тексты; возвращай пригодный к сохранению документ.\n- reason обязателен, короткий, по сути изменения.\n- Никакого markdown и текста вне JSON.",
|
||
"user_prompt": "{\n \"change_request\": {\n \"op\": \"create\",\n \"path\": \"docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md\",\n \"doc_type\": \"ui_page\",\n \"doc_id\": \"ui_page.fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр\",\n \"title\": \"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»\",\n \"domain\": \"unknown\",\n \"sub_domain\": \"unknown\",\n \"reason\": \"Из unit 'FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»' системной аналитики (test).\",\n \"source_refs\": [\n \"section: 5. Функциональные требования\"\n ],\n \"related_docs\": [],\n \"requirement_body\": \"- type: ui_page\\n- id: ui.contacts_dgr.create\\n\\nОсновной сценарий:\\n- Пользователь заполняет атрибуты карточки и нажимает кнопку «Добавить».\\n- ui.contacts_dgr вызывает endpoint POST /api/v1/clients/contacts-dgr для создания карточки контакта ДГР.\\n- ufs.contacts_dgr обрабатывает запрос и возвращает ответ.\\n- ui.contacts_dgr отображает результат создания контакта ДГР в виде push-уведомления.\"\n },\n \"doc_rules_context\": \"## Global rules\\n\\n### documentation-rules.md\\n\\n# Documentation Rules\\n\\nЭтот каталог оформляет MVP документации проекта в атомарном формате.\\n\\n## Базовая структура\\n\\n- Каждый документ содержит YAML frontmatter.\\n- В документе должен быть один `H1`, совпадающий с `title`.\\n- Основные разделы оформляются как `## Summary` и `## Details`.\\n- Внутри `Details` используются заголовки уровня `###` и ниже.\\n- Связи, сущности и навигация описываются во frontmatter через `related_docs`, `links`, `entities`, `parent`, `children`.\\n\\n## Summary\\n\\n- Краткий explain-слой быстрого контекста.\\n- Должен позволять быстро понять назначение документа без чтения `Details`.\\n- Предпочтительный формат: компактный список ключевых фактов без длинных абзацев.\\n\\n## Details\\n\\n- Раскрывает полное описание объекта.\\n- Структура `Details` зависит от типа документа.\\n- Сценарии, ограничения, интеграции, ошибки и кодовые привязки должны быть разнесены по отдельным подразделам.\\n\\n## API documents\\n\\nДля `api_method` внутри `## Details` обязательны разделы:\\n- `### Описание`\\n- `### Сценарий`\\n- `### Функциональные требования`\\n- `### Нефункциональные требования`\\n- `### Контракт`\\n\\nЕсли у метода есть интеграции и ошибки, также обязательны:\\n- `### Интеграции`\\n- `### Ошибки`\\n- `### Связанный код`\\n- `### История изменений`\\n\\n### Сценарий\\n\\nСценарий оформляется как технический use case и содержит:\\n- название\\n- предусловия\\n- триггер\\n- основной сценарий\\n- альтернативный сценарий\\n- обработку ошибок\\n- постусловие\\n\\n### Требования\\n\\n- Функциональные требования маркируются как `FR-1`, `FR-2`, ...\\n- Нефункциональные требования маркируются как `NFR-1`, `NFR-2`, ...\\n- Идентификаторы требований локальны в рамках одного документа.\\n\\n### Контракт\\n\\nКонтракт должен быть пригоден для последующей сборки OpenAPI-спецификации и включать:\\n- входные параметры\\n- выходные параметры\\n- структуру JSON-сообщений\\n- обязательность полей\\n- типы и ограничения\\n- описание полей\\n- правила заполнения\\n- примеры данных\\n- auth\\n- idempotency\\n- timeout\\n- ошибки и их HTTP-коды\\n\\n### global/documentation-system.md\\n\\n# Documentation System\\n\\n## Назначение\\n\\nЭтот файл задает общую модель документации проекта.\\n\\n## Базовая модель\\n\\nКаждый документ должен состоять из двух слоев:\\n- YAML frontmatter\\n- контент\\n\\nКонтент всегда состоит из двух обязательных разделов:\\n- `## Summary`\\n- `## Details`\\n\\nНад ними должен быть один заголовок `# <title>`, совпадающий со значением `title` во frontmatter.\\n\\n## Принципы\\n\\n- Документы должны быть атомарными.\\n- Один документ описывает одну тему.\\n- Вместо дублирования между документами используются явные ссылки.\\n- Связи и навигация должны быть формализованы.\\n- Документы должны быть пригодны для чтения человеком и для RAG.\\n- Документы должны быть пригодны для частичного обновления без деградации структуры.\\n\\n## Типы документов\\n\\nНа уровне проекта поддерживаются типы:\\n- `api_method`\\n- `logic_block`\\n- `architecture_overview`\\n- `domain_entity`\\n- `ui_page`\\n- `integration_doc`\\n- `index_page`\\n- `glossary_item`\\n\\n### global/frontmatter.md\\n\\n# Frontmatter Rules\\n\\n## Назначение\\n\\nЭтот файл описывает единый контракт YAML frontmatter для всех документов.\\n\\n## Обязательные поля\\n\\n```yaml\\nid: string\\ntitle: string\\ndoc_type: string\\ndomain: string\\nsub_domain: string\\nrelated_docs: []\\nstatus: string\\n```\\n\\n## Поля совместимости и рекомендуемые поля\\n\\n```yaml\\ntype: string\\nname: string\\nmodule: string\\nlayer: string\\nupdated_at: YYYY-MM-DD\\ntags: []\\nentities: []\\nparent: string | null\\nchildren: []\\nlinks: {}\\nsource_of_truth: string\\nrelated_code: []\\nsystem_analytics_refs: []\\n```\\n\\n## Правила\\n\\n- `id` должен быть стабильным и уникальным в пределах документации проекта.\\n- `title` — человекочитаемый заголовок.\\n- `doc_type` — канонический тип документа.\\n- `domain` и `sub_domain` определяют бизнес-контекст документа.\\n- `related_docs` хранит явные связи с другими markdown-документами.\\n- `status` хранит жизненный цикл документа: например `draft`, `approved`, `active`.\\n- `type` допустимо дублировать как alias для tooling-совместимости с индексаторами.\\n- `name` — короткое системное имя документа.\\n- `module` — модуль или подсистема.\\n- `layer` — слой системы.\\n- `updated_at` хранится в формате `YYYY-MM-DD`.\\n\\n## Связи и навигация\\n\\n- `entities` описывает сущности, связанные с документом.\\n- `parent` и `children` описывают иерархию.\\n- `links` описывает typed graph связей между документами, кодом и интеграциями.\\n\\n## Формат links\\n\\n```yaml\\nlinks:\\n called_by:\\n - ext.health_probe\\n uses_logic:\\n - logic.some_flow\\n integrates_with:\\n - ext.some_system\\n```\\n\\n### global/linking.md\\n\\n# Linking Rules\\n\\n## Назначение\\n\\nЭтот файл описывает, как связывать документы между собой.\\n\\n## Иерархия\\n\\n- `parent` используется для родительского документа.\\n- `children` используется для прямых дочерних документов.\\n- Иерархия должна быть осмысленной и стабильной.\\n- Для общей точки входа допустим `index_page`.\\n\\n## Графовые связи\\n\\nДля `related_docs` используются ссылки на соседние документы.\\n\\nДля `links` рекомендуется использовать typed-ключи:\\n- `called_by`\\n- `uses_logic`\\n- `reads_db`\\n- `writes_db`\\n- `integrates_with`\\n- `used_by`\\n- `exposes_api`\\n- `uses_entities`\\n\\n## Правила использования\\n\\n- Если документ логически входит в другой, использовать `parent`/`children`.\\n- Если связь нужна для навигации между равноправными документами, дублировать ее в `related_docs`.\\n- Если связь отражает поведение, интеграции или переиспользование, фиксировать ее в `links`.\\n- Детальное описание интеграций хранить в body документа, а не только во frontmatter.\\n\\n### global/naming.md\\n\\n# Naming Rules\\n\\n## Назначение\\n\\nЭтот файл описывает правила именования документов, файлов и идентификаторов.\\n\\n## Правила для файлов\\n\\n- Имена файлов должны быть в kebab-case.\\n- Имя файла должно отражать одну тему.\\n- Для шаблонов использовать суффикс `.template.md`.\\n\\n## Правила для id\\n\\n- `id` строится в формате `<type-group>.<name>`.\\n- Примеры:\\n - `api.send_message_endpoint`\\n - `logic.telegram_notification_loop`\\n - `architecture.telegram_notify_app`\\n\\n## Правила для title\\n\\n- `title` должен быть кратким и человекочитаемым.\\n- В `title` допускаются пробелы и естественный язык.\\n\\n### global/writing-style.md\\n\\n# Writing Style\\n\\n## Назначение\\n\\nЭтот файл задает правила стиля для текстового наполнения документации.\\n\\n## Правила стиля\\n\\n- Текст должен быть лаконичным.\\n- Формулировки должны быть точными и техническими.\\n- Summary должен быть кратким explain-слоем.\\n- Details должен раскрывать суть без лишней воды.\\n- Нежелательно смешивать несколько тем в одном документе.\\n- Если детали относятся к другому артефакту, их нужно выносить в отдельный документ.\\n\\n## Язык\\n\\n- Основной язык документации — русский.\\n- Технические термины, названия классов, API, RAG, OpenAPI, runtime и другие устоявшиеся identifiers можно оставлять на английском.\\n\\n## Artifact rules (ui_page)\\n\\n# UI Page Rules\\n\\n## Назначение\\n\\nЭтот файл задает правила для документов типа `ui_page`.\\n\\n## Когда использовать\\n\\nИспользовать для описания одной пользовательской страницы, экрана или отдельного UI-сценария.\\n\\n## Обязательная структура\\n\\nДокумент должен содержать:\\n- YAML frontmatter\\n- `# <title>`\\n- `## Summary`\\n- `## Details`\\n\\n## Что описывать в Details\\n\\n- назначение страницы\\n- пользовательский сценарий\\n- основные блоки интерфейса\\n- связанные API и сущности\\n\\n## Template (ui_page)\\n\\n---\\nid: ui.example_page\\ntype: ui_page\\ndoc_type: ui_page\\nname: example_page\\ntitle: Пример UI-страницы\\nmodule: example_module\\nlayer: presentation\\ndomain: example_domain\\nsub_domain: example_subdomain\\nrelated_docs: []\\nstatus: draft\\nupdated_at: 2026-03-20\\nsource_of_truth: mixed\\nparent: null\\nchildren: []\\ntags: []\\nentities: []\\nlinks: {}\\n---\\n\\n# Пример UI-страницы\\n\\n## Summary\\n\\nКраткое описание страницы и её назначения.\\n\\n## Details\\n\\n### Назначение страницы\\n\\n### Пользовательский сценарий\\n\\n### Основные блоки интерфейса\\n\\n### Связанные API и сущности\\n\\n### Функциональные требования\\n\\n### Нефункциональные требования\\n\\n### Ограничения и граничные случаи\\n\\n### Ошибки и валидации\\n\\n### Связанный код\\n\\n### Связанные документы\\n\\n### История изменений\\n\\n## Section rule: details\\n\\n# Details Section Rules\\n\\n## Назначение\\n\\nЭтот файл задает общие правила для секции `## Details`.\\n\\n## Правила\\n\\n- `Details` оформляется как `## Details`.\\n- Внутри `Details` используются заголовки уровня `###` и ниже.\\n- Структура Details зависит от типа документа.\\n- В Details не нужно повторно дублировать навигацию и связи, если они уже есть во frontmatter.\\n- Интеграции, ошибки и кодовые привязки должны быть выделены в отдельные подразделы, если они существенны для понимания документа.\\n\\n## Section rule: requirements-format\\n\\n# Requirements Format Rules\\n\\n## Назначение\\n\\nЭтот файл задает формат для функциональных и нефункциональных требований.\\n\\n## Функциональные требования\\n\\n- Использовать коды `FR-1`, `FR-2`, `FR-3` и так далее.\\n- Каждое требование должно описывать отдельный обязательный аспект поведения.\\n- Идентификаторы локальны в пределах одного документа.\\n\\n## Нефункциональные требования\\n\\n- Использовать коды `NFR-1`, `NFR-2`, `NFR-3` и так далее.\\n- Требования должны описывать характеристики качества, ограничения и эксплуатационные свойства.\\n\\n## Section rule: summary\\n\\n# Summary Section Rules\\n\\n## Назначение\\n\\nЭтот файл задает правила для секции `## Summary`.\\n\\n## Правила\\n\\n- Summary должен быть коротким explain-слоем быстрого контекста.\\n- Summary должен объяснять суть документа без лишних деталей.\\n- Summary должен быть пригоден для explain и быстрого чтения.\\n- Предпочтительный формат: список ключевых фактов `Purpose`, `Actor`, `Trigger`, `Errors`, `Related ...` и т.д.\\n- Для крупных документов допустим более длинный summary, если он остается структурированным.\"\n}",
|
||
"log_context": "workflow.v2.docs_update.from_feature.changeset"
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature.llm
|
||
```json
|
||
{
|
||
"event": "response",
|
||
"text": "{\n \"op\": \"create\",\n \"path\": \"docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md\",\n \"reason\": \"Создание нового UI сценария согласно системной аналитике.\",\n \"proposed_content\": \"---\\nid: ui_page.fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр\\ntype: ui_page\\ndoc_type: ui_page\\ntitle: FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР\\\"\\ndomain: unknown\\nsub_domain: unknown\\nrelated_docs: []\\nstatus: draft\\nupdated_at: \\\"\\\"\\nsource_of_truth: mixed\\nparent: null\\nchildren: []\\ntags: []\\nentities: []\\nlinks: {}\\n---\\n\\n# FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»\n\n## Summary\n\n- **Назначение**: Реализация UI сценария добавления новой карточки контакта ДГР.\n- **Пользователь**: Не указан.\n- **Триггер**: Заполнение формы и нажатие кнопки «Добавить».\n- **Связанные компоненты**: API `/api/v1/clients/contacts-dgr`.\n\n## Details\n\n### Назначение страницы\n\nРеализует функционал создания новой карточки контакта ДГР через интерфейс пользователя.\n\n### Пользовательский сценарий\n\n- Пользователь заполняет необходимые атрибуты карточки и нажимает кнопку «Добавить».\n- Интерфейс отправляет POST-запрос на endpoint `/api/v1/clients/contacts-dgr`.\n- После обработки запроса возвращается ответ о результате операции.\n- Результат отображается пользователю в виде push-уведомления.\n\n### Основные блоки интерфейса\n\nНе указаны.\n\n### Связанные API и сущности\n\n- **API**: `/api/v1/clients/contacts-dgr` (POST)\n- **UI блок**: `ui.contacts_dgr`\n- **UFS блок**: `ufs.contacts_dgr`\n\n### Функциональные требования\n\n- **FR-1**: Реализован корректный вызов API `/api/v1/clients/contacts-dgr` при добавлении новой карточки контакта ДГР.\n\n### Нефункциональные требования\n\nНе определены.\n\n### Ограничения и граничные случаи\n\nНе описаны.\n\n### Ошибки и валидации\n\nНе детализировано.\n\n### Связанный код\n\nНе предоставлен.\n\n### Связанные документы\n\nНе указано.\n\n### История изменений\n\nНе заполнено.\"\n}"
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature.llm
|
||
```json
|
||
{
|
||
"event": "changeset_prompt_built",
|
||
"doc_type": "api_method",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"prompt_chars": 15658,
|
||
"rules_chars": 11520
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature.llm
|
||
```json
|
||
{
|
||
"event": "request",
|
||
"prompt_name": "v2_docs_update.build_doc_changeset",
|
||
"system_prompt": "Ты формируешь один item changeset для документации на основе системной аналитики и правил doc_rules.\n\nВерни только JSON-объект формата:\n{\n \"op\": \"create|update|delete\",\n \"path\": \"docs/...\",\n \"reason\": \"краткая причина\",\n \"proposed_content\": \"полный markdown документа для create/update\"\n}\n\nПравила:\n- Строго соблюдай структуру и ограничения из doc_rules_context.\n- Для create/update верни полный итоговый markdown (frontmatter + body).\n- Для update не используй placeholder-тексты; возвращай пригодный к сохранению документ.\n- reason обязателен, короткий, по сути изменения.\n- Никакого markdown и текста вне JSON.",
|
||
"user_prompt": "{\n \"change_request\": {\n \"op\": \"create\",\n \"path\": \"docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md\",\n \"doc_type\": \"api_method\",\n \"doc_id\": \"api_method.fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr\",\n \"title\": \"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr\",\n \"domain\": \"unknown\",\n \"sub_domain\": \"unknown\",\n \"reason\": \"Из unit 'FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr' системной аналитики (test).\",\n \"source_refs\": [\n \"section: 5. Функциональные требования\"\n ],\n \"related_docs\": [],\n \"requirement_body\": \"- type: api_method\\n- id: ufs.contacts_dgr.api.create\\n- endpoint: POST /api/v1/clients/contacts-dgr\\n\\nТребования для основного сценария:\\n- Проверить входящий запрос на соответствие JSON-схеме. Если ошибка, завершить сценарий с кодом BAD_REQUEST.\\n- Авторизовать запрос по наличию периметра CI02792632.ContactsDGR.Create. При отсутствии периметра завершить основной сценарий с кодом UNAUTHORIZED.\\n- Для исполнения запроса на создание контакта вызвать endpoint POST /contacts в prpb.contacts_dgr.\\n- Вернуть ответ ui.contacts_dgr в формате UfsBaseResponseContactDGRCreateRsDto.\\n\\nКонтракт POST /contacts\\n\\nЗапрос\\n\\n**headers**\\n\\n| Атрибут | Обязательность | Тип | Где передаем | Описание |\\n|---|---|---|---|---|\\n| `X-Request-Id` | 1 | `uuid` | `header` | Сквозной идентификатор вызова |\\n| `X-Client-Ident-Id` | 1 | `string(50)` | `header` | Идентификатор системы потребителя |\\n| `X-Employee-Number` | 0..1 | `string(8)` | `header` | Табельный номер пользователя, вызвавшего сервис |\\n\\n**body**\\n\\n| Атрибут | Обязательность | Тип | Описание |\\n|---|---|---|---|\\n| `contact` | 1 | `object` | Данные контакта ДГР |\\n| `contact.lastName` | 0..1 | `string(100)` | Фамилия контакта |\\n| `contact.firstName` | 0..1 | `string(100)` | Имя контакта |\\n| `contact.middleName` | 0..1 | `string(100)` | Отчество контакта |\\n| `contact.name` | 0..1 | `string(100)` | Название группового контакта |\\n| `contact.description` | 0..1 | `string(1000)` | Описание группового контакта |\\n| `contact.position` | 0..1 | `string(100)` | Должность контакта у клиента |\\n| `contact.comment` | 0..1 | `string(1000)` | Комментарий к контакту |\\n| `contact.contactType` | 1 | `enum(string)` | `Individual`, `Group` |\\n| `contact.crossboarding` | 1 | `boolean` | Признак принадлежности контакта к процессу онбординга |\\n| `contact.createdBy` | 1 | `string(8)` | Табельный номер пользователя, создавшего контакт |\\n| `contact.emails` | 0..1 | `array(object)` | Массив электронных адресов контакта |\\n| `contact.emails.value` | 1 | `string(100)` | Электронный адрес |\\n| `contact.emails.main` | 1 | `boolean` | Признак основной почты |\\n| `contact.phones` | 0..1 | `array(object)` | Массив телефонных номеров контакта |\\n| `contact.phones.value` | 1 | `string(20)` | Телефонный номер контакта |\\n| `contact.phones.extValue` | 0..1 | `string(10)` | Добавочный номер |\\n| `contact.phones.main` | 1 | `boolean` | Признак основного телефона |\\n| `contact.phones.mobile` | 1 | `boolean` | Признак мобильного телефона |\\n| `client` | 1 | `object` | Данные клиента |\\n| `client.ucpId` | 0..1 | `string(36)` | Идентификатор клиента ПАО |\\n| `client.sbpId` | 0..1 | `string(36)` | Идентификатор клиента АО |\\n| `client.inn` | 0..1 | `string(12)` | ИНН клиента |\\n| `client.kpp` | 0..1 | `string(9)` | КПП клиента |\\n\\nОтвет\\n\\n**ContactDGRCreateRsDto**\\n\\n| Атрибут | Обязательность | Тип | Описание |\\n|---|---|---|---|\\n| `contactId` | 1 | `string(36)` | Идентификатор контакта |\"\n },\n \"doc_rules_context\": \"## Global rules\\n\\n### documentation-rules.md\\n\\n# Documentation Rules\\n\\nЭтот каталог оформляет MVP документации проекта в атомарном формате.\\n\\n## Базовая структура\\n\\n- Каждый документ содержит YAML frontmatter.\\n- В документе должен быть один `H1`, совпадающий с `title`.\\n- Основные разделы оформляются как `## Summary` и `## Details`.\\n- Внутри `Details` используются заголовки уровня `###` и ниже.\\n- Связи, сущности и навигация описываются во frontmatter через `related_docs`, `links`, `entities`, `parent`, `children`.\\n\\n## Summary\\n\\n- Краткий explain-слой быстрого контекста.\\n- Должен позволять быстро понять назначение документа без чтения `Details`.\\n- Предпочтительный формат: компактный список ключевых фактов без длинных абзацев.\\n\\n## Details\\n\\n- Раскрывает полное описание объекта.\\n- Структура `Details` зависит от типа документа.\\n- Сценарии, ограничения, интеграции, ошибки и кодовые привязки должны быть разнесены по отдельным подразделам.\\n\\n## API documents\\n\\nДля `api_method` внутри `## Details` обязательны разделы:\\n- `### Описание`\\n- `### Сценарий`\\n- `### Функциональные требования`\\n- `### Нефункциональные требования`\\n- `### Контракт`\\n\\nЕсли у метода есть интеграции и ошибки, также обязательны:\\n- `### Интеграции`\\n- `### Ошибки`\\n- `### Связанный код`\\n- `### История изменений`\\n\\n### Сценарий\\n\\nСценарий оформляется как технический use case и содержит:\\n- название\\n- предусловия\\n- триггер\\n- основной сценарий\\n- альтернативный сценарий\\n- обработку ошибок\\n- постусловие\\n\\n### Требования\\n\\n- Функциональные требования маркируются как `FR-1`, `FR-2`, ...\\n- Нефункциональные требования маркируются как `NFR-1`, `NFR-2`, ...\\n- Идентификаторы требований локальны в рамках одного документа.\\n\\n### Контракт\\n\\nКонтракт должен быть пригоден для последующей сборки OpenAPI-спецификации и включать:\\n- входные параметры\\n- выходные параметры\\n- структуру JSON-сообщений\\n- обязательность полей\\n- типы и ограничения\\n- описание полей\\n- правила заполнения\\n- примеры данных\\n- auth\\n- idempotency\\n- timeout\\n- ошибки и их HTTP-коды\\n\\n### global/documentation-system.md\\n\\n# Documentation System\\n\\n## Назначение\\n\\nЭтот файл задает общую модель документации проекта.\\n\\n## Базовая модель\\n\\nКаждый документ должен состоять из двух слоев:\\n- YAML frontmatter\\n- контент\\n\\nКонтент всегда состоит из двух обязательных разделов:\\n- `## Summary`\\n- `## Details`\\n\\nНад ними должен быть один заголовок `# <title>`, совпадающий со значением `title` во frontmatter.\\n\\n## Принципы\\n\\n- Документы должны быть атомарными.\\n- Один документ описывает одну тему.\\n- Вместо дублирования между документами используются явные ссылки.\\n- Связи и навигация должны быть формализованы.\\n- Документы должны быть пригодны для чтения человеком и для RAG.\\n- Документы должны быть пригодны для частичного обновления без деградации структуры.\\n\\n## Типы документов\\n\\nНа уровне проекта поддерживаются типы:\\n- `api_method`\\n- `logic_block`\\n- `architecture_overview`\\n- `domain_entity`\\n- `ui_page`\\n- `integration_doc`\\n- `index_page`\\n- `glossary_item`\\n\\n### global/frontmatter.md\\n\\n# Frontmatter Rules\\n\\n## Назначение\\n\\nЭтот файл описывает единый контракт YAML frontmatter для всех документов.\\n\\n## Обязательные поля\\n\\n```yaml\\nid: string\\ntitle: string\\ndoc_type: string\\ndomain: string\\nsub_domain: string\\nrelated_docs: []\\nstatus: string\\n```\\n\\n## Поля совместимости и рекомендуемые поля\\n\\n```yaml\\ntype: string\\nname: string\\nmodule: string\\nlayer: string\\nupdated_at: YYYY-MM-DD\\ntags: []\\nentities: []\\nparent: string | null\\nchildren: []\\nlinks: {}\\nsource_of_truth: string\\nrelated_code: []\\nsystem_analytics_refs: []\\n```\\n\\n## Правила\\n\\n- `id` должен быть стабильным и уникальным в пределах документации проекта.\\n- `title` — человекочитаемый заголовок.\\n- `doc_type` — канонический тип документа.\\n- `domain` и `sub_domain` определяют бизнес-контекст документа.\\n- `related_docs` хранит явные связи с другими markdown-документами.\\n- `status` хранит жизненный цикл документа: например `draft`, `approved`, `active`.\\n- `type` допустимо дублировать как alias для tooling-совместимости с индексаторами.\\n- `name` — короткое системное имя документа.\\n- `module` — модуль или подсистема.\\n- `layer` — слой системы.\\n- `updated_at` хранится в формате `YYYY-MM-DD`.\\n\\n## Связи и навигация\\n\\n- `entities` описывает сущности, связанные с документом.\\n- `parent` и `children` описывают иерархию.\\n- `links` описывает typed graph связей между документами, кодом и интеграциями.\\n\\n## Формат links\\n\\n```yaml\\nlinks:\\n called_by:\\n - ext.health_probe\\n uses_logic:\\n - logic.some_flow\\n integrates_with:\\n - ext.some_system\\n```\\n\\n### global/linking.md\\n\\n# Linking Rules\\n\\n## Назначение\\n\\nЭтот файл описывает, как связывать документы между собой.\\n\\n## Иерархия\\n\\n- `parent` используется для родительского документа.\\n- `children` используется для прямых дочерних документов.\\n- Иерархия должна быть осмысленной и стабильной.\\n- Для общей точки входа допустим `index_page`.\\n\\n## Графовые связи\\n\\nДля `related_docs` используются ссылки на соседние документы.\\n\\nДля `links` рекомендуется использовать typed-ключи:\\n- `called_by`\\n- `uses_logic`\\n- `reads_db`\\n- `writes_db`\\n- `integrates_with`\\n- `used_by`\\n- `exposes_api`\\n- `uses_entities`\\n\\n## Правила использования\\n\\n- Если документ логически входит в другой, использовать `parent`/`children`.\\n- Если связь нужна для навигации между равноправными документами, дублировать ее в `related_docs`.\\n- Если связь отражает поведение, интеграции или переиспользование, фиксировать ее в `links`.\\n- Детальное описание интеграций хранить в body документа, а не только во frontmatter.\\n\\n### global/naming.md\\n\\n# Naming Rules\\n\\n## Назначение\\n\\nЭтот файл описывает правила именования документов, файлов и идентификаторов.\\n\\n## Правила для файлов\\n\\n- Имена файлов должны быть в kebab-case.\\n- Имя файла должно отражать одну тему.\\n- Для шаблонов использовать суффикс `.template.md`.\\n\\n## Правила для id\\n\\n- `id` строится в формате `<type-group>.<name>`.\\n- Примеры:\\n - `api.send_message_endpoint`\\n - `logic.telegram_notification_loop`\\n - `architecture.telegram_notify_app`\\n\\n## Правила для title\\n\\n- `title` должен быть кратким и человекочитаемым.\\n- В `title` допускаются пробелы и естественный язык.\\n\\n### global/writing-style.md\\n\\n# Writing Style\\n\\n## Назначение\\n\\nЭтот файл задает правила стиля для текстового наполнения документации.\\n\\n## Правила стиля\\n\\n- Текст должен быть лаконичным.\\n- Формулировки должны быть точными и техническими.\\n- Summary должен быть кратким explain-слоем.\\n- Details должен раскрывать суть без лишней воды.\\n- Нежелательно смешивать несколько тем в одном документе.\\n- Если детали относятся к другому артефакту, их нужно выносить в отдельный документ.\\n\\n## Язык\\n\\n- Основной язык документации — русский.\\n- Технические термины, названия классов, API, RAG, OpenAPI, runtime и другие устоявшиеся identifiers можно оставлять на английском.\\n\\n## Artifact rules (api_method)\\n\\n# API Method Rules\\n\\n## Назначение\\n\\nЭтот файл задает правила для документов типа `api_method`.\\n\\n## Когда использовать\\n\\nИспользовать для описания одного HTTP endpoint или одного отдельного API метода.\\n\\n## Обязательная структура\\n\\nДокумент должен содержать:\\n- YAML frontmatter\\n- `# <title>`\\n- `## Summary`\\n- `## Details`\\n\\nВнутри `## Details` обязательны:\\n- `### Описание`\\n- `### Сценарий`\\n- `### Функциональные требования`\\n- `### Нефункциональные требования`\\n- `### Контракт`\\n\\n## Особые правила\\n\\n- Сценарий оформляется как технический use case.\\n- Функциональные требования маркируются `FR-*`.\\n- Нефункциональные требования маркируются `NFR-*`.\\n- Контракт должен быть пригоден для последующей сборки OpenAPI.\\n- Если у метода есть интеграции, они выносятся в `### Интеграции`.\\n- Ошибки и HTTP-коды либо описываются в `### Ошибки`, либо ссылаются на централизованный каталог ошибок.\\n\\n## Ошибки оформления\\n\\n- Нельзя заменять контракт общим текстовым описанием.\\n- Нельзя смешивать несколько endpoint в одном документе.\\n- Нельзя хранить связи и навигацию вне frontmatter.\\n\\n## Template (api_method)\\n\\n---\\nid: api.example_method\\ntype: api_method\\ndoc_type: api_method\\nname: example_method\\ntitle: HTTP API /example\\nmodule: example_module\\nlayer: application\\ndomain: example_domain\\nsub_domain: example_subdomain\\nrelated_docs: []\\nstatus: draft\\nupdated_at: 2026-03-20\\nsource_of_truth: code\\nparent: null\\nchildren: []\\ntags: []\\nentities: []\\nlinks: {}\\n---\\n\\n# HTTP API /example\\n\\n## Summary\\n\\nКраткое описание метода.\\n\\n## Details\\n\\n## Описание\\n\\nКороткое описание сути метода.\\n\\n## Сценарий\\n\\n**Название:**\\n\\n**Предусловия:**\\n- \\n\\n**Триггер:**\\n- \\n\\n**Основной сценарий:**\\n1. \\n\\n**Альтернативный сценарий:**\\n1. \\n\\n**Обработка ошибок:**\\n1. \\n\\n**Постусловие:**\\n- \\n\\n## Функциональные требования\\n\\n**FR-1.**\\n\\n## Нефункциональные требования\\n\\n**NFR-1.**\\n\\n## Контракт\\n\\n### Входные параметры\\n\\n| Параметр | Где передается | Тип | Обязательность | Ограничения | Описание | Пример |\\n|---|---|---|---|---|---|---|\\n| | | | | | | |\\n\\n### Выходные параметры\\n\\n| Поле | Тип | Обязательность | Ограничения | Описание | Заполнение | Пример |\\n|---|---|---|---|---|---|---|\\n| | | | | | | |\\n\\n### Интеграции\\n\\n### Ошибки\\n\\n### Связанный код\\n\\n### История изменений\\n\\n## Section rule: api-contract\\n\\n# API Contract Rules\\n\\n## Назначение\\n\\nЭтот файл описывает, как оформлять подраздел `## Контракт` в API-документах.\\n\\n## Что должно быть описано\\n\\n- входные параметры\\n- выходные параметры\\n- JSON-структуры запросов и ответов\\n- обязательность полей\\n- типы полей\\n- ограничения\\n- описание назначения полей\\n- примеры данных\\n- auth\\n- idempotency\\n- timeout\\n- ошибки и их HTTP-коды\\n\\n## Правило качества\\n\\nКонтракт должен быть достаточно формальным, чтобы по нему можно было собрать OpenAPI-спецификацию.\\n\\n## Section rule: api-scenario\\n\\n# API Scenario Rules\\n\\n## Назначение\\n\\nЭтот файл описывает, как оформлять подраздел `### Сценарий` в API-документах.\\n\\n## Обязательные части\\n\\n- название\\n- предусловия\\n- триггер\\n- основной сценарий\\n- альтернативный сценарий\\n- обработка ошибок\\n- постусловие\\n\\n## Правила\\n\\n- Сценарий должен быть лаконичным.\\n- Сценарий должен отражать суть шага.\\n- Сложные технические детали надо выносить в `FR-*`.\\n\\n## Section rule: details\\n\\n# Details Section Rules\\n\\n## Назначение\\n\\nЭтот файл задает общие правила для секции `## Details`.\\n\\n## Правила\\n\\n- `Details` оформляется как `## Details`.\\n- Внутри `Details` используются заголовки уровня `###` и ниже.\\n- Структура Details зависит от типа документа.\\n- В Details не нужно повторно дублировать навигацию и связи, если они уже есть во frontmatter.\\n- Интеграции, ошибки и кодовые привязки должны быть выделены в отдельные подразделы, если они существенны для понимания документа.\\n\\n## Section rule: requirements-format\\n\\n# Requirements Format Rules\\n\\n## Назначение\\n\\nЭтот файл задает формат для функциональных и нефункциональных требований.\\n\\n## Функциональные требования\\n\\n- Использовать коды `FR-1`, `FR-2`, `FR-3` и так далее.\\n- Каждое требование должно описывать отдельный обязательный аспект поведения.\\n- Идентификаторы локальны в пределах одного документа.\\n\\n## Нефункциональные требования\\n\\n- Использовать коды `NFR-1`, `NFR-2`, `NFR-3` и так далее.\\n- Требования должны описывать характеристики качества, ограничения и эксплуатационные свойства.\\n\\n## Section rule: summary\\n\\n# Summary Section Rules\\n\\n## Назначение\\n\\nЭтот файл задает правила для секции `## Summary`.\\n\\n## Правила\\n\\n- Summary должен быть коротким explain-слоем быстрого контекста.\\n- Summary должен объяснять суть документа без лишних деталей.\\n- Summary должен быть пригоден для explain и быстрого чтения.\\n- Предпочтительный формат: список ключевых фактов `Purpose`, `Actor`, `Trigger`, `Errors`, `Related ...` и т.д.\\n- Для крупных документов допустим более длинный summary, если он остается структурированным.\"\n}",
|
||
"log_context": "workflow.v2.docs_update.from_feature.changeset"
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature.llm
|
||
```json
|
||
{
|
||
"event": "response",
|
||
"text": "{\n \"op\": \"create\",\n \"path\": \"docs/api/api_method-fr2_реализовать_сервис_клиентов_post_api_v1_clients_contacts_dgr.md\",\n \"reason\": \"Создание нового API-метода FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr из системной аналитики.\",\n \"proposed_content\": \"---\\nid: api_method.fr2_реализовать_сервис_клиентов\\nname: fr2_реализовать_сервис_клиентов\\ntype: api_method\\ndoc_type: api_method\\ntitle: FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr\\ndomain: unknown\\nsub_domain: unknown\\nrelated_docs: []\\nstatus: draft\\nupdated_at: '2023-10-10'\\nparent: null\\nchildren: []\\nlinks: {}\\n---\\n\\n# FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr\\n\\n## Summary\\n\\n- **Цель**: Создание нового контакта ДГР через API.\\n- **Актор**: Внешний клиент.\\n- **Ошибка**: BAD_REQUEST при неверном JSON, UNAUTHORIZED при отсутствии авторизации.\\n- **Интеграция**: Вызов endpoint POST /contacts в prpb.contacts_dgr.\\n\\n## Details\\n\\n## Описание\\n\\nМетод позволяет создавать новый контакт ДГР в системе CLIENTS через POST-запрос к `/api/v1/clients/contacts-dgr`.\\n\\n## Сценарий\\n\\n**Название:** Создать контакт ДГР\\n\\n**Предусловия:**\\n- Клиент аутентифицирован.\\n\\n**Триггер:**\\n- Отправка POST-запроса к `/api/v1/clients/contacts-dgr`.\\n\\n**Основной сценарий:**\\n1. Проверяется валидность JSON-запроса.\\n2. Проведение авторизации.\\n3. Вызов backend-сервису для создания контакта.\\n4. Возвращение ответа.\\n\\n**Альтернативный сценарий:**\\n- Возврат ошибки при неудачной проверке JSON или отсутствии авторизации.\\n\\n**Обработка ошибок:**\\n- HTTP-код 400 при ошибке валидации JSON.\\n- HTTP-код 401 при отсутствии необходимых прав доступа.\\n\\n**Постусловие:**\\n- Контакт успешно создан или возвращена соответствующая ошибка.\\n\\n## Функциональные требования\\n\\n**FR-1.** Проверка входящего запроса на соответствие JSON-схеме.\\n**FR-2.** Авторизация по периметру CI02792632.ContactsDGR.Create.\\n**FR-3.** Вызов endpoint POST /contacts в prpb.contacts_dgr.\\n**FR-4.** Возвращение ответа в формате UfsBaseResponseContactDGRCreateRsDto.\\n\\n## Нефункциональные требования\\n\\n(не указаны)\\n\\n## Контракт\\n\\n### Входные параметры\\n\\n| Атрибут | Обязательность | Тип | Где передаем | Описание |\\n|------------------------|---------------|----------------|----------------|------------------------------------|\\n| `X-Request-Id` | 1 | `uuid` | header | Сквозной идентификатор вызова |\\n| `X-Client-Ident-Id` | 1 | `string(50)` | header | Идентификатор системы потребителя |\\n| `X-Employee-Number` | 0..1 | `string(8)` | header | Табельный номер пользователя |\\n| `contact` | 1 | object | body | Данные контакта ДГР |\\n| `contact.lastName` | 0..1 | `string(100)` | body | Фамилия контакта |\\n| `contact.firstName` | 0..1 | `string(100)` | body | Имя контакта |\\n| `contact.middleName` | 0..1 | `string(100)` | body | Отчество контакта |\\n| `contact.name` | 0..1 | `string(100)` | body | Название группового контакта |\\n| `contact.description` | 0..1 | `string(1000)` | body | Описание группового контакта |\\n| `contact.position` | 0..1 | `string(100)` | body | Должность контакта |\\n| `contact.comment` | 0..1 | `string(1000)` | body | Комментарий к контакту |\\n| `contact.contactType` | 1 | enum(string) | body | Индивидуальный или групповой контакт|\\n| `contact.crossboarding`| 1 | boolean | body | Признак принадлежности к онбордингу |\\n| `contact.createdBy` | 1 | string(8) | body | Табельный номер создателя контакта |\\n| `contact.emails` | 0..1 | array(object) | body | Массив email-адресов |\\n| `contact.emails.value` | 1 | string(100) | body | Email-значение |\\n| `contact.emails.main` | 1 | boolean | body | Признак основной почты |\\n| `contact.phones` | 0..1 | array(object) | body | Массив телефонов |\\n| `contact.phones.value` | 1 | string(20) | body | Номер телефона |\\n| `contact.phones.extValue`| 0..1 | string(10) | body | Внутренний добавочный номер |\\n| `contact.phones.main` | 1 | boolean | body | Признак основного телефона |\\n| `contact.phones.mobile`| 1 | boolean | body | Признак мобильного телефона |\\n| `client` | 1 | object | body | Данные клиента |\\n| `client.ucpId` | 0..1 | string(36) | body | Идентификатор клиента ПАО |\\n| `client.sbpId` | 0..1 | string(36) | body | Идентификатор клиента АО |\\n| `client.inn` | 0..1 | string(12) | body | ИНН клиента |\\n| `client.kpp` | 0..1 | string(9) | body | КПП клиента |\\n\\n### Выходные параметры\\n\\n| Атрибут | Тип | Обязательность | Описание |\\n|-------------|---------------|---------------|------------------------------|\\n| `contactId` | `string(36)` | 1 | Идентификатор созданного контакта |\\n\"\n}"
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_step_traced",
|
||
"workflow_id": "v2.docs_update.from_feature",
|
||
"step": {
|
||
"id": "build_changeset",
|
||
"title": "Формирование changeset"
|
||
},
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
},
|
||
"output": {
|
||
"changeset_items": 1,
|
||
"issues": 3,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 1,
|
||
"changeset_preview": [
|
||
{
|
||
"op": "ChangeOp.CREATE",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md"
|
||
}
|
||
],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 3,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики.",
|
||
"LLM вернул невалидный JSON changeset для docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md."
|
||
]
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_step_traced",
|
||
"workflow_id": "v2.docs_update.from_feature",
|
||
"step": {
|
||
"id": "finalize",
|
||
"title": "Подготовка ответа"
|
||
},
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 1,
|
||
"changeset_preview": [
|
||
{
|
||
"op": "ChangeOp.CREATE",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md"
|
||
}
|
||
],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 3,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики.",
|
||
"LLM вернул невалидный JSON changeset для docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md."
|
||
]
|
||
},
|
||
"output": {
|
||
"answer_length": 6476,
|
||
"issues": 3,
|
||
"changeset_items": 1,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 1,
|
||
"changeset_preview": [
|
||
{
|
||
"op": "ChangeOp.CREATE",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md"
|
||
}
|
||
],
|
||
"apply_changeset": true,
|
||
"answer_len": 6476,
|
||
"issues_count": 3,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики.",
|
||
"LLM вернул невалидный JSON changeset для docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md."
|
||
]
|
||
}
|
||
}
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_trace_flushed",
|
||
"workflow_id": "v2.docs_update.from_feature",
|
||
"steps": [
|
||
{
|
||
"step_id": "resolve_source",
|
||
"title": "Определение источника аналитики",
|
||
"input": {
|
||
"source_kind": "",
|
||
"source_ref": "",
|
||
"project_root": "",
|
||
"feature_content_len": 0,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
},
|
||
"output": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"issues": 0,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "",
|
||
"feature_content_len": 0,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"step_id": "load_source",
|
||
"title": "Загрузка системной аналитики",
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "",
|
||
"feature_content_len": 0,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
},
|
||
"output": {
|
||
"source_kind": "markdown_file",
|
||
"content_loaded": true,
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"issues": 0,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"step_id": "parse_feature",
|
||
"title": "Парсинг функциональных требований",
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 0,
|
||
"unit_headings": [],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 0,
|
||
"issues_preview": []
|
||
},
|
||
"output": {
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units": 2,
|
||
"issues": 2,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"step_id": "load_doc_rules",
|
||
"title": "Загрузка doc_rules",
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": false,
|
||
"doc_rules_supported_types": [],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
},
|
||
"output": {
|
||
"enabled": true,
|
||
"loaded": true,
|
||
"supported_doc_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"issues": 2,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"step_id": "build_change_plan",
|
||
"title": "Построение плана изменений",
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 0,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 0,
|
||
"planned_changes_preview": [],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
},
|
||
"output": {
|
||
"docs_rows": 7,
|
||
"planned_changes": 2,
|
||
"issues": 2,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"step_id": "build_changeset",
|
||
"title": "Формирование changeset",
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 0,
|
||
"changeset_preview": [],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 2,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики."
|
||
]
|
||
},
|
||
"output": {
|
||
"changeset_items": 1,
|
||
"issues": 3,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 1,
|
||
"changeset_preview": [
|
||
{
|
||
"op": "ChangeOp.CREATE",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md"
|
||
}
|
||
],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 3,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики.",
|
||
"LLM вернул невалидный JSON changeset для docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md."
|
||
]
|
||
}
|
||
}
|
||
},
|
||
{
|
||
"step_id": "finalize",
|
||
"title": "Подготовка ответа",
|
||
"input": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 1,
|
||
"changeset_preview": [
|
||
{
|
||
"op": "ChangeOp.CREATE",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md"
|
||
}
|
||
],
|
||
"apply_changeset": false,
|
||
"answer_len": 0,
|
||
"issues_count": 3,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики.",
|
||
"LLM вернул невалидный JSON changeset для docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md."
|
||
]
|
||
},
|
||
"output": {
|
||
"answer_length": 6476,
|
||
"issues": 3,
|
||
"changeset_items": 1,
|
||
"_context": {
|
||
"source_kind": "markdown_file",
|
||
"source_ref": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features/create_contact.md",
|
||
"project_root": "/Users/alex/Dev_projects_v2/ai driven app process/v2/test_doc/features",
|
||
"feature_content_len": 6082,
|
||
"analysis_id": "test",
|
||
"domains": [],
|
||
"subdomains": [],
|
||
"units_count": 2,
|
||
"unit_headings": [
|
||
"FR1. Реализовать сценарий «Контакты ДГР. Создание карточки контакта ДГР»",
|
||
"FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr"
|
||
],
|
||
"docs_rows_count": 7,
|
||
"doc_rules_enabled": true,
|
||
"doc_rules_loaded": true,
|
||
"doc_rules_supported_types": [
|
||
"api_method",
|
||
"architecture_overview",
|
||
"domain_entity",
|
||
"logic_block",
|
||
"ui_page"
|
||
],
|
||
"planned_changes_count": 2,
|
||
"planned_changes_preview": [
|
||
{
|
||
"op": "create",
|
||
"path": "docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md",
|
||
"doc_type": "ui_page"
|
||
},
|
||
{
|
||
"op": "create",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md",
|
||
"doc_type": "api_method"
|
||
}
|
||
],
|
||
"changeset_count": 1,
|
||
"changeset_preview": [
|
||
{
|
||
"op": "ChangeOp.CREATE",
|
||
"path": "docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md"
|
||
}
|
||
],
|
||
"apply_changeset": true,
|
||
"answer_len": 6476,
|
||
"issues_count": 3,
|
||
"issues_preview": [
|
||
"Отсутствует domains в metadata аналитики.",
|
||
"Отсутствует subdomains в metadata аналитики.",
|
||
"LLM вернул невалидный JSON changeset для docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md."
|
||
]
|
||
}
|
||
}
|
||
}
|
||
]
|
||
}
|
||
```
|
||
|
||
## workflow.v2.docs_update.from_feature
|
||
```json
|
||
{
|
||
"event": "workflow_completed",
|
||
"workflow_id": "v2.docs_update.from_feature"
|
||
}
|
||
```
|
||
|
||
## process.v2.pipeline
|
||
```json
|
||
{
|
||
"event": "answer_generated",
|
||
"answer_mode": "docs_update_changeset",
|
||
"answer_length": 6476,
|
||
"changeset_items": 1,
|
||
"apply_changeset": true
|
||
}
|
||
```
|
||
|
||
## result
|
||
```json
|
||
{
|
||
"status": "done",
|
||
"answer": "DOC_UPDATE/FROM_FEATURE: результат построения changeset.\n\nОбнаружены несоответствия/нехватка данных:\n- Отсутствует domains в metadata аналитики.\n- Отсутствует subdomains в metadata аналитики.\n- LLM вернул невалидный JSON changeset для docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md.\n\nПлан изменений:\n- create: docs/ui/ui_page-fr1_реализовать_сценарий_контакты_дгр_создание_карточки_контакта_дгр.md (ui_page)\n- create: docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md (api_method)\n\nChangeset (для плагина):\n```json\n[\n {\n \"op\": \"create\",\n \"path\": \"docs/api/api_method-fr2_реализовать_сервис_clients_post_api_v1_clients_contacts_dgr.md\",\n \"base_hash\": null,\n \"proposed_content\": \"---\\nid: api_method.fr2_реализовать_сервис_клиентов\\nname: fr2_реализовать_сервис_клиентов\\ntype: api_method\\ndoc_type: api_method\\ntitle: FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr\\ndomain: unknown\\nsub_domain: unknown\\nrelated_docs: []\\nstatus: draft\\nupdated_at: '2023-10-10'\\nparent: null\\nchildren: []\\nlinks: {}\\n---\\n\\n# FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr\\n\\n## Summary\\n\\n- **Цель**: Создание нового контакта ДГР через API.\\n- **Актор**: Внешний клиент.\\n- **Ошибка**: BAD_REQUEST при неверном JSON, UNAUTHORIZED при отсутствии авторизации.\\n- **Интеграция**: Вызов endpoint POST /contacts в prpb.contacts_dgr.\\n\\n## Details\\n\\n## Описание\\n\\nМетод позволяет создавать новый контакт ДГР в системе CLIENTS через POST-запрос к `/api/v1/clients/contacts-dgr`.\\n\\n## Сценарий\\n\\n**Название:** Создать контакт ДГР\\n\\n**Предусловия:**\\n- Клиент аутентифицирован.\\n\\n**Триггер:**\\n- Отправка POST-запроса к `/api/v1/clients/contacts-dgr`.\\n\\n**Основной сценарий:**\\n1. Проверяется валидность JSON-запроса.\\n2. Проведение авторизации.\\n3. Вызов backend-сервису для создания контакта.\\n4. Возвращение ответа.\\n\\n**Альтернативный сценарий:**\\n- Возврат ошибки при неудачной проверке JSON или отсутствии авторизации.\\n\\n**Обработка ошибок:**\\n- HTTP-код 400 при ошибке валидации JSON.\\n- HTTP-код 401 при отсутствии необходимых прав доступа.\\n\\n**Постусловие:**\\n- Контакт успешно создан или возвращена соответствующая ошибка.\\n\\n## Функциональные требования\\n\\n**FR-1.** Проверка входящего запроса на соответствие JSON-схеме.\\n**FR-2.** Авторизация по периметру CI02792632.ContactsDGR.Create.\\n**FR-3.** Вызов endpoint POST /contacts в prpb.contacts_dgr.\\n**FR-4.** Возвращение ответа в формате UfsBaseResponseContactDGRCreateRsDto.\\n\\n## Нефункциональные требования\\n\\n(не указаны)\\n\\n## Контракт\\n\\n### Входные параметры\\n\\n| Атрибут | Обязательность | Тип | Где передаем | Описание |\\n|------------------------|---------------|----------------|----------------|------------------------------------|\\n| `X-Request-Id` | 1 | `uuid` | header | Сквозной идентификатор вызова |\\n| `X-Client-Ident-Id` | 1 | `string(50)` | header | Идентификатор системы потребителя |\\n| `X-Employee-Number` | 0..1 | `string(8)` | header | Табельный номер пользователя |\\n| `contact` | 1 | object | body | Данные контакта ДГР |\\n| `contact.lastName` | 0..1 | `string(100)` | body | Фамилия контакта |\\n| `contact.firstName` | 0..1 | `string(100)` | body | Имя контакта |\\n| `contact.middleName` | 0..1 | `string(100)` | body | Отчество контакта |\\n| `contact.name` | 0..1 | `string(100)` | body | Название группового контакта |\\n| `contact.description` | 0..1 | `string(1000)` | body | Описание группового контакта |\\n| `contact.position` | 0..1 | `string(100)` | body | Должность контакта |\\n| `contact.comment` | 0..1 | `string(1000)` | body | Комментарий к контакту |\\n| `contact.contactType` | 1 | enum(string) | body | Индивидуальный или групповой контакт|\\n| `contact.crossboarding`| 1 | boolean | body | Признак принадлежности к онбордингу |\\n| `contact.createdBy` | 1 | string(8) | body | Табельный номер создателя контакта |\\n| `contact.emails` | 0..1 | array(object) | body | Массив email-адресов |\\n| `contact.emails.value` | 1 | string(100) | body | Email-значение |\\n| `contact.emails.main` | 1 | boolean | body | Признак основной почты |\\n| `contact.phones` | 0..1 | array(object) | body | Массив телефонов |\\n| `contact.phones.value` | 1 | string(20) | body | Номер телефона |\\n| `contact.phones.extValue`| 0..1 | string(10) | body | Внутренний добавочный номер |\\n| `contact.phones.main` | 1 | boolean | body | Признак основного телефона |\\n| `contact.phones.mobile`| 1 | boolean | body | Признак мобильного телефона |\\n| `client` | 1 | object | body | Данные клиента |\\n| `client.ucpId` | 0..1 | string(36) | body | Идентификатор клиента ПАО |\\n| `client.sbpId` | 0..1 | string(36) | body | Идентификатор клиента АО |\\n| `client.inn` | 0..1 | string(12) | body | ИНН клиента |\\n| `client.kpp` | 0..1 | string(9) | body | КПП клиента |\\n\\n### Выходные параметры\\n\\n| Атрибут | Тип | Обязательность | Описание |\\n|-------------|---------------|---------------|------------------------------|\\n| `contactId` | `string(36)` | 1 | Идентификатор созданного контакта |\\n\",\n \"reason\": \"Создание нового API-метода FR2. Реализовать сервис CLIENTS. POST /api/v1/clients/contacts-dgr из системной аналитики.\",\n \"hunks\": []\n }\n]\n```\n\napply_changeset: true",
|
||
"completed_at": "2026-04-09T15:38:57.199054+00:00"
|
||
}
|
||
```
|