Skip to content

Sub-projeto 7: tela principal - #11

Open
lucasjosee wants to merge 9 commits into
mainfrom
feat/tela-principal
Open

lucasjosee wants to merge 9 commits into
mainfrom
feat/tela-principal

Conversation

@lucasjosee

Copy link
Copy Markdown
Owner

Sub-projeto 7 de 7 — o último. A tela principal vira o resumo do app, e as duas telas que existiam sem porta de entrada passam a ser alcançáveis.

Spec: CropAI-docs/especificacoes/2026-09-14-tela-principal-design.md
Plano: CropAI-docs/planos/2026-09-14-tela-principal.md
Ledger: CropAI-docs/historico/execucoes/2026-09-14-tela-principal-ledger.md

Backend não muda. git diff -- backend/ é vazio. Nenhuma tabela, nenhuma migração, nenhum endpoint.

O que este PR fecha

app/index.tsx era a única tela que a reformulação não tinha tocado. 763 linhas mostrando um mundo que deixou de existir: duas abas — "Meus Diagnósticos", lendo fila_diagnosticos com SELECT * cru dentro da tela, e "Enciclopédia de Doenças" —, uma busca, um botão de mock de desenvolvimento, e uma barra inferior que não era navegação: três TouchableOpacity fazendo router.push, com "Catálogo" fixo como aba ativa.

Depois do sub-projeto 3, toda foto vira conversa. Isso tornou a aba "Meus Diagnósticos" uma segunda leitura pior da mesma informação — sem o que a IA respondeu, sem o que o produtor perguntou depois. Ela some sem substituta.

E duas telas prontas não tinham porta nenhuma: /mapa, construída inteira no sub-projeto 6, era inalcançável pela interface.

A Home

Dois blocos de resumo e um botão. Conversas recentes, contagem do mapa, Analisar.

O bloco do mapa é contagem, não MapView, e isso foi decisão de risco. A chave do Google Maps para Android não está provisionada, e a falha é silenciosa — o mapa desenha em branco. Um MapView na Home transformaria um pendente de deploy na primeira coisa que o produtor vê, a cada boot. Contagem funciona offline, não depende de chave, e a informação útil ("tem análise lá, e tem problema") chega igual.

O texto diz "com problema", não "com doença", pela mesma razão que o sub-projeto 6 pintou os pinos em duas cores só: Fitotoxicidade é dano químico, não doença.

A Home faz duas consultas e nenhuma dentro de laço. Isso exigiu trabalho: montarPinos chama resolveDiseaseName uma vez por linha — N consultas ao SQLite para N pinos, lacuna registrada na spec do sub-projeto 6. A classificação foi extraída para uma função pura e síncrona, e o resumo conta sem tocar o catálogo. A lacuna continua de pé em /mapa, mas deixa de se propagar para a tela de entrada.

O bug do PROBING, e por que a correção óbvia estava errada

O sub-projeto 6 deixou nomeado: /mapa checa connectionMode === 'FIELD' e ignora 'PROBING', o estado inicial do app por até ~7 s. Hoje é inalcançável; ligar a navegação torna real.

A correção que a lacuna sugeria — FIELD || PROBING — está errada. Durante o probe o app não sabe se há rede; dizer "o mapa precisa de conexão" a quem tem internet troca um falso negativo por um falso positivo. São três estados: PROBING carrega, FIELD avisa, ONLINE/DEGRADED desenham.

O detalhe que fecha o argumento: quando o NetInfo detecta desconexão física, o store vai direto para FIELD e PROBING nem acontece. A janela de dúvida é exatamente o cenário de campo — torre sem dados, wi-fi sem saída.

Navegação: "Home e volta"

Sem barra. Câmera, conversas, mapa e catálogo já tinham seta de voltar.

As duas barras falsas foram apagadas — e a da câmera tinha ficado ativamente errada. Sua aba "Catálogo" chama router.replace('/'), que depois desta mudança leva à Home e não a catálogo nenhum. app/_layout.tsx passa a registrar as oito rotas; mapa nunca constava.

Duas perdas assumidas

Não há mais como forçar um sync à mão. A Home era o único lugar que mostrava a contagem de pendentes e o único que chamava syncNow({ manual: true }). O sync automático continua — _layout.tsx dispara na transição para ONLINE, inclusive a do boot —, mas depois de uma falha não há retry manual, num app offline-first onde a fila é o produto. Registrado nas Lacunas.

Falha de leitura vira só console.warn, sem nada visível. A Home anterior mostrava Toast de erro. As três telas novas (Home, /catalogo, /mapa) compartilham esse padrão — o que foi achado só na revisão de branch inteira, porque nenhuma revisão por tarefa via as três juntas. Registrado para decidir se vira convenção ou dívida.

Testes

Frontend 226 → 254 (26 arquivos). Backend intocado em 82. Typecheck limpo nos dois pacotes.

Quatro das oito tarefas são de tela e corretamente não têm teste novo — o projeto não tem testing-library e não testa componentes nem telas. A lógica dessas tarefas vive em módulos puros que são testados: classificarPino, resumoDoMapa, estadoDoMapa, filtrarDoencas, rotuloSeveridade, tipoSeveridade, e o limite de listSessions.

⚠️ Continua valendo

Nada nunca rodou em aparelho real. Com a reformulação fechada, isto deixa de ser um pendente entre outros e passa a ser o próximo passo do projeto. A chave do Google Maps para Android segue sem provisionar — /mapa continua em branco no Android até ela existir.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant