Pular para o conteúdo

Arquitetura

Um mapa do código de emet/src e como os prompts do /emet o conduzem. Os termos seguem o GLOSSARY.md; as decisões por trás desse formato ficam em docs/adr. Para problemas, veja a solução de problemas.

Forma

Há duas metades. Os prompts (commands/run.md, agents/*.md, emet/reference/*.md) dizem ao Claude o que fazer em cada fase. A CLI emet (emet/bin/emet.ts e emet/src/) faz tudo o que precisa ser determinístico: verificações, reivindicações, slots, gates, escritas no tracker e aterrissagem. Os prompts nunca reimplementam uma verificação que a CLI já faz.

emet/bin/emet.ts é um despachante fino: lê o primeiro argumento e repassa a um módulo de subcomando, que lê sozinho o restante de process.argv. Os códigos de saída têm significado em todos os subcomandos.

Como os prompts conduzem a CLI

commands/run.md é um roteador curto. Ele carrega um arquivo de fase de emet/reference/ por vez, de modo que uma compactação nunca perde as regras da fase atual.

Fase Prompt Chamadas à CLI
1-5 entrevista, spec, tickets, aprovação phases-1-5.md init, doctor, validate, surfaces, approve, tracker
6-7 despacho e workers phases-6-7-dispatch.md, worker-prompt.md preflight, claims, slots, launch, lock-reason, handoff, results
8 revisão, gate, aterrissagem, encerramento phases-8-closeout.md, reviewer-prompt.md verify, review-package, review, assess, gate, land, cleanup
9 handoff e encadeamento phases-9-handoff.md status, metrics, usage, spec-merge

O coordenador é o único que escreve no tracker (ADR-0005): os workers informam por meio de uma nota de handoff e do emet results, e o coordenador as publica. O emet guard roda como um hook PreToolUse e bloqueia gatilhos conhecidos de falhas em execuções sem supervisão.

Mapa de módulos

Cada módulo tem um *.test.ts ao lado.

Área Módulos
Configuração e auditoria init.ts (configuração e esqueleto de documentos), config.ts (emet.config.json, o forge.config.json legado ainda é lido), doctor.ts (varredura de frota), preflight.ts (higiene do despacho), dependencies.ts, skills.ts (contrato com o mattpocock-skills), map.ts (resumo do código)
Estado de execução claims.ts (reservas de tickets), slots.ts (pool de slots de workers), resources.ts (dados do host), runs.ts (atividade), locks.ts, lockreason.ts, proctree.ts, worktrees.ts, cleanup.ts, status.ts, launch.ts
Tracker tracker.ts, tracker-files.ts (tracker local .scratch/), validate.ts (cobertura da spec), specmerge.ts, approve.ts, surfaces.ts (sobreposição de superfícies de edição)
Handoff do worker handoff.ts, results.ts, materializelog.ts
Revisão e aterrissagem verify.ts, reviewpackage.ts, review.ts (livro de achados), assess.ts (classificador de risco), gate.ts, land.ts
Relatórios metrics.ts, usage.ts
Segurança guard.ts, guard-destructive.ts
Utilitários compartilhados narrow.ts, optional.ts, assets.ts (arquivos embutidos nos binários compilados)

Organização dos prompts

commands/run.md (cerca de 130 linhas) é o roteador do /emet. Cada arquivo de emet/reference/ é um grupo de fases (phases-1-5.md, phases-6-7-dispatch.md, phases-8-closeout.md, phases-9-handoff.md), carregado somente quando o modo da execução atual precisa dele. Um teste falha se qualquer um deles passar de 20.000 bytes, para que um único arquivo não tome conta do contexto depois de uma compactação. As fases instruem o coordenador a reler a seção relevante antes de cada rodada de correção ou revisão. O install.sh separa um antigo phases-6-9.md único como phases-6-9.md.retired quando você o editou ou ele é anterior ao manifesto de instalação, e o apaga caso contrário. O install.sh também conecta o emet guard em ~/.claude/settings.json como o hook PreToolUse.

Distribuição

O install.sh copia emet/ para ~/.claude/emet e reescreve os prompts. O caminho do plugin traz um shim que baixa um binário independente com checksum verificado, construído por tools/build-binaries.ts. Veja o ADR-0008.

Veja também