Files
homebox_lens/agent_promts/knowledge_base/ai_friendly_logging.xml
2025-09-08 16:23:03 +03:00

52 lines
4.2 KiB
XML
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

<!-- =================================================================== -->
<!-- ПРАВИЛО 8: Структурированное логирование для AI -->
<!-- =================================================================== -->
<Rule id="AIFriendlyLogging" enforcement="strict">
<Description>
Каждая значимая операция, проверка контракта или изменение состояния ДОЛЖНЫ
сопровождаться структурированной записью в лог для обеспечения полной
трассируемости и отлаживаемости.
</Description>
<Rationale>
Структурированные логи превращают поток выполнения программы из "черного ящика"
в машиночитаемый и анализируемый артефакт, связывая рантайм-поведение
со статическим кодом через якоря.
</Rationale>
<Definition type="multi_check">
<!--
Контейнер <Checks> позволяет определить несколько независимых проверок,
которые должны быть применены к коду в рамках одного правила.
-->
<Checks>
<!--
ПРОВЕРКА 1: Все вызовы логгера ДОЛЖНЫ соответствовать строгому формату.
Это позитивная проверка: каждая строка, содержащая 'logger.*()', должна совпадать с этим шаблоном.
-->
<Check type="positive_regex_on_match" trigger="logger\.(debug|info|warn|error)\s*\(">
<Description>Все вызовы логгера должны соответствовать формату [LEVEL][ANCHOR][STATE]...</Description>
<Pattern><![CDATA[logger\.(debug|info|warn|error)\s*\(\s*"\[(DEBUG|INFO|WARN|ERROR)\]\[[A-Z_]+\]\[[a-z_]+\][^"]*"\s*(,.*)?\)]]></Pattern>
<FailureMessage>Нарушен структурный формат лога. Ожидается: [LEVEL][ANCHOR][STATE] message.</FailureMessage>
</Check>
<!--
ПРОВЕРКА 2: В строках лога НЕ ДОЛЖНО быть строковой интерполяции.
Это негативная проверка: если найдена строка, содержащая 'logger.*("$...")', это ошибка.
-->
<Check type="negative_regex">
<Description>Данные должны передаваться как аргументы, а не через строковую интерполяцию (запрещено использовать '$' в строке лога).</Description>
<Pattern><![CDATA[logger\.(debug|info|warn|error)\s*\(\s*".*\$.*"]]></Pattern>
<FailureMessage>Обнаружена строковая интерполяция ('$') в сообщении лога. Передавайте данные как аргументы.</FailureMessage>
</Check>
<!--
ПРОВЕРКА 3: В слое Domain НЕ ДОЛЖНО быть вызовов логгера.
Это контекстная негативная проверка, которая применяется только к файлам в определенной директории.
-->
<Check type="negative_regex_in_path" path_contains="/domain/">
<Description>Прямые вызовы логгера (logger.*, Timber.*) запрещены в модуле :domain.</Description>
<Pattern><![CDATA[(logger|Timber)\.(debug|info|warn|error)]]></Pattern>
<FailureMessage>Обнаружен прямой вызов логгера в модуле :domain, что нарушает принципы чистой архитектуры.</FailureMessage>
</Check>
</Checks>
</Definition>
</Rule>