Composer Control Baseline
Status: Locked.
Purpose
Freeze System Composer control API behavior used by commissioning flows so UI and tooling integrations remain stable.
Canonical Artifacts
- Backend implementation:
tools/system-composer/backend/server.py - OpenAPI contract:
schemas/tools/composer-control.openapi.v1.yaml - OpenAPI validator:
tools/contracts/validate-composer-control-openapi.py - Contract tests:
tools/system-composer/tests/unit/test_control_contract.py - Tooling docs:
tools/system-composer/README.mddocs/http/README.md(contract workflow context)
Locked Behavior Summary
Endpoint Inventory
GET /api/statusPOST /api/projects/{name}/preflightPOST /api/projects/{name}/launchPOST /api/projects/{name}/stopPOST /api/projects/{name}/restartGET /api/projects/{name}/logs(SSE)
Response and Error Shape
- Control endpoints return stable JSON success payloads.
- Error payloads expose stable top-level
errortext. - Validation-failure payloads include structured
errors[]entries. - Expected status semantics:
400invalid project names404unknown project409launch conflict500backend failure
Runtime/Path Decoupling
- Composer path resolution is repo-anchored (
backend/paths.py), not caller-CWD dependent. - Control-plane environment knobs remain:
ANOLIS_COMPOSER_HOSTANOLIS_COMPOSER_PORTANOLIS_OPERATOR_UI_BASEANOLIS_COMPOSER_OPEN_BROWSER
Validation Gates
python3 tools/contracts/validate-composer-control-openapi.pypython3 -m pytest tools/system-composer/tests -q
Drift Notes and Change Rule
- Additive response fields are allowed.
- Existing fields must keep semantics.
- Status-code or payload-shape changes require synchronized updates to implementation, OpenAPI, tests, and this baseline.