Passo 1 · Avaliação & Prática · Avaliação & Prática · Quiz — O funil de duas cadeias
Learn Alembic Complete v3 · Visual Course

Quiz — O funil de duas cadeias

10 perguntas sobre a ADR-0002: um T0 determinístico compartilhado, duas cadeias de valor com budgets, stores e cadências separados — e as pegadinhas que custaram caro (family-prefix, empate de custo no T2).

alembic-completo · 0008-glossario-visual · s1
Você sai daqui sabendo
  • Explicar por que as duas cadeias compartilham o T0 mas NUNCA compartilham budget ou store.
  • Diagnosticar o residue 0 silencioso do family-prefix sem ler o código.
  • Dizer quem vence um empate de custo no T2 e por quê isso importou no PR #157.
Fonte da verdade

Números do spec/AUTHOR-SPEC.md (verdade derivada de 2026-07-06). Código: packages/harness/src/funnel.ts, packages/contracts/src/registry.ts, docs/adr/ (19 ADRs). Cada explicação abaixo cita a âncora.

1

O mapa antes da prova


Uma passada de 60 segundos: o corpus inteiro entra num T0 determinístico e $0. O que o T0 não resolve com confiança vira residue e sobe. A partir daí a ADR-0002 abre duas cadeias de valor: a de signals (negócio) e a de learnings (conhecimento) — cada uma com o próprio budget, o próprio store e a própria cadência. Esgotar uma rota bloqueia aquela rota, fail-closed, e a outra segue viva.

Pense como… uma destilaria com duas torneiras no fim do alambique: o mosto é moído uma vez só (T0), mas cada torneira tem o próprio medidor e o próprio barril. Onde a analogia quebra: aqui, quando um medidor chega no teto, a torneira fecha antes de pingar — nunca "deixa passar e cobra depois".

ADR-0002 — DUAS CADEIAS · UM T0 · BUDGETS SEPARADOS corpus (famílias) Bookmarks · Transcripts · Repos… T0 COMPARTILHADO determinístico · $0 · dedupe · priors → residue residue (com proveniência) CADEIA 1 · SIGNALS (negócio) T1 local → T2 frontier → T3 council knob: --budget (ALEMBIC_BUDGET_USD) Business/opportunity-graph.jsonl 2.589 signals CADEIA 2 · LEARNINGS (opcional) só ativa com --learnings-budget cap · spend · bloqueio PRÓPRIOS Skills/learning/learnings.jsonl 1.022 learnings únicos · μ0.94 teto atingido ⇒ bloqueia SÓ esta rota (fail-closed) sem o knob ⇒ run byte-idêntico (sem chave routes)
Leia de cima para baixo: um T0 só; duas cadeias; dois medidores; dois barris. Nenhuma seta cruza de um budget para o outro.
Camada técnica
# a cadeia dupla, na prática (offline = hermético $0)
alembic distill ~/Documents/Resources --offline --budget 0.50 --learnings-budget 0.25
# sem o segundo knob: SÓ signals, saída byte-idêntica (sem a chave `routes` no --json)
alembic distill ~/Documents/Resources --offline --budget 0.50
# onde cada rota reporta: report.routes.signals | report.routes.learnings
# âncoras: packages/harness/src/funnel.ts:151-171 (routes só em run de dois knobs;
#          RouteBudgets ativa a cadeia learnings) · funnel.ts:117 (residue → T1)
2

As 10 perguntas


Placar cumulativo no rodapé do bloco. Responda antes de abrir qualquer explicação — o erro aqui é barato; no corpus de 330GB ele custa uma madrugada.

Prova — ADR-0002, o funil de duas cadeias
Pergunta 1/10 · T0

O que é o T0 na arquitetura de duas cadeias da ADR-0002?

A ADR-0002 define DUAS cadeias sobre um T0 determinístico COMPARTILHADO — o único pedaço comum. Modelo nenhum roda no T0; ele caminha, deduplica e roteia. Âncora: docs/adr/ (ADR-0002) e packages/harness/src/funnel.ts:65 (T1 extrai o residue DO T0).
Pergunta 2/10 · residue

O que é o residue que aparece no relatório do funil?

Residue é sobra QUALIFICADA, não lixo: o T0 roteia o que não classifica e o T1 (modelo local) extrai em cima disso. Âncora: packages/harness/src/funnel.ts:117 ("Count of residue items extracted into signals at T1") e funnel.ts:195 (residue carrega proveniência).
Pergunta 3/10 · budgets separados

Rodando com --budget E --learnings-budget, o teto da rota learnings estoura. O que acontece?

Budgets são SEPARADOS por desenho: cada rota tem cap, spend tracking e bloqueio fail-closed próprios — esgotar uma bloqueia AQUELA rota apenas. Nunca há empréstimo entre medidores. Âncora: ADR-0002 + packages/harness/src/funnel.ts:151-171 (RouteBudgets ativa a cadeia com cap próprio).
Pergunta 4/10 · o knob opcional

O que muda num run SEM --learnings-budget comparado ao mesmo run com o knob?

