Skip to content

fix(atendimento): o plantão para de se desligar sozinho 15 min depois de ser ligado - #720

Open
paulolimajr77 wants to merge 3 commits into
melgarafael:mainfrom
paulolimajr77:fix/plantao-nao-se-desliga-sozinho
Open

fix(atendimento): o plantão para de se desligar sozinho 15 min depois de ser ligado#720
paulolimajr77 wants to merge 3 commits into
melgarafael:mainfrom
paulolimajr77:fix/plantao-nao-se-desliga-sozinho

Conversation

@paulolimajr77

Copy link
Copy Markdown
Contributor

Em Equipe › Atendimento, ligar a chave de um atendente dura cerca de quinze minutos. Depois disso o sistema a desliga sozinho, e nada a religa: a pessoa some do roteamento e dos horários da Agenda sem ter feito nada.

Não é intermitente e não depende de configuração: acontece em toda instalação, sempre.

A causa

app/api/v1/cron/attendant-heartbeat grava is_available = false em quem não emite sinal de vida há mais de HEARTBEAT_TIMEOUT_MINUTES (15), e roda de 5 em 5 minutos.

O sinal nunca existiu. Varredura do repositório inteiro: não há emissor em lugar nenhum — nem hook, nem setInterval, nem beforeunload. O único escritor de last_heartbeat_at é o próprio botão, no clique (attendants/availability/[user_id]/route.ts:99).

O cabeçalho da rota diz que ela é "defesa contra aba fechada sem beforeunload". Ela defende contra a ausência de um sinal que nunca foi construído — e o efeito é derrubar todo mundo.

E nada religa: a jornada publicada só sabe restringir (isWithinSchedule), nunca acender.

Causa raiz

is_available carrega duas coisas na mesma coluna: "eu me declarei de plantão" (decisão, que dura) e "meu navegador está vivo agora" (presença, que expira). A varredura de presença escreve por cima da decisão.

A regra que fica

chave jornada publicada agora
desligada qualquer off — decisão de gente vence tudo
ligada nenhuma on 24/7
ligada tem on dentro, off fora — e volta sozinho

estaDePlantao é derivada, nunca gravada, e é isso que faz o "religa sozinho" existir: não há o que religar porque nada foi desligado — a conta muda de resposta quando o relógio entra na janela. Gravar exigiria uma rodada periódica para reacender, que é o anti-pattern 5 do CLAUDE.md (campo sincronizado por cron que devia ser derivado) — e era exatamente o que estava ali.

A tela para de ler presença e passa a fazer a mesma conta do roteador (sem a capacidade). Antes a tela lia uma coisa e o motor outra sobre a mesma pessoa. "Fora do horário" ganhou selo próprio: confundi-lo com "Desligado" faz o operador procurar defeito onde só há jornada terminada.

⚠️ A escolha que é sua, e eu não quis tomar sozinho

duas saídas defensáveis para o mesmo diagnóstico:

  • a que este PR faz — tirar quem espera pelo sinal, e derivar a disponibilidade da jornada
  • a oposta — manter o auto-offline e construir o emissor de presença que falta

Escolhi a primeira porque a jornada publicada já é a fonte de verdade do produto para "quando esta pessoa atende", e porque um emissor de presença não resolve o caso de quem fecha o navegador e continua atendendo pelo celular. Mas se você preferir a segunda, o diagnóstico e os testes deste PR servem igual — e eu abro o outro.

O que sai

A rota do cron, a linha do crontab do scheduler, isHeartbeatStale e HEARTBEAT_TIMEOUT_MINUTES.

Fica a coluna last_heartbeat_at: remover pede migration, ela é inofensiva, e serviria a um emissor de verdade se alguém construir um.

O que medi

lib/routing/eligibility.test.ts — a regra inteira, com clock injetado, incluindo o caso "RELIGA SOZINHO: a mesma linha do banco, dois instantes, duas respostas" (nada escreve no meio; só o relógio anda) e um caso de paridade tela × roteador, que prende as duas na mesma resposta.

Sabotagem conferida, previsão antes de rodar: estaDePlantao ignorando a jornada derruba 3 de 15 — as três previstas.

tests/unit/cron-routes-scheduled.test.ts (a cerca rota × crontab) e cron-audita-so-quando-ha-efeito.test.ts seguem verdes com a rota fora.

Gates na prévia do merge: typecheck 0, lint 0 erros, testes da área 83/83 + 28/28.

