2 Architecture Constraints

Technical Constraints

ConstraintRationale
Three runtime components only: Go binary, Elixir release, PostgreSQLEliminates Redis, NATS, Kafka; reduces ops surface
OIDC-only authenticationNo local auth path, no password hashing, no brute-force guards at app level - IdP owns identity
Docker Compose as sole supported deployment targetKubernetes is possible but unsupported; reduces target complexity for primary audience
Matrix Client-Server API compatibilityIncompatibilities with Element/FluffyChat are treated as bugs (NFR-M1, NFR-M2)
Apache 2.0 license for all dependenciesNo AGPLv3, BSL, or SSPL dependencies permitted
TLS 1.3 on all external connectionsMandatory for client↔gateway; optional but recommended internally
Go Gateway is sole PostgreSQL schema ownerMigrations run via golang-migrate at gateway startup; Elixir has no schema-write access
ETS replaces RedisSession state, since-token cursors, and presence state in ETS (in-memory) with PostgreSQL checkpoint
pg Process Groups replace NATS/KafkaPub/sub fanout via Elixir pg groups; no external message broker
No federation (MVP)Matrix Server-Server API is explicitly excluded; ~40% complexity reduction; architecturally prepared for Phase 3

Organizational Constraints

ConstraintRationale
Agent-driven development (BMAD Method)All stories pass through SM → ATDD → Dev → Test Review → Code Review → Security Review gates
Open-source quality standardCode must withstand external review; no insider-only patterns
Changelog required at every releaseDocumented migration path for operators; backward-compat minor updates

Component Version Pins

ComponentVersionNotes
Go1.26golang:1.26-alpine base image
Elixir1.19elixir:1.19-alpine base image
Erlang/OTP27Bundled with Elixir 1.19; native Ed25519/X25519 via :crypto
Alpine3.23Builder and runtime must match to avoid OpenSSL crashes
PostgreSQL16postgres:16-alpine

Source: _bmad-output/planning-artifacts/architecture.md, §Technical Constraints & Dependencies, §Pinned Versions