APP_BASE_URL={{ lookup('tls', application_id, 'url.base') | dotenv_quote }} CANONICAL_DOMAIN={{ lookup('domain', application_id) | dotenv_quote }} # nocheck: playwright-service-gate — the CSP helper gates css through a computed loop variable (personas/utils/csp.js:87-93), never a literal argument, so test_spec_env_gates.py's literal-only regex cannot see the gate CSS_SERVICE_ENABLED={{ lookup('config', application_id, 'services.css.enabled') | string | lower }} # nocheck: playwright-service-gate — meta/services.yml pins ldap.enabled true because LDAP IS the storage backend, so no disabled variant exists to gate LDAP_SERVICE_ENABLED={{ lookup('config', application_id, 'services.ldap.enabled') | string | lower }} LOGOUT_SERVICE_ENABLED={{ lookup('config', application_id, 'services.logout.enabled') | string | lower }} MATOMO_BASE_URL={{ lookup('tls', 'web-app-matomo', 'url.base') | dotenv_quote }} MATOMO_SERVICE_ENABLED={{ lookup('config', application_id, 'services.matomo.enabled') | string | lower }} # nocheck: persona-block-rationale — phpLDAPadmin authenticates with an LDAP bind DN and the openldap administrator_database_password (group_vars/all/12_ldap.yml:36,66), not with the Keycloak `administrator` username/password pair, so the persona has no in-app credential behind the oauth2-proxy (see README "Persona contract opt-outs"). PERSONA_ADMINISTRATOR_BLOCKED=true # nocheck: persona-block-rationale — meta/services.yml admits only the web-app-phpldapadmin administrator RBAC group to the oauth2-proxy (sso.oauth2.allowed_groups) and biber carries no roles, so biber is denied at the proxy before phpLDAPadmin is reached (see README "Persona contract opt-outs"). PERSONA_BIBER_BLOCKED=true SSO_SERVICE_ENABLED={{ lookup('config', application_id, 'services.sso.enabled') | string | lower }}