Это мандат — это постоянное указание того, над чем должен работать Coroid, когда никто не даёт прямых указаний: цель, охватываемые проекты, бюджет на неделю или месяц и момент окончания работы. Запросы, поступающие из ваших систем — рабочий вход API, автоматизации, интеграции, мониторинг — принимаются в рамках активных мандатов. Запросы от людей — нет; см. Какие запросы регулируются мандатом.
Мандат определяет, какая работа может начаться. Он не позволяет Coroid объединять изменения или разворачивать их. См. Что решает Coroid, а что остаётся за вами.
Когда имеет смысл использовать мандат
Составьте мандат, когда работа поступает в Coroid без запросов на каждый этап, и вы хотите заранее определить объём возможной работы:
- система отслеживания ошибок или инструмент мониторинга, который передаёт инциденты через рабочий вход API;
- сообщения от GitHub или из Slack, Telegram и Jira, которые Оценка задачи автоматизация превращается в запросы;
- сервис поддержки или обратной связи, передающий отзывы клиентов;
- сканер или задача CI, формирующая отчёты по одному за раз.
Без мандата такие запросы обрабатываются как любые другие: как только они проходят проверку, они попадают в очередь на те же слоты агентов, что и запросы от людей, без собственного бюджета. Насыщенная уведомлениями неделя может заблокировать очередь. Мандат ограничивает их: какие проекты они могут затрагивать, сколько средств можно потратить в неделю или месяц и сколько слотов агентов они могут занимать одновременно.
Как проходит обработка запроса
Поступает без участия человека
- Оповещение из трекера ошибок, отправленное в систему приёма задач API вместе с сигналом.
- Задача в GitHub, обработанная автоматизированным процессом квалификации.
- Отчёт клиента из вашей службы поддержки, переданный в систему приёма задач API.
Запрос, созданный кем-то в New Work, также проходит квалификацию, но на него не распространяется действие мандата.
Квалификация
Очистка данных, проверка текущей версии релиза, устранение дубликатов, верификация, оценка и маршрутизация.
Приём
Обеспечьте отсутствие необработанных исключений в маршрутах API
- Проекты
- Счёт API
- Бюджет
- 100 долларов США и 10 часов работы агентов в неделю
- Слоты мандата
- 1 из 2 слотов занят, половина из 4 слотов для агентов используется
- Уже ли обрабатывается тот же инцидент в каком-либо проекте?
- Выявила ли оценка, что такое поведение предусмотрено?
- Есть ли свободный слот в рамках выделенной доли мандата?
- Остался ли бюджет на эту неделю?
- Можно ли измерить результат, или мандат допускает задачи, которые нельзя измерить?
Задача создаётся со слотом, зарезервированным для неё, и с учётом части недельного бюджета.
Задача привязана к уже существующей работе. Новая задача не создаётся.
Такое поведение предусмотрено. Новая задача не создаётся.
Проверка производится каждую минуту. Задача принимается к исполнению, когда освобождается слот или бюджет, либо отменяется после полной недели ожидания.
После приёма
Задача
Техническое задание, план и код — как и в любой другой задаче.
Верификация
Тесты, проверки качества, QA и ревью.
Пул-реквест
Размещён в отдельной ветке, предназначенной для слияния с вашей веткой.
Контракт результата
Новых событий по этому инциденту не будет в течение 24 часов после 500 запросов по соответствующим маршрутам.
Возьмём мандат из примера, созданный для проекта Выставление счетов API. Его система отслеживания ошибок генерирует предупреждение о новом исключении при экспорте счётов. Вебхук правила предупреждения через небольшой промежуточный модуль передаёт его в рабочий вход API, указывая ID инцидента из системы отслеживания в качестве отпечатка сигнала, затронутый маршрут и 500 запросов как показатель воздействия, требующий подтверждения исправления.
- Оценка выполняется так же, как для любого запроса: удаляются секретные данные и персональная информация, проверяется текущий релиз, ищутся дубликаты, верифицируется отчёт и оценивается ситуация.
- Принятие находит мандат, соответствующий проекту Выставление счетов API, и проверяет по порядку: не обрабатывается ли уже такая же проблема здесь или в другом проекте; не является ли поведение ожидаемым согласно оценке; свободен ли один из двух слотов мандата; есть ли место в недельном бюджете; и можно ли измерить результат.
- Принятый, запрос становится задачей с выделенным слотом и частью недельного бюджета. Он проходит стандартный путь — спецификация, код, тесты, проверки качества, рецензирование — и в итоге превращается в pull request.
- Человек объединяет его. Результат задачи контракт результата фиксирует, чего должно достичь это объединение: отсутствие новых событий по этой проблеме в течение 24 часов после 500 запросов по данному маршруту.
Если то же предупреждение сработает снова, второй запрос уже решён и привязан к первому. Если из-за неудачного деплоя возникнет сразу шесть новых проблем, одновременно под мандатом будет работать не более двух; остальные будут отложено, затем принимаются по одной по мере освобождения слотов в мандате. Два других слота агентов остаются свободными для задач, которые ваша команда добавляет в раздел «Новая работа».
Примеры мандатов
Предотвращение накопления ошибок в продакшене
Сервисы API отправляют информацию об ошибках в трекер ошибок, а их исправление происходит тогда, когда у кого-то появляется время.
| Настройка | Значение |
|---|---|
| Тип | Текущий |
| Цель | Обеспечение отсутствия необработанных исключений в маршрутах сервиса Выставление счетов API |
| Проекты | Сервис Выставление счетов API |
| Бюджет | 100 долларов США и 10 часов работы агентов в неделю |
| Принимать задачи, результат которых нельзя измерить | Выкл. |
| Дата рецензирования | Через четыре недели |
Запросы поступают из трекера ошибок через модуль приема задач API, каждый из них содержит
signal — указывается идентификатор задачи в трекере, маршруты и количество запросов. Каждая задача превращается максимум в одну единицу работы, независимо от частоты её возникновения. Максимальная стоимость плохой недели — 100 долларов США. Уведомление без указания маршрутов будет отложено, а не начнет выполнение, так как невозможно определить, сработало ли исправление; укажите маршруты или включите Принимать
задачи, результат которых нельзя измерить.
Работа над ошибками, зафиксированными в GitHub
Пользователи создают задачи в репозитории вашего веб-приложения быстрее, чем кто-либо успевает их обработать.
| Настройка | Значение |
|---|---|
| Тип | Текущий |
| Цель | Исправление ошибок, сообщенных пользователями в веб-приложении |
| Проекты | Веб-приложение |
| Бюджет | 200 долларов США и 30 часов работы агентов в месяц |
| Принимать задачи, результат которых невозможно измерить | Включено |
Одна Проверять задачи Автоматизация в новых файлах GitHub обрабатывает каждую задачу. Процедура проверки предотвращает дублирование задач, выявляет ошибки, уже исправленные в текущей версии продукта, и фиксирует случаи, когда ошибку воспроизвести не удалось. Переключатель измеримости включен, так как в описании задачи не указаны маршруты или трафик, следовательно, условия результата нельзя измерить; при выключенном переключателе все задачи будут ожидать обработки. Задачи, созданные пользователями с правами записи, запускаются автоматически; остальные ждут инициализации кем-то, как описано в Когда начинается выполнение задачи.
Реагировать на сообщения от клиентов
Ваш инструмент поддержки собирает отчеты от клиентов, причем срочные отчеты поступают в отдел разработки с задержкой.
| Настройка | Значение |
|---|---|
| Тип | Текущая |
| Цель | Исправить ошибки, сообщенные клиентами в портале поддержки |
| Проекты | Портал поддержки клиентов |
| Бюджет | 150 долларов США и 15 часов работы агентов в неделю |
| Принимать задачи, результат которых невозможно измерить | Включено |
Инструмент поддержки регистрирует каждый отчет через систему приема задач API от имени сервисного аккаунта. Процедура проверки отсеивает задачи, которые невозможно воспроизвести, а бюджет мандата не позволяет, чтобы загруженность отдела из-за отчетов превысила половину выделенных слотов для агентов или установленный лимит бюджета.
Завершить очистку до установленного срока
Используемый вами платежный SDK прекратит свое существование в следующем квартале, а устаревшие вызовы этого SDK распределены по двум сервисам.
| Настройка | Значение |
|---|---|
| Тип | Ограниченная |
| Цель | Удалить все вызовы устаревшего платежного SDK |
| Целевой показатель | Максимум 0 вызовов устаревшего SDK |
| Проекты | Оформление заказа, Выставление счетов API |
| Бюджет | 300 долларов США и 40 часов работы агентов в месяц |
| Принимать задачи, результат которых невозможно измерить | Включено |
Задание CI создает один запрос на каждое место вызова, где файл и строка кода служат отпечатком сигнала; таким образом, повторное обнаружение места вызова при следующем запуске связывается с уже существующей задачей. Coroid пока не читает целевой объект: когда последний вызов будет удален, выберите Завершить самостоятельно.
Когда мандат не требуется
- Работа, о которой просят люди. Запросы, созданные в разделе «Новая работа» или импортированные, принимаются к исполнению, если они соответствуют критериям отбора; их никогда не откладывают и они не расходуют бюджет мандата.
- Расписания и последующие действия по триггерам. Они создают задачи напрямую, без этапа отбора, поэтому на них не распространяются ограничения мандата. Вместо этого присвойте им более низкий приоритет; см. Расписания.
- Разовая инициатива. Работа с известной структурой и четким завершением — это план, а не мандат.
- Пересекающиеся мандаты. Если несколько активных мандатов охватывают один и тот же проект, то запросы регулируются самым старым мандатом. Присвойте каждому проекту один мандат.
Где находятся мандаты
Открыть Quality Control → Мандаты. Каждый диапазон в разделе Quality Control — стандартный для организации и для каждого проекта — ссылается на один и тот же список, так как мандат принадлежит организации и сам определяет свои проекты. Открытие диапазона проекта не фильтрует этот список.
Владельцы и администраторы создают и изменяют мандаты. Участники могут их просматривать. Агенты и учетные записи служб вообще не имеют права изменять мандаты.
Что включает в себя мандат
Тип. Ограниченные мандаты имеют целевой показатель и завершаются при его достижении, например «сократить количество открытых уязвимостей безопасности до нуля». Непрерывные мандаты относятся к обслуживанию, например «поддерживать отсутствие необработанных исключений в рабочих маршрутах»; для них указывается дата проверки, а не целевой показатель.
Цель. Одно предложение, описывающее желаемое состояние. Именно по нему люди оценивают мандат; сам процесс принятия решений зависит от диапазона, бюджета и статуса.
Базовый показатель. Показатель, по которому измеряется мандат, и источник этих данных. Вы задаете название показателя, а его значения собирает система Coroid, их нельзя вводить вручную. Они не попадают в экспорт настроек. Новый мандат отображает Показаний пока нет.
Целевой показатель. Для ограниченного мандата: показатель и значение, означающие завершение работы.
Приоритеты. По одному на строку. Если задачи конкурируют за ресурсы, приоритет первой строки имеет преимущество.
Диапазон.
- Проекты. Проекты, охватываемые мандатом. Если ни один из них не выбран, мандат распространяется на все проекты организации, включая те, что будут созданы позже. Отметьте нужные проекты; мандат, предназначенный для одного репозитория, должен указывать именно этот проект.
- Области. Шаблоны путей внутри этих проектов, по одному на строку, например
apps/api-*/src/**. Пустое значение означает любое место. - Изменить классы. Типы изменений, для которых предназначен мандат, например
exception_fix. - Принимать задачи, результат которых невозможно измерить. По умолчанию отключено. Когда оно отключено, запрос, у которого контракт на результат невозможно измерить, будет ожидать вместо того, чтобы начаться.
Бюджет. Сколько Coroid может потратить на мандат в каждом временном окне, в долларах США и часах работы агентов, еженедельно или ежемесячно. Неделя начинается в понедельник в 00:00 UTC; месяц — в первый день. Бюджет автоматически открывается снова.
Условия остановки. Остановить, когда исчерпается бюджет, когда достигнута цель, после определённого числа неубедительных результатов подряд или в указанную дату.
Дата рецензирования. Для действующего мандата: дата, когда его продлевают или выводят из эксплуатации.
Правило отклонения. Для действующего мандата: ограничение на базовый показатель. Если в каком-то окне он превышается, tо владельцу направляется уведомление об эскалации.
Статус и версии
Мандат начинается как черновик. Опубликовать делает его активным, и только активные мандаты принимают задачи.
| Действие | Эффект |
|---|---|
| Пауза / Возобновить | Останавливает и возобновляет приём задач. Задачи, уже выполняющиеся, завершатся. |
| Приостановить | Прием заявок приостанавливается до тех пор, пока кто-то не разберется в причинах. |
| Завершить | Завершает мандат, цель которого уже достигнута. |
| Удалить | Навсегда завершает его работу. Удаленный мандат нельзя восстановить; его версии и история сохраняются. |
Изменение опубликованного мандата приводит к публикации новой версии. Более ранние версии сохраняются вместе с информацией о том, кто их опубликовал и когда.
Каждая публикация и каждое изменение статуса — это решение, принятое в рамках мандата.
Происхождение, указывающее на лицо, совершившее действие, и событие в аудитном потоке вашей организации (mandate.created, mandate.published,
mandate.paused и так далее).
Какие заявки регулируются мандатом
Мандат регулирует заявки, поступающие без указания ответственного лица в Coroid: из системы ввода задач API, от автоматизаций и интеграций, таких как GitHub или задачи Jira, а также из систем мониторинга.
Заявка, созданная человеком в Новая работа, или импортированная заявка не подпадает под действие мандата. Она всегда принимается при соответствии условиям, никогда не откладывается и не расходует бюджет мандата. Поскольку ее запросил человек, агенты просто помещают ее в очередь.
Незапрошенная заявка сопоставляется с самым старым активным мандатом, проекты которого включают проект данной заявки, или с мандатом, охватывающим все проекты. Заявка, не попадающая под действие ни одного мандата, принимается как обычная заявка.
Что определяет прием заявки
Прием заявки — это последний этап Проверка соответствия. При этом не делается вызов модели. Для каждой заявки принимается одно из следующих решений:
- Принята. Работа создается с резервированием слота для агента и, при наличии мандата, части его бюджета. То, начнется ли она самостоятельно, зависит от источника, как описано в Когда начинается работа.
- Уже устранено. Та же проблема — тот же инцидент в вашей системе отслеживания или мониторинга, или та же ошибка — уже обрабатывается в рамках другой заявки в любом проекте организации. Заявка связывается с этой работой, и ничего нового не создается.
- Изменений не требуется. Результат проверки соответствия показал, что зафиксированное поведение является ожидаемым. Ничего не создается.
- Отложена. Заявка допустима, но не должна запускаться сейчас: слоты агентов мандата заняты, бюджет на текущий период исчерпан, или результат невозможно измерить, а мандат не предусматривает прием таких заявок.
Каждое решение и его причина фиксируются вместе с заявкой.
Отложенные заявки
Coroid каждую минуту проверяет отложенные запросы и принимает их к исполнению сразу же, как только освобождается слот или бюджет в рамках текущей версии мандата. Увеличение бюджета мандата или приостановка другого мандата, занимающего слоты, освобождает отложенный запрос при следующей проверке. Нет возможности напрямую запустить его вне графика.
Запрос, который ожидал дольше установленного для мандата срока — неделю или месяц — или чей мандат уже неактивен, завершается без выполнения работы.
Как работа мандатов распределяет ресурсы
Работа мандатов может занимать не более половины всех доступных в вашей организации слотов агента одновременно, включая как запущенные задачи, так и принятые к исполнению, но еще не начатые. Остальные слоты остаются свободными для запросов от пользователей. Если у вашего тарифа неограниченное количество слотов, то та же доля применяется к вашему ежемесячному бюджету на расходы.
Принятый запрос сохраняет свое резервирование в течение 30 минут до начала выполнения задачи. После этого резервирование аннулируется: запрос, для которого задача еще не создана, возвращается в категорию отложенных, а существующая задача ждет слота наравне с другими.
В экспорте настроек
Мандаты передаются в экспорт настроек: вид, цель, объект, приоритеты, область применения, бюджет, условия остановки, дата проверки и правило отклонения. Проекты сопоставляются по своему стабильному ключу, а владельцы — по роли. Базовые показатели не передаются; это измерения организации, из которой они взяты. Мандат с новой целью поступает в виде черновика для публикации. Мандат с целью, совпадающей с уже существующим, обновляет его: если он еще черновик — то его, иначе — как новую опубликованную версию.