Passo 5 · Avaliação & Prática · Avaliação & Prática · Drills do operador — 8 cenários reais
Learn Alembic Complete v3 · Visual Course

Drills do operador — 8 cenários reais

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.

launch-academy · 07-practice-labs · s1
Você sai daqui sabendo
  • Diagnosticar os 4 "verdes falsos" da casa: residue 0, exit 0 sem testes, vitest ok com tsc quebrado, relatório fabulado.
  • Responder com o COMANDO de prova antes de qualquer teoria.
  • Fechar cada incidente com registro (STATE/journal/memória), não com alívio.
1

O método


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.

O CIRCUITO DO OPERADOR — SEMPRE AS MESMAS 5 ESTAÇÕES ① SINTOMA o que a tela diz ② HIPÓTESE qual lei quebrou? ③ COMANDO DE PROVA fronteira real, $0 ④ CORREÇÃO a menor que prova ⑤ REGISTRO STATE/journal o registro de hoje é o diagnóstico instantâneo de amanhã
Se você pular a estação ③, as outras quatro viram teatro. Todos os drills abaixo cobram o comando.
2

Os 8 drills


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.

Drill 1/8 · funil

O residue 0 silencioso

Cenário

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?

Ver resposta

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".

Drill 2/8 · testes

O exit 0 sem testes

Cenário

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?

Ver resposta

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.

Drill 3/8 · workspace

A branch com dep nova

Cenário

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?

Ver resposta

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.

Drill 4/8 · A4c

A automation que fabula

Cenário

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?

Ver resposta

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.

Drill 5/8 · learnings

Os 1.022 learnings para promover

Cenário

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?

Ver resposta

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.

Drill 6/8 · design

O badge color-mix ilegível

Cenário

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?

Ver resposta

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.

Drill 7/8 · processos

Os órfãos tinypool às 9h

Cenário

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)?

Ver resposta

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.

Drill 8/8 · documentação

O drift de contagem

Cenário

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?

Ver resposta

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".

fusao · 25-test-safety-engineering · s0
Camada técnica
# 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
3

Teste de reflexo


A ESCADA DA EVIDÊNCIA — SUBA ATÉ O DEGRAU QUE O RISCO EXIGE claim ("confia") citação (arquivo:linha) comando (rodou agora) prova reproduzível drill respondido com claim = meio ponto; com comando = ponto cheio
A mesma escada da rubrica do operador: claim < citação < comando < prova que outro humano reproduz.
Reflexo final — a primeira ação

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?

Re-rodar o mesmo comando repete o mesmo ponto cego; escalar sem prova exporta o ponto cego. O circuito manda: hipótese → comando INDEPENDENTE na fronteira real (contar testes, ls no path citado, derive-counts, comparar residue nos dois roots). Só então corrigir — e registrar.
Acertos: 0/1
Placar honesto: some seus pontos dos 8 drills (máx 8). 7+ = você opera; 5–6 = releia os drills 1, 2 e 4; menos = refaça o curso a partir do quiz do funil — os drills são só os quizzes com consequência.
Último gesto do curso: escolha UM drill e execute o comando de prova hoje, no seu ambiente, com o corpus de verdade. O que o relatório disser — esse é o seu próximo issue. ← Voltar ao índice.