# v1.plan.md ## 1. Цель ближайшего этапа На ближайшем этапе цель — не достраивать полного агента и не интегрировать решение в UI, а довести до зрелого состояния **изолированный code-first test pipeline**: **user query -> IntentRouterV2 -> retrieval plan -> layered retrieval -> evidence gate -> LLM answer -> diagnostics** Именно этот контур должен стать будущим ядром агента, которое позже заменит legacy `RouterService`. --- ## 2. Что считается результатом этапа Этап можно считать успешным, когда: - `IntentRouterV2` стабильно определяет `intent`, `sub_intent`, `keyword_hints`, `path_scope`, `layers`, `conversation_mode` и retrieval constraints; - retrieval реально следует плану, заданному роутером; - LLM получает контекст, собранный из retrieval, а не из побочных обходных механизмов; - ответ не строится без достаточного evidence; - диагностика тестов позволяет понять: - что выбрал router; - что извлек retrieval; - чего не хватило; - почему ответ хороший или плохой. --- ## 3. Что сейчас не делать На текущем этапе не стоит: - встраивать это сразу в UI; - подключать docs retrieval как обязательную часть MVP; - строить полный cross-domain runtime; - пытаться довести сразу весь orchestration runtime; - инвестировать много времени в `C6`, `D5`, `D6`; - лечить legacy `RouterService`, кроме минимально необходимого для совместимости. --- ## 4. Приоритетный план работ ## 4.1. Итерация 1 — зафиксировать канонический test-first контур ### 4.1.1. Принять `IntentRouterV2` как единственную точку истины для тестового MVP Именно `IntentRouterV2` должен определять: - `domain` - `intent` - `sub_intent` - `keyword_hints` - `path_scope` - `layers` - `conversation_mode` - retrieval constraints ### 4.1.2. Зафиксировать минимальный набор сценариев MVP-now Для текущего этапа в качестве канонического набора сценариев следует оставить: - `OPEN_FILE` - `EXPLAIN` - `FIND_TESTS` - `FIND_ENTRYPOINTS` - `GENERAL_QA` как fallback ### 4.1.3. Зафиксировать контракт тестового пайплайна Нужно явно определить структуру следующих объектов: - `RouterResult` - `RetrievalRequest` - `RetrievalResult` - `EvidenceBundle` - `AnswerSynthesisInput` - `DiagnosticsReport` Это нужно, чтобы тесты настраивали устойчивый контракт, а не размытый процесс. --- ## 4.2. Итерация 2 — связать router и retrieval ### 4.2.1. Сделать retrieval adapter под контракт роутера Output `IntentRouterV2` должен напрямую превращаться в retrieval plan. Примеры: - `OPEN_FILE` - path-priority retrieval - `C0_SOURCE_CHUNKS` - `EXPLAIN` - symbol-first retrieval - `C1 + C0 + C2`, optionally `C3` - `FIND_TESTS` - target symbol / path - lightweight `C5-lite` - `FIND_ENTRYPOINTS` - `C3_ENTRYPOINTS` - `GENERAL_QA` - ограниченный broad retrieval без агрессивных допущений ### 4.2.2. Убрать разрыв между индексатором и retrieval runtime Нужна надежная связка: **index data -> retrieval gateway -> normalized retrieval output** Retrieval должен стать нормальной runtime-функцией, а не только наличием индексов и отдельных explain-механизмов. ### 4.2.3. Ввести единый формат retrieval output Нужен единый формат, в который складываются найденные артефакты: - symbols - chunks - relations - entrypoints - tests - diagnostics per layer Это станет основой для `EvidenceBundle`. --- ## 4.3. Итерация 3 — перенести evidence-first логику в общий test pipeline ### 4.3.1. Сделать общий evidence gate Для каждого sub-intent нужно определить minimum evidence. #### `OPEN_FILE` - найден path или очень сильный lexical hit; - есть хотя бы 1–2 relevant chunks. #### `EXPLAIN` - найден целевой symbol или уверенный target fragment; - есть минимальное число code chunks; - есть хотя бы базовые relations или surrounding context. #### `FIND_TESTS` - найден target symbol/file; - найден хотя бы один reliable candidate test. #### `FIND_ENTRYPOINTS` - найден хотя бы один candidate entrypoint. #### `GENERAL_QA` - найден хоть какой-то устойчивый контекст; - иначе ответ должен честно говорить о слабом evidence. ### 4.3.2. Запретить уверенный ответ без опоры Если minimum evidence не выполнен, система должна: - либо честно деградировать; - либо выдать частичный ответ; - либо явно сообщить, каких данных не хватает. --- ## 4.4. Итерация 4 — унифицировать сборку контекста для LLM ### 4.4.1. Ввести единый `EvidenceBundle` LLM должна получать структурированный пакет: - target intent / sub-intent - target symbol / path - relevant code chunks - retrieved relations - entrypoints if any - test evidence if any - retrieval diagnostics summary - evidence sufficiency flags ### 4.4.2. Разделить fast context и deep context #### Fast context Короткая выжимка: - target symbol - file - short relations summary - top evidence #### Deep context Полные chunks, расширенные relations и supporting fragments. ### 4.4.3. Стандартизировать prompt contract Для каждого sub-intent нужен понятный режим ответа: - открыть; - объяснить; - найти тесты; - найти точки входа; - общий fallback. LLM должна понимать: - какой тип ответа нужен; - насколько evidence полон; - можно ли делать выводы; - где надо явно отметить неопределенность. --- ## 4.5. Итерация 5 — довести диагностику до рабочего инструмента настройки ### 4.5.1. Разделить диагностику на 2 уровня #### Уровень 1 — Human-readable summary Коротко: - intent выбран правильно / нет; - target найден / нет; - retrieval успешен / нет; - evidence достаточен / нет; - ответ надежный / частичный / слабый. #### Уровень 2 — Detailed diagnostics Подробно: - router fields; - layer-by-layer retrieval; - empty / failed layers; - ranking decisions; - evidence gate results; - context assembly details. ### 4.5.2. Добавить явные failure reasons Рекомендуемый минимальный набор: - `router_low_confidence` - `target_symbol_not_found` - `path_scope_empty` - `layer_c1_empty` - `layer_c2_empty` - `test_mapping_not_found` - `insufficient_code_evidence` --- ## 5. Как трактовать RAG-план на текущем этапе ## 5.1. Что оставить как целевой план Целевую карту слоев оставляем без изменений: - `C0–C6` - `D0–D6` Она остается правильной как target architecture. ## 5.2. Что считать MVP-now Для текущего этапа обязательны: - `C0_SOURCE_CHUNKS` - `C1_SYMBOL_CATALOG` - `C2_SYMBOL_RELATIONS` - `C3_ENTRYPOINTS` И в облегченном виде: - `C5_TEST_MAPPINGS_LITE` Пока не делать блокирующими: - `C4_EXECUTION_PATHS` - `C6_CODE_FACTS` - весь docs runtime ## 5.3. Что считать следующим этапом После стабилизации code-first MVP: - подключение docs retrieval; - использование D-layers в runtime; - docs-from-code generation; - cross-domain linking. --- ## 6. Как строить тестовый контур ## 6.1. Router tests Проверяют только: - intent - sub_intent - layers - keyword_hints - path_scope - confidence / fallback behavior ## 6.2. Retrieval tests Проверяют: - что retrieval реально использует router output; - какие слои сработали; - что извлечено; - нет ли шума от тестов; - не пропал ли основной код. ## 6.3. Evidence gate tests Проверяют: - достаточен ли evidence; - правильно ли система деградирует; - не отвечает ли уверенно при слабой опоре. ## 6.4. Answer quality tests Проверяют финальный ответ LLM: - есть ли опора в коде; - нет ли лишних догадок; - хватает ли связности; - соответствует ли ответ типу вопроса. --- ## 7. Что скорректировать в README / архитектурном плане В README нужно явно разделить: ### 7.1. Target Architecture Полная целевая система. ### 7.2. MVP-now Изолированный test-first контур для `CODE_QA`, который: - не зависит от UI; - не зависит от full runtime orchestration; - нацелен на доводку `IntentRouterV2` + retrieval + evidence + LLM answers. --- ## 8. Самые важные изменения в реализации прямо сейчас Приоритет: ### P1 Сделать `IntentRouterV2` центром тестового MVP. ### P2 Связать router output с реальным layered retrieval. ### P3 Ввести единый `EvidenceBundle`. ### P4 Сделать общий evidence gate для всего test pipeline. ### P5 Привести диагностику к форме, удобной для настройки через тесты. ### P6 Добавить `C5-lite` для `FIND_TESTS`. --- ## 9. Итоговая формулировка ближайшей цели > Довести до зрелости изолированный code-first test pipeline на базе `IntentRouterV2`, в котором роутер управляет retrieval, retrieval формирует evidence bundle, evidence gate контролирует достаточность опоры, а LLM отвечает строго на основе извлеченного контекста и прозрачной диагностики.