Skip to content

Paciente: RF14 (Gorush/FCM), direitos do titular, e2e com banco de teste e credenciais do FCM no CI - #28

Merged
hbgit merged 90 commits into
developfrom
fix/patient
Oct 1, 2026
Merged

hbgit merged 90 commits into
developfrom
fix/patient

Conversation

@hbgit

@hbgit hbgit commented Oct 1, 2026

Copy link
Copy Markdown
Owner

Resumo

Fecha o ciclo do app do paciente na fix/patient (90 commits, 196 arquivos): direitos do titular, onboarding por QR e documentos legais, avisos segmentados (RF14) pelo Gorush e FCM, teste completo contra um banco de teste e as credenciais do FCM no CI.

Atenção: esta branch tem conflito com develop em 8 arquivos (CLAUDE.md, apps/acs/lib/app/app.dart, apps/patient/lib/app/app.dart, apps/acs/pubspec.yaml, apps/patient/pubspec.lock, apps/patient/.flutter-plugins-dependencies, apps/patient/test/contrast_tokens_test.dart, scripts/qa/ci_invariants.sh). Vêm de develop (#11 tema claro/escuro e #27 ci_invariants). Resolver antes do merge: o tema claro/escuro mexe nos mesmos app.dart e nos tokens de contraste.

O que entra

  • Paciente: painel "Meus dados" (LGPD), revogar/conceder consentimento, pedidos de exclusão/correção, onboarding por QR, Termos e Política 2026.1 com aceite, aviso de mudança dos termos com 15 dias.
  • RF14 (push): registro do token FCM (lado nativo Android), envio segmentado do ACS pelo Gorush. O app só pede o token ao FCM com o consentimento segmentedPush vigente (patients.hasGrantedConsent, um bool sem auditoria de leitura).
  • Teste completo do paciente contra o banco de teste (scripts/qa/patient_full_e2e.sh): stack docker-compose.e2e.yml com o banco efêmero sinalacs_e2e, sem login de desenvolvimento; fixtures sintéticas geradas por execução; OTP real pela tela (relé do código); jornada, território do ACS e push com Gorush/FCM reais.
  • CI: o android-e2e decodifica FCM_CREDENTIALS_BASE64 e GOOGLE_SERVICES_JSON_BASE64 (scripts/ci/decode_secret_file.sh), exporta GOOGLE_APPLICATION_CREDENTIALS, usa o emulador google_apis (Play Services) e roda o push e2e. O ci_invariants.sh ganhou o grupo check_credenciais_fcm (os secrets só no env: do passo que os decodifica, decodificação logo antes do E2E, limpeza sempre).

Como foi testado

  • CI desta branch (gh workflow run CI --ref fix/patient): 9/9 jobs verdes no run 36793588260 (commit f0666dc), incluindo o android-e2e com recipients=1 accepted=1 / OK — o aviso chegou ao emulador. O log não contém chave, private_key nem api_key.
  • Local: paciente 240 testes, backend 445, ACS 182; flutter analyze limpo; dart analyze do backend no baseline de 51 infos; ci_invariants.sh (9 grupos) e 20 mutações do ci.yml reprovadas; actionlint ok.
  • scripts/qa/patient_full_e2e.sh e push_e2e.sh no emulator-5554.
  • Revisões independentes (subagente) do RF14, do e2e e do CI do FCM: sem Critical em aberto; os Minors foram fechados e o que ficou adiado está no PROGRESS.md.

Riscos e pendências (ver PROGRESS.md)

  • Conflito com develop (acima).
  • Qualquer PR de dentro do repositório recebe os secrets do FCM; um autor com escrita poderia imprimi-los editando o ci.yml. Saída: Environment do GitHub com revisores obrigatórios (decisão de política).
  • Não provado: iOS/APNs, aparelho físico, Gorush hospedado fora do Compose, revisão jurídica do texto 2026.1, backoffice que atende exclusão/correção.
  • develop.sql/developmentLogin seguem existindo para a stack de desenvolvimento e o fallback do android-e2e.

🤖 Generated with Claude Code

hbgit and others added 30 commits September 28, 2026 20:55
…inada num lugar só

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… e pedidos de exclusão/correção

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… cifrada

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…vigente de consentimento

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…RF05)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…icou de fora

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…amento falhar

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…Privacidade (LGPD-RF18/RF19)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…tórico (LGPD-RF10/RF18/RF19)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…RF18)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…astro (LGPD-RF18)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…eEnrollmentToken (RF02)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…g (RF02)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…ng (RF02)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…gais

