Todo¶
Never deployed¶
lifecycle: alpha puts this role into the CI deploy matrix before it has ever run against a real
host, deliberately: the first CI round is its first execution. Everything below the first live
make compose-deploy apps=web-app-socialhome is design-by-source-reading.
Open items that only a live run can settle:
index.htmlships an inline pre-paint theme bootstrap, and the rendered header isscript-src-elem 'self' https://cdn.…with no hash, so it is blocked and the first paint flashes the wrong theme. Pinningcsp.hashes.script-src-elemfixes it but has to be re-pinned on every image bump; the flash is the cheaper trade until the theme matters.meta/csp.ymlwhitelistsblob:onscript-srcfor the audio worklet the DM composer builds withURL.createObjectURL; worklet modules load underscript-src, notworker-src. The bundle registers no service worker and constructs noWorker. Whether the Preact bundle also needsunsafe-inlinefor style attributes is unknown until a browser reports violations.The published image is multi-arch, but only
linux/amd64has been exercised.Dockerfile.shexposes 8124 for aiolibdatachannel signalling beside 8099. Nothing listens on it at rest, so only 8099 is published; whether it binds lazily during a call is untested.
Blocked personas¶
PERSONA_ADMINISTRATOR_BLOCKED=true
: Social Home 2026.6.16 imports logout from client/src/store/auth.ts in exactly one place —
client/src/main.tsx wires it as the 401 handler via setUnauthorizedHandler(logout). No
component renders a logout control, so personas/utils/logout.js has nothing to click and the
admin journey cannot complete. The alternative — injecting a [data-injected-logout] button via
templates/javascript.js.j2 — was rejected: the model
(roles/web-app-prometheus/templates/javascript.js.j2) points the button at
OIDC.CLIENT.LOGOUT_URL, which only exists for OIDC-gated roles, and this role deliberately runs
without SSO. Path back: upstream ships a logout control (or an in-app logout endpoint we can
target), then drop the flag and keep the adminInteraction already wired in the spec.
PERSONA_BIBER_BLOCKED=true
: The app authenticates against its own platform_users table. There is no OIDC client and no
auto-provisioning, so the biber account never exists inside Social Home. Path back: upstream
grows an OIDC/trusted-header auth path.
Deferred wiring¶
SH_MAX_STORAGE_BYTESis pinned to 4 GiB invars/main.ymlso the app’s media cap stays insideservices.socialhome.min_storage(5 GB). Raising one without the other lets the volume outgrow its declared budget.SH_APPS_CATALOG_URLis emptied so the container never fetches the app catalog from github.com. Set it to a self-hosted catalog when one exists.SH_CORS_ALLOWED_ORIGINSis unset — the SPA is same-origin. Needed only if a third-party client should talk to the API.The GFS / global-server side of upstream (
Dockerfile.gfs) is not deployed. Only the household instance (Dockerfile.sh) is.