unica-development · git:20261018.16e90cd · 2026-10-18 · sha256 4c37371d09760dea
unica-development git:20261018.16e90cdA
Immutable. This exact content never changes and is served at /api/v1/blob/4c37371d09760dea.
--- name: unica-development description: Разработка самого Unica — исследование, изменение и ревью кода, правил и документации репозитория. Используй для работы над Unica; задачи с конфигурациями 1С через готовый плагин обслуживают его продуктовые скиллы. --- # Разработка Unica Определи результат задачи и затронутое поведение. Проверь состояние Git и работай в границах поручения. Устраняй причину; противоречия между задачей, кодом, тестом и документацией показывай явно. Уже принятое в этой работе решение человека учитывай без повторного согласования. ## Граница поручения Поручение реализовать изменение Unica по умолчанию включает проверки, ревью и доставку через PR в `main` или явно указанную целевую ветку. Прочитай [порядок PR](references/pull-requests.md) в начале такой работы и сопровождай изменение до подтверждённого слияния и проверки результата в целевой ветке. Открытый PR, зелёный CI и постановка в очередь — этапы работы. Явное ограничение человека — только исследование, ревью, локальная правка, draft или запрет публикации — определяет границу поручения. Доступ к GitHub сам по себе её не расширяет. Полный цикл изменения не включает выпуск версии или работу с посторонними PR; выпуск задаётся отдельным поручением. Уже согласованную доставку повторно не согласуй. ## Результат и критерий приёмки задачи Ставь задачу в issue, только когда в ней понятны ожидаемый результат и критерий приёмки. Результат говорит, что изменится для пользователя или агента. Критерий приёмки — раздел «Критерии приёмки» из проверяемых утверждений: какой тест, сценарий приёмочного корпуса, проверка из `check` правила, живой прогон или вывод reviewer-а докажут выполнение. Для дефекта критерием может служить воспроизведение, которое после исправления даёт ожидаемое поведение. Дефект MCP в рабочем сценарии принимается вместе со сценарием приёмочного корпуса, если его маршрут выражается классом ответа корпуса. Сценарий и манифест шагов оформляй по [CONTRIBUTING.md](../../../CONTRIBUTING.md#приёмочные-сценарии-поверхности). Перед тем как взять задачу в работу, убедись, что можешь назвать результат и проверку, которая его докажет, без догадок о намерении автора. Если результат и проверка очевидны из поручения, назови их одной фразой в плане. Критерий, уже согласованный в issue или в этой работе, повторно не согласуй. Если результат или критерий неясны либо требуют продуктового выбора, до реализации задай человеку вопрос с вариантами, их ценой и рекомендацией. Расхождение с принятым правилом разбирай по [AGENTS.md](../../../AGENTS.md#противоречие-принятому-правилу). Согласованный критерий зафиксируй в описании PR. Место уточнения в issue выбирай по [правилу исходного текста](#исходный-текст-пользовательского-issue). ## Исходный текст пользовательского issue Перед изменением issue прочитай его автора, заголовок и описание. Установи, принадлежит ли задача владельцу поручения или внешнему пользователю. Права записи, роль администратора и текущий аккаунт GitHub сами по себе не доказывают принадлежность. Если она не установлена, считай issue внешним. Исходные заголовок и описание issue внешнего пользователя не редактируй. Не дописывай туда свои критерии, не заменяй формулировки и не приписывай автору другой объём работы. Сохранение оригинала в `details` или истории редактирования не разрешает его замену. Комментарии автора также сохраняй. Поручение «обнови задачу, план или критерии» не отменяет этот порядок. Разбор, уточнения и критерии сопровождающего размещай в отдельном комментарии или задаче владельца, явно отделяя их от исходного запроса. Если результат или объём существенно меняются, оформляй новое issue владельца со ссылкой на исходное внешнее. Issue владельца и задачи, созданные агентом по его поручению, можно перерабатывать в пределах поручения. Этот порядок не даёт разрешения на публикацию: создание issue и отправка комментария должны входить в поручение человека. В плане и PR различай исходный пользовательский результат и расширенную работу владельца. Их критерии принимаются отдельно; ссылка на новую задачу и её выполнение сами по себе не закрывают исходный репорт. Перед закрытием или добавлением закрывающей ссылки в PR проверь исходный критерий приёмки. Если агент уже подменил чужой текст, восстанавливай его по поручению человека. Сначала сравни текущее issue с собственной заменой: последующие чужие правки нельзя затереть старым снимком. Перенеси свою работу отдельно и проверь, что исходные заголовок и описание восстановлены точно. При ревью изменений трекера сверяй автора и сохранность пользовательского текста. ## Нужный контекст Предпосылки задачи сверяй после `git fetch` с `origin/main` или названной релизной веткой, а при правках по ревью открытого PR — с его head-веткой. Локальные ветки могут отставать, а описание задачи — относиться к другой ревизии. При продолжении долгой работы прочитай связанный issue и нужные PR. Локальные материалы той же задачи могут помочь восстановить ход работы; сверяй их с текущим кодом и решениями. Историю ищи через Git по конкретному вопросу. Когда выбираешь исходники для изменения, используй [карту кода](references/code-map.md). Читай нужные области карты вместе: публичный инструмент может одновременно менять XML и состояние кеша. До выбора решения найди применимые `arch/rules/` по изменяемому поведению, границе ответственности, путям исходников и тестов; проверь затронутые смежные области. Прочитай сами записи и тела тестов из `check`. Совпадение путей помогает найти правило, но не исчерпывает его область действия. Отсутствие автоматической подгрузки не отменяет принятое обязательство; отсутствие записи не разрешает менять существующую гарантию или удалять её проверку. Дочитывай материалы, когда возникает соответствующая работа: | Работа | Что открыть | | --- | --- | | Предложение, изменение или отмена правила; разбор его расхождения с кодом или тестом | [unica-rules](../unica-rules/SKILL.md) | | Выбор, написание, запуск или разбор проверки | [unica-testing](../unica-testing/SKILL.md) | | Текст для человека, включая правило, комментарий, сайт, commit или PR | [unica-writing](../unica-writing/SKILL.md) | | Выпуск версии или разбор его состояния | [unica-release](../unica-release/SKILL.md) | | Порученная реализация, подготовка PR, правки по ревью, push или слияние | [Порядок PR](references/pull-requests.md) | | Обновление встроенных инструментов, заимствованных материалов, baseline или снимка донора | [Сопровождение апстримов](references/upstream-maintenance.md) | | Настройка окружения, Inspector, LSP или отчёт Allure | Нужный раздел [CONTRIBUTING.md](../../../CONTRIBUTING.md) | | Подготовка внешнего общения | [CODE_OF_CONDUCT.md](../../../CODE_OF_CONDUCT.md) | Общие `build-mcp-server`, `build-mcp-app` и `build-mcpb` выбирай по задаче контракта, UI или упаковки. Обычная правка Unica не требует всего комплекта; установка описана в CONTRIBUTING. Навыки `plugins/unica/skills/` описывают работу с 1С через продукт: читай только затронутые. Обзор маршрутов в `AI_DEV.md` нужен для настройки процесса, не для каждой правки. При повторяющемся пояснении или ошибке сначала проверь существующий навык и маршрут к нему. Уточняй каноническую инструкцию, когда это помогает выбирать верное действие; не добавляй по подсказке на каждый инцидент. Процедуры сопровождай в навыках, принятие или смену гарантии продукта — по unica-rules. Общую справку по командам и конфигурацию существующих линтеров в инструкции не копируй. Подключай необходимые материалы по ходу задачи. Наличие ссылки на файл не означает, что его содержимое уже прочитано. ## Класс задачи и независимая проверка Перед правкой назови класс и достаточные проверки. Оценивай последствия, а не расширение файла или число строк. Изменение теста классифицируй по тому, что он начинает или перестаёт проверять. При расширении области пересмотри класс; требования нескольких подходящих классов объединяются. | Класс | Что меняется | Проверки | | --- | --- | --- | | Косметика | Только оформление или опечатки; смысл и обязательства сохраняются | Самопроверка diff | | Локальное поведение | Реализация в существующих контрактах и ответственности | Проверки поведения и независимый reviewer | | Правила и требования | Обязанности агента, процесс или критерии приёмки, в том числе в Markdown | Скептик до введения правил и независимый reviewer результата | | Архитектура и публичные контракты | Совместимость, публичная поверхность, состояние, границы слоёв, упаковка или ответственность нескольких потребителей | Скептик до реализации, проверки поведения, reviewer, сверка правил и спецификаций | Скептик проверяет замысел. Передай отдельному субагенту исходную задачу, вариант решения, ограничения и свидетельства. Он ищет подмену задачи, неподтверждённые допущения, второго владельца ответственности, лишние преобразования, противоречия и пропущенные сценарии отказа или потребителей. Для возражения нужны основание, последствия и способ проверки. Скептик не редактирует проверяемые файлы и не выбирает архитектуру за человека. Отсутствие подтверждённых замечаний допустимо. Reviewer проверяет результат после реализации и необходимых проверок. Передай текущий diff, исходную задачу, применимые контракты и результаты проверок агенту, который не писал реализацию. Он сверяет итог с задачей, разбирает замечания скептика и проверяет обещанные удаления. Зелёный CI не заменяет эту сверку. После существенной правки повтори затронутую проверку; после смены замысла вернись к скептику. Скептик и reviewer — отдельные проходы. Explorer и tester нужны, когда есть самостоятельная подзадача; отдельный агент на каждую команду не нужен. Главный агент сводит выводы, проверяет итог, выполняет staging и commit. Если субагенты недоступны, выполни те же проходы сам и явно назови отсутствие независимого ревью. Источник идеи классификации и независимой проверки — [AGENTS.md v8-runner-rust](https://github.com/IngvarConsulting/v8-runner-rust/blob/ee3a6ee195524fec6f18d8b5838b90e7e5872e5d/AGENTS.md). ## Как разбирать замечания Отделяй тип замечания от важности: | Тип | Основание | | --- | --- | | Дефект | Нарушенный контракт и воспроизведение либо конкретный контрпример | | Риск | Возможный отказ, последствия и ещё не проверенные предпосылки | | Вопрос | Недостающий факт или решение и зависящее от него действие | | Предпочтение | Альтернатива без доказанного нарушения | Критическая важность — потеря данных, нарушение безопасности или невозможность восстановления; высокая — нарушение основного сценария или обязательного контракта; обычная — ограниченное влияние. Важность риска условна и не доказывает дефект. Для существенного замечания зафиксируй проверяемый исход в обсуждении задачи: исправлено с проверкой; опровергнуто свидетельством; риск принят человеком со ссылкой на решение; вынесено за границу задачи с обоснованием происхождения и местом дальнейшего учёта. Для предпочтения объясни выбор. Не заводи для этого отдельный реестр или отчёт в Git. Дефект в области задачи блокирует завершение. Для критического или высокого риска проверь предпосылки до зависимых изменений; неснятый риск принимает человек. Вопрос задерживает только зависимое действие. Спор, разрешимый кодом или тестом, разбери сам. Противоречие принятому правилу разрешается по [AGENTS.md](../../../AGENTS.md#противоречие-принятому-правилу). Если устраняешь дублирование или повторяющийся дефект, назови причину, единственного владельца ответственности и проверку возвращения проблемы, включая появление под другим именем. Выбор проверки и воспроизведение до исправления описаны в unica-testing. Происхождение дефекта из ревью определяет, в каком PR его исправлять; применяй порядок PR по ссылке выше. ## Изменение продукта Сохраняй действующие ограничения до согласованной смены контракта: один публичный MCP-сервер `unica`, инструменты `unica.*`, один каталог плагина для Codex, Claude и ZCode. Манифесты имеют одну версию, `.mcp.json` не зависит от хоста. Новые необязательные ключи проверяй на самом старом поддерживаемом клиенте: неизвестный ключ может сорвать загрузку. Продуктовые скиллы направляют в нативные `unica.*`; не возвращай прямой запуск упакованных скриптов там, где есть инструмент, кроме описанных утилитарных исключений. Изменение публичной поверхности, маршрутизации, упаковки или слоёв требует проверок затронутых потребителей. Меняя состав инструментов, обновляй `docs/tool-surface.md` его генератором. При изменении продуктовых скиллов сохраняй предпросмотр перед разрушительными, инкрементальными, частичными и относящимися к внешнему набору исходников операциями. Используй актуальную схему вызова и её связь preview/apply. Примеры должны исполняться над детерминированной фикстурой или управляемым локальным поставщиком: чтение без записи, мутация через preview. Разбор JSON и проверка грамматики адреса сами по себе не доказывают успешный вызов. Поставляемая справка должна быть достижима из нужного скилла напрямую или через ссылки в справке; новое содержимое не добавляй в список недостижимого долга теста. Применяй `tests/ci/test_reference_reachability.py` и проверки затронутых примеров, не создавай тесты на формулировки инструкций. Перед добавлением кода отказа сравни его смысл с существующим словарём. Используй имеющийся код, если он передаёт нужную причину и продолжение. Новый код нужен для различимой вызывающим причины отказа или требуемого действия. Другое место возникновения той же ошибки само по себе нового кода не требует. Уточнённый отказ строй через `RefusalDetail`, `ViewError::detailed` и `DomainResult::canonical_rejection_detailed`. Прямые упоминания `RefusalCode::ProviderUnavailable` в production-коде ограничивает `tests/ci/test_refusal_detail_ratchet.py`: новое упоминание роняет проверку, а после сокращения опусти потолок в том же изменении. Запусти этот страж при правке отказов. Для проверки MCP используй бинарь текущего checkout с нужным cwd и отдельным состоянием демона. Читай схему нужного инструмента и результат сценария; `tools/list` нужен при проверке состава поверхности и выбранного профиля. Успех установленного плагина не доказывает работу этой сборки. Внутренние движки продукта не подключай как дополнительные публичные MCP-серверы агента. При передаче или сжатии контекста сохраняй задачу, ссылки на нужные правила, принятые решения и оставшийся шаг. Перед зависимой работой восстанови потерянные сведения и перечитай правило, если оно могло измениться. При изменении платформенного стража не добавляй исключения для отдельных файлов: разрешённые области определяются структурой платформенных каталогов. Проверяй распознавание запрещённого кода на примерах и текущем репозитории; зелёная проверка репозитория с новым исключением сама по себе не доказывает сохранение границы. ## Материалы работы Планы сессии, черновики решений и журналы выполнения храните в контексте агента. Если нужен файл, используйте игнорируемый каталог `.session-temp/`, например `.session-temp/plans/`. Сюда же относятся служебные таблицы соответствий старых и новых записей, списки переноса и отчёты разбора документов. Они не коммитятся независимо от формата и названия. Это переопределяет места сохранения в скиллах `brainstorming` и `writing-plans`. Не используйте `git add -f` для игнорируемых путей. Долгую работу между сессиями ведите через тематический или зонтичный issue владельца: цель, согласованные решения, оставшаяся работа и ссылки на PR. Исходный внешний репорт сохраняйте по правилу выше. Поддерживайте актуальное состояние задачи владельца; последовательность локальных шагов остаётся в сессии. Согласованную гарантию продукта отражайте в действующем правиле или спецификации: закрытый issue не заменяет её описание. В Git сохраняйте материалы, нужные продукту и его поддержке после завершения задачи: код, содержательные тесты, фикстуры, правила продукта, спецификации, документацию и действующие инструкции разработки. Таблица преобразования данных, которую использует продукт или проверка его поведения, имеет такое назначение. Таблица переноса старых документов остаётся служебной; переименование её в фикстуру или добавление теста на её наличие этого не меняет. Завершённые планы и заменённые документы не переносите в архивные каталоги. Прежние закоммиченные версии доступны через Git; ещё не сохранённые важные решения зафиксируйте в issue/PR или действующем документе. Формат правил продукта описан в `arch/README.md`. При разборе старых решений, архитектурных записей и планов сначала оцени их актуальность: существует ли исходная проблема, не заменено ли решение более новым, есть ли полезная гарантия помимо деталей реализации. Сверяй с действующими правилами, решениями человека, кодом и тестами. Дата или статус принятия старой записи сами по себе не требуют возвращать её ограничения. Не меняй современный продукт ради соответствия архиву. Неясное противоречие покажи человеку с рекомендацией; код сам по себе не отменяет действующее согласованное правило. Актуальную гарантию перенеси в правило, порядок работы — в подходящий скилл, инструкцию пользователю — в профильную документацию. Используй существующее место, если оно уже описывает нужное. Устаревшее и дубли удаляй без замены. Разобранный документ удаляй; не дописывай его как хранилище остатков. Вопросы разбора держи в сессии или `.session-temp/`, долгую работу — в issue. Отсутствие теста у старого обещания не повод автоматически начинать его реализацию: сначала установи, нужно ли сохранять само обещание. Перед удалением старого документа проверь ссылки и потребителей, включая `rg <path> tests/ scripts/`. Ещё действующие требования сохрани в правилах или спецификациях, данные для проверки поведения продукта — в фикстурах. Проверка наличия прежней прозы не является таким потребителем поведения.