Trinta lições adentro, você consegue segurar o sistema inteiro numa só vista. O Alembic é um motor que transforma fontes brutas em conhecimento validado e realimenta trabalho concluído de volta em si mesmo — um loop fechado. A fusão Hermes adicionou as peças que faltavam para tornar esse loop auto-aperfeiçoante: uma memória para gravar, uma passagem de aprendizado com gate para gravar através, e um curador para podar o que fica obsoleto. Este capstone desenha o circuito completo, lista o que foi entregue e o que está deliberadamente estacionado, e termina com um quiz transversal sobre tudo que você aprendeu. Sem fatos novos — só o quadro montado.
Todo subsistema e invariante neste curso existe para fazer um circuito girar com segurança: distillar → aprender → sedimentar → podar. Fontes são distilladas em Learnings (o funil, T0→T3); uma run concluída propõe gravações duráveis (a passagem de aprendizado); gravações aprovadas sedimentam em memória e skills; e o curador poda o que fica sem uso — realimentando o que a próxima run sabe.
Note o gate dentro da caixa APRENDER. Essa é a pedra angular (ADR-0018): o loop é com gate de Validator, nunca auto-aplicar. Sem ele, um sistema auto-aperfeiçoante deriva sobre seus próprios outputs ruins. O gate é o que torna "aprende consigo mesmo" seguro em vez de uma catástrofe de feedback.
As contagens são verificadas na fonte pela própria fundação do curso (Lição 01): o complete-map registrou 19 pacotes de workspace + 1 app em 415 testes, que cresceram para ~565 após o @alembic/hermes aterrissar — os mesmos 565 que o estudo de caso da Lição 6 verifica verdes com um pgrep vazio. [uncertain] o total atual exato pode diferir por alguns conforme testes são adicionados; trate ~565 como o número as-built quando o hermes foi entregue.
| Subsistema | Disposição | O que dá ao loop | Lição |
|---|---|---|---|
| memory | CLONE | o store durável onde gravações sedimentam | 7 |
| learning | ADAPT | a passagem propose→dispose com gate — a pedra angular | 8 |
| curator | CLONE | poda active→stale→archived (nunca deleta) | 9 |
| clarify | CLONE | a superfície de pergunta do portão humano T4 | 10 |
| web | CLONE | search/extract sobre um backend injetado | 11 |
| skills | CLONE | memória procedural com disclosure progressivo | 12 |
| media | CLONE | transcribe/vision em nuvem sobre backends injetados | 13 |
Engenharia honesta nomeia o que não está pronto. A matriz de fusão marca várias capacidades como ainda-não-entregues — de propósito, com razões:
@alembic/harness) — o Alembic é um servidor MCP (read-only) mas ainda não pode consumir servidores MCP externos. A matriz sinaliza isto como um MERGE de alto valor; o TS SDK o torna mais limpo que o original Python. Estacionado, não rejeitado.E o que foi deliberadamente IGNORADO (não estacionado — decidido contra): delegação de subagentes (o swarm já faz melhor, Lição 19), TTS local neural e faster-whisper local (ML só-Python, sem port Node limpo), e os 23 adaptadores de plataforma de mensageria (fora de escopo para um motor interno, ADR-0001). As Lições 3 e 21 percorrem esses veredictos.
Um sistema que entrega tudo de uma vez não entrega nada bem. A fusão traçou uma fronteira apertada — os sete subsistemas que fecham o loop auto-aperfeiçoante — e explicitamente adiou o resto com razões datadas. Trabalho estacionado é recuperável (está na matriz com uma disposição); trabalho rejeitado é justificado (um IGNORE com uma razão). Ambos batem um backlog vago. É a doutrina de portfólio (ADR-0016) em miniatura: WIP limitado, tudo rastreado.
Se você levar uma ideia de trinta lições, leve esta: o poder do motor vem das suas restrições, não de contorná-las. Nunca-lança (ADR-0009) torna o fan-out seguro. Portas injetadas tornam tudo testável e replayável. Defaults fail-closed (DEFAULT_TIER = T4, o budget guard) fazem o caso desconhecido negar. O gate do Validator torna o auto-aperfeiçoamento seguro. A proibição da VM de plano torna o replay honesto. Cada restrição remove uma classe de falha, e juntas elas deixam um sistema autônomo rodar sem um humano vigiando cada passo — que era o objetivo inteiro.
retryable na cintura; o swarm reestabelece a fronteira nunca-lança com runSwarmSafe. O orquestrador só vê resultados discriminados uniformes — por isso a falha de um provedor degrada uma lane, não a run.MemoryStore está acima do orçamento. A mesma run então re-propõe um fato já na memória. Onde caem os dois?failed = gate aprovou mas store recusou (acima do orçamento). Um fato existente re-proposto é um sucesso no-op contado como applied — "reforce, não duplique" (L8/L23). Três baldes existem precisamente para manter isso distinto.Date.now() no seu alembic.plan.ts para um id, depois roda a suíte via vitest puro com um teste que abre um socket. Duas coisas dão errado. Quais?Clock/fábrica de ids injetados), e test:safe — não vitest puro — é o que mata o grupo de workers + varre. A receita (L29) assa ambos em "pronto".AIAgent Python para fork; e, "mais importante", o princípio do portão de emissão). 0006 proíbe sedimento sem gate e 0009 proíbe lançar, então a única forma que sobra é a passagem com gate, baseada em portas — as restrições determinam o design (L24).Você agora consegue ler qualquer subsistema @alembic/hermes e prever sua forma antes de abri-lo; traçar uma chamada de modelo pela cintura e um corpus pelo funil; defender todo veredicto de fusão; diagnosticar um vazamento de worker órfão; e seguir a receita para adicionar um subsistema próprio. A fronteira estacionada — o cliente MCP, o backfill do corpus, as superfícies de design e GTM — é o trabalho seguinte natural, e a matriz já diz como abordar cada um. O loop está construído; fazê-lo girar mais rápido e mais largo é a estrada à frente.
packages/hermes/src/ e ler um subsistema de ponta a ponta; você vai achar que ele lê exatamente como você agora espera.