diff --git a/apps/api/src/services/mcp_version_lifecycle_service.py b/apps/api/src/services/mcp_version_lifecycle_service.py index d1ecf328a..c4ed3a2c3 100644 --- a/apps/api/src/services/mcp_version_lifecycle_service.py +++ b/apps/api/src/services/mcp_version_lifecycle_service.py @@ -42,7 +42,7 @@ _SOURCE_HOSTS = { } _VERSION_PATTERNS = ( re.compile( - rb"""(?ix)["'](?:version|latestVersion|packageVersion)["']\s*[:=]\s*["']v?""" + rb"""(?ix)["'](?:latestVersion|packageVersion|softwareVersion)["']\s*[:=]\s*["']v?""" rb"""([0-9]+\.[0-9]+\.[0-9]+(?:[-+][0-9A-Za-z.-]+)?)["']""" ), re.compile( diff --git a/apps/api/tests/test_mcp_version_lifecycle_service.py b/apps/api/tests/test_mcp_version_lifecycle_service.py index 17c3f77de..15fc35bd4 100644 --- a/apps/api/tests/test_mcp_version_lifecycle_service.py +++ b/apps/api/tests/test_mcp_version_lifecycle_service.py @@ -90,7 +90,7 @@ async def test_lifecycle_run_persists_baselines_and_fail_closed_terminals() -> N status="ok", source_url=url, http_status=200, - body=b'{"version":"1.2.3","content":"not persisted"}', + body=b'{"packageVersion":"1.2.3","content":"not persisted"}', ) result = await run_mcp_version_lifecycle_once( @@ -127,7 +127,7 @@ async def test_lifecycle_run_persists_baselines_and_fail_closed_terminals() -> N def test_changed_version_stops_before_replay_without_immutable_receipts() -> None: - old_body = b'{"version":"1.2.3"}' + old_body = b'{"packageVersion":"1.2.3"}' candidate = _catalog()["capabilities"][0] observation = build_candidate_observation( candidate, @@ -135,7 +135,7 @@ def test_changed_version_stops_before_replay_without_immutable_receipts() -> Non status="ok", source_url=candidate["catalog_url"], http_status=200, - body=b'{"version":"1.3.0"}', + body=b'{"packageVersion":"1.3.0"}', ), previous={ "observed_version": "1.2.3", @@ -201,13 +201,20 @@ async def test_source_failure_is_durable_partial_degraded_no_write() -> None: def test_version_parser_rejects_ambiguous_page_versions() -> None: - assert _extract_unambiguous_version(b'{"version":"1.2.3"}') == "1.2.3" + assert _extract_unambiguous_version(b'{"packageVersion":"1.2.3"}') == "1.2.3" assert ( - _extract_unambiguous_version(b'{"version":"1.2.3","latestVersion":"2.0.0"}') + _extract_unambiguous_version( + b'{"packageVersion":"1.2.3","latestVersion":"2.0.0"}' + ) is None ) +def test_version_parser_ignores_cloudflare_beacon_version() -> None: + body = b"data-cf-beacon='{\"version\":\"2024.11.0\",\"token\":\"public\"}'" + assert _extract_unambiguous_version(body) is None + + def test_stable_fingerprint_ignores_randomized_recommendation_sections() -> None: stable_head = b"""