SotuHire v1.9.6 — Data Reliability, Migrations, Backups, Snapshots & Documentation Integrity¶
Destaques¶
- Repository abstraction e SQLite local versionado.
- Migração segura dos stores JSON/JSONL, sempre preservando os originais.
- Backup, export, restore e data health com validação de integridade.
- Snapshots imutáveis de vagas, currículos, editais e análises.
- Tracker ligado à vaga, ao currículo e às análises realmente usados.
- Deduplicação, identidade canônica e proveniência reforçadas.
- Perfil Universal e Career Context auditados por finalidade.
- Capabilities manifest e matriz de integração verificável.
AiRunStorepara rastreabilidade sem segredos.- Extensão com handshake, snapshots, JSON-LD e fila offline confiável.
- Painel de Dados e Privacidade, README e documentação reorganizados.
- CI com matriz Windows/Ubuntu, Python 3.11/3.12 e testes frontend unitários.
Segurança¶
- Nenhuma chave exposta foi usada ou validada.
- Testes reais de IA continuam opt-in por variável local temporária.
- Nenhuma chave deve entrar em Git, frontend, site, extensão empacotada, log, screenshot, backup ou release.
- Sem auto-apply, candidatura ou inscrição automática.
- Sem pagamento, boleto ou envio automático de documentos.
- Sem scraping autenticado novo.
- Sem alteração no fluxo
authenticated-browser.
Migração¶
Primeiro execute:
python scripts/migrate_local_data.py --dry-run
O dry-run detecta stores, contagens, duplicatas, rejeições e warnings sem criar banco ou backup. Para aplicar:
python scripts/migrate_local_data.py --apply
python scripts/migrate_local_data.py --verify
O apply cria backup completo antes da transação, registra migration_history, valida schema/FKs e não apaga JSON/JSONL. Registros legados sem texto original não recebem snapshot inventado.
Para voltar aos arquivos antigos, mantenha os stores preservados e configure a versão anterior para lê-los. Para restaurar um backup:
python scripts/restore_data.py data/backups/ARQUIVO.zip
python scripts/restore_data.py data/backups/ARQUIVO.zip --apply
A primeira chamada valida sem gravar. O painel web exige confirmação textual e cria backup preventivo antes do restore.
Validações¶
Resultados locais antes da tag, todos sem chave externa:
ruff check .eruff format --check .: aprovados;pyright: aprovado, sem erros;pytest: 483 aprovados e 2 ignorados por opt-in de IA externa;- cobertura: 86% de 16.105 statements, sem threshold artificial;
- extensão: 46 testes direcionados aprovados e ZIP 0.9.2 validado;
- frontend: 6 testes Vitest/Testing Library/MSW aprovados;
- Playwright: 55 aprovados em Chromium, Firefox e WebKit; 5 skips intencionais;
- build, lint e typecheck do frontend: aprovados;
mkdocs build --strict,compileall, contratos de capabilities/matriz/prompts e verificação de schema: aprovados;- instalação limpa a partir de
git archive HEAD: aprovada, incluindo pytest, extensão, docs, frontend e E2E Chromium; - CI remoto: aprovado na matriz Ubuntu/Windows, Python 3.11/3.12, frontend, extensão e cobertura;
- CodeQL remoto: aprovado para Python e JavaScript/TypeScript;
- dry-run local: 1 perfil, 112 memórias, 3 candidaturas e 2 projetos; 69 memórias duplicadas detectadas;
- data health: saudável, com um warning de oportunidade sem referência de origem;
- backup local: seis arquivos com checksums e schema 3; restore validado em dry-run sem sobrescrita.
Nenhuma migração --apply foi executada sobre os dados pessoais da instalação auditada. O apply foi validado apenas em fixtures temporárias.
Gaps corrigidos¶
- health check agora é read-only inclusive para banco pré-schema;
- restore valida checksum, formato, versão, schema, SQLite e FKs;
- manifest registra schema real e máximo suportado;
- snapshots bloqueiam update/delete e usam FKs
RESTRICT; - timelines legadas de edital seguem o contrato de lista;
- scripts de dados executam corretamente fora da raiz;
- Tracker preserva eventos e vínculos de snapshots;
- permissões de IA, fallback OpenAI e warnings do frontend foram corrigidos;
- fila e fallback da extensão deixam de ser decorativos/silenciosos.
- teste GitHub deixou de depender da existência de evidências pessoais na máquina e agora passa em checkout limpo.
- notificações do frontend aguardam o navegador ficar ocioso e não atualizam o Sonner durante renderizações concorrentes.
- lockfile frontend inclui dependências opcionais necessárias ao
npm ciem Linux; - instalação limpa sem navegador fica no job Python, enquanto Chromium/E2E permanece obrigatório no job frontend.
Pendências¶
- benchmark completo e baseline humano de IA ficam para o ciclo de avaliação;
- Exam Fit e plano de estudo ainda são resultados transitórios;
- candidatos da análise GitHub direta precisam de revisão integrada mais completa na tela;
- stores legados continuam durante a adoção gradual do SQLite;
- a migração dos dados pessoais deve ser acionada conscientemente pela pessoa usuária.