Фабрика проектов · устройство · черновик 15.11.2026

Как устроена новая фабрика

Вся работа лежит в одной книге учёта. Двигает её одна программа, диспетчер. Агенты живут в Herdr. Сергей говорит только с pi.

Состояние на 15.11.2026. Фабрика собирается. На mini ничего не включено.

01 · Обзор

Пять частей

Частей пять. Между собой они не переписываются. Каждая читает книгу учёта и пишет в неё. Если часть упала, после запуска она видит в книге то же состояние и продолжает с того же места.

Пять частей новой фабрикиСергей говорит только с pi. pi, нити и агенты пишут в книгу учёта через команду board. Диспетчер читает книгу, запускает агентов в Herdr и отдаёт pi сводку. СЛОВО СЕРГЕЯ MINI · УЧЁТ И ДВИЖЕНИЕ MINI · HERDR · АГЕНТЫ СЛОВО ВОПРОС·СВОДКА ПИШЕТ · ЧИТАЕТ СВОДКА · БЕДА С ЦИТАТОЙ ЧИТАЕТ · ПИШЕТ ЧЕРЕЗ BOARD ЗАПУСКАЕТ ЖИВ ЛИ КАЖДЫЙ ЧАС ПРОСЬБЫ ЛЮДЕЙ ВЛАДЕЛЕЦ Сергей только слово CTO pi Telegram · машина c1 НИТЬ Нить bb / Codex разговор с Сергеем Сергей говорит только с pi. С тимлидами не общается. КОПИИ Снимки базы каждый час · пять штук ВХОД Команда board единственный вход БАЗА Книга учёта один файл на mini запреты внутри базы КРУГ Диспетчер читает книгу, делает шаг между кругами не помнит НАДЗОР Сторож жив ли диспетчер Агентов запускает диспетчер. Herdr держит их живыми и показывает. АГЕНТ Исполнитель одна задача АГЕНТ Приёмщик другая модель АГЕНТ Тимлид проекта один на проект АГЕНТ Арбитр третья модель ВНЕ Почта и чаты клиенты и сотрудники ОБОЗНАЧЕНИЯ ядро фабрики программа или агент хранилище человек вне фабрики действие проверка и копия

Книга учёта

  • Один файл базы данных на mini.
  • В ней лежат слова Сергея, проекты, просьбы, задачи, взятия, сдачи, вопросы, решения и журнал.
  • Запреты стоят в самой базе. Она отклонит действие, даже если агент или диспетчер ошибся.

Команда board

  • Единственный вход в книгу для агентов, pi и нитей.
  • Привычные действия работают как раньше: взять, отметить, сдать, заблокировать, передать.
  • Команда «что на мне» отдаёт агенту его задачи, вопросы и последние решения.
  • Команда «состояние» собирает ответ «что сделано и что дальше» без участия модели.

Диспетчер

  • Маленькая программа на mini.
  • Каждые несколько секунд читает книгу, сверяет её с Herdr и делает следующий шаг.
  • Между кругами ничего не помнит.
  • Работу проектов не делает и код не правит.

Агенты в Herdr

  • Тимлид, один на проект. Режет просьбы на задачи и ставит их порядок под своим именем.
  • Исполнитель, на одну задачу.
  • Приёмщик, на другой модели, чем исполнитель.
  • Арбитр, на третьей модели. Приходит после второго возврата.
  • Постоянной памяти у тимлида нет. Всё важное он пишет в книгу.

pi

  • Единственный собеседник Сергея, в Telegram.
  • Записывает слова Сергея в книгу дословно.
  • Приносит вопросы тимлидов с вариантами.
  • Присылает сводку каждый час и беду сразу.
  • Если pi молчит, диспетчер пишет Сергею напрямую.

02 · Одна просьба

Путь одной просьбы

Сергей говорит pi: «перекрасить кнопку в зелёный». Схема показывает путь этой просьбы до слова «сделано». Номер слева на схеме совпадает с номером шага под ней.

