Parent
Part of #17.
What to build
wso2 login end to end for a browser identity: resolve the selected context and its identity, discover the issuer (requiring S256), bind the first free loopback callback port of 10425–10428, always print the authorization URL while opening the browser best-effort, run Authorization Code + PKCE, verify the ID token, store the session in the OS secure store under the identity's credential reference, and report the authenticated subject, email, and the product namespaces the identity claims to reach — never any token material.
Refusals, each a stable typed problem: no context selected; non-interactive mode (flag or environment) for an interactive kind; client-credentials or development-credential kind (login not required — access is acquired inline); device or PAT kind (not implemented); discovery failure or missing S256.
Detailed steps: implementation plan docs/superpowers/plans/2026-08-05-login-first-slice.md, Tasks 6–7.
Acceptance criteria
Blocked by
Parent
Part of #17.
What to build
wso2 loginend to end for a browser identity: resolve the selected context and its identity, discover the issuer (requiring S256), bind the first free loopback callback port of 10425–10428, always print the authorization URL while opening the browser best-effort, run Authorization Code + PKCE, verify the ID token, store the session in the OS secure store under the identity's credential reference, and report the authenticated subject, email, and the product namespaces the identity claims to reach — never any token material.Refusals, each a stable typed problem: no context selected; non-interactive mode (flag or environment) for an interactive kind; client-credentials or development-credential kind (login not required — access is acquired inline); device or PAT kind (not implemented); discovery failure or missing S256.
Detailed steps: implementation plan
docs/superpowers/plans/2026-08-05-login-first-slice.md, Tasks 6–7.Acceptance criteria
wso2 logincompletes PKCE and the stored session holds the issuer, a refresh token, and expiry under the identity's credential referencego test ./... -racepassesBlocked by