Pular para conteúdo

Auditoria inicial integral — v1.10.1

Baseline verificável

A auditoria começou em 2026-08-09, antes de qualquer alteração funcional, diretamente em main. A árvore estava limpa e HEAD, origin/main e v1.9.9^{commit} apontavam para c7aca1aba9fcd9eba858b5416316a380abb5f2d0. A release pública v1.9.9 estava estável; a aplicação estava em 1.9.9, a extensão em 0.9.5 e o schema SQLite em 6.

As tags locais e remotas v1.9.9.1, v1.10.0 e v1.10.1 não existiam. A v1.10.1 absorverá os dois primeiros marcos sem criar tags ou releases intermediárias.

As variáveis opt-in SOTUHIRE_TEST_GEMINI_API_KEY e SOTUHIRE_TEST_OPENAI_API_KEY foram verificadas somente pela presença booleana, sem imprimir nem persistir os valores. Ambas estavam presentes; por isso external_ai, provider-diagnostic, provider-structured-output e release-smoke externo são gates obrigatórios, executados uma única vez após o feature freeze.

Inventário inicial

O repositório possui 1.323 arquivos rastreados: 272 em modules/, 184 em apps/, 267 em tests/, 483 em docs/, 35 em examples/, 25 em scripts/, 21 na extensão, 16 em benchmarks/, quatro workflows e dois arquivos de configuração. Foram encontrados 542 arquivos Python, 85 componentes/rotas TSX e 207 arquivos de teste ou especificação.

O escopo integral inclui README, changelog, contribuição, dependências, módulos de domínio, API, frontend, extensão, configurações, scripts, testes, benchmarks, exemplos, documentação e workflows. Ferramentas de análise podem produzir candidatos, mas nenhuma remoção será feita sem evidência de classificação DEAD.

Limite protegido

Os endpoints de navegador autenticado e seus três arquivos permanecem intocáveis. Estes hashes SHA-256 precisam ser idênticos no fechamento:

Arquivo SHA-256 inicial Classificação
apps/api/routes/sources.py 396957E3286618E2B1327DB681F66F6269690E2BFD907D8E97714B5D4C7024FF PUBLIC_API protegido
modules/scraping/browser_session.py 4B7454A581C32D6E88777C408C9F1F8F928F3F56B579E0035F07028B4EB37B65 ACTIVE protegido
modules/scraping/connectors/authenticated_browser.py 4F7E41BFF478873EF7D3E90AE67BCD6FF284FB4CBE36C70D217F3CD234264AB3 ACTIVE protegido

Também permanece proibida a criação de docs/ethics/allowed-vs-not-allowed.md e qualquer novo fluxo autenticado, auto-apply, envio automático, captura de credenciais ou decisão crítica autônoma.

Fontes de verdade iniciais

Domínio Estado inicial Auditoria necessária
Perfil e Career Context SQLite com compatibilidade legada e evidência revisável novos purposes, mínimo contexto e leitura única
Currículos e materiais árvore canônica, snapshots e exports reais round-trip JSON Resume por seção e registros profissionais
Oportunidades Radar, fontes manuais/extensão e snapshots contrato comum, fontes públicas, dedupe e ranking local
Candidaturas SQLite, Application Lab e Tracker conexão com entrevistas, tarefas e follow-up
IA task registry, prompts versionados, providers e fallback local novas tasks sem chamadas ad hoc nem excesso de contexto
Persistência schema 6 e migrations versionadas schema 7 somente para entidades operacionais necessárias
Frontend React/TanStack com rotas reais e componentes compartilhados i18n, tema, ajuda, onboarding, jornada e acessibilidade
Extensão MV3 0.9.5, pairing local e handoff por IDs i18n/ajuda e contrato 0.10.0 sem ler documentos locais

Riscos e lacunas prioritários

Correção e segurança

  1. O scanner e as camadas de redaction não tratam de forma uniforme credenciais Gemini modernas com prefixo AQ.; regex ampla geraria falsos positivos.
  2. O mapper JSON Resume precisa preservar semanticamente cada seção suportada e manter registros profissionais fora de certificates.
  3. O pairing deve ser auditado quanto a prova de posse, instalação, origin, replay, TTL, CSRF, reload e múltiplas janelas sem tocar o fluxo protegido de navegador autenticado.

Integridade e regras de negócio

  1. Fontes Greenhouse, Lever, JobPosting e RSS/Atom precisam convergir em um contrato de oportunidade com provenance e snapshot.
  2. Dedupe não pode ocorrer apenas por título; merges incertos exigem revisão e preservação das fontes.
  3. CBO/QBQ, ESCO e O*NET são enriquecimento versionado, nunca confirmação automática de habilidade, registro ou experiência do candidato.
  4. Interview, STAR, follow-up, tarefas, lembretes e planos precisam de evidência, revisão humana, stale/dependency hash e writers SQLite únicos.

Arquitetura e produto

  1. Strings de UI, status, erros, ajuda e ARIA precisam de registry i18n pt-BR/en-US e locale adaptativo.
  2. Tema claro/escuro/sistema deve usar tokens semânticos, evitar flash inicial e respeitar prefers-color-scheme.
  3. Navegação, ajuda contextual, onboarding, estados vazios, mobile, teclado e zoom 200% precisam formar uma jornada coerente, não rotas isoladas.
  4. Novas features de IA precisam declarar task, prompt, schema, provider capability, purpose, EvidenceScope, consumidor e fallback local.

Estratégia de execução

A ordem será correção, segurança, integridade, regras, amarrações, arquitetura, UX, features, documentação e release. Durante o desenvolvimento serão executados apenas testes direcionados. Após o feature freeze haverá uma rodada completa; falhas serão corrigidas por teste específico e a suíte integral será repetida apenas uma última vez quando necessário.

Commits permanecerão locais e atômicos, com poucos pushes estáveis diretamente para main, sem branch ou PR. A tag anotada e a release estável v1.10.1 só serão criadas após CI, CodeQL e Docs verdes, hashes protegidos idênticos, migration validada, scans/audits limpos, assets conferidos e gates externos reais aprovados.