docs: make project documentation self-contained

This commit is contained in:
2026-09-12 13:09:37 +03:00
parent aa9afc15e4
commit 3a99af1a6e
36 changed files with 1006 additions and 703 deletions
+25 -39
View File
@@ -1,50 +1,36 @@
# Проверка agent context
# Проверка полноты проектных знаний
Это небольшой corpus решений для настройки routing. Выполняйте cases по текущим
AGENTS/router/conventions: сначала определите решение и необходимые источники,
затем сравните с ожиданием. Это не unit tests, повторяющие Markdown, и не новый
verification framework. Для проверки изменения правила нужны activating case,
допустимое исключение и unrelated counterexample.
Эти вопросы помогают оценить, объясняет ли документация систему без доступа
к исходникам. Для каждого вопроса важны правильный ответ, существенное
ограничение и отсутствие ошибочного вывода из похожего сценария.
## Cases
| Задача | Необходимый контекст / ожидаемое решение | Что не должно активироваться без новой границы |
| Вопрос | Объяснение | Существенная граница |
| --- | --- | --- |
| Изменить props и layout existing finance view | Frontend UI; props остаются presentation, derived collection values — у VM | API, Prisma, architecture, tests без risk/test change |
| Исправить только продуктовую строку/Zod message | UI section «Строки и валидация»; locale/validationMessage, mandatory review | Остальные UI sections, HTTP/structure/testing |
| Добавить page-local фильтр без сети | Frontend architecture + UI; оставить у page, если нет independent capability | Новый shared abstraction/feature ради click; API |
| Добавить business summary component | Architecture + UI; business meaning и existing owner определяют placement | shared только из-за reuse; widgets layer |
| Изменить query refetch/error recovery | Frontend data + testing; cached snapshot/current generation и exact feature source | Backend data при неизменном server behavior |
| Добавить новый HTTP response field | Backend HTTP + общий contract workflow + применимые tests; Nest → snapshot → generated TS, affected client data rules | Второй editable OpenAPI в specs; ручной generated TS |
| Добавить account endpoint с новым RPC | Backend HTTP, architecture при новом use case, security/access, integrations, testing; TbankAccessService/TbankClient | Прямой gRPC из controller; доверие accountId без ownership |
| Исправить только Prisma query без HTTP/auth boundary | Backend data, testing при data-risk; existing PrismaService | Весь HTTP/security guide автоматически |
| Атомарно обновить связанные записи | Data + testing; transaction/constraint у инварианта, isolated DB proof | Generic repository; mock как доказательство реальной atomicity |
| Изменить конкурентный refresh | Security + data + testing; ADR 009; один winner, superseded не отзывает его session | Replay-history/grace window без задачи; новый coordinator |
| Изменить DTO validation error | HTTP + testing + exact error source; configured HTTP case проверяет pipe/filter pair | Success по одному direct controller call/Swagger snapshot |
| Изменить gRPC retry/deadline | Integrations + testing; bounded existing client path, controlled upstream failure | Вложенный retry loop; реальная сеть/secret |
| Добавить безопасное scalar log field | Architecture/logging; проверить allowlist и event | Весь auth guide без sensitive boundary; считать message автоматически redacted |
| Изменить только тест | Testing соответствующего repo; source guides только по проверяемой границе | Все production conventions из-за расширения `.ts` |
| Добавить dependency/adapter для одной задачи | Общий выбор/dependencies; existing owner/platform/library прежде нового кода | Новый interface только для hypothetical reuse |
| Исправить опечатку в общей документации | Docs AGENTS и затронутый source | Любые frontend/backend conventions |
| После UI начала появились mutation/schema/new files | Routing повторяется по staged/unstaged/new, новые границы читаются до решения | Продолжать по первоначальному UI-only scope |
| Отсутствует обязательный security source / источники конфликтуют | Остановить зависимое решение, восстановить факт/уточнить задачу | Догадка из соседнего code или жёсткий лимит на число документов |
| Кто подтверждает доступ к брокерскому счёту? | [Обзор](../architecture/system-overview.md#предметная-модель) | Сессия подтверждает пользователя, но идентификатор счёта не доказывает доступ |
| Как меняются финансовые данные при замене token? | [Подключение](../features/tbank-connection.md#граница-финансового-кэша) | Данные прежнего поколения не становятся сохранённым снимком нового подключения |
| Что происходит при конкурентном refresh? | [Authentication](../features/authentication.md), [ADR 009](../adr/009-concurrent-refresh-rotation-policy.md) | Один победитель; заменённый token не отзывает его сессию сам по себе |
| Как восстанавливается интерфейс после ошибки обновления? | [UI resilience](../features/frontend-ui-resilience.md) | Фоновая ошибка отличается от первой загрузки и смены пользователя |
| Чем будущая выплата отличается от дохода? | [События](../features/brokerage-account-upcoming-events.md), [доходы](../features/brokerage-account-income-analytics.md) | Прогноз не подтверждает личное зачисление |
| Можно ли складывать разные валюты или заменить неизвестное нулём? | [Money](../architecture/domain-glossary.md#money) | Точность, валюта и отсутствие значения сохраняются отдельно |
| Откуда рейтинг и доходность облигации? | [Bond detail](../features/bond-detail.md) | Рейтинг эмитента не заменяет рейтинг выпуска; рыночная доходность не равна личному результату |
| Доказывает ли OpenAPI правильность ошибки запроса? | [HTTP API](../architecture/http-api.md#error-contract) | Равенство схем не доказывает полный HTTP-поток |
| Что гарантирует проверка хранения данных? | [Backend](backend-workflow.md#локальная-проверка) | Проверка с подставными ответами не доказывает атомарность реальной базы |
| Как ограничиваются обращения к внешнему сервису? | [T-Bank](../features/tbank-connection.md#конфигурация-и-ограничения) | Повторы, очередь и лимит ограничены; TLS остаётся включённым |
| Защищает ли фильтрация логов любое сообщение? | [ADR 008](../adr/008-pino-backend-logging.md) | Секрет в свободном тексте требует отдельной проверки |
| Есть ли восстановление пароля по письму? | [Ограничения auth](../features/authentication.md#limitations) | Пример будущего сценария не является поставленной возможностью |
## Что измерять
Для startup/working-set измерения перечислите ровно прочитанные файлы/sections,
инструмент подсчёта и unit (символы или tokenizer). Required source нельзя
исключать только ради хорошего числа. Число доступных файлов на диске не является
стоимостью конкретной задачи.
Для реальной first-pass оценки выполните одинаковые задачи с одинаковой моделью,
version/tools и comparable prompts: прежний context, только новые indexes,
затем полный routing. Считайте принятие без substantive correction, iterations,
ошибки placement/contract/security, лишние abstractions и пропущенные sources.
Routing review и зелёные application tests сами по себе такого улучшения не доказывают.
Полезное объяснение позволяет найти ответ, назвать ограничение и связать его
с другими сценариями. Оцениваются неверные выводы о доступе, деньгах, полноте
данных и источниках, а также число уточнений до правильного понимания.
Время поиска и объём чтения имеют смысл только вместе с точностью ответа.
## Изменение правил
Если нужный source не прочитан — исправьте trigger. Если source прочитан, но
не разрешает выбор — уточните decision/safe path/example. Если дефект
детерминирован — используйте подходящий existing test/linter. Не добавляйте
новый always-on paragraph для каждого отдельного случая.
Если знание есть, но его трудно найти, уточняется навигация. Если документ
найден, но не объясняет различие понятий или ограничение, уточняется объяснение.
При конфликте источников сохраняется отметка о ручном решении; догадка не
подменяет установленный факт.