Skip to content

fix(platform): make the PR-data query opt-in and localize its steps - #292

Merged
cpenaforte-clickbus merged 13 commits into
feat/pr-data-incomplete-comparefrom
fix/pr-data-incomplete-polish
Oct 8, 2026
Merged

cpenaforte-clickbus merged 13 commits into
feat/pr-data-incomplete-comparefrom
fix/pr-data-incomplete-polish

Conversation

@cpenaforte-clickbus

@cpenaforte-clickbus cpenaforte-clickbus commented Oct 8, 2026 •

Copy link
Copy Markdown
Contributor

Contexto e Motivação

Uma revisão da pilha de plataforma (#282 e #283) antes do merge achou problemas reais. O marcador de dado incompleto não aparecia nos cards da comparação no celular. A consulta nova obrigava o banco a agregar o payload de todos os runs para todo chamador de getOrgReposSummary — a página de repositórios e a de exposição a IA também —, embora só a comparação precise do campo. O fallback repetia a consulta sem o campo em qualquer erro, mascarando timeout. E o tooltip mostrava os identificadores internos dos passos em inglês, até no texto em português.

Refs #236

Mudanças

  • A leitura de payload->pr_enrichment_degraded passa a ser opt-in em getOrgReposSummary: só a comparação liga; os outros chamadores voltam a não pedir o campo.
  • O fallback só repete sem o campo quando a coluna não existe (código 42703 ou mensagem citando o payload); timeout e erro de permissão seguem o caminho normal de erro. O filtro por organização vale nos dois caminhos.
  • As linhas do resumo ganham uma interface tipada no lugar de Record<string, any>.
  • Os passos aparecem com rótulos traduzidos (en-US e pt-BR; o es-ES cai no en-US), sem repetição, e o aviso do dashboard lista no máximo cinco repositórios, com "e mais N".
  • O marcador aparece também nos cards do celular, com a legenda valendo para os dois layouts; o ponto tem title com os passos e texto para leitor de tela.
  • A verificação de "algum marcado" fica inline no componente, e o comentário da página do repositório deixa de afirmar que os painéis somem sempre que a leitura degrada.

Plano de Teste

  • npx vitest run tests/compare-pr-degraded.test.ts tests/pr-enrichment.test.ts tests/pr-degraded-repos.test.ts — o select sem payload para quem não pede; o fallback no 42703 e a ausência de nova tentativa no timeout; os rótulos nos dois idiomas; a deduplicação; o corte em cinco nomes — rodado em d9c6a38: 21 passed
  • npm run lint, npx tsc --noEmit, npm run test:coverage, npm run build — os passos do job platform do CI — rodado em d9c6a38: lint 0 erros, tsc ok, test:coverage 424 passed, build ok
  • Manual: comparação no desktop e no celular com um repositório degradado; dashboard com mais de cinco degradados — verificado de ponta a ponta no topo da pilha (fix(platform): make the PR-data marker readable on touch and keyboard #293, em 4911e6d, com o rótulo corrigido conferido depois em 8e83ca4), que contém este PR: plataforma rodando sobre as migrações reais e um PostgREST, com payloads do engine em sete cenários de falha, no Playwright em desktop, celular (390 px), só teclado, leitor de tela, tema escuro, pt-BR, en-US e es-ES; nos cards do celular, os passos ficam numa linha própria sob o nome; o dashboard com 7 degradados lista 5 e "e mais 2"

A verificação roda fora da máquina de quem construiu: o job platform do CI (RFC 0029, PM-4).

Impacto e Risco

  • Áreas afetadas: a consulta de resumo por repositório e seus chamadores, a comparação, o aviso do dashboard e as strings de tradução.
  • Compatibilidade: sem migração; sem o campo no payload, nada aparece, como antes.
  • Performance: melhora — a página de repositórios e a de exposição a IA deixam de pagar a agregação do payload; um timeout deixa de virar duas consultas.
  • Segurança: o filtro por organização continua nos dois caminhos da consulta; os passos passam pela lista de valores permitidos antes de chegar à tela.
  • Acessibilidade: marcador com texto para leitor de tela e legenda visível nos dois layouts; o PR seguinte mostra os passos como texto para quem usa toque ou teclado.
  • Custo AWS: N/A.

Sobre o tamanho (RFC 0028 §2.4): 377 linhas, faixa 251–500. São os achados da revisão da plataforma, um commit por assunto; os ajustes de acessibilidade pedidos na revisão final foram para o PR seguinte para caber.

Plano de Rollback

git revert do merge. Volta o comportamento do #283; nada a migrar.

Referências

Autoria Assistida

  • Agente: Claude Code — Claude Sonnet 5.5 nos commits e na revisão da task; Claude Opus 5.5 na varredura, na orquestração e na revisão final
  • Escopo da assistência: revisão de bugs e implementação guiada por testes
  • Revisão humana: pendente — o autor revisa antes do merge

🤖 Generated with Claude Code

cpenaforte-clickbus and others added 11 commits October 7, 2026 20:21
Selecting payload->pr_enrichment_degraded makes repo_metric_summaries
aggregate every run's payload, and it was requested by all callers
(repos, ai-exposure, dashboard, compare). It is now an option that only
the compare page turns on; other callers get pr_degraded_steps: [].

The retry without the field now happens only when the error says the
column is missing (code 42703, or a message naming payload), so a
timeout is logged and surfaced instead of being silently masked.

SummaryRow becomes an interface of the selected columns instead of
Record<string, any>.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Degraded steps showed as raw ids ("enrichment") in the repo badge and
the compare marker. They now go through a localized label
(repos.detail.prData.steps.*, en-US and pt-BR; es-ES falls back) via
formatPrSteps.

prDegradedSteps drops repeated steps, so a payload listing one twice no
longer prints it twice.

The dashboard note listed every degraded repo; it now names at most 5
and collapses the rest into "and N more" / "e mais N".

anyPrDataIncomplete was a one-line wrapper; the compare view checks
inline instead. The repo page comment claimed the flow and merge panels
are absent exactly when the read degraded, which is false when only
"basic" failed.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The amber marker and its legend only existed in the desktop table, so
the md:hidden card stack gave no sign a repo's PR read degraded. The
marker is now one component used by both layouts, and the legend sits
below both so either one explains it.

The dot gains a title (hover for sighted users) next to its sr-only
text; the legend keeps the meaning off colour and off the tooltip.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
The amber dot is the only per-row cue on the compare page, and
amber-500 sits near 2.1:1 on the light card, below the 3:1 WCAG 1.4.11
asks of it. The dot and its legend now use amber-600 on light (about
3.2:1) and keep amber-500 on dark (well above 3:1).

The PR-data tooltip said merge strategy isn't classified "when
enrichment fails"; the engine only skips it when enrichment fails for
merged PRs, so the copy now says so, in both locales.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The failed PR-read steps lived only in a hover title and screen-reader
text, on the compare dot and on the repo-page badge, so touch and
keyboard users could see that the read was incomplete but not where.
The mobile compare card now shows the localized steps as muted text
next to the dot, and the repo page shows them next to the badge.

On the card the visible steps replace the dot's sr-only sentence, so
screen readers read them once, after a short sr-only "PR data
incomplete:" prefix. The card marker also drops its ml-2: the row
already spaces its items with gap-2. The desktop table is unchanged.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The reason for the `as unknown as` cast in getOrgReposSummary sat two
lines above the query, away from the cast it explains. The query
result is now bound first and the cast returned on its own line, with
the reason right above it. No behavior change.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Renders the compare view with one degraded and one clean repo and
checks what the last fixes changed: the mobile card shows the failed
steps as text after an sr-only prefix, the full sentence stays
screen-reader text only in the table, the card marker has no margin,
and the dot is amber-600 with amber-500 only on dark. All four fail
against the previous marker.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A failed open list, or a failed enrichment or reviews pass for open
PRs, leaves open-PR fields out of the run, and the engine's report
caveat now says so. The tooltip on the PR-data badge and marker listed
only flow, review and in-PR metrics; it now names open-PR metrics too,
in both locales.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
A failed merged list omits the PR lifecycle fields (counts, time to
merge, cycle time), and a partial read skews them. The engine's report
caveat now says so; the PR-data tooltip mirrors it in both locales.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The repo-page badge now has the failed steps as visible text beside
it, yet kept a title with the same steps in a sentence. Screen readers
may read a title as a description, so the steps could be announced
twice. The title goes; the visible text carries the steps.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The desktop compare table kept the failed PR-read steps in a hover
title and screen-reader text only, so sighted keyboard users could not
see them, and on the mobile card the steps sat inline with the
truncating repo name, where a long list squeezed it.

Both layouts now put the amber dot and the localized steps on a line
of their own under the repo name. The dot and the steps are
aria-hidden, carrying the full sentence as their hover title, and
screen readers read that sentence once as sr-only text, in both
layouts alike (the card's short sr-only prefix gives way to it).

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@cpenaforte-clickbus cpenaforte-clickbus added type: tech-debt Código sub-ótimo conhecido, workaround, ou cleanup pendente ai-assisted PR gerado total ou parcialmente com auxílio de agente de IA (RFC 0028 §2.2.7) labels Oct 8, 2026
@vercel

vercel Bot commented Oct 8, 2026 •

Copy link
Copy Markdown

The latest updates on your projects. Learn more about Vercel for GitHub.

Project Deployment Actions Updated
clickbus-iris Ready Ready Preview Oct 8, 2026 1:24pm UTC

Request Review

The label for the `fetch` step read "PR read" / "leitura de PRs", so the
step sentence said "This run's PR read failed at: PR read." It now says
"entire read" / "leitura inteira". Found in a manual end-to-end check.

Refs #236

Assisted-by: Claude Code <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
fix(platform): make the PR-data marker readable on touch and keyboard
@cpenaforte-clickbus
cpenaforte-clickbus merged commit e6b715b into feat/pr-data-incomplete-compare Oct 8, 2026
3 of 4 checks passed
@cpenaforte-clickbus
cpenaforte-clickbus deleted the fix/pr-data-incomplete-polish branch October 8, 2026 14:37

This branch was successfully deployed

1 active deployment
Preview — 4628df78 Deployed Oct 8, 2026 by vercel[bot]
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ai-assisted PR gerado total ou parcialmente com auxílio de agente de IA (RFC 0028 §2.2.7) type: tech-debt Código sub-ótimo conhecido, workaround, ou cleanup pendente

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant