Статус на 2026-04-18: infrastructure ~95%, real-agent coverage ~20%, end-to-end validated = 0.
Цель: за минимальное число шагов дойти до одного успешного live-прогона через ageflow против реального GH issue.
| Pipeline | Узел | Статус |
|---|---|---|
| feature | plan | ✅ real defineAgent (engineering-software-architect, codex) |
| build | ||
| test | ||
| verify | ✅ real defineAgent (engineering-code-reviewer, codex) |
|
| ship | ||
| bugfix | triage | |
| reproduce | ||
| fix | ||
| test | ||
| verify | ✅ real defineAgent (testing-reality-checker, codex) |
|
| ship | ||
| docs | draft / review / publish | |
| release | bump / publish / changelog / cleanup | defineFunction) |
3 из 15 узлов реальные. Инфраструктура готова: executor, budget tracker, learning hooks, sqlite store, codex runner, 7 ролей в packages/dev-workflow/roles/.
Убрать dry-stub'ы из worktree helper и вызывать create/remove в run.ts. Добавить budget cap.
packages/dev-workflow/shared/worktree.ts
Заменить console.log-и в createWorktree и removeWorktree на реальные execa-вызовы:
await execa("git", ["worktree", "add", path, "-b", branch, base], { cwd: repoRoot });
await execa("git", ["worktree", "remove", path, "--force"], { cwd: repoRoot });packages/dev-workflow/run.ts
Обернуть executor в try/finally с create/remove worktree:
const worktree = await createWorktree(REPO_ROOT, issue);
const input: WorkflowInput = { ...otherFields, worktreePath: worktree };
try {
const result = await executor.run(input);
// ...
} finally {
await removeWorktree(REPO_ROOT, issue.number);
store.close();
}Добавить budget cap:
const budgetTracker = new BudgetTracker({ maxUsd: 5, onExceeded: "halt" });- Обновить
worktree.test.ts— mock execa, убедиться чтоcreateWorktreeвызывает git с правильными args - Smoke:
bun run dev-workflow --dry-run 194должен по-прежнему работать
@ageflow/dev-workflow 0.0.7 → 0.0.8 (private)
Сделать docs pipeline работающей от начала до конца. Минимальный контур для проверки createLearningHooks + real trace rows + reflection.
packages/dev-workflow/roles/engineering-technical-writer.md — ~50 строк, пишет markdown на основе issue body + spec path.
draft→defineAgent(technical-writer, codex)— пишет docs на основе issue.bodyreview→defineAgent(engineering-code-reviewer, codex)— gate APPROVED/NEEDS_WORKpublish→defineFunction→git add docs/...+ commit + push +gh pr create
- Создать тестовый issue "docs: add short usage example to @ageflow/learning README"
bun run --filter @ageflow/dev-workflow dev-workflow <N>(без--dry-run)- Budget cap $3
- Ожидаемый результат: PR открыт, trace в
.ageflow/learning.sqlite(minimum 3 task_traces)
@ageflow/dev-workflow 0.0.8 → 0.0.9 (private)
build + test + ship реальные. feature end-to-end валиден.
build→defineAgent(engineering-senior-developer, codex)+ session (для возможных retry после test FAIL)test→defineFunction— спавнитbun testв worktree, возвращает{passed: boolean, output: string}ship→defineFunction—git add .+ commit с conventional-commits title + push +gh pr create
Session на build: нужна только если тест FAIL → build агент получает retry с test output в context. Альтернатива: loop-узел с cap=3. Выбор: session (проще для MVP, loop — потом если потребуется).
- Найти маленький feature issue ($5 cap)
- Цель — чтоб plan → build → test → verify → ship отработали и PR открылся
@ageflow/dev-workflow 0.0.9 → 0.0.10
Самая сложная часть. Session design для fix→test→fix итерации.
triage→defineFunction(label-classifier — не агент). Возвращает{severity, affectedPackages}reproduce→defineAgent(senior-developer, codex)— пишет failing test в worktreefix→defineAgent(senior-developer, codex)+ session continuation от reproduce — исправляет код, может итерировать при test FAILtest→defineFunction(тот же что в feature)ship→defineFunction(тот же что в feature)
reproduce.session = "bugfix" и fix.session = "bugfix" — continuation. Это проверяет SessionManager в executor.
- Взять существующий баг ($5-8 cap)
- Успех: PR открыт, failing test → fix → passing test
@ageflow/dev-workflow 0.0.10 → 0.0.11
Детерминированные defineFunction узлы. Не агенты.
bump→defineFunction— обновляет package.json versions по списку changed packageschangelog→defineFunction— append секции вCHANGELOG.md(или создание)publish→defineFunction—npm publishв dependency order (см. таблицу вageflow-orchestrator.md)cleanup→defineFunction—git tag, optional worktree remove
@ageflow/dev-workflow 0.0.11 → 0.0.12
После 10 реальных прогонов (ожидаем ~3 docs + 5 feature/bugfix + 2 release):
- Audit
.ageflow/learning.sqlite— топ failure modes - Cross-reference с issues label
from-dogfood - Топ-5 паттернов → roadmap items
- Reflection-generated skill records → в role prompts
Отдельный docs PR, без кода.
Если надо сегодня одного live-прогона:
PR A + PR B = MVP. ~2-3 часа агентного времени + $3-5 LLM. docs pipeline полностью рабочая, feature/bugfix — следующими подходами.
PR C, D — потом. PR E — когда появится release-процесс, которым хочется пользоваться. PR F — после 10 прогонов.
testузел =defineFunction, не агент. Детерминированныйbun testнадёжнее чем LLM-парсинг stdout.shipузел =defineFunction, не агент. Механика git/gh не нуждается в LLM.fixиспользует session (continuation от reproduce), не loop. Loop добавим позже если session не хватит.triage= defineFunction (label-classifier), не агент с отдельной ролью. Агенты дороже и для классификации избыточны.- Budget cap по умолчанию = $5. Переопределяется через
--budget <N>flag (добавить вrun.ts). - Runner = только codex (уже установлено). Claude добавляем позже если потребуется мультиагентные пайплайны.
- Нужен ли
engineering-technical-writerроль для docs, или переиспользоватьengineering-senior-developer? (предложение: отдельная, короткая) - Где хранить шаблоны PR titles/bodies? (предложение: в
shared/pr-templates.ts, отдельный файл) - Worktree naming: текущий шаблон
<repo>-wt-<issue>подходит? Или переместить в.claude/worktrees/для консистентности с существующими?