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/`. Ещё действующие требования сохрани в правилах
или спецификациях, данные для проверки поведения продукта — в фикстурах.
Проверка наличия прежней прозы не является таким потребителем поведения.