mirror of
https://github.com/PerpetualSoftware/pad.git
synced 2026-10-26 14:30:13 +00:00
70c57f8202
* feat(auth): a first Cloud signup lands in its new workspace; OAuth comes first (TASK-3595)
A Cloud signup auto-creates and seeds a workspace, then landed on
/console, a list with a Create button.
- autoCreateWorkspace returns the workspace only when it is usable.
Every failure arm returns nil, including the two that keep a
workspace with an unknown or wrong-role owner row.
- Register (self-serve) and oauth-login add an additive workspace_path
("/<username>/<slug>") when a workspace was just made. The pad-cloud
sidecar uses it for OAuth signups (its own PR, stacked on the go-live
line).
- The register page lands there through postSignupTarget, the "Continue
to Pad" of an unverified signup included. An explicit ?redirect=
(OAuth authorize, CLI/MCP auth, an invitation, a deep link) or an
accepted invitation still wins.
- The register page puts the GitHub/Google buttons first, with the "or"
divider below them (AuthOAuthButtons divider="below").
- The generated username becomes a "Username: ada · Change" line. It
opens on click (focus follows), or by itself without moving focus
when the generated name is taken.
- The register page moves from $app/stores to $app/state, so it mounts
under jsdom.
Claude-Session: https://claude.ai/code/session_01FAVXA5mJ5BNhKmv95jxQkQ
* test(cloud): the oauth-login contract golden carries workspace_path (TASK-3595)
Claude-Session: https://claude.ai/code/session_01FAVXA5mJ5BNhKmv95jxQkQ
* fix(web): a taken generated username keeps its field open while the user types (TASK-3595 codex r1)
Editing the field reset the availability check, and the field's
visibility read it, so the input vanished under the typing. A taken
name now opens the field for good. Also note in postSignupTarget that
an explicit /console counts as no destination, by design.
Claude-Session: https://claude.ai/code/session_01FAVXA5mJ5BNhKmv95jxQkQ