Skip to content

Commit c3fcbe1

Browse files
committed
fix(release): restore full smoke gate health
1 parent fbbcae8 commit c3fcbe1

8 files changed

Lines changed: 32 additions & 7 deletions

File tree

CHANGELOG.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,9 @@ record also lives in the git commit messages.
2222

2323
### Fixed — release process
2424

25+
- Release smoke now catches MCP registry version drift, the committed MCP
26+
registry manifest is back on the package version, and stale UXP harness/i18n
27+
guardrails have been brought back in sync.
2528
- README test-count badge now syncs to the live suite count so the release
2629
readiness gate stays green after new coverage lands.
2730
- Release smoke and doc-size drift checks now target only live documentation

extension/com.opencut.uxp/locales/en.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
"uxp.runtime.file_browser_unavailable": "File browser not available in this environment.",
2626
"uxp.runtime.folder_browser_unavailable": "Folder browser not available in this environment.",
2727
"uxp.runtime.invalid_https_authorization_url": "Invalid HTTPS authorization URL received from server.",
28+
"uxp.runtime.job_already_running": "Another OpenCut job is already running.",
2829
"uxp.runtime.job_cancelled": "Job cancelled.",
2930
"uxp.runtime.just_now": "just now",
3031
"uxp.runtime.no_response": "No response.",
@@ -35,6 +36,7 @@
3536
"uxp.runtime.premiere_api_available": "UXP Premiere Pro API available.",
3637
"uxp.runtime.saved": "saved",
3738
"uxp.runtime.select_clip_first": "Select a clip first.",
39+
"uxp.runtime.try_other_backend_ports": "Try the other backend ports if this one is unavailable.",
3840
"uxp.cut.runtime.adjust_settings_rerun": "Adjust settings and rerun",
3941
"uxp.cut.runtime.adjust_settings_rerun_title": "Refine the thresholds or switch cleanup mode, then run another pass.",
4042
"uxp.cut.runtime.apply_latest_cuts": "Apply latest cuts to timeline",
@@ -1022,6 +1024,7 @@
10221024
"uxp.guide.writeback_ready_title": "Generate cuts or markers first, then bring them back to the sequence.",
10231025
"uxp.status.backend_connected": "OpenCut backend connected.",
10241026
"uxp.status.backend_offline": "OpenCut backend offline. Start the local service to run jobs.",
1027+
"uxp.status.scanning_backend_ports": "Scanning OpenCut backend ports...",
10251028
"uxp.status.server_reconnected": "Server reconnected.",
10261029
"uxp.status.update_available": "OpenCut v{version} available - visit GitHub to update",
10271030
"uxp.status.workspace": "{workspace} workspace",

extension/com.opencut.uxp/locales/es.json

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,7 @@
2626
"uxp.runtime.file_browser_unavailable": "El selector de archivos no esta disponible en este entorno.",
2727
"uxp.runtime.folder_browser_unavailable": "El selector de carpetas no esta disponible en este entorno.",
2828
"uxp.runtime.invalid_https_authorization_url": "El servidor envio una URL de autorizacion HTTPS no valida.",
29+
"uxp.runtime.job_already_running": "Ya hay otro trabajo de OpenCut en ejecucion.",
2930
"uxp.runtime.job_cancelled": "Trabajo cancelado.",
3031
"uxp.runtime.just_now": "ahora",
3132
"uxp.runtime.no_response": "Sin respuesta.",
@@ -36,8 +37,10 @@
3637
"uxp.runtime.premiere_api_available": "API UXP de Premiere Pro disponible.",
3738
"uxp.runtime.saved": "guardado",
3839
"uxp.runtime.select_clip_first": "Selecciona primero un clip.",
40+
"uxp.runtime.try_other_backend_ports": "Prueba los otros puertos del backend si este no esta disponible.",
3941
"uxp.status.backend_connected": "Backend de OpenCut conectado.",
4042
"uxp.status.backend_offline": "Backend de OpenCut desconectado. Inicia el servicio local para ejecutar trabajos.",
43+
"uxp.status.scanning_backend_ports": "Escaneando puertos del backend de OpenCut...",
4144
"uxp.status.server_reconnected": "Servidor reconectado.",
4245
"uxp.status.update_available": "OpenCut v{version} disponible - visita GitHub para actualizar",
4346
"uxp.status.workspace": "Espacio {workspace}",

