Print or copy. Check every box before calling Matrix chat “up.”
-
structs-pghealthy; OIDC Sqitch changes deployed (oidc_*tables exist) -
structs-webappimage/source includes OIDC provider - Guild Docker network name known (e.g.
docker-structs-guild_default) - Public HTTPS for webapp issuer works in a browser
-
.envfilled from.env.example -
./scripts/generate-secrets.shrun (or equivalent) -
OIDC_MAS_CLIENT_SECRETis hex (openssl rand -hex 32). Base64+/=→ MAS 401invalid_client(see TROUBLESHOOTING.md) -
MAS_UPSTREAM_PROVIDER_IDis a real ULID (stable forever for this guild) -
./scripts/render-configs.shproducedconfig/synapse/homeserver.yamlandconfig/mas/config.yaml -
config/secrets/signing.keyexists and is mounted into Synapse
-
docker compose --profile init run --rm matrix-db-initsucceeded -
\lshows databasessynapseandmason structs-pg
-
docker compose up -d—structs-matrixandstructs-mashealthy/running -
curl -sS http://127.0.0.1:8008/_matrix/client/versionsreturns JSON - MAS listens on configured port (default
127.0.0.1:8081)
- OIDC keys generated on webapp (
app:oidc:generate-keyif needed) -
OIDC_ENABLED=true,OIDC_ISSUERmatches public webapp URL (no trailing slash) -
curl -sS https://<webapp>/.well-known/openid-configuration | jq .issuer -
curl -sS https://<webapp>/oauth/jwks | jq '.keys[0].kid'
- MAS upstream provider id matches
MAS_UPSTREAM_PROVIDER_ID - Exact callback URL noted:
https://<mas-host>/upstream/callback/<provider-id> - Webapp seeded:
bin/console app:oidc:seed-clientwith that redirect URI + same client secret as MAS - Trailing slash on redirect URI matches exactly (first failure is usually this)
-
https://<matrix-host>/.well-known/matrix/clientadvertises homeserver + auth issuer (MAS) -
https://<server_name>/.well-known/matrix/server(or delegation) points at federation - Client API and MAS reach browsers over HTTPS
- Federation port 8448 reachable if you federate
- Element (or Element X) can complete login via Structs
- Resulting Matrix ID localpart equals
player.id(e.g.@1-42:...) - Second login with existing webapp session is silent / near-silent
- Cold browser still completes (wallet SPA resume) or blocker documented
-
@guild-botregistered;config/secrets/guild-bot.compatibility-tokenmode600 -
/_matrix/client/versions→org.matrix.msc4108: true - Public rooms appear via
POST /publicRooms/ Element Explore / Comms Browse (visibility: public, not only join_rule) -
allow_public_rooms_over_federation: true;presence.enabled: true; encryption"off";enable_search: true - MAS
displayname.action: force - At least one
#fleet-9-Nensured viascripts/ensure-fleet-room.py(or backfill planned) - CLIENT-CONTRACT.md reviewed with the game-client team
- Full replicate path: UPGRADE.md
- CREW-REFERENCE.md or your guild’s diary updated
- DOCKER-STRUCTS-GUILD-HANDOFF.md reviewed if compose integration is desired later