O que NÃO medi

  • pnpm test:unit inteiro nesta branch
  • prova em tela por Playwright — o defeito foi observado usando o produto numa VPS real (foi assim que apareceu), mas isso não é uma spec
  • pnpm test:shell tem 1 vermelho, e é ambiental, não desta mudança: .env continua 600 usa find -perm 600, e chmod 600 não pega no disco onde rodei (o arquivo sai 644 depois do comando). Medido nos dois sentidos. No CI (Linux) passa.

🤖 Generated with Claude Code

…ligar

O cron `attendant-heartbeat` gravava `is_available = false` em quem nao
emitisse sinal de vida ha mais de `HEARTBEAT_TIMEOUT_MINUTES` (15), rodando
de 5 em 5 minutos. **O sinal nunca existiu**: varredura do repositorio
inteiro nao acha emissor nenhum — nem hook, nem `setInterval`, nem
`beforeunload`. O unico escritor de `last_heartbeat_at` e o proprio botao, em
`attendants/availability/[user_id]/route.ts:99`, no clique.

Entao a varredura derrubava TODO atendente ~15 min depois de ele se declarar
de plantao, em toda instalacao, sempre — e nada o religava: a jornada
publicada so sabe RESTRINGIR (`isWithinSchedule`), nunca ACENDER. O cabecalho
da rota dizia que ela era "defesa contra aba fechada sem beforeunload": ela
defendia contra a ausencia de um sinal que nunca foi construido.

CAUSA RAIZ, de modelagem: `is_available` carregava duas coisas na mesma
coluna — "eu me declarei de plantao" (decisao, que dura) e "meu navegador
esta vivo agora" (presenca, que expira). A varredura de presenca escrevia por
cima da decisao.

A REGRA, enunciada pelo dono do produto:

  | chave     | jornada | agora                          |
  |-----------|---------|--------------------------------|
  | desligada | qualquer| off — decisao de gente vence   |
  | ligada    | nenhuma | on 24/7                        |
  | ligada    | tem     | on dentro, off fora, e RELIGA  |

`estaDePlantao` e DERIVADA, nunca gravada — e e isso que faz o "religa
sozinho" existir: nao ha o que religar porque nada foi desligado, a conta so
muda de resposta quando o relogio entra na janela. Gravar exigiria uma rodada
periodica para reacender, que e o anti-pattern 5 da doutrina e era
exatamente o que estava ali.

A tela para de ler presenca e passa a fazer a MESMA conta do roteador (sem a
capacidade): antes a tela lia uma coisa e o motor outra sobre a mesma pessoa.
"Fora do horario" ganhou selo proprio — confundi-lo com "Desligado" fazia o
operador procurar defeito onde so havia jornada terminada.

Sai: a rota do cron, a linha do crontab do scheduler, `isHeartbeatStale` e
`HEARTBEAT_TIMEOUT_MINUTES`. FICA a coluna `last_heartbeat_at`: remover pede
migration, ela e inofensiva, e serviria a um emissor de presenca de verdade
se alguem construir um.

Sabotagem conferida: `estaDePlantao` ignorando a jornada derruba 3 de 15 — as
tres previstas (off fora da janela, religa sozinho, paridade com o roteador).

Gates: typecheck 0, lint 0 erros, testes da area 83/83 + 28/28.

NAO MEDI: a suite inteira nesta branch. E `pnpm test:shell` tem 1 vermelho —
`.env continua 600` —, provado ambiental: `chmod 600` nao pega neste disco
(o arquivo sai 644 depois do comando), entao `find -perm 600` nao casa. No CI
(Linux) passa.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@vercel

vercel Bot commented Sep 11, 2026

Copy link
Copy Markdown

@paulolimajr77 is attempting to deploy a commit to the rafael-maudibrasil's projects Team on Vercel.

A member of the Team first needs to authorize it.

@ecc-tools

ecc-tools Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Security Evidence

Commit: 01c60d4531d79a14d5ec1bc410eb29b41842ed47

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 8 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / PR Risk Taxonomy

Commit: 01c60d4531d79a14d5ec1bc410eb29b41842ed47

PR taxonomy review recommended (neutral)

Detected 1 PR taxonomy bucket(s): CI/CD Recommendation.

Scanned 8 changed file(s).

Roadmap taxonomy buckets:

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • API contract changes may ship without integration coverage
  • API implementation changes may ship without contract artifact updates
  • Async job or webhook changes may ship without reliability coverage
  • 2 CI or workflow path(s) changed

