- Раскладка docs/ приведена к канону 2: заведены passport/architecture/
database/security/review и research; docs/specs, drafts, backlog, review/
и BRIEF.md разобраны и удалены, беклог переехал в docs/tasks (34 задачи,
6 целей, слаги на английский).
- Нарративы specs удалены как дубли openspec-спек после поимённой сверки;
остаток заведён задачами (редактор маппинга ревью, крайние случаи
именования), отказ от сущности title промоутнут в ADR.
- Проектные копии агентов и скиллов ревью/пайплайна удалены в пользу
плагинов av-dev-pm и av-dev-pipeline; в task gate добавлен шаг canon
вместо er-schema.
- task image принимает BUILD_ID и тегает <app>:$BUILD_ID (контракт роли app_image в umbar)
- добавлен ADR-2026-07-24-local-image-build, старый docker-deploy помечен superseded
- README/architecture/roadmap/Dockerfile обновлены под новую схему (без сборки на сервере)
gate.sh и review-context.sh переписаны на python3 — в scripts/ уже жил
diff-coverage.py, а разбор вывода git и сборка сводки на shell читались хуже,
чем работали.
Гейт больше не гоняет go-шаги впустую: build, vet, lint, gofmt, тесты, -race,
покрытие и govulncheck запускаются, только если в диффе есть .go либо
go.mod/go.sum; миграции — если тронуты миграции или код. Правка документации
проходит гейт за секунды вместо минуты. Пропуск при этом не молчит: он в сводке
с причиной и уезжает в границы покрытия, а charter гейта различает «код не
трогали» (корректно) и «инструмента нет» (настоящая дыра).
Изменённые файлы считаем как объединение диффа с базой, рабочего дерева и новых
файлов: гейт гоняют и до коммита, и после, а лишний прогон шага дешевле
пропущенного.
Заодно govulncheck перестал рапортовать «уязвимостей: 0» когда он просто не смог
отработать из-за несобирающегося кода — это SKIP, а не WARN.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
По итогам разбора собственной работы.
jellybit-review-code не запускался нигде: charter обещал «проход профиля quick»,
а quick состоял из стадий 0, 1, 5. Проход, который нельзя запустить, нельзя и
откалибровать. Теперь он стадия 1 рядом с review-specs — оба applicative, у
обоих критерий записан, различаются источники (дельта-спека и конвенции).
review-context.sh больше не выгружает go doc -short по всему модулю: это было
264 строки из 458 при том, что граф зависимостей — единственное, чего агент не
восстановит сам, — занимает 21. Публичную поверхность он вытянет go doc по
нужному месту.
Из calibration.md убрана секция дополнительных метрик: precision, корреляция и
стоимость прогона вручную никем не считаются, а набор показателей, который не
собирают, изображает измеряемость вместо того, чтобы её давать.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Инструмент ставится вместе с остальными (версия закреплена), гейт его больше не
пропускает.
Уязвимость почти всегда унаследована — это состояние зависимостей и тулчейна, а
не диффа, — поэтому шаг не краснит гейт, а получает статус WARN: виден в сводке,
уезжает в находки и в границы покрытия. Иначе красный гейт на каждом прогоне
перестают читать. Уязвимость, приехавшую с новой зависимостью change, агент
отличает по трассам вызовов и выводит как major.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
scripts/gate.sh гонит всё, у чего есть объективный оракул (build, vet, lint,
gofmt, тесты, повтор на флаки, -race, покрытие изменённых строк, миграции,
ER-схема по диффу, gitleaks, govulncheck), не останавливаясь на первом отказе:
ревью нужна полная картина. Пропущенный шаг попадает в сводку — молча
пропущенная проверка даёт ложное ощущение проверенности.
scripts/diff-coverage.py считает покрытие именно изменённых строк: общий
процент по пакету для ревью бесполезен.
scripts/review-context.sh собирает вход, которого нет в диффе — пакеты с
назначением, граф внутренних зависимостей, публичную поверхность и инвентарь
концепций. Агент, видящий только дифф, не знает словаря проекта и потому не
может судить об архитектуре.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Новая capability web-ui: презентационный перенос готового дизайна
(семантический HTML + единый jellybit.css, тёмная тема по настройке ОС)
в html/template без шага сборки.
- Встроенная (go:embed) отдача статики под /static с Cache-Control и
cache-busting (?v=<hash> по содержимому css/js).
- Шрифты IBM Plex self-hosted (@font-face, cyrillic+latin), без CDN.
- Наколеночный менеджер зависимостей: вендор (htmx + шрифты) не хранится
в репо (gitignore), идемпотентно добывается `task assets` по
web/assets.manifest с проверкой sha256; task build/run зависят от assets.
- Общие партиалы: шапка, бейдж статуса (карта всех 14 состояний),
виджет «файл источника → раскладка» (общий для review и download).
- Страницы: список с фильтром/поиском, ревью, новая страница просмотра
загрузки (/download/{id}). deleted скрыт по умолчанию.
- Превью раскладки берётся из единой логики internal/layout
(buildFileRows), без дублирования правил имён в шаблонах.
- Убраны meta-refresh и инлайн-стили; copyHash на vanilla с fallback
на execCommand и честной индикацией (целевой деплой — HTTP LAN).
Вне scope (отдельный change): живые обновления прогресса и раздел
раздачи, клиентский режим ручной раскладки файл→серия (с Alpine.js).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>