Restrictions: качество и архитектура
Редактируемые лимиты, POODR, Clean Code и свои Markdown-инструкции.

В этой главе · 8 разделов
Что задают Restrictions#
Project → Restrictions — правила качества для одного Mesh: числовые проверки изменений и рекомендации агенту о том, как писать код. Здесь можно отредактировать пороги, выбрать стартовый пресет, указать желательную архитектуру и написать собственные инструкции с форматированием.
| Настройка | Что происходит | Что считается подтверждением |
|---|---|---|
| Строки файла, строки функции, размер файла | Компьютер проверяет поддерживаемые операции записи; при превышении применяется Ask или Deny | Решение конкретной проверки и её результат |
| Принципы Clean Code / POODR | Рекомендации добавляются к сообщениям агенту в выбранном Project | Компьютер получил политику; соблюдение проверяется по результату работы |
| Архитектура | Предпочтение для будущих изменений, с сохранением существующих границ | Проверка diff, зависимостей и тестов |
| Markdown | Ваш текст сохраняется и передаётся агенту вместе с запросом | Полученная редакция политики и последующий результат |
Получение настроек не доказывает, что все рекомендации выполнены. Restrictions не заменяют Governance, не предоставляют новые разрешения и не снимают запреты компьютера или провайдера.
Как изменить числа#
- Откройте Mesh, выберите нужный Project и перейдите в Restrictions.
- В Apply to проверьте область настройки. Для первых опытов оставьте This Mesh.
- В Computer checks введите число прямо в поле Maximum lines или Maximum bytes. Для открытия полной формы нажмите название проверки со значком ползунков.
- Включите нужную проверку переключателем. Отредактированное значение сохраняется при выключении и повторном включении в текущей форме.
- В полной форме выберите Ask или Deny, укажите при необходимости относительные пути и сохраните правило.
- Нажмите отдельную кнопку Save restrictions на основной странице. Изменения формы ещё не являются применённой политикой.
| Проверка | Стартовое значение Balanced | Единица | При превышении |
|---|---|---|---|
| File line limit | 300 | Физические строки файла | Deny |
| Function line limit | 100 | Строки распознанного тела функции | Deny |
| File size limit | 65 536 | Байты UTF-8 содержимого | Ask |
Допустимы целые положительные значения до 1 000 000. Ноль, отрицательные значения, пустой активный лимит и произвольный текст блокируют сохранение. Размер в байтах и число видимых символов различаются, особенно для кириллицы и emoji.
File paths принимает до 16 относительных путей или glob, по одному на строку. Пустой список означает все подходящие файлы. Пример: src/**/*.swift и Tests/**. Абсолютные пути и переход .. не подходят. Добавленная пользовательская проверка выбирает один из поддерживаемых алгоритмов; одно название «идеальный код» не создаёт проверку качества.
- Введите число в поле; переключатель включает проверку.
- Название открывает Ask/Deny и относительные пути.
Пресеты: Balanced, POODR inspired, Clean Code#
Пресет — редактируемая отправная точка. После выбора приложение запрашивает подтверждение замены рекомендованных лимитов и принципов. Собственные проверки, архитектура и Markdown остаются в форме. Перед отправкой просмотрите изменения; кнопка пресета сама по себе не сохраняет политику на Mac.
### Balanced
Три лимита из таблицы: 300 строк файла, 100 строк функции и 65 536 байт. Дополнительные принципы и числовые цели дизайна очищаются. Это удобный базовый вариант, который затем можно настроить под репозиторий.
### POODR inspired
Пресет вдохновлён подходом Сэнди Мец к небольшим обязанностям, ясным интерфейсам, композиции и проверке поведения. POODR — Practical Object-Oriented Design; пресет GrantTap не является встроенной официальной сертификацией или универсальным набором обязательных норм книги.
В GrantTap он устанавливает функцию до 5 строк как числовую проверку, а 100 строк класса/типа и 4 параметра функции — как редактируемые advisory цели агенту. Лимит файла остаётся 300 строк; размер — 65 536 байт. Все значения можно пересмотреть.
Принципы:
- одна ответственность и понятная причина изменения модуля;
- небольшие явные публичные интерфейсы;
- композиция там, где она уменьшает связанность;
- независимая предметная логика и границы инфраструктуры;
- тесты наблюдаемого поведения, состояния и ошибок.
Принципы применимы к разным языкам, включая Ruby, Swift, TypeScript и Rust. Целесообразность конкретного порога зависит от языка и существующего проекта. Не дробите связную функцию только ради числа и не выдавайте рекомендацию по классам за parser-enforced запрет.
### Clean Code
Сохраняет предел файла 300 строк, выбирает 30 строк функции и 65 536 байт. Включает все восемь рекомендаций: предыдущие пять, ясные имена и простой поток управления, явную обработку ошибок, отсутствие дублированных знаний без преждевременных абстракций. Цели по классам и параметрам пусты, пока вы не зададите их сами.
В Agent guidance → Clean code principles каждый пункт можно включить отдельно. Пресеты не меняют режим одобрения, native sandbox и ограничения доступа.
Предпочтительная архитектура#
Откройте Agent guidance → Preferred architecture. По умолчанию выбрано Keep existing architecture: сохранять текущие границы. Другие варианты:
| Вариант | Что просим у агента |
|---|---|
| Feature modules | Поведение, публичная точка входа и локальные тесты принадлежат функциональному модулю |
| Layered architecture | Явные слои представления, приложения, предметной логики и инфраструктуры |
| Clean Architecture | Зависимости направлены к независимым сущностям и сценариям |
| Hexagonal · ports and adapters | Предметная логика общается с внешним миром через порты и адаптеры |
| Modular monolith | Бизнес-модули с явными границами внутри одного приложения |
| MVVM · presentation | Проверяемое состояние представления, с логикой вне View |
Это одно предпочтение в контексте проекта, а не приказ перестроить весь репозиторий. Применяйте подход постепенно и проверяйте его уместность. Например, MVVM для SwiftUI не определяет архитектуру всей серверной части.
В Design targets · optional можно задать классы/типы и число параметров. Оставьте поле пустым, чтобы не отправлять такую цель. Допустимы 1–1 000 000 строк и 1–1 000 параметров соответственно. Эти два поля являются рекомендациями агенту.
- Принципы, архитектура и цели — рекомендации агенту.
- Классы и параметры не выдаются за parser-enforced проверки.
Свои инструкции с форматированием#
В Agent guidance → Project instructions · Markdown доступны вкладки Edit и Preview. Используйте заголовки, списки, жирный текст, code и блоки кода. Кнопки H, B, • и </> добавляют заготовку в конец текста; затем её можно отредактировать. Preview показывает содержимое тем же нативным renderer, что и чат.
Безопасный пример для GrantTap Lab:
## Границы учебного проекта
- Используй только локальные fixture-данные.
- Сохраняй публичный интерфейс Cart.
- Перед исправлением воспроизведи ошибку тестом.
- Обрабатывай ошибки явно; не скрывай их пустым catch.
### Архитектура
Сохраняй feature modules. Не добавляй новый слой без необходимости
в текущей задаче. Сначала покажи причину и затрагиваемые зависимости.
Доступно 12 000 байт UTF-8, счётчик находится под редактором. Текст сохраняется без потери переносов и Markdown. Встроенный preview не исполняет код и не загружает удалённые изображения. Не помещайте туда пароли, ключи и другие секреты: рекомендации получает coding agent.
Вернитесь на основную страницу и нажмите Save restrictions. Сам выход из редактора не отправляет изменения на компьютер. Настройки остаются инструкциями Project; GrantTap не переписывает AGENTS.md, CLAUDE.md или глобальную конфигурацию coding app.
- Preview сохраняет заголовки, список и выделение.
- Для отправки вернитесь к Save restrictions и дождитесь ответа компьютера.
Область, доставка и подтверждение#
| Apply to | Поведение |
|---|---|
| This Mesh | Настройки относятся к выбранному Project Mesh |
| Mesh and repository | Компьютер дополнительно экспортирует .granttap/restrictions.json в привязанные checkout |
| Sync from repository | Компьютер читает GrantTap-файл репозитория; поля на телефоне недоступны для редактирования |
Экспорт содержит проверки и рекомендации. Он не создаёт commit, не выполняет push и не настраивает pipeline автоматически. Прежде чем коммитить файл, проверьте diff и не добавляйте приватные данные. В режиме Sync нужен точно определённый repository binding; отказ следует исправить, а не обходить выбором другого проекта.
Save restrictions отправляет новую редакцию канонической Project policy существующим привязанным компьютерам. Для недоступного компьютера запрос остаётся в сохраняемой очереди. Пока нет его ответа, показывается ожидание acknowledgement. При несовместимом Mac, конфликте редакций или отказе Engine проверьте сообщение об ошибке и Governance, Engine и Health.
После подтверждения рекомендации добавляются к следующему сообщению или новой Task, запущенной из GrantTap в этом Project. Текст запроса и его идентичность сохраняются. Для новой Task компьютер сначала проверяет принадлежность папки проекту. Другой Project и общий чат без Project не получают эти инструкции.
Уже работающий агент не получает ретроактивную команду перечитать настройки. Сообщения, отправленные напрямую из стороннего coding app, и сторонние CI не обещают такую же автоматическую вставку. Подтверждение хранения политики, получение агентом конкретного запроса и выполнение рекомендаций — разные факты. Подробнее о квитанциях — доставка, о проверяемых утверждениях — доказательства.
Проверить на учебном проекте#
- Откройте отдельный GrantTap Lab, выберите This Mesh и убедитесь, что связан нужный тестовый Mac.
- Измените File line limit на 42, включите его, выключите и снова включите. В поле должно остаться 42. Не включайте этот экспериментальный лимит в рабочем репозитории.
- Выберите POODR inspired, подтвердите локальную замену и проверьте 5 строк функции, 100 строк типа и 4 параметра. Отредактируйте числа под практикум.
- Выберите Feature modules, добавьте приведённый Markdown и проверьте Preview. Сохраните Restrictions и дождитесь подтверждения компьютера.
- Попросите агента проверить локальный fixture с этими соглашениями. Убедитесь по результату, что сохранён интерфейс, тест воспроизводит поведение и нет внешних операций. Это отдельная явная учебная задача, а не автоматический prompt от формы.
- Для проверки измеримого лимита используйте небольшой временный файл в Lab. При превышении ожидайте Deny либо Ask согласно правилу; по неизмеренной форме функции не считайте отсутствие результата доказательством clean.
- При repository export просмотрите
.granttap/restrictions.json. Командаgranttap restrictions checkпроверяет поддерживаемые числовые правила. Рекомендации обозначены как advisory и не становятся автоматически проверенными. Выход 0 означает отсутствие Deny: сообщения Ask выводятся отдельно и требуют разбора; по одному exit code нельзя объявлять всё проверенным. - Откройте другой Project: его настройки должны остаться прежними. Верните разумные учебные значения или отключите экспериментальную проверку и сохраните новую редакцию.
Если не применяется#
| Симптом | Что проверить |
|---|---|
| Save недоступна | Положительные числа, поддерживаемые проверки, размер Markdown, готовность Project policy, отсутствие ещё не завершённой отправки |
| Долго ждёт acknowledgement | Правильный Mac, Live-соединение, очередь и доступность Engine; не делайте вывод Applied по одному нажатию |
| Поля серые | Выбран Sync from repository; изменять нужно файл привязанного репозитория |
| Агент не учёл пожелание | Новый ли это запрос из GrantTap, совпадает ли Project, есть ли подтверждённая политика; затем проверьте ограничения и приоритеты инструкций провайдера |
| Ruby получил Ask | Тело функции не было надёжно измерено текущим checker; нужна проверка, а не ложное разрешение |
| CI ничего не проверил | Экспорт не подключает pipeline; вызовите поддерживаемую команду из собственного CI и сохраните её результат |
Для технического запрета инструмента используйте Governance. Для архитектурного решения с источником и историей — Knowledge. Для переменных и секретов — настройки проекта.