diff --git a/tests/test_tui_gateway_server.py b/tests/test_tui_gateway_server.py index 31b6d2bd07e..6592a42a9a8 100644 --- a/tests/test_tui_gateway_server.py +++ b/tests/test_tui_gateway_server.py @@ -6139,6 +6139,65 @@ def test_session_most_recent_handles_db_unavailable(monkeypatch): assert resp["result"]["session_id"] is None +# ── verification.status ────────────────────────────────────────────── + + +def test_verification_status_returns_recorded_evidence(tmp_path): + home = tmp_path / ".hermes" + home.mkdir() + token = set_hermes_home_override(home) + project = tmp_path / "project" + project.mkdir() + (project / "package.json").write_text( + json.dumps({"scripts": {"test": "vitest"}}), + encoding="utf-8", + ) + (project / "pnpm-lock.yaml").write_text("", encoding="utf-8") + try: + from agent.verification_evidence import record_terminal_result + + record_terminal_result( + command="pnpm run test", + cwd=project, + session_id="sid", + exit_code=0, + output="green", + ) + + resp = server.handle_request( + { + "id": "1", + "method": "verification.status", + "params": {"cwd": str(project), "session_id": "sid"}, + } + ) + finally: + reset_hermes_home_override(token) + + verification = resp["result"]["verification"] + assert verification["status"] == "passed" + assert verification["evidence"]["canonical_command"] == "pnpm run test" + assert verification["evidence"]["scope"] == "full" + + +def test_verification_status_outside_workspace_is_not_applicable(tmp_path): + home = tmp_path / ".hermes" + home.mkdir() + token = set_hermes_home_override(home) + try: + resp = server.handle_request( + { + "id": "1", + "method": "verification.status", + "params": {"cwd": str(tmp_path), "session_id": "sid"}, + } + ) + finally: + reset_hermes_home_override(token) + + assert resp["result"]["verification"]["status"] == "not_applicable" + + # ── browser.manage ─────────────────────────────────────────────────── diff --git a/tui_gateway/server.py b/tui_gateway/server.py index b6afc03d4eb..b328efa8d6c 100644 --- a/tui_gateway/server.py +++ b/tui_gateway/server.py @@ -4663,6 +4663,30 @@ def _(rid, params: dict) -> dict: return _ok(rid, {"facts": None}) +@method("verification.status") +def _(rid, params: dict) -> dict: + """Best known coding verification evidence for a cwd/session. + + Read-only consumer of the core ledger. It never runs checks and never + upgrades targeted evidence into a repository-wide guarantee. + """ + try: + from agent.verification_evidence import verification_status + + return _ok( + rid, + { + "verification": verification_status( + session_id=params.get("session_id") or params.get("session_key"), + cwd=params.get("cwd"), + ) + }, + ) + except Exception: + logger.exception("verification.status failed") + return _ok(rid, {"verification": {"status": "unknown", "evidence": None}}) + + @method("session.resume") def _(rid, params: dict) -> dict: target = params.get("session_id", "")