Curso / Lição 21
Lição 21 · Motor & método · 8 de 8

O framework de fusão: CLONE / ADAPT / MERGE / IGNORE

A lição 3 introduziu as quatro disposições. Esta lição percorre o procedimento de decisão de ponta a ponta: as duas perguntas que você faz de cada capacidade, por que o mesmo input pode cair em qualquer dos quatro vereditos, e quatro exemplos trabalhados — por que o ciclo de aprendizado é um CLONE pedra-angular, por que o cliente MCP é um MERGE estacionado, por que a delegação é IGNORE, e por que o neutts é IGNORE por uma razão diferente. É o framework reutilizável para absorver um sistema noutro sem inchá-lo.

Leia primeiro (fonte primária)
Alembic — docs/alembic-hermes-fusion-matrix.md

Esta lição destila a matriz de fusão verificada no Proof-Gate (Fase B). Todos os identificadores, contagens de LOC e hit-counts vêm dela, lidos literalmente. Por que importa pra missão: é a disciplina que deixa um motor TypeScript focado absorver um agente de ~30k linhas sem importar o sprawl dele.

Objetivos desta lição
  • Aplicar as duas perguntas da matriz a qualquer capacidade, sempre contra evidência de mapa.
  • Ler o 2×2 que as duas respostas produzem e mapear cada quadrante a uma disposição.
  • Distinguir os dois tipos de IGNORE: "já fazemos melhor" vs. "fora-da-missão".
  • Separar a disposição (o que algo é) do cronograma (quando se constrói).
0
perguntas decidem o veredito
0
disposições · CLONE/ADAPT/MERGE/IGNORE
0
CLONEs Easy enviados primeiro
0
"copiamos porque estava lá"

01 · As duas perguntas — e o 2×2 que produzem

Imagine que você vai mudar de casa e está diante de cada objeto da casa antiga: vale levar? A resposta nunca é "leve tudo" nem "jogue tudo" — você decide objeto por objeto, com duas perguntas simples. A matriz de fusão faz exatamente isso com cada capacidade do sistema-fonte (o Hermes), e cada resposta é dada contra evidência verificada do mapa — nunca de memória:

  1. P1 · O alvo já tem um equivalente? (respondida contra o mapa do Alembic, com a evidência citada — ex.: contagem de hits no mapa de 1488 linhas)
  2. P2 · A versão da fonte é superior ou inédita? (respondida contra o mapa do Hermes)

Cada pergunta é um "detector" simples

Antes de juntar as duas, veja cada uma isolada. A P1 é um detector de lacuna: ela varre o mapa do alvo atrás de um equivalente. A P2 é um detector de valor: a coisa nova é melhor, ou pelo menos inédita?

P1 · O ALVO JÁ TEM? (detector de lacuna)
capacidade da fonte (Hermes) hits no mapa do Alembic? tem equivalente existe → MERGE/IGNORE = 0 hits → lacuna → CLONE
P2 · A FONTE É MELHOR/INÉDITA? (detector de valor)
versão da fonte vs. a do alvo superior ou inédita? sim vale absorver → CLONE/MERGE não → o alvo já basta → IGNORE
Preveja antes de continuar
As duas perguntas são de SIM/NÃO. Quantas combinações de respostas existem ao todo — e o framework dá uma disposição diferente para cada uma?
2 × 2 = 4 combinações — exatamente as quatro disposições (CLONE / ADAPT / MERGE / IGNORE). Mas há uma sutileza: duas combinações diferentes desembocam em IGNORE (o alvo já é melhor ou a coisa é inédita porém fora-da-missão), e o eixo "tem um equivalente parcial" é o que separa MERGE de CLONE. Por isso o legenda da matriz (§1) descreve quatro dispositions, mas o quadrante IGNORE carrega duas justificativas possíveis — assunto da seção 02.

As duas respostas juntas: o 2×2

A disposição decorre do par de respostas. É, com efeito, uma matriz 2×2 — o eixo horizontal é a P1 (o alvo já tem?), o vertical é a P2 (a fonte é melhor/inédita?):

O 2×2 · DUAS PERGUNTAS → QUATRO DISPOSIÇÕES (a legenda da matriz §1)
P1 · o alvo já tem? NÃO (lacuna) SIM (algum equivalente) P2 · fonte inédita / melhor P2 · fonte pior / n/a CLONE inédito, alto valor — porte o design de perto memory · ciclo de aprendizado · curator · web · clarify MERGE / ADAPT equivalente parcial — combine numa superfície cliente MCP · browser · autoria de skills · media IGNORE (fora de escopo) inédito mas fora-da-missão: neutts, computer-use, 23 adapters de mensageria, editor ACP IGNORE (já melhor) o alvo faz tão bem/melhor: delegate (swarm) · terminais (factory) · image-gen

