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).
residue 0 silencioso do family-prefix sem ler o código.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.
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".
# 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)
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.
O que é o T0 na arquitetura de duas cadeias da ADR-0002?
docs/adr/ (ADR-0002) e packages/harness/src/funnel.ts:65 (T1 extrai o residue DO T0).O que é o residue que aparece no relatório do funil?
packages/harness/src/funnel.ts:117 ("Count of residue items extracted into signals at T1") e funnel.ts:195 (residue carrega proveniência).Rodando com --budget E --learnings-budget, o teto da rota learnings estoura. O que acontece?
packages/harness/src/funnel.ts:151-171 (RouteBudgets ativa a cadeia com cap próprio).O que muda num run SEM --learnings-budget comparado ao mesmo run com o knob?
--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).Você aponta o distill direto para ~/Documents/Resources/Bookmarks e o run termina com residue 0, sem erro. Por quê?
~/Documents/Resources). Prova: rodar os dois comandos e comparar o residue. Escopo de 1 família = truque cpio dos package.jsonl.Dois modelos T2 custam exatamente 0.0005. Quem o pickCheapestForTier escolhe?
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).Onde cada cadeia escreve o que produz?
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.No relatório de um run de dois knobs, o que routes.signals.budgetBlocked totaliza?
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.O que a rota learnings produziu na primeira execução real da história (06-07)?
~/.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.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.residue e a linha learnings-route: no summary antes de comemorar; e lembre que empate de custo = ordem de declaração no registry.# 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