Путь одной просьбы от слова Сергея до слова «сделано»Двенадцать сообщений между Сергеем, pi, книгой учёта, диспетчером и агентами в Herdr. СЛОВО 01 ЗАПИСЬ СЛОВ 02 НЕ ДУБЛЬ 03 ЧИТАЕТ КНИГУ 04 БУДИТ 05 СТАВИТ ЗАДАЧУ 06 ЗАПУСКАЕТ 07 СДАЧА 08 ЗАПУСКАЕТ 09 ПРИНЯТО 10 СВОДКА 11 СДЕЛАНО 12 ТИМЛИД ИСПОЛНИТЕЛЬ ПРИЁМЩИК Сергей говорит один раз pi Telegram Книга учёта через команду board Диспетчер круг за кругом Агенты в Herdr по одному на роль ОБОЗНАЧЕНИЯ действие ответ книги итог для Сергея книга учёта
  1. Сергей говорит pi просьбу. Один раз.
  2. pi записывает слова дословно командой board. В записи стоят проект, автор Сергей и номер сообщения в Telegram.
  3. Книга проверяет, нет ли в проекте такой же открытой просьбы. Если есть, pi получает ответ «уже есть» и её состояние. Второй записи не будет.
  4. Диспетчер на очередном круге читает книгу и видит новую просьбу.
  5. Диспетчер будит тимлида проекта.
  6. Тимлид делает из просьбы задачу и ставит ей место в очереди.
  7. Диспетчер запускает исполнителя в Herdr и сам записывает, кто взял задачу. Второй раз ту же задачу книга не выдаст.
  8. Исполнитель сдаёт работу с доказательством. Это коммит, снимок экрана или вывод проверки.
  9. Диспетчер запускает приёмщика. Это другой агент на другой модели.
  10. Приёмщик принимает работу или возвращает её с причиной.
  11. Раз в час диспетчер собирает сводку из книги и отдаёт её pi.
  12. pi пишет Сергею: «сделано: кнопка зелёная, выложено».

На схеме нет трёх вещей. После второго возврата диспетчер запускает арбитра на третьей модели. Арбитр решает под своим именем, и спор на этом кончается.

Если задача требует выкладки и откат проверен, диспетчер запускает выкладку. После неё задача становится сделанной.

Если работа встала на любом шаге, в книге записана причина и чего задача ждёт. О беде диспетчер сообщает сразу.

03 · Задача

Жизнь задачи

Состояние задачи меняется только по списку разрешённых переходов. Список лежит в базе, и база отклонит любой другой переход. У каждого перехода записано, кто имеет право его сделать.

Жизнь задачи: состояния и переходыЗадача идёт из очереди в работу, сдаётся, принимается и становится сделанной. Возвраты, арбитр и ожидание с причиной показаны отдельными переходами. ТИМЛИД СТАВИТ ВЗЯТИЕ СДАЧА ПРИНЯТО ВЫКЛАДКА ВОЗВРАТ 1 ВОЗВРАТ 2 АРБИТР ПРИНЯЛ ПОСЛЕДНИЙ КРУГ УМЕР · БРОСИЛ ПРИЧИНА ПРИЧИНА СНЯТА В очереди место ставит тимлид В работе исполнитель жив Сдано есть доказательство Принято другим агентом Сделано результат на месте У арбитра третья модель Ждёт записана причина ПЕРЕХОДЫ БЕЗ СТРЕЛОК Снять с причиной можно из любого состояния. Снимает тимлид или pi. Вернуть снятое в очередь может только слово Сергея. Арбитр может разделить спорную задачу на части. Если выкладка не нужна, принятая работа сразу становится сделанной. ОБОЗНАЧЕНИЯ задача появилась состояние стоит с причиной цель разрешённый переход
ПереходКто можетЧто это закрывает
Взять задачу в работуТолько диспетчерДвое не берут одну задачу. Взятие не зависит от памяти исполнителя.
Сдать работуТолько исполнитель, с доказательствомСлово «готово» без доказательства сдачей не считается.
Принять или вернутьТолько приёмщик. Тот, кто сдал, принять не можетНикто не закрывает свою работу сам.
Решить спорТолько арбитр, после второго возвратаСпорная сдача не крутится без конца.
Поставить «ждёт»Тимлид, pi, исполнитель или диспетчер. Причина и чего ждёт обязательныНичто не стоит без записанной причины.
СнятьТимлид или pi, под своим именем и с причинойНичто не закрывается само. Сергей видит список снятого.
Вернуть снятоеpi или нить, по слову СергеяСергей возвращает любое снятое одним словом.

04 · Диспетчер

Один круг диспетчера

Диспетчер повторяет один и тот же круг из девяти шагов. Всё, что ему нужно, лежит в книге. Поэтому после сбоя он продолжает с того же места.

  1. Отметить, что живДиспетчер ставит в книге отметку времени. По ней сторож видит, что диспетчер работает.
  2. Сверить книгу с HerdrИсполнитель умер: задача возвращается в очередь с причиной. Тимлид умер: диспетчер запускает нового и выдаёт ему «что на тебе».
  3. Новая просьбаУ просьбы ещё нет задачи: диспетчер будит тимлида проекта.
  4. Готовая задачаЕсть свободное место: диспетчер запускает исполнителя по порядку проектов и порядку задач и записывает взятие.
  5. Сдача без приёмкиДиспетчер запускает приёмщика. После второго возврата запускает арбитра.
  6. Тишина и лимитЗадача молчит дольше срока: записать простой и причину. Кончился лимит подписки: записать это отдельным состоянием, агентов не убивать.
  7. Регулярная работаПодошло время: поставить задачу. Работа пропущена: записать пропуск.
  8. Проект без движенияДиспетчер ставит pi вопрос для Сергея: продолжать, пауза или закрыть.
  9. Беда и сводкаПоявилась беда: сообщение уходит сразу. Прошёл час: диспетчер собирает сводку и отдаёт pi.

