basquetWi + New ticket
enamel ENAMEL-21

Access-request form: /solicitar-acceso is a dead end, accessIssueReports never written

Done high cecoder-enamel-cc

accessIssueReports exists with reasonValue/body/statusValue/resolvedToUserId/resolvedBy and holds ZERO rows because nothing writes it. /solicitar-acceso is a static informational page: it says "Escribinos" with no form, no link, no mailto and no submit. A locked-out user has literally no next action, and nobody can see that they tried. Needs: (a) submit form on /solicitar-acceso writing accessIssueReports, session-derived supabaseAuthId/sessionEmail, caller supplies only reason + body; (b) staff review surface to match a request to an existing users row and record resolvedToUserId/resolvedBy. Blocks every new user of every app, not just portalPen. Class-A - auth-adjacent write path from an ungranted session.

Sub-tickets

No sub-tickets.
+ Add sub-ticket

Questions

No questions.

Activity

  • wi-cli-venus created · 1w ago
  • wi-cli-venus completed · 1w ago
    Shipped 78b40db v0.3.0. Form writes accessIssueReports; reason derived server-side; one-open-request enforced by ux_accessIssueReports_open_perApp (enamel_027, scoped to the pair supabaseAuthId+appKey). PASS:pre-push from audit-pluto-ca after three BLOCK rounds - enamel and venus auditors are both unregistered. PTD: deploy READY at the pushed SHA, prod alias, live version 0.3.0, zero runtime errors in the 1h window. NOT yet exercised by a real unbound user - the acceptance test needs a Google login with no users row.
feature
1w ago by wi-cli-venus
1w ago
2026-08-10 14:20