Правила работы — `AGENTS.md` в корне репозитория, копия в `C:\Users\Ochenstarik\kagent-tasks\AGENTS.md`. Рабочий каталог: `C:\Users\Ochenstarik\kagent\.worktrees\t_e15a6516` Ветка: `wt/kagent-091-measurability` ## На чём остановились Работа по этапу 0.9.1 сделана наполовину и **не закоммичена**. В рабочем каталоге: ``` ?? scripts/roadmap_status.py вычисление статуса roadmap из capabilities.json ?? scripts/drift_check.py проверка расхождения заявленного и наблюдаемого ?? scripts/eval_suite.py запуск набора сквозных случаев ?? docs/capabilities.json реестр возможностей и доказательств ?? eval/ пять случаев, baseline.json ?? docs/adr/0008-measurability-and-computed-status.md ?? docs/adr/0016-spec-drift-and-eval-integrity.md ?? tests/unit/, pyproject.toml, uv.lock, services/gateway/Cargo.lock M .env.example ``` Пока это не закоммичено, любая чистка каталога уничтожает работу. Задача — привести сделанное в пригодный вид. Подключение к непрерывной интеграции и наполнение случаев вынесено в следующую задачу. ## 1. Зафиксировать без потерь Закоммитить три скрипта, `docs/capabilities.json`, каталог `eval/` и `tests/unit/` как есть, одним коммитом с пометкой, что содержимое дорабатывается в этой же задаче. Дальше правки идут поверх, чтобы работа не пропала при первой же ошибке. `services/gateway/Cargo.lock`, `uv.lock` и правки `.env.example` в этой задаче не нужны: gateway ведётся в другой ветке, изменения окружения к измеримости не относятся. Не коммитить. ## 2. Номера ADR заняты Созданы `docs/adr/0008-measurability-and-computed-status.md` и `docs/adr/0016-spec-drift-and-eval-integrity.md`. Номера **0008 и 0016 уже заняты** другими решениями в открытом PR #2: - `0008-platform-evaluation-suite.md` — набор оценки платформы и метрики автономности; - `0016-computed-stage-status.md` — вычисляемый статус этапа и обнаружение расхождения. Два файла с одним номером нарушают правило именования из `docs/adr/README.md` и при слиянии дадут коллизию. Оба существующих решения описывают ровно то, что реализуют новые файлы. Поэтому: - удалить оба новых файла ADR; - если в их текстах есть решения, которых нет в 0008 и 0016 — вынести только эти отличия в один новый ADR с номером `0021` и перечислить их в отчёте; - реализация уже принятого решения нового ADR не требует. ## 3. Статус accepted проставлен исполнителем Оба новых файла имеют `Status: accepted`. Решения принимает владелец проекта, а не исполнитель. Если ADR-0021 всё же появится — статус `proposed`. ## 4. Реестр возможностей закрепляет непроверенные статусы В `docs/capabilities.json` этапы 0.1–0.8 записаны как `complete`. Это те самые галочки, против которых написано решение: они проставлены вручную и ничем не подтверждены. Известно, что как минимум персистентность проектов и задач не работает, а часть модулей не импортируется ниоткуда. Реестр, зафиксировавший ложные статусы, отменяет смысл всей задачи. Что сделать: - убрать поле статуса из объявления этапов. Реестр объявляет **что должно быть доказано**, а не **что уже готово**; - статус вычисляется `roadmap_status.py` из наличия доказательств; при отсутствии доказательства — `unverified`; - для каждой возможности в реестре доказательство должно быть проверяемым: имя job непрерывной интеграции, случай из набора оценки, конкретный файл артефакта. Список существующих файлов доказательством не является; - прогнать `roadmap_status.py` и приложить полученный вывод к отчёту. Ожидаемо, что большинство возможностей окажется `unverified` — это правильный результат, а не ошибка. ## 5. Случаи оценки пустые `eval/cases/*/base.tar.gz` весят по 64 байта — это пустые архивы. Пять случаев объявлены, снимков репозиториев в них нет, то есть набор не может быть выполнен. Выбрать одно и сделать честно: - либо наполнить один случай настоящим снимком и оставить его единственным рабочим, а остальные удалить до наполнения; - либо оставить каталоги как объявление структуры, но пометить случаи как `draft` в `contract.json` и исключить из подсчёта, чтобы пустой набор не выглядел готовым. Второй вариант дешевле и допустим при условии, что `eval_suite.py` не засчитывает `draft`. ## Критерий приёмки - работа закоммичена, ничего не потеряно; - в `docs/adr/` нет двух файлов с одинаковым номером; - ни один ADR не имеет статуса `accepted`, проставленного исполнителем; - `python scripts/roadmap_status.py` выполняется и печатает статусы, выведенные из доказательств, а не из объявленного поля; - `python scripts/drift_check.py` выполняется и печатает список расхождений; - ни один случай оценки не выглядит рабочим, не будучи таковым. Вывод обеих команд приложить к отчёту. ## Границы Только перечисленные файлы. Ветку не ребейзить, в CI ничего не подключать — это следующая задача. Ничего в gateway и control-plane не трогать.