Одну задачу диспетчер перезапускает не больше трёх раз. Дальше он ставит вопрос pi.

Число исполнителей одновременно ограничено нагрузкой mini. Это число видно в сводке.

05 · Книга

Что лежит в книге и что она запрещает

Агент не пишет в базу напрямую, только командой board. Запреты записаны в самой базе, а не в программе.

Запреты внутри базы

  • У задачи не бывает двух взятий сразу.
  • Задачу нельзя принять тому, кто её сдал.
  • Задача не становится «сделано» без приёмки.
  • Состояние меняется только по списку разрешённых переходов.
  • Запись от имени Сергея принимается только со ссылкой на его сообщение и только от pi или нити.
  • Вторая такая же открытая просьба в проекте не заводится.
  • Журнал и слова нельзя изменить или удалить.

Что лежит в книге

  • Слова. Дословные слова Сергея и чужих людей: кто сказал, где и когда.
  • Проекты. Цель, место по важности, состояние, расписание регулярной работы, почта и чаты.
  • Просьбы. Каждая ссылается на слова, из которых появилась.
  • Задачи. Место в очереди, состояние, срок, причина ожидания.
  • Взятия. Кто держит задачу и когда последний раз был жив.
  • Сдачи и приёмки. Кто сдал, с каким доказательством, кто принял или вернул и почему.
  • Вопросы к Сергею. Варианты, когда задан, каким словом закрыт.
  • Решения. Решения агентов под своим именем и решения Сергея со ссылкой на его слова.
  • Журнал. Каждое изменение состояния. Журнал только дописывается.

06 · Прошлое

Что делаем со старыми досками и бэклогом

Ничего не выбрасываем. Старые доски и файл бэклога один раз переносятся в книгу. Все записи остаются архивом для чтения. Всё открытое получает пометку «на разборе» и тимлида проекта.

Что происходит со старыми досками и бэклогомСтарые доски и файл бэклога один раз переносятся в книгу. Все записи уходят в архив для чтения, открытые получают пометку «на разборе», и тимлид решает судьбу каждой. ВСЕ ЗАПИСИ ОТКРЫТОЕ БЫЛО Старые доски все записи как есть БЫЛО Файл бэклога список задач в вольте ШАГ Перенос один раз КНИГА Архив в книге только чтение, с поиском КНИГА На разборе решает тимлид проекта ИТОГ Задача в очереди получила место ИТОГ Дубль объединён одна запись вместо двух ИТОГ Снято с причиной Сергей видит список ИТОГ Вопрос Сергею приносит pi, с вариантами ОБОЗНАЧЕНИЯ хранилище шаг или итог ждёт решения тимлида нужен Сергей снято, можно вернуть

После переноса бэклог проекта равен списку его задач в книге. Другого места нет.

Повторный перенос без слова Сергея невозможен. Книга помнит, что перенос был.

Задачи без проекта разбирает pi. Поручения, которые раньше до pi не дошли, тоже попадают к нему на разбор.

Что готово сегодня: в сборке перенос открытых записей. Перенос всего архива в книгу добавляется следующим шагом.

07 · Сергей

Что видит Сергей

От Сергея нужно только слово, и говорит он его одному агенту, pi. Фабрику он видит тремя способами. Ночью всё приходит так же, как днём.

Сводка раз в час

  • Первым стоит важное: над чем работаем, что сделано, какие сроки сорваны.
  • Дальше что решили за час, какая следующая задача и где что требуется от Сергея.
  • Остальное лежит под скрытым текстом.
  • Сводку собирает программа из книги. pi её передаёт и факты менять не может.

Беда сразу

  • Встала работа.
  • Сломан бой.
  • Нарушено правило.
  • Сорван срок Сергея.

Ответ по запросу

  • В любой момент Сергей спрашивает pi, что сделано и что дальше.
  • Каждое утверждение в ответе опирается на запись в книге.

Вопрос к Сергею

  • Приходит только от pi и только с вариантами.
  • Ответа по умолчанию у вопроса нет.
  • Пока ответа нет, задача числится «ждёт слова Сергея», остальная работа идёт.
  • Открытый вопрос повторяется в каждой сводке.

