Composer Control Baseline
Status: Locked.
Purpose
Freeze Workbench control API behavior used by commissioning flows so UI and tooling integrations remain stable.
Canonical Artifacts
- Backend implementation:
anolis_workbench/server/app.py - OpenAPI contract:
contracts/composer-control.openapi.v1.yaml - OpenAPI validator:
contracts/validate-composer-control-openapi.py - Contract tests:
tests/unit/test_control_contract.py - Tooling docs:
README.mdcontracts/runtime-http.openapi.v0.yaml(contract workflow context)
Locked Behavior Summary
Endpoint Inventory
GET /api/statusGET /api/configPOST /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 (
anolis_workbench/core/paths.py), not caller-CWD dependent.Control-plane environment knobs remain:
ANOLIS_WORKBENCH_HOSTANOLIS_WORKBENCH_PORTANOLIS_OPERATOR_UI_BASEANOLIS_TELEMETRY_URLANOLIS_WORKBENCH_OPEN_BROWSER
Validation Gates
python3 contracts/validate-composer-control-openapi.pypython3 -m pytest 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.