Note os dois quadrantes IGNORE: uma capacidade é descartada ou porque o alvo já a faz melhor (delegação → o swarm) ou porque é inédita mas fora-da-missão (neutts TTS local). Ambos são IGNOREs justificados — a legenda da matriz exige uma razão, nunca um dar de ombros ("IGNORE … OR it's out of scope for Alembic's mission. Justified.").

Pensa na mudança de casa: CLONE = não tenho e é ótimo → levo e instalo direitinho. MERGE = já tenho um parecido → junto os dois numa coisa só, melhor. IGNORE = ou já tenho um melhor, ou é bom mas não cabe na minha vida nova. Toda decisão é por objeto, e toda decisão tem um motivo escrito.
Método (matriz §intro): "for each Hermes capability I asked two questions — (1) does Alembic already have an equivalent? (answered against the Alembic map, evidence cited) and (2) is the Hermes version superior or net-new? … The disposition follows from the pair. Nothing here is decided from memory; every 'Alembic has/lacks X' cites map evidence." A célula de cada veredito guarda a evidência (coluna "Alembic today (evidence)") e a justificativa (coluna Rationale).

02 · O fluxograma de decisão (as duas perguntas, em sequência)

O 2×2 é a foto; o fluxograma é o filme — a ordem em que você faz as perguntas diante de uma capacidade nova. Siga as setas: cada losango é uma das duas perguntas, e há dois caminhos que terminam em IGNORE, por razões opostas. O caminho do delegate_tool.py e do neutts está anotado à direita.

FLUXOGRAMA · "QUAL A DISPOSIÇÃO DESTA CAPACIDADE?" — P1 e P2 em sequência
capacidade da fonte (uma do mapa do Hermes) P1 · o alvo já tem equivalente? NÃO SIM P2 · é valiosa / cabe na missão? SIM CLONE porte o design de perto NÃO IGNORE (fora-da-missão) inédito mas não cabe · neutts a fonte é melhor? SIM MERGE / ADAPT combine numa superfície existente NÃO → IGNORE (já melhor) alvo já faz melhor · delegate→swarm os dois IGNORE têm razões opostas: "não cabe" (esquerda) vs. "já faço melhor" (direita) e a matriz exige a razão escrita em ambos — nunca um descarte sem justificativa.
Por que P1 vem antes de P2: primeiro você pergunta se há lacuna (varrendo o mapa do alvo). Só então o ramo muda: numa lacuna, P2 vira "vale a pena / cabe?" (→ CLONE ou IGNORE fora-da-missão); num equivalente, P2 vira "a fonte é melhor?" (→ MERGE/ADAPT ou IGNORE já-melhor).
O ramo "inédito mas IGNORE": é o que prende a maioria das pessoas — elas acham que "inédito" implica "leve". Não implica. Inédito é necessário, não suficiente: ainda precisa caber na missão e nas restrições do alvo (seção 06, o neutts).

03 · Veredito 1 — ciclo de aprendizado: CLONE (a pedra angular)

P1: o Alembic tem um ciclo fechado de auto-aperfeiçoamento? A resposta do mapa: não — "learning loop/curator/background review = 0 hits". Uma lacuna genuína. P2: a versão do Hermes é valiosa? Sim — é "the headline 'self-improving' mechanism and Alembic's biggest miss". Inédito + alto valor ⇒ CLONE. E não um clone qualquer — a pedra angular, porque compõe com o que o Alembic já tem em vez de substituir:

// docs/alembic-hermes-fusion-matrix.md §3 — a fusão, extraída da matriz
Alembic hoje:    SOURCE → distill (funil) → Learnings + Signals → [sem feedback]
Hermes adiciona: run → fork de revisor só-memory/skill → escreve memory/skills duráveis
                 → curator gerencia o ciclo de vida → próxima run lê o snapshot atualizado
Fundido:         distill → Learnings ─┐
                                      ├─► memory/skills (snapshot congelado) → próxima run mais esperta
                 run → fork de review ┘    ▲ curator mantém limpo

O mesmo desenho como diagrama de caixas: o funil que você já conhece (lição 15) e o fork de revisão do Hermes convergem nos stores duráveis, que realimentam a próxima run. É o que transforma um pipeline de um disparo num ciclo:

CLONE PEDRA-ANGULAR · o ciclo de aprendizado compõe funil + fork de revisão
distill (funil) Alembic já tem · L15 Learnings fork de revisão só-memory/skill · Hermes memory/skills stores duráveis snapshot congelado Validator Gate (ADR-0006) "aprenda só com vitórias validadas" curator mantém limpo próxima run mais esperta o ciclo se fecha: a run de hoje sedimenta (após o gate) o que a run de amanhã lê. Pipeline → loop.

Ele "compõe com o validator gate em vez de substituí-lo" — as escritas do revisor passam pelo Validator Gate existente do Alembic (ADR-0006) antes de sedimentar (lição 17), dando "learn only from validated wins". É por isso que é a pedra angular: transforma um pipeline de um disparo em um ciclo, usando maquinário que o Alembic já tinha. Os CLONEs que você estudou nas lições 7–13 (memory, learning, curator, clarify, web) são exatamente este quadrante — todos marcados Easy na matriz, exceto o próprio learning loop, de "highest conceptual value".

04 · Veredito 2 — cliente MCP: MERGE (e estacionado)

P1: o Alembic tem MCP? Parcialmente — é um servidor MCP, read-only ("MCP=8 hits; harness handleMcpRequest"), mas não tem cliente. P2: direção inédita? Sim — consumir servidores MCP externos é uma capacidade nova. Equivalente parcial + direção nova ⇒ MERGE em @alembic/harness (não um pacote separado). A própria matriz rotula: "High-value MERGE". Mas o veredito não é o cronograma — está estacionado, listado em #5 (Medium), depois dos cinco CLONEs Easy.

