@cc [owner:Yassimba] serve.fixed-profile
Applies only to `prepare` in `host.py`.

One serve composition fixes its profile selection at startup and denies interactive authentication for
its lifetime. Its Data Product API, Management API, readiness, history, and metadata operations use that
same selection and pinned Project Snapshot. HTTP requests cannot supply profile selection or connection
credentials; changing the profile requires a new host composition.

@cc [owner:Yassimba,test:test_run_history_decision_table_at_list_seam_keeps_the_runs_that_start_in_the_range] serve.runs-start-range
`GET /runs` with `since` and `until` gives only the runs with `since <= started_at < until`.
An absent end has no limit.

@cc [owner:Yassimba,test:test_list_runs_external_contract_at_http_seam_reads_the_time_text_of_the_run_body;test_list_runs_external_contract_at_http_seam_names_the_refused_time] serve.one-time-text
`since` and `until` read the same text in the query of `GET /runs` and in the body of
`POST /runs`: ISO 8601, or a duration back from now. Text that is neither gives a 400
`invalid-request` problem that names the parameter.

@cc [owner:Yassimba,test:test_list_contracts_decision_table_at_http_seam_keeps_one_kind] serve.contract-kinds
Each product in `GET /contracts` matches exactly one value of `kind`.
