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¶
- O scanner e as camadas de redaction não tratam de forma uniforme credenciais Gemini modernas
com prefixo
AQ.; regex ampla geraria falsos positivos. - O mapper JSON Resume precisa preservar semanticamente cada seção suportada e manter registros
profissionais fora de
certificates. - 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¶
- Fontes Greenhouse, Lever, JobPosting e RSS/Atom precisam convergir em um contrato de oportunidade com provenance e snapshot.
- Dedupe não pode ocorrer apenas por título; merges incertos exigem revisão e preservação das fontes.
- CBO/QBQ, ESCO e O*NET são enriquecimento versionado, nunca confirmação automática de habilidade, registro ou experiência do candidato.
- 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¶
- Strings de UI, status, erros, ajuda e ARIA precisam de registry i18n pt-BR/en-US e locale adaptativo.
- Tema claro/escuro/sistema deve usar tokens semânticos, evitar flash inicial e respeitar
prefers-color-scheme. - Navegação, ajuda contextual, onboarding, estados vazios, mobile, teclado e zoom 200% precisam formar uma jornada coerente, não rotas isoladas.
- 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.