feat(frontend): exibe histórico de candidatura - #237

Merged
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas
Aug 29, 2026
Merged

feat(frontend): exibe histórico de candidatura#237
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas

Conversation

@Jovinull

@JovinullJovinull commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Card

  • PAV-19

Objetivo e escopo

  • Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de status da candidatura.
  • Manter o histórico restrito a vagas já salvas pelo usuário.

O que foi feito

  • Consulta os eventos da vaga salva em GET /saved-jobs/:id/events ao abrir o detalhe.
  • Exibe estados de carregamento, histórico vazio e falha de carregamento.
  • Mostra a transição de status, data e metadados disponíveis para cada evento.
  • Atualiza o histórico ao alterar o status da vaga enquanto o detalhe está aberto.

Módulos afetados

  • frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx
  • frontend/src/domains/new_dashboard/NewDashboardPage.tsx
  • frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts
  • frontend/src/domains/new_dashboard/types/job.ts
  • Testes unitários do dashboard, API e página.

Validação

  • CI do PR concluído com sucesso, incluindo coverage de frontend e backend, lint e build.
  • npm exec --workspace=frontend vitest run tests/unit/new_dashboard/api.test.ts tests/unit/new_dashboard/jobs.test.tsx tests/unit/new_dashboard/page.test.tsx - 3 arquivos e 43 testes aprovados.
  • Os testes cobrem o carregamento do histórico, estado vazio, erro de API e a atualização após mudança de status.
  • npm run lint --workspace=frontend - concluído sem erros.
  • npm run build --workspace=frontend - concluído com sucesso.
  • Fluxo navegável do dashboard validado: abertura de vaga acompanhada, exibição do evento inicial, alteração de status e atualização do histórico com o novo evento.

Riscos e observações

  • Sem alteração de schema ou migration.
  • O histórico depende da disponibilidade do endpoint GET /saved-jobs/:id/events para vagas salvas.

hltavand others added 2 commits August 23, 2026 18:32
…ode-Community#230)
## Linear
Issue: PAV-119
Closes PAV-119
## Branch flow
- [ ] Este PR é uma feature/fix/chore destinada a `develop`.
- [x] Este é um PR de release com origem `develop` e destino `master`.
- [x] Este PR não pula o fluxo obrigatório entre `develop` e `master`.
## Objetivo
Promover para `master` a implementação do lock distribuído do scraper,
garantindo no máximo uma execução ativa do pipeline entre diferentes
origens de disparo.
## Resumo das Alterações
- Implementa lock distribuído no Valkey compartilhado por cron, execução
manual administrativa e cache miss de `/scrape`.
- Utiliza aquisição atômica com `SET NX PX`, TTL e renovação periódica.
- Protege renovação e liberação por ownership/token.
- Implementa comportamento fail-closed quando o Valkey não confirma a
aquisição.
- Cancela a execução de forma segura em caso de perda do lock.
- Adiciona estado operacional com `runId`, origem, início e expiração
sem expor o token proprietário.
- Adiciona contratos HTTP para execução concorrente e indisponibilidade
do run lock.
- Alinha os defaults de `SCRAPER_RUN_LOCK_TTL` e
`SCRAPER_RUN_LOCK_RENEW_INTERVAL` à semântica fail-fast definida
anteriormente.
- Adiciona cobertura de testes para concorrência, ownership,
configuração, renovação, liberação e cenários de falha.
- Atualiza documentação e configuração do Docker Compose.
## Arquivos e Módulos Afetados
- Scraper Go
- Run lock / Valkey
- Scheduler e pipeline do scraper
- Backend administrativo
- Configuração do scraper
- Docker Compose
- Testes Go e backend
- Documentação operacional
## Validação
- [x] Implementação revisada contra o escopo da PAV-119.
- [x] Ajustes solicitados no code review aplicados.
- [x] Semântica fail-fast das configurações do run lock validada.
- [x] Nenhuma alteração de frontend incluída no escopo.
- [ ] CI final do PR de release validado.
## Observações
Este PR promove alterações já integradas e revisadas em `develop`.
Não realizar squash ou alterações adicionais diretamente em `master`
fora do fluxo de release.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR fora do padrão de contribuição do projeto.

Por favor, ajuste a descrição conforme o template/documentação do repositório, incluindo card relacionado, objetivo, resumo das alterações, módulos afetados e validações executadas.

Após a adequação, a revisão técnica será retomada.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A implementação atende aos critérios funcionais atuais da PAV-19 e pode seguir para merge.

Fica registrado como débito técnico o acoplamento do contrato da timeline ao tipo único de evento atualmente suportado. O modelo de histórico tende a evoluir para outros tipos de eventos, e essa limitação pode exigir revisão futura para evitar fragilidade no consumo da timeline.

Recomendo abrir um card específico de débito técnico para tratar essa evolução sem bloquear a entrega atual.

@hltav
hltav merged commit 810c1fd into Cla-Code-Community:developAug 29, 2026
1 check passed
@github-project-automationgithub-project-automationBot moved this from Backlog to Done in JobAtlas – KanbanAug 29, 2026
hltav added a commit that referenced this pull request Aug 29, 2026
## Card
- PAV-19
## Objetivo e escopo
- Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de
status da candidatura.
- Manter o histórico restrito a vagas já salvas pelo usuário.
## O que foi feito
- Consulta os eventos da vaga salva em `GET /saved-jobs/:id/events` ao
abrir o detalhe.
- Exibe estados de carregamento, histórico vazio e falha de
carregamento.
- Mostra a transição de status, data e metadados disponíveis para cada
evento.
- Atualiza o histórico ao alterar o status da vaga enquanto o detalhe
está aberto.
## Módulos afetados
-
`frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx`
- `frontend/src/domains/new_dashboard/NewDashboardPage.tsx`
-
`frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts`
- `frontend/src/domains/new_dashboard/types/job.ts`
- Testes unitários do dashboard, API e página.
## Validação
- [x] CI do PR concluído com sucesso, incluindo coverage de frontend e
backend, lint e build.
- [x] `npm exec --workspace=frontend vitest run
tests/unit/new_dashboard/api.test.ts
tests/unit/new_dashboard/jobs.test.tsx
tests/unit/new_dashboard/page.test.tsx` - 3 arquivos e 43 testes
aprovados.
- [x] Os testes cobrem o carregamento do histórico, estado vazio, erro
de API e a atualização após mudança de status.
- [x] `npm run lint --workspace=frontend` - concluído sem erros.
- [x] `npm run build --workspace=frontend` - concluído com sucesso.
- [x] Fluxo navegável do dashboard validado: abertura de vaga
acompanhada, exibição do evento inicial, alteração de status e
atualização do histórico com o novo evento.
## Riscos e observações
- Sem alteração de schema ou migration.
- O histórico depende da disponibilidade do endpoint `GET
/saved-jobs/:id/events` para vagas salvas.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jovinull@hltav
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Add copy buttons to all
 blocks\n(function() {\n function addCopyButtons() {\n document.querySelectorAll('pre code').forEach(function(codeBlock) {\n if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;\n codeBlock.parentElement.setAttribute('data-copy-added', 'true');\n \n var btn = document.createElement('button');\n btn.textContent = 'Copy';\n btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';\n btn.onmouseover = function() { this.style.opacity = '1'; };\n btn.onmouseout = function() { this.style.opacity = '0.7'; };\n btn.onclick = function() {\n navigator.clipboard.writeText(codeBlock.textContent).then(function() {\n btn.textContent = 'Copied!';\n setTimeout(function() { btn.textContent = 'Copy'; }, 1500);\n });\n };\n codeBlock.parentElement.style.position = 'relative';\n codeBlock.parentElement.appendChild(btn);\n });\n }\n \n addCopyButtons();\n \n // Re-run on dynamic content\n var observer = new MutationObserver(addCopyButtons);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Add Copy Buttons to Code Blocks");
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
Skip to content

feat(frontend): exibe histórico de candidatura - #237

Merged
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas
Aug 29, 2026
Merged

feat(frontend): exibe histórico de candidatura#237
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas

Conversation

@Jovinull

@JovinullJovinull commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Card

  • PAV-19

Objetivo e escopo

  • Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de status da candidatura.
  • Manter o histórico restrito a vagas já salvas pelo usuário.

O que foi feito

  • Consulta os eventos da vaga salva em GET /saved-jobs/:id/events ao abrir o detalhe.
  • Exibe estados de carregamento, histórico vazio e falha de carregamento.
  • Mostra a transição de status, data e metadados disponíveis para cada evento.
  • Atualiza o histórico ao alterar o status da vaga enquanto o detalhe está aberto.

Módulos afetados

  • frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx
  • frontend/src/domains/new_dashboard/NewDashboardPage.tsx
  • frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts
  • frontend/src/domains/new_dashboard/types/job.ts
  • Testes unitários do dashboard, API e página.

Validação

  • CI do PR concluído com sucesso, incluindo coverage de frontend e backend, lint e build.
  • npm exec --workspace=frontend vitest run tests/unit/new_dashboard/api.test.ts tests/unit/new_dashboard/jobs.test.tsx tests/unit/new_dashboard/page.test.tsx - 3 arquivos e 43 testes aprovados.
  • Os testes cobrem o carregamento do histórico, estado vazio, erro de API e a atualização após mudança de status.
  • npm run lint --workspace=frontend - concluído sem erros.
  • npm run build --workspace=frontend - concluído com sucesso.
  • Fluxo navegável do dashboard validado: abertura de vaga acompanhada, exibição do evento inicial, alteração de status e atualização do histórico com o novo evento.

Riscos e observações

  • Sem alteração de schema ou migration.
  • O histórico depende da disponibilidade do endpoint GET /saved-jobs/:id/events para vagas salvas.

hltavand others added 2 commits August 23, 2026 18:32
…ode-Community#230)
## Linear
Issue: PAV-119
Closes PAV-119
## Branch flow
- [ ] Este PR é uma feature/fix/chore destinada a `develop`.
- [x] Este é um PR de release com origem `develop` e destino `master`.
- [x] Este PR não pula o fluxo obrigatório entre `develop` e `master`.
## Objetivo
Promover para `master` a implementação do lock distribuído do scraper,
garantindo no máximo uma execução ativa do pipeline entre diferentes
origens de disparo.
## Resumo das Alterações
- Implementa lock distribuído no Valkey compartilhado por cron, execução
manual administrativa e cache miss de `/scrape`.
- Utiliza aquisição atômica com `SET NX PX`, TTL e renovação periódica.
- Protege renovação e liberação por ownership/token.
- Implementa comportamento fail-closed quando o Valkey não confirma a
aquisição.
- Cancela a execução de forma segura em caso de perda do lock.
- Adiciona estado operacional com `runId`, origem, início e expiração
sem expor o token proprietário.
- Adiciona contratos HTTP para execução concorrente e indisponibilidade
do run lock.
- Alinha os defaults de `SCRAPER_RUN_LOCK_TTL` e
`SCRAPER_RUN_LOCK_RENEW_INTERVAL` à semântica fail-fast definida
anteriormente.
- Adiciona cobertura de testes para concorrência, ownership,
configuração, renovação, liberação e cenários de falha.
- Atualiza documentação e configuração do Docker Compose.
## Arquivos e Módulos Afetados
- Scraper Go
- Run lock / Valkey
- Scheduler e pipeline do scraper
- Backend administrativo
- Configuração do scraper
- Docker Compose
- Testes Go e backend
- Documentação operacional
## Validação
- [x] Implementação revisada contra o escopo da PAV-119.
- [x] Ajustes solicitados no code review aplicados.
- [x] Semântica fail-fast das configurações do run lock validada.
- [x] Nenhuma alteração de frontend incluída no escopo.
- [ ] CI final do PR de release validado.
## Observações
Este PR promove alterações já integradas e revisadas em `develop`.
Não realizar squash ou alterações adicionais diretamente em `master`
fora do fluxo de release.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR fora do padrão de contribuição do projeto.

Por favor, ajuste a descrição conforme o template/documentação do repositório, incluindo card relacionado, objetivo, resumo das alterações, módulos afetados e validações executadas.

Após a adequação, a revisão técnica será retomada.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A implementação atende aos critérios funcionais atuais da PAV-19 e pode seguir para merge.

Fica registrado como débito técnico o acoplamento do contrato da timeline ao tipo único de evento atualmente suportado. O modelo de histórico tende a evoluir para outros tipos de eventos, e essa limitação pode exigir revisão futura para evitar fragilidade no consumo da timeline.

Recomendo abrir um card específico de débito técnico para tratar essa evolução sem bloquear a entrega atual.

@hltav
hltav merged commit 810c1fd into Cla-Code-Community:developAug 29, 2026
1 check passed
@github-project-automationgithub-project-automationBot moved this from Backlog to Done in JobAtlas – KanbanAug 29, 2026
hltav added a commit that referenced this pull request Aug 29, 2026
## Card
- PAV-19
## Objetivo e escopo
- Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de
status da candidatura.
- Manter o histórico restrito a vagas já salvas pelo usuário.
## O que foi feito
- Consulta os eventos da vaga salva em `GET /saved-jobs/:id/events` ao
abrir o detalhe.
- Exibe estados de carregamento, histórico vazio e falha de
carregamento.
- Mostra a transição de status, data e metadados disponíveis para cada
evento.
- Atualiza o histórico ao alterar o status da vaga enquanto o detalhe
está aberto.
## Módulos afetados
-
`frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx`
- `frontend/src/domains/new_dashboard/NewDashboardPage.tsx`
-
`frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts`
- `frontend/src/domains/new_dashboard/types/job.ts`
- Testes unitários do dashboard, API e página.
## Validação
- [x] CI do PR concluído com sucesso, incluindo coverage de frontend e
backend, lint e build.
- [x] `npm exec --workspace=frontend vitest run
tests/unit/new_dashboard/api.test.ts
tests/unit/new_dashboard/jobs.test.tsx
tests/unit/new_dashboard/page.test.tsx` - 3 arquivos e 43 testes
aprovados.
- [x] Os testes cobrem o carregamento do histórico, estado vazio, erro
de API e a atualização após mudança de status.
- [x] `npm run lint --workspace=frontend` - concluído sem erros.
- [x] `npm run build --workspace=frontend` - concluído com sucesso.
- [x] Fluxo navegável do dashboard validado: abertura de vaga
acompanhada, exibição do evento inicial, alteração de status e
atualização do histórico com o novo evento.
## Riscos e observações
- Sem alteração de schema ou migration.
- O histórico depende da disponibilidade do endpoint `GET
/saved-jobs/:id/events` para vagas salvas.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jovinull@hltav
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Force GitHub README to respect dark mode\n(function() {\n var style = document.createElement('style');\n style.textContent = '\n .markdown-body {\n color-scheme: dark light;\n }\n .markdown-body pre { background: #161b22 !important; }\n .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; }\n .markdown-body table th, .markdown-body table td { border-color: #30363d !important; }\n .markdown-body img { background: #0d1117; }\n .markdown-body blockquote { border-left-color: #8b949e; }\n .markdown-body hr { border-color: #30363d; }\n ';\n document.head.appendChild(style);\n})();", "GitHub Dark Mode README Fix"); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(frontend): exibe histórico de candidatura - #237

Merged
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas
Aug 29, 2026
Merged

feat(frontend): exibe histórico de candidatura#237
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas

Conversation

@Jovinull

@JovinullJovinull commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Card

  • PAV-19

Objetivo e escopo

  • Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de status da candidatura.
  • Manter o histórico restrito a vagas já salvas pelo usuário.

O que foi feito

  • Consulta os eventos da vaga salva em GET /saved-jobs/:id/events ao abrir o detalhe.
  • Exibe estados de carregamento, histórico vazio e falha de carregamento.
  • Mostra a transição de status, data e metadados disponíveis para cada evento.
  • Atualiza o histórico ao alterar o status da vaga enquanto o detalhe está aberto.

Módulos afetados

  • frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx
  • frontend/src/domains/new_dashboard/NewDashboardPage.tsx
  • frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts
  • frontend/src/domains/new_dashboard/types/job.ts
  • Testes unitários do dashboard, API e página.

Validação

  • CI do PR concluído com sucesso, incluindo coverage de frontend e backend, lint e build.
  • npm exec --workspace=frontend vitest run tests/unit/new_dashboard/api.test.ts tests/unit/new_dashboard/jobs.test.tsx tests/unit/new_dashboard/page.test.tsx - 3 arquivos e 43 testes aprovados.
  • Os testes cobrem o carregamento do histórico, estado vazio, erro de API e a atualização após mudança de status.
  • npm run lint --workspace=frontend - concluído sem erros.
  • npm run build --workspace=frontend - concluído com sucesso.
  • Fluxo navegável do dashboard validado: abertura de vaga acompanhada, exibição do evento inicial, alteração de status e atualização do histórico com o novo evento.

Riscos e observações

  • Sem alteração de schema ou migration.
  • O histórico depende da disponibilidade do endpoint GET /saved-jobs/:id/events para vagas salvas.

hltavand others added 2 commits August 23, 2026 18:32
…ode-Community#230)
## Linear
Issue: PAV-119
Closes PAV-119
## Branch flow
- [ ] Este PR é uma feature/fix/chore destinada a `develop`.
- [x] Este é um PR de release com origem `develop` e destino `master`.
- [x] Este PR não pula o fluxo obrigatório entre `develop` e `master`.
## Objetivo
Promover para `master` a implementação do lock distribuído do scraper,
garantindo no máximo uma execução ativa do pipeline entre diferentes
origens de disparo.
## Resumo das Alterações
- Implementa lock distribuído no Valkey compartilhado por cron, execução
manual administrativa e cache miss de `/scrape`.
- Utiliza aquisição atômica com `SET NX PX`, TTL e renovação periódica.
- Protege renovação e liberação por ownership/token.
- Implementa comportamento fail-closed quando o Valkey não confirma a
aquisição.
- Cancela a execução de forma segura em caso de perda do lock.
- Adiciona estado operacional com `runId`, origem, início e expiração
sem expor o token proprietário.
- Adiciona contratos HTTP para execução concorrente e indisponibilidade
do run lock.
- Alinha os defaults de `SCRAPER_RUN_LOCK_TTL` e
`SCRAPER_RUN_LOCK_RENEW_INTERVAL` à semântica fail-fast definida
anteriormente.
- Adiciona cobertura de testes para concorrência, ownership,
configuração, renovação, liberação e cenários de falha.
- Atualiza documentação e configuração do Docker Compose.
## Arquivos e Módulos Afetados
- Scraper Go
- Run lock / Valkey
- Scheduler e pipeline do scraper
- Backend administrativo
- Configuração do scraper
- Docker Compose
- Testes Go e backend
- Documentação operacional
## Validação
- [x] Implementação revisada contra o escopo da PAV-119.
- [x] Ajustes solicitados no code review aplicados.
- [x] Semântica fail-fast das configurações do run lock validada.
- [x] Nenhuma alteração de frontend incluída no escopo.
- [ ] CI final do PR de release validado.
## Observações
Este PR promove alterações já integradas e revisadas em `develop`.
Não realizar squash ou alterações adicionais diretamente em `master`
fora do fluxo de release.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR fora do padrão de contribuição do projeto.

Por favor, ajuste a descrição conforme o template/documentação do repositório, incluindo card relacionado, objetivo, resumo das alterações, módulos afetados e validações executadas.

Após a adequação, a revisão técnica será retomada.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A implementação atende aos critérios funcionais atuais da PAV-19 e pode seguir para merge.

Fica registrado como débito técnico o acoplamento do contrato da timeline ao tipo único de evento atualmente suportado. O modelo de histórico tende a evoluir para outros tipos de eventos, e essa limitação pode exigir revisão futura para evitar fragilidade no consumo da timeline.

Recomendo abrir um card específico de débito técnico para tratar essa evolução sem bloquear a entrega atual.

@hltav
hltav merged commit 810c1fd into Cla-Code-Community:developAug 29, 2026
1 check passed
@github-project-automationgithub-project-automationBot moved this from Backlog to Done in JobAtlas – KanbanAug 29, 2026
hltav added a commit that referenced this pull request Aug 29, 2026
## Card
- PAV-19
## Objetivo e escopo
- Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de
status da candidatura.
- Manter o histórico restrito a vagas já salvas pelo usuário.
## O que foi feito
- Consulta os eventos da vaga salva em `GET /saved-jobs/:id/events` ao
abrir o detalhe.
- Exibe estados de carregamento, histórico vazio e falha de
carregamento.
- Mostra a transição de status, data e metadados disponíveis para cada
evento.
- Atualiza o histórico ao alterar o status da vaga enquanto o detalhe
está aberto.
## Módulos afetados
-
`frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx`
- `frontend/src/domains/new_dashboard/NewDashboardPage.tsx`
-
`frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts`
- `frontend/src/domains/new_dashboard/types/job.ts`
- Testes unitários do dashboard, API e página.
## Validação
- [x] CI do PR concluído com sucesso, incluindo coverage de frontend e
backend, lint e build.
- [x] `npm exec --workspace=frontend vitest run
tests/unit/new_dashboard/api.test.ts
tests/unit/new_dashboard/jobs.test.tsx
tests/unit/new_dashboard/page.test.tsx` - 3 arquivos e 43 testes
aprovados.
- [x] Os testes cobrem o carregamento do histórico, estado vazio, erro
de API e a atualização após mudança de status.
- [x] `npm run lint --workspace=frontend` - concluído sem erros.
- [x] `npm run build --workspace=frontend` - concluído com sucesso.
- [x] Fluxo navegável do dashboard validado: abertura de vaga
acompanhada, exibição do evento inicial, alteração de status e
atualização do histórico com o novo evento.
## Riscos e observações
- Sem alteração de schema ou migration.
- O histórico depende da disponibilidade do endpoint `GET
/saved-jobs/:id/events` para vagas salvas.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jovinull@hltav
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Highlight search terms from Google/DuckDuckGo/Bing referrer\n(function() {\n var ref = document.referrer;\n var terms = [];\n \n if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) {\n var url = new URL(ref);\n var q = url.searchParams.get('q') || url.searchParams.get('p');\n if (q) {\n terms = q.split(/\\s+/).filter(function(t) { return t.length > 2; });\n }\n }\n \n if (terms.length === 0) return;\n \n var style = document.createElement('style');\n style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }';\n document.head.appendChild(style);\n \n function highlight(node) {\n if (node.nodeType === 3) { // text node\n var text = node.textContent;\n var found = false;\n terms.forEach(function(term) {\n var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\\]\\\\]/g, '\\\\') + ')', 'gi');\n if (regex.test(text)) {\n found = true;\n var frag = document.createDocumentFragment();\n var parts = text.split(regex);\n parts.forEach(function(part, i) {\n if (i % 2 === 0) {\n frag.appendChild(document.createTextNode(part));\n } else {\n var span = document.createElement('span');\n span.className = 'userscript-highlight';\n span.textContent = part;\n frag.appendChild(span);\n }\n });\n node.parentNode.replaceChild(frag, node);\n }\n });\n } else if (node.nodeType === 1 && node.childNodes) { // element\n var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];\n if (!skipTags.includes(node.tagName)) {\n Array.from(node.childNodes).forEach(highlight);\n }\n }\n }\n \n highlight(document.body);\n \n // Re-highlight on dynamic content\n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1 || node.nodeType === 3) highlight(node);\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Highlight Search Terms"); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(frontend): exibe histórico de candidatura - #237

Merged
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas
Aug 29, 2026
Merged

feat(frontend): exibe histórico de candidatura#237
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas

Conversation

@Jovinull

@JovinullJovinull commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Card

  • PAV-19

Objetivo e escopo

  • Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de status da candidatura.
  • Manter o histórico restrito a vagas já salvas pelo usuário.

O que foi feito

  • Consulta os eventos da vaga salva em GET /saved-jobs/:id/events ao abrir o detalhe.
  • Exibe estados de carregamento, histórico vazio e falha de carregamento.
  • Mostra a transição de status, data e metadados disponíveis para cada evento.
  • Atualiza o histórico ao alterar o status da vaga enquanto o detalhe está aberto.

Módulos afetados

  • frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx
  • frontend/src/domains/new_dashboard/NewDashboardPage.tsx
  • frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts
  • frontend/src/domains/new_dashboard/types/job.ts
  • Testes unitários do dashboard, API e página.

Validação

  • CI do PR concluído com sucesso, incluindo coverage de frontend e backend, lint e build.
  • npm exec --workspace=frontend vitest run tests/unit/new_dashboard/api.test.ts tests/unit/new_dashboard/jobs.test.tsx tests/unit/new_dashboard/page.test.tsx - 3 arquivos e 43 testes aprovados.
  • Os testes cobrem o carregamento do histórico, estado vazio, erro de API e a atualização após mudança de status.
  • npm run lint --workspace=frontend - concluído sem erros.
  • npm run build --workspace=frontend - concluído com sucesso.
  • Fluxo navegável do dashboard validado: abertura de vaga acompanhada, exibição do evento inicial, alteração de status e atualização do histórico com o novo evento.

Riscos e observações

  • Sem alteração de schema ou migration.
  • O histórico depende da disponibilidade do endpoint GET /saved-jobs/:id/events para vagas salvas.

hltavand others added 2 commits August 23, 2026 18:32
…ode-Community#230)
## Linear
Issue: PAV-119
Closes PAV-119
## Branch flow
- [ ] Este PR é uma feature/fix/chore destinada a `develop`.
- [x] Este é um PR de release com origem `develop` e destino `master`.
- [x] Este PR não pula o fluxo obrigatório entre `develop` e `master`.
## Objetivo
Promover para `master` a implementação do lock distribuído do scraper,
garantindo no máximo uma execução ativa do pipeline entre diferentes
origens de disparo.
## Resumo das Alterações
- Implementa lock distribuído no Valkey compartilhado por cron, execução
manual administrativa e cache miss de `/scrape`.
- Utiliza aquisição atômica com `SET NX PX`, TTL e renovação periódica.
- Protege renovação e liberação por ownership/token.
- Implementa comportamento fail-closed quando o Valkey não confirma a
aquisição.
- Cancela a execução de forma segura em caso de perda do lock.
- Adiciona estado operacional com `runId`, origem, início e expiração
sem expor o token proprietário.
- Adiciona contratos HTTP para execução concorrente e indisponibilidade
do run lock.
- Alinha os defaults de `SCRAPER_RUN_LOCK_TTL` e
`SCRAPER_RUN_LOCK_RENEW_INTERVAL` à semântica fail-fast definida
anteriormente.
- Adiciona cobertura de testes para concorrência, ownership,
configuração, renovação, liberação e cenários de falha.
- Atualiza documentação e configuração do Docker Compose.
## Arquivos e Módulos Afetados
- Scraper Go
- Run lock / Valkey
- Scheduler e pipeline do scraper
- Backend administrativo
- Configuração do scraper
- Docker Compose
- Testes Go e backend
- Documentação operacional
## Validação
- [x] Implementação revisada contra o escopo da PAV-119.
- [x] Ajustes solicitados no code review aplicados.
- [x] Semântica fail-fast das configurações do run lock validada.
- [x] Nenhuma alteração de frontend incluída no escopo.
- [ ] CI final do PR de release validado.
## Observações
Este PR promove alterações já integradas e revisadas em `develop`.
Não realizar squash ou alterações adicionais diretamente em `master`
fora do fluxo de release.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR fora do padrão de contribuição do projeto.

Por favor, ajuste a descrição conforme o template/documentação do repositório, incluindo card relacionado, objetivo, resumo das alterações, módulos afetados e validações executadas.

Após a adequação, a revisão técnica será retomada.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A implementação atende aos critérios funcionais atuais da PAV-19 e pode seguir para merge.

Fica registrado como débito técnico o acoplamento do contrato da timeline ao tipo único de evento atualmente suportado. O modelo de histórico tende a evoluir para outros tipos de eventos, e essa limitação pode exigir revisão futura para evitar fragilidade no consumo da timeline.

Recomendo abrir um card específico de débito técnico para tratar essa evolução sem bloquear a entrega atual.

@hltav
hltav merged commit 810c1fd into Cla-Code-Community:developAug 29, 2026
1 check passed
@github-project-automationgithub-project-automationBot moved this from Backlog to Done in JobAtlas – KanbanAug 29, 2026
hltav added a commit that referenced this pull request Aug 29, 2026
## Card
- PAV-19
## Objetivo e escopo
- Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de
status da candidatura.
- Manter o histórico restrito a vagas já salvas pelo usuário.
## O que foi feito
- Consulta os eventos da vaga salva em `GET /saved-jobs/:id/events` ao
abrir o detalhe.
- Exibe estados de carregamento, histórico vazio e falha de
carregamento.
- Mostra a transição de status, data e metadados disponíveis para cada
evento.
- Atualiza o histórico ao alterar o status da vaga enquanto o detalhe
está aberto.
## Módulos afetados
-
`frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx`
- `frontend/src/domains/new_dashboard/NewDashboardPage.tsx`
-
`frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts`
- `frontend/src/domains/new_dashboard/types/job.ts`
- Testes unitários do dashboard, API e página.
## Validação
- [x] CI do PR concluído com sucesso, incluindo coverage de frontend e
backend, lint e build.
- [x] `npm exec --workspace=frontend vitest run
tests/unit/new_dashboard/api.test.ts
tests/unit/new_dashboard/jobs.test.tsx
tests/unit/new_dashboard/page.test.tsx` - 3 arquivos e 43 testes
aprovados.
- [x] Os testes cobrem o carregamento do histórico, estado vazio, erro
de API e a atualização após mudança de status.
- [x] `npm run lint --workspace=frontend` - concluído sem erros.
- [x] `npm run build --workspace=frontend` - concluído com sucesso.
- [x] Fluxo navegável do dashboard validado: abertura de vaga
acompanhada, exibição do evento inicial, alteração de status e
atualização do histórico com o novo evento.
## Riscos e observações
- Sem alteração de schema ou migration.
- O histórico depende da disponibilidade do endpoint `GET
/saved-jobs/:id/events` para vagas salvas.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jovinull@hltav
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Strip utm_, fbclid, gclid, etc. from all links on page\n(function() {\n var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',\n 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',\n 'ref', 'ref_src', 'source', 'medium', 'campaign'];\n \n function cleanUrl(url) {\n try {\n var u = new URL(url, window.location.origin);\n var changed = false;\n trackingParams.forEach(function(p) {\n if (u.searchParams.has(p)) {\n u.searchParams.delete(p);\n changed = true;\n }\n });\n return changed ? u.toString() : url;\n } catch (e) {\n return url;\n }\n }\n \n function cleanLinks() {\n document.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n \n cleanLinks();\n \n var observer = new MutationObserver(function(mutations) {\n mutations.forEach(function(m) {\n m.addedNodes.forEach(function(node) {\n if (node.nodeType === 1) {\n if (node.tagName === 'A') cleanLinks();\n node.querySelectorAll('a[href]').forEach(function(a) {\n var clean = cleanUrl(a.href);\n if (clean !== a.href) a.href = clean;\n });\n }\n });\n });\n });\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "Remove Tracking Parameters from Links"); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + '
Skip to content

feat(frontend): exibe histórico de candidatura - #237

Merged
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas
Aug 29, 2026
Merged

feat(frontend): exibe histórico de candidatura#237
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas

Conversation

@Jovinull

@JovinullJovinull commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Card

  • PAV-19

Objetivo e escopo

  • Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de status da candidatura.
  • Manter o histórico restrito a vagas já salvas pelo usuário.

O que foi feito

  • Consulta os eventos da vaga salva em GET /saved-jobs/:id/events ao abrir o detalhe.
  • Exibe estados de carregamento, histórico vazio e falha de carregamento.
  • Mostra a transição de status, data e metadados disponíveis para cada evento.
  • Atualiza o histórico ao alterar o status da vaga enquanto o detalhe está aberto.

Módulos afetados

  • frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx
  • frontend/src/domains/new_dashboard/NewDashboardPage.tsx
  • frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts
  • frontend/src/domains/new_dashboard/types/job.ts
  • Testes unitários do dashboard, API e página.

Validação

  • CI do PR concluído com sucesso, incluindo coverage de frontend e backend, lint e build.
  • npm exec --workspace=frontend vitest run tests/unit/new_dashboard/api.test.ts tests/unit/new_dashboard/jobs.test.tsx tests/unit/new_dashboard/page.test.tsx - 3 arquivos e 43 testes aprovados.
  • Os testes cobrem o carregamento do histórico, estado vazio, erro de API e a atualização após mudança de status.
  • npm run lint --workspace=frontend - concluído sem erros.
  • npm run build --workspace=frontend - concluído com sucesso.
  • Fluxo navegável do dashboard validado: abertura de vaga acompanhada, exibição do evento inicial, alteração de status e atualização do histórico com o novo evento.

Riscos e observações

  • Sem alteração de schema ou migration.
  • O histórico depende da disponibilidade do endpoint GET /saved-jobs/:id/events para vagas salvas.

hltavand others added 2 commits August 23, 2026 18:32
…ode-Community#230)
## Linear
Issue: PAV-119
Closes PAV-119
## Branch flow
- [ ] Este PR é uma feature/fix/chore destinada a `develop`.
- [x] Este é um PR de release com origem `develop` e destino `master`.
- [x] Este PR não pula o fluxo obrigatório entre `develop` e `master`.
## Objetivo
Promover para `master` a implementação do lock distribuído do scraper,
garantindo no máximo uma execução ativa do pipeline entre diferentes
origens de disparo.
## Resumo das Alterações
- Implementa lock distribuído no Valkey compartilhado por cron, execução
manual administrativa e cache miss de `/scrape`.
- Utiliza aquisição atômica com `SET NX PX`, TTL e renovação periódica.
- Protege renovação e liberação por ownership/token.
- Implementa comportamento fail-closed quando o Valkey não confirma a
aquisição.
- Cancela a execução de forma segura em caso de perda do lock.
- Adiciona estado operacional com `runId`, origem, início e expiração
sem expor o token proprietário.
- Adiciona contratos HTTP para execução concorrente e indisponibilidade
do run lock.
- Alinha os defaults de `SCRAPER_RUN_LOCK_TTL` e
`SCRAPER_RUN_LOCK_RENEW_INTERVAL` à semântica fail-fast definida
anteriormente.
- Adiciona cobertura de testes para concorrência, ownership,
configuração, renovação, liberação e cenários de falha.
- Atualiza documentação e configuração do Docker Compose.
## Arquivos e Módulos Afetados
- Scraper Go
- Run lock / Valkey
- Scheduler e pipeline do scraper
- Backend administrativo
- Configuração do scraper
- Docker Compose
- Testes Go e backend
- Documentação operacional
## Validação
- [x] Implementação revisada contra o escopo da PAV-119.
- [x] Ajustes solicitados no code review aplicados.
- [x] Semântica fail-fast das configurações do run lock validada.
- [x] Nenhuma alteração de frontend incluída no escopo.
- [ ] CI final do PR de release validado.
## Observações
Este PR promove alterações já integradas e revisadas em `develop`.
Não realizar squash ou alterações adicionais diretamente em `master`
fora do fluxo de release.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR fora do padrão de contribuição do projeto.

Por favor, ajuste a descrição conforme o template/documentação do repositório, incluindo card relacionado, objetivo, resumo das alterações, módulos afetados e validações executadas.

Após a adequação, a revisão técnica será retomada.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A implementação atende aos critérios funcionais atuais da PAV-19 e pode seguir para merge.

Fica registrado como débito técnico o acoplamento do contrato da timeline ao tipo único de evento atualmente suportado. O modelo de histórico tende a evoluir para outros tipos de eventos, e essa limitação pode exigir revisão futura para evitar fragilidade no consumo da timeline.

Recomendo abrir um card específico de débito técnico para tratar essa evolução sem bloquear a entrega atual.

@hltav
hltav merged commit 810c1fd into Cla-Code-Community:developAug 29, 2026
1 check passed
@github-project-automationgithub-project-automationBot moved this from Backlog to Done in JobAtlas – KanbanAug 29, 2026
hltav added a commit that referenced this pull request Aug 29, 2026
## Card
- PAV-19
## Objetivo e escopo
- Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de
status da candidatura.
- Manter o histórico restrito a vagas já salvas pelo usuário.
## O que foi feito
- Consulta os eventos da vaga salva em `GET /saved-jobs/:id/events` ao
abrir o detalhe.
- Exibe estados de carregamento, histórico vazio e falha de
carregamento.
- Mostra a transição de status, data e metadados disponíveis para cada
evento.
- Atualiza o histórico ao alterar o status da vaga enquanto o detalhe
está aberto.
## Módulos afetados
-
`frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx`
- `frontend/src/domains/new_dashboard/NewDashboardPage.tsx`
-
`frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts`
- `frontend/src/domains/new_dashboard/types/job.ts`
- Testes unitários do dashboard, API e página.
## Validação
- [x] CI do PR concluído com sucesso, incluindo coverage de frontend e
backend, lint e build.
- [x] `npm exec --workspace=frontend vitest run
tests/unit/new_dashboard/api.test.ts
tests/unit/new_dashboard/jobs.test.tsx
tests/unit/new_dashboard/page.test.tsx` - 3 arquivos e 43 testes
aprovados.
- [x] Os testes cobrem o carregamento do histórico, estado vazio, erro
de API e a atualização após mudança de status.
- [x] `npm run lint --workspace=frontend` - concluído sem erros.
- [x] `npm run build --workspace=frontend` - concluído com sucesso.
- [x] Fluxo navegável do dashboard validado: abertura de vaga
acompanhada, exibição do evento inicial, alteração de status e
atualização do histórico com o novo evento.
## Riscos e observações
- Sem alteração de schema ou migration.
- O histórico depende da disponibilidade do endpoint `GET
/saved-jobs/:id/events` para vagas salvas.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jovinull@hltav
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Auto-enable theater mode on YouTube\n(function() {\n function tryTheater() {\n var btn = document.querySelector('button[aria-label=\"Theater mode\"], ytd-player #player button[title=\"Theater mode\"]');\n if (btn && !btn.classList.contains('activated')) {\n btn.click();\n }\n }\n \n // Try immediately\n tryTheater();\n \n // Try after navigation (SPA)\n var lastUrl = location.href;\n setInterval(function() {\n if (location.href !== lastUrl) {\n lastUrl = location.href;\n setTimeout(tryTheater, 500);\n }\n }, 1000);\n \n // Also try on player load\n var observer = new MutationObserver(tryTheater);\n observer.observe(document.body, { childList: true, subtree: true });\n})();", "YouTube Theater Mode Default"); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(frontend): exibe histórico de candidatura - #237

Merged
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas
Aug 29, 2026
Merged

feat(frontend): exibe histórico de candidatura#237
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas

Conversation

@Jovinull

@JovinullJovinull commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Card

  • PAV-19

Objetivo e escopo

  • Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de status da candidatura.
  • Manter o histórico restrito a vagas já salvas pelo usuário.

O que foi feito

  • Consulta os eventos da vaga salva em GET /saved-jobs/:id/events ao abrir o detalhe.
  • Exibe estados de carregamento, histórico vazio e falha de carregamento.
  • Mostra a transição de status, data e metadados disponíveis para cada evento.
  • Atualiza o histórico ao alterar o status da vaga enquanto o detalhe está aberto.

Módulos afetados

  • frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx
  • frontend/src/domains/new_dashboard/NewDashboardPage.tsx
  • frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts
  • frontend/src/domains/new_dashboard/types/job.ts
  • Testes unitários do dashboard, API e página.

Validação

  • CI do PR concluído com sucesso, incluindo coverage de frontend e backend, lint e build.
  • npm exec --workspace=frontend vitest run tests/unit/new_dashboard/api.test.ts tests/unit/new_dashboard/jobs.test.tsx tests/unit/new_dashboard/page.test.tsx - 3 arquivos e 43 testes aprovados.
  • Os testes cobrem o carregamento do histórico, estado vazio, erro de API e a atualização após mudança de status.
  • npm run lint --workspace=frontend - concluído sem erros.
  • npm run build --workspace=frontend - concluído com sucesso.
  • Fluxo navegável do dashboard validado: abertura de vaga acompanhada, exibição do evento inicial, alteração de status e atualização do histórico com o novo evento.

Riscos e observações

  • Sem alteração de schema ou migration.
  • O histórico depende da disponibilidade do endpoint GET /saved-jobs/:id/events para vagas salvas.

hltavand others added 2 commits August 23, 2026 18:32
…ode-Community#230)
## Linear
Issue: PAV-119
Closes PAV-119
## Branch flow
- [ ] Este PR é uma feature/fix/chore destinada a `develop`.
- [x] Este é um PR de release com origem `develop` e destino `master`.
- [x] Este PR não pula o fluxo obrigatório entre `develop` e `master`.
## Objetivo
Promover para `master` a implementação do lock distribuído do scraper,
garantindo no máximo uma execução ativa do pipeline entre diferentes
origens de disparo.
## Resumo das Alterações
- Implementa lock distribuído no Valkey compartilhado por cron, execução
manual administrativa e cache miss de `/scrape`.
- Utiliza aquisição atômica com `SET NX PX`, TTL e renovação periódica.
- Protege renovação e liberação por ownership/token.
- Implementa comportamento fail-closed quando o Valkey não confirma a
aquisição.
- Cancela a execução de forma segura em caso de perda do lock.
- Adiciona estado operacional com `runId`, origem, início e expiração
sem expor o token proprietário.
- Adiciona contratos HTTP para execução concorrente e indisponibilidade
do run lock.
- Alinha os defaults de `SCRAPER_RUN_LOCK_TTL` e
`SCRAPER_RUN_LOCK_RENEW_INTERVAL` à semântica fail-fast definida
anteriormente.
- Adiciona cobertura de testes para concorrência, ownership,
configuração, renovação, liberação e cenários de falha.
- Atualiza documentação e configuração do Docker Compose.
## Arquivos e Módulos Afetados
- Scraper Go
- Run lock / Valkey
- Scheduler e pipeline do scraper
- Backend administrativo
- Configuração do scraper
- Docker Compose
- Testes Go e backend
- Documentação operacional
## Validação
- [x] Implementação revisada contra o escopo da PAV-119.
- [x] Ajustes solicitados no code review aplicados.
- [x] Semântica fail-fast das configurações do run lock validada.
- [x] Nenhuma alteração de frontend incluída no escopo.
- [ ] CI final do PR de release validado.
## Observações
Este PR promove alterações já integradas e revisadas em `develop`.
Não realizar squash ou alterações adicionais diretamente em `master`
fora do fluxo de release.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR fora do padrão de contribuição do projeto.

Por favor, ajuste a descrição conforme o template/documentação do repositório, incluindo card relacionado, objetivo, resumo das alterações, módulos afetados e validações executadas.

Após a adequação, a revisão técnica será retomada.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A implementação atende aos critérios funcionais atuais da PAV-19 e pode seguir para merge.

Fica registrado como débito técnico o acoplamento do contrato da timeline ao tipo único de evento atualmente suportado. O modelo de histórico tende a evoluir para outros tipos de eventos, e essa limitação pode exigir revisão futura para evitar fragilidade no consumo da timeline.

Recomendo abrir um card específico de débito técnico para tratar essa evolução sem bloquear a entrega atual.

@hltav
hltav merged commit 810c1fd into Cla-Code-Community:developAug 29, 2026
1 check passed
@github-project-automationgithub-project-automationBot moved this from Backlog to Done in JobAtlas – KanbanAug 29, 2026
hltav added a commit that referenced this pull request Aug 29, 2026
## Card
- PAV-19
## Objetivo e escopo
- Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de
status da candidatura.
- Manter o histórico restrito a vagas já salvas pelo usuário.
## O que foi feito
- Consulta os eventos da vaga salva em `GET /saved-jobs/:id/events` ao
abrir o detalhe.
- Exibe estados de carregamento, histórico vazio e falha de
carregamento.
- Mostra a transição de status, data e metadados disponíveis para cada
evento.
- Atualiza o histórico ao alterar o status da vaga enquanto o detalhe
está aberto.
## Módulos afetados
-
`frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx`
- `frontend/src/domains/new_dashboard/NewDashboardPage.tsx`
-
`frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts`
- `frontend/src/domains/new_dashboard/types/job.ts`
- Testes unitários do dashboard, API e página.
## Validação
- [x] CI do PR concluído com sucesso, incluindo coverage de frontend e
backend, lint e build.
- [x] `npm exec --workspace=frontend vitest run
tests/unit/new_dashboard/api.test.ts
tests/unit/new_dashboard/jobs.test.tsx
tests/unit/new_dashboard/page.test.tsx` - 3 arquivos e 43 testes
aprovados.
- [x] Os testes cobrem o carregamento do histórico, estado vazio, erro
de API e a atualização após mudança de status.
- [x] `npm run lint --workspace=frontend` - concluído sem erros.
- [x] `npm run build --workspace=frontend` - concluído com sucesso.
- [x] Fluxo navegável do dashboard validado: abertura de vaga
acompanhada, exibição do evento inicial, alteração de status e
atualização do histórico com o novo evento.
## Riscos e observações
- Sem alteração de schema ou migration.
- O histórico depende da disponibilidade do endpoint `GET
/saved-jobs/:id/events` para vagas salvas.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jovinull@hltav
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Remove or un-stick sticky/fixed headers that block content\n(function() {\n function unstick() {\n document.querySelectorAll('header, nav, [role=\"banner\"], .header, .navbar, .sticky, .fixed-top, [style*=\"position: fixed\"], [style*=\"position:sticky\"]').forEach(function(el) {\n if (el.style.position === 'fixed' || el.style.position === 'sticky' || \n getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {\n el.style.position = 'static';\n el.style.top = 'auto';\n el.style.zIndex = 'auto';\n }\n });\n }\n \n unstick();\n \n var observer = new MutationObserver(unstick);\n observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });\n})();", "Kill Sticky Headers"); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + '
Skip to content

feat(frontend): exibe histórico de candidatura - #237

Merged
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas
Aug 29, 2026
Merged

feat(frontend): exibe histórico de candidatura#237
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas

Conversation

@Jovinull

@JovinullJovinull commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Card

  • PAV-19

Objetivo e escopo

  • Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de status da candidatura.
  • Manter o histórico restrito a vagas já salvas pelo usuário.

O que foi feito

  • Consulta os eventos da vaga salva em GET /saved-jobs/:id/events ao abrir o detalhe.
  • Exibe estados de carregamento, histórico vazio e falha de carregamento.
  • Mostra a transição de status, data e metadados disponíveis para cada evento.
  • Atualiza o histórico ao alterar o status da vaga enquanto o detalhe está aberto.

Módulos afetados

  • frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx
  • frontend/src/domains/new_dashboard/NewDashboardPage.tsx
  • frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts
  • frontend/src/domains/new_dashboard/types/job.ts
  • Testes unitários do dashboard, API e página.

Validação

  • CI do PR concluído com sucesso, incluindo coverage de frontend e backend, lint e build.
  • npm exec --workspace=frontend vitest run tests/unit/new_dashboard/api.test.ts tests/unit/new_dashboard/jobs.test.tsx tests/unit/new_dashboard/page.test.tsx - 3 arquivos e 43 testes aprovados.
  • Os testes cobrem o carregamento do histórico, estado vazio, erro de API e a atualização após mudança de status.
  • npm run lint --workspace=frontend - concluído sem erros.
  • npm run build --workspace=frontend - concluído com sucesso.
  • Fluxo navegável do dashboard validado: abertura de vaga acompanhada, exibição do evento inicial, alteração de status e atualização do histórico com o novo evento.

Riscos e observações

  • Sem alteração de schema ou migration.
  • O histórico depende da disponibilidade do endpoint GET /saved-jobs/:id/events para vagas salvas.

hltavand others added 2 commits August 23, 2026 18:32
…ode-Community#230)
## Linear
Issue: PAV-119
Closes PAV-119
## Branch flow
- [ ] Este PR é uma feature/fix/chore destinada a `develop`.
- [x] Este é um PR de release com origem `develop` e destino `master`.
- [x] Este PR não pula o fluxo obrigatório entre `develop` e `master`.
## Objetivo
Promover para `master` a implementação do lock distribuído do scraper,
garantindo no máximo uma execução ativa do pipeline entre diferentes
origens de disparo.
## Resumo das Alterações
- Implementa lock distribuído no Valkey compartilhado por cron, execução
manual administrativa e cache miss de `/scrape`.
- Utiliza aquisição atômica com `SET NX PX`, TTL e renovação periódica.
- Protege renovação e liberação por ownership/token.
- Implementa comportamento fail-closed quando o Valkey não confirma a
aquisição.
- Cancela a execução de forma segura em caso de perda do lock.
- Adiciona estado operacional com `runId`, origem, início e expiração
sem expor o token proprietário.
- Adiciona contratos HTTP para execução concorrente e indisponibilidade
do run lock.
- Alinha os defaults de `SCRAPER_RUN_LOCK_TTL` e
`SCRAPER_RUN_LOCK_RENEW_INTERVAL` à semântica fail-fast definida
anteriormente.
- Adiciona cobertura de testes para concorrência, ownership,
configuração, renovação, liberação e cenários de falha.
- Atualiza documentação e configuração do Docker Compose.
## Arquivos e Módulos Afetados
- Scraper Go
- Run lock / Valkey
- Scheduler e pipeline do scraper
- Backend administrativo
- Configuração do scraper
- Docker Compose
- Testes Go e backend
- Documentação operacional
## Validação
- [x] Implementação revisada contra o escopo da PAV-119.
- [x] Ajustes solicitados no code review aplicados.
- [x] Semântica fail-fast das configurações do run lock validada.
- [x] Nenhuma alteração de frontend incluída no escopo.
- [ ] CI final do PR de release validado.
## Observações
Este PR promove alterações já integradas e revisadas em `develop`.
Não realizar squash ou alterações adicionais diretamente em `master`
fora do fluxo de release.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR fora do padrão de contribuição do projeto.

Por favor, ajuste a descrição conforme o template/documentação do repositório, incluindo card relacionado, objetivo, resumo das alterações, módulos afetados e validações executadas.

Após a adequação, a revisão técnica será retomada.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A implementação atende aos critérios funcionais atuais da PAV-19 e pode seguir para merge.

Fica registrado como débito técnico o acoplamento do contrato da timeline ao tipo único de evento atualmente suportado. O modelo de histórico tende a evoluir para outros tipos de eventos, e essa limitação pode exigir revisão futura para evitar fragilidade no consumo da timeline.

Recomendo abrir um card específico de débito técnico para tratar essa evolução sem bloquear a entrega atual.

@hltav
hltav merged commit 810c1fd into Cla-Code-Community:developAug 29, 2026
1 check passed
@github-project-automationgithub-project-automationBot moved this from Backlog to Done in JobAtlas – KanbanAug 29, 2026
hltav added a commit that referenced this pull request Aug 29, 2026
## Card
- PAV-19
## Objetivo e escopo
- Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de
status da candidatura.
- Manter o histórico restrito a vagas já salvas pelo usuário.
## O que foi feito
- Consulta os eventos da vaga salva em `GET /saved-jobs/:id/events` ao
abrir o detalhe.
- Exibe estados de carregamento, histórico vazio e falha de
carregamento.
- Mostra a transição de status, data e metadados disponíveis para cada
evento.
- Atualiza o histórico ao alterar o status da vaga enquanto o detalhe
está aberto.
## Módulos afetados
-
`frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx`
- `frontend/src/domains/new_dashboard/NewDashboardPage.tsx`
-
`frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts`
- `frontend/src/domains/new_dashboard/types/job.ts`
- Testes unitários do dashboard, API e página.
## Validação
- [x] CI do PR concluído com sucesso, incluindo coverage de frontend e
backend, lint e build.
- [x] `npm exec --workspace=frontend vitest run
tests/unit/new_dashboard/api.test.ts
tests/unit/new_dashboard/jobs.test.tsx
tests/unit/new_dashboard/page.test.tsx` - 3 arquivos e 43 testes
aprovados.
- [x] Os testes cobrem o carregamento do histórico, estado vazio, erro
de API e a atualização após mudança de status.
- [x] `npm run lint --workspace=frontend` - concluído sem erros.
- [x] `npm run build --workspace=frontend` - concluído com sucesso.
- [x] Fluxo navegável do dashboard validado: abertura de vaga
acompanhada, exibição do evento inicial, alteração de status e
atualização do histórico com o novo evento.
## Riscos e observações
- Sem alteração de schema ou migration.
- O histórico depende da disponibilidade do endpoint `GET
/saved-jobs/:id/events` para vagas salvas.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jovinull@hltav
, 'i'); if (__m === '*' || __re.test(location.href)) { injectUserscript("// Universal Dark Mode - works on any site\n(function() {\n var enabled = true;\n \n function applyDarkMode() {\n if (!enabled) return;\n \n // Create style element if it doesn't exist\n var style = document.getElementById('universal-dark-mode-style');\n if (!style) {\n style = document.createElement('style');\n style.id = 'universal-dark-mode-style';\n document.head.appendChild(style);\n }\n \n // Dark mode CSS - inverts colors but preserves images/video\n style.textContent = '\n /* Invert everything except media */\n html {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #1a1a2e !important;\n }\n \n /* Restore images, videos, iframes, canvas */\n img, video, iframe, canvas, svg, picture, [style*=\"background-image\"] {\n filter: invert(1) hue-rotate(180deg) !important;\n }\n \n /* Preserve specific elements that should not be inverted */\n .no-dark-mode, .no-dark-mode *,\n [data-theme=\"light\"], [data-theme=\"light\"],\n .ace_editor, .ace_editor *,\n .CodeMirror, .CodeMirror *,\n .monaco-editor, .monaco-editor *,\n .markdown-body pre, .markdown-body pre *,\n .highlight, .highlight *,\n pre code, pre code * {\n filter: none !important;\n }\n \n /* Fix common UI elements */\n .modal, .popup, .dropdown-menu, .tooltip, .popover {\n filter: invert(1) hue-rotate(180deg) !important;\n background: #2d2d44 !important;\n border-color: #444 !important;\n }\n \n /* Scrollbars */\n ::-webkit-scrollbar { background: #1a1a2e !important; }\n ::-webkit-scrollbar-thumb { background: #444 !important; }\n ::-webkit-scrollbar-thumb:hover { background: #555 !important; }\n \n /* Selection */\n ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; }\n ';\n }\n \n function removeDarkMode() {\n var style = document.getElementById('universal-dark-mode-style');\n if (style) style.remove();\n }\n \n // Toggle with Alt+Shift+D\n document.addEventListener('keydown', function(e) {\n if (e.altKey && e.shiftKey && e.key === 'D') {\n e.preventDefault();\n enabled = !enabled;\n if (enabled) {\n applyDarkMode();\n console.log('[Universal Dark Mode] Enabled');\n } else {\n removeDarkMode();\n console.log('[Universal Dark Mode] Disabled');\n }\n }\n });\n \n // Apply on load\n applyDarkMode();\n \n // Re-apply on dynamic content\n var observer = new MutationObserver(function(mutations) {\n if (enabled && !document.getElementById('universal-dark-mode-style')) {\n applyDarkMode();\n }\n });\n observer.observe(document.head, { childList: true });\n \n console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle');\n})();", "Universal Dark Mode"); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })();
Skip to content

feat(frontend): exibe histórico de candidatura - #237

Merged
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas
Aug 29, 2026
Merged

feat(frontend): exibe histórico de candidatura#237
hltav merged 2 commits into
Cla-Code-Community:developfrom
Jovinull:feature/pav-19-historico-candidaturas

Conversation

@Jovinull

@JovinullJovinull commented Aug 28, 2026

Copy link
Copy Markdown
Contributor

Card

  • PAV-19

Objetivo e escopo

  • Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de status da candidatura.
  • Manter o histórico restrito a vagas já salvas pelo usuário.

O que foi feito

  • Consulta os eventos da vaga salva em GET /saved-jobs/:id/events ao abrir o detalhe.
  • Exibe estados de carregamento, histórico vazio e falha de carregamento.
  • Mostra a transição de status, data e metadados disponíveis para cada evento.
  • Atualiza o histórico ao alterar o status da vaga enquanto o detalhe está aberto.

Módulos afetados

  • frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx
  • frontend/src/domains/new_dashboard/NewDashboardPage.tsx
  • frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts
  • frontend/src/domains/new_dashboard/types/job.ts
  • Testes unitários do dashboard, API e página.

Validação

  • CI do PR concluído com sucesso, incluindo coverage de frontend e backend, lint e build.
  • npm exec --workspace=frontend vitest run tests/unit/new_dashboard/api.test.ts tests/unit/new_dashboard/jobs.test.tsx tests/unit/new_dashboard/page.test.tsx - 3 arquivos e 43 testes aprovados.
  • Os testes cobrem o carregamento do histórico, estado vazio, erro de API e a atualização após mudança de status.
  • npm run lint --workspace=frontend - concluído sem erros.
  • npm run build --workspace=frontend - concluído com sucesso.
  • Fluxo navegável do dashboard validado: abertura de vaga acompanhada, exibição do evento inicial, alteração de status e atualização do histórico com o novo evento.

Riscos e observações

  • Sem alteração de schema ou migration.
  • O histórico depende da disponibilidade do endpoint GET /saved-jobs/:id/events para vagas salvas.

hltavand others added 2 commits August 23, 2026 18:32
…ode-Community#230)
## Linear
Issue: PAV-119
Closes PAV-119
## Branch flow
- [ ] Este PR é uma feature/fix/chore destinada a `develop`.
- [x] Este é um PR de release com origem `develop` e destino `master`.
- [x] Este PR não pula o fluxo obrigatório entre `develop` e `master`.
## Objetivo
Promover para `master` a implementação do lock distribuído do scraper,
garantindo no máximo uma execução ativa do pipeline entre diferentes
origens de disparo.
## Resumo das Alterações
- Implementa lock distribuído no Valkey compartilhado por cron, execução
manual administrativa e cache miss de `/scrape`.
- Utiliza aquisição atômica com `SET NX PX`, TTL e renovação periódica.
- Protege renovação e liberação por ownership/token.
- Implementa comportamento fail-closed quando o Valkey não confirma a
aquisição.
- Cancela a execução de forma segura em caso de perda do lock.
- Adiciona estado operacional com `runId`, origem, início e expiração
sem expor o token proprietário.
- Adiciona contratos HTTP para execução concorrente e indisponibilidade
do run lock.
- Alinha os defaults de `SCRAPER_RUN_LOCK_TTL` e
`SCRAPER_RUN_LOCK_RENEW_INTERVAL` à semântica fail-fast definida
anteriormente.
- Adiciona cobertura de testes para concorrência, ownership,
configuração, renovação, liberação e cenários de falha.
- Atualiza documentação e configuração do Docker Compose.
## Arquivos e Módulos Afetados
- Scraper Go
- Run lock / Valkey
- Scheduler e pipeline do scraper
- Backend administrativo
- Configuração do scraper
- Docker Compose
- Testes Go e backend
- Documentação operacional
## Validação
- [x] Implementação revisada contra o escopo da PAV-119.
- [x] Ajustes solicitados no code review aplicados.
- [x] Semântica fail-fast das configurações do run lock validada.
- [x] Nenhuma alteração de frontend incluída no escopo.
- [ ] CI final do PR de release validado.
## Observações
Este PR promove alterações já integradas e revisadas em `develop`.
Não realizar squash ou alterações adicionais diretamente em `master`
fora do fluxo de release.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

PR fora do padrão de contribuição do projeto.

Por favor, ajuste a descrição conforme o template/documentação do repositório, incluindo card relacionado, objetivo, resumo das alterações, módulos afetados e validações executadas.

Após a adequação, a revisão técnica será retomada.

@hltavhltav left a comment

Copy link
Copy Markdown
Collaborator

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A implementação atende aos critérios funcionais atuais da PAV-19 e pode seguir para merge.

Fica registrado como débito técnico o acoplamento do contrato da timeline ao tipo único de evento atualmente suportado. O modelo de histórico tende a evoluir para outros tipos de eventos, e essa limitação pode exigir revisão futura para evitar fragilidade no consumo da timeline.

Recomendo abrir um card específico de débito técnico para tratar essa evolução sem bloquear a entrega atual.

@hltav
hltav merged commit 810c1fd into Cla-Code-Community:developAug 29, 2026
1 check passed
@github-project-automationgithub-project-automationBot moved this from Backlog to Done in JobAtlas – KanbanAug 29, 2026
hltav added a commit that referenced this pull request Aug 29, 2026
## Card
- PAV-19
## Objetivo e escopo
- Exibir no detalhe de uma vaga acompanhada o histórico de mudanças de
status da candidatura.
- Manter o histórico restrito a vagas já salvas pelo usuário.
## O que foi feito
- Consulta os eventos da vaga salva em `GET /saved-jobs/:id/events` ao
abrir o detalhe.
- Exibe estados de carregamento, histórico vazio e falha de
carregamento.
- Mostra a transição de status, data e metadados disponíveis para cada
evento.
- Atualiza o histórico ao alterar o status da vaga enquanto o detalhe
está aberto.
## Módulos afetados
-
`frontend/src/domains/new_dashboard/components/jobs/JobDetailModal.tsx`
- `frontend/src/domains/new_dashboard/NewDashboardPage.tsx`
-
`frontend/src/domains/new_dashboard/infrastructure/dashboardJobsApi.ts`
- `frontend/src/domains/new_dashboard/types/job.ts`
- Testes unitários do dashboard, API e página.
## Validação
- [x] CI do PR concluído com sucesso, incluindo coverage de frontend e
backend, lint e build.
- [x] `npm exec --workspace=frontend vitest run
tests/unit/new_dashboard/api.test.ts
tests/unit/new_dashboard/jobs.test.tsx
tests/unit/new_dashboard/page.test.tsx` - 3 arquivos e 43 testes
aprovados.
- [x] Os testes cobrem o carregamento do histórico, estado vazio, erro
de API e a atualização após mudança de status.
- [x] `npm run lint --workspace=frontend` - concluído sem erros.
- [x] `npm run build --workspace=frontend` - concluído com sucesso.
- [x] Fluxo navegável do dashboard validado: abertura de vaga
acompanhada, exibição do evento inicial, alteração de status e
atualização do histórico com o novo evento.
## Riscos e observações
- Sem alteração de schema ou migration.
- O histórico depende da disponibilidade do endpoint `GET
/saved-jobs/:id/events` para vagas salvas.
Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants

@Jovinull@hltav