- ACS: convite que chega depois da troca de paciente é descartado, em vez
  de aparecer sob o nome da pessoa errada (rede lenta).
- Paciente: leitura da câmera depois de a pessoa voltar não fecha mais o
  onboarding por baixo (QrDetectionGate).
- Paciente: números do resumo legal sobre accentDark (contraste 4.5:1).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…do onboarding (LGPD-RF18)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… OTP (LGPD-RF18)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…login OTP

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…brigatoriedade e saída única

Achados da revisão final do aceite do termo no login OTP.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… exclusão serializada (LGPD-RF08/RF18)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…âmera, aviso do QR e texto de correção

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
hbgit and others added 28 commits September 30, 2026 11:44
…gle Services só quando há google-services.json (RF14)

Provado no emulador: token FCM real com o arquivo; sem ele o APK compila e o app
degrada sem push.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…F14)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…nexão com tempo próprio (RF14)

Provado no emulador-5554: backend -> Gorush 1.22.0 -> FCM -> bandeja. Casos
negativos observados: token falso podado, ios mantido, Gorush parado com a
mensagem certa (o estouro antes de conectar não é 'resultado desconhecido') e
revogação sem destinatários.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…lador e o que não foi (RF14)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…H_E2E; docs do LGPD corrigidas (RF14)

Achados do revisor final. O auto-init contatava o Google em toda abertura do app,
antes do login e sem consentimento. Os testes de push exigem credenciais e quebrariam
e2e.sh --full para quem não as tem.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…o de avisos vigente (RF14, LGPD)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ue aberto

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…antedConsent) no lugar de myData no login; achados da revisão independente (RF14)

O login lia o painel inteiro (dossiê decifrado + linha de auditoria de leitura) só para decidir se pedia o token ao FCM. O endpoint novo devolve um bool, sem auditoria. Também: onboarding só registra com a caixa marcada, testes do teto de 3 s e de conceder sem nova consulta, docs corrigidas.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…imento

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… de teste

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… desenvolvimento só como fallback da CI

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…TP, termos, triagem, alerta, status, Meus dados, território)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… teste, sem tocar o de desenvolvimento

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…a bandeja e documentação

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…v, relógio do host no OTP, avisos do down e guarda do relé

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…r, manifesto privado, contagem de OTP e scripts mais claros

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…rvices.json) sem imprimir nem sobrescrever

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ciais, por último e propagando o resultado

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… Play Services e roda o push e2e

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…o runner prova)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…xistem em disco logo antes do E2E

Achados da revisão independente: o container (uid 1000) não lia a chave do usuário do runner (uid 1001), e as credenciais ficavam em disco durante ações de terceiros.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…fabeto, JSON em claro, base64url)

O GitHub mascara o secret no log; sem isto um secret cadastrado errado é indiagnosticável.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… plano das credenciais do FCM

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…, cleanup normaliza o caminho e o temporário não sobra (M4–M7)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
… exige o E2E e a limpeza depois dele (M1, M2)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…e project_id do push_e2e, grupo de processos)

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
@gitguardian

gitguardian Bot commented Oct 1, 2026

Copy link
Copy Markdown

⚠️ GitGuardian has uncovered 1 secret following the scan of your pull request.

Please consider investigating the findings and remediating the incidents. Failure to do so may lead to compromising the associated services or software components.

🔎 Detected hardcoded secret in your pull request
GitGuardian id GitGuardian status Secret Commit Filename
36074667 Triggered Generic Password 2c9d4ab docker-compose.e2e.yml View secret
🛠 Guidelines to remediate hardcoded secrets
  1. Understand the implications of revoking this secret by investigating where it is used in your code.
  2. Replace and store your secret safely. Learn here the best practices.
  3. Revoke and rotate this secret.
  4. If possible, rewrite git history. Rewriting git history is not a trivial act. You might completely break other contributing developers' workflow and you risk accidentally deleting legitimate data.

To avoid such incidents in the future consider


🦉 GitGuardian detects secrets in your source code to help developers and security teams secure the modern development process. You are seeing this because you or someone else with access to this repository has authorized GitGuardian to scan your pull request.

@hbgit
hbgit merged commit 5febbaa into develop Oct 1, 2026
10 checks passed
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.

1 participant