Paths:

  • lib/routing/eligibility.test.ts
  • tests/unit/cron-audita-so-quando-ha-efeito.test.ts
  • app/api/v1/cron/attendant-heartbeat/route.ts
  • app/app/team/_components/AttendantsClient.tsx
  • lib/i18n/dicionario.ts
  • lib/routing/eligibility.ts

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Reference Set Readiness

Commit: 01c60d4531d79a14d5ec1bc410eb29b41842ed47

Reference set readiness gaps detected (neutral)

Reference evidence present for 0/7 areas (0%) across 8 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@github-actions

Copy link
Copy Markdown

Recebido, @paulolimajr77 — obrigado por isto.

Duas coisas que vão parecer erro seu e não são:

  • O check Vercel vermelho ("Authorization required to deploy") é esperado em PR de fork. A
    main faz deploy de produção e a Vercel se recusa a construir código de fora, o que está
    certo. Ele não entra no gate de merge.
  • No primeiro PR de quem nunca contribuiu aqui, os workflows ficam parados esperando
    liberação
    — política do GitHub, não sua. Enquanto isso o PR parece não ter check nenhum
    (nem o gh pr checks mostra os que estão nesse estado). Quem tria libera; você não precisa
    fazer nada.

Um mantenedor vai revisar de verdade — rodando os gates e reproduzindo o comportamento, não só
lendo o diff — e responde aqui em até um dia útil, com a medição junto, nunca com um "acho
que".

Esta mensagem é automática e não diz nada sobre o seu PR: ela é sobre o processo. O que vem
depois é pessoa.

@ecc-tools

ecc-tools Bot commented Sep 11, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Hosted Promotion Readiness

Commit: 01c60d4531d79a14d5ec1bc410eb29b41842ed47

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 8 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@melgarafael

Copy link
Copy Markdown
Owner

Recebido — obrigado.

Duas coisas que vão parecer erro seu e não são:

  • O check Vercel vermelho ("Authorization required to deploy") é esperado em PR de fork. A main faz deploy de produção e a Vercel se recusa a construir código de fora, o que está certo. Ele não entra no gate de merge.
  • Os workflows ficam parados esperando liberação no primeiro PR de quem nunca contribuiu — política do GitHub, não sua. Acabei de liberar, o CI já está rodando.

Um aviso útil: a main andou doze PRs hoje e a v1.19.0 saiu. Se o seu ficar com conflito por causa disso, o conserto é do nosso lado — não precisa correr atrás. O mesmo vale para número de migration colidido e fragmento de release faltando.

Vou revisar de verdade — rodando os gates e reproduzindo o comportamento, não só lendo o diff — e volto com o resultado. Se eu achar algo, venho com a medição junto, nunca com um "acho que".

A divida que este commit paga: o conserto do plantao mudou o que a coluna
Status MOSTRA, e nenhuma spec cobria essa coluna. A unica prova era alguem
lembrar de ligar a chave e voltar meia hora depois.

Cobra os tres estados pelo TEXTO que a pessoa le:

  desligado                      -> "Desligado"
  ligado + jornada contem agora  -> "De plantao"
  ligado + jornada nao contem    -> "Fora do horario"  (chave SEGUE ligada)
  ligado + jornada vazia         -> "De plantao" (24/7)

⚠️ O caso 3 assere tambem que a CHAVE continua marcada. E o coracao da
mudanca: sair da janela nao pode mexer na decisao da pessoa — era justamente
isso que a varredura antiga fazia, gravando `is_available=false` e deixando o
sistema sem como religar.

SEM RELOGIO MOCKADO: a janela e calculada A PARTIR DE AGORA, no fuso da
jornada — uma que contem este instante e outra que nao. Deterministico a
qualquer hora, e exercita o mesmo `Intl` que o produto usa.

Montagem por API (a MESMA rota que o dialogo usa), asserção pela tela: o que
mudou foi o selo, e o editor de janelas nao foi tocado. A chave, essa sim, e
clicada — ela e a entrada do estado que o selo le.

O caso vive na spec que ja mora nesta tela, e nao num arquivo novo: mesma
tela, mesmo login, e um arquivo a parte custaria mais uma sessao num job que
ja vive perto do teto de logins por IP.

NAO MEDI: a corrida local do `pnpm test:e2e` — precisa de Supabase local e app
buildado, que nao tenho de pe nesta maquina. A spec esta em SPECS_PARTE_* do
`e2e.yml`, entao o CI a roda.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Security Evidence

