Task Owner Config Contract¶
Task owner YAML is the identity of a composed task/backend/algorithm path. The contract is recorded in ADR-0003 Task Owner And Config Compose Contract.
Owner Paths¶
PPO and APPO owner YAMLs use
src/unilab/conf/{ppo,appo}/task/<task>/<backend>.yaml.Off-policy algorithms (SAC / TD3 / FlashSAC) each have their own config tree:
src/unilab/conf/<algo>/task/<task>/<backend>.yaml.
Required Semantics¶
Use public CLI flags to switch backend, for example
uv run train --algo ppo --task go2_joystick_flat --sim mujocooruv run train --algo ppo --task go2_joystick_flat --sim motrix.For off-policy entrypoints,
--algo <algo>selects the per-algorithm config tree; the owner YAML path issrc/unilab/conf/<algo>/task/<task>/<backend>.yaml.training.sim_backendis an identity field inside the selected owner YAML. It is not an independent backend switch.Backend-specific reward, env, scene, and algorithm differences belong in the owner YAML, not in training scripts.
Reward config must be explicitly injected by the owner YAML when the task uses rewards.
Evidence In Repo¶
PPO owner example:
src/unilab/conf/ppo/task/go2_joystick_flat/mujoco.yamlAPPO config root:
src/unilab/conf/appo/config.yamlOff-policy config roots:
src/unilab/conf/{sac,td3,flashsac}/config.yamlConfig tests:
tests/config/test_config_system.py,tests/scripts/test_train_script_configs.py,tests/envs/locomotion/g1/test_g1_owner_contract.py