Mission (Droid) + Workflow (Claude) + Swarm (Kimi) — mecânica extraída, UIs não copiadas — unificados em alembic.plan.ts sob Loop Engineering.
A Fase 1 do blind planning exige três REs independentes (RE-A Missions, RE-B Workflows, RE-C AgentSwarm). A Fase 2 funde em verbos Alembic — não um Frankenstein de UIs.
Acorde Mission (Droid): validation-contract antes do run; runner programático; sessão fresca por unit; validators no milestone; handoff JSON.
Acorde Workflow (Claude): alembic.plan.ts determinístico com phase(), agent(), parallel(); resume cache; sem Date.now() no corpo.
Acorde Swarm (Kimi): prompt_template + items[]; rampa 5+700ms; exclusive-deny; wire.jsonl por subagente.
Pense como… transcrever partituras de três bandas — não o palco deles. Alembic escreve uma partitura nova que chama os três movimentos numa só execução.
RE-A ≥500 linhas · RE-B ≥800 · RE-C ≥700. Cada claim comportamental: string do binário + path em disco ou linha do brightdata scrape.
| Primitivo | Missions | Workflows | Swarm | Alembic |
|---|---|---|---|---|
| Unidade atômica | Feature | agent() | items[] | Unit / task |
| Paralelismo | Validação milestone | parallel() cap 16 | rampa 5+700ms | configurável |
| Estado | ~/.factory/missions/ | script + cache | wire.jsonl | ~/.alembic/runs/ |
export const meta = { name: '...', phases: ['discover','build','prove'] } as const;
export async function run(h: AlembicHooks) {
await h.phase('discover', () => h.swarm({
promptTemplate: 'Audit {{item}} read-only',
items: ['api','ui','tests']
}));
if (await h.council({ board: 'tech-council', question: '...' }) === 'NO_GO') return;
await h.phase('build', () => h.mission({
units: [{ id: 'schema', proof: ['pnpm test'] }]
}));
}
Regras de fusão R1–R5
R1 validation-contract before runner R2 deterministic script body R3 swarm exclusive per turn R4 Council NO_GO → zero workers R5 Validator ≠ builder
~/.factory/missions/<uuid>/export const meta · phase(name, fn) · resumeFromRunId · cap 16 · sem Date.now()