O curso inteiro cabe em um vocabulário. Aqui estão os termos canônicos do motor — cada um com definição, âncora real no código, a confusão que ele costuma causar e a prática que o fixa. É a carta de navegação para tudo que você leu de L0 a L4, mais um teste honesto para fechar.
Um termo mal entendido é um bug esperando para acontecer. Quando alguém acha que Result "às vezes lança", ou que o frontier "vê o corpus inteiro", ou que MAX_DEPTH é só uma sugestão, a próxima mudança de código quebra uma invariante sem perceber. Este glossário existe para que isso não aconteça.
Result never-throws) e por que tudo passa por ela.arquivo:linha). Quando você for tocar código que mexe num conceito, volte aqui antes — é mais barato reler a carta do que reaprender pelo bug.
As cinco camadas formam uma esteira: o item entra cru na L0, é processado pelo funil, passa por adapters (L1) que falam com modelos, é avaliado pelo council (L2), pode ser dividido em tarefas pelo swarm (L3), e tudo é orquestrado pelo harness (L4). Duas faixas atravessam todas: a factory (que constrói o próprio Alembic) e os cross-cutting (PII, budget, design).
As 5 camadas + a cintura que as une + as duas faixas transversais. Toda a engine fala apenas com a cintura.
Result, em qualquer lugar do sistema.Busque por nome (ex.: Result, MAX_DEPTH, verifier) ou filtre por camada. Cada carta traz a definição, as âncoras reais no código, a confusão comum e uma prática curta. Os termos abaixo são o vocabulário canônico do motor.
ModelRunResult = Success | Failure com discriminante ok: boolean. Toda operação que pode falhar — em especial chamadas de modelo — nunca lança e sempre devolve este tipo.Result; qualquer exceção interna vira failure tipado antes de subir.Result final é failure (e o circuit-breaker recebeu o feedback).{ id, run(input): Promise<ModelRunResult> }. Várias implementações (cliproxyapi, local, offline, retry, breaker, cost…). Todo o sistema — funnel, council, swarm, factory — fala apenas com esta interface.Result retornado.ModelAdapter compliant: validação → circuit-breaker → attempt → retry (com backoff) → feedback no breaker → Result (nunca throw).attempt.alembic distill … --offline sobre o fixture e conte quantos itens cada tier processou.ClaimOracle) sobre a evidência. Abaixo do mínimo de agentes válidos ou falha numa lente → NO-GO ou park T4.verifier-panel.test.ts e rode um GO com evidência zero → observe o veto de faithfulness.debate.ts:108-159 e simule um round de 3 membros; observe o contrarian recebendo as priorPhases.canSpawn.replayInto reconstrói o queue a partir do journal + park-ledger. Garante at-least-once sem double-spend em adapters pagos.done não re-executam.finally (sucesso, erro ou throw). Vazar worktree é erro grave.isolate:true e confirme que o worktree some mesmo se o comando falhar..inprogress → .complete/.failed). Usado para comandos longos que não devem bloquear o slot.runFunnel + EventBus. Clientes finos (CLI, HTTP/SSE, MCP RO, console) só injetam adapters/stores e consomem o bus. O kernel não sabe como é chamado.HarnessCore com adapters fake e chame runFunnel direto (sem CLI nem HTTP).runFunnel → runMarketingBatch (sinais verified-GO, PII-safe). Persiste cada AssetsManifest num store append-only content-addressed (Marketing/manifests.jsonl).distillAndMarket offline com budget suficiente e inspecione o manifests.jsonl.redactSignal + assertRedactedForEmit antes de qualquer chamada de modelo ou write em store.extractionInput, antes do adapter.run.costUsd.pricingModelId), nunca o override.budget:0 e confirme que T2/T3 não executam e o run é marcado como budget-exhausted.manifestId, alguns run dirs) para garantir idempotência.manifestId é idêntico.pnpm factory (com .env) e observe um ciclo planner → implementer → reviewer.Result never-throws, sem any, funções puras ≤50 loc, early return, named exports, 2 espaços, aspas simples, conventional commits. O Reviewer caça violações ativamente.Result ou usar any é defeito de arquitetura, não de formatação.docs/ e reprova low-contrast, texto minúsculo, em-dash em excesso, abas laterais, kickers repetidos e fontes proibidas. É o "council visual" do projeto.impeccable detect docs/ após editar qualquer página e corrija até exit 0.arquivo:linha de cada termo é o melhor lugar para começar a entender o conceito de verdade — abra o arquivo, leia o teste ao lado, rode a prática. A definição aqui é só o mapa; o código é o território.
Se você guardar um único conceito deste curso, que seja este. A cintura estreita é a razão de o Alembic ser confiável: existe um tipo — Result — pelo qual toda chamada que pode falhar passa, sempre, sem exceção lançada. Os dois cartões abaixo são a mesma ideia, em dois níveis.
ModelRunResult é uma união discriminada por ok. runWithGuards embrulha qualquer attempt que possa lançar com tryCatchAsync e converte exceções em { ok:false, error } tipado antes de retornar. Como o tipo de retorno público é Result, o compilador força o tratamento de ambos os ramos — não existe caminho "esqueci do erro".adapter.run(input) na camada L1.runWithGuards, tryCatchAsync captura a exceção.{ ok:false, error }.Result failure — nunca uma exceção — e segue o caminho fail-closed (não emite, não cobra).budget:0. Em que passo a chamada nem chega a tocar o provider? (Resposta: antes do passo 1 — o budget guard barra fail-closed.)Um colega quer "só dar um throw rápido" dentro de um adapter novo para sinalizar um input inválido, e tratar lá em cima. O que o Reviewer (e o tipo) vão dizer?
Result; um input inválido deve virar { ok:false, error } tipado, não uma exceção. Lançar quebra a cintura, fura o retry/breaker e cria um caminho de erro invisível ao compilador.Result<T,E> discriminado em ok — nunca lança. Exceções internas viram failure tipado antes de subir.runWithGuards (cross-cutting). O provider só implementa attempt; retry e breaker vivem no guard.HarnessCore é puro (runFunnel + EventBus). CLI, HTTP/SSE e MCP são só transportes finos que injetam adapters.O segundo grande conceito: o Alembic gasta pouco porque descarta cedo e barato. O volume entra inteiro no T0 (de graça), e a cada tier sobra só uma fatia menor — até o council, que vê só o que sobreviveu aos portões.
A largura da faixa é o volume; a cor mais quente é o custo. Descartar barato cedo é o que torna o caro raro.
Entre os tiers há três cadeados, todos fail-closed (na dúvida, barram): PII (assertRedactedForEmit, antes de tocar qualquer modelo), Budget (barra a chamada paga antes do provider) e Verifier (3 lentes + veto de dissent decidem o T3). Nenhum deles "deixa passar e corrige depois".
priorFor + routesToResidue — sem nenhuma chamada paga.Estas seis regras são o que impede regressão arquitetural. Não são estilo — são as vigas que sustentam o resto. O Reviewer da factory caça cada uma em todo PR.
As 6 invariantes irradiando do princípio comum: fail-closed por padrão. Quebrar qualquer uma é defeito de arquitetura.
Result<T,E>. contracts/result.ts · contracts/model.tsetl/budget.ts · harness/funnel.tsswarm/types.ts:32council/verifier-panel.ts:21-44assertRedactedForEmit antes de qualquer modelo ou store. etl/pii.tsswarm/worktree.tsCinco perguntas sobre o pipeline barato, o PII gate, o budget fail-closed e o que realmente roda em cada tier. Cada opção revela a explicação ao clicar; o placar abaixo soma seus acertos.
priorFor/routesToResidue, já excluindo famílias como Models/Prompts. T1 já usa um modelo local; T3 é o Council, no fim do funil. etl/pipeline.ts:27 · etl/priors.ts
extractionInput, no funnel, antes de qualquer chamada de modelo — é um gate fail-closed, não uma limpeza posterior. harness/funnel.ts:243 (emitSafeSignal) · etl/pii.ts
Seis perguntas sobre as regras que sustentam a arquitetura. Se você acertar todas, domina o que o Reviewer caça em todo PR.
ok; exceções internas viram failure tipado antes de subir. contracts/result.ts:20 · contracts/model.ts:30
canSpawn. swarm/types.ts:32 · swarm/orchestrator.ts:31-46
redactSignal + assertRedactedForEmit rodam no extractionInput, antes de qualquer modelo ou write. etl/pii.ts · harness/funnel.ts:243
Você chegou ao fim do currículo fonte-de-verdade. O slide-deck abaixo reconstrói a jornada: as 5 camadas, a cintura que as une, os hot paths que ligam tudo e o playbook do operador. Use as setas (ou ← →) para passar.
Result), gates fail-closed (PII, budget, verifier), runs content-addressed (replay) e o journal-before-action. Esses quatro princípios reaparecem em cada camada — é por isso que o motor é previsível.Este glossário é vivo: novos termos entram quando um conceito se estabiliza em três ou mais lugares com âncoras reais. Daqui, escolha por onde aprofundar.
Volte às lições de L0 a L4 com este vocabulário na mão — agora cada termo tem um lugar no mapa, e a leitura rende muito mais.
Pegue três termos que ainda te confundem, abra os arquivos arquivo:linha no editor e rode a prática de cada um. O código é o território.
Releia o passo 6 (Hot paths) traçando o funnel, o council T3 e o factory ADW termo a termo — é onde as camadas se costuram de verdade.
Com o passo 7 (Playbook do operador), rode os comandos e provoque cada gate fail-closed (budget:0, PII plantada) para vê-los barrar.
O índice tem as oito etapas em ordem. Releia qualquer camada que ainda não esteja firme — e da próxima vez que for mexer no código, comece por este glossário.