Commit: 782e79ee406ce2ef0a09a2f5e7892fe4a636cebc

Security evidence gate passed (success)

No security-sensitive scanner-evidence gap detected.

Mode: enforce

Scanned 9 changed file(s). No missing scanner-evidence signal was detected.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / PR Risk Taxonomy

Commit: 782e79ee406ce2ef0a09a2f5e7892fe4a636cebc

PR taxonomy review recommended (neutral)

Detected 1 PR taxonomy bucket(s): CI/CD Recommendation.

Scanned 9 changed file(s).

Roadmap taxonomy buckets:

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • API implementation changes may ship without contract artifact updates
  • Async job or webhook changes may ship without reliability coverage
  • 3 CI or workflow path(s) changed

Paths:

  • lib/routing/eligibility.test.ts
  • tests/e2e/agenda-caminho-ate-os-horarios.spec.ts
  • tests/unit/cron-audita-so-quando-ha-efeito.test.ts
  • app/api/v1/cron/attendant-heartbeat/route.ts
  • app/app/team/_components/AttendantsClient.tsx
  • lib/i18n/dicionario.ts
  • lib/routing/eligibility.ts

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Reference Set Readiness

Commit: 782e79ee406ce2ef0a09a2f5e7892fe4a636cebc

Reference set readiness gaps detected (neutral)

Reference evidence present for 0/7 areas (0%) across 9 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Hosted Promotion Readiness

Commit: 782e79ee406ce2ef0a09a2f5e7892fe4a636cebc

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 9 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@paulolimajr77

Copy link
Copy Markdown
Contributor Author

Acrescentei a prova de tela que faltava — o PR original não tinha nenhuma spec cobrindo a coluna Status, que é justamente o que a mudança altera.

tests/e2e/agenda-caminho-ate-os-horarios.spec.ts ganhou um caso que cobra os três estados pelo texto que a pessoa lê:

chave jornada selo esperado
desligada qualquer Desligado
ligada contém agora De plantão
ligada não contém agora Fora do horário
ligada vazia De plantão (24/7)

⚠️ O terceiro caso assere também que a chave continua marcada. É o coração da mudança: sair da janela não pode mexer na decisão da pessoa — era exatamente o que a varredura antiga fazia, gravando is_available = false e deixando o sistema sem como religar.

Sem relógio mockado: a janela é calculada a partir de agora, no fuso da jornada — uma que contém este instante e outra que não. Determinístico a qualquer hora, e exercita o mesmo Intl que o produto usa.

Montagem pela API (a mesma rota que o diálogo envia), asserção pela tela. O editor de janelas não foi tocado por esta mudança, então dirigi-lo seria fricção sem prova a mais. A chave, essa sim, é clicada.

O caso vive na spec que já mora nessa tela, e não num arquivo novo — mesma tela, mesmo login, e um arquivo à parte custaria mais uma sessão num job que já vive perto do teto de logins por IP.

Não medi: a corrida local do pnpm test:e2e (sem Supabase local nem app buildado nesta máquina). A spec está em SPECS_PARTE_*, então o CI a roda.

…egue

Divida declarada quando o cron de auto-offline saiu, e paga agora.

A coluna se chama "ultimo sinal de vida" e registrava, na verdade, o CLIQUE na
chave — nunca houve emissor de presenca nenhum no produto. Com o cron fora,
sobrou uma cadeia inteira sem leitor:

  coluna -> SELECT -> `ultimoSinalDeVida` -> campo da API -> tipo do hook -> ninguem

O selo de Status parou de le-la quando virou `estaDePlantao`. Campo no fio sem
leitor do outro lado e a mesma familia do "evento sem consumer" da doutrina.

SAI: a escrita (`[user_id]/route.ts`), a coluna dos tres SELECT, a projecao, o
campo da resposta e o campo do tipo do hook.

FICA: a COLUNA no banco. Remover pediria migration, e fecharia a porta
enquanto a decisao esta aberta — o PR do plantao propoe explicitamente as duas
saidas, e a outra e construir o emissor que falta. Se alguem construir, este e
o lugar; e agora ela esta limpa, sem carimbos de clique se fingindo de batida.

O invariante `gov-4-routing` continua exigindo a coluna, com o comentario
corrigido: ela e RESERVA declarada, para que remove-la seja decisao e nao
faxina.

Sabotagem natural: `attendants-availability-route` prende a lista exata de
campos da resposta. Antes de eu atualiza-lo, ele foi o UNICO vermelho — 1 de
24 —, que e a prova de que a remocao pegou onde devia.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Security Evidence

