No description
  • Rust 98.3%
  • CSS 1.1%
  • Dockerfile 0.3%
  • JavaScript 0.2%
  • Shell 0.1%
Find a file
Jonatas Oliveira 7190dc7fc3
All checks were successful
ci/woodpecker/push/ci/2 Pipeline was successful
ci/woodpecker/push/ci/1 Pipeline was successful
fix(signup): show the real reason the Keyrunes registration failed
Cadastrar pela UI em produção devolvia sempre "Não foi possível concluir.
Tente novamente.", qualquer que fosse a causa — inclusive e-mail já
cadastrado, cujo braço `errors.email_taken` era código morto.

Causa: o servidor Keyrunes responde **400** para toda recusa de cadastro
("email already registered", "password too short", "organization not
found for namespace"), e o `handle_error` do SDK só traduz **401** em
`AuthenticationError`. Todo 400 vira `HttpError`, que o `signup_post`
mandava para o genérico.

Confirmado contra o SSO real (POST /api/register):
  400 {"message":"email already registered"}
  400 {"message":"password too short"}
  400 {"message":"organization not found for namespace: ..."}

`signup_error_key` passa a ler o motivo de dentro do `HttpError` e
traduzir os dois casos acionáveis; o resto continua no genérico com o
motivo real indo para o log, não para a tela. O braço de
`AuthenticationError` fica, para o caso de o SDK passar a classificar o
duplicado como 401. O lugar durável dessa distinção é o SDK.

A suíte não pegava isso porque o `FakeApi` devolvia `AuthenticationError`
no duplicado — um contrato que o servidor real não tem. O fake agora
devolve o `HttpError` 400 que o Keyrunes de fato produz, então os testes
de duplicado que já existiam passaram a exercitar o caminho verdadeiro.

`.env.example`: documenta o namespace real (`monitor_account`) e que
`KEYRUNES_GROUP` é NOME, não id — a rota por id não existe no servidor.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01DXncJNK9sNT3NsPfTN7EHM
2026-09-08 11:27:49 +02:00
.agents feat(dashboard): alert when annual projection exceeds contracted kWh 2026-09-01 12:02:17 +02:00
.cargo feat(auth): adopt keyrunes-rust-sdk 0.2.0 and its server auth contract 2026-09-03 22:00:51 +02:00
.githooks chore: bootstrap crate with pinned deps + ci/hooks 2026-08-18 14:45:12 +02:00
.sqlx feat: contracts and readings CRUD (auto-close + cumulative validation) 2026-08-26 20:07:05 +02:00
.woodpecker fix(ci): run e2e on the official Cypress image 2026-09-08 06:35:09 +02:00
assets fix(ui): final gates adjustments for gestalt layout 2026-09-05 11:57:09 +02:00
locales feat(layout): group nav into labeled common regions (app | language | session) 2026-09-04 12:26:26 +02:00
migrations feat(compare): grundversorger seed + comparison layer 2026-08-26 12:14:00 +02:00
scripts feat(testing): add e2e (Cypress), mutation and spider suites 2026-08-31 20:27:34 +02:00
src fix(signup): show the real reason the Keyrunes registration failed 2026-09-08 11:27:49 +02:00
tests fix(signup): show the real reason the Keyrunes registration failed 2026-09-08 11:27:49 +02:00
.dockerignore build: dockerfile + dockerignore (dokku-ready) 2026-08-25 14:01:57 +02:00
.env.example fix(signup): show the real reason the Keyrunes registration failed 2026-09-08 11:27:49 +02:00
.gitignore chore: merge forge scaffold (LICENSE AGPL-3.0, README) into main 2026-08-20 19:28:50 +02:00
Cargo.lock feat(auth): adopt keyrunes-rust-sdk 0.2.0 and its server auth contract 2026-09-03 22:00:51 +02:00
Cargo.toml feat(auth): adopt keyrunes-rust-sdk 0.2.0 and its server auth contract 2026-09-03 22:00:51 +02:00
docker-compose.yml chore: dev environment (postgres + migrations scaffold) 2026-08-18 14:45:24 +02:00
Dockerfile chore(docker): bump builder image to Rust 1.98 2026-09-01 13:25:05 +02:00
LICENSE Initial commit 2026-08-20 17:27:18 +00:00
README.md Initial commit 2026-08-20 17:27:18 +00:00

monitor-account