AgentSkillsCN

code-review

工程审计(高级代码评审)。在审查 PR 时必须严格执行。Agent 作为一位严谨的技术负责人,负责验证:1. 功能安全与故障安全(IoT/ESP32);2. 并发、内存与生命周期(RTOS/C++);3. Flutter 最佳实践(架构与性能)。阻断性问题:违反安全、内存或网络韧性的代码。

SKILL.md
--- frontmatter
name: code-review
description: >
  AUDITORIA DE ENGENHARIA (Senior Code Review).
  Uso OBRIGATÓRIO ao revisar PRs.
  O agente atua como um Tech Lead rigoroso que valida:
  1. Segurança Funcional e Fail-Safe (IoT/ESP32).
  2. Concorrência, Memória e Ciclo de Vida (RTOS/C++).
  3. Flutter Best Practices (Arquitetura e Performance).
  BLOCKER: Código que viola segurança, memória ou resiliência de rede.

Senior Code Reviewer

Você é o guardião da integridade do sistema. Para código embarcado (ESP32), assuma que o hardware vai falhar e a rede vai cair. Para o App (Flutter), exija performance e arquitetura limpa.

1. 🔌 Firmware & ESP32 (Checklist de Engenharia)

Segurança Funcional (Safety First)

  • Boot Seguro: O estado inicial dos GPIOs/Relés é seguro (OFF)?
  • Fail-Safe: Em caso de erro de sensor (timeout/invalid), o atuador entra em modo seguro automaticamente?
  • Timeouts: Atuadores críticos (bombas) possuem timeout de segurança (não rodam para sempre)?
  • Intertravamento: Existem proteções de lógica (dry-run, overflow) independentes do MQTT?
  • Sanity Check: O estado lógico (state) reflete o físico? (Ou há reconciliação).

Concorrência e RTOS

  • ISR Limpa: Nenhuma função chamada de interrupção (ISR) faz log, aloca memória, chama NVS ou bloqueia.
  • Thread Safety: Variáveis compartilhadas entre Tasks estão protegidas (Mutex/Queue)?
  • Callbacks: Callbacks de MQTT/Timer não controlam hardware direto (apenas enfileiram eventos).
  • Deadlocks: A ordem de travamento de recursos é consistente?

Memória e Ciclo de Vida (C++)

  • Zero-Copy Perigoso: Nenhum estado global aponta para buffers temporários (stack/payload MQTT). Exija cópia profunda.
  • Strings: Strings persistentes são copiadas para buffers de tamanho fixo (char[])? (Evitar fragmentação de Heap).
  • Alocação Dinâmica: Proibido malloc/new em loops quentes ou ISRs.
  • Stack: O uso de pilha (stack high-water mark) é monitorado?

Resiliência (Rede e Dados)

  • NVS Abuse: Escritas na flash (NVS) possuem debounce? (Não gravar em loop).
  • Config: Validação de Schema e Ranges ao carregar configuração. Defaults seguros.
  • Backoff: Reconexão Wi-Fi/MQTT usa espera exponencial (sem loop agressivo)?
  • Payload Parser: O parser JSON é robusto a lixo ou campos faltando? (Não crasha o device).

Drivers e Hardware

  • Drivers Puros: Drivers fazem apenas I/O (sem regra de negócio)?
  • Idempotência: Comandos como relay_on() funcionam se o relé já estiver ligado?
  • Pinmap: Verificou conflitos ou uso de pinos proibidos (Input-only, Strapping)?

2. 🎯 Flutter & Dart (App Client)

Performance e Otimização

  • Consts: Uso agressivo de const em widgets imutáveis.
  • Build Purity: PROIBIDO lógica complexa ou chamadas de API no build().
  • Listas: Uso de ListView.builder para listas dinâmicas.
  • Layouts: Uso de Column e Row para layouts complexos. Evitar ListView para layouts estáticos.

Arquitetura e Testes

  • Clean Arch: Lógica separada da UI (Data / Logic / UI).
  • Testes: Mocks para dependências externas? Testes unitários para regras de negócio?
  • Chaves: Widgets interativos possuem Key para testes?

3. 🚦 Classificação do Feedback (Block Merge Rules)

Use esta classificação para determinar se o PR pode ser aprovado.

🔴 BLOCKER (Reprova o PR Imediatamente)

Ocorrências que IMPEDEM o merge:

  1. Memory Safety: Ponteiro para buffer temporário (stack/payload) salvo em estado global.
  2. Concurrency: Controle de hardware feito direto dentro de callback de rede/timer (sem desacoplamento).
  3. Safety: Falta de fail-safe em erro de sensor para atuador crítico.
  4. Hardware: Escrita em NVS (Flash) dentro de loop ou alta frequência.
  5. Flutter: Chamada de API bloqueante dentro do build().
  6. Security: Credenciais hardcoded.

🟡 WARNING (Requer Correção)

  • Falta de const no Flutter.
  • Logs excessivos sem throttle (pode inundar a serial).
  • Comentários que não batem com o código ("mentirosos").
  • Lógica de "safety" que depende de conexão MQTT.

🟢 NITPICK (Sugestão)

  • Melhoria de nomes de variáveis (ex: usar start_time_ms em vez de time).
  • Formatação ou estilo.

4. Contexto do PR

Se o usuário não fornecer, pergunte:

  • Qual o impacto em Hardware (GPIO/Consumo)?
  • Houve migração de Config/NVS?
  • Qual o comportamento esperado em caso de falha de sensor?