Pular para conteúdo

v1.9.0 - Scheduled Radar & Notifications

Objetivo

A v1.9.0 adiciona o primeiro ciclo de Radar Agendado e Notificacoes Locais do SotuHire. O objetivo e permitir que a pessoa configure buscas recorrentes locais com base em wishlists, fontes cadastradas, palavras-chave e Perfil Profissional Universal.

O scheduler e local-first: ele roda somente enquanto a FastAPI local esta aberta.

O que foi implementado

Area Status Observacao
Agendamentos do Radar Implementado CRUD local em /api/v1/radar/schedules.
Execucao manual run now Implementado Executa uma agenda sem esperar o proximo horario.
Runtime local Implementado Thread leve enquanto a API esta rodando.
Quiet hours Implementado Agenda pode pular execucao em horario de silencio.
Cooldown Implementado Notificacoes repetidas sao reduzidas por chave local.
Historico de runs Implementado Ultimas 100 runs mantidas no store local.
Notificacoes in-app Implementado Ultimas 200 notificacoes locais, com leitura e limpeza.
Perfil Profissional Implementado Scheduler pode usar contexto local quando habilitado.
Captura assistida autenticada Implementado como lembrete revisavel Nao coleta cookie, token, sessao, headers ou storage.
Notificacao nativa do SO Roadmap Pode entrar em versao futura.

Endpoints

GET    /api/v1/radar/schedules
POST   /api/v1/radar/schedules
GET    /api/v1/radar/schedules/{schedule_id}
PATCH  /api/v1/radar/schedules/{schedule_id}
DELETE /api/v1/radar/schedules/{schedule_id}
POST   /api/v1/radar/schedules/{schedule_id}/run-now
GET    /api/v1/radar/scheduled-runs
GET    /api/v1/radar/scheduler/status
POST   /api/v1/radar/scheduler/start
POST   /api/v1/radar/scheduler/stop

GET    /api/v1/notifications
PATCH  /api/v1/notifications/{notification_id}
POST   /api/v1/notifications/mark-all-read
DELETE /api/v1/notifications/read

Todos usam o envelope padrao da API:

{
  "ok": true,
  "data": {},
  "warnings": [],
  "request_id": "..."
}

Store local

O estado fica em:

data/radar/schedules.json

O store usa escrita atomica com arquivo temporario e replace. Se o arquivo nao existir, o estado comeca vazio. Se o JSON estiver invalido, a API cria um estado vazio com warning, sem interromper o servidor.

Retencao atual:

  • ultimas 100 runs agendadas;
  • ultimas 200 notificacoes.

Regras do scheduler

  • roda apenas enquanto python scripts/run_api.py ou .\start-sotuhire.ps1 estiver ativo;
  • nao e daemon do sistema operacional;
  • nao faz auto-apply;
  • nao envia curriculo;
  • nao salva vaga no tracker sem acao manual;
  • evita executar a mesma agenda em paralelo;
  • respeita quiet_hours_start e quiet_hours_end;
  • usa cooldown local para reduzir alertas repetidos;
  • usa Perfil Profissional Universal apenas quando use_profile_context=true;
  • nao envia dados sensiveis a provider externo quando allow_memory_context=false.

Captura assistida autenticada

A v1.9.0 permite que fontes de tipo authenticated_assisted_capture participem do scheduler como lembrete local revisavel.

Isso significa:

  • a agenda pode criar uma run e uma notificacao;
  • a pessoa abre a pagina e revisa o conteudo;
  • a captura assistida continua usando o fluxo existente e revisavel;
  • nenhum cookie, token, sessao, header autenticado, localStorage ou sessionStorage de terceiros e coletado pelo scheduler.

O SotuHire nao navega automaticamente em massa em conta logada, nao segue paginacao autenticada e nao tenta contornar protecoes.

UI

A tela Radar de Vagas ganhou:

  • aba/secao Agendamentos;
  • formulario rapido para criar agenda;
  • lista de schedules;
  • ativar/pausar agenda;
  • executar agora;
  • deletar agenda;
  • status do scheduler;
  • central de notificacoes com contador, marcar como lida, marcar todas e limpar lidas.

O modo Demo continua com dados ficticios claros. No modo API Real, quando nao houver dados, a UI mostra estado vazio em vez de misturar dados demo silenciosamente.

Limitacoes conhecidas

  • notificacoes nativas do sistema operacional ficam para versao futura;
  • o scheduler roda somente com a API local aberta;
  • APIs oficiais continuam dependentes de contrato documentado;
  • o matching adaptativo por dominio pode ser aprofundado nas proximas versoes;
  • detalhes extras do Kanban podem receber mais sinais de schedule/run depois.

Validacoes

Resultados reais ficam nas release notes docs/releases/v1.9.0.md.