Cada drill é uma cena que JÁ aconteceu (ou vai): você lê o sintoma, decide o que faria, e só então abre a resposta. A régua é sempre a mesma — sintoma → hipótese → comando de prova → correção → registro.
Operador bom não decora respostas: decora o circuito. Todo drill abaixo se resolve com as mesmas cinco estações — e a estação que separa amador de operador é a terceira: comando de prova, nunca opinião.
Pense como… treino de incêndio: ninguém descobre a rota de fuga durante o incêndio. Onde quebra: no prédio, o alarme toca; aqui, metade dos incidentes termina com exit 0 — o alarme é você conferindo o relatório.
Leia o cenário, formule sua resposta EM VOZ ALTA (sério), depois abra. Auto-avaliação: acertou a hipótese E o comando de prova = ponto cheio; só a hipótese = meio ponto.
Madrugada de sábado. Você rodou alembic distill ~/Documents/Resources/Bookmarks --offline --learnings-budget 0.25 para produzir os primeiros learnings. Exit 0, nenhum erro — e o relatório mostra residue: 0, zero learnings escritos.
O que você faria?
Hipótese: family-prefix. A família vem do 1º segmento do path relativo ao CORPUS; apontando na raiz da própria família, o 1º segmento vira items ⇒ família Unknown ⇒ nada roteia ⇒ residue 0, sem erro (foi exatamente assim no primeiro run real da rota, 06-07).
# prova (compare o residue dos dois): alembic distill ~/Documents/Resources/Bookmarks --offline # residue 0 (Unknown) alembic distill ~/Documents/Resources --offline # residue > 0 (Bookmarks)
Correção: aponte SEMPRE no pai das famílias; para escopar 1 família só, use o truque cpio dos package.jsonl. Registro: anote no STATE do seu loop: "residue 0 + exit 0 = conferir corpus root ANTES de culpar o modelo".
Você criou o pacote @alembic/novo e rodou pnpm --filter @alembic/novo test. Verde, rápido, bonito. Mas o total de testes da suíte não subiu — continua nos mesmos 1.834.
O que você faria?
Hipótese: o pacote não tem vitest.config.ts PRÓPRIO — sem ele, o filtro "passa" sem executar teste nenhum (gotcha documentado; o comentário da raiz engana).
# prova: conte os testes executados, não a cor pnpm --filter @alembic/novo test 2>&1 | grep -E "Test Files|Tests" ls packages/novo/vitest.config.ts # existe?
Correção: crie o vitest.config.ts do pacote (setupFiles em caminho ABSOLUTO, como os irmãos) e confirme o contador subindo (ex.: 1.834 → 1.834+N). Regra: a suíte inteira, sempre via node scripts/safe-test.mjs pnpm -w test.
Você faz checkout de feat/x, que adiciona @alembic/hermes como dependência de um pacote. pnpm -w test passa; pnpm -r typecheck explode com Cannot find module '@alembic/hermes'. CI está verde nessa mesma branch.
O que você faria?
Hipótese: symlink de workspace stale — a branch ADICIONOU uma dep que o seu node_modules local nunca instalou. O vitest resolve por outro caminho e engana; o tsc não perdoa; CI é imune porque instala do zero.
# prova + correção: pnpm install # materializa o symlink novo pnpm -r build # deps geram os .d.ts que os dependentes leem pnpm -r typecheck # agora julga de verdade
Registro: "checkout de branch com dep workspace nova ⇒ pnpm install ANTES de confiar em qualquer resultado local." Nunca conclua pelo vitest verde.
Uma automation derivada de employee (emp-pesquisador-0) rodou via automation run --online com o prompt "varra os repos clonados e liste os READMEs alterados na semana". O journal memory.md recebeu um registro e a resposta lista arquivos, datas e até contagens — convincente.
O que você faria com esse relatório?
Hipótese (que é certeza de desenho): a varredura é FABRICADA. O turno do A4c não tem tool-loop — o modelo não tem como ler o filesystem; pedir "varra X" produz varredura com cara de real (provado na fronteira, é o caveat de honestidade do spec). O registro no journal é honesto sobre O QUE FOI PERGUNTADO E RESPONDIDO — não sobre o mundo.
# prova: qualquer item da lista ls <um-dos-paths-citados> # não bate? fabricação confirmada alembic automation show emp-pesquisador-0 # o manifest não declara tool nenhuma
Correção: descartar as "descobertas"; colocar os dados VERIFICADOS no prompt (você varre, o modelo raciocina) até a perna tool-loop existir. Registro: marcar no journal que o output foi tratado como não-verificado.
A rota learnings produziu 1.022 registros únicos de Bookmarks, isolados em ~/.alembic-learnings-bkm (100% com sourceRefs+hash, confidence μ0.94). Alguém propõe: "joga tudo no store principal e pronto, conhecimento é conhecimento".
O que você verificaria antes de qualquer promoção?
Checklist do operador: (1) proveniência — TODO registro mantém sourceRefs+hash? (2) dedupe — a promoção preserva os ids determinísticos para re-runs continuarem no-op? (3) separação ADR-0002 — learnings NÃO se misturam ao store de signals; são cadeias com budgets, stores e cadências separados por decisão registrada; (4) leitura por amostra — learnings são destilação, não fatos: μ0.94 é a média da rota, não um selo individual.
# prova por amostragem antes de decidir head -3 ~/.alembic-learnings-bkm/Skills/learning/learnings.jsonl alembic status # os dois stores, cada um no seu lugar
Decisão: promoção de store é mudança de contrato — decisão de founder com ADR, não um cat >> de madrugada. Até lá, o isolamento É a feature.
Revisando uma lição nova do curso no tema claro, você nota um badge de acerto quase invisível: texto de 10px sobre color-mix(in srgb, var(--ok) 16%, transparent). No tema escuro estava perfeito. O gate impeccable detect docs/ vai rodar no CI.
O que você faria?
Hipótese: violação clássica que o detector pega: cor fora de token (ou contraste dependente de tema) + fonte abaixo do mínimo. A regra da casa: texto mono de apoio ≥ 12px, cores SEMPRE via tokens do shell (--ok/--bad/--clay-d…), e TESTAR NOS DOIS TEMAS antes de publicar (o toggle existe para isso).
# prova impeccable detect docs/ # o gate acusa inline-color/tamanho # correção: badge com token + tamanho mínimo font: 12px var(--mono); color: var(--ok); border: 1px solid var(--ok);
Registro: "cor nova = token novo no shell compartilhado, nunca hex local" — se precisar de um componente novo, ele entra no template para TODAS as lições herdarem.
Manhã seguinte a um loop AFK. O MacBook está com a ventoinha gritando: ps mostra processos node com PPID=1 consumindo ~90% de CPU há 11 horas. Você matou o vitest principal ontem à noite — achava.
O que você faria (agora e para sempre)?
Hipótese: órfãos tinypool — matar só o processo main deixa os forks reparentearem para o PID 1 e girarem para sempre. O kill certo é no GRUPO de processos, e a prevenção é nunca rodar a suíte "pelada" em loop.
# agora: identifique e mate o grupo ps -Ao pid,ppid,pgid,pcpu,etime,comm | grep node | grep -v grep kill -TERM -<pgid> # o sinal vai para o GRUPO (note o sinal de menos) # para sempre: o baseline canônico já embute a proteção node scripts/safe-test.mjs pnpm -w test # process-group kill + sweep no final
Registro: se um teste NOVO pendura a suíte, o safe-test mata e varre — mas a causa raiz (teardown pendente) vira issue, não convivência.
Num PR de docs, alguém escreveu "o CLI tem 32 comandos". Você lembra que o USAGE exporta 33 (47 formas). O autor argumenta: "é só um número, aprova aí".
O que você faria?
Hipótese: é EXATAMENTE o pior ofensor eleito pelo digest #1 do failure-historian — drift de contagem. A resposta da casa não foi "corrigir o número": foi parar de digitar números. scripts/derive-counts.mjs (PR #158) deriva as contagens da fonte, e a PRIMEIRA execução pegou este drift vivo (docs 32; real 33/47).
# prova node scripts/derive-counts.mjs # a fonte responde: 33 comandos / 47 formas
Correção: o PR troca o número digitado pelo número DERIVADO (e idealmente cita o script). Registro: este curso segue a mesma lei — olhe o rodapé de qualquer página: "números derivados, nunca digitados".
# kit de bolso do operador — os comandos que resolvem 80% dos drills alembic status && alembic runs list # estado das lojas + runs alembic distill ~/Documents/Resources --offline # funil hermético $0 (no PAI!) node scripts/safe-test.mjs pnpm -w test # suíte sem órfãos pnpm install && pnpm -r build && pnpm -r typecheck # pós-checkout com dep nova node scripts/derive-counts.mjs # contagens derivadas impeccable detect docs/ # gate visual dos docs
Regra transversal dos 8 drills: diante de QUALQUER verde suspeito (residue 0, exit 0 relâmpago, vitest ok, relatório bonito), qual é a primeira ação do operador?