Sprint 007 — Review¶
Período: 2026-08-12 a 2026-08-18
Feature: 008 — destravar sync presa
PR: #212, incorporado em
2026-08-12T13:37:23Z · main em f09e467
Resumo¶
| Planejado | Entregue | |
|---|---|---|
| User stories | 3 | 3 |
| Tarefas | 9 | 9 |
| Entregáveis aceitos | 9 | 9 |
10 gates verdes por código de saída, 402 testes. A avaliação critério por critério está em aceitacao.md: 14 de 14 SC atendidos, dois com ressalva declarada.
O que foi feito¶
| Tarefa | Issue | Entregável | Aceito |
|---|---|---|---|
| T001 | #202 | interrupted_by_user_id, anulável e sem check constraint |
sim |
| T002 | #203 | a ligação sync↔trabalho pelos args, com os estados derivados da fila | sim |
| T003 | #204 | reconcile_stuck_syncs/0, com carência de 1 minuto |
sim |
| T004 | #205 | o motivo por causa, sem inventar falha | sim |
| T005 | #206 | idempotência: age só sobre running |
sim |
| T006 | #207 | o resultado da criação do trabalho conferido | sim |
| T007 | #208 | o worker periódico, e o teste que impede o Lifeline de voltar |
sim |
| T008 | #209 | interrupt_sync/3 com autor, :job_alive e :not_found |
sim |
| T009 | #210 | quem encerrou, por extenso | sim |
O que não foi feito¶
| Item | Motivo | Destino |
|---|---|---|
| a prova no dado real — o órfão encerrado pela plataforma | não há execução running ligada ao job órfão: as duas que havia foram destravadas por SQL antes desta feature. Não há o que reconciliar |
pendente até a próxima coleta que morrer |
| iteration própria do sprint no ProjectV2 | configurar iterations recria as existentes — L11 | product backlog, #176 |
| verificação visual da tela em 360 px | o markup é o mesmo do cartão existente, e ninguém olhou | conferir antes de fechar o próximo sprint |
A mudança de desenho durante a execução, e ela é o aprendizado do sprint¶
O plano tinha uma noção de "trabalho vivo". Rodar contra o dado real mostrou que ela estava
errada: o job órfão de 2026-08-09 está executing, e executing bloquearia tanto o encerramento
automático quanto o humano — a feature deixaria preso exatamente o caso que a motivou.
não terminal (bloqueia o automático): suspended scheduled available executing retryable
vai executar (bloqueia a pessoa): suspended scheduled available retryable
Trabalho em execução não é prova de vida: é o registro de que algum processo reivindicou o trabalho, e a reivindicação sobrevive ao processo. A plataforma não encerra sozinha — se a coleta estiver rodando, liberar a restrição faria uma segunda começar em paralelo. A pessoa pode, porque só ela sabe que reiniciou a aplicação.
Evidências¶
$ mix gates > /tmp/gates_main2.txt 2>&1; echo "código de saída: $?"
código de saída: 0
10 gates verdes.
Result: 402 passed
Dois defeitos conferidos por reprovação, invertendo o código de propósito:
| defeito introduzido | testes que reprovaram |
|---|---|
| o resultado da criação do trabalho descartado | 3 de 3 no arquivo de enqueue_failure |
executing bloqueando a pessoa |
os dois casos novos de executing, nos dois sentidos |
Os jobs dos testes vão para a tabela oban_jobs, não para um mock: a decisão consulta a fila, e
um mock testaria o mock.
Dívida gerada¶
| Dívida | Por quê |
|---|---|
dois registros interrupted históricos dirão the platform |
foram destravados por SQL antes de a coluna existir; inventar autor seria pior, e está declarado na aceitação |
o worker compete por slot na fila ingestion |
com 5 coletas em andamento a reconciliação espera — atrasa, não impede |
| a prova no dado real é pendente | depende de uma coleta morrer; fabricar o cenário no banco para marcar o item seria declarar sucesso sem evidência |
O que a conferência contra a origem achou, e não é desta feature¶
A L30 aplicada à leds-conectafapes achou dois defeitos vivos:
| # | Defeito | Custo medido |
|---|---|---|
| #213 | a marca de inacessível não se cura: o repositório marcado é filtrado antes da coleta, e a função que limparia a marca nunca o alcança | 39 repositórios, 899 issues fora de toda coleta futura |
| #214 | erro interno do GitHub — HTTP 200 com errors — classificado como falha permanente |
criou a 39ª marca hoje, às 12:32:29 |
E a resposta à pergunta que motivou a conferência: a coleta não está perdendo issues por
arquivamento nem por estado. 4283 na origem, 4280 no banco; as 3 que faltam nasceram depois da
última coleta. OPEN e CLOSED vêm as duas, e os 7 repositórios arquivados estão todos coletados.
Lições deste sprint¶
L34 — a mesma palavra para duas coisas diferentes esconde o caso que a feature existe para resolver.
L35 — conferir contra a origem acha defeito fora da feature que se está entregando.
Detalhamento em licoes-aprendidas.md.