- Runtime container env injected by docker/entrypoint.sh -> runtime-env.js
(loaded before the bundle); src/lib/runtime-env.ts reads it.
FABRIC_OIDC_ONLY hides the password form; FIX_TO_CENTER pins the
Center base and hides its input. Dockerfile ENTRYPOINT + ENV defaults.
- LoginPage: 'Sign in with SSO' when /auth/oidc/status enabled; password
form gated by OIDC_ONLY; center input gated by FIX_TO_CENTER.
- /oidc route (OidcCallback) redeems the fragment ticket via
/auth/oidc/exchange and adopts the session (AuthContext.adoptSession).
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- create-channel modal: optional bypass multi-select (discuss/work only),
sent as bypassUserIds; reset on open/close.
- members panel (in-channel, discuss/work): bypass members tagged
'bypass'; others get a '→ bypass' action -> POST /channels/:id/bypass.
- loadChannelMembers consumes the new {userId,bypass} member shape.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Closed channels: composer replaced by a read-only banner; history still
viewable; GuildChannel carries closed.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Self-contained, HTML-escaped (XSS-safe) markdown for history messages;
each message rendered independently so a syntax error (e.g. unclosed
code fence) cannot leak into the next message.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- full design system rewrite (dark theme, system tokens)
- chat shell: server rail / channel sidebar / message area / members
- message rows with avatars, author + time; empty/loading states
- login screen redesign; add-guild moved to a modal
- removed debug v1/v2/v4 panel toggles; members toggle in topbar
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>