Робот совета¶
Робот совета принимает типовые решения совета автоматически, за секунды, по тем вопросам, которые члены совета заранее разрешили решать без личного участия. Он не подменяет совет: каждый голос и каждая подпись протокола остаются подписью конкретного члена совета. Их ставит ключ отдельного разрешения его аккаунта, выпущенного только для робота и ограниченного списком типов решений.
Стол «Робот совета» видят только члены совета. Председатель дополнительно управляет автоматической подписью протоколов и видит страницу состояния робота.
Как устроено делегирование¶
- Член совета на странице «Действия автоматизации» по каждому типу решения выбирает, как робот голосует за него, и нажимает «Сохранить настройки»:
- Вручную — робот не трогает, голосует человек;
- Сразу — робот голосует «за» в момент появления повестки; для потоков, где совет заранее принял правило и проверять нечего;
- Как ‹член совета› — робот голосует так же, как выбранный член совета, и только после него: «за» → «за», «против» → «против», не проголосовал — робот молчит. Для решений, где документ должен проверить конкретный человек: совет договаривается, кто проверяет, остальные повторяют его голос. Повтор работает и по цепочке: если Анна повторяет за Петром, а Пётр — за председателем, голос Анны придёт вслед за голосом Петра.
- При первом сохранении на устройстве создаётся новый ключ. На аккаунте члена совета появляется отдельное разрешение «robot», привязанное только к голосованию в совете. Приватный ключ передаётся роботу по защищённому каналу и на устройстве не сохраняется. В блокчейн ключ не попадает.
- Настройки записываются в реестр автоматизаций контракта совета: имя разрешения, типы решений «сразу», пары «тип → за кем повторять», у председателя — типы решений, протоколы которых робот подписывает за него. Повторять за самим собой и за членом совета без права голоса контракт не даёт.
- Контракт при каждом голосе и каждом утверждении проверяет, что ключ подписи принадлежит заявленному разрешению аккаунта члена совета и что тип решения делегирован. Подпись чужим ключом или по неделегированному типу отклоняется.
Отзыв делается кнопкой «Отозвать делегирование»: запись в реестре стирается, разрешение снимается с аккаунта, ключ удаляется у робота. После отзыва робот не может подписать ничего от имени этого члена совета, даже если копия ключа где-то осталась.
Кворум робота¶
Решение принимается, когда «за» проголосовало больше половины состава совета. Робот доводит решение до протокола сам, только если делегировавших голоса членов совета с переданными ключами хватает для этого порога и председатель делегировал подпись протокола этого типа. Всё это видно в реестре по каждому типу решения:
- кто из членов совета голосует сразу, кто за кем повторяет, передал ли ключ;
- сколько голосов робот подаёт сразу, сколько придёт вслед за каждым ведомым, и сколько нужно: «кворум сразу», «кворум после голоса ‹X›» или «не набирается»;
- подписывает ли протокол робот или председатель вручную;
- правила, которые не сработают: замкнутый круг («Пётр и Анна повторяют друг за другом — никто не проголосует первым») или ведомый без права голоса.
Если кворума робота нет, робот голосует за тех, кто делегировал, а решение остаётся в повестке для ручного голосования. Протокол подписывается, когда кворум набран.
Что делает робот с решением¶
- Получает новую повестку делегированного типа и подаёт одной транзакцией голоса тех, кто выбрал «сразу», и тех, чей ведомый уже проголосовал. Остальные повторяющие ждут — в журнале это этап «ждёт голоса» с именами тех, кого ждут.
- Каждый новый голос по решению, ручной или робота, заново оценивает запись: кто из повторяющих теперь может голосовать. Голоса ложатся в блокчейн, робот проверяет кворум.
- Собирает протокол по шаблону этого типа решения, подписывает его ключом разрешения председателя и второй транзакцией утверждает и исполняет решение.
Каждый шаг записывается в журнал: этап, голоса, транзакции, ошибки. Сбой не теряется: робот повторяет попытку с растущей паузой, а после исчерпания попыток решение помечается как застрявшее и ждёт ручного повтора председателем на странице «Состояние робота».
Пределы полномочий¶
- Робот не голосует и не подписывает по типам решений вне делегированного списка.
- В режиме «как ‹член совета›» робот не голосует, пока ведомый не проголосовал, и повторяет его голос буквально — в том числе «против».
- Робот не имеет активных ключей членов совета и не хранит ключи в блокчейне.
- Ручной голос активным ключом принимается всегда, независимо от делегирования.
- Срок действия делегирования, если задан, проверяет контракт: просроченное делегирование не действует.