Skip to content

Abandonar o target web (sub-projeto 1 da reformulação) - #4

Merged
lucasjosee merged 5 commits into
mainfrom
feat/abandonar-web
Sep 13, 2026
Merged

lucasjosee merged 5 commits into
mainfrom
feat/abandonar-web

Conversation

@lucasjosee

Copy link
Copy Markdown
Owner

Primeira das duas branches do sub-projeto motor de conversa + persistência. Esta remove o target web por completo — pré-requisito para as tabelas novas de conversa não precisarem de suporte no parser de SQL com regex.

Spec e plano em ~/Documentos/Projetos/CropAI-docs/ (privados). Cada tarefa foi implementada por subagente com TDD e revisada por um segundo subagente contra o brief; as decisões do controlador estão registradas no ledger de execução.

O que sai

WebDatabaseDriver parser de SQL com regex que moldava código de produção (JOINs em JS). dbDriver agora falha alto antes de initDatabase()
Ramo web da inferência sorteava diagnóstico e gravava modelo_usado como se fosse real
Fallback localStorage do secureStorage só expo-secure-store com WHEN_UNLOCKED_THIS_DEVICE_ONLY
react-native-web, react-dom, scripts web/build:web, config web do app.json, passo de export do CI —

Dois achados que vão além da limpeza

O diagnóstico visual nativo nunca executou com este código. Converter os require() sem tipo em imports tipados expôs dois bugs pré-existentes, ambos engolidos pelo catch genérico de runImageInference: o código chamava loadModel, que react-native-fast-tflite nunca exportou (o nome é loadTensorflowModel), e o pacote buffer nunca esteve instalado. Com qualquer um dos dois, toda inferência no aparelho caía em "Falha ao processar a imagem". O mock web mascarava isso em desenvolvimento. Corrigidos em 7cd34a2; o RF01 precisa de teste em aparelho real antes de qualquer homologação.

@expo/metro-runtime foi mantido, ao contrário do plano original: expo-router/entry-classic.js:3 o importa incondicionalmente e é o main do app. Desinstalar teria quebrado a inicialização nativa.

Verificação

Frontend: 51 testes (54 → 47 ao remover os testes do mock web → 51 com os novos), typecheck limpo, npm run build:web inexistente. Backend intocado.

🤖 Generated with Claude Code

https://claude.ai/code/session_01Pmgii3S5sfMZghFqQXhbkH

lucasjosee and others added 5 commits September 12, 2026 08:05
O parser de SQL com regex existia para o app rodar no browser. Ele moldava
código de produção — JOINs feitos em JavaScript porque o parser não os
entende — e exigiria suporte manual a cada tabela nova.

Sem target web, dbDriver passa a falhar alto se usado antes de
initDatabase(), em vez de simular sucesso vazio.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pmgii3S5sfMZghFqQXhbkH
O ramo web sorteava um diagnóstico e gravava modelo_usado como se fosse
inferência real. Os require() dentro da função só existiam para não
carregar módulo nativo no browser.

Converter os require() em imports tipados expôs dois bugs pré-existentes
no pipeline nativo, ambos engolidos pelo catch genérico: o código chamava
loadModel, que react-native-fast-tflite nunca exportou (o nome é
loadTensorflowModel), e o pacote buffer nunca esteve instalado. Com
qualquer um dos dois, runImageInference sempre caía em "Falha ao processar
a imagem" no aparelho. Corrigidos aqui; o asset .tflite passa a import
estático com declaração de tipo em types/assets.d.ts.

Também passa a exigir o delegate de CPU explicitamente e falha com mensagem
clara se o redimensionamento não devolver base64.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pmgii3S5sfMZghFqQXhbkH
Câmera, modelo on-device, GPS e mapa não fazem sentido no browser. Saem
o react-native-web e o react-dom, o script build:web, a config web do
app.json e o passo de export do CI. O @expo/metro-runtime permanece:
expo-router/entry carrega expo-router/entry-classic, que importa
'@expo/metro-runtime' incondicionalmente (primeira linha do arquivo),
então removê-lo quebraria a inicialização do app nativo.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01Pmgii3S5sfMZghFqQXhbkH
@lucasjosee
lucasjosee merged commit 70a1a40 into main Sep 13, 2026
2 checks passed
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