feat(claude): Phase 2 — slash-commands + pre-flight + Forgejo labels #609

Merged
lekss361 merged 1 commit from feat/claude-phase2-labels-commands into main 2026-05-27 20:59:33 +00:00
Owner

Summary

Phase 2 prep для autonomous multi-window workflow. Завершает фундамент чтобы запустить bot-окна.

Что в этом PR

  • Pre-flight checklist в _autonomous_pickup.md (4 шага):

    • Где взять PAT из vault meta/00_credentials.md
    • Env vars setup (FORGEJO_TOKEN, BOT_USERNAME, FORGEJO_URL, FORGEJO_REPO)
    • Git identity (GIT_AUTHOR_NAME/EMAIL) — критично, иначе commits под lekss361
    • Bot-remote setup (отдельный remote с bot's PAT для audit log)
    • Sanity check identity
  • 5 slash-commands в .claude/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 содержит role-specific pre-flight + workflow + hard rules.

Что НЕ в этом PR (создано вне диффа)

  • 16 Forgejo labels созданы через REST API:

    • scope/* (backend/frontend/db/qa/devops)
    • status/* (ready/wip/review/qa/done/blocked)
    • priority/* (p0/p1/p2)
    • pause-bots (kill-switch)
    • needs-human (escalation)
  • 5 Forgejo bot-users + PATs созданы ранее через SSH gitea CLI (2026-05-27).
    Credentials в vault meta/00_credentials.md (sensitive, не в git).

Что нужно для активации Phase 2 (после merge этого PR)

  1. User вручную выгружает 5 PAT'ов из vault в ~/.claude/secrets/forgejo-bot-*.token
  2. Открывает 5 окон Claude Code (или 2 для пилота: analyst + backend)
  3. В каждом окне выполняет pre-flight (см. _autonomous_pickup.md)
  4. Вводит /work-as-<role> для загрузки persona
  5. Вводит /loop <cadence> для старта autonomous polling

Что НЕ сделано (отдельные PRs)

  • Stale-claim cron — TODO из Phase 1, scripts/cleanup-stale-claims.sh
  • Multi-window launcher (optional) — tmux/wezterm config
  • SQL workflow contract section в _autonomous_pickup (обсуждалось, не имплементировано)

Test plan

  • Verify Forgejo labels exist via UI (16 шт)
  • Verify slash-commands видны в claude (autocomplete /work-as-)
  • PAT-leak scan: git diff main не содержит 40-char hex
  • Run /work-as-backend в test окне → pre-flight инструкции читабельны
  • Test: env vars set + curl /user возвращает bot-backend

Refs

  • PR #608 (Phase 1 — agent stubs)
  • vault: runbooks/multi_agent_autonomous_workflow.md
  • vault: meta/00_credentials.md (bot PATs, sensitive)
  • vault: events/Event_AutoAgents_Phase1_Merged_May27.md
## Summary Phase 2 prep для autonomous multi-window workflow. Завершает фундамент чтобы запустить bot-окна. ### Что в этом PR - **Pre-flight checklist** в `_autonomous_pickup.md` (4 шага): - Где взять PAT из vault meta/00_credentials.md - Env vars setup (FORGEJO_TOKEN, BOT_USERNAME, FORGEJO_URL, FORGEJO_REPO) - **Git identity** (GIT_AUTHOR_NAME/EMAIL) — критично, иначе commits под lekss361 - **Bot-remote** setup (отдельный remote с bot's PAT для audit log) - Sanity check identity - **5 slash-commands** в `.claude/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 содержит role-specific pre-flight + workflow + hard rules. ### Что НЕ в этом PR (создано вне диффа) - **16 Forgejo labels** созданы через REST API: - scope/* (backend/frontend/db/qa/devops) - status/* (ready/wip/review/qa/done/blocked) - priority/* (p0/p1/p2) - pause-bots (kill-switch) - needs-human (escalation) - **5 Forgejo bot-users + PATs** созданы ранее через SSH gitea CLI (2026-05-27). Credentials в vault `meta/00_credentials.md` (sensitive, не в git). ### Что нужно для активации Phase 2 (после merge этого PR) 1. User вручную выгружает 5 PAT'ов из vault в `~/.claude/secrets/forgejo-bot-*.token` 2. Открывает 5 окон Claude Code (или 2 для пилота: analyst + backend) 3. В каждом окне выполняет pre-flight (см. `_autonomous_pickup.md`) 4. Вводит `/work-as-<role>` для загрузки persona 5. Вводит `/loop <cadence>` для старта autonomous polling ### Что НЕ сделано (отдельные PRs) - **Stale-claim cron** — TODO из Phase 1, `scripts/cleanup-stale-claims.sh` - **Multi-window launcher** (optional) — tmux/wezterm config - **SQL workflow contract section** в _autonomous_pickup (обсуждалось, не имплементировано) ### Test plan - [ ] Verify Forgejo labels exist via UI (16 шт) - [ ] Verify slash-commands видны в `claude` (autocomplete `/work-as-`) - [ ] PAT-leak scan: `git diff main` не содержит 40-char hex - [ ] Run `/work-as-backend` в test окне → pre-flight инструкции читабельны - [ ] Test: env vars set + curl /user возвращает bot-backend ### Refs - PR #608 (Phase 1 — agent stubs) - vault: `runbooks/multi_agent_autonomous_workflow.md` - vault: `meta/00_credentials.md` (bot PATs, sensitive) - vault: `events/Event_AutoAgents_Phase1_Merged_May27.md`
lekss361 added 1 commit 2026-05-27 20:51:29 +00:00
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
Author
Owner

Deep Code Review — PR #609 verdict

Summary

  • Status: APPROVE (advisory notes below)
  • 🚨 Self-extending: HUMAN MERGE REQUIRED — PR редактирует .claude/agents/_autonomous_pickup.md + добавляет .claude/commands/work-as-*.md (это часть bot-infrastructure). Auto-merge skipped per policy.
  • Files: 6 (само-расширяющие — .claude/agents + .claude/commands)
  • Lines: +361 / -12
  • Cross-ref: строится на PR #608 (merged) — все референсы на auto-*.md реальны.

🔴 Critical (BLOCK)

Нет.

🟠 High / 🟡 Medium

Нет блокирующих. Ниже только 🟡/🟢 advisory.

🟡 Minor (non-blocking)

  1. work-as-reviewer.md line ~24 — MINOR verdict marker implicit. Буллет 🟡 MINOR → advisory comment с marker + APPROVE + merge не явно указывает verdict=comment. Из canonical format сразу ниже видно (approve|changes|comment), но стоит уточнить в bullet, чтобы auto-code-reviewer не путал verdict
    при MINOR с verdict=approve.

  2. Границы self-extending guard уже. auto-code-reviewer.md (из PR #608) перечисляет .claude/rules/git-pr.md, CLAUDE.md, auto-code-reviewer.md, 40-char hex. Не покрывает:

    • .claude/commands/work-as-*.md (это реальные entry-points autonomous workflow)
    • .claude/agents/_autonomous_pickup.md (shared snippet, меняет логику claim/race-check)
    • Остальные auto-*.md (auto-backend tools list может быть расширен до execute_sql враждебным PR)

    Рекомендую после merge открыть follow-up PR расширяющий self-extending guard: любой diff trogaet .claude/agents/auto-*.md|_autonomous_pickup.md или .claude/commands/work-as-*.md → +needs-human.

  3. ~/.claude/secrets/ gitignore relies on ~/.gitignore_global. Практически безопасно — home dir обычно не git repo. Но инструкция говорит верь что в ~/.gitignore_global без верификации. Consider: add Step проверяющий test -d ~/.git || echo OK или ужесточить до OS keychain в будущем.

  4. work-as-qa.md Playwright check не actionable. в Claude session проверь что mcp__playwright__* tools есть в available — bot не имеет способа это проверить programmatically. Лучше: попытаться mcp__playwright__browser_close без args — expect error vs ToolNotFound — или убрать проверку вовсе (fail-fast на первом smoke).

🟢 Positive

  • Pre-flight 4-step ritual закрывает все audit-log дыры: GIT_AUTHOR_NAME/EMAIL + отдельный forgejo-bot remote с bot's PAT (чтобы push писался не под lekss361)
  • Sanity check 4a verify PAT.login == BOT_USERNAME — ловит подсунутый чужой PAT до запуска /loop
  • PAT leak scan clean — grep [a-f0-9]{40} по diff пустой, placeholders всюду (<PAT-FROM-VAULT>)
  • execute_sql restriction явный в work-as-backend.md и work-as-reviewer.md — дублирует tool-list gate из PR #608 (defense in depth)
  • SHA guard в work-as-reviewer.md перед merge — ловит stale verdict после fixup-push
  • Self-extending hard-rule намеренно встроена в reviewer persona (бот не расширяет свои права)
  • Race-window в _autonomous_pickup.md честно задокументирован — STRICT verify (assignees==[me]), rollback at lost race
  • Stale-claim TODO честно отмечен как not-implemented (не скрыто)
  • Kill-switch pause-bots label-driven, первый step каждого tick
  • Slash-command frontmatter (name: + description:) matchает Claude Code spec

Cross-file impact

  • _autonomous_pickup.md именно shared snippet, изменение pre-flight влияет на все 5 auto-*.md персон — это by design (они читают его via reference, не copy-paste)
  • Slash-commands ссылаются на ~/.claude/secrets/forgejo-bot-<role>.token — эти файлы не в git никогда, выгружаются вручную из vault meta/00_credentials.md
  1. Human merge (self-extending policy)
  2. Follow-up PR: расширить self-extending guard в auto-code-reviewer.md + (новый) work-as-reviewer.md — add .claude/commands/work-as-*.md, .claude/agents/auto-*.md, .claude/agents/_autonomous_pickup.md в hard-rule list
  3. Перед запуском bot-окон — проверить что в vault meta/00_credentials.md PAT'ы действительно созданы (PR утверждает что это сделано 2026-05-27)
  4. После merge: pilot run 2 окна (analyst + backend) прежде чем поднимать все 5

Complexity / blast radius

  • Risk: low — файлы в .claude/, не production code, не affect runtime
  • Reversibility: high — revert PR выкидывает slash-commands, возвращает pickup-md к предыдущему виду
  • Merge window: любое — боты не запускаются автоматически после merge (user вручную выгружает PAT'ы + запускает /work-as-X)

Reviewed by deep-code-reviewer (read-only). Мердж самостоятельно скипнут — self-extending PR требует human merge.

<!-- gendesign-review-bot: sha=018eb1e verdict=approve --> ## Deep Code Review — PR #609 verdict ### Summary - Status: **✅ APPROVE** (advisory notes below) - 🚨 **Self-extending: HUMAN MERGE REQUIRED** — PR редактирует `.claude/agents/_autonomous_pickup.md` + добавляет `.claude/commands/work-as-*.md` (это часть bot-infrastructure). Auto-merge skipped per policy. - Files: 6 (само-расширяющие — .claude/agents + .claude/commands) - Lines: +361 / -12 - Cross-ref: строится на PR #608 (merged) — все референсы на `auto-*.md` реальны. ### 🔴 Critical (BLOCK) Нет. ### 🟠 High / 🟡 Medium Нет блокирующих. Ниже только 🟡/🟢 advisory. ### 🟡 Minor (non-blocking) 1. **`work-as-reviewer.md` line ~24 — MINOR verdict marker implicit.** Буллет `🟡 MINOR → advisory comment с marker + APPROVE + merge` не явно указывает `verdict=comment`. Из canonical format сразу ниже видно (`approve|changes|comment`), но стоит уточнить в bullet, чтобы auto-code-reviewer не путал verdict при MINOR с verdict=approve. 2. **Границы self-extending guard уже.** `auto-code-reviewer.md` (из PR #608) перечисляет `.claude/rules/git-pr.md`, `CLAUDE.md`, `auto-code-reviewer.md`, 40-char hex. Не покрывает: - `.claude/commands/work-as-*.md` (это реальные entry-points autonomous workflow) - `.claude/agents/_autonomous_pickup.md` (shared snippet, меняет логику claim/race-check) - Остальные `auto-*.md` (auto-backend tools list может быть расширен до `execute_sql` враждебным PR) Рекомендую после merge открыть follow-up PR расширяющий self-extending guard: любой diff trogaet `.claude/agents/auto-*.md|_autonomous_pickup.md` или `.claude/commands/work-as-*.md` → +needs-human. 3. **`~/.claude/secrets/` gitignore relies on `~/.gitignore_global`.** Практически безопасно — home dir обычно не git repo. Но инструкция говорит `верь что в ~/.gitignore_global` без верификации. Consider: add Step проверяющий `test -d ~/.git || echo OK` или ужесточить до OS keychain в будущем. 4. **`work-as-qa.md` Playwright check не actionable.** `в Claude session проверь что mcp__playwright__* tools есть в available` — bot не имеет способа это проверить programmatically. Лучше: попытаться `mcp__playwright__browser_close` без args — expect error vs ToolNotFound — или убрать проверку вовсе (fail-fast на первом smoke). ### 🟢 Positive - **Pre-flight 4-step ritual** закрывает все audit-log дыры: GIT_AUTHOR_NAME/EMAIL + отдельный `forgejo-bot` remote с bot's PAT (чтобы push писался не под lekss361) - **Sanity check 4a** verify PAT.login == BOT_USERNAME — ловит подсунутый чужой PAT до запуска `/loop` - **PAT leak scan clean** — grep `[a-f0-9]{40}` по diff пустой, placeholders всюду (`<PAT-FROM-VAULT>`) - **execute_sql restriction явный** в work-as-backend.md и work-as-reviewer.md — дублирует tool-list gate из PR #608 (defense in depth) - **SHA guard** в work-as-reviewer.md перед merge — ловит stale verdict после fixup-push - **Self-extending hard-rule** намеренно встроена в reviewer persona (бот не расширяет свои права) - **Race-window** в `_autonomous_pickup.md` честно задокументирован — STRICT verify (assignees==[me]), rollback at lost race - **Stale-claim TODO** честно отмечен как not-implemented (не скрыто) - **Kill-switch `pause-bots`** label-driven, первый step каждого tick - **Slash-command frontmatter** (`name:` + `description:`) matchает Claude Code spec ### Cross-file impact - `_autonomous_pickup.md` именно shared snippet, изменение pre-flight влияет на все 5 auto-*.md персон — это by design (они читают его via reference, не copy-paste) - Slash-commands ссылаются на `~/.claude/secrets/forgejo-bot-<role>.token` — эти файлы не в git никогда, выгружаются вручную из vault `meta/00_credentials.md` ### Recommended next steps 1. **Human merge** (self-extending policy) 2. Follow-up PR: расширить self-extending guard в `auto-code-reviewer.md` + (новый) `work-as-reviewer.md` — add `.claude/commands/work-as-*.md`, `.claude/agents/auto-*.md`, `.claude/agents/_autonomous_pickup.md` в hard-rule list 3. Перед запуском bot-окон — проверить что в vault `meta/00_credentials.md` PAT'ы действительно созданы (PR утверждает что это сделано 2026-05-27) 4. После merge: pilot run 2 окна (analyst + backend) прежде чем поднимать все 5 ### Complexity / blast radius - **Risk**: low — файлы в `.claude/`, не production code, не affect runtime - **Reversibility**: high — revert PR выкидывает slash-commands, возвращает pickup-md к предыдущему виду - **Merge window**: любое — боты не запускаются автоматически после merge (user вручную выгружает PAT'ы + запускает /work-as-X) --- _Reviewed by deep-code-reviewer (read-only). Мердж самостоятельно скипнут — self-extending PR требует human merge._
lekss361 merged commit 532b8cdda2 into main 2026-05-27 20:59:33 +00:00
Sign in to join this conversation.
No reviewers
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference: lekss361/gendesign#609
No description provided.