7.7 KiB
Impl: C201 — Typecheck da main quebrado após C192×C193: import órfão de canReadSpeechCatalog
Status: aprovado Atualizado em: 2026-09-18 Issue: #1169 Intenção: body da Issue (sem plano linkado — o body é a spec) Appetite restante: herdado (P1 de fix mecânico — ~5 min de execução; o custo real é a verificação)
Leitura da intenção
- Outcome:
mainvolta a passar typecheck e o pipeline de deploy volta a publicar; zero referências ao predicado antigocanReadSpeechCatalogemsrc//tests//scripts/; #1169 fechada comodone+in-prodcom o registro do commit que consertou. - O que NÃO negociar: o fix já está em
main(c7d1fd29) e altera exatamente as 2 referências desrc/utilities/speech/speechPageData.ts(import :5 + uso :187) paracanReadCommunicationCatalog; a semântica do predicado é preservada (communicator || unrestricted— coordinator/candidate — emsrc/lib/campaignRoles.ts:27); histórico/migrations não se editam retroativamente; fail-closed de acesso intacto. - O que reavaliar: a premissa implícita "há diff a produzir" não se aplica — HEAD == origin/main ==
c7d1fd29(branch idêntica ao main). O desfecho desta sessão é verificação + fechamento do tracker, sem PR.
Abordagem recomendada
flowchart LR
C193["C193 bdaf3c7c: renomeia predicado<br/>canReadSpeechCatalog → canReadCommunicationCatalog"] --> QUEBRA["verify do deploy falha TS2305"]
C192["C192 45eef25b: importa nome antigo<br/>speechPageData.ts:5 e :187"] --> QUEBRA
QUEBRA --> FIX["fix c7d1fd29 em main<br/>import :5 + uso :187 no nome novo"]
FIX --> F1["F1 gate local no HEAD<br/>pnpm gate:fast = lint + typecheck + unit"]
FIX --> F2["F2 observar run 35398929341<br/>verify → deploy-staging (deadline ~60 min)"]
F2 --> F3["F3 smoke staging read-only<br/>/campanha/comunicacao/acervo → login, não 500"]
F1 --> F4["F4 fechar #1169<br/>done + in-prod, remove in-progress,<br/>comentário com commit/run"]
F3 --> F4
Opções consideradas: A | B | C
Recomendação: C — sessão de verificação no HEAD (c7d1fd29): rodar pnpm gate:fast local, observar o run de deploy 35398929341 (verify → deploy-staging), smoke de staging read-only na rota da vertical e fechar #1169 no tracker citando commit + run. É a única opção compatível com o estado real do repositório (diff-zero) e fecha o ciclo P1 sem inventar trabalho.
Rejeitadas: A — refazer o fix numa branch nova + PR: o commit já está em main; um PR sem diff é inválido e o auto-merge não teria o que mergear (e o flip pós-merge não roda sem PR). B — reverter/re-aplicar por rebase: não há divergência — HEAD == origin/main == c7d1fd29; rebase de branch idêntica é no-op e só arrisca reescrever histórico.
Componentes / mudanças
- Código: nenhuma mudança nesta sessão. O fix integral está em
src/utilities/speech/speechPageData.ts(:5 import, :187 uso decanReadCommunicationCatalog); o predicado renomeado vive emsrc/lib/campaignRoles.ts:27. - Referências órfãs: busca em
src/,tests/escripts/não encontra maiscanReadSpeechCatalog(apenas docs históricos); nenhum outro órfão do rename do C193 entre importadores de@/lib/campaignRoles. - Changelog: já registrado em
docs/changelog/2026-09-18-c193-fix-rename.md(pnpm gate:fastverde — 364 arquivos / 3867 testes — e intspeechAcervo/reel22 verdes no commit do fix). - Artefatos desta entrega: este plano + o registro de fechamento na Issue #1169 (comentário com commit/run/desfecho).
- Migration: sem migration (rename de símbolo, sem mudança de schema).
- Access / Consent: sem Consent e sem mudança de access — a matriz de papéis segue coberta pelos int existentes (
tests/int/speechAcervo.int.spec.ts:329,408— inclui "never expands outside the catalog gate" —,speechCatalog.int.spec.ts:123,speechExcerpts.int.spec.ts:135,reel.int.spec.ts). - UI: sem UI nova — nenhuma superfície muda; a rota
/campanha/comunicacao/acervoé a mesma (só o gate interno renomeado).
Dados → forma (se aplicável)
Não aplicável: nenhuma forma de dado nova ou alterada — a mudança é só o identificador do predicado (rename já aplicado).
Fases verificáveis
- Gate local no HEAD (
c7d1fd29) —pnpm gate:fast(lint +typecheck+test:unit) deve sair verde (o typecheck era o job vermelho por TS2305). Unit relevantes como sinal direto:tests/unit/campaignNav.unit.spec.ts:68,tests/unit/aiToolsScope.unit.spec.ts:37. Evidência: saída verde do comando. - Observar o run de deploy
35398929341(HEADc7d1fd29) —preflightjá success,verifyin_progress; acompanhar atéverifysuccess edeploy-stagingpublicar o SHA. Deadline de observação ~60 min docreatedAt; não intervir (sem cancelar/re-dispatch) salvo falha real. - Smoke de staging (read-only) —
https://staging.jorgesolla1313.com.br/campanha/comunicacao/acervosem sessão deve redirecionar ao login (não 500); conferir também que a página de login responde. Nenhuma escrita, nenhuma credencial de campanha. - Fechar a Issue #1169 — labels
done+in-prod, removerin-progress; comentário citando o commitc7d1fd29, o run35398929341e o desfecho do smoke;gh issue close 1169. Sem PR, o fechamento é manual (o flipissue-done-on-main-mergedepende de PR, que não existe neste caso).
Rabbit holes / Não escopo (engenharia)
- Recriar o fix em branch nova/PR vazio (opção A) ou rebase/re-aplicação (opção B): rejeitados no gate — diff-zero.
- Rodar e2e full local: fora — o
verifydo deploy já roda a suíte full uma vez por commit; rodar de novo localmente não acrescenta sinal. - Reauditar a série C192/C193 inteira ou caçar outros órfãos de rename: verificado zero remanescentes; expandir sem evidência é custo puro.
- Mexer em
deploy.yml/preflight/requeue ou aprovardeploy-productionnesta sessão: fora — produção tem required reviewer (decisão humana) e não é critério da C201. - Editar o body/plano da Issue (spec) ou o changelog do fix: imutáveis.
Riscos e mitigação
- Run falha por motivo alheio (flake/infra, ex.: e2e conhecido ou runner offline) → reportar como observação e não tratar como regressão da C201; distinguir pelo arquivo/job que falhou (nada do run toca o rename além do typecheck que já passou no commit).
- Fechamento manual do tracker sem PR → exige citar commit + run no comentário; não fechar como
in-prodantes do staging publicado; nunca deixarin-progressresidual. deploy-stagingestoura timeout / runner indisponível → infra: vira observação (file-miss), não defeito;doneainda pode ser registrado com o verify verde,in-prodsó com staging verde.- Deadline ~60 min → se o run ainda estiver
in_progressao estourar, aguardar/observar sem intervir; registrar o estado real no comentário da Issue.
Aceite de engenharia
- Aceite de produto da intenção ainda coberto (typecheck de
mainverde; vertical de comunicação operacional em staging) - Invariantes AGENTS/engineering-standards (sem edição retroativa de migrations/histórico, sem force-push, rename já aplicado no dono do símbolo)
- Testes de domínio previstos (unit/int) onde access/write paths mudam — não mudam; matriz de papéis re-validada pelo gate local e pelos int existentes da vertical
- Evidência esperada: saída verde do
pnpm gate:fastlocal no HEAD + jobverifysuccess do run35398929341+ smoke de staging (redirect ao login, sem 500) + #1169 fechada com comentário commit/run - Self-score decision-quality: 4/5 (C é a única opção com diff-zero; rejeitadas nomeadas; rabbit holes e riscos de infra delimitados)