Files
computer-playbook/roles/web-app-openclaw/templates/playwright.env.j2
kevinveenbirkenbachandClaude Opus 5 a2bbce6b55 docs(personas): record why openclaw blocks in-app logout and biber
Two persona-block-rationale directives, in the form aef525f91 used for
hermes, homeassistant and litellm.

The Control UI is a WebSocket SPA whose session sits behind gateway device
pairing and exposes no DOM logout control for the shared inAppLogout helper,
so files/playwright/test-oidc-login.js covers the SSO round trip instead.
biber is refused at the oauth2 proxy, which admits only the administrator
and mcp RBAC groups.

Both checkable claims verified: allowed_groups lists exactly those two
groups, and the substitute spec exists. Coverage moves rather than
disappears.

The missing logout control itself is not verified; openclaw was not deployed
this session, and it is a product claim that a UI update could invalidate
without anyone touching the directive.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-08-28 13:16:28 +02:00

42 lines
2.0 KiB
Bash

ADMIN_PASSWORD={{ lookup('users', 'administrator').password | dotenv_quote }}
ADMIN_USERNAME={{ lookup('users', 'administrator').username | dotenv_quote }}
APP_BASE_URL={{ lookup('tls', application_id, 'url.base') }}
BIBER_PASSWORD={{ lookup('users', 'biber').password | dotenv_quote }}
BIBER_USERNAME={{ lookup('users', 'biber').username | dotenv_quote }}
CANONICAL_DOMAIN={{ lookup('domain', application_id) | dotenv_quote }}
# nocheck: playwright-service-gate
CSS_SERVICE_ENABLED={{ lookup('config', application_id, 'services.css.enabled') | string | lower }}
# nocheck: playwright-service-gate
LITELLM_SERVICE_ENABLED={{ lookup('config', application_id, 'services.litellm.enabled') | string | lower }}
LOGOUT_SERVICE_ENABLED={{ lookup('config', application_id, 'services.logout.enabled') | string | lower }}
# nocheck: playwright-service-gate
MATOMO_SERVICE_ENABLED={{ lookup('config', application_id, 'services.matomo.enabled') | string | lower }}
# nocheck: playwright-service-gate
MCP_SERVICE_ENABLED={{ lookup('config', application_id, 'mcp.enabled') | string | lower }}
NODE_TLS_REJECT_UNAUTHORIZED=0
OIDC_ISSUER_URL={{ OIDC.CLIENT.ISSUER_URL | dotenv_quote }}
OPENCLAW_BASE_URL={{ lookup('tls', application_id, 'url.base') | dotenv_quote }}
OPENCLAW_GATEWAY_TOKEN={{ lookup('config', application_id, 'secrets.credentials.gateway_token') | dotenv_quote }}
# nocheck: persona-block-rationale: the OpenClaw Control UI is a WebSocket SPA whose session lives behind gateway device pairing, so it exposes no DOM logout control the shared inAppLogout helper can reach. files/playwright/test-oidc-login.js covers the SSO round trip instead (see TODO.md).
PERSONA_ADMINISTRATOR_BLOCKED=true
# nocheck: persona-block-rationale: meta/services.yml admits only the web-app-openclaw administrator and mcp RBAC groups to the oauth2 proxy (sso.oauth2.allowed_groups) and biber carries neither, so biber is refused at the proxy before the Control UI is reached.
PERSONA_BIBER_BLOCKED=true
SSO_SERVICE_ENABLED={{ lookup('config', application_id, 'services.sso.enabled') | string | lower }}