All checks were successful
ci/woodpecker/pr/ci Pipeline was successful
Implements RFC-001 P1 (the first shippable slice): deterministic Matrix presence/liveness on a single-instance dev Synapse. - infra/matrix/: DEV Synapse (RFC-002 Mode B, federation OFF, self-signed TLS, enable_registration:false, appservice registration wired). Rendered from parameterized templates — zero hardcoded topology. .data is gitignored. - packages/comms/: minimal MACP presence SDK — set presence, run the mosaic.presence heartbeat (seq + interval per RFC-001 §4.5), and a deterministic liveness reader (online/away/offline from heartbeat age, NOT native-presence-timeout). Liveness core written RED-FIRST. 19 vitest tests. - tools/matrix-presence-harness/: minimal provisioner (registers >=3 agent MXIDs, creates the fleet presence room, joins them — reuses the existing @mosaicstack/appservice intent lib) + an E2E validation harness proving A2/A3/A4 against a real Synapse. - eslint.config.mjs: register packages/comms/vitest.config.ts with the type-aware project service (same as other packages' vitest configs). DEV-compose validated only; production deploy is a separate coordinated step (deploy-holds respected). Part of the comms-evolution program (RFC-001 P1) Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_0158NZqN2n2ymKFeJAZ4GUCb
61 lines
2.1 KiB
YAML
61 lines
2.1 KiB
YAML
# ============================================================================
|
|
# docker-compose.dev.yml — Synapse DEV homeserver for RFC-001 P1 (presence)
|
|
# ============================================================================
|
|
#
|
|
# *** DEV-ONLY. LOCAL SANDBOX. Do NOT point this at, or run alongside, any
|
|
# live/production homeserver. ***
|
|
#
|
|
# Single-instance Synapse (RFC-002 Mode B, federation OFF) + an optional
|
|
# Element web client for the human view (A4). Brought up by ./dev-up.sh, which
|
|
# renders config into ./.data (gitignored) first.
|
|
#
|
|
# Isolated by design: dedicated project name + network + high host ports so it
|
|
# never collides with other stacks on the box (A5).
|
|
#
|
|
# Host ports: ${MATRIX_HTTP_PORT:-18008} -> Synapse 8008 (plain HTTP)
|
|
# ${MATRIX_TLS_PORT:-18448} -> Synapse 8448 (self-signed TLS)
|
|
# ${ELEMENT_PORT:-18080} -> Element web (profile: element)
|
|
# ----------------------------------------------------------------------------
|
|
name: matrix-p1-dev
|
|
|
|
services:
|
|
synapse:
|
|
image: matrixdotorg/synapse:latest
|
|
container_name: matrix-p1-synapse
|
|
restart: 'no'
|
|
# Run against the rendered config in /data (dev-up.sh puts it there).
|
|
environment:
|
|
SYNAPSE_CONFIG_DIR: /data
|
|
SYNAPSE_CONFIG_PATH: /data/homeserver.yaml
|
|
volumes:
|
|
- ./.data:/data
|
|
ports:
|
|
- '127.0.0.1:${MATRIX_HTTP_PORT:-18008}:8008'
|
|
- '127.0.0.1:${MATRIX_TLS_PORT:-18448}:8448'
|
|
networks:
|
|
- matrix-p1-net
|
|
healthcheck:
|
|
test: ['CMD-SHELL', 'curl -fsS http://localhost:8008/health || exit 1']
|
|
interval: 3s
|
|
timeout: 5s
|
|
retries: 40
|
|
start_period: 5s
|
|
|
|
# Optional human view (A4). `docker compose --profile element up -d element`.
|
|
element:
|
|
image: vectorim/element-web:latest
|
|
container_name: matrix-p1-element
|
|
restart: 'no'
|
|
profiles: [element]
|
|
volumes:
|
|
- ./.data/element-config.json:/app/config.json:ro
|
|
ports:
|
|
- '127.0.0.1:${ELEMENT_PORT:-18080}:80'
|
|
networks:
|
|
- matrix-p1-net
|
|
|
|
networks:
|
|
matrix-p1-net:
|
|
name: matrix-p1-net
|
|
driver: bridge
|