Deployment and Services
This page covers the operational entry points for the SDLX development stack. Module-specific configuration remains inside each project directory; credentials and local databases must not be committed.
Start the Stack
From the repository root:
cd /home/flare/sdlx
./run.sh start
./run.sh statusThe default stack includes LabBridge, LabFlow, PACE, ASCEND, and this documentation site. Composer is started separately because its nanobot runtime requires an explicit model key.
Service Directory
| Service | Local port | Responsibility |
|---|---|---|
| LabBridge Admin | 8088 | Devices, Human Tasks, spatial registry, operations, artifacts |
| LabBridge MCP HTTP | 8091 | Agent and scheduler gateway boundary |
| LabBridge MCP WebSocket | 8090 | WebSocket and Xiaozhi MCP clients |
| LabFlow | 8102 | Workflow editing and deterministic execution |
| PACE | 8103 | Loop packages, experiment runs, Result Bundles |
| ASCEND | 8110 | Campaign coordination, chat, iterations, decisions |
| SDLX Docs | 8112 | Searchable architecture and operations documentation |
| Composer | 8120 | Scientific composition and reviewed package generation |
LabFlow
LabFlow reads labflow/config/config.yaml by default. An isolated deployment or recovery test can select a different file without modifying the checked-out configuration:
LABFLOW_CONFIG=/path/to/labflow.yaml labflow/run.sh startASCEND
ASCEND uses the same model configuration shape as Composer, but reads an independent module-local file:
cp ascend/config/config.example.yaml ascend/config/config.yaml
ASCEND_CONFIG=/home/flare/sdlx/ascend/config/config.yaml ascend/run.sh restartConfigure ascend.llm.provider, model, base_url, and api_key. The local config is ignored by Git. ASCEND renders its private nanobot config into ascend/run/; it does not read Composer's key, sessions, or workspace.
Documentation Site
The documentation site reads Markdown directly from docs/:
docs-site/run.sh build
docs-site/run.sh start
docs-site/run.sh statusUse DOCS_HOST and DOCS_PORT to override the default 0.0.0.0:8112 binding.
The documentation runtime exposes GET /api/status. It queries LabBridge, LabFlow, PACE, ASCEND, and Composer in parallel and returns a read-only operational summary for the live dashboard on the home page. The browser refreshes the snapshot every 15 seconds; device counts come directly from LabBridge rather than from generated documentation.
Use these settings when services are not available on their default loopback ports:
DOCS_LABBRIDGE_URL=http://127.0.0.1:8088/api/summary
DOCS_LABFLOW_URL=http://127.0.0.1:8102/api/health
DOCS_PACE_URL=http://127.0.0.1:8103/api/health
DOCS_ASCEND_URL=http://127.0.0.1:8110/api/health
DOCS_COMPOSER_URL=http://127.0.0.1:8120/health
DOCS_STATUS_TIMEOUT_MS=1500Reverse Proxy
Recommended public routes:
bridge.sdl.digauto.org -> 8088
mcp.sdl.digauto.org -> 8091
flow.sdl.digauto.org -> 8102
pace.sdl.digauto.org -> 8103
ascend.sdl.digauto.org -> 8110
docs.sdl.digauto.org -> 8112During the ASCEND rename, helm.sdl.digauto.org may remain as a temporary compatibility alias to port 8110. New links and certificates should use ascend.sdl.digauto.org; retire the previous host after clients and bookmarks have migrated.
Terminate TLS and enforce authentication at the proxy. Do not expose MQTT, EMQX management, MinIO internals, SQLite files, or controller polling endpoints directly.
Recovery Verification
The contract suite checks state-machine behavior in-process. The live recovery suite starts isolated real services, writes persistent records, force-stops every process, restarts them, and verifies records through HTTP:
scripts/test-golden-loop-recovery.sh
scripts/test-live-process-recovery.shSet SDLX_RECOVERY_PORT_BASE when the default isolated port range beginning at 18288 is in use.