Что всегда ждёт слова Сергея

  • Трата денег.
  • Письмо или сообщение клиенту или другому человеку.
  • Удаление данных.
  • Новый доступ.
  • Договор.
Счётчик в каждой сводкеЦель
Потерянные просьбыноль
Сделанное повторноноль
Закрытое без приёмкиноль
Решения и письма от имени Сергея без его слованоль
Задачи, которые стоят без записанной причиныноль
Брошенные задачиноль
Проекты без движения, по которым Сергею не принесён вопросноль
Повторные слова Сергея об одном и том женоль
Сорванные срокивидны все
Вопросы, которые ждут слова Сергеявидны все

08 · Поломки

Что будет при поломке

Каждая часть после запуска читает книгу и продолжает. Поэтому поломка одной части не теряет работу.

Что сломалосьЧто происходит
Умер исполнительДиспетчер видит это при сверке с Herdr. Задача возвращается в очередь с причиной, её берёт другой исполнитель.
Умер тимлидДиспетчер запускает нового и выдаёт ему «что на тебе» из книги.
Упал диспетчерОперационная система запускает его снова. Он читает книгу и продолжает. Сторож проверяет отметку «диспетчер жив» и шлёт беду, если она устарела.
Перезагрузился miniДиспетчер стартует сам, сверяет книгу с Herdr, поднимает тимлидов и возвращает в очередь задачи умерших исполнителей.
Молчит piДиспетчер шлёт Сергею сообщение о беде напрямую, мимо pi.
Кончился лимит подпискиДиспетчер записывает это отдельным состоянием. Агентов не убивает.
Испортилась базаКаждый час делается снимок базы. Хранятся пять последних.
Код фабрики поправили мимо gitДиспетчер на каждом круге сверяет свою версию с git и пишет расхождение в состояние.

09 · Решения

Решения, которые принял не Сергей

Сергей выбрал три вещи: своя книга и диспетчер, один собеседник pi, команда board остаётся и пишет в книгу. Четырнадцать решений ниже приняла нить bb. Сергей вычёркивает любое.

№РешениеГде сломается
01База SQLite одним файлом, программа на Python без сторонних пакетовОдин файл на одной машине. Защита: ежечасные снимки.
02Запреты стоят в самой базеЗапрет, который забыли записать, не сработает. Защита: каждый плохой случай стал проверкой.
03Взятие записывает диспетчер, а не исполнительИсполнитель, запущенный мимо диспетчера, в книге не виден. Защита: сверка с Herdr на каждом круге.
04Задача в работе, только пока жив её исполнительАгент жив, но стоит. Защита: простой меряется тишиной.
05Тимлид без постоянной памяти, с выдачей «что на тебе»Причину решения, которую тимлид не записал, не восстановить.
06Приёмщик всегда на другой моделиОбе модели ошиблись одинаково. Защита: арбитр на третьей.
07Вопрос к Сергею не имеет ответа по умолчанию и повторяется в каждой сводкеВопросов накопится много. Защита: счётчик в сводке.
08Сводку и ответ «что сделано» собирает программа, pi только передаётПрограмма пишет сухо. pi может дописать от себя, факты менять не может.
09Лимит подписки записывается отдельным состояниемЛимит не всегда отличим от зависания.
10Предел исполнителей одновременно, по нагрузке miniПри малом пределе очередь растёт. Число видно в сводке.
11Не больше трёх перезапусков одной задачи, дальше вопрос piЗадача с настоящей трудностью уйдёт к pi рано.
12Перенос старого однократныйЗабытое при переносе придётся вносить руками.
13Имя агента задаёт запускающая программа, а не сам агентБез отдельных учётных записей системы агент может подделать имя. Защита: всё, что записано от имени Сергея, видно в сводке.
14pi durable в фабрике сегодня не используетсяТимлида можно заменить позже, не трогая книгу.

10 · Слово Сергея

Что ждёт слова Сергея

Фабрика собирается. На mini ничего не установлено и не включено. Без слова Сергея не делаются три вещи.

  1. Включение новой фабрики на первом проекте и переключение команды board на всех машинах.
  2. Правка инструкции pi на c1, чтобы он писал в книгу. Служба pi сейчас помечена «не трогать».
  3. Порядок проектов по важности.

Приёмка сегодня: шесть плохих случаев на настоящей задаче. Одну просьбу подали дважды. Исполнителя убили посреди работы. Фабрику перезапустили. Агент пытается записать решение от имени Сергея. Агент говорит «готово» о несделанном. Задачу бросили.