O estado da missão vive em ~/.factory/missions/<uuid>/ — não no chat. Mapa de arquivos e os três contratos que importam.
Cada missão ganha uma pasta em ~/.factory/missions/<session-uuid>/. O UUID da pasta coincide com a tag missionId da sessão orquestradora; state.json também traz id público como mis_e6fd3d67.
Três arquivos formam a espinha dorsal:
validation-contract.md — assertions comportamentais (VAL-AUTH-001, etc.). Fonte de verdade de "pronto". Escrito antes de fixar features.
features.json — fila de trabalho. Cada feature tem id, skillName, milestone e array fulfills ligando a assertion IDs. Invariante: cada assertion é reivindicada por exatamente uma feature.
handoffs/*.json — retorno estruturado do worker com salientSummary, commitId, skillFeedback e notas de verificação. Validators leem isso mais git diffs e transcripts.
Pense como… um processo jurídico. O contrato de validação é a lista do que precisa ser provado. features.json é a fila atribuindo quem prova cada item. Handoffs são depoimentos de cada contratado — não o veredito final.
Bootstrap mínimo: state.json, working_directory.txt, mission.md, features.json, progress_log.jsonl. Também: AGENTS.md, architecture.md, services.yaml, library/, skills/<type>/SKILL.md, validation-state.json, validation/<milestone>/, evidence/<milestone>/, worker-transcripts.jsonl.
Missão 2382c4e6-f93d-4cb1-b94c-c1bfaf86c2c0 ficou em planning com pasta quase vazia — útil como evidência de bootstrap, não exemplo maduro.
Schemas representativos — consolidados de strings do binário, custom droids e docs de arquitetura Factory.
{
"features": [{
"id": "feat-auth-login",
"description": "Implement login form and session cookie",
"skillName": "backend-worker",
"milestone": "foundation",
"fulfills": ["VAL-AUTH-001", "VAL-AUTH-002"],
"status": "pending",
"workerSessionIds": []
}]
}
validation-contract.md (excerpt)
### VAL-AUTH-001: Successful login
A user with valid credentials submits the login form
and is redirected to the dashboard.
Tool: agent-browser
Evidence: screenshot, network(POST /api/auth/login -> 200)
handoffs/<session>.json (protocol fields)
{
"salientSummary": "...",
"whatWasImplemented": "...",
"whatWasLeftUndone": "...",
"verification": "...",
"commitId": "abc123",
"skillFeedback": { "followedProcedure": true }
}
ls -la ~/.factory/missions/ cat ~/.factory/missions/<uuid>/state.json jq . ~/.factory/missions/<uuid>/features.json
Selecione um arquivo na pasta da missão. Veja o papel e um trecho de exemplo.