O segundo knob ATIVA a cadeia. Ausente, o run é byte-idêntico ao de sempre — inclusive o payload --json, que não tem a chave routes (ela só existe em run de dois knobs). Âncora: packages/harness/src/funnel.ts:151-159 ("omitted" sem RouteBudgets; routes presente só no two-knob).
Pergunta 5/10 · family-prefix

Você aponta o distill direto para ~/Documents/Resources/Bookmarks e o run termina com residue 0, sem erro. Por quê?

O GOTCHA central da rota learnings (custou o primeiro run da história): a família é derivada do PRIMEIRO SEGMENTO do path relativo ao corpus. Apontando na raiz da família, tudo vira Unknown ⇒ residue 0, silencioso. Aponte no PAI (~/Documents/Resources). Prova: rodar os dois comandos e comparar o residue. Escopo de 1 família = truque cpio dos package.jsonl.
Pergunta 6/10 · empate T2

Dois modelos T2 custam exatamente 0.0005. Quem o pickCheapestForTier escolhe?

O reduce usa entryCost < bestCost (estrito): empate mantém o já eleito, ou seja, o PRIMEIRO declarado. Foi o prereq do PR #157: declarar gemini-3.5-flash ANTES do deepseek-v4-pro (que dava AccessDenied) destravou a rota. Âncora: packages/contracts/src/registry.ts:244-257 (e o comentário em :80).
Pergunta 7/10 · stores

Onde cada cadeia escreve o que produz?

Stores separados são metade da tese da ADR-0002: Business/opportunity-graph.jsonl (hoje 2.589 signals) e Skills/learning/learnings.jsonl (1.022 learnings únicos, isolados em ~/.alembic-learnings-bkm, 100% com sourceRefs+hash). Misturar os dois seria misturar fato de negócio com interpretação de conhecimento.
Pergunta 8/10 · budgetBlocked

No relatório de um run de dois knobs, o que routes.signals.budgetBlocked totaliza?

É um CONTADOR de bloqueios da rota inteira: T1+T2+T3-council. E lembre: ele vive sob report.routes, que só existe em run de dois knobs — no run de um knob a ausência da chave é o sinal de que a cadeia learnings nem ligou. Âncora: a doc canônica do comando (CLAUDE.md, seção nightly funnel) + funnel.ts:151-159.
Pergunta 9/10 · a 1ª produção

O que a rota learnings produziu na primeira execução real da história (06-07)?

Números do spec (verdade derivada de 2026-07-06): 1.022 learnings únicos, isolados em ~/.alembic-learnings-bkm, 100% com sourceRefs+hash, confidence média 0.94. Os 2.589 são SIGNALS (a outra cadeia); 676 plausíveis / 399 força-4 são do enriquecimento (2.677 enriched). Cada número tem dono — trocá-los de lugar é o drift que o derive-counts caça.
Pergunta 10/10 · os dois knobs

Qual é a divisão de trabalho exata entre --budget e --learnings-budget?

--budget (ou ALEMBIC_BUDGET_USD) capa a cadeia de signals. --learnings-budget (ou ALEMBIC_LEARNINGS_BUDGET_USD) é o knob OPCIONAL que ativa a cadeia learnings com cap, spend e bloqueio PRÓPRIOS. Um knob nunca governa a rota do outro — é o que "budgets separados" quer dizer. Âncora: funnel.ts:171 + ADR-0002.
Acertos: 0/10
3

Depois do placar


0
signals · Business/opportunity-graph.jsonl
0
learnings únicos · 100% sourceRefs+hash
0
enriched (676 plausíveis · 399 força-4)
0
ADRs em docs/adr/ (a 0002 é esta)
FAMILY-PREFIX: A FAMÍLIA É O 1º SEGMENTO DO PATH RELATIVO AO CORPUS CERTO · corpus = ~/Documents/Resources (o PAI) Bookmarks/items/dev/x → família = "Bookmarks" prior conhecido → roteia → residue > 0 ERRADO · corpus = …/Resources/Bookmarks (a RAIZ) items/dev/x → família = "items" = Unknown sem prior → nada roteia → residue 0, SILENCIOSO 1.022 learnings saíram DESTE lado exit 0 · zero records · madrugada perdida o pior bug é o que termina com exit 0 — compare SEMPRE o residue do relatório
Os dois runs "funcionam". Só um produz. O outro é o drill nº 1 da página de drills do operador.
Regra de bolso: aponte o distill no pai das famílias; confira residue e a linha learnings-route: no summary antes de comemorar; e lembre que empate de custo = ordem de declaração no registry.
fusao · 15-the-funnel · s0
Camada técnica
# reproduza o gotcha (ambos exit 0; só um produz)
alembic distill ~/Documents/Resources --offline --learnings-budget 0.10   # residue > 0
alembic distill ~/Documents/Resources/Bookmarks --offline --learnings-budget 0.10   # Unknown ⇒ residue 0
# empate de custo: leia o reduce você mesmo
sed -n '244,257p' packages/contracts/src/registry.ts
# estado das lojas
alembic status
Se você errou a 5 ou a 6, releia o mapa da seção 1 e refaça só essas duas. Próxima parada: Quiz — Invariantes da casa, onde o fail-closed vira reflexo.