Необъяснённые паузы и сон компьютера — это не одно и то же
В DevPace есть две принципиально разные ситуации, которые со стороны выглядят одинаково: “в данных ничего не происходит”. Разница между ними важна, и долгое время агент считал их по одной формуле — пока мы не нашли в этом месте реальный баг, который тихо искажал данные о последнем отрезке рабочего дня.
Два разных “ничего”
Первая ситуация — необъяснённая пауза. Агент запущен, опрашивает систему каждые несколько секунд, как обычно, но не видит ни одного нажатия клавиши и ни одного движения мыши дольше 15 минут. Человек мог отойти на созвон без ноутбука, уйти на обед, задуматься над задачей с ручкой и бумагой. Данные за это время реальны — агент их видел, зафиксировал как простой и честно пометил паузу, чтобы человек мог потом сам вписать, что это было.
Вторая ситуация — компьютер уснул или выключился. Здесь агент не работает вообще. Он не опрашивает систему, не видит ни активности, ни простоя — процесс просто не выполняется от момента засыпания до момента пробуждения. Это не пауза внутри данных, это дыра между двумя кусками данных.
Разница кажется очевидной на словах. Но на уровне кода, который собирает сырые отсчёты в непрерывные отрезки активности, она реализуется не сама собой — её нужно явно запрограммировать. И именно здесь мы нашли ошибку.
Как строится сегмент — и в чём была проблема
Логика агента реагирует только на события, которые она реально получает. Сегмент одной категории (“работа в IDE”, например) открыт до тех пор, пока не придёт что-то, что его закрывает: смена категории или начало простоя. Это разумное правило для обычной работы — но оно молчаливо предполагало, что следующий отсчёт всегда придёт вовремя, через привычный интервал опроса.
Сон или выключение компьютера ломает это предположение. Если человек закрыл IDE в 18:00 и ноутбук ушёл в сон, а следующий отсчёт агент делает только в 9:00 следующего утра при включении — старая логика видела ровно это: последний сегмент “работа в IDE” был открыт в 18:00, а следующее реальное событие пришло в 9:00. Формально для агента это выглядело так, будто человек непрерывно работал в IDE все 15 часов, пока компьютер физически был выключен. Сегмент закрывался только тогда, когда наконец приходил новый отсчёт — то есть в момент пробуждения, а не в момент, когда работа на самом деле прекратилась.
Это не гипотетический край случая: у любого человека, который выключает компьютер на ночь или уводит ноутбук в сон в середине дня, последний рабочий сегмент перед этим стабильно искажался — иногда на минуты, иногда на часы.
Исправление: считать реальное время между отсчётами
Фикс не пытается угадать, что именно произошло — спит компьютер, выключен или выключился жёстко из-за разряда батареи, агенту это и не нужно знать. Вместо этого мы стали явно сравнивать, сколько физического времени прошло между двумя соседними отсчётами, а не только между содержательными событиями. Если этот промежуток превышает 30 секунд — заметно больше обычного интервала опроса, — сегмент закрывается по последнему реально полученному отсчёту, а не ждёт следующего.
То есть в примере выше сегмент “работа в IDE” теперь закрывается в 18:00 — в момент последнего отсчёта перед тем, как отсчёты прекратились, — а не в 9:00, когда компьютер снова включился. Дальше это уже дыра между сегментами, а не часть последнего сегмента, ровно как второй тип “ничего”, описанный выше.

DevPace отдельно отмечает разрыв в связи с агентом (“давно не было новых записей”) — это про текущее соединение, а не про содержимое уже сохранённого дня, который остаётся точным независимо от этого.
Почему это стоило чинить, а не оставить как есть
Ошибка была тихой — она не роняла агент, не создавала пустых записей, не вызывала жалоб на производительность. Она просто немного, а иногда и сильно, завышала длительность последнего рабочего отрезка каждый раз, когда компьютер засыпал посреди сегмента. В агрегатах за день это искажение было не всегда заметно на глаз, но оно било ровно по тем метрикам, ради которых DevPace вообще существует: сколько реально длилась последняя рабочая сессия, когда человек на самом деле остановился.
Мы предпочитаем находить такие вещи сами, объяснять их прямо и чинить, а не полагаться на то, что никто не заметит несколько лишних часов “работы” во время сна ноутбука. Это ровно тот тип ошибки, ради исключения которого имеет смысл открыто показывать, как устроен код сбора данных.
Логика агента, включая эту часть, открыта — можно посмотреть код и тесты в репозитории gla-client на GitHub, или Посмотреть демо и увидеть, как это выглядит на собственных данных.
Смотрите также
- Часовой пояс: мелочь, которая ломает всю картину дня
- Открытый код агента DevPace: не верьте на слово, проверьте сами
Опубликовано: 25 июня 2026 г.