opencut/_generated/mcp_server_registry.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
}
1919
}
2020
},
21-
"generated_at": "2026-06-06T19:48:01Z",
21+
"generated_at": "2026-06-12T12:15:58Z",
2222
"homepage": "https://github.com/SysAdminDoc/OpenCut",
2323
"install": {
2424
"command": "pip install \"opencut[mcp]\"",
@@ -208,5 +208,5 @@
208208
"stdio",
209209
"http"
210210
],
211-
"version": "1.32.0"
211+
"version": "1.33.0"
212212
}

opencut/tools/dump_mcp_registry_manifest.py

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,9 @@ def load_committed(path: Path = MANIFEST_PATH) -> Optional[dict]:
136136

137137

138138
def _comparable(manifest: dict) -> dict:
139-
"""Strip timestamp + version so we don't fail closed on
140-
expected-to-drift fields."""
139+
"""Strip only the timestamp so public registry metadata cannot drift."""
141140
compare = dict(manifest)
142141
compare.pop("generated_at", None)
143-
compare.pop("version", None)
144142
return compare
145143

146144

tests/test_error_logging.py

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ def ra03_error_response():
6464

6565
def test_safe_open_cut_error_logs_supplied_context(app, caplog):
6666
from opencut.errors import invalid_input, safe_error
67+
from opencut.security import get_csrf_token
6768

6869
bp = Blueprint("ra03_safe_open_cut_error", __name__)
6970

@@ -73,7 +74,12 @@ def ra03_safe_open_cut_error():
7374

7475
app.register_blueprint(bp)
7576
caplog.set_level(logging.WARNING, logger="opencut")
76-
response = app.test_client().post("/ra03/safe-open-cut-error", json={"ok": True})
77+
csrf_token = get_csrf_token()
78+
response = app.test_client().post(
79+
"/ra03/safe-open-cut-error",
80+
json={"ok": True},
81+
headers={"X-OpenCut-Token": csrf_token},
82+
)
7783
request_id = response.headers["X-Request-ID"]
7884

7985
record = _typed_error_record(caplog.records, "INVALID_INPUT")

tests/test_mcp_registry_manifest.py

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,17 @@ def test_manifest_version_matches_package_version():
7676
assert data["version"] == __version__
7777

7878

79+
def test_manifest_diff_detects_version_drift():
80+
live = tool.build_manifest()
81+
committed = dict(live)
82+
committed["version"] = "0.0.0"
83+
84+
diff = tool.diff_manifests(committed, live)
85+
86+
assert diff["changed"] is True
87+
assert "version" in diff["fields"]
88+
89+
7990
def test_manifest_tool_names_are_unique_and_namespaced():
8091
data = json.loads(MANIFEST.read_text(encoding="utf-8"))
8192
names = [tool_entry["name"] for tool_entry in data["tools"]]

tests/test_uxp_udt_harness.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,8 @@ def test_f267_panel_loads_bundled_udt_harness_runner():
9090
html = INDEX_HTML.read_text(encoding="utf-8", errors="replace")
9191
source = UDT_SCRIPT.read_text(encoding="utf-8", errors="replace")
9292

93-
assert 'src="udt-smoke.js"' in html
93+
assert 'localStorage.getItem("opencut_debug") === "1"' in html
94+
assert 'import("./udt-smoke.js")' in html
9495
assert "window.OpenCutUXPUdtHarness" in source
9596
assert "uxp-udt-harness.json" in source
9697
assert "OpenCutUXPHost.executeHostAction" in source

0 commit comments

Comments
 (0)