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.pyou.\start-sotuhire.ps1estiver 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_startequiet_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.