Skip to content

feat(student-onboarding): parede de clearance + gate (b) (Onda C)#156

Open
renanfulas wants to merge 1 commit into
feat/student-consent-gatefrom
feat/student-consent-wall
Open

feat(student-onboarding): parede de clearance + gate (b) (Onda C)#156
renanfulas wants to merge 1 commit into
feat/student-consent-gatefrom
feat/student-consent-wall

Conversation

@renanfulas

Copy link
Copy Markdown
Owner

Onda C — parede de clearance + gate (b)

Terceira onda do plano docs/plans/student-parq-waiver-entry-gate-corda.md. Empilhada na Onda B (#155) — base aponta para feat/student-consent-gate. Tudo atrás da flag STUDENT_CONSENT_GATE_ENABLED (default OFF).

O que entra

  • Gate (b) no dispatch: se o membership do box ativo está clearance_required e cleared_at IS NULL → redireciona para a parede; pula a própria rota (sem loop). Roda depois do gate (a) de consentimento.
  • StudentClearanceView + clearance.html: parede acolhedora, não dead-end — "leve o atestado ao seu box {display_name} e a equipe libera seu acesso na hora". Mostra o nome do box.
  • Agora o aluno flagged é efetivamente barrado da entrada. A Onda B só marcava clearance_required; aqui o bloqueio passa a valer.

Decisões honradas

  • Bloquear entrada (gate no dispatch), não treino.
  • Não dead-end: a parede dá o próximo passo claro (atestado no box). A liberação manual por staff é a Onda D.
  • Campo ortogonal (clearance_required/cleared_at): status do membership intacto, zero fan-out.

Validação local (PG 5433)

pytest tests/test_student_consent_wall.py tests/test_student_consent_gate.py tests/test_student_consent_model.py --reuse-db25 passed:

  • flagged é redirecionado para a parede
  • a parede renderiza (200, sem loop)
  • aluno com cleared_at passa
  • aluno sem flag não vê a parede
  • flag OFF é no-op

Próximo

Onda D: ação de staff "Liberar acesso" (seta cleared_at) + fila operacional clearance_required=True, cleared_at IS NULL.

🤖 Generated with Claude Code

…entrada (Onda C)

Empilhado na Onda B. Atras da flag STUDENT_CONSENT_GATE_ENABLED (default OFF).

- gate (b) em StudentIdentityRequiredMixin.dispatch: se o membership do box ativo
  esta clearance_required e cleared_at IS NULL -> redireciona para a parede; pula
  a propria rota (sem loop)
- StudentClearanceView + clearance.html: parede acolhedora, nao dead-end
  ("leve o atestado ao box <nome> e a equipe libera"); mostra display_name do box
- agora o aluno flagged e EFETIVAMENTE barrado da entrada (a Onda B so marcava
  clearance_required); a liberacao manual por staff vem na Onda D

Validacao local (PG 5433): 25 passed (parede C + gate B + modelo A, --reuse-db):
flagged barrado, parede renderiza, cleared passa, clear nao ve parede, flag OFF no-op.

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

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
  urls.py
  student_app/views
  __init__.py
  base.py
  consent_views.py 59
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