MCP · SERVIDOR EXISTE (read-only) + CLIENTE FALTA → MERGE no harness (parado em #5)
✓ servidor MCP (tem) read-only · MCP=8 hits · handleMcpRequest ✗ cliente MCP (falta) consumir servidores externos = inédito MERGE @alembic/harness uma superfície mais rica · TS SDK existe estacionado ordem #5 · Medium após os 5 CLONEs Easy A disposição (MERGE) é uma decisão de arquitetura; a posição #5 é uma decisão de prioridade. Decidir o que algo é não compromete você a fazê-lo em seguida.

05 · Veredito 3 — delegação: IGNORE (já melhor)

P1: o Alembic delega trabalho a sub-agentes? Enfaticamente sim — o swarm (lição 19): "swarm=63 hits: 3-tier orchestrator, lead-worker, depth-bound, dependency-gated task-queue, PARL reward". P2: o delegate_tool.py do Hermes (§3.8, 3188 LOC) é melhor? Não — o Alembic "already does this natively and better". Equivalente existe e é superior ⇒ IGNORE (o quadrante "já melhor"). Mas a matriz ainda extrai um insight portável em vez de descartar por atacado:

DELEGAÇÃO · swarm (Alembic) vs delegate_tool.py (Hermes) → IGNORE, mas colha 1 ideia
Alembic · swarm (L19) swarm = 63 hits orquestrador de 3 camadas · lead-worker profundidade-limitada · fila com portão de deps PARL reward nativo e melhor ★ Hermes · delegate_tool.py §3.8 · 3188 LOC delegação a sub-agentes mesma capacidade, menos rica não supera → IGNORE insight portável mantido (cache-safety): "completion re-enters as a new turn, never mid-context" — colha a 1 ideia, descarte o resto

Manter a regra de cache-safety da delegação assíncrona — "a conclusão re-entra como um novo turno, nunca no meio do contexto" — é o que distingue um IGNORE disciplinado de um descarte cego. Um bom IGNORE colhe a única ideia que vale manter; ele não joga fora o aprendizado, joga fora o código.

06 · Veredito 4 — neutts TTS local: IGNORE (fora-da-missão)

Este é o outro tipo de IGNORE. P1: o Alembic tem TTS neural local? Não. P2: é inédito? Sim. Então por que não CLONE? Porque falha no teste de missão: "Python-only ML stack (neutts, espeak-ng). Hard to port, no mission value." Inédito é necessário mas não suficiente — uma capacidade também precisa caber na missão e nas restrições do alvo. É um terceiro "portão" que se aplica só ao quadrante da lacuna:

PORTÃO DA MISSÃO · "inédito" passa P1+P2, mas ainda enfrenta um terceiro filtro
neutts TTS neural local P1 lacuna? SIM Alembic não tem P2 inédito? SIM net-new portável + valor de missão? NÃO IGNORE (fora-da-missão) stack só-Python · difícil portar · sem valor SIM (seria CLONE)

A mesma lógica IGNORA o computer-use (vincula um runtime nativo), os 23 adapters de mensageria ("Alembic is an internal engine (ADR-0001), not a personal-assistant gateway"), o editor ACP, e — dentro de uma ferramenta de media de resto ADAPTada — o caminho local faster-whisper ("Local faster-whisper = IGNORE/sidecar (Python ML, no clean Node port)", lição 13). A disposição é por-capacidade, e "inédito" nunca sobrepõe "fora-da-missão".

A disciplina que evita o inchaço

O ponto inteiro do framework é absorver um agente de ~30k linhas num motor TypeScript focado sem importar seu sprawl. CLONE só as peças inéditas de alto valor; MERGE o que se sobrepõe numa superfície mais rica; IGNORE — com uma razão — tanto o que você já faz melhor quanto o que não cabe. O resultado é o pacote @alembic/hermes: cinco subsistemas CLONE/ADAPT enxutos (memory, learning, clarify, web, media), com MERGEs aterrissando em suas casas existentes e tudo fora-da-missão deixado para trás. Quatro vereditos, uma decisão defensável por capacidade, zero "copiamos porque estava lá".

O FILTRO EM AÇÃO · de ~30k linhas do Hermes a um pacote focado (sem o sprawl)
Hermes ~30k linhas · ampla 2 perguntas por capacidade CLONE/ADAPT → @alembic/hermes memory · learning · clarify · web · media MERGE → casas existentes harness · ingestion · loop-engineering IGNORE → fica de fora delegate · neutts · mensageria · ACP (c/ razão) motor focado sem o sprawl

07 · Aplique o procedimento na mão (passo a passo → agora você)

Você viu as duas perguntas, o 2×2 e quatro vereditos prontos. Agora rode o procedimento na mão, devagar, sobre uma capacidade que ainda não vimos: a busca em sessões do Hermes — session_search_tool.py §3.4 (797 LOC). Recuperar o procedimento — não só ler o veredito pronto — é o que fixa o framework. Cada passo é exatamente um movimento do fluxograma da seção 02, e a célula da matriz guarda a evidência de cada resposta.

Exemplo resolvido · qual a disposição de session_search_tool.py (busca FTS5 em sessões)?
1
Nomeie a capacidade da fonte. Busca full-text (FTS5) sobre sessões/runs anteriores do agente — recuperação a custo-zero-de-LLM (descoberta/scroll/browse), uma capacidade concreta do mapa do Hermes, não uma intuição. Regra de ouro: uma disposição por capacidade nomeada.
2
P1 — o alvo já tem equivalente? Varra o mapa do Alembic com a evidência citada. A célula da matriz registra: "Alembic has JSONL receipts / artifact-store, but no FTS5 recall" [uncertain]. Logo, há um equivalente parcial (receipts/artifact-store), mas não a busca FTS5 dedicada. Resposta: parcial.
3
P2 — a versão da fonte é melhor/inédita, e em que direção? A busca-de-sessão do Hermes acrescenta uma direção nova sobre o store que já existe (recall FTS5 sobre o histórico do próprio agente), em vez de substituí-lo. Não é uma lacuna pura, nem o Alembic já a faz inteira. Resposta: nova direção sobre o parcial.
4
Leia o par no 2×2. "equivalente parcial" (P1) × "nova direção que reimplementa a ideia no estilo do alvo" (P2) cai em ADAPT — reimplemente o recall FTS5 sobre maquinário do alvo: "adapt over Alembic's run-dir + node:sqlite" (o store durável já escolhido). Não é CLONE (não há lacuna pura) nem IGNORE (a direção é inédita e cabe). A matriz a lista literalmente como "session-search ADAPT".
5
Veredito + lembrete de cronograma. Disposição = ADAPT, com casa em @alembic/etl ou @alembic/hermes. E — como no cliente MCP (§04) — decidir o que é não compromete quando construir: a matriz marca Medium e a coloca entre os itens "later, as needs surface", atrás dos cinco CLONEs Easy.
Agora você: roteie o vision_tools.py (descrição de imagens). Dica: a lição 13 já o tratou. P1: o Alembic tem visão? P2: o caminho da fonte é melhor/inédito, ou há um pedaço que não cabe? Faça antes de revelar.
É um ADAPT (a ferramenta de media: transcrição cloud + visão, reimplementada no estilo do alvo) — com um IGNORE embutido por-capacidade: o caminho local faster-whisper é deixado de fora ("Local faster-whisper = IGNORE/sidecar (Python ML, no clean Node port)", lição 13). Repare: uma mesma ferramenta pode carregar dois vereditos — o procedimento é por-capacidade, não por-arquivo.

O mesmo procedimento, visto como trilha de decisão para o caso resolvido — as setas são os ramos do fluxograma da seção 02 percorridos de verdade, terminando em ADAPT:

TRILHA DE DECISÃO · session_search percorre P1 (parcial) → P2 (nova direção) → ADAPT
session_search §3.4 · 797 LOC P1 equivalente PARCIAL tem receipts/artifact · sem recall FTS5 P2 NOVA DIREÇÃO recall FTS5 do próprio histórico ADAPT run-dir + node:sqlite · etl/hermes cronograma: Medium · atrás dos 5 CLONEs Easy P1 deu "parcial", então P2 vira "qual direção?" — o mesmo encadeamento da seção 02, agora percorrido.

08 · CLONE / ADAPT / MERGE / IGNORE — lado a lado

Os quatro vereditos numa só tabela: o que cada disposição significa, o gatilho (qual par P1/P2 a aciona), para onde vai, e o exemplo trabalhado desta lição. A tabela diz a regra; o gráfico abaixo a torna visível.

DisposiçãoGatilho (P1 · P2)O que você fazPara ondeExemplo desta lição
CLONElacuna · inédito + valiosoPorte o design de perto, adaptando tipos/convenções@alembic/hermesciclo de aprendizado (pedra angular)
ADAPTequiv. parcial/diferenteReimplemente a ideia no estilo do alvopacote-alvo (ex.: media/)media (transcrição cloud + visão)
MERGEequiv. relacionado · nova direçãoCombine numa superfície existente, mais ricacasa existentecliente MCP → @alembic/harness (#5)
IGNORE (já melhor)equivalente · não superaDescarte o código, colha 1 insight portáveldelegate_tool.py → o swarm
IGNORE (fora-da-missão)lacuna · inédito mas não cabeDeixe de fora, com a razão escritaneutts · computer-use · 23 mensageria · ACP

As mesmas cinco linhas como faixas: cada disposição leva a quanto de código você importa para dentro do motor — CLONE/ADAPT trazem código novo; MERGE engrossa uma superfície existente; os dois IGNORE trazem zero código (no máximo uma ideia):

QUANTO CÓDIGO ENTRA NO MOTOR · por disposição (CLONE/ADAPT trazem; IGNORE traz ~0)
CLONE subsistema novo em @alembic/hermes ADAPT reimplementado no estilo do alvo MERGE engrossa uma superfície existente IGNORE (já melhor) ~0 código · colhe 1 insight (cache-safety) IGNORE (fora-da-missão) 0 código · só a razão escrita A largura ≈ "superfície importada". O framework empurra a maioria das capacidades para a direita do gráfico (pouco/zero), e é por isso que o motor não incha.

A ordem de implementação — disposição ≠ cronograma

Decidir a disposição é uma coisa; quando construir é outra. A matriz (§5) ordena por "value × (1 / coupling)", CLONEs primeiro porque são inéditos e autocontidos. Repare: o MERGE do cliente MCP fica em #5, atrás dos cinco CLONEs/ADAPTs Easy — um MERGE de alto valor que ainda assim espera:

ORDEM DE IMPLEMENTAÇÃO (§5) · cinco Easy primeiro, depois o MERGE #5 (Medium)
1 memoryEasy 2 learning+curatorvalor máx. 3 clarifyEasy · T4-gate 4 webEasy · funil L-1 5 cliente MCPMERGE · Medium ← Easy CLONEs/ADAPT · MERGEs → O cliente MCP é "High-value MERGE", e ainda assim está em #5: a fila é por value×(1/coupling), não por valor sozinho.

09 · Roteie você mesmo (demo do 2×2)

Você viu as duas perguntas, o 2×2 e quatro vereditos. Agora roteie uma capacidade você mesmo: escolha uma resposta para cada pergunta e veja o quadrante acender e o veredito aparecer — exatamente o caminho que a matriz percorre. Experimente reproduzir os quatro exemplos da lição.

ROTEADOR · escolha P1 e P2 → o quadrante acende e o veredito aparece
P1 · o alvo já tem um equivalente?
P2 · a versão da fonte é melhor/inédita — e cabe na missão?
CLONE lacuna + inédito/valioso MERGE / ADAPT equivalente parcial + nova direção IGNORE (fora-da-missão) lacuna + inédito mas não cabe IGNORE (já melhor) equivalente + não supera

Veredito: CLONE

Repare o que o roteador ensina: nem toda combinação tem uma célula "limpa" — "lacuna" + "não supera o que já temos" é contraditório (se é lacuna, não há o que superar). O framework é robusto justamente porque as duas perguntas se encadeiam: a segunda muda de sentido conforme a primeira (seção 02).

10 · Como isso se encaixa

Este framework não é uma peça de runtime — é a disciplina de decisão que precede a fusão inteira. Olhe a peça no seu lugar: a montante, dois mapas verificados o alimentam (a engenharia reversa do Hermes, Lição 2, e o mapa do próprio Alembic); esta peça aplica as duas perguntas a cada capacidade; a jusante, ela generaliza na matriz de fusão (Lição 3) item a item, e a matriz produz tanto a forma do pacote @alembic/hermes quanto a ordem de implementação value×(1/coupling). Em outras palavras: o framework é o operador, a matriz é o resultado de aplicá-lo a toda a superfície do Hermes.

ONDE O FRAMEWORK VIVE · dois mapas → as 2 perguntas (esta peça) → matriz item-a-item → pacote @alembic/hermes + ordem
mapa do Hermes (L2) eng. reversa · responde P2 mapa do Alembic 1488 linhas · responde P1 AS 2 PERGUNTAS · esta lição P1 lacuna? · P2 melhor/cabe? → CLONE / ADAPT / MERGE / IGNORE por capacidade matriz de fusão (L3) a mesma decisão × toda a superfície item a item, evidência citada pacote @alembic/hermes 5 CLONE/ADAPT enxutos · §4 ordem (§5) value×(1/coupling) execução · labs (L22–23) + receita (L29) constrói um subsistema seguindo a disposição ADRs (L24) por que cada veredito é defensável restringe A peça desta lição (laranja, no centro) é um operador; a matriz à direita é o resultado de aplicá-lo. Setas verdes = a decisão vira código; tracejada = os ADRs justificam a decisão.
Clique para acender peça por peça — dos dois mapas até a execução.
Onde você está na metodologia: esta é a etapa de decisão da fusão, entre o entendimento (os dois mapas, Lições 1–2) e a construção (o pacote @alembic/hermes e os labs). Diferente do funil ou do swarm, o framework não roda como código — ele governa o que vira código. Cada disposição que ele emite reaparece como uma linha da matriz (Lição 3) e como uma decisão restringida por um ADR (Lição 24). Veja o todo no mapa interativo da metodologia.

As peças que se conectam a esta

O framework toca quatro outras lições — duas o alimentam, duas consomem o que ele decide:

Lição 03 · A matriz de fusão
Porque conecta: a matriz é este framework aplicado a toda a superfície do Hermes — uma linha por capacidade, com as colunas "evidência" (P1) e "rationale" (P2). Esta lição abre o procedimento de uma célula; a Lição 3 mostra o quadro inteiro que ele preenche.
Lição 02 · Engenharia reversa do Hermes
Porque conecta: P2 ("a fonte é melhor/inédita?") só pode ser respondida contra o mapa que a Lição 2 construiu — sem entender o que o Hermes é (LOC, propósito, portabilidade de cada tool), não há como julgar uma disposição. O mapa é o insumo a montante do framework.
Lição 29 · Estendendo a fusão
Porque conecta: a receita para um oitavo subsistema começa por rodar exatamente estas duas perguntas sobre a capacidade nova — o framework é o passo 1 do checklist de extensão. Aqui você aprende a decisão; lá você a aplica para crescer o motor.
Lição 24 · A trilha de ADRs
Porque conecta: a exigência de uma "razão escrita" em todo IGNORE é a mesma disciplina dos ADRs — registrar por que, incluindo por que as alternativas foram rejeitadas. Os ADRs (ex.: ADR-0001 "motor interno") são o que torna defensável cada IGNORE fora-da-missão.

11 · Na prática

Honestidade primeiro: não existe um alembic que "rode" o framework. Ele é um procedimento de decisão humano-no-comando — você aplica as duas perguntas a uma capacidade e escreve a disposição. O artefato que ele produz é um documento (docs/alembic-hermes-fusion-matrix.md). O que a CLI pode fazer é validar a coerência do stack que o framework decidiu construir — é o papel de alembic doctor --client-stack, que confere a forma do MODEL_REGISTRY e a coerência dos adapters, offline e a custo $0, sem rede.

# O framework é um procedimento de decisão — o artefato é um documento, não um comando.
# O que a CLI valida é a COERÊNCIA do stack que as disposições produziram:
$ alembic doctor --client-stack

# saída esperada (forma ilustrativa — o conteúdo depende do seu MODEL_REGISTRY):
#   client-stack: MODEL_REGISTRY shape OK · adapters coerentes
#   (offline · $0 · sem rede)
# Para a matriz que o framework preencheu, abra o documento-fonte:
$ cat docs/alembic-hermes-fusion-matrix.md
O que doctor --client-stack mostra — e o que não mostra: ele valida que o resultado da fusão (os adapters/registry que os CLONE/ADAPT trouxeram) é coerente — não avalia se uma disposição foi a correta; esse juízo é seu, contra os dois mapas. [uncertain] a forma exata da saída depende da build do CLI; o que é fato é que --client-stack roda offline, a $0, e checa a forma do MODEL_REGISTRY + a coerência dos adapters (CLAUDE.md, comando doctor).
Experimente · aplique o framework a uma capacidade nova (sem CLI — você decide)
1
Entre no repo e abra a fonte. cd /Users/acf/Documents/Projects/appfy/alembic e leia docs/alembic-hermes-fusion-matrix.md — é o quadro que o framework preenche. Note as colunas "evidência" (P1) e "rationale" (P2).
2
Escolha uma capacidade ainda não vista. Pegue uma tool do mapa do Hermes (Lição 2) que a matriz não cobriu — p.ex. browser_dialog_tool.py. Nomeie-a numa frase: qual é a capacidade concreta.
3
Rode P1. Varra o mapa do Alembic atrás de um equivalente, com evidência citada (ex.: "browser=N hits" / "0 hits"). Anote: lacuna, parcial, ou tem-e-completo.
4
Rode P2. A versão do Hermes é melhor/inédita, e cabe na missão (ADR-0001, motor interno)? Leia o par no 2×2 da seção 01 → escreva a disposição (CLONE/ADAPT/MERGE/IGNORE) com a razão.
5
Valide o stack, se construiu algo. Se a sua disposição foi CLONE/ADAPT/MERGE e você chegou a tocar adapters/registry, rode alembic doctor --client-stack e confirme "shape OK". Se foi IGNORE, o entregável é só a linha justificada no documento — nada a rodar.
Agora você: antes de decidir, qual mapa responde P1 e qual responde P2 — e por que a ordem importa? Pense antes de revelar.
P1 é respondida contra o mapa do Alembic (há equivalente?); P2 contra o mapa do Hermes (a fonte é melhor/inédita?). A ordem importa porque P1 redefine P2: numa lacuna, P2 vira "vale/cabe?" (→ CLONE ou IGNORE fora-da-missão); num equivalente, P2 vira "a fonte supera?" (→ MERGE/ADAPT ou IGNORE já-melhor). É o encadeamento da seção 02 — e é por isso que nenhum dos dois mapas sozinho basta.
Comandos vizinhos (o que a CLI realmente exercita): alembic doctor --client-stack valida a coerência do stack que a fusão montou; alembic doctor --online vai além e faz um smoke de completamento por modelo (precisa do gateway). Para ver os subsistemas que o framework decidiu CLONE/ADAPT já em pé, os labs das Lições 22–23 os constroem passo a passo, e pnpm --filter @alembic/hermes test roda a suíte deles. O framework em si permanece um procedimento — o que se "roda" é sempre o resultado dele.

Fixe os conceitos (flashcards)

Clique pra virar. Tente lembrar a resposta antes de virar — recuperação ativa fixa mais que reler.

Método
Quais são as duas perguntas da matriz?
clique pra virar ↻
Resposta
P1: o alvo já tem equivalente? (mapa do Alembic, evidência citada). P2: a versão da fonte é superior/inédita? (mapa do Hermes). A disposição decorre do par.
CLONE
Quando uma capacidade é CLONE?
clique pra virar ↻
Resposta
Lacuna (P1 = sem equivalente) + inédito/valioso (P2 = vale). Ex.: ciclo de aprendizado, memory, curator, web, clarify (lições 7–13). Porte o design de perto.
Dois IGNORE
Quais os dois tipos de IGNORE?
clique pra virar ↻
Resposta
(1) "já melhor": o alvo faz tão bem/melhor (delegate→swarm). (2) "fora-da-missão": inédito mas não cabe (neutts). Ambos exigem razão escrita.
MERGE
MERGE compromete a construir agora?
clique pra virar ↻
Resposta
Não. MERGE é a disposição (combinar numa superfície existente); o cronograma é separado. O cliente MCP é MERGE mas estacionado em #5 (Medium).

Revisão cumulativa — recupere de memória

Antes de clicar: responda de cabeça. As quatro opções têm o mesmo tamanho de propósito — sem pista pela forma.

1. Uma capacidade da fonte é inédita (o alvo não a tem), valiosa e cabe na missão. Qual disposição?
Correto: c. Lacuna (P1 = sem equivalente) + inédito/valioso/cabe (P2) ⇒ CLONE. a inverte o framework: "inédito + valioso" é justamente o que se absorve, não o que se descarta. b erra o gatilho do MERGE — MERGE exige um equivalente parcial para combinar; aqui não há equivalente nenhum. d erra a premissa: ADAPT pressupõe um equivalente parcial/diferente, mas o enunciado diz "o alvo não a tem". O ciclo de aprendizado, memory, curator, web e clarify caíram em CLONE (lições 7–13).
2. Por que o delegate_tool.py (3188 LOC) do Hermes é um IGNORE em vez de um CLONE?
Correto: b. P1 = o Alembic tem (o swarm, 63 hits); P2 = o do Hermes não supera ⇒ IGNORE no quadrante "já melhor". a erra o tamanho e o critério: são 3188 LOC (não é pequeno) e o IGNORE é por fit, não por tamanho. c inventa um juízo de "risco" que a matriz não faz — o veredito é "já fazemos melhor", não "é perigoso". d confunde os dois IGNORE: ser Python motiva o IGNORE fora-da-missão do neutts, mas a delegação é IGNORE por o swarm já ser superior. Um IGNORE disciplinado ainda colhe a única ideia que vale manter.
3. neutts (TTS neural local) é inédito ao Alembic. Por que ainda é IGNORE?
Correto: d. O segundo quadrante IGNORE: uma capacidade que o alvo não tem mas que é fora-da-missão ou tecnicamente incompatível. a é falso: o Alembic não tem TTS — a lacuna existe (P1), o que falha é o portão da missão. b inventa uma sobreposição que não há (visão é outra capacidade, ADAPTada). c contradiz a matriz, que IGNORA o neutts com razão escrita, não por engano. "Inédito" nunca sobrepõe "não cabe" — a mesma razão pela qual o faster-whisper local é IGNORADO dentro da ferramenta de media de resto ADAPTada.

Confusões comuns

"IGNORE significa que a capacidade era ruim." Não — duas coisas muito diferentes são IGNORADAS: coisas que o alvo já faz melhor (delegação), e coisas genuinamente boas mas fora-da-missão (neutts, 23 adapters de mensageria). O veredito é sobre encaixe, não qualidade, e sempre carrega uma razão declarada.
OS DOIS IGNORE LADO A LADO · mesmo rótulo, razões opostas (nenhum é "ruim")
IGNORE (já melhor) P1 = o alvo TEM equivalente P2 = a fonte NÃO supera delegate_tool.py → o swarm razão: "já fazemos melhor" · colhe 1 ideia IGNORE (fora-da-missão) P1 = é uma LACUNA (alvo não tem) P2 = inédito, mas NÃO cabe neutts · computer-use · 23 mensageria · ACP razão: "não cabe na missão/restrições" Eixos opostos no 2×2 (§01) — um é "tem + não-supera", o outro é "lacuna + não-cabe". Em comum só a saída (zero código) e a exigência de uma razão escrita. Encaixe, nunca qualidade.
"MERGE significa construir agora." Não necessariamente. MERGE é a disposição (combinar numa superfície existente); o cronograma é separado. O cliente MCP é um MERGE mas estacionado em #5, atrás dos cinco CLONEs Easy. Decidir o que algo é não te compromete a fazê-lo em seguida.
Você completou a trilha Motor & método. As lições 14–21 cobriram o motor no qual a fusão se conecta (cintura estreita, funil, quatro invariantes, pipeline de portões, council/verifier, swarm) e a disciplina por trás dele (método de engenharia reversa, framework de fusão). Junto com a narrativa (1–6) e os mergulhos de subsistema (7–13), você agora consegue raciocinar sobre Alembic × Hermes do contrato à capacidade. Releia a Lição 3 e os quatro vereditos devem soar como consequências óbvias de duas perguntas. A seguir, a trilha Labs & avançado (22–30) põe tudo em prática: dois labs práticos, tópicos avançados profundos e um capstone.
💬 Travou em algo? Eu sou seu professor neste curso — pergunte. "Por que P1 vem antes de P2?", "Qual a diferença prática entre ADAPT e MERGE?", "Por que o learning loop precisa passar pelo Validator Gate?". É só dizer.