Hostname composition uses servicelasso.localhost. | service-lasso/tests/traefik-local-route-generation.test.js; service-lasso/tests/local-sso-bootstrap.test.js; service-lasso/tests/local-sso-loop-smoke.test.js | npm run test:local-sso; npm run test:local-sso-loop; full npm test | Tests reject .local shorthand and assert serviceadmin.servicelasso.localhost, auth.servicelasso.localhost, and zitadel.servicelasso.localhost. |
| Generated Traefik dynamic config contains routers/services/middlewares. | service-lasso/tests/traefik-local-route-generation.test.js; service-lasso/tests/local-sso-loop-smoke.test.js | node --test tests/traefik-local-route-generation.test.js; npm run test:local-sso-loop | Covers Service Admin protected route, auth callback route, ZITADEL route, backend services, and middleware chain. |
| Protected route allow/deny behavior. | service-lasso/tests/local-sso-loop-smoke.test.js; service-lasso/lasso-traefik/runtime/protected-serviceadmin.example.yml verified by lasso-traefik/scripts/verify.mjs | npm run test:local-sso-loop; lasso-traefik npm test | Fixture models unauthenticated redirect, authenticated return, and auth-unavailable fail-closed behavior. |
| Header stripping and trusted identity forwarding. | service-lasso/tests/traefik-local-route-generation.test.js; service-lasso/tests/local-sso-loop-smoke.test.js; lasso-traefik/scripts/verify.mjs | npm run test:local-sso-loop; lasso-traefik npm test | Spoofable browser headers are blanked; trusted headers are allowlisted from traefik-oidc-auth. |
| ZITADEL OIDC client bootstrap idempotency. | lasso-zitadel/scripts/oidc-bootstrap.test.mjs | lasso-zitadel npm run test:oidc; npm test | Covers create, verify existing, update drift, and no rotation of credentials unless explicitly requested. |
| Redirect URI and post-logout URI correctness. | lasso-zitadel/scripts/oidc-bootstrap.test.mjs; service-lasso/tests/local-sso-bootstrap.test.js | lasso-zitadel npm run test:oidc; service-lasso npm run test:local-sso | Uses https://auth.servicelasso.localhost/oauth2/callback for ZITADEL client metadata and deterministic local smoke metadata. |
| Callback/session validation boundary. | service-lasso/tests/local-sso-loop-smoke.test.js | npm run test:local-sso-loop | Covered as external/plugin-owned traefik-oidc-auth callback/session fixture evidence; core does not own session mechanics. |
| Service Admin authenticated/unauthenticated/forbidden/expired/workspace mismatch states. | lasso-serviceadmin/src/features/auth-session/zitadel-session.test.tsx | targeted vitest auth-session tests; npm run build | Renders safe identity, workspace, role, permission, and audit actor metadata only. |
| End-to-end Service Admin login return smoke path. | service-lasso/tests/local-sso-loop-smoke.test.js | npm run test:local-sso-loop | Deterministic smoke contract verifies redirect, callback return, and authenticated Service Admin page evidence. |
| Fail-closed auth unavailable/ZITADEL unavailable behavior. | service-lasso/tests/local-sso-loop-smoke.test.js; lasso-traefik/scripts/verify.mjs; lasso-serviceadmin/src/features/auth-session/zitadel-session.test.tsx | npm run test:local-sso-loop; lasso-traefik npm test; Service Admin targeted tests | Protected apps must not have default unauthenticated bypass routes. Missing/invalid identity context fails closed. |
| Secret-leak regression across page text, logs, generated config, diagnostics, snapshots, headers, and fixtures. | service-lasso/tests/secret-leak-harness.test.js; service-lasso/tests/local-sso-loop-smoke.test.js; service-lasso/tests/local-sso-bootstrap.test.js; lasso-zitadel/scripts/oidc-bootstrap.test.mjs; lasso-serviceadmin/src/features/auth-session/zitadel-session.test.tsx; lasso-serviceadmin/src/features/secrets-broker/secrets-broker-setup.test.tsx | Full repo tests and targeted SSO tests listed above | Deny-list covers ID/access/refresh tokens, client secrets, session cookies, provider credentials, raw secret values, private keys, bearer material, and raw env-like values. |