From 1c5b25b318cdf21df072f99dbd78b57eda1aeb49 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?C=C3=BAper=20=28Yousef=29=20Anas?=
<97895153+Cuuper22@users.noreply.github.com>
Date: Wed, 2 Sep 2026 23:27:31 -0700
Subject: [PATCH] fix: bust observatory bridge cache
---
docs/observatory.html | 2 +-
tests/test_webmcp_contract.py | 13 +++++++++++++
2 files changed, 14 insertions(+), 1 deletion(-)
diff --git a/docs/observatory.html b/docs/observatory.html
index b075565..7b7a9ad 100644
--- a/docs/observatory.html
+++ b/docs/observatory.html
@@ -16,7 +16,7 @@
-
+
diff --git a/tests/test_webmcp_contract.py b/tests/test_webmcp_contract.py
index 4b30011..d513d07 100644
--- a/tests/test_webmcp_contract.py
+++ b/tests/test_webmcp_contract.py
@@ -13,6 +13,7 @@
ROOT = Path(__file__).resolve().parents[1]
ADAPTER = ROOT / "docs" / "webmcp-tools.js"
+OBSERVATORY_HTML = ROOT / "docs" / "observatory.html"
TOOL_ORDER = [
"get_observatory_state",
@@ -371,3 +372,15 @@ def test_adapter_documents_late_bound_bridge_and_human_only_approval() -> None:
assert "window.GPUStackMission.invoke(toolName, validatedArgs, { signal })" in source
assert "approval remains an explicit page-only human act" in source
assert "This never approves or commits it" in source
+
+
+def test_observatory_load_order_and_cache_keys_include_the_bridge_release() -> None:
+ html = OBSERVATORY_HTML.read_text(encoding="utf-8")
+ scripts = [
+ 'observatory.js?v=20260903.1',
+ 'webmcp-tools.js?v=20260903.1',
+ 'webmcp-mission.js?v=20260903.1',
+ ]
+
+ assert all(script in html for script in scripts)
+ assert [html.index(script) for script in scripts] == sorted(html.index(script) for script in scripts)