A dívida neste repositório

Prévia grátis 6 min de leitura

Um curso sobre comunicar dívida técnica não vale nada sem dívida para comunicar. Então aqui está a desta aplicação, encontrada rodando as ferramentas em vez de perguntar a opinião de alguém.

O que o grep encontra

$ grep -rn "TODO\|FIXME\|HACK\|XXX" app/ lib/

Uma linha, e não é um marcador. É o lib/tasks/course_ruby.rake batendo com uma regex que procura a palavra TODO, como parte do próprio ferramental de autoria de cursos deste repositório. Os 258 arquivos Ruby e 101 templates da aplicação em si têm zero.

Vale parar nisso, porque o instinto é ler como "esta base de código não tem dívida." Significa que esta base de código não tem dívida que alguém tenha escrito. Os marcadores registram o que um desenvolvedor notou enquanto digitava. Eles não conseguem registrar o que ninguém notou, o que foi decidido numa reunião, ou o que virou dívida depois que o código foi escrito e estava correto.

Cada item abaixo é real, e nenhum deles tem um TODO.

O que as ferramentas encontram, e o que já aconteceu com duas delas

O job de lint estava vermelho, e já foi consertado.

$ bin/rubocop
422 files inspected, 22 offenses detected, 11 offenses autocorrectable
22  Layout/SpaceInsideArrayLiteralBrackets [Safe Correctable]
22  Total in 6 files

Isso é o que este repositório reportava no dia em que este registro foi compilado pela primeira vez. O .github/workflows/ci.yml roda bin/rubocop -f github como um dos três jobs. E um job que ficou vermelho ensinou as pessoas a parar de lê-lo, que é o argumento inteiro da aula 2. Foi consertado na mesma semana, no commit df99fec, tocando os seis arquivos que o scan nomeou. Rode bin/rubocop hoje e ele reporta zero ocorrências em 601 arquivos.

O scanner de segurança tinha seis avisos, e as duas classes deles já foram consertadas.

$ bin/brakeman
46 controllers, 28 models, 82 templates scanned in 1.2s
Security Warnings: 6
  3 x Format Validation (ValidationRegex), High confidence
  3 x SQL Injection, Medium confidence

Os três de alta confiança eram o mesmo erro em três arquivos: format: { with: %r{\Ahttps?://}i } sem âncora \z. Os três de confiança média estavam todos em app/queries/catalog/search_query.rb, que construía uma expressão jsonb interpolando um nome de tabela. Os dois foram consertados na mesma semana que o job de lint. O commit e30c2a3 deu à validação de URL um único dono (Partners::UrlPolicy), e o commit ee9fa06 trocou o SQL interpolado por um hash de busca literal. Rode bin/brakeman hoje e ele reporta zero avisos.

Três de oito itens consertados dentro de uma semana, nenhum deles marcado com TODO e nenhum deles discutido neste curso antes de agora, o que já é digno de nota. Dívida pequena, segura e com evidência é paga em silêncio, como a aula 6 argumenta. Ela não precisa deste curso para acontecer.

flowchart TB
  G["grep TODO/FIXME/HACK"] --> Z["nada no código da aplicação"]
  T["as ferramentas"] --> A["rubocop: eram 22 ocorrências, consertado em 2026-09-06"]
  T --> B["brakeman: eram 6 avisos, consertados em 2026-09-06 em dois commits"]
  T --> C["ci.yml: 3 jobs, nenhum roda os 1.206 exemplos"]
  Z --> D["dívida que ninguém escreveu ainda é dívida"]

O que os cursos anteriores encontraram

Mais três, cada um estabelecido por um experimento numa aula anterior desta série, e os três continuam abertos hoje:

A política de senha não é testada. MIN_LENGTH, MAX_LENGTH e a regra de caractere especial em FORMAT podem cada uma ser enfraquecidas e todos os 1.206 exemplos continuam verdes.

As configurações de segurança do RSpec estão comentadas. O spec/spec_helper.rb tem ordenação aleatória, persistência de --only-failures e filtragem por :focus dentro de um bloco =begin.

Os caminhos de erro do buscador de ícones de site não são testados. O Partners::FetchSiteIconService resgata cinco classes de exceção e nenhum exemplo dispara qualquer uma delas.

O registro

# Item Evidência Esforço Status
1 Job de lint falhando bin/rubocop Minutos Consertado em 2026-09-06
2 Ordenação e persistência de falhas do RSpec desligadas spec/spec_helper.rb Minutos Aberto
3 3 avisos de alta confiança do Brakeman, \z faltando bin/brakeman Uma hora Consertado em 2026-09-06
4 Constantes da política de senha não testadas Rodada de mutação Uma hora Aberto
5 Sem job de teste na CI ci.yml Horas Aberto
6 Caminhos de erro HTTP não testados fetch_site_icon_service.rb Meio dia Aberto
7 3 avisos de confiança média de SQL na busca bin/brakeman Meio dia, com cuidado Consertado em 2026-09-06
8 :unsafe_inline no style_src da CSP Inicializador da CSP Dias Aberto

Oito itens foram encontrados, cada um com um comando que produz a evidência. Cinco continuam abertos.

Essa coluna de evidência é o que torna isto um registro em vez de uma reclamação. "O código tem dívida" é uma opinião. "bin/rubocop sai com código não-zero, e a CI roda ele" é um fato que qualquer um pode checar em dez segundos. E a diferença decide se a conversa da aula 5 vai a algum lugar. O resto deste curso trabalha a partir das cinco linhas ainda abertas. As três já consertadas aparecem de novo na aula 6, como o exemplo mais claro do que "não pergunte" parece na prática.

Pontos-chave

  • Zero marcadores reais de TODO/FIXME/HACK nos 258 arquivos Ruby e 101 templates desta aplicação.
  • Medido, e desde então consertado (2026-09-06): 22 ocorrências do rubocop em 6 arquivos, e 6 avisos do Brakeman em duas causas-raiz.
  • Cinco itens continuam abertos: configurações de segurança do RSpec, a política de senha, sem job de teste, caminhos de erro HTTP, e :unsafe_inline.
  • A CI tem três jobs e nenhum deles roda os 1.206 exemplos.
  • Um registro precisa de evidência e esforço por linha; sem eles é uma reclamação em vez de uma lista. E um bom registro derruba uma linha assim que ela é consertada.
Aula 1 de 7 · grátis

Continue com a aula 2

O que a dívida de fato custa

Principal é o trabalho de consertar, juros é o custo até lá, e como quantificar sem inventar números.

Com uma conta grátis você também tem os quizzes, seu progresso e suas anotações, e a discussão.

Digite para buscar...