Skip to content

feat(student-onboarding): tela de consentimento + gate de entrada (Onda B)#155

Open
renanfulas wants to merge 1 commit into
feat/student-consent-modelfrom
feat/student-consent-gate
Open

feat(student-onboarding): tela de consentimento + gate de entrada (Onda B)#155
renanfulas wants to merge 1 commit into
feat/student-consent-modelfrom
feat/student-consent-gate

Conversation

@renanfulas

Copy link
Copy Markdown
Owner

Onda B — tela de consentimento + gate de entrada

Segunda onda do plano docs/plans/student-parq-waiver-entry-gate-corda.md. Empilhada na Onda A (#153) — base aponta para feat/student-consent-model. Tudo atrás da flag STUDENT_CONSENT_GATE_ENABLED (default OFF) → zero efeito em produção até ligar.

O que entra

  • Gate (a) no chokepoint único (StudentIdentityRequiredMixin.dispatch): se falta aceite da versão vigente → redireciona para a tela de consentimento; pula a própria rota (sem loop). Mesmo molde dos redirects já existentes.
  • Tela de consentimento unificada (consent.html + StudentConsentForm) para os 3 corredores: waiver rolável + PAR-Q em toggles Sim/Não (default Não), botão sempre habilitado, validação no submit. Mobile-first (screens/consent.css, sem "role até o fim").
  • Workflow de decisão (consent_workflows.py): clear/flagged fora de view/template; grava StudentConsent versionado (só o outcome do PAR-Q); flagged marca clearance_required no membership (a parede de bloqueio vem na Onda C).
  • Funil: consent_step_viewed, parq_completed, parq_flagged, clearance_pending.

Decisões honradas

  • B1 — waiver mudo: waiver_accepted não é emitido nem tratado como vinculante (placeholder até a Onda E). Há teste garantindo isso.
  • Bloquear entrada, não treino: o gate é no dispatch; nada de check-in multi-superfície.
  • Dado de saúde: só clear/flagged no público; as respostas do PAR-Q não são persistidas.

Validação local (PG 5433)

  • pytest tests/test_student_consent_gate.py tests/test_student_consent_model.py --create-db --migrations20 passed (inclui redirect real do gate com sessão forjada, form, workflow, e render 200 da tela).
  • 3 dispatch-tests existentes do student_apppassam (gate OFF é no-op, zero regressão).

Preview visual não anexado: o app do aluno exige PG multi-tenant + login OAuth-less; a tela é exercitada via teste HTTP (render 200). Posso anexar screenshot se você quiser que eu suba o preview completo.

Próximo

Onda C: parede de clearance + gate (b) que efetivamente barra a entrada do flagged.

🤖 Generated with Claude Code

…da B)

Gate unificado de waiver + PAR-Q pos-auth, atras da flag STUDENT_CONSENT_GATE_ENABLED
(default OFF). Empilhado na Onda A.

- gate (a) em StudentIdentityRequiredMixin.dispatch: redireciona para a tela de
  consentimento quando falta aceite da versao vigente; pula a propria rota (sem loop)
- StudentConsentForm: waiver obrigatorio + PAR-Q em toggles Sim/Nao (default Nao),
  botao sempre habilitado, validacao no submit
- consent_workflows: decisao clear/flagged fora de view/template; grava StudentConsent
  versionado (so o outcome do PAR-Q); flagged marca clearance_required no membership
- funil: consent_step_viewed, parq_completed, parq_flagged, clearance_pending
  (waiver_accepted NAO emitido — placeholder nao-vinculante, B1)
- UI mobile-first (screens/consent.css): waiver rolavel sem "role ate o fim"
- consent_content: 7 perguntas canonicas do PAR-Q (dirigem os toggles)

Validacao local (PG 5433): 20 passed (gate B + modelo A, --create-db --migrations);
3 dispatch-tests existentes passam (gate OFF e no-op, zero regressao).

Ref: docs/plans/student-parq-waiver-entry-gate-corda.md (Onda B)

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
@github-actions

Copy link
Copy Markdown

Coverage report

Click to see where and how coverage changed

FileStatementsMissingCoverageCoverage
(new stmts)
Lines missing
  student_app
  consent_content.py
  forms.py
  student_app/views
  __init__.py
  base.py 155-157
  consent_views.py 50-59
  student_app/workflows
  consent_workflows.py 44
Project Total  

This report was generated by python-coverage-comment-action

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