Система план — факт
Слой планирования и контроля над дев-проектами. Сначала строит оценённый и расписанный по календарю план, выгружает его в собственный реестр задач (timechecker) и заводит GitHub-репозиторий. Дальше непрерывно сводит план (обещанные часы и даты) с фактом (что реально случилось в разработке) и рапортует управленцу дельту.
Две стороны: план и факт
Слева — план: что обещано (часы, даты, иерархия). Справа — факт: что произошло (статусы из событий разработки). Между ними — непрерывное сведение и рапорт.
estimate_h; буфер — задача «Прочие работы» 30 % спринтаglobal_end_dateplan/02-plan.json — единственный источник правды; реестр задач и md-таблицы производныTASK-ID в работу» (чат, не коммиты)master через merge-гейт после зелёной проверкиdone_h, фактический прогрессПростыми словами. Это надстройка для управленца, а не для разработчика. Она не пишет код — она планирует проект и следит за ходом. Сначала система раскладывает проект на эпохи, спринты и задачи, оценивает каждую задачу в часах и раскидывает их по календарю — получается план: сколько часов и к какой дате. Потом по ходу работы она ловит факт и показывает, где реальность расходится с обещанием.
Главный приём — один источник правды: машинно-читаемый файл plan/02-plan.json
(его зовут «канон»). Всё остальное — таблицы для человека и задачи в реестре timechecker — лишь
производно от него, поэтому копии не разъезжаются. БД timechecker — источник правды по статусам,
GitHub — источник факта.
Часы берутся не «из воздуха»: ИИ даёт по задаче реалистичную и пессимистичную оценку,
берёт их среднее — без скрытых накруток; непредвиденное покрывает задача «Прочие работы»
(30 % часов спринта), которую система сама добавляет в каждый спринт и сразу закрывает. Базис — «разработчик + Claude Code»
(AI-ассистированный темп), а если дорабатываем существующий код — сперва читаем исходники, потом
оцениваем. Календарь считается последовательно и пессимистично: рабочий день 8 ч, выходные и
праздники РФ пропускаются, спринты укладываются встык. Часы поднимаются роллапом: задача →
sprint_h → epoch_h → global_h.
Статусы событийные, а не «угаданные из коммитов». Разработчик пишет «беру задачу в работу» —
она становится In Progress. Когда готово, он просит merge; координатор (ИИ)
в изолированном клоне прогоняет проверочную лестницу (конфликты, тесты, сборка, линт, смоук) и,
если всё зелёное, сам мержит ветку в master с номером задачи — это и есть
авторитетный сигнал Done. За то, что merge ничего не ломает, отвечает координатор; на
master стоит branch-protection, чтобы мимо гейта никто не прошёл.
- progress% =
done_h / total_h— насколько проект готов по часам. - Просрочка — спринт, у которого дата прошла, а задачи не все в Done.
- Прогнозная дата (
projected_finish) — пересчёт от «сегодня»; рапорт показывает её дельту к плановой. - Рапорт уходит файлом
plan/reports/<дата>.md.
Иерархия плана и публикация в реестр задач
План — это дерево из четырёх уровней; всё дерево живёт в каноне. В реестр задач (timechecker) публикуются проект и задачи с readable-ID; даты спринтов остаются в каноне.
Как задача превращается в часы
Оценка детерминирована формулой. Жёлтые пакеты — часы в расчёте: от двух оценок ИИ к цифре задачи и роллапам наверх; буфер живёт отдельной задачей спринта.
Часы превращаются в даты
Расписание — последовательное и пессимистичное: спринты идут встык, выходные и праздники РФ пропускаются. Параллельность не закладывается — это бонус.
Фазы и петля контроля
Команда — оркестратор с перезапускаемыми фазами. После publish включается живая петля: sync (по расписанию), gate (по событию) и replan (при изменениях) крутятся вокруг канона.
Событийная модель статусов
Статус задачи двигают явные события, а не угадывание по коммитам: сообщение разработчика и merge координатора.
Merge-гейт — проверочная лестница
Запрос на merge проходит лестницу проверок в изолированном клоне. Зелёный путь ведёт к merge и Done; любой красный — стоп и список ошибок разработчику.
master, отвечает координатор. На master —
branch protection (мимо гейта не пройти). Если проверять нечего — гейт не молчит, а помечает
«проверка ограничена». Реальная транзакция — скрипт gate-merge.mjs (есть сухой прогон
--check); боевой merge — только после явного ОК человека.
Сведение план-факт → рапорт
Здесь система живёт: канон даёт план (часы, даты), статусы дают факт (что закрыто), а синк постоянно считает их разницу и рапортует.
Артефакты и источники правды
Один канон, всё остальное производно. Состояние проекта — в репозитории, реестр и секреты — вне его (чтобы фоновый cron ходил по REST).