Задачи: обзор
Что это
Задачи — это операционный журнал работы (task ledger), отдельный от канонических знаний. В нём вы фиксируете, что нужно сделать: заголовок, описание, приоритет, зависимости и текущее состояние. Раздел «Задачи» в интерфейсе показывает журнал в виде доски, а из терминала с ним работают команды группы task.
Ключевое архитектурное решение (ADR-015): активность по задачам живёт в собственном append-only журнале с отдельным атомарным указателем CURRENT в ops/task-ledger/. Прогресс задач никогда не меняет указатель знаний ledger/CURRENT. Так объём и «шум» рабочих задач не приводит к пересчёту и переинвалидации канонических поколений знаний.
Чем задачи отличаются от знаний
- Знания — это проверенное каноническое содержание (сырьё → нормализация → предложение → валидация → промоушен → леджер знаний → материализованный Markdown + индексы). Оно меняется только через операции знаний.
- Задачи — это оперативная координация. Каждая задача содержится в отдельном объекте, адресуемом по содержимому (content-addressed), а её история — это неизменяемая цепочка событий. Задачи не публикуют и не редактируют знания.
Оба журнала местные (local-first) и работают только на петле обратной связи 127.0.0.1.
Как это устроено
- Неизменяемая история. Каждое создание задачи или смена состояния добавляет новое событие и новое поколение доски. Прошлые объекты, события и поколения не переписываются — их можно только дополнить новыми.
- Идемпотентность. Каждая команда несёт ключ идемпотентности. Повтор той же команды с тем же ключом возвращает прежний результат как
no_op, а не создаёт дубль. Тот же ключ, использованный для другой команды, отклоняется как конфликт (см.src/raytsystem/tasking.py). - Защита от гонок. Команды принимают ожидаемый идентификатор поколения (
expected_generation_id). Если доска изменилась, запись падает с конфликтом поколений — вы перечитываете доску и повторяете действие.
Когда использовать
- Ведите список работ по проекту, не смешивая его с каноническими знаниями.
- Отслеживайте прогресс через явные состояния (см. жизненный цикл задачи).
- Просматривайте текущую доску в UI или запрашивайте её из CLI для скриптов и проверок.
Пример
Прочитать доску (только чтение, ничего не меняет):
uv run raytsystem task list --json
Создать задачу в операционном журнале:
uv run raytsystem task create "Проверить свежесть индекса" --idempotency-key task-2026-07-12-a
Ожидаемый результат
task list возвращает снимок текущего поколения доски со списком задач и идентификатором поколения. task create возвращает результат команды: новую задачу, идентификатор события и идентификатор нового поколения.
Ограничения и безопасность
- Задачи не дают агентам права выполнять код: назначение цифровых сотрудников и managed workspaces находятся за флагами и по умолчанию отключены (см. назначения и workspaces).
- HTTP-слой никогда не принимает путь файловой системы,
cwdили команду; UI работает с типизированными идентификаторами. - Полезная нагрузка задачи проходит проверку чувствительности (secret-scan) и отклоняется, если содержит секреты.
Связанные страницы
Источники истины
src/raytsystem/tasking.pyops/decisions/ADR-015-local-web-control-plane-and-task-ledger.mdsrc/raytsystem/cli.py