Из инцидентов live-сессии 2026-05-30:
- шаг 4: file:line из vault-заметки НЕВЕРИФИЦИРОВАН — Read+confirm своими глазами
до вписывания в issue (incident: спека «перевести на JSON», код уже на JSON)
- шаг 7: status/ready только на финальном verified-теле, не «ready→переписываю»
(incident #697/#699 — воркер смержил по тонкому телу за ~30s)
- «поменяй лейблы» ⇒ также аудит+переписывание тонкого тела до ready
- _autonomous_pickup: dedup-before-create обязателен при параллельных окнах
(incident #724/#728 vs #726/#727), list_repo_issues всегда с фильтром (token-limit)
- work-as-analyst: один loop-механизм, CronDelete перед CronCreate
- fix stale cross-ref шаг 6 → шаг 8
Аналитик теперь пишет issue как готовый рабочий промт с единственным толкованием:
- Шаблон body: Задача (императив) + Контекст + Files (точные пути) + Сигнатуры +
Definition of Done (БИНАРНО: команда→результат) + Не делать (out of scope) + Risk + Depends.
- Преамбула issue: «Worker: исполняемый спек, выполняй буквально, неясность → коммент, не угадывай»
→ инструкция едет вместе со спеком (worker не реинтерпретирует).
- NO-AMBIGUITY GATE перед CREATE: перечитать глазами worker'а с нулевым контекстом — точные
идентификаторы (без плейсхолдеров <area>/«соответствующий»), бинарный DoD, единственное
толкование; иначе доуточнить или +needs-human, НЕ постить ready.
- Hard rules + work-as-analyst синхронизированы.
Воркеры (auto-backend/frontend) — CONTEXT LOAD + fixup loop проверены, не тронуты (качество сохранено).
#11: slash-commands и _autonomous_pickup.md теперь читают persistent User-scope
env vars напрямую (FORGEJO_TOKEN_<ROLE>) вместо file-based из ~/.claude/secrets/.
Один раз: scripts/setup-bot-env.ps1 (запускается user'ом локально, кладёт
токены из vault в Windows User registry). После этого окна grab credentials
через [System.Environment]::GetEnvironmentVariable() — никаких файлов.
Все 5 work-as-*.md обновлены (analyst/backend/frontend/reviewer/qa).
#12: stale-claim cleanup — cron каждые 30 минут.
- scripts/cleanup-stale-claims.sh — bash, parses Forgejo API + Python для JSON
- .forgejo/workflows/stale-claims.yml — cron schedule `*/30 * * * *`
Освобождает issues застрявшие в status/wip >4h:
- assignees=[]
- +status/ready -status/wip
- comment "stale claim released, worker likely crashed"
Использует secret FORGEJO_BOT_QA_TOKEN (минимум прав = write:issue).
Setup: secret нужно завести в Forgejo Actions UI после merge —
git.gendsgn.ru/lekss361/gendesign/-/settings/actions/secrets.
Refs: PRs #608, #609. Closes TODO с PR #608 (stale-claim cron).
Phase 2 prep для autonomous multi-window workflow (Phase 1 — PR #608).
Изменения:
1. `.claude/agents/_autonomous_pickup.md` — добавлена Pre-flight checklist:
- Шаг 1: где взять PAT из vault meta/00_credentials.md
- Шаг 2: env vars + git identity (GIT_AUTHOR_NAME/EMAIL — критично!)
- Шаг 3: bot-remote setup (отдельный remote с bot's PAT для audit log)
- Шаг 4: sanity check identity (curl /user → должен вернуть bot-<role>)
Без этого commits писались бы под lekss361, не под ботом.
2. `.claude/commands/work-as-*.md` (5 файлов) — slash-commands для запуска окон:
- work-as-analyst (sonnet, /loop 30m)
- work-as-backend (sonnet, /loop dynamic)
- work-as-frontend (sonnet, /loop dynamic)
- work-as-reviewer (opus, /loop 5m)
- work-as-qa (sonnet, /loop 10m)
Каждый command:
- Описывает pre-flight для конкретной роли
- Ссылается на соответствующий .claude/agents/auto-*.md
- Перечисляет hard rules для роли
- Объясняет per-tick workflow
3. Forgejo labels (16 шт, созданы через REST API — не в этом diff):
scope/{backend,frontend,db,qa,devops}
status/{ready,wip,review,qa,done,blocked}
priority/{p0,p1,p2}
pause-bots, needs-human
Что осталось для активации:
- 5 Forgejo bot-users + PATs (уже созданы 2026-05-27, см. vault)
- ~/.claude/secrets/forgejo-bot-*.token — выгрузка PAT'ов из vault user'ом вручную
- Stale-claim cron (отдельный PR)
- Optional: multi-window launcher через tmux/wezterm
Refs: PR #608 (Phase 1), runbooks/multi_agent_autonomous_workflow.md