Commit: c0c8b4dc4e238c2d073d630602494166a1d979e8

Security scanner evidence required (action_required)

Detected 1 security-sensitive predictive risk signal(s) without scanner evidence.

Mode: enforce

Findings:

  • Security-sensitive changes may ship without scanner evidence: The PR touches billing, secrets, auth, webhooks, agent, or CI-sensitive surfaces without adding obvious security scanner, code scanning, or security-focused validation evidence. (1 security-sensitive paths changed; 0 security scanner or security-focused validation artifacts changed)

Touched security-sensitive paths:

  • hooks/team/useAttendants.ts

Expected evidence:

  • Security scanner, code scanning, secret scanning, dependency/security review, or focused security regression output.
  • SARIF/code-scanning upload or equivalent pass/fail gate for the changed surface.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / PR Risk Taxonomy

Commit: c0c8b4dc4e238c2d073d630602494166a1d979e8

PR taxonomy review recommended (neutral)

Detected 2 PR taxonomy bucket(s): Security Evidence, CI/CD Recommendation.

Scanned 15 changed file(s).

Roadmap taxonomy buckets:

Security Evidence

Security-sensitive changes should carry explicit scanner, code-scanning, or focused regression evidence.

Signals:

  • Security-sensitive changes may ship without scanner evidence
  • 0 security-sensitive path(s) changed

Paths:

  • .changes/plantao-nao-se-desliga-sozinho.md
  • app/api/v1/attendants/availability/[user_id]/route.ts
  • app/api/v1/attendants/availability/route.ts

CI/CD Recommendation

CI, dependency, coverage, and contract signals should be routed into follow-up checks or verification work.

Signals:

  • API implementation changes may ship without contract artifact updates
  • Async job or webhook changes may ship without reliability coverage
  • 5 CI or workflow path(s) changed

Paths:

  • lib/routing/eligibility.test.ts
  • tests/e2e/agenda-caminho-ate-os-horarios.spec.ts
  • tests/invariants/gov-4-routing.test.ts
  • tests/unit/attendants-availability-route.test.ts
  • tests/unit/cron-audita-so-quando-ha-efeito.test.ts
  • app/api/v1/attendants/availability/[user_id]/route.ts
  • app/api/v1/attendants/availability/route.ts
  • app/api/v1/cron/attendant-heartbeat/route.ts

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Reference Set Readiness

Commit: c0c8b4dc4e238c2d073d630602494166a1d979e8

Reference set readiness gaps detected (neutral)

Reference evidence present for 0/7 areas (0%) across 15 changed file(s).

This check is based on files changed in this PR. Repository-level readiness is still reported by /ecc-tools analyze comments and generated manifests.

Area Status Evidence / Next Step
Deep analyzer corpus Missing Add analyzer fixture, golden, benchmark, or reference-set files that can catch analyzer regressions.
RAG/evaluator comparison Missing Add retrieval or evaluator reference-set comparison fixtures with expected ranking behavior.
PR salvage/review corpus Missing Add stale-PR, review-thread, reopen-flow, or salvage reference cases for queue cleanup automation.
Discussion triage corpus Missing Add public discussion triage fixtures, golden cases, or reference sets for informational, answered, and no-response classifications.
Harness compatibility Missing Add cross-harness, adapter-compliance, or harness-audit evidence for Claude, Codex, OpenCode, Zed, dmux, and agent surfaces.
Security evidence Missing Attach security evidence such as SBOMs, SARIF, audit reports, or AgentShield evidence packs.
CI failure-mode evidence Missing Add captured CI failure logs, dry-run fixtures, or troubleshooting docs for common workflow failure modes.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

@ecc-tools

ecc-tools Bot commented Sep 12, 2026

Copy link
Copy Markdown
Contributor

ECC Tools / Hosted Promotion Readiness

Commit: c0c8b4dc4e238c2d073d630602494166a1d979e8

Hosted promotion readiness passed (success)

No hosted promotion evidence gaps detected across 15 changed file(s); 0 corpus scenarios had matching evidence.

This check compares PR file changes against the evaluator/RAG promotion corpus in src/analyzers/fixtures/evaluator-rag-corpus.ts.
Hosted output scoring inspected 0 completed cached hosted job results.

No evaluator corpus scenarios matched this PR.

Check publication was denied or unavailable. An app owner must enable Checks: read and write, and the installation owner must approve the updated permission.

Sign up for free to 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