Files
nixos/.agent/src/WORKFLOW.md
T
oqyude 16644fcc0b metaagent: install v3.0.0, migrate docs/arch/* → .agent/
- install.sh: .agent/src/ (PROTOCOLS, COMMANDS, TEMPLATES, install.sh/ps1, GUIDE)
- .temp/ добавлен в .gitignore
- .agent/checkpoints.json: phases.init=completed, project_type=existing
- .agent/rules/project-rules.md: R1-R5 (инварианты, ловушки, куда лезть, проверки)
- .agent/context/analysis-report.md: стек, архитектура, конвенции, кандидаты CI
- .agent/context/project-state.md: сжатый слепок (хосты, сервисы, ADR)
- .agent/roadmap/sources.md: открытые вопросы слоёв 0-11 (бывший invariants.md)
- .agent/tasks/manifest.{json,md}: 16 задач A1-F + 23 в backlog
- .agent/decisions/0001-sops-secrets-paths.md: ADR для инварианта S1
- AGENTS.md: metaagent-шапка + сжатая выжимка nixos (yaml frontmatter сохранён)
- удалены docs/arch/{map,invariants,todo}.md
2026-10-09 20:37:14 +03:00

7.0 KiB
Raw Blame History

WORKFLOW — Сквозной пример сессии v3.0


Сценарий: рефакторинг auth-модуля

Цель: Вынести логику из auth/login.py (450 строк, монолит) в отдельные модули auth/router.py, auth/schemas.py, auth/deps.py.

Целевой репозиторий: github.com/example/fastapi-app

Пользователь: «Вынеси авторизацию в отдельные модули».

MetaAgent: v3.0.0


PROJECT LOOP

INIT

Агент читает AGENTS.md, переходит в .agent/src/GUIDE.md. Понимает цикл. Создаёт .agent/, копирует исходники, инициализирует checkpoints.json:

{
  "metaagent_version": "3.0.0",
  "session_id": "ses_v30_001",
  "target_repo": "/tmp/fastapi-app",
  "goal": "Вынести авторизацию в auth/{router,schemas,deps}.py",
  "project_type": null,
  "phases": {
    "init": "completed",
    "analyse": "pending",
    "roadmap": "pending",
    "design": "pending",
    "decomposition": "pending",
    "execution": "pending",
    "metastate": "pending",
    "handoff": "pending"
  },
  "tasks": [],
  "last_updated": "2026-10-08T15:00:00Z"
}

ANALYSE

Агент сканирует проект:

  • Стек: Python 3.12, FastAPI, SQLAlchemy, pytest.
  • auth/login.py — 450 строк, монолит (цель рефакторинга).
  • Тесты: 48 passed (baseline).

Создаёт:

  • .agent/context/analysis-report.md
  • .agent/context/project-state.md (начальный)

checkpoints.json: project_type = "existing", phases.analyse = "completed".

ROADMAP

  • FUTURE/ — пусто.
  • .agent/decisions/ — пусто.
  • Единственный источник — пользовательский запрос.

Создаёт .agent/roadmap/sources.md:

## User Requests
| Вынести авторизацию | P0 | user:direct |

## Consolidated Priority Queue
1. Вынести auth/ (user:direct) — P0

phases.roadmap = "completed".

DESIGN

Пропускается (existing-проект). phases.design = "skipped".

DECOMPOSITION

Задачи:

{
  "tasks": [
    {
      "id": "T1",
      "title": "Создать auth/router.py",
      "origin": "user:direct",
      "files": ["app/auth/router.py"],
      "depends_on": [],
      "acceptance_criteria": [
        "Роуты авторизации вынесены из auth/login.py",
        "auth/router.py экспортирует router",
        "Существующие тесты проходят"
      ],
      "status": "pending"
    },
    {
      "id": "T2",
      "title": "Создать auth/schemas.py",
      "origin": "user:direct",
      "files": ["app/auth/schemas.py"],
      "depends_on": ["T1"],
      "acceptance_criteria": [
        "Pydantic схемы вынесены в auth/schemas.py",
        "Существующие тесты проходят"
      ],
      "status": "pending"
    },
    {
      "id": "T3",
      "title": "Создать auth/deps.py",
      "origin": "user:direct",
      "files": ["app/auth/deps.py"],
      "depends_on": ["T1"],
      "acceptance_criteria": [
        "Dependency injection функции вынесены в auth/deps.py",
        "Существующие тесты проходят"
      ],
      "status": "pending"
    }
  ]
}

phases.decomposition = "completed".


WORK LOOP (первая итерация)

EXECUTION — задача T1

  1. Берёт T1 (pending, нет зависимостей).
  2. status = "in_progress".
  3. Создаёт app/auth/router.py — переносит роуты.
  4. Тесты: 48/48.
  5. Коммит: abc1234 — refactor: extract auth router.
  6. Создаёт request:
{
  "request_id": "req-T1",
  "task_id": "T1",
  "title": "Создать auth/router.py",
  "status": "ready_for_review",
  "goal": "Вынести роуты авторизации",
  "changes": {
    "summary": "Роуты авторизации вынесены из auth/login.py в auth/router.py",
    "commits": ["abc1234"],
    "files_changed": ["app/auth/router.py", "app/auth/__init__.py", "tests/test_auth_router.py"]
  },
  "verification": { "tests_passed": "48/48", "lsp_clean": true },
  "fulfills_ac": ["Роуты вынесены", "Тесты проходят"]
}
  1. T1 → completed.

EXECUTION — задача T2

Создаёт auth/schemas.py, request req-T2. T2 → completed.

EXECUTION — задача T3

Создаёт auth/deps.py, request req-T3. T3 → completed.

Задачи закончились. Агент ждёт команду.


METASTATE (по команде пользователя)

Пользователь: «обнови метасостояние».

  1. Ревью requests: три request-а, все approved.

    • req-T1, req-T2, req-T3 → .agent/requests/archive/.
  2. Архивация задач:

    • T1, T2, T3 → .agent/archive/tasks/.
    • В manifest.json — one-liner: status: "archived".
  3. Обновление project-state.md:

    ## Key Modules
    | Module | Status | Description |
    |--------|--------|-------------|
    | app/auth/router.py | new | Вынесенные роуты |
    | app/auth/schemas.py | new | Pydantic схемы |
    | app/auth/deps.py | new | Dependency injection |
    
  4. Создание handoff-summary.md:

    ## Session Summary
    **Goal:** Рефакторинг авторизации
    **Completed:** 3/3 tasks
    **Approved requests:** req-T1, req-T2, req-T3
    
    ## Project State
    auth разбит на router + schemas + deps.
    Исходный auth/login.py: 450 → 120 строк.
    
    ## Next Steps
    - Проверить, не осталось ли прямых импортов из старого login.py
    - Обновить main.py если нужно
    

HANDOFF

HANDOFF COMPLETE

Session: ses_v30_001
Target: /tmp/fastapi-app
Type: existing
Tasks: 3/3 completed

Следующий агент начинает с .agent/handoff-summary.md

Использование команд в процессе

В любой момент сессии пользователь мог вызвать:

  • «запиши это как ADR» → COMMANDS/adr.md создал бы .agent/decisions/001-modular-auth.md.
  • «red team» → COMMANDS/red-team.md создал бы .agent/context/red-team-report.md с попыткой сломать новую структуру.
  • «risk register» → COMMANDS/risk-register.md зафиксировал бы допущения (например, «считаем, что порядок middleware не важен»).

Команды не обязательны. Если не вызваны — .agent/decisions/, risk-register.md, red-team-report.md не создаются.