7eb7b3d0c8
Snapshot de WIP acumulado de sesiones previas antes de merge wave 1 del flow 0008 (kanban_cpp + agent_runner_api + DoD schema). Incluye: - dev/flows/0008-kanban-cpp-and-agent-workflows.md - dev/issues/0112-0119*.md (7 sub-issues) - WIP previo en cmd/fn/doctor.go, registry/*, modules/, cpp/, etc. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
4.3 KiB
4.3 KiB
id, title, status, type, domain, scope, priority, depends, blocks, related, created, updated, tags, flow
| id | title | status | type | domain | scope | priority | depends | blocks | related | created | updated | tags | flow | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0115 | Funcion agent_launch_worktree: crear worktree + spawn claude headless | pendiente | feature |
|
registry | alta |
|
|
2026-05-18 | 2026-05-18 |
|
0008 |
0115 — Funcion agent_launch_worktree
Problema
agent_runner_api (0113) tiene que: (1) crear worktree, (2) spawn claude --headless, (3) tail stderr para capturar status, (4) cleanup en abort. Esa logica ya esta inline en:
.claude/skills/parallel-fix-issues/(bash)fn-orquestadoragent (issue 0069)- futura
agent_runner_api
2x repeticion -> promover a funcion del registry (regla
delegation.md).
Decision
Funcion Go nueva agent_launch_worktree_go_infra (impure) en functions/infra/. API:
package infra
type WorktreeLaunchConfig struct {
RepoRoot string // path al main repo
Branch string // "auto/<issue>-<slug>"
WorktreePath string // "../wt-<run_id>" o absoluto
Prompt string // prompt para claude -p
LogPath string // donde escribir stderr+stdout
Env map[string]string // PATH, HOME, etc.
SkipPerms bool // pasa --dangerously-skip-permissions
ResetIfExists bool // si branch ya existe, reset --hard a master
}
type WorktreeLaunchResult struct {
PID int
Branch string
WorktreePath string
LogPath string
StartedAt int64
Error string // vacio si OK
}
func AgentLaunchWorktree(cfg WorktreeLaunchConfig) WorktreeLaunchResult
Comportamiento:
cd RepoRoot.- Si
ResetIfExistsy branch existe:git branch -D Branch+git worktree remove --force WorktreePath(best-effort). git worktree add WorktreePath -b Branch master.cmd := exec.Command("claude", args...)con stdin del Prompt, stderr+stdout aLogPath.cmd.Start()(no Wait — async).- Devuelve PID + path log.
Funcion hermana agent_cleanup_worktree_go_infra:
func AgentCleanupWorktree(repoRoot, branch, worktreePath string, pid int) error
Kill PID + remove worktree + delete branch.
Capability group agents
Crear docs/capabilities/agents.md listando:
agent_launch_worktree_go_infraagent_cleanup_worktree_go_infra- (futuro 0117)
dod_evidence_panel_cpp_viz - (futuro 0118)
agent_runs_timeline_cpp_viz - (futuro)
dod_validate_evidence_go_infra
Tag agents aplicado a las funciones. fn doctor capabilities valida.
Criterios de aceptacion
functions/infra/agent_launch_worktree.{go,md}registrado.functions/infra/agent_cleanup_worktree.{go,md}idem.params_schemayoutputcompletos en frontmatter..mdcumple contrato self-doc (## Ejemplocon args reales,## Cuando usarla,## Gotchas).- Tests
*_test.gocon repo temp + branch dummy + comando echo (sin claude real en CI). agent_runner_api(0113) usa estas funciones —uses_functionsdeclarado enapp.md.parallel-fix-issuesskill actualizada para invocar la funcion (no reescribir inline). O issue separado si scope.- Tag
agentsaplicado a ambas funciones. docs/capabilities/agents.mdcreado con tabla + ejemplo canonico end-to-end.fn doctor capabilitieslista grupoagentssin drift.fn doctor uses-functionslimpio en consumers.
Gotchas
git worktree addcon branch existente FALLA.ResetIfExists=truecubre el caso reanudar defn-orquestador.- Worktrees comparten
.git/hooks/. Documentar en## Gotchasdel.md. claude --headlessno acepta TTY.cmd.Stdin = strings.NewReader(prompt). NO usarcmd.StdinPipe()sin cerrar.- Subprocess vive horas. NO esperar Wait sincrono — devolver PID y dejar al caller monitorear.
- Path absoluto vs relativo: si
WorktreePathes relativo, se resuelve respecto aRepoRoot. Documentar. Envdebe incluirPATHque contengaclaudebinary. Service systemd-user no hereda PATH interactivo por defecto.
Out of scope
- Logica TBD merge (vive en
agent_runner_api/handlers.go). - Watchdog/timeout (vive en
agent_runner_api). - Telemetria de run (vive en
agent_runstable).