diff --git a/cli/planoai/config_generator.py b/cli/planoai/config_generator.py index 934df8be..f97df5fc 100644 --- a/cli/planoai/config_generator.py +++ b/cli/planoai/config_generator.py @@ -70,10 +70,16 @@ def migrate_inline_routing_preferences(config_yaml): errored, so existing v0.3.0 configs keep compiling. Any top-level preference already defined by the user is preserved as-is. - Also bumps ``version`` to ``v0.4.0`` when migration produced any entry, - so brightstaff's v0.4.0 gate for top-level ``routing_preferences`` - accepts the rendered config. + Also bumps ``version`` to ``v0.4.0`` up front (when the config is + ``v0.3.0`` or older) so brightstaff's v0.4.0 gate for top-level + ``routing_preferences`` accepts the rendered config, including configs + that already declare top-level ``routing_preferences`` on a v0.3.0 + version string. """ + current_version = str(config_yaml.get("version", "")) + if _version_tuple(current_version) < (0, 4, 0): + config_yaml["version"] = "v0.4.0" + model_providers = config_yaml.get("model_providers") or [] if not model_providers: return @@ -129,10 +135,6 @@ def migrate_inline_routing_preferences(config_yaml): merged.append(entry) config_yaml["routing_preferences"] = merged - current_version = str(config_yaml.get("version", "")) - if _version_tuple(current_version) < (0, 4, 0): - config_yaml["version"] = "v0.4.0" - print( "WARNING: inline routing_preferences under model_providers is deprecated " "and has been auto-migrated to top-level routing_preferences. Update your " diff --git a/cli/test/test_config_generator.py b/cli/test/test_config_generator.py index bb56153f..3836ce53 100644 --- a/cli/test/test_config_generator.py +++ b/cli/test/test_config_generator.py @@ -672,7 +672,7 @@ model_providers: assert "wildcard" in str(excinfo.value).lower() -def test_migration_noop_when_no_inline_preferences(): +def test_migration_bumps_version_even_without_inline_preferences(): plano_config = """ version: v0.3.0 @@ -689,4 +689,23 @@ model_providers: migrate_inline_routing_preferences(config_yaml) assert "routing_preferences" not in config_yaml - assert config_yaml["version"] == "v0.3.0" + assert config_yaml["version"] == "v0.4.0" + + +def test_migration_does_not_downgrade_newer_versions(): + plano_config = """ +version: v0.5.0 + +listeners: + - type: model + name: model_listener + port: 12000 + +model_providers: + - model: openai/gpt-4o + access_key: $OPENAI_API_KEY +""" + config_yaml = yaml.safe_load(plano_config) + migrate_inline_routing_preferences(config_yaml) + + assert config_yaml["version